diff --git a/Hardware/V0_2/master/PCB_Project/__Previews/Sheet1.SchDocPreview b/Hardware/V0_2/master/PCB_Project/__Previews/Sheet1.SchDocPreview index 9e5380e..e1b849b 100644 --- a/Hardware/V0_2/master/PCB_Project/__Previews/Sheet1.SchDocPreview +++ b/Hardware/V0_2/master/PCB_Project/__Previews/Sheet1.SchDocPreview @@ -2,13 +2,13 @@ LargeImageOriginalSize=718000 LargeImageWidth=500 LargeImageHeight=359 -LargeImage=789CECBD777023599A27F6FBEF2485B417D2AE6257A7DD8DDB5B459C4217D2E966B537BB37B13BDAD91D6F6E7AA67D4FF7B49F36D3D5A6BABAABCB76777597637996A12F7A0FD0808423404F9000410024E14102A005414F90A0AB1AB5F2250B590008820099004120FF78915F66BE975FBE7CBF7CBFF77DCFA55DBD0EA9BC25E5425A8AE63B95F39EAAF94EE5BCA76ABE5339EFA99A6F5F587FF84DCA8554CD772AE73D55F39DCA794FD57CA772DE5335DF0799779D7D1AE37663CAE5BBCF36854E59634A96794BB71A5EAF27E5F24D82CD39929265DEA6D4A66499DB5D5EA8BA5B53B2CC27DCB329996FDBD8227A52B4CC7B9CAB5870F6A55CBE49D0E8F42959E64D6A0BA6860E2EEF0795EFD63E2B7232AEA56499EB271631621848B97C0BE5EDC82FCC4BC932373A67E1F51C1CA71F54BE7BAD33E015DD4BC9326F334C62C9654DB97C0F4FCE43DC509F92655EDFD68F25B72DE5F24D82ACB53D25CBBCBAB119F3B3D32997EF71CF265A9BC42959E6CD3DFDB0990C29976F9DC58D16496AD6ED071D5235DFA99CF754CD772AE73D55F39DCA794FD57C87CBBB52AD65C6CB75F7F68594C3DD8B348D42A5DE57FABDC6CBCEBD1F563F1B798B44F6D71F2F9DE555BC80F4B12A8383C04025AF66C778FEF98E447F326180E03D5CFA44C6C07EF484CBF74EB849160CF8EAB848F399A81888F6D9C1651EE937085706CDED9D09830112A2E573FFEB2B1B0F42CAE1EE459A666165755FE9F71B6F27FD6CE42D5AFDF1D2199C3E566570101808C6338781C38F0136F544829B64C6802F9FE50D4DF078E651D128437E7E3EB4BA7E4C8C8FEF9A7E7EF501CAAA6A61349930E69A81AC5901814C0AA3D18C820A3EDA9BEA2114C9905D26C2B85D0FFB841BCEF129882572544A9B90919E0FB1980F594B2BFA07FBD1D2D20EBE408009EA5915D43B95506DEEA6EE6E94D68A71E9763E6A6BAA51905F80A28A6AC8857C56BE0DF906930BEBC82E2882B0A1967EDF93D7EE43266A44B35C0479B30699B70B611E32203B3B0F52A904251595F43B260206383EE7EAF2C35A9747AB9FE3F3E4C300C7E7ECE7B352DC8A5EA5028DAD5DB879B71825C53911F1B97A6C05A6AE46B816BD18D499206C6BC60275BD5ED80189BC1997CE9F4451110FD985A570D8B7C6470D395D907775A349D5838B9F5C44617515EE646522273F130DFC6AB47475D2F10A2A1AA8F681144D6A256EE79623BB428675B719A7CF5FC79DBC22C8453C56BE8DEF1B483B1528A4789ABCEF558ABFEBEB4AC0AB6F4066161FE9E76F6176651669D7EEE2E8D9CB9009051832F7270406F6C2E7C4BEF7FD4B9ED5F59072B87B91A6995B5ADE57FAFDC6DB493F1B798B567FBC7406A78F55191C0406445219878124C3009B7A22C14D3263C0D7E7F4D9B9CB3873EA38EE1454A230F31E7D4D201233FE5CF23D76928F7F711E776FDF40754D1D3EFDE2020A4A2B703FEBEEB678E4FE967F9B8FCBE919F8FAEA0D1467DF0BF01BF3EB04B87C7D6BFD97CFBE3C8FEA8A5214F0C5B876E5062EDD2BC2471F1F43514E7AD8F7D94D0E3E27EBCD9453F6FFEF3FF810972E7CC15CF7CF3F0945FC46FCFEBDF7713F3763DF3A239183F5EF148FF42744CBE79C7D9E5CEDF270E913D9368B563F679F271F06D8D413096E921903BE7C8ADA553497F60DE8D1D2224747EF2084622166A777F729CBDADAE9F5438C3A1594E6517A3D8D56A51ECE21339ABAD4181CEC8744D28CAA4609E42D6D181F77EC0B036C638D7C0397E71B340AEBD1D9DE8266851AEDAD32885A3AA15069B0BEE6A5E391BE85FA7A09DABA9574DF44A26080F3B77375F961ADCBA3D5CFF179F26180E373F6F3497CCD132B0F70FAEC795C4BBF85F4AC327C7EEA48447C4EFCE364FD90715B1FA626C6E8F5345A3A3B5058518359EF3A78CD3A08654D18D4B462CC398A0EBFB99A89C2E7D36BDF2027A7189525A548CFAB46DA971FE2F7A72E2027EB36C3E746F72AD2AEDF425ED675CCCFBA1306039CBF9DF3B51E565F6BB4FA397F7BF26180F3B7B3EF6F7FE7D829BCF9DE47A828C8A0CF8BCB2B23F6B79FFAE20B9CBB5B0A417916D2D23371E2D8517C7AE66B64E4E4E0FC852B38F3C539BCFBCE11BCFFE9191C39F201F2EE5E8BC827BD93FEBDF8AE77F3B797095AF0DE9BAFE0F3D32703F493EF109CE646D67DE464DEE5FCEDFB6893ED57E75EDA446CE72D5AFDF1D2199C3E916DB368F573F679F261804D3D91E0269931102E9F9160602FFFD77E31C0B69EFD9641ACB891F3B7B35B86C9FC1F1FD6BA3C5AFD1C9F271F06E25197737CCEF139C7E7895597EFB70C93F93F3EAC7579B4FA393E0F23AFAD636DF3E1A1C3403CEAF254E4F3B1B915D82C4634C83AA1EC6EE7F83C89F99CEB3F4FAE7EB3C3DA771AAD7EAEFF7C67B9A67B182B5EEFA1C300D77F1EBB7CF2A4ED90360850515547BDC34254E9E38501B6F5ECB70C76C24ABC30D0AD5247CDE79C7D9E5CEDF270E913D9368B563F679F8796AF363B70ED0F0F7167681653B36B870A036CEA890437C98A8150F9942A4C989D71A2BE96C7D9E7496C9F737C9E5CFF71B8F4895C9747AB9FE3F3D0F23F9F6DC727538BF8FC9B6F9023771C2A0CC4A32E4F553E8F16031C9F1F4E3EE7FCEDC9E5670B973E917DADD1EAE7FCEDA1E51F7CD18E1FDE51E388761459B2E143858178F85A53D5DF1E2D06387F3BE76F0F9786B3CF39FB9CB3CF638F819FA6F7E2E516073E9B5FE6ECF35D7093AC18F0CF679B52875AA91477B20B21AA2E419DA4193333D311A7EF354CC2393684765527AEA415A0A6241BC57562DCBD9303A9B81E352219EA78E1D75B8F14036C636DBF6540BE81973A9656F22014B552DF4E8A3EBD1306733FAAAB7828ABA94556563E0A7855F4BE2E4B3376D6F5FBC7F30F1C9F277F5DBE5BFA44AECBA3D5CFF17968F9894C15ED6BFFBDD1CDF1F92EB849560CF8E753DEA54663732B84B58D282B2CC4A9B43B989EB0459C7ED8B98A928AFB90F76A519C5D051EAF1C394545B8979E8B0661154E5EBE83BCBBB7B0BEB19E947C4E8E17334BE93D624EA5DD43756916440A0DF2EF57A2A9AD993AAF467A413EBDAFCBFADAFC81F339E76F7F7CDE6F5F467DBD01B2262B46E6BCA8AA1A00BFCE8431BBFBD0F8D9C2A54F645F6BB4FA397F7B68F9EF3F90E1A5163B3E1D9FE7FCEDBBE026593140826F7D38B23FCABDCCDBE057F1775D9F2D786D353AFDDD22141564E2CAC5CB01F16EDECAA464E99ED6508BD7FA70FB5D9F8D7C0311757CE783E3B89A76E1717A2A0EF99E8D944C8EDCFA7089699F1797F4A377D88326BE0EF7AB0C2829E9C5D4DA3728ABD6EFFB7B70F639679F73F639679F1F96F170078101B6F5C4AA0CE28501CEDFBEBFBABC4B3D835AA91519F7D4309AA671FD66174A7866A8BB860ECD7F1C2E7DA2FEC77BD1CFF17968F98797BA70FA9B3FE0C4FC2AC7E7BBE0265931B05B3E1315036CEB895519C40B031C9FB357975B86160EE57F1C2E7DA2FEC77BD1CFF17968F9478FC6C3BD6F9EE2F87C17DC242B0676CB67A262806D3DB12A83786180EB3F67A7EF54A11C83506A4367CF086BDF23D1FBCFD5FA1928FB2660344CC03AE6A1F36FD04F72FDE787ACEFF4FB67E478CFBA8057A516AEFF7C17DC242B0676CB67A262806D3DB12A837861809BAFB67FDB8C70B954EEA083483A04A5DA15D736199B65109C7EA76F6074AF43CAD7213F5F8396DE49F0CBFB20ED74A2B861048BEED984C400679F8796BFF59A10BFD738F1C9CC0A679FEF829B64C5C06EF94C540CB0AD275665102F0C70FEF6FDD5E584BB09874BE50EA45DED6664120ECB7FBC173E77AD3C4041AE06F5020B6EDD6C479DD88EB4F41EDCBAD707CFA2272131C0F17968D97F3D198ECFC3E3265931B05B3E1315036CEB49453EE7FCEDA1D3102E3F8C7EB670E923298351D72226DCD195D5416080F3B787965F6CB4D2E3DB49E0FCEDE17193AC18D82D9F898A01B6F5C4AA0CE28501CEDFCE8E6DB6F6E00F90340D61657D23EE6D3236CB2038FD6E6540F6EFF0F92488CC86CE586180B3CF43CB642C9C8FCF39FB3C3C6E921503FEF99C5C584769E97D54F104C8AEAAC7F32FBC8CBE2E594262806D3DB12A83786180F3B7B3539793BDA3951225BD8F74BCCB3096FF54B83220FC2D953B02FA18C28DF13F680C707CBE339F93FDD548E0F83C3C6E921503FEF99CF7782190B741D9AD407A713572B37261B51A1312036CEB895519C40B037BE1730565D393E79340FC00A1E470F7224DE39E5FD857FAFDC6DB497FC834CB2B186C6CC4DCA287B5EFE1AF9F8DEFB997F43B7D03C7F85CC018C0EC5C2D733E6074252406C81A4B31C5400CCA231E18B8CD33212D4B824AA905F29ED18831104BDC458A0136F544829B64C500091DDD3D749D7FFD6E2E4E9C3A8DB2E242663DB348D6878BE5BA6D87657DB8587D1B6E7DB8F8DAE7E468A5BECB616C97874B1F6919101E674B67AC30C0D9E73BCB922619ED63DA0F06D8C45DA41888879D942AF6391BF540BC31C0B69E589541BC30C0F9DBD9A9CB49FFB985AA1353ADFF9C042F95673276201658E7F89C1BDB9C487CBEB8F2806EB79330AAEAC1CAEA0A56A9EBD6D61E387BBA303B3E0967BF0D4D9F5F405F4E2656D7BC01CF7239A7303D6C65CEC747A6606B6DC18A67712B3F6B0FA9F32E4C99CD4C1CA7D1CEE8246162508791012BE6870D749AE5B52D5BC244D969E49D489AD9B915FADAB4D58CE9D149F437344376E61C6CA25A3ACDE4D00493861C5D8601FABAA3D7087B6B3B3C0B0BF473C85E615679170629FBD0A77FD9339F3018605B4F2AF23937BE3D449AB575748BBAE1F17A59FB1E87657CFBB27705229189359DB1C20037BE3DB26F63E91E82A6BA1CDD558D182CBA45BDC352DC71172906E231CE3878DCF740EF306EFEE9BFC2F2CA127D2EB95986BA677F8EB99909D47E9A86BECC4B585A59864EAA83E0A527029ED578B900CACB1FD3729F48898E2F3EC1F2EA069A2EDDC2B44D87FE660DDACF9D85AEAE117D45B954BC0D8C38A670FFFB3F85F8E4C9AD70E46D0CD9A6D17DE71EF36CFF775AA6CEF37EFD3654573FA79EBD82FBBF781E43CD8D94FC000D5F64439BF13526C7E7E9678A4E9CD87AE6FBEF60C6B38AB6EB57313F3D0D7DBB168E1609FD6CE9AD32543DFB6B3A9EE0A34F616DAC4C180CB0AD871BDFCED9E744DE1ADF6E4F61FBDCCE9ACE586180B3CF23FB3613760FACB22AF4350DC035A0C094CD1477DC458A0136F544F26DC875877315997FFD47F4B9A5DF81C2EF7E1BEB8FEC7073532B136F7A6E1DB7FEE2CF30DC6FA66CE3B374C8FEC11328F9C17730A951A0E2C8394CF589E8F8C28B79182CBC1EA0A757D08751AA1CE83E749707FD2525F4BDE547EFA6B89747C5DBFA36FEEFD49AD788A623CF31CF22EFE4CB8F5AAC43EDAFBE43CBE499DAA2225A5E0DCA33D151FCCB5F32E75D6562CCDB8D01FA1301036CEB89D57F18AF7A80F3B7B357974BE52387B22EDF2F9F1399E49D2D9D1C9FC70F030F288E2161E8A5DF32F224BF115ECF02163D9BB47F75663CBAB28D27060E8ACF6FFD9BFF0E9A5A3132FFCB3F513C37B82D8DBEB51737FEAFFF82C6977E0A876502F2E3C7E86F59F136650FBFFD2C162646316474A2E7EA7928CAA5B8F9EFFE17CC8F5A03F4C8EFF1D19F798EC9BFD3360543491EA3C7AC19C3A462AB3DE0FF4E05FFF06DAC5076BA7F3E3D946DDE955F8DF37FFCE718C8B9CC5C1FB68CD3CF0C7E7FB5A80FF9DFFAAB803268BB49E95E984A280CB0AD2715F99CF3B76F4FD3A39E457995F550FA5AF7E36F27F91649C791765547CB6CE8E4FCEDF1C5C01AF53FFF7FFFFA5FE321C5E9E4DCA0B4A0BFBA1CA33D2DD0D5D642D7DC86C5C9B1B8E22E91FDED43C31E9A3B071B25A83F7D01797FF37F6369668CBEB7E0D940C92BEFE3E21FFDF768FBF238965756E8EBDDA50D98B5EB03FCEDB40DFCD6295CF9933FC2445F3BA373D6BD88F68C625CFE9FFF0D66CCBD01F96F3C770B53861E267D5746262DFBBFD3FD275F45E32BBF04F1D5937BA3432EDCFEBB7FC6CD7FFBA7D057146CCB2779E6B449C55C6FCDAEC3B5BFFAB7B049F801653035B70AD17B6F261406D8D6C3F9DB53DB3E97CA5D28AB1CC6A9335A28D57358758C63C362C2FAB01D5EA31E1BAD3D589F9BC5BAC108AFDE86F5F9056C0C6AB16AA0E499596CA87A22D21FAF766070FADDCA80E4DF5F5E9FF66055A3C2FAC814D6A9EFB0AA37D0F7367483F08E4E607DED9BADFC5B47E96B1B43CE6DB644AC30C0D9E7DBE50DB596E6F26F003A104EB71AA6B1EE36435BCD87B5AB139A161D3CA3FAB8E22E520CB0A92712DC90EBFEBE6D729EFEDDA7683B9AC882739928FB976F63D669A3EFCF4D4ED3D7893FBBEDEA6D882EE7A0F7CA27F4BD8E1219CA7EF86D2CCE2FA2EAE537E0991B877B661D5FFD4F7F86BCEFFC3F70B649E878D3EE1946BF5AA843EBD1979973455621D637BC01EF34E77D88CFFFD59F61C1DC419FDFF997E7D1FCE1ABF07A97E9F798197361E9D19ACCE4DD7CCFF4CF73F3BD324CA99B6979E9D11C5C22DFFDCE13589ED97DEC6BBC30C0B69E58FD87F1AA07387FFBFEEAF2EC5C1BD5269AA6B99C9CAFAA0CD86CAAC3469F056B621E36CBEBB1D1D64E9DF7511C6EC26605B9D78D35A3853A6AE8EB8799CF49104AC7B6B89C9C5375D39A5C4EE79FFE0E55026C0AC454BBA51BDE85396C9846E9FCAFB67752F21836AB0AE386018ECFB7CB0FAE5EDFE66F7794D4C12068C4AC6D004E8D1603F21E7817A7E28ABBC3C2E7F3943D7EE1AFFE13EC82FBF4BDAA0F2F60A2AD8696673D9BE8BD7D9B79D6D48407B7FFFEFB0C9F4BAE976158B0D57F5DFB196577ABB7F8BB33231F26A994F6CF937E0FDBE0182CB545585A7B88A2973E40C7C9B798F7B11AA730DE2A0878279B690AE7FF9BFF162BEEAD3645C6DFFF102BAB5B7B24E995768C4879B01BDDF433E75736986792F7343648B14AE9A9FEF03CBABF7C9F4ED395598819D7184C5A0B2EFF8F7F8AE53967C260806D3D1C9FA7089F7BBD585BDF60822F9EBF7D4A8796666CD6513CD6D284B51A3E1E145460B3B60E0F3233B0965F8E8D76EA7E4E26360AF858370D60A3437EA8F99CB463C44D130C9F6F1847B126ACA6DB30F477A0F2BC59574BE799A4D9189DA6E5B57A8AE36D666C489B383E8F507F2C7572F3D522FB3664BE5A474E298A7FF8CFF4F836FE5B6F439B71854933E19C05EF9557203D7D0AA263A731589017F02C757D078C65F7687989B2A395798530C9A4E82F2B62E24D4C2C23F71FBF8FBCEF7E174382323AFF8A3211EE7FEF0768FAF01D78161702DEB3E36E0EFD4E453FFCDED63BBDF13A8624354C9C7E990A756FBC8CA6335F4278F424465AB7D66E25CFCCFBA7EFD3CFF47A3C5B6D95C11114FDFCD7A87AEE5758726D8D9B20E3E64A7EF33A8A7FFA0338A4A284C200DB7A5291CF53B1FFBC4FD1058B44420789C40691D44E8F012BAF0ADCBF62797C1C6E552FBC63D475E70865872AE1D51BB1DADA84E53E3DBC662B75AD052B1A4A1E7650F11C87BAFFBC9237824B57069176D5B0E5ABE898C24A472BBC9393F08E8E63A58DB2CB872DF02AFBE834DE85D5ADFC9BA9BC3B6CF0CECC70FDE711EA8F340D993FE85D5BA3657224E7DB64AA4D4AC77BD4363D8C7B711C54FFF96EE9A726A66194C9E1A16CEB85054FCC3130E518DD359FF6411386A93A8CF4A9CFCD2D44FD9D1215036CEBE1FACF53C33EDFC9B6231C66B42E32D7358276A84BEE4359980FB7DFBA11B16C93C995D3E0F3FA71E3461F541A2772F3B5F4DEA5C5853BFBF223FD4E919401190FE7B3CF8D4DBDD05594A3BFBE0E43DD1A0C94E7260C0652C53E1758DD742072BBE5B1AC77CD219B92A76657A0B32DD0B2CDBEB8EDDBEC0503FBCDE75E31C0A69E4870735830C07679242A06D8D613AB3288170622B1CFCB1B9A5056D308F7982D2CBE5391CF098F192C0B4CFFF9708F12A6AE3E8C9BF418D1AAE25286354D63B03BA771EFB60EA5250AD8A83A5CDA49F17A8126E6FF31C9F784DB4B71C4062D3B7BCDB0B474C3D9D70EB77D12C3BD0ADAAFE8ECEE84A57B00FABA7A8C53B6C2827B32EE1848053EBFD9E4C073CD4E7C363A8D4FF826BC659AC50796297C44C94FE46BF082D48E172FB5E1273754B4FC46A586DE43875BEF95E3738ECF9387CFC91E79D905451037D66FBB27ED54606AED1B086BF9F479AAF9DBD79BE498AAE261838C4FB1D802E2112E2332398AA423708DCF62DA6183536FC3FCF4E4BEBE47343E9E8EAE31A8065C686EB3A19EAAA785521BC6466763EE6F97C82669FB3C3BD74CCBAE513746FBFBE0B23B280C3EA0F8BD9B8E676E6F83A1550EFEB113D096171E080652C1DFFEE2970AFC384783A7EFB5E3E91A2B9EC8D3E089EC5EFCA66508EF59E770627E054F15F733F2B1F1257A3F9D6E91901E23B2170CB091CF64F2B71F340662511E898A01B6F52493BF9DF07659357F1B9F8BDA55E05376D5B26721E03ADB6D9048DB64FBD5196D9B68C36F9F95898CFB981D1F85DB39094B730B1C5D6DE8AFA9A5EE3D3CF0F564889DC5F65EE46CAC2743EC73477707069BDAD171EB2EFA2B4A0F0403A9609FBF734B851FDE51E28D66339E2C1CC4CF4B74F8F55D255E6AB1E2C92A239EA935E2F9EA01463E31E3A1F162E1ECF38870731830108BF248540CB0AD275665102F0CF8DBE79535755076B787C4B17F48653EF78AE5B07774D1E7646E6EC3C9AFB1383DF6E8BB1C1C9F132E97CA03F722279C9E087C4EE638936FB846D939E4182CFBC717F4B9E8FDB84978B6CE8427CA8DF855910E3FBBD38D9FDD55E167B93AFCA6DE88CB3BECFF1209D6F75A0687A12E3F923780F7F493F8707401CF5318784960C2ABED6378A1C586278B07681FFB2F2E3733F211959DC68A95EB3FE7F89CE3F3A4E1F350811BDFBEA59F708FEFBAF5D21DB88D5ACC2EACC22893415DCDC3708B9CDE8FA545A43B90FD58F4E66986C3CBAB0C8C4CC27EFD429A8A4A665F256545393DBEDF7F5F2612CC1231AA2E1731E7E45E3F3D0F4042FB2A7BAF5EDF518F25278F8E43FA6FEB254A5CFBC3437CFECD37F868FE017E70A9052F350FE33599056F69A7F1BA6614CF54E9E8FB245E9DD2497F77CEDFFE583E9AABC14B6D6378A65A8727AE6BF172E7105EEF72E0B9163B5EACB3E237628AD70BFAF0E1808BFE8EA7D61FD06D401337BE9DF3B773FEF6A4F2B747CAE7A96C9F8FDECCC0CCD8046C948DEEB63B303FEAA0EF115F25E13AC22F3BE934B476516D800E2C382D700E58B0E0227EFB113874668C0DE8E1EC6EA7EE77412F68C420BF0E7D95D5985F5CC6B27B22E277261CCE663BD2DF6E138945F4DCFBE078641E1499C3E7FF0CFF79FAA16C729FBCC9AB61BE1F899FA31EA7798684A7F983784E3884D7DA87F1E36B3D38E25CC41BED56FA5EBA6D7A4B07952ED2B24D05FBFCCDBB5AFCE3D7EDF8CC3E8927B33478AECE84672B6DF84D8B012F8AED784E64C20B950378E2968AF6817C3AB5C8D9E751E0E630602016E591A818605B4FACCA205E18E0D693898ECFB5473E81B1A1166ED73C2C52219C6A2D73CF1AE43B0ED6A9A9A5ECF98656184A32E1728E42CB6F80EC8B53181049302493C0D6A2467F83000E8D1A1D17B23062D64255558379A733E27796CA1DACE2CEBF9E174A9B764CC3E67E2C054D43C8A1F241C23D899591B364C38C3CE15E8EBA6C5381CF3F281CC4E70F1FE057F95A3C556BC3D3650378B64C8F675ACC7822BD17AF2946F0AB5C15237F3C32CBF17914B8390C1860AB3CEEE4EA507C5F0BB1CC82BC4215D2EEAA712F470BCFC262CC74468B01B6F5F8E409CF1F70EF76378A4BFAD1D641D543396A660EB0D7B392547C9E4CFE7655251F9D39D968BF7507EE616348FDEB553CC69E54BC770C1DD7D3E0340F43532F822E2F9349A3A3E285D379EBD83DDCF8F83EAEFDF6240A2F17A3E47A05B2BF2842CE791E8AAF54E3E69BD770EB83DBB8FB6906AEBF720E5F3F7716E5192254A6D76CEB1B273EF6507A5A441A669C32195FDECFAFA1F7C7DACA6756C87C867B679F1F765DAD414FDA15A66DE38B17C97E2CBD122D06CBF2606E954355528EB6EB97B1B4301B770CA482BFFDCDEB3D78A5CD81D75B86F08BAC01BCD464C22FD3B578AEC5889704563CD360C3AF32148CFC917972577FBB637C2EE6F9E4FCED89E76F2F2BEB47459D0519055AB44806206A1B467EED30E6265D098301B6F5F864DBDC269AEBFA51427D834B37BB31383042E73F275F8D45F734E76F8F408EB44DB65F9DFEE7838D0DD00A9BE0507485D51F896DB79B7DFE558B03B5DF7CC34A28A7383D941EE2F3F7F9C4BD54E8AF22EB3E3E0C9BCF70EFECB3DB7C3CBEF1E8DC172F92FD58CCBD63E8FEDD6B98ED6D819E5F87FE2F4F73FBB1EC417FB878769D1E2699042FDF6A63FA2B883F7D379904A93CBC7D4EEE47335F622FF9DC6B3DC0A69E487093C81860BB3C1CAE35E80D53301A665023B2D138301A5267BF5435956F3D15489E7DF99F9C588CA9CEFD62E030F9DBAFF04D38D3ECC069B99D3E06CBC1E71ACBCCAE7A1665CD70DECC80EB6E26566B79017DBC8791CFAD41EF3992964EE5458AA56A3E466E3DCEE7AA5F3B2E5A3E5757D7C1316086BEB2107D3C21CEFCE22B945DACA6D71D0BB51FCB6251392632EF617E6A0633549B62B5B395DB8F85E5FF98C8B6CE16BC9CD117133E2721D2F9127BC927C7E789C7E7FEE52F1099E93934F1D2192906D8D6132C13CCFBF2EF6BD3C65AE77E307058F89C8CB9CA965A983AE80C159EE10DE285A611BCD83182671ACCF8D83A16504F5DA3F8C5E95E0A183315BC9F4AF07C29FFEB3EFD24BE442C64ECDE9DF240E6F0D2FBB604CDE3CDC9CDA5BE5933C3E79F529CF6495D233EC8CF027FDDB38DABABA83447CB2B714628C42DAD0AA79A9A71A4A8085F8AEBA3B2CF7DF908152FE0FAA3BD66429547283E27B6FEE2A207E6A616B45488F1F5F31790FEDAB9AD78DC7E2C07F21F937DBE6CADEDF884AF45EE830D3A10DEDE4926F303884C8E520A4BFEB8F1C7C3D6777B3C5FC2EE5A4661E920EA0516F42A9DA8910C23BB588FD2D27EACEFA38EE3F83C31F9DC57EE84CF689C0C2DA40C9F93313AC1F9676B5D8F44E2F383E83F277B476449CC017CFD6AB713C7D7FF809FDFEAC0EFC63671726C621B9FF72BFB699EF5CDAF22F556DBA37954247F533BF479133B5D2012D371C8BC2B63A38099AB153C5FCB27775CB942AFB345E65E9174D50D528884F5C80DE2F3AF140A146F7E83E74E7E1CD2F6BE33BB895BCDB5149F37E0F7657CA4AB3AE8349FF0F94C9C4B79225A47ADB805B76F5DA5651244443FF59EBEF3B51DFAFE48BE7D715AA834BEBC19C49280F2F0F5ABFAE6EC91E39C7B06D3334B70DBCCB48F3D603F1615BB7D4B5CFF79747DA73DEA49A45DAEA03060A1EB1F7224E7DBE4A6A1AD78D471727A85C68D6FDCC516862C4C5D46FAD77DA1D9B000B5448F9A7A23EE1468D1D73544F72B56B5BA304FF6DFD9633EB9FEF3C4EB3F276B4CFA4241491F23EBCDEE98E98C16036CEBF1C984CB1BC5163ABF659583A86B3030F937586662A2930D0C1CA6FE737F7FFBBB79FD78FA03117EF6522D7E97AEC48B9F37E364ED40D4FE76B2D6C94EEB9C44DB26F4F7B793BEEBAFB3F870E8E44C3C1F9F7FD9A9C249413DBE689685B4CF69CEEFE8C1D7CDADB8AEEEC6851E0D3EA36CDD6BAAF690F679B7524F1DBD21DF73FDD13AB5C179DBC9DF6EF41BC3EECB13FD9D7C79A38EEDB77331C8AFC560AB0256AABD5299DF1A723F1632AF4F5B5AC82A06F683BB64B6CFC3E5D3FF3C5A79EB3CD0DF2E6D1B4393CC8EEE6E079ABB2651596382B0D1B0AF7CEE15036CEA89E47B1E160CEC576770FABA4663DC75C6EA3F8C363DC13E375F2DB6FFF17E74FACE57A9A3B9A919435D7DB075F760CC64C78C6D70CF180AF6B7D7286C5870F631F1FCF9FCB4B0119F4B9A90D6D1BC6B5F7991671DD93623CEB77752E70F03F87C990A57D36E53F2E6D6BBF8F94AE717D631DCD50E5B9B8A9EDBAE1348303F3612F6DBECC6E7F418FFBC5268CA8B31D0AC83B0408CC1968E47B87005ECC742AE0DABD5DC7E2CFB4893287CCE8D873B5C18E0F89CE3F3E09048FE7636FD18FEE72DF78A6095D5C1A83440DFA2C49CAD7B57FD3B3DDBA154419299C1F8DB7D3E7D5F08F6B7FFF4DDF770BB5F1DD1F8B793CD1D382F6EDCE66F0FD6E3EF3B3752A1E857BFC560690E645F9C472F8F4FC965DBFA0B5439798CDC9676859149708D4F6CE145D60C73760ED67935D4733BE1760E6164C08256891E75E57DC8CE3586DC8F657A64884ECFEDC7123F5F6B703EFDCFA395695C73F3D50E1D06D82C0F3276A9AE4E979018605B4F28592C316369995B1F6EA77B91A689877DDE73BF0C269100FAB67E58DADBB1346EDC557FB867FB8F13560D5AA1F25B0FDF7F3CDCB19A7ABC7B371DD77A3A22E2F3AF9426542F3AB7F9DBED8B0F71E3560696671DDBDE6596B2CF3BEFE460ACB70BFA5A1E74926E2C384D61DF39D83EF7FF067B5D4F26DAFD58FCE7D9FBC6A190E07F9D5B4F2650365A67996F9376B526600C9BFF79B43209A393BBAF1FB2DF7CEEB51E60534F24B849640CC4AA3C88BFAFAE6E202131C0B69E503259FB72796525AE3AF78A8154F6B7EF2413FE217BA7999AA518A81380CCDF8E24FDDA833F6CED53451DC9B9DE3E89AEF6EDFDE79FB775E3B6D184CF6AEB22F2B7FBD29CAEABA3E4CD003E9FF03CC4975F9CC5FADAA3FEF3B575C6DFBFBC46F17D572BE65D33B0756B60A0ECF6218512B34EEB9EF85C44C64087D883CB4BC6FF37D903BE07BD7EEBA3790591ECC742BE19899FD3F7784CE387630B78DB308B770C537853E5C4D3F556BCD63644DFFB4A3DB6A5834AC7F1F9161ED89A0B191CA48FB016CB7C727C9EB87C4E425DA3392131C0B69E5032B155387FFBE1F0B7EF2413FF70EDA767B1E01E8D38BD5922456B7919E36FCF29AE02BFAA7C9BBFFDA35A214EF04A7042D41CB1BF9DA479FB6E266A1F2E6FF3B7DFCD2B8154DCB8CDDF6EA642EBE59B942C45677A3A9A2E5E45DBF973DBFCED1D57AF33B2AEAA3AC0DF3E28121FD87E2CFF7CAE09BF910FE1F5662B5E6D1BC74FF37BF154711FB71F4B08B954361C333E277E9158E793F3B727AEBF9D845A81312131C0B69E50B2486AE7F66389619B6CBF3A778B47EC7393BC198AB23238DB5A234E6F916DEDB3E6B3CF73CBF998187BEC87F6F1F9C775221CAF2AC5A7F59288FDED24CDE9BAEA6DE3E148B00E3F96FDED73D29FD05754093256CED2DA066DBD0816793B561EADB5CAA40F637F04AC01F068FF93E0786CDAE7F5EA091C5F58A339FB95763B5E534EE26DCD189E2C33E0E7051ACA3EB7D1F73255A39C7DEE27FBECF39B163B85B3161A573993F3289B75E19CB40F55DF2CE1AED58EF2F919148C4FE08E7D1C175B845B7D393D0654CC3891333A86FBB30B382D6844BAAE87B3CF43E0269131C0767958869651C91BC18B2F75A0AB672A2131C0B69E6099CCC125E37C0522272DC743E77E307018FCED52B983D913FBE97A1B7E99A5C2F7AFF5E0D7F7D5F8974B9DF8D14D05739F84ABCDE1D7B28AE47D3673EF6399B24D43F1CF4E6982D7871B9E5FC59841CF9CFBF8FCEA80197913549D6A3623CB6A08C9DF644D19FEBA175913D3C873589963A8F96ABA41E20BDBCEB3246C50F66FA83C6C54F3993891F279B86F16AEFFDCE59C7AB4275D27BD1FDDA4D916B66C14CAB15DFBCFF752B6A9C0E70C7ED6D751E059C7974D62DCEAD580FFCD3ACECA3B70A2964FDDF3E074A30C1F9795A262611A998E519C15B7A084E2FEE2F9795C37D97057AFE1F83C046E1219036C97878FCB4820EFB0C9AFC766492D36783C3CA8AEC5666636D6259DD850C8B15923C29A90BADF2AA3E58D6E15D6E4F531C700DB580B96A76637A054CFA1433149CB9B322ABF2D4D58A7EACFCD9A7A6C08C55853F452D7A96B762756D583D8144AB15143D5AFFC3A6C1617C615037BE1730565D393E79340FC00A1E470F7224DE39E5FA08F02C100BD9615B1CB4E52E13BA79A71727A112F2926F07A8B855E5726601D993F3C4495CA0293481872FD9750EBC1F8FB8749BE0997FBF4FBBF97393B776B4C3915574905FFB56A82D7933976FA1204B5E5D47F91073EAF92B69B7CBEF32F84B5F8A4A2029FC935A89EDFDEF7794E31801C9B06C7F9D5289A99658EC1E3DBEBA87AF8E3A32720950AB6D69721FE7EBFF564483E427DDBC98ACAC763E2A97A7D617131647984FA06FE3269B793FD58C8F87651D344C878DA4E1B9437CFC1BD308FA6F4FB50575663C6A98B0A037BC590BF2CF0FB16913E6F27FD6CE03B5AFDE1E21549AC3BFA76F61B489B2AD6F9DC2B06D8D413096E121903D1EA5C5AF162D1E3A18FF4F9F2323DEECB17A7B8CC1AF00E2BCD9D58A1386A99E272AFB00EDE2FEF6269500D4F4F0B3CE535586CEDC0525F372D2F8DBBB1A0E98A3906D8C65AB0EC1C5FA46DF31AC1107D6D5922C7A271101E591B56A86FB07C3B071EAAFE5C6A6BA2EF2F2AB45816B76151DF8D4583191E45575C31D0D9A38C9ACFE36D9F93B5AA7C7C7ED4F300DFF9A203BF6D18C08F6F75E0F91A039E6D3006F0F99DA1D9AD355DBDDE88DF2D781DD80757AF87B4CFC97EDD741AE2D70EDA7F3B78FEB966C88571FBD67879A55A4BF1B989AE1F7F975F8ADFDDBA828FCAF978EF7E19F8DE9980FA934F85F728BBFA4267173EA4B8EF6B99903AF2E963B07DBEB4419D53ED83F58DAD7DD783D77B25F908659F13FF0393FF30EBBDFACA60A772236DD709B7F7112E5C5877BAB1D6D98A0DF31836946D58EB51C1D43408C573CF605AD680BE9C6218CE9C80B7857A97F62E6CF41BB8FD5858689773E3E138FB3C5A9DA49EEA9188E97ACB370E868CE526BE36D267EC5B238A7907F7343686C6E09D99C1867D626B5D2A83091B835A6C74A8B06AB161DD3040CBEBE3A3F02E2EC41C036C632D5826FD0D64EDCBAF2F68687FC5866108EB260356275DCC37F00E53FFC790954EE3754C6E7D03B581FE4EEB9EED6BDEC7120387C1DF4ED60CF6DFFB7A27D977BEDBDA177BF98691A40FF6B777DB3D21D7936123F8F87C81E2F30B5F5D62F8DC1A5466FBC57A247C4AEC73E6DF9F59C69A5C848DDE016C4A85F47E2C9BBC2A7A2DF7958D556C38DCD47919563B3BB031B184CDD2DC3DD7E5D1966D32F37947EF048D0912C8D8389F1C7C1EAD4C02D99B37D6F9E4F83CFE7C1E2E6F44263C467CCCBE77E82AA88159580F7D1D9FA96F628D0169F7146A05565415A9A019A678204B093E6F00FD2A474CB0164A26755BA364941E8FA429AFC5486F0F3455B570EAF418D3A8120A03DCF8F6EDB26FBFEE3E41035485F721F9EC73783CD3BBA6373D5AE3DC775DDEEFC4FCF8E371A1AF5DEFA6399D8D905D6DA09FE95E7D80BCDBF994EC61DEC1A78FEC77D672E50A4C2229BAB2B2D07AE31E66EDFAA8BED36E6540DAACBEF5DB09EE5D3A27566412AC2AA9F67A0BD57EAFACC36A5B1B569BA4741AEFF80C56DBA9768FBC135EB31EABDD3D71C340328F6F8FE538E358FD87DCF8F683C7C04E79233269A72B946E18AD8BF43BD8944AD814BDF4315E18207BB06B9C1E54142A515ADD8FD2520D3CE3E328AEEC8F09D68265B21F05F13F0E8FCED1F2708F1A6659076C3DDDB074B4A187E27797A51F46490B8C62096C1DBD2076CB4161801BDFBE5D36F48EA133ED0266EC3AF453E5D4F1D54D10BEDC2D7DB07D1EACD3D824C370DF201C4A353D2F9CAD3699BFEC6F9F93B5609BBEBE85A12621CC924E0C48EB616BDD3E5E3FDC3B475206E2A6099ACBC978D89ED6214C1A06303A68A5DBF089848164B6CFD9D4B9170CB0AD33520CB0A92712DC24130648DF21D99789E9430C8AE3B3CDC97FDDA118834363C4F4E82826CDFA3DEB8CF69D2D4E2F44F22154946B31E25A4169F920F875268CD8A21B6FBFD7F724F55A76AE99EE4327B241D206B7C548D56F039872BAA16BEE83B9B303E69666C83F3F0E9B5C70A018380CFE76B6FF95DDE291F1D8CEAE76B85C0B9819B2627CD01051FADDF8DCD4DE867E3E1F2BDE75DA5FC3ACB91E233E5F585847DBCD1B3088A568BF970BF9E55BD0665D03FFCC1D4C699A22FA4E919481503A46F7A393FF9FACDF6E9277C12893C2DA244E280C707CCEF139C7E78F65FF3D1986945A4C3B47313E340653931CC34A15463AA54C9A44584F46A976C55C4F2839DC7A32438649CC388CD056D6A0272B1B2671C3816280E373F6EAF2DDF8BC3BFF3E7ACBF9308884D09415B356863BF13909A40D61A5DA8F1D55CDD0CB9AA0C9BC8A96CC6A587859117DA768C7C3F9F663B1F5C8616B6E4E280C707CCEF139C7E7A1F97CCEFB0D5CBA5E389CABF4BAD75D97BFC0CAC2631BF8A0F97CA7FDD7D9D6132D9FAF0F39765C57C3EB7EBCBFE77BB91A66DF4FDF1EA1A1E4AF2839D4F82FAEFF7CFFF1A2ED3B0DEE3F3F887E3353501FF1904A8531CB08A66C1618A5ADD4B50DD8F523D00BEAE19999A4E390F9DE3BBDF36E65D0DD3BC3CC57F3DF8FC53160816721FA7D82638901AEFF9CEB3FE7FACF1FCB6B8FEA2B72ECBACFC3DCA815FA5E27343C1E5419D7E11EDE1A6BB3B51FCBC0816180F0B8FF3A14FEF5D55EF5CC515C4BD6B6A683B091B2AB45B46C104B98EB3EB9F252210C541C229378DD54108AC5F47E16648FAA1DFBB22F5FA6E388A8F8A79B2CCCFCABD7D42E3C51D98F7F3AD58C778D2E3CC937E3999A41FCE4560F5EA8D6A0787A0993AE05AEFF9CE5786CDBE7D17E0F36EC7372CF7F1DB6D06D3AC78EBEAC48CB20DC7A32898201CE3EE7ECF3BDBC672AD8E7E1D293B9ACFD75B5078201522F49E55B7C9E9DAB65D695F2D5577BD513B08696D74BAFD9B1531AFFFD587CF39A57D73703BE61283DAB8FF6C220F1FDF9FC8389653C2FB3E0A7E73BF1A6C98D0F4D9378A2DC80934B1EBC2C1FA6F97CCABDB4270C70FEF6E4E2737A3F9847F3DF7DF782F99C5E23D56F5D5AF28F9040FE115F9CD61E17FA745398189F459F717E6B4DB61DBE47A8F55E1311031C9F737CCEF1F9763E5FA78EEDB77331C8AF85B2A81423062BE647AC01E9FB1B853B3E6BCC6287323B038A9C3C7AAD6C5D791986946AA84A8B213DF125C607FB61686D47E7E574B45CBC001DBF06431D1D18A8AE8A0A0352B98335AC05AF89290DD3A661C3DF7E8A670CF0B71FAB31E2ED3B2A1CE55BF1416E2F3EAED4E3E37A1B3EA564CEDF1E9DCE48E31D467F7B4FD0FA70045F34C6A87FADFBD1DA7764FD3A9148411DB7D64FCDCAD1D06D5E12F46637AA44A330194771ED720F241D165CCCD36266D485D21275489DCBDE15EA79A63DE793F3B773FE76CEDFBE3F0CD8F4E3505756405B5101479B206A7F7B477611FACA0AE1189DC378BB0C8E81C180F43A41C38ECFB2F40EC0D4C083A2A40ADD3999F4D8A009C724B4C206B49DBB06FBE0201C3A353AAF64A2B7AA0A0E65375A6EDEC30459672D520C2C2E4224B130D7C78CC3708F3AE01E99DC9A37D4D98A815A92EFD588BEAD29A84C7D651C2A4DB8FD58D4D50D30B77550C73AE82AAB606CE41D180648E0FCED9C7D4E389D049F7DDED5BF08B1C0807B79063408FAF0E9150D6A2BB510D5F587D4B9659F0FED399FF1C200679F73F6F95EDEF330D8E7641C1B19FBAAB9F365C43A499D40F63E24F6B9B5B507B3143F8EEACC981C72C265D207A40F679F5708ACB85820C3F173E5B852D2822FEF087197B241AFD56A29B91157F8069CBD5E87E367EF33E16A5907BEB8D5883BF2213A2E0977E4767C4ED90E21BF01C5E74A8992B9BEBCF610F68E2EFADCDAD18686935F63797622E26FEBB3CF83D7FE0C8E47D68793CA27E8F96A440E7E5E1F4F88BEE23C5A96DFC883AE2CF7C030108CD5E0C0F179ECF97CDCE480A3AF1733636EA80A0B21FDEA22340564ECF9C343D67FEED873B9737CCEF1792AF279A4EB5EDE9358E963B8752F476D5318522A616FEFC2ACD3BCA77F22DC3B87E37336D71A266B6585C4806799B6557CD7AD4A13664CFDB47FDF289341C3E7D37B61EE85CF7DF796857298C502A82B6B31A45041C3E3A335B712F272E98EFBB1584F9CC3C8CD9B7017146149DB8DF1FBA5876E3F16CEDFCE9EBFDD3E3884719D1AF39E0D18250D905D4FC7C2B47B9BFE48DF39787C7B2469F632BE7DCCB514B0EF996FAC0A09647DD044C400E76FE7FCED89E46F174BCCCCBE1424FCB6730CAF6BA7F0917316FFB570006FB458B6ED4B41C69A2FAFAED147123CDE2DFFF25A553556C4127A0C1609FEB2CFAFCEA479A49FF8D5C412317DDCED9DC3F9DBC9FAC0848B8B3CEBF49E53594E2732CC033B72F645951637070751363B855B8FF6F7ADDDF4327CBE13064C7E3EF155953A645E6959A5DEB53C7CCF5AF3ABB3896C6A6B816B6E157D3977A16B6D41CDA75FA2E2AE04F58DF6AD38F236786D66785BBBA8F88D58CBC8C76A552556155B6D8995DE412A8E025EB30A2B9661EA5D9471AD07387FFBC1DAE70B6A03667232E876A2BBA802E3B76FC075339D3E5F1C9F8CFA9DFDEDF379CF43F4E6E560543B889E9C3C28F3EF63D5EB89EA3B852B03622FF8F8DCC7E5C1F3431309039C7DCED9E77B79CF58D9E7FEFB4C91E0DB27F2C7993A9C5A5CC43B8353DBF68D1448953053BC6579B4BFA3E8D158196BEEFD1D75129F3A6993907135641F49DF7E90C4DE25E36D7CFBB104EF39E9BF1FA5FCFC05482B2BB6F6967C340E278D7A2EAFBA12EF9CB9F7D8BE5628F06169092E747786E4F2934D6A640DE9F0E6B52C5CD6F6E0D5C20A544C9971BCB284E173DFD81F9F1E1204827AD4676532D7E97E821DBE35B917BC07A68E6AEFF8C7D9C93E9F18D4C22857C13D32023375AFA4D884AF3E6BE2F66389F17FBC1F9D7BF9866CF139E9DBA6F7715B5BDF86A7E0344B8F7C5CC17BBF857B67FFFDD5A66637616FAAA1D75E25EBBDEAEA4BA2FE4EBB9501E1741F9FEFB60FCE416380E3738ECF1389CFA572075E6ED90A4FD50DE13FBD528DBF7D5F82EF1C15E2EFDEABC7773F1533F749B8DAECD8F1D9C163ABFD6532067BBFDFA95F2008D883D1E61CA1DAEE642E782FE36F27F6F96BB76FE3CDBBB771825F1692CFAF0C8EE19CB01AEFE6D7E29CA4184F5E2DC2695E21CE35946FF3B7ABF5364CB946B73040B56FFCF5FBF2B653BEE9787E7B601A1FCD1DF3A50FC5E7CEDB051851EB609435C3226E64D6E40EDE8FC5D8A28041D280951977C2D5039CBF9D3D5FEB84C516723D828073B1180A61231A84C25DD723E8A0DAC4248E908AAFA1C24ECFF6C93D550DC86D6A439B658A79C6B0CE8839F7049C7D5AB8275D517FA748CA60D4B58809777465C5F9DB397F7BAAFBDBD9C480436B84CBE1C45047171DDC762BABE5E1EF6F6FEA19C4D9B39FC1E3990FF0B7B3D57FEED3E3F6ACA2B3AD232C0622CD03A923FDAF87F2B71B2E174071F53456565760D7F4C3D8D48D6ED5C8B6FD58FA451DE8C8C8C392DB8EA9B1694C8F0C63DC688593E2C5313DF9EEDC7E2CD1B6CBF7A3732F6D22B6F3E69337D4DA1DDBD58B7A63543A3FA1DAEFC42F777C610D82BEEDE3DBF6F2CEE1CA406B5AA0E7A85B4C53189EDC9A1F6A314DEF5B67AC30C0D9E79C7DBE97F73C0CE3DBC9386B7D3D1FD3AE794CD9EDD09495B25A1EEDE9E9687BE4DB27ED9B335F9C63E44B79A200FBFC953B77F0C69574148C5977E5EFAB96091CAFA9C4D9EAE26DFEF69317EFA020E326E36F277D05BEBE80DAF73F45F3F94BA87BFF18441FBD0FC1BB6F86ED33684BBB1270BDE391BFDE57FF4EF36A60BE98859EAC7B7093B5341BEAD1575C4DE91E4525CF1EB01FCB84C908B3BC15ABDE657A5EC1706F173D57AEE5C297702A9A0FB41EE0FCED075B979B5ABA31A21B84A15184FE7A096CD2FAA8CBD027139F9CAFAFED4C18DF5C34EFBCD33730BAD721E5EB909FAF414BEF24F8E57D90763A51DC308245F76C426220123E9F712F62696E3A40FFCCA81BEB1B0FC3EA71CFACC0D9A70EAB7F71661193E3537028D4585DF36E8B37ED1C0F9B7F3671C70606383E4F1C3E57E495A2F3C6158C1AED140F95C3D050C32E061617E9BE3C225BA8FF41D9DDCEC4F31FDF4EFACFDF2E2AC0DB377250B5BE10914DFE41791D6A3717B7F9DB7B07ACB05A4C8C7E7F7F3B69BFA8B2EF61D9E38586D788017E55C83CF8FCEAC1FEF6E06FB3D7F5648C9A318C0D74A327A700CD5F9E41EFFD9C03C34030568303C7E7B1E773824B5D45313DEF628A6AF73934035197A14F7EBA6210A7D61FE0987B39E67CEE5A7980825C0DEA0516DCBAD98E3AB11D69E93DB875AF0F9E45CFBE741E049F0F0DDAB138364CF791F5D6C8606B1233FA8517F3B1685384D4A3AE6E8277761C43C31EF05F7D1D4EA303C54F3C0BEFFC44800E63970E77BFFD1DCCD9FA3037B38CDEA20A347F7591D2E9A4E7D2D67E7609CA0B1F3169E6A617E1F52C727CBE8B7E8ECFE387011F37CEAF3E40158FEC0BBA19C0E7BEF1ED77CC16FA58B1301D119F174E3F8EE7CFE745D5B5A8ADAD0E8901A7CE0C976180DE0B7371DA85C5F9C5907988359F87F3AF7A2D3626FE8FAE77078C8578B6CE841FDDECC64FB3B47892AAB7FFDFB32DF4F913573BD03FB47D0C1DD77F1EFFFEF3BDE824EB0B694A0BE018B441CBABC1601D3FA4FE48F47CEF6C1B9E28D2E13DC324BD67CF5EDEF330F59D46AB3F5CFFF9122577DCBCC55C975ECEC52CE15E4A7FE3E5022C0EAB42EAF1DDB3DA1650F3D6EFE8EB2D797598EC116CD3D1725F808947D749B0F49991FE1FBF85AADF3E8DE11661C07395752A68B32F60CA3D8D45AA7DE40B73730BE0FDEE08156F85EB3FE7FACFA3D669D58F4355510E4D7939EC6DF511A79F9D9F8349B485D1E1C959D4F02B9978BEFEF37C8ACF8FD5D4E28C50848F0A8B503066DF95CB499A23B979382F936CEB3FEF35D9D1AF5531FAC93AEB3E9D4EBD0DE36603A69C13D05457A1AFAA0AAABC6C04AF0FE7EB270F37AE89ECC722C9CC88DB7E2C2FB58FD2FBB1FC244D81CF37D7F0BA76023FBAD18327CBFAA9BA7B829EF36034B9B8FE7396E31DB6BED3171AAD5BEBFDDBE7636E9FB399CF786160377F7BCBED3278264D585EDDC0907509BD973FA5F58BAE1461D9D9C7C45F59FB06665937747C1EC469B930D796A2ABB209A54F3D096B7B276A8E5F46CFB573287BEA650CC91EEF63D15620C4946A6BCE42DDA717616F6DC0A26713BC175E001943E3FF2E3AB9192D9FBD8341913860DE10A99F8A7EF2132ADE7ADCCA239131C0A69E48707318EA81703AC3AD23172EBD7FFF79464119CE9E390BA9541CD07F5E4185A7CE7C85DB9601BC71298BBAB6B42B9F9334AFDDB88B73D2FA6DFDE7FC3A11759486EC3FEFCA2945EF9D9BF479C7AD9BA87AED2D58A9F709EE3F27FDE44476F8F1DCB66F43B513FC7DF9C1F1D8DE8FE5D8FC3ABD1FCBF74FB5E037DD63784962C68FAE74E2D7E53A3C5BA683C0EADE369F89F3B7A71E9FFFC3D126FC3C578DB77A47383E8F00EBC1F1063A87A1BA750EFA4611B44D9DA87BFE19E865CDA878F7344CD57968F8E22A9C6D0D4C9AE9E91548CE5F8143560FBBC303E1F1E3587DF8101D39E550E7666071726B5DA0058AB3752585149F37C0DE5C037D9D00AD19256878ED05181A84287BFD1814974ED2F2CAE222C3E786826B2131C07BF3B5B896472263E030F3399BEBC345AA734C6D869DB21B1DE7CE63BE2023C03F1C2EBDFFFA70539E0D2807F4F07AB7DA943E7F7B01656B7F54C147FAA016276BEB503C35B62B9F93349FF1F9C87598B7F9DBC7571E60CC6609898119831D73B959F49C71675A1A86CF7F89D1AF2FD2F9599F7DECAFF6F9DBF78381B0FBB150BA76F2B7FB3FABC0AF3CC3953589B7DB3F1029568303E76F3F5C7395BE77BC192F360DE1A86396F3B78790779BAF36E2DA80FCC8CBB43CB948D9EB473FD8D1DF6E69ED636C81CA773E81F4A3D728FB408A815A310C825AFA7ADDDBA7E06C1752BCBF848EEC02E4FDEC69586AB3986754FEEE18E647CD8C7E8344C2C81AA90103F7D34262A0FA8D57E35A1E898C81C3EC6F17898CCC7A32C73C0FF08672042F373BF16EFF389EAC31D37DAC67BC6B8C5D77DB3643DB92647DB88875AEAD07A4F19F9FB5EDDD7C73BA487CEF4AC03B6BEBEA187FB769640A99B7EF53F222F4660B2EE4F0186E4E5376E162870AA7C462148D855E07366794F0FC439C6DE940C1A89D3906FBDB55035634376DBD53B0BF7D6D8732F1BFE7A1E2D37D046B3BE364B76F68B02CE0529A1A750DC3B41C1C8FEC63D32F68A0F763B136374153511493FF83F3B7A79E7DFEFD336D78B9CD41D7079C7DBE7BDB3538DEDCC6376878F14558BAFB6096B743FAE929DA3E979CB90403C5D5A26347B1BEE10D4843E6CDE829BBBAE897CF4075F7326D63B7DE2BC190201FDEB5CD001DC4DF3E50940EABAC05E34633E4993C747CFD312D8F0C1AE8E3FAC6D6BFC9D9E7C96F9FFBAF0F77920ADF3E26C36753B378AE6D14BFEFB1E39DC169EADEC380F5E1A48FD6870B35272B944CD646236BA489A934BBAD23D79376656BFF452ABE4E12D8CF233F7F9ED9B7D1B76E5B25AF06D9393948CBCB657CE73F3DF6398EDCC944EDC3597C42DD0FC5E7C71BA438DF3F84CCEE465C1959A28F55EBEB31591FAE5FA9A4D793D92B06C81C351F0689BCA11AC0BA7308ABC3C3D8A0DA1BDA9B77A0BE7603AB5623ACBC06984A4BB13EEAA0D7875B1D1EC286C9C60A6ED8B0CFD31E7D97E0904D612216FF7434FFF17E74EEE51B1E063E8FE77CB544A8CBA3D5BF1B9F7BA863DDCB2FD1F2C4D82204AFFD86D6DF992FA4F8B93CA49EEAB78EC0D6A9A0F74C2447129AB379341707EBF0F59FCFCF2E61DE3D4BB50F3EC7946B0C5DD7AEC0353A095DC17D260DC7E7C9CFE752F9E3F1CE4FD6DBF07F3CC7C3F72F34E33FBFC1C7DF1D93E2DB6F3550F76C4C9CBDAE29E17F1EE978ECE0F4C1FBB11452F6A8D7EBA1659FBF9D8C6D7B23230F9F8B44382316E0B65A1972FCDB05A91017942A7C565B8F3495823EDE502BB6F9DB6B9BDA21ACE13118F0F79D937CECB83E9C5ACB1A06C81E2C4AF51CBD3E1CFDFDAC23D8E86AC39AB8159B7D0A8CBD7F06D3B9E99811376375D68579453736C5DD58B768B0D6A1A4DE49C20A6E22E502D2C60AC5D9BEE0FF0C5FE0FCED89E96FF7E773CEDF1EDE6F1A2ADE22752CFCF1CF616A6D87AEA601D6F6760C52F679BFA895B2BBF9683CFAE1B6F4652FFE8E1EB346EA3B7224417C2B1FCAAB9F3271163C1B5057D4A2F283CFD176E173B47F7D0E53937350DCBA46C7A93F7919EEC1DE80E7F68907387F7B04FA0FB3BF3D5299CDF1EDC666059CDA01D8FBF4702ABBE83DC823491FBC1F0BAFBE8E9163B53E5C659D14AAAEC7EBC3F9EFC742F231DA6F8081FAEFCC6D0A8CF474C6A43C8CD645AAFCC7512B18A2AFAD55D56055D38B55B90CEBE5545BE3E63DAC9657624D50B195AE5985357E35D678955819D06355AD882B06387F7B72D9E7C47F4702679F87B7B342C55BA68EBC179EDF517FD5CB6F32F2A8C10C1B55D798642D905CCA84BE3A1F0EAA9D5BF3C65118DB9A609549E8F3B9A909260D639F2FAE435B598341A118D2AFCF432F14A223BB04767135F32E56F5107485F7A97AB41146491313481AE1D19358999F8C5B79243206D8D413096E0E433D104EA76FBD0B32CEDDDA5889DEFB77234A1F6C9F4FCECC337297DA45DBE884D7C9D117FCCF2395737926468F6D7C0653AE09E61BF8DBE7241FFD5525F4BA1D3D7919B07676C5A43C888F3DEDAA81D98F2516F8661303DCF8F6E4E17329F54F903136A45FCE12624D8264ABCBA3D5BF1B9FAF50C796CBD7027CE77A2A8D4F161F3F8155EFA3752BBC9BF47CF0E5E555B4E4D6C056934DCB95AF7F8299610D2DABF2CAB0EC996774B4E60960171630E793E34B901E7D1F64AFFB78D4E5C988018ECFA3D3A9E18BA02D2BC2906112238A169884F511A50FB7FF3979968D6ABF92F566D555F598D474C70403FE7CDE53D6006D61267A8B6B20BF7815BD25C5D0D78A601454B15E1EFEFBB1F4E414C3DA2485B9A3332131C08D6F4F1E7F3B1B3A0F93AF355AFDB1DA8F657EC1C3C88B7E72709AF9B98580F305CFEE79E330C0F9DB130103E1F63F276B23AAD22FC2B3328D8585257ACF925860C0DFDF4E745A3A3B61903761A0FC2694C22688DE3E85EEFB77306535B1F66D88AF9DC8FEFBB1985ABB30661AA6F76D49340C70FEF6E4B1CFD9D0199C3E916DB368F573FBB1241F06D8D413096E521503E1ECF351DB14260DFDF47C4B535333A68C8331C180BF7D4E7C02F3A356E82A6B60532830AED56CD9CF85E518532B9978BBCDD9DFED7DC858B8EC5C23BD1F0B916D5D6ACC4F8CC2D4DC096F88BDCD0F1A039CBF9DABCB0F6B5D1EAD7E8ECF930F036CEA890437A98A81707C1E2F0C04AF0DE31BC7BEAED6ECF83CA9DC41F73DEEE73DC3AE27936018D80B9F2B289B9E3C9F04E207082587BB17691AF7FCC2BED2EF37DE4EFAD9C85BB4FAE3A533387DACCAE0203020108903E66EF8CF6FDD49F64FE37F3DD2F4FB4DB39777DEAFCEE0F43B7D8358EA8CA40C88CCA69E9DE48CECDC94AF07FAEAEA0FBC1E207347FCAF2F3F3AF71D433D4F2032D341A79FD8F37B8A2443985B5C8A59DED8C440678F92E3738ECF774CCFF139C7E71C9F737C7EE07C3EEDC6A0A03EE07A283E27EBC891BD557DF17C7C5ED76080737C1E455583282B5643D46480506EC6AD9C5EE4E529B1B0E4D9F17D44547ADF336391B783E673FFEB6CFA14C2F918D8F463ECC5C791AA7EB65895C141602018CF1C060E3F06E2E1F7DCA9BE4B250C1CB8BF9DE253A9DFFA704AEAB8F9685DB3077EEB9E8944424824FD94ECA0E20DA19267A265A1D446FBDD2B2AF46890395123B2A2A15A0B69A71395AD2E2C4DECBC560F992FE4DB8F2516793B687F7BA47CEE34D8203F7F19CA8C3B98778DD3D7DAEF15417D3F13233A03D4C5D5907DF11544474FC2D9260A78C6E4D81234F98FE7469ABB74304944186E6BA5E26CD0F30EDBAEA4A3F3F2252CBA1ECFF19D277B051454427EE62C9C5DB27D7D4FAE2E4FECBA3C5AFD1C9F271F06383E4F5C3E77F4F6627EDA83E9B1090C2B7BE1B2D931A153EF1903D647E5E0BBBEF1E87C230C1F49E50E3A182C33F43565FF0CC4520B9AA4C3E833CCA3B2C60451A321ECFB90F4FB2D8344E6F368E6AB15BCF411FA732FD2725B9104F54FFF189E95657A7F6743E1D547734E1E20EBBBBFC4D2949579C6408F03D53FFB5B5A3669A8B6D6DB2F6CC903E3E8B97C0C3373ABD057576189CA67776903DCE65E4627595BEBEE5FFE05375F6D0F690ED35CA568F5C76ABE1A87016EBE5AB26320DC7CB59DD2B816D6E1A2F89BCC2DD3CB65505CFE024BB3E3ACCC5723C755D556DB6055D9BBE3F3888D3EE15E8EFADB90348D620B6DD75F4AEBA4FDF5442681B40DE281BB449CAF56F4EA27F43AD44EDB24EEFFC377E0F5CCD2D7C70686E0DBC3799E2AF7CBFFDBDFC2D1DD86DC7FFC47E47DF7BBB8F3ADBF43DA1FFF0FE8BE78026A91063D978ED2CF6C2F9242F2D653013AC83E1A4D6FBFCB9C93B5AF33FFFA7FDFF5DDA26913ED25FD7ED32442BB3C916DB368F573F679F261804D3D91E0265531B017FBBC23B70ACB2E278C9A31F4F1AAA1C94EC7ACD3BC670CF8DBE78B9E4D8CAB551819B462DC60C0B4D516F279FB99AF46385D2ADFB2EF491F3C39EE75CFDA78612096FE761F9F57FEF287B8F5AD7F84B9F456403C7ABE6069232EFFE5BF07FF17DFA3CE37D176E30EBDC794A1770CBC9FFF673A9E970AF2B43B68BE710F37FFDD5F52B678E0DEF4BD8DBD10BDFA33E69CE3F3D4A8CBA3D5CFF179F26180E3F3C4E5F3D5CAAA907BA66C54F3F784017F3ED752CF989F5BC6F4E804D4E565B0B635C7E4DB10FE96CAB7F8DCC7E56CE3FBA0F93C1A7F7BE12B1FD3FB4A384C0E5CFB0F7F0F43693A7D7D61E501F29E7819D7FFD73F8626F736489F384933363A0F4DFEBD007F3B0995C7AF20EB6FFE03D4772ED1E997A96B03A256083EFE1C17FFE44F30DA29647492BDA333FEFADF73FEF63DA4394CBED668F573FEF6E4C300E76F8F4F79A84A4A77DDA3D52C11A3EDD19EAA244C5654867CDE54152F60FC9A854A13FCACE07332B6BD2EA38C7956BFB019DA3A099CBD9D905D48C300AF2266DF86D8E9C3A33331C3F761F4B713B9E1EB3CD43DF50FB4ACACED46C93F7D0B4BD39374DC71BD8549A36B52A233A398B1CF4D1A170ABEF31FB0EAF5409EC1878597415F2F7EF943D4BEFE3C26FB03ED75CE3E67AF5D9EC8B659B4FA39FB3CF930C0A69E4870C36160E778DEB535ACAD6F30E76B59D921EDF34DFFFDB6BD5E264DB877E61B27E87DA6C89EB1B1C45AACCA205E1888B5BFBDF0B71FD37C3E33BD80F4BFFF11B4E967E9EBFDED16B41EFD2D2DCFCEAD43F8DEEF039EC1FBF42AC3E723F645347DF03A2D2BCADB3148D9FB44B6F48F41F8EE5B9091B1EC6D62FADADCEC0A3A8B44149FFF25C7E72CE02E91EBF268F5737C9E7C18E0F83CF93150247FBC0F34D943928C498B15D67CF284E70FB877BB1BC525FD68EB70E05E8E1A69E93D282EEC83D7B392547C1EA9BF7D78C00CE9B90B109F3C09E9E93330375407C46BB9570AF1671FA1F9CB73D0F37901F7661756A12EC8619E65EB35C220698459260AD0D37C2B8F7EBEAE288B3E5FA2EE993B7BD19B9FCBF9DBF790E630F95AA3D5CFF9DB930F039CBF3D313140FA435B6EDEC300BF16AACA0A68EB05D0F3AAF6F4CE59B2E1003E27E3CE6385359F6C9BDB44735D3F4ACAFA71E96637060746206A1B464EBE1A8BEEE994F5B7EFA7DDC2AD2793DAED72B6F573F679F261804D3D91E086C340E4693AB20BD15F558AC1C606E804328CF428F6F4CEF7E40EBCD43282F70C2E3C99AB8A8B7D4E82DA30033D15262716D1AC18A3C7C51139963AF78B8158FBDBF7934F8ECF0FE77F1CAFBA3C5AFD1C9F271F06E251AF727C1E3D06C8DC25B207D9C2C4281666E631353EC3ACFB15ED3BE7C81D78D73C83973BC7F0428D3E6E7CCE6619C40B037BE1F34A5E4D4CD6708E66DDE6FDE88C341EB7767762AFDD1DADFEB4ABD7190E2081F3B773FE76CEDF9EF818B8271BC67BD6399C985FC153C5FD71F1B7B35D069CBF9DB3CF0F63BB9C0D9DB1C200679F271F06D8D413096E380CC41F031972079EE199F16CAD112F89CD9C7D1E21568303C7E75C5D9EC87579B4FA393E4F3E0CC4A35EE5F8FC60317047EEC0AF0A0CF8DE19395EA819E0F83C42AC06078ECFB9BA3C91EBF268F5737C9E7C188847BDCAF1F9C162808C877BAB6B34AEF3D5D82E837861602F7C1ECDFA70D1C8C1E7B1EAB389341ED7779AD87DA7D1EAE7E6AB251F06E2D18FC9F59F1F2C060E62BE1ADB65102F0C70FDE79C6D162E7D22DB66D1EAE7ECF3E4C3009B7A22C10D8781F863808C6F8FF77A326C9741BC30C0F9DBB9BA3C51FF63B6F5737C9E7C188847BDCAF1F9C162A04AEE40A6D8846CA90547F2B45028C76286B5589541BC30C0F9DB395F6BA2FAD9D8D6CFF9DB930F03F1F07B72FEF683C7C0FCE202BD3E7CACF5C4AA0CE28501CEDFCED966E1D227B26D16AD7ECE3E4F3E0CB0A92712DC7018482C0CB0AD275665102F0C70FE76AE2E3F8CFFF15EF4737C9E7C188847BDCAF179E262806D3DB12A83786180F3B773BED644F6B371FE760E039CBF9DC3009BFFE17EB9205E3AF7A29FF3B773B659B8F489DA2EDF8B7ECE3E4F3E0CB0A92712DC7018482C0CB0AD275665102F0C70FEF6F0DF70DE3D4FCB33731E981B8494FC705B3C9BAA1FAB5E2F735D72290BFAEA22D83BBB02744E8DCFC3D020C6705B33156F83BEA61529601194C1DAAD838E578FFE8A4AAC6F6C32FA65D7F3B03C6E8C1B6E0ECB7FCCF13987018ECF390CB0AD2715F93C95FCEDFD320566ED46FABA8BE263D9A9735859F130F18C3D1664FCC7FF1393BA1E267DF5D1340CDC4F43AFB00BE3DD52E67955E47AE16D14FEEA45CC0C6B3133E381412445CD6B2F30711CFA61D41F3986816A3E2ADE78179DE78F8370BFEFD9EDD7AE877CE7F19139B8065429E367DB8B7ECEDF9E7C188887DF93F3B7272E06D8D613AB32881706387F7BF83611D9F7AFE9F4D7D4F5AD7719B14FA3E593234CBCA2675FC3C2D8102D8FEACC58595D01EFD835180AAE61998AD3F8E1C7F0D9F4951F5DC6BADB0C93A825408FE083F7E8A3DBB588BE923228738B91F7E31FC03DA4D9F6CE454FBD44D9F8420CD409E8A34F96DD2C42EF954FF65D06C1E913B55DBE17FD9C7D9E7C1860534F24B8E130905818605B4FACCA205E18E0FCEDBB7F43ADDC0053593A2DD7BC7304FC8FCF61D6D403B3660C03D9694C9A05EF43A8B332183E27D7C5970BB160E9A6EFFBF87C6961ABADB5BAB1C5F33E3E5F5AA3E477DE02E17FC7D03484EFBEBAED9D79AFFE2EE43B1B7AC7A0BD7D3A65FEE3BDE8E7F83CF930108F7A95E3F3C4C500DB7A625506F1C200C7E7BB7FC339CF4334BEFD1A265D5E147EE76FD0DBA842DFF5D3684D2FC6CA8C3DF07B9EBB86EA23A7612EBF8B19D70214E512380445F43D1F9FFBF488CF67C0DA5842F3B94DD94FDBDAE5AFBC8FBEEC1BD05372C54BAFA09BB2D52D826A264D383ED7DD3B9B32FF31C7E75C5DCEF1398701B6F5A4229FA752FFB94F2E79E6B7907E7D19337613A63D0FC07FFABFA227AF605B9AFE2E1BAEFCF95F60A0F836F27FFE0CD45542E81FD9EA951F5EC28ACBC0A4595CD980BAA201B9FFF20F701975F4F5B1C925F09EFD25489F39D1BFE0D98067718E4953FDCA9B21DF79A0C701CD9DD329D36FC6F59F737DA75CFF398701B6F570FDE7C96F9F93507BE216E6069B99F392A79E844128DC96C643C95FFFF9DF4076F44DB887CDD0C9CDB4EF9DDC0BB6CF7D69887D3EAC1D86452A86B9AD03B51F9CC0406D25F4D477EE2BE76142D7C3A4E1ECF3BDEBE7ECF3E4C3009B7A22C10D8781C4C200DB7A625506F1C200E76F8FEC1BCA336B3026AB64CEB39FFE2D5C9DCD0169E617BCB0757520E3FBCFA1FBC2090CF5A8A015AA23E2739F3CD03D8CBEEB9F432D50C0D12184DB3E8555AF8749C3F1F9DEF5737C9E7C18E0F83CB531C0B69E54E4730565D393E79340FB8443C8E1EE459AC63DBFB0AFF4FB8DE7AFBFBD4C86FEFC6BCC79CEB3EF62DAD81190666E69055353D3A8F8FD57D0E55F87BAB2160ABE02DA9C4BF4FDF2F7CF6361B49F4963ECD241C3AB41FE4F7E01F117976194D4A333A7101356131CC3E3A87BEB4D4C8E8C53ED8405264DD1AF5E80A9A30B86B676FAE8939B7378E8F8F2F7FB2E83E0F4B12A8383C0804024DE1706D8C677B4FAE3A5F33061804D3D91E086C3406261806D3DB12A837861A0B34719359FA7A27DDEDBA0A6C78FFBCEF37FFB11969D7D21D393F1EDD6CA4C5AEE6DE88322ED04ACED9D287CF1238CB7F1B6A5F1D9E7E3D611DAA6EFA992A1EBD209983B15E8BE7D0FEB1BEB4C9AE1AE5ECCBB6731E372D3479F3C667561A4439632ED72CE3EE76C33CE3EE730C0B69E54B4CF5391CF6D5A278C95B9CC79F3DD7CB8F5BD21D34BBECA80A9228B9657D736997B9E1DF253FFC187F05F77AEBB808785313BF71FB3AC9FE3F3E4C3403CEAD5C3C6E72575C328AB31A1F89E0212E504CE7FDD8C429E0966DD68D261806D3DB1FA0FE385016E7C3B37B6F9308E6BDD8B7E6E7C7BF261201EE38C0FDBF8F6B2323D5AFBDDC8CD5642D2644469A9066AFB22DAC4FAA4C300DB7A62F51FC60B03918C6F9FF26C42AB5685E479F20CB6DA2091B6C9F6AB732F6D22B6F316ADFE78E90C4E9FA8EDF2BDE8E7ECF3E4C3009B7A22C1CD61C0C0FCDA37E8518E40A771A14B3D4DBDBF039D1DC3498901B6F5C4EA3F8C1706FCB16A199D8663C8BAED5E45351F9373CB585FF386C537DB58E7F89CABCB393EE730C0F1F9DE30A054BB682E27C764C500DB7A62F51FC60B03FE58ADA8AEC6A47B76DBBD5A712BAA0532AC7B5CF439E76F4F2C1F4BAAFA5AA3D5CFF9DB930F03F1F07BFEFFECBD695B63479A267CFF83F907F303DE2F75CD35D7DB3DF34E4F4F552FD55DD5B574976B71B597B2CB76D95565677A4BA7734F67A69D0BB9AF40B2EF0201621592103B080981D0BE2209098104624F1272F1E47BE2901247421292908420E3435C27CE3911E789E53E71C7F3C4B6DFECEDC40D0C4FA25D6C0D3A727F1031906A39E9FA0F338501AEBDBDA4A60112717B44AEE73AAA9F67579F2C9532C3E3676BBF3C19F9543F3F781848A59C7870B31F3040F471A1D8C6EAE6B5F546F64AEEC9F383868154CB49D77F98290CD0F9EDB42DDF8FFF7132F2299F1F3C0C64A25DDD6F7CCEF58BA58E038D8154CB49D77F98290C503EA76DF97EFC8F93914FF9FCE0612013ED2AE5F3E875E0F53F83AAA602EABA1AACAE2CC02C53C23E3C0E53130F86013954754D981E93A50D03A9C65ABAFEC34C6180AE57A363A7FB71DC2C19F974FCFCE0612013E398FB71FC9CF8D7369EA04334CE5ED38581B9950DC8731F62BCB515CACA62E806F55874A831C1F0BABA5F1BF4A70B03A9C65ABAFEC34C61809EC74275B358F1B359374B543ED5CF0F1E065229271EDCEC270CAC3F7D0E9148C45EC9BD7F76050B335E789DD398D16BE0D25A6095C943CE874814035AC33C2E1EBD874B172A71E9F83D5CBED884DC820EDCBC54814BDF35E2E6B51AE4E6B6A2AA7302355207EBE2F107EE0BEB8D31E5A71A6BE9FA0F3385016A6FA76DF97E6DCB13954FF9FCE06180F2796C7F20EDE4DE3230C0B8C14DFFE000F4D22148BE3EB62B0C88A50E085EBC489BBBD0ED88293FD5587B15F99CDADBB3CBC6F2AADA5A13954FEDED070F0399B07BEE577B3B37EDE45E27ED87A5BB13FEC5C7D00A9BE0D6583054540EF7487FD4F81EDFA62369D09B23958D2DED7C1E090381B4902BB5B7EFADBDDDB5F41479F7E5A8A854A3ABC786C2121572EE0CA3A26C34241CD5CFA96E46F5738A01AA9F278E817586C79F30E97E76ED067B25F7C9CAF7FA9EE0EEDD3EB61C88237D84803FE75A23CBBB0D8CFBE383429C696EC6C79555F842D88F2FEE7D8BF3236328B7EB4338FAC3922A9C11897044D08A4FF24B70B29D8FBF5634E224BF0CB9661D3E292EE0F0B9919543CEB8E3CA17493A515BEB0B8E25A4BB3E0EB27EBE5B3EB72D3C457F9B1ED53C2D2EDD1A86D5EC8378C089C2D231CAE7B42DA77C4E3140F93C0E0CF42BBD908A181D5BEE86C9B1881A81195D9DD6A832356D5DB07475412737C3D8C283AAE85E5CF2E5F227704C2EC1EB7F01AB7B094303D2E0998F62A92384A78FD757E1D6CC328E0B243823A8C0B73DED2877BB43F8FC73413B0E173E006F6D0DBF3A7E15557E1B7E763E1F02BF09F72D165C940DA07A75659BBD5D657060C1EF65D366B23CC7FAC613F64AF97C777C9E0A7BBB52378771CD0CD46A379AC576760F23B7CB4FEDEDD4D64AEDED1403D4DEBE030646A73650563E8686361B7A150E143F18445B8F0D753D5E2CB8A6F0A84384C762093672AEB257723FCAAB837B621A9A4115D425B7A197B4EF285F6FDEB2B70FC99F61D8E8456DC91D3C7AFCE865D9D882FAF985BE61947B5DB8A53121DFE3C1B5E13E942EAEA1C4156A93BFC6BCCF356990EBF282B7388B4B0A15EE5BAD2861E25EE81E645C37FB9D707B7B7BD7001A1B6BD9B4913491E7E44AEDED7B6B6F0FF8BDFEF5E03E46C41FAB4FB2D3B7D2DD274B26FE6EE350DD8CEAE71403543F8F848155E6DAD6390981408BE28271C8C666905B3C868AF2714677DE2A1739673EDCF2F23A5C230ACCCF2F627969053EA33E2EF926F31368B49B73E0C7CD3E48858D8C3F7096C7967E7E51E7469171089FF10538D522C2C90E21CE8B3A71A64B8C92A9299C13356F1B1F2F5FD9609F9FEC91E3535E3D8E95E7E1B663125553D66DFA79FF881AC3B221366DDED9E76CBAC895DCDB997EC6784303544C9F6572A03DE5F57190F5F354F039E16F8285009F13479E513EA76D39E5738A01CAE7F16380B49B66DB62C4F8DCF9EDCDB53C98452218C59DB030CF89E3FA470A8B23CA20BC595ED187DAFACDF1EB86A6966DE3E7ACDEED7E0C9E7B1445AB4FF1D1B9D3A860E2FEE6ABAFC023BCED76B376F44873DE02CF3F691AC2B51E018E0AF8411B3D77FCBCA8AA1E3555E5B897578A5A5E1BE4725F90CF1DCEC7EC9C7DE59D7349D587433B094D63136C7D83589AF732D73E188442F6BDCF39091DD3DF58F2CDC0EB9A81DF3D037DCF201626ED59838148580D77E9B2B7BB6796831C5E53A70FFA8923EF02E1A8BD9DDA5AA9BD9D6280DADBA363C035B3143C73456BF48686D9780221C3DF8F5EEE27C39DEB6E5319A0A9AB62F8C903797929C69BA4C87FED1378C7C4213202766D9286805FA5D571CA66CB967EB4A317E7DB6A71B647817B4603CE74B4E2AC548A22AF0FC71B1BF105A3B7F397A743B8FC8A4ACB3EBF3E3284131D527C5D5B8192D939145AF5DBECED83132B9033E15AA55D68691D08A68FA4D5291AC0C4E5CBB09D3D87B9A2BBC13106F6CAC9CFDD7A23F23B2750C0704DC091FBBB7943E0E7E721E766352E7F98833B951D682A6D8279C400D9BD1C48731FA2E77601640FF3A16BE061B4518219832A2B30902DF6F6CD6F3942E208073C10B45898BEA41A3CA1051772FA70E16C1FA4BD66E4E7CB51DD68C1B4D3B72B99C9F4899289BFDB38FB5537E3D6E188656EC77A8B9566AA9FEF4F0CEC5666BC1848A59C7870936D18E0DA37899F3B6E49E67ECB39FBC984AC451F1A8175A097F56BDB5AE1526AC03F7203BE11E1361964DED9E2D212EB7730FD87463E0F1B4F965F96CD96BDFDBE671505562D3B361EEF7AB480BD3DC7E2C5B1E6A698F6F6B631378CFA1154D4B7403BAE64D315C8DB134EDEC2CB89BC63CB83097F4A62C659E6BBC47DB5F20C6F8B8C78ABC3820FEF77E1BD53D77142AFC159890867ED6E7C7D271F36A51C66A6FFA0EB954141F6C1ABAB83736418CA9A12CCBB1C598181586D1CD7ED059F57558D43ED5E4313C3055F7EDD8A6B79A3E0D5A871E142276A98AB77FD055AEAC77725339932CCB6FF389BDB726E1D56F3353BD61BE5F3838701CAE7E9C540F87865CE3559C85C2496BF9E7D0FAF75226857B75EBBB1CDC6CEF5F7BF7C1FFE9CD8E85B5A9A63AE5723EE1C735FE89E4C788D39B1B7135B3D7B8D616F0F5FAF46F6BE2357726F79395610A90C47987CB17198F05C3E27EE8F3227FEA45FC43BAD6ADCBB558EFBC332F6B9ECF061F65A60F16DF6670EF0F8792AF793110AC7F0686D2D78AFB52EA2556C06BF4E83FE2127EEE4295152A080C93A87B2CA71D435E8313FBFB42B99F186A3B6D6E46CADDC3AB4B91676AC376A6F3F7818A0F6F6CC62807079B4F88FE52341DB73C00EED19B342DBDC00CF84032A86AB87734B606C6FD81103DD721DAA2B0BB0E4B305E506E6B79FEFECC22D8D96B97F1E379707EDEDE32AD6C5B2B7B78DB9302EEBC0C3D2E26DE541F2C8B5B173FD6B666B303FBF2D1AC33BCC3789FBE71B72FCF74F84F8DB77EBF1E35B321C7AFB06DE6AD142F5873FE005802FA513F0F856B7D5C1B0727A9B5D249A9F84CD643B908CBD3DB57CDE1EC2E7DC773D031341FFC0F064CA64265386E1F1CDAE25C8650EC8473D98995F453B537F7ADD744C99437267D0AFD078B1B4B89A923A4C75BB6A9D5A0DE6CDE55DD8316FB1F2194FBD513ECF3E0C70E3533E3F207C5E5B17E43955110F8F1ECF63716919DA9E5E482F5C82B1A36D470C34F728C063F87C657E3A2837C0CDF99E5914392CB830A840B5DF1B95C3C97AB5228F07F74C26765DDA77C34A089EAEB1D706E69A231F8EB83F1C193FF74F2820EEE9DE561E13A33A789D9370AA35F0BB1C585C5C89581E845F9B5B2DE0DD6F41C1855AD4E475A29937C4F2EFC8B56A88DF3CC97239713AD36CC43AF8A470AB4FF08B722D5EABD2E047E77BF05AA5063F3CD38DDF54AA82EFFFD465C798792EABF93CB5F6F6C8365052BE2D4213E4CA19D611DC906B2A642663E3088F9F5FA04045AD053AE314EEDF1D64F7C3A9689D64FAADB3DBE2189CABA8AAD1C2E67B8451D924EB9F74FAA1507A526263D96D3EC3FD0545A3C1BCDDB9D91B336F5C7FCFF85C309F0EAD27D847DDA9DE62A599DADBA9BD9DDADB636380D8834522F58E327D9C31E669E7024CA236D84755300FF66334AF0AE6CEB61DEDED6D8C3B7FEE3CC40CF787DBDBBF6EE0A37CCE8F3B362772140A346CAC44E473B29FCC37ED02D6C67EB4249FDD4FE65739A5A8728CE09EC118320F9E6B6FBF5150035E4D052E5DBDC6DAD9C9DC0033732569ED3873113DE7CF62B0AA0D869A7C8C9496451C572079E91175A0E2CE1DF04A2B50FCED3994DDBCC5CAB01D3A1CE472E2B8E30A017B3F6BB3AF93E3FAF7CF597BFC1BA38BF86D6E2FBE5E7B82D75BAD38649AC6EFEB352136FDC2674F6030CE64A41DD8FBF1F3AD6F2DAF3DC7D4B812AD558310B6A850714F88BA72050ABF294743450FCB0F841BB281CF4B98BE58738B0197AFCA196C99D9FD6A6F3F18C5CAE252C4385333ABB855A8C6C2CC22EB17F479A0EAB7A6A40E53DDAE96D71882796B151A76CC5BC0BFCCC9674F8731C4FE146D3DCD4E69A67C4EF99CF2793C7C2E0A3E9FB6B830E7F162D6EDC1A2C705DBD0189CCAE190F97089C80F9D0FB708837E6B1E8C58BA351FEEB3DA067CDBD98EAFA54C9BAD9147D5CFC93E721FDEBE8AB3E36E5C68A9C7E98E46FCECE40D94588670B8B41A1FDCBB838736C3B6F970E3F659E8F46AF05A44F04CDA43E6C30D155561F0E65568479C98517643C7F42D22E587C4595A5A63FA32AD18972820BF7B93DDD39EBC23F3E69EBCF96690CF23D501897F556C0EF2F96BD219FCD3B94EFC85D15F7E7A67086F346BF18EC818C2E72D161FD6D6D733D20EECF5F8F94C980DB4F6DC0334D4A9507AFC012EBD7715B567AFE3FEFB8C3B7C36382E41F637DC8DCC78C3C56B6BD5997C31BF65B4CEB3E9CE2F180BE681F8238DAD6493AD958C1D8DEB3C71C721F98994CF809F6BBFA2F6766A6FA7F6F654DADB3B837E5D772FCCBD8CBE39B182E90905FA2E56425DF72064BD5AB2185879FC0412690FE35F79293773E7B104ECED7A97173E5762E37821F931598263ECDC7176B2971E79F7ECADB7593EBFC2D7E374978375273A2782FE3F341A83F6F4A05DBD48155CFBC65D0757D669CF180688DB337BBBCD81274A55709D01F1AF591C18AB2EC794CD0D9DA4070F0FE7C0AB1E467F4D37F827CE636DC19792BE6F327DA268F1094F114C13FD732799246C247F3CF293E9D3251327E00FCC9F25631E3BE56DB7F98C9566AA9F53FD9CEAE73B6380EC0317F08F09DAE11A1B8161CC0DDFF8003C5A037A6EDD81A4BA2CE67E32D1FC5C7B7B21BF03678F1C66FCE26DF6F6C3D57CDC52CAF071651D8A3C7654CDCEEEC8D781B359FE5290876F982B39BFE5ABE64E1469A5DBECEDE7EF57A1BA3417874F5C06AFF86E88BD3D561E481899B09DB5D1936F91F9EE6A7E35E4E57518ADAA8299C90BE1A3A7F58DEC3B1266F4073F08B1ABFFD9BE8A37F863F8CFFE29BCD333819F158DE2C757FBF1FB6623DE6837E19FAE0CA0CF1CAA87EF453BB0A7F676FF62F01C20E2E7BE23761491C4B6E97FF63DEB27D754945332651829BE581A3AA731964D39243F1C7F2AEA301DED6A206F84CFC9357CEFBE54E693F2797662201D7540F93C85186038887B8E1AEB67F4A2683259FB34E31295CFB5B71367B6DB3965B3656F27E3E7B9361B7B1ECB91E2429C13D4EEC8E781B359C898F9B74A037B7ECB574205BBCF5C247BBBC9A843E7A0026BAB8B21F6F6587960C3ACADB157724FCACBDC29846B6A19CA5B9761EA1F08C609E897242CD7AE7E62ED09DE914EE0F7BDD378B7CB8A77240EFC5B8902BFAF57E3D74D66FC997947D2B31FF93C15F6F675EBC466B916146D8E5B30CE37A245EFA51B50353662ACE22184C2CDBD7A1FAD6F6CFAD737BFB1BCBA129C13CFF5EF2433DEB405FCB16CADDC7509F1D894491A83F9E1FA993CB1798890B7BDB2B506F2425CEEC3D1887BF7459599443EA9BD9DDADBA9BD3D7518182EE76162B00F8ADA064C4FCD6261D292320C481506E4DDBD8C9595859765B3656F2FF0FA516037B3E7B1085E3C8DCB9E1E389BE586DE823B6A257B7ECB3DB32938972E92BD5D38AC83C7A2493E3F260B364E9C08BAF5E3C7A1FEE873E83EF933A41F7D0C5575111B8E3B8FFDB7CD56BC56ACC4BFE58EE1F57A2D7E7A478E1F9EEFC72F8AC6F06F370670B650991518C886F9ED7DDA1730285FB0670C0C5DCB8751AE84BAF83E6B1F61FB4AAC7EDE19D4CF45662FDB17227E93770966DF725AFAC8F1EA6684EB76ECE3B2BA6A67643FC9CFCBBE23376FD9A09BC593B7DDE633569AA97EBEF718A0FA79E4F66ECF3110453F57F1F9701BCDECBE6F6BEB4F31A5D3B37DE764E587EBE792AE1E4ED96CE9E727253DACBDFD5467376EA8C7A3CE6FE7EE0977A5578293ED4DB8D02BC3C9263E0A9D561CADAF0B193F0F9441AF7E1AB31E0B04DD63589E3125AD9F1B041DB0758AE1D16BA16E6B8392E9FF9846CD58F598D0FCF39F435D92BB4D3F27F6F63FB468F08EC283BFE866F0AB4A35DE1DF1E12F23767C3068C7BFDC1C6279683FEAE7A9E6F3D975C6BFF2020BFE3576CC63D53F8B19AB3D444EC07FADCBC196EF51FB223BE7E0EBC575D6B58C26BF262A137C1E5E6EC44F6CD8A7C766D8FC902B376F6ADB6256B4E5F1E46DB7F9A47C4EF99CF2F9EE3020E68C9FCF7AFC98311BB038B780699B073EA30675572E2734661E6DFCBCA15D8ABBB7AF45DC1FEEB8A0813DD33CDAB92B91F684FBF4E615089EFBF1D3EF0AD9F3CF0BC3CE6D89741E0BBF550C61AB2064FCBCEE5A75DCE3E73CA6EF23BF75118F57E6A068EB41CF954B98D669D8B00AE6DD08732561B9E3E7C47DA4F4E06DC51C3EE8B332FE597CE87E84136E0F7E23B6E3A31ECBBEE5F32146A727DF278ED80122F963BDE3FA250C4E48DF2FFC1D999B607A588875899475C42E4FAEC4F611285FE2FF62761DA7D6D6D9F987F1CA8C379C6F6131E4F9DCAC1FF38CDF3F33BB158E497B4B8B22E6B7560CA6E0D8C2EAD070D02FCAA90F59D740F2F3A97391F53F105942E4C79BE664F2C9CD9BCF33B3153F8EBC45CBE7DAB082AD43E2979C2E8E99CF58690EAF83DDE499B409BBC540A6EA2392FC4CC90C8F9FCA3A48267E2CF9A994130F6EB21503248DB16472F33058D5003DC3856A990116590B047FFD0EBD3947E3C640716915ECAABE97DF3505B9F7AAC6809CC11E769FB778F784AB989DC269B1186724BD28719BF175631B8E350942D6AB05E4F79AE7312AEFC6D9BB3530CADB43D24AD2415C3CE569908D41595088395E2D1C45F9D0E43FC4725B3BEB16B5FA60B8CB75BAE09CF643D53A7C70A9176F5F94E1CF77E578F39808BF3EDA85DF7EDC8CB78E76E046E5F89E6380B8816179C27C9E4AFD9CF4FDFAE56E7477DAD875687ADB1C6A9BADE8BE56C7A68FF0C34AA3805D4FF9A8458C5F966BF19B4A25CB05FF72670CFF785386F79BD56C99A7BA8F4CE407FC4BCC7359091FAAC287589CF16CD9725EAEFD0C84F3AE3C65CF22E9EE9B8466DC0DB9760E7567AA31AADC5C63F7ECF4192C2D2CB1F969FF321F1FEAE7D83D06497EFEF68B2EFCD3854E7CE1F0B3B607AEFC74EA02DCBCF9A72683CFC3F3C68D13C86787C401EF8C1FB5E249345FA80DE633586F534C3E193E3FEC5E0DD65B783EA97E4EF573AA9F278F81F0F5E7916472F360E8EB877D4806D3F834DCA33D300B7BA028BCC7C47912313ED7DEBEFCE40578D51558F6595F7E77CBDE5EB6F61CBC3937EA3636E25E8F76CFEDC7371D6DB8D8D385D2D5559C64B8FC547B5BC8F879A00CC8792C8BCE51340E59B1685784D8DB493A8823E7CC91F05AE71A5A5B8CE8964E606A6903F5F53AB6BD5A5BDBC084C68EA9310D6B6FB7F60FC03ED8B3EB3AD86B0C44AAE77097093E27368E8A4A359A3B9C181875A1F8C1E65E6B8D17EAE09BB0C3CFEF80FCF5DF607565014B1DDDF8C17BEDF8BB231DF853AF05BF2C50E135BE161FF458D2CEE7CBCCF329A31D2B7373989FF4442DC3721ED1AB9750DF68005F3481CE561D24DF96A09ABF79C6A0EB93AFA128B8CBFAAB8E15E37F9FEAC3FF3E21C151E72C7E7C5586FF281BC5618B2FA37CCECD9BCF3E19123F5A5D57D66EE6B3285F837AA10EB97C4637AFAD0DE693D45BEFFBEFB2F5D6C4F0F9CFCA0DC17A0BCF27E573CAE794CF77C7E78A5A5E547B3971239CB35686F24A60117740C3E8478616C1E6FBF25AA86B2A77751ECB59C9001E4E5A70A4A105F7F5B175F480FBB2BA0AB7194EFFB6A90A9FD637E2686D0D2A9EBEC0372D0DDBECED5CF99BE7B1C8D9F533644EDEC3425590CFC93A23C22923132B90348CA3B84E8F9AEA51F64CA876810E7AC5241437CF62E3C906CC83033076129D762DADFF6136F3792AF79321B8696678AF51A041419E12BDF2493C2852A2FCF322CC2F6EAE67D31F3BCAC6F1E416E35F182EF89D408FCF6CB3F80F46577F57E6C1877D169C926E5FB79FCAF9EDCBCCF3AE5B85101D39CC7254C89C42CEFC578D73056D022D931F3DD38F55A2B5D38EBCC3851034A8D9388F4F9E82AAAE16F32B1B287EFB1BBCD3E5C4EF1AF438E65FC14FEE8CE0DD7E070E1B66D8BD083235B7999BB7E5457F487C5994B9BD817C3E2CD36268C0802B796A349E2A0BE693D4DBD8277F65FD551FDDC4FBCA9960BD85E793CE6FA7F3DBE9FCF6D463809C4312BE670AD9CB7DBC4D02C7D000D4C24E18A45238E4437163406E9A02BFAA102B8BF32FCB66EB3C96630D8DB83AA244D5F242DCFAF955951967BA3BF1715E21722D467C78EF1E8E3436A3C26DDA36BF9D9CC7A2958BD13128877BC2129256928E8A6B7CC8F86258351368AB6C41C1079771F7DD2FA1D54DE3FA8D7E94D6EA31353103ED801EC379F7303FED8665A01B8AD21AE63B8FD3FA1FBE2AF3DB2D9C6F917953068B9FF5137B6DC0DE1E38BF965CFFD7D7BDF85CE7C69F755EFCCB997EFCB268141F8E4CA65D3F5F619EAB056DD08B7BB1E83285847B12A53C485E489EB867F3127B7BC04FC6957F796F145F2E3CC29713B3F89B8F4478BD720C87AD99D5CFB979F33B7421F1A3E52D3C9FDCB081BA0AD41BC9E7EF3A2683F5169ECF5869A6FA39D5CFA97E9E2406C89E5D2FFFC3278175C164FE7B4303A393ACC1C2E8A623FC2658BB2431BF456CDA8B2BABAC7F8189271291352BAB2FCB66CBDE4EC6C5EF6BC670513106FEC60AE3E2B3BB17B82651B9F61467451D28F1CDB2D7BA95856DF6F68EF169CC3A47D1D03984E5590F9B2EB2E689A495A443C270B8A5BF0F0EE7634C8D0F409E5B0379DE55267EF439F099FA0F3385816CB0B76F7D776BAFB5009FCF0B3AA0F8F824466B04187FF74DFCF03331FEE1D2103E563AF0EFA51ABCC5D4F7FB5DE6B4F339793EEB59808949D712D3AF5BF3CD05FF15B25624F0AF04E2933C04D6A8CFD60B83DF507DF635F4BC52B8B4E3B8FBFFBE865F3379F8F1F95E7C39E9C7BFDE52E0AD4E1B3E564F6594CFB9799B773BD8BD7DC2F346DA8648F1B9F9E4F239A9B7DEF35FC2D1DB839BBFFA0EBF6BB204EB2D3C9F94CF299F533E4F2F06CC9C3CD84635B0F7F7C039A682CFB78C69868363C527F6FC9ADC076C39D430FF7571416ED4F9ED64EC9CCC4FBFA431C5B59F0C8FF9FE9715B538DE2080E0F9328EF0DBD86B600C9E6B6FAF6D1143D8DE8CBB05E510D455B3F3DB275FDA8A493B3431A2C3F29C0F2EAB176B0B9B7B69BB8C7686FBBD21F9D19BE7122E4FCAE789F1B9581ABAD79AA57E93CFD798F703EF7F83DE732761BB55821F5F1EC2EB8D7AFC75DC8DD7DB6C788BE1F17745868CCC871B296E4007A35FFB460722C65963DC3883C7A1A62ED4375AD056DFBFD96F64301F086764E20FE45CC4FC940D857FFF3BBC29B4E33F99FC7CE99AC3BF57EAF096C48A3F8FB8323E1F2E90B769454F48FC401A0279732AC7E094F505FF216E9D917C06F69123F526F9FA53D87B84B8CFF0F97BF2E960BD85E793F239E573CAE7E9C5403C6D76543E67F460F3CB7D2488AB6F12606D6DE5E577B7F4F333D23EF63C960B7DBDE013AE5E5EDE91CFBF1961DA419B06275B45382769C3375D03EC35DFA2DFA69F0F18BDD06915E0B749306131B2E9B2BCB40106D246C614B87A45A4FCE4158C265C9E0799CF773B7E3E3DB30293988FB1DA3A8C370991FFF9E5209FE75C9305FD926B0FB0D423C3B274733EC7BA726CDB7AB5803FDDE3E73EE6B951D40BAF6614CB2B8FB03AE30BEAB0825FFC08CA4327B1DCD58DFCB78F82972FC1C35BBDB878AC2C64AF359287199501CE97F9692CE8DAB68E2BE0CFE4F839376F8B4B2BC1BDFB9EBC4CE76A3B8303A6ECDBCF5E83AC9A87B1C287A8BB598D86DCDA6D7516A8B745269F81F59C4D0CCFC7CA271D3FA7E3E774FC3CBD1888968778E31B39F13B7BBB39DFCDEC792CA36343C8C92FC2F8C870305D2169ED10B1737762E5E7F84969C8995E0A8D17F2510FCCC619182717D939759EA98594D641368F9F97D7CB42CE9089E48FF62EB07F887580E10A9E0092E347E054A838321D11E507FC1F72B8809C7313F07F9BA07E7E9BAFDF310F646D74F87371847D6B2E9FB881FBA73550F12A50FFE12178F56A4CE867D05E238E5A9EC44FCE7E257BE190F4932B376FE5D2F8F5739E24B13A88541FD1CAA9B4A61B2D4D9BFAB9E45635FAEEDC42E31F5EC7707D1B569DA3DBEA2C997C86CBE4DE53FD9CEAE7543FDF1D06D8F56C79B949EF27439C43B1A5D3CA945B7E72A6E27DA6ED25EE1EA35305FCE1F789FA03F7678B54C13218B57AB1BA308D119D0DDE190F9B2FB24F4E60BE3D195358AFE36FEE7B21DD9A872F627415A1D010D4374E9EEE66AFA45D32FB9F4354AF4249C918FAC666C1AF1A61D75715578CA7B40E32858144F57362E3A8E5EC83F7996B111F3B96F1419F9DB92EB1D7BF4EAEE213A6AFF3BAD086AF3C8B6C9840FB4DF604237BEFE95B85D034B7427AFA149CFD5D5BB81399397E515026F1932BE11F723E3C395396D8762B66975947FC89E0FB94C4FC32FD4BCCF57BBCD9EDC411D742F04AE65FBF239BC22186970361027C44F6010AEC9F48BE55F8ED456899BC18DA5B606C6FDADAD394C94B604FD390FC70FC7D563F9B1F72E5E62DDE3A0CDF9730D13C05EA23D2DEABE1EBCF5D133EA8EB1BA0ADAB82DB348135BF3B25F9A47C4EF99CF2797AF97C37FBBDC6AA8385A5C770CA066090F663CA6062FD99C200C997396CDD7D247B7B78FE4F9EEE0EEA20646FD29202259A5BCCB87B7B000D6D16E4DC19467191E295E3F30FAD8FF0518F1EBF17E8719279F77BBE9ABD7E687FCCEE83F7E9EC631CF12CE1D7151A9C7DBA11E41BC1B081AD07D2EF6B61FA57C1F354D8F33BBA38FEF64D3F7B1E4B7BF02C8FEAEAF6601C127E6A7A3EF86FC765EF60E206F8FCF5560BDE55FB715866C69F26D7D9EBC98D67F8A3CC89631BDFE35386734898A3DEAD3E4901F3CCC8A427B03673B8A63A645FC1403AD9BC84E4AD3D62DED8FC44C85B5C3616265E8ED8B4750ED0F3C4F3D4346C0CD647F8BAD3C1AAED6B52493E3B983CA72A9FD4DE4EEDEDD4DEBE7F31D0C79760AABF190B8BCB30F5F5661403C9DADB132D9B836C6FBF5BBF799EFBDF7E2AC24F7247F1A3339DF81F5F49D93DBFC8F51FAF0FE2B7E50AFCCFD3FDF89BC31DF855A10C3FBBD9CFC6217B7713B9D16444B2B1C7EB4FA47FF4AF3764F875B315FF705C847FB8DC8FFFF16907FEF94A2F7BFDD7ABBDF8E1F92EFC346F0C7F77BC930DF3E39CCDF47FD515FBECD058694B343FF1F6C94ED61B82E700FDFDD5D184F2145E1FE1E514AD5F9ECA7C86CBE4DE53FD9CEAE7543FCF5E0C10FD5C2F6C83BAA119A69E1E3864FD19C540F87C38B2EE28FCECED703F193B4FB46C0EAA7E1E0BDFBBFD57C2EFD3C9E7E96ACBF782CFF7E23FA67C9E5DFF31E573CAE7AF2206B87CAEEB20FD8941E8C4DD70A935F05A0D294BE741E6F354EE0F176E03E5DE27EA8F5766BCE192B1B5C64A5BA2F9C9663B5B2AF349EDEDFBD7D69A2E99D4DE4E31B02306D6D6D871CFC0BD8A5F87F9F905D6E6EF30B9601FE849593A0FB2BD9DEAE7543FA7FA7976F5CBF70203E994192F065229271EDC500C640F06C83CB716853978EF501960ED95B2FBE490FDB1BC1663CAD27990F5F3DDF2B958EA60D715A6C3916FA7A30E63C57FEF862C2D7921DFDD0D0652813B6E1990B52399CE27E573DA96533EA71808974FD6C890B539643E2F990394EEB239C87CBE5B7B7B3AF72020DFDE4DDA92B1B5124E4AE75E0A89A4399D7636B21E34D3F9A4F6766A6BA5F6768A8170F964FF0CEEFE54E92E1B6A6F8FAD9FB37BF7AEADB157B2576FC5CA06AAFD3EDC33B8D0F0620D253EDFE673DF2C1BE6DBBE2EF67ADFE161CFC62D659EF39EBEC039E65FCB356E9DCD47BE9D8E3E59ACF8013EE7E6A7C0E583E0F906931F339BB79A051F93E625E6FD061ECECC22CFAC61C3DE3399D9BD11493E8B6799FE26939FF21947C85E8799EC0786C7E79601D9E3615B3E9D6E36FDB94C3E4B993AE3E6939CB17073A46F5BBD25924FAA9F53DD8CEAE71403E1F2EF3659717C6115477CEB0C9F5BD35E3607413FCFB976837D1FEE1E1616EF2ACD62E9663B9EEBF2326D7937AE0FF7236F7A01E724ED38DB2842DD0BA69E1A84385A5586BAD5051C69E9C1C70F6EA2C861C1C5610D8EF3EB51E271E2A1D38E9C713D6E8DCAF69CCFC9798117FA86D9FC5478DD6CBABEEBEDC695EE2E3C985CC0A75515C8E911A2647115878B4AF0E9C37C54BD788A53FC0EA64FD2C1E693E4E76CCF200A268C59CBE7E1F924E9BDD2DB8B9B2A25AEAAF4C17CF25F3CC7274555F898C9276F71765BBDC59B4FCAE7B42DA77C4E31102EFF5A8901FF51358E0F7A2C0C9FDBD35E36FB85CF6BEB1B237276C071BFB113BE13E5F3445CCDEA4A5CE1C8B7D351873BF1793AF2938D7C9EE97C523EA76D39E5738A8170F964AF6A626BFF6A96E8E7B6B497CD7EE1733A7E4EC7CFE9F8391D3FDF4F63A75C3F1D3F7F353170F9C138DE1BB0E113DD2CC3E796B4970D1D3F8FFE2EDE3DFCEF744E24BC873FF9763AFA64B1E29F291C8BFB7C8144FCA79238D72F997CC68ACF2D8307F586B4E493945FB43453FD9CEA66543FA71808977F254F8F5FE60DE113FD0C3B1F2EDD657390F5F354AE3F4FF63FDE8DCC64CA90FEC7D9F11FEF463EE5F38387814CB4AB94CFB30F03B78A35F85DB315BFBC3548EDED31DA38AECBC4FE70C9DAD9762333DE70D4D69A7D76B6DDC8A7F6F68387814CD83DA9BD3DFB3090DB6CA2EBD522F8F77A7FB85871A87E4EFBE5543FA718A0FA39C540B4F970013E4F77D91C64FD9CF27976D5E1ABF41FEF463EE5F38387814CB4AB94CFB30F0384CFC919D1C4513E8FDEC6711DB5B7535B6BB6D9D976239FDADB0F1E063261F7A4F6F6ECC3004F3281AB6233EB4EF0F5692F1B6A6FCF2EDD2C99705437CBBE7EF96EE453FDFCE061209572E2C10DC540F66060FDE973D665020307593FA77C9E5D75F8AAFDC7C9CAA77C7EF03090897695F279F66220D572D2550799C200B5B7535BEB7EB2B3ED463EB5B71F3C0C64C2EE49EDEDD98B8154CB49571D640A03D4DE4E75B358F1B3B55F9E8C7CAA9F1F3C0CA4524E3CB8A118C82E0CA45A4EBAEA205318A0F676DA96EFC7FF3819F994CF0F1E0632D1AE523ECF5E0CA45A4EBAEA2053184886CFB967B8105B54247FAC77F1C6691176EC2AFE6EC345939F8ABC252A3F5332C3E3A7AB0EF60203E4BC40F25F041CB161EDE4F72D2C467C1E6FFCDDC6E1CACF94CCF0F8D1CA209D32E3A903E24FA59C68FE2A5E2D6D07B2B41D48B59C74D541A630C03DFB345E3EE73E4F651F24DE3ED96E6526D327A2FDF2ECEA97530C500C107F26F4A468ED1DC5C0DE6320D572D2550799C24034CE8EF58EF27976D5E1ABF81F530C500C107F26DA55CAE7D98B8154CB49571D640A0394CF695BBE1FFF638A018A01E2CF44BB4AF93C7B31906A39E9AA834C6120193EA7EBD5B26B8DC2ABB84E8562806280F833B16E88AE57CB5E0CA45A4EBC7560762D412E73403EEAC1CCFC2ADAA50EE875D37B8E01BA5E8DEA66B1E2676BBF9C62806220D086A5BB6CA87E9EBD1848B59C78EB20BF40818A5A0B74C629DCBF3B04F1801315AD9358F2CDEE2906A8BD9DB6E5FBF13FA618A01820FE4CB4E594CFB31703A996136F1D94546AD0DC62C0E5AB72882426E4DC19C6ED07A358595CDA530C507B3BB5B5EE473B1BC500C500F167C2D64AEDEDD98B8154CB49A60E74265FD66020DBECED650D66F09A2CA8783084E65E1BBEFBB60B958D16E846ED2993994C9F2815794B344E22FDF2CAA609B6DCCAEFF76354EDC6D11C1904B52A48DAB4BB4A73B6F6CB2906A86E1668C3D25D36543FCF5E0CA45A4EA27520963A98FE9E0D66DB62566020DBECED55551A0CE817505CA844BB48879A1A35D4EE75F408352993994C1966FB7FCCE319D8722B2C1806AF7A18C5620F163CB3A8AC18D9559AB3F53FA618A06D39F167A22DA77C9EBD1848B59C44EA402C7504F99C5C09A7EF3506B2CDDEEE5BD9C0B0DC09E5881BFC5613DAC5560CF4D9A8AD758738738F9EB1E536A27041A59962CACDCE96DDD2D2CAAED29CAD76368A016A6B25FE4CD85AA9BD3D7B31906A39F1D64180C389ABA9D307FD3AD3EC9E6220DBECED817B52362D4213E4CA9994F7B592E91325125F2BEAC1C4400F542D22F8A7BD30F50CC1D421828A5F0B8B44045D970CD61E294CA2762CAF3DC7784B2B5435F530F7F742DF2284A5AB0BE38256580787611236432BECC2ACD51C579A658AA920B652D177CDD67E79B663205571A86E46F5F3838001E1A00782160B9A6BD5505AE6909F2F4775A305D34E5F48F8BA162B9AEB0DE8EEB743D237818715C446ABC5E2F2CAAEF2A671AEA2A15E8B8A2A03261899D70AD51034EAA15638765D0762A9236B30906DF676724F389C9411E173724DB51D2399324C24FE5883082E05C3C5FDFDECB391B23ACC58EDB0F44B31DED0C43C7B0EBB7C14D29B25D8589B454F2DC3EDDD5DD036D4417EF73C56D75F60A8A80AD33A252C8303E82F2C87677464C7349372E3F61B89DBEBFF98F2396DCB299F530CD4548F43ED5E4313C3E7557C353B8EEA65DAB996FAF190F03C9E0EED52171A8584FB47D97560F5FD73F04D449E3F156F7A6AF836F89756505EAC4779B502C51D93D8F0CDA29AAF7BE5F93C9DF6F621B93BC845553C4D5AEC18F1864BD6C673FAAB325CBFD18273872EE3F29962DCCAA94285C4C1FAAF9CCAC7EDDC6E5CCFE1E3DCA7B770F7811077EF35E1CA990A5CBED8883B7705F8EE58012E9F2FC5C5A37938F5F14DDCBC528512DE20AA3A2750C3940571C46FB0F883328795D3C1B19CDA7A63C8D8CE6EEA235BED6CD98E8154C5A1B6566A6F3F0818D05A17D12A36835FA781CDB580B2CA71D435E8313FBF14127E686C061D22233A84660C8FCF307CAB457BAB7ED7FFE1F4E23ADADA4CA86D36C3669D62DA5323EA0506D84D53BBAB83B5350885635983816CB5B7A7B3DF934C9F2891F817BA1D10BC78917617289F70F989965BAC72CA66DD2C9B3190AA380741374B27065229279A9FEAE7A9C300B1215EBE3AB8E3382AD149F20A4683F3C653F51F92EF91EF92EFA7A20ED6379E402412650D06B2D1DEBE25C79196724AA60C299F675F5B9ECD1848559C83D496A7030394CFF717060263823BF1B9581ABA0E2C957C1E18934C551DC4C387079DCF49BF86B8687136FB3DE6A4E3B3FEF58DCD704F9FA7BC2D5F5B5F67BF1D293E97CF73E4729C533970AA898F3F1596B1D72FAA79A8989BC4B9F6D6883CCD67DC7526DEE591717CDDD18323B515B8D22DC435F30C8ACCF2D87CCEE499945BB4B4258ABB74B4E596DE3E4CDB6761EA14C324EDC1EACA42D4F894CF0F4E5B9E6C7CCAE7070303817951013E25F791E29377DC70848353F11F92EF70BF4B5C2AEA60BFF3794AC6CFD7D6D094970BA3B81316464EC005EECD2211EAAE5CDEF63CE00FBC8F169FF533613A6AAA598E4BF5D8E9587B1B6B678974B6FC856E23CBB7A56BCFF10D13EEECA80502BF093FBD54C05EBF6C68C06FCEDF067FC91991CF2F8E4D2057D38FEF644A5C1C1EC6E70545B83FE3C75F724E8784CBB956BD5D3E93A6A6BC12B67CE3CD67A6C74E4D7DBDD031695D64FC43B9C59890F5478D4FC7CFF7FFD8291D3FA718E0CE8BCAB9260BFAC9736EF8C0F3F07076977F577923F3AF227D97B864EBE0B17C044F98766C9DC1C7465D7D5660602FC7CFC977027EBBD18B69AD02A355B5186DEC80DFA8089163D54DB1EFC9BA2E657D5BF07DB4F866711BFB2EF00DE20F8421DF1879F98D78FB44E179338825413F5F3C84E1AEB660B8807E7E45634789DB8E2F9BDA708AE1F5531D42F65A62D7E0964613D58EFE4DD720EED9DDB83CD48D7B6623BEE968639E3FDD1627D0BF1C1875A2ACF04650BE25C1FE62AC3A4C876E66EEE9C558B318B31E1F86EEDC8349DC1E353E91EFF5AFA7BCEF1B6F38AA9F53FD9CEAE7A9C58058EA882B3E375C2AFF43EE777753074F38DCB22CE8C048691966ED56F89C2EA8DB2450D535C0EFB46414037B397ECEE56387F3316C3219F45D5D18A9AAC6AA7334448E6D62857D4FD675292A2A82EFA3C5B70CF66CE3F34018F28DE18A2AF61BF196612C3EEF60FC1DD29E60B84C8F9F7729ED90345606E5673B9F13B766B662C3E6D8313E914FF249389DF2F9FE6FCB299FBFDA1820639FEC7820738D153F7CBC3595FF21773C723775C0E5F3B58E6E8CF12A58BFCFB70615AF12FAF6D68C63602FD7ABCD883B837EA7790ACB736E18C53DF0B8E6B1C2F86738762EBBD1C5BE3777F6C13D39177C1F2DBE476F64DF05BE41FC8130E41B2EE72CFB8D58E98C656BD57788827EB3CB0BCFD464305CA6F83CB0168DECA9A7D7A983F28D51EC83D9646B7DC494DF3AA76EA2C527F2493E8973CD2CA54E7E9CE1A8BD9DDADBA9BD3D7A1DD8E52311C73A895314146D1F479574A2978C07AE6FC496C9AE03EBDA517E32F95191EFBE1C8FDC4D1D70DB2FE277BFE41C9B4C85D1AA1AD886E4589E9FCD2806326E6FF72FB279277D9BA7F58D41BFC7E681BDA70B93233AF872EFC275E9021EF36AD977C4B92D2EF6FDD49809E6D3A7E1387524727CEB14266B2A98F8E7D977244C608C231066CAEEC59C8D91E39C8CBB4F149E37AE7E1E1E7FAFE7B7679B7E1E58D31118E7F731EE31537E4F0B8B21976E8EFF8B98FF5CCE8421FF3BF9F7D5A25EB61F4DF6140A8C7791FD6B899EEE59F99E3D73B8A2528DDE7E07F28B46D8F30A1F14A8B0B6F228E974268A8164CA33D1380749374B363ED5CFB31703D1DA9A58EFE2699FC2CB3D95FF2157FE6EEA80AB9F2F0A3AE0900D62BC5E02A7AC27E6B7D289818CDBDBA3F0B9BAA18109F302B6713B1ED5E4C376E74E089FAB5EBE9FD64E62B5EA01BCF94591E39BE7F0A8B71ED3F70B9877C2103E0F84715817A113D440917B3DEE320CCF1B996B17CD66C4E5731ED30FCC65F4F70BDDDD285F5860AF255E0F73EDC3A9F676F0D716B7F1348953F7F4056EAB47F0D03387DB5A0D1BEFD2D0504878B1D4B15D3EC39D841377B26765B22D277317C3D722103EE7FE0F24BDDCB5088138017B3B71013EB72F7D8FEE6635AA795AE4DC96C364F0B0FB48953539B0EA5FA07C4EF99CF239E5F38CF2F91AE36FFEE22C8CBD83D0943FD8330CECA5BDDDC8B1975B86D5186F96C02893636E428789C19E10BBB159A662DF5BE423708D0EC0D0D21435FE8C7E04DA467E88ED99F80361C83716DD7A18BABA63A633968DC710C7FCF606C67D5E5E8D0B262F785E13BEAEADC40586933FABAA64DF97F857F0ADB47D1B9F1F6D11A1C0E3C55F8B2B7143DE8DD3AD8288E1A3CD6F17E5E566D5FC766324BBFA0EF6F6409C68F67685D68771CD0CDC2E3F7A86A758AED76AA67695CE4431F0AADB5AA9BD9D6220DAD85EAC77F18C0786977B2AFF43AEFCDDD40199034438DD5B578F85C6760CDC2FC268551D2C1D4D7B86816C99DFBE535F2399F8C4CF9D0FB79B3E59787CA29F4F2FACA1B0B40C224917E4C3B260B8807E7E526EC36D452FDEB85D8453F565F8AAA614EFDDBD8BCF4A72D9F777ED6EDC94F7857079C9CA064ED454E2A8A41F7FBD7E115FD4D7E081613C6278B1D4C1CAD44E4CA196E92BD89CAEACD4CF2D11EA60A7F9708138743E5CF6EA66E994194F1D04DAB074974D36EBE7AB8C7FBCAE0EA65107FCE611D8E4E33077F7306D8008CE713D46CACB611B92B1EB7E36D657538E8157593FDF091F7BD10E64CBFCF664CA692FF99C8C9F2FAEBF400DAF024D5D4318EA9204C3ED347E5EC78423F6F6029B29AE7172A297137B7BB5DF1B71FCDC3E3D8F3661336CBE35CC4D3BB26EFC3C9CCF0DD27EF8262CECBE3256B90ECBB39E6DF1B97C4ED7AB655626E5F3FDC3E7ECBF3238008BC18F91FC5B30B636C2A118C658551366AC3618FB7A207D50CDAEFB79E41A4F390632C5E756B51E86D626F6EC4A436727AC4C7B4BFA2B8175C989E487F279A84BD57E32DDC2F6A871D6D61EA147D896747CD6FF324C3AF69309D8DBEFE5E6E3FADD0214E43ED8666F27EE44930047872CAC7E7E8CD1B5897EFE6565F1A6FEDE2367F4F79E6DFC7D4ADC8302EF02DEBF731B977BDA9878D511C373EDED241DE72EDF4259615E56DBDB1DAE4798EA6FC6C2E232BBAF8C89696FF43DDDDBE273EDEDBB95BF9B70D4DE4EEDEDD96C6F9F344E40C5E763AC4908550DA38B0F0F63DAA485B9578E95278F611E18C1C4501F0C1D64AEF893946320D5F6F6C07C29E246AEDD08FAAD8323D037D461842F64FA2F7D5031FD95299399693FA489DBDB194E20F373A2ED551698873FA5D705E7E1C73A8F85E5983DC44036D8DBC95C274D2D2FFAFE701DED68B97C3DE6FE708AFCBC1DF78733BF9CB79648DA76EA931267EC10626E791D72591F46348CAE693606C305F4F3DB9E55DC920FE2EBDE3176FC9CD8DBC9F8F9E1F2D2E0BCB70B4C3AB95C4EF67A3D2792E092DE8ECFEE5CC509A6DF704FA38C185E2C75B032CD2E1F4C460D7AE52AAC2CF98373C992E90786E733D5FA39998FA86E6866F78423FBCAE8A503F0D92CDBE273F5F374F47D53818164CA33D138543FA7FA792C0C2C3E7A067D7B075CE31A4CE95419C74032FAB92CB71AB3362346721B99E7A1E79F93352F2F8010F7FCED3FC0619E846B6490E99FC8D9FE8A7D700C6BCF9FC26BB4444DF7C4B012F6E1114C19CC21CF459CF691382B13CE11166E739DFCD69CE758E7B198E9792C3BC629504EE1FAF7CFD1321A7BDFFEBD6ACB03EBD5EAEA5B50CEAF8340C00F860BF03999D75EE2F5E2D2D0206B2F2F9D9B63AF451E176B6FBFC0F0196F713684CFCB5736583B7C9EDD863B4633F23D5EC6EF60E3DD18578784174B1DACCC85C7CFD0DCD8089D6709139AB1ACB7B7C7139FF27962FF31E5F35793CF0D5A1F1ECF18E0B13AA1A9AFCF380692E1F3B18A06985B0518AD1033CFE7B685E1723AE172F2CC346681BEA50D2EA51C1303DD71E5CDD8A78049D205E7F0604CCE53B7886160C2794DFAA8E162D5416151234E773958774A6A8FE9FFB62BFEB94099E2F3749E7F4EEEC95CE6B30C5F11F70EC38D89C64F55B89DECEDCD4211BEFCEC106EE497E1FE9DEB09DBDBCF69A751A495C66D6F0F0F1FB0B797D50A70EECC311CFAEA341A7895596D6F771A2C18CEBB0FA34C8771410356E67D182A2DDE169FDADB13B3B3517BFBAB696F6FAF55A0A1B011F7BEC8C3C3D379DBCE3289741FAF3F1E0C44B5B733ED8F31921D7A7D0363758D109D3E0B557111F37C391886EC874EB89CD8D7098F7FFF831F04EDED6AA9068F66F450D6F060EC1C66C2AFEC586EA611035A0E7D066B6753D4FA244EC117B2E166ADE351C3C5B2B78B451D41BEFA458D0EC7971FE19F6E0EE3677706F1AE72068727E6F16EBB3E18A6C2E2837B6A2E651848D4DE5EDE2044616105369EACC6ECAF72FDC9F603C93DC1D389B52738C5E4FDCD6653CAFBBEC9F489C2E3137BBB77F111A44C593C7AFC08BE85A560B878EDED849F79EED1B8EDEDE1E1493911997AC7344615C318562AB7CE94DB85BD3D700E1171643F979DFE7D8F6F3566D972F573DBA81E96F626A89BDAA011B4C0E77463BCB9695B7CAA9F27D62F4FA5CCF0F8543F8FDCDE6503066AA4E9D9BB8AB461F160209A0E4EDA9F8A3B0FB0BAB282598B15F373FECDE74F9F835F520B8BA8153A01D90F24FAFF152C77FF220C79B5D037F2A16D6D83B2BC8E79FE74C772B32AD56CFAACDDE290E74F3869264EDBD9CB8673AB1451C3C5B2B73F149B835CFDBA64027F56BAF06F25E3F84F81066FF4B8F0FB7A3D0EDB7C38FBFC191BA685E173D20F4815062261758D71F78BAB515FCBDBF6AEB4BE1DF9B9798C7F2326BE53C9E7BF28D3E237C54AFCAE569DF27F2599320C8F1FB0B7CB353A34B74BC1E75707C3ED646F2FF7BAD8F7956B4FD1B0B1B2A3BD9DB73C17313C292722D3BBF2045A8D0A1D634EB83403BBAA03E227F82C7CF684C5DE919567F8403E89B7C40EFC5E6064FC2EFC71C08ED705167CCCF42FDE965871D73A17DC0B26D2F7B8FBC92CAD3CC51CF35FDA253DF08C8FC36BB5C1EF9DDD5CBBC659BFC6DD4F261D759B0A0CEC755B4EF97C7FF2F96DBE1E055207EBF23B2762FAC5A33359C5E75E7F7C7C4E5CC177DFC23234C2CED5EBFAF62C1EAFAD04CBD3CDE82B6661477C7C1E03033B95BB75700CCEA1CDF31B9F28552C473FE3CCB3237D8525E69DA9BD0B5E837633DCCB77DC70B1EAE054912C68577FFF9602EF5DECC1DBE7FAF159E928FE5AA4C1BBE77AF069B506C79B0DB82B75EC98E6DDB403DC32BB5D54055E4DF9B6776DDD3274493B76C4772AF99C70C989A72FF046A32EE5FF6732651889CFFD6BCFF1F07E199C5E0F249D1DC17099DEEFD5EC9E435D6505EAC40A2C4C9B765507E17C7E82717F7BA41347BC7EFCE4B202873CF37883AFC6BF57EBF0E5A41F7F9439D9790E62B19C9D131A69EE62FF95CB21FBBDCE1616B3FBC37165927DFC66191718B3E8A57C9ED07F4CF97C7FF039C1F429C9963EF7DB762B4E6D6CE0E7A56AFC9EAFC17BCA191C5B58C5474CBF99BCFF7A711DE36A67D4F343B87C9E33A241E1E21A8ED456E0684D1572FABB707170089787077179641CC7DADBF17959394ADD761431E188FF9BCE4114796CF894D7808AB9499C6B6F8DC9E726F3134C4DAFC164D9ECBBC7E2F33B5F7C0EBBDA0CBD800F25AF36F85C58D580C1FB45E838F43913673E6AFCDDF2B9536381F4BBEB905DBF10358C63DC0EC9E5ABA8F8B7D7A0BC713E6A38ADA80FF6DE2E58654A2CCEB8E2C2C75EB4035CFDBCA65188D1D1E188E9E4BA218592FD3E71C4AE1FC91FEBDD4E71888DF7EDEE497CA29FC1AF0B1509C74F5538DFC262D4F8EAD6B6A8F133C5E7A49C525D07C47F83A761E72D10F7EB662BFE9FDFD7E347673BF1DFFF28C00FCF74E11F2F4AF1DFFED882BFFB5A8CFFF69E00D5526B4C995AA61F1EF02FE90C58FDEA2BAC1C39C25EC3FDF1D641366020597C272B3F5332C3E3A7AB0EE28D1F4B7E2AE544F3B7BCC46F4A30B0B414C2E7C43EFB17959BB5CFFEAE5685B764D3F84F81198734F66018BECE15DC8B327C3FC8CB455BEB5DCE483B71DFEEC6E7054538CEB44F77D54A9CE953E26C4325BE63782847398C0F2EE7336197C163C2137F81DB8B2375C5783869C36FCEDF067FC919E4F3800CE24819902B4947738B0B4ED7669EB431CAC61DE59DEECE43E82452CC4E4D31CFA3FF5FDC724FE63F34F40D41DF25C5FCC212FB7C5D31BA6D1D9C89D78DEE9C63D0764831A1906371CA1371BD9CA2BE05B6A101A807C661E86865BFB73C3014DC4B9CEC4D9E0DEDC0C0B03C2267C7E2F34CE8E7FF726908EFF7D9584E4975BF27993E5124FD3C5AFCBD3E8F653775900EDD2C647EBBCD8167A7CFE0C9C9535B7358FFEB7F659F11176F1D640306A87E4EF5F36464FEEB0D59B0BFFCF717FAF1A33312FCCDE762FCF4463F7E9A3B86FF79A81D3F2F1AC79B020DAE753942F2DF2357A3AEAE22781FD0CFC9BE92B7183DFCCAA81ADF74B4E19B9E7EE40CF7E342A714B74D7646471FC2D5D1519C1034A1C2EB4609A39F13FFB95E194ADC66DC1C51E2964613D1DEAE323A303AB2B9FFA5D9B6991F627727F7DBF473E6FF0E7060E06C0D62E7D608A5B09796C37EF552C81AF358E594AEFDE1C877256AA60D97BD8069C00843633D5C063D1C037D21E1041DDDA8AC6174DDB51718AD6F8373B01FBA5E35DC6372361C77FF76E2D7B6B460526FC5586B17D4757C387A5B32DE0E64E37A353183D1B79A2CF8C76FFBF146A326E5FF673265181E9FCC878B36E78CCBE705AE49E4182671ACA90997242D78E059C069266E895DF36AF239E779E09F26F35AA3C5A77C4EF9FCA0F1792271CCB617AC4E4FECDC84432DAE5948C4EDC170013E27736B1EE8D578E872E24C773F4A5DF6986D47F5C6739C6A6FC379691FAAFD6E7CDD39C8DE9733DC1ECEE7329D1D7AD5E63FCACE83595B0BCE9589C5E74F0A8A827C4ECED3723996D07DF5367BDE56208E4DA1814B310C97DE86D59585E0F3C0998CE9F80FC977971E336DF77AF47081F5E7CBABD1D79F87F339D9A7CF697231BA7C27C6EE9DDB9376205BD7AB9D5A7B92F5EBD5763A8F85C794D59715B5382537E2B3B23C9C130AF1C9FD9BB836B9B86D5E7B322EB0A624DBD72A859FC7A2696E8659AEC2607903C66B6B61EF698E1A9FAE57A3EBD55EF5F56A3DBD8BA8ADDDB2B7D7D63744B4B79F900EE2C3E21AE4C9DA50B7B111B3EDF8AAA10B95CB1E7C5AC0C34946CFF8B8410881DFC43C6FD8666FAF6274D3C2BCFB417BBB8AECAFC6992B132D9F32CE3BAB721CD6D22A988A2A602EC8DB3A37B3AC0E4EF910BB5764F87A371567BD5B2AFF43F6BB3B9D7FBEBEB1192EC6FE70E1E79FDB4794F038BDD0897A60EB1D80D7A64D599AB37D7FB85871C45247C8FAF354F77D93E91385C7E7DADBC9FCF248F3DBBF19B1A1D0A6C17B0F2B71BCBE1A153E3B2E484438D4D48D730D85AFAC7E4EFAB1C6DE6EF4F1B6F763E3AD836CC040B2F84E567EA664A60303BB89FFAAEBE7CEA9C7EC95E8E7368F1F1D6D8DC17001FDBC94D8CF1B7838DF27C331810037954331DB8E3CEF2ACEB737E1D3EA66DC524AF17E51034E35F1714B26D9A69F3733FCD4DAD694703EA3951B79DE2C7E8169CF0B0C15D762A25B0A7573F3B6F85CDD3F95FF61BCFBB747931F0817E9FC73C7A01C0B3E7FCAFF8FFD6E6F2773A689DB2F7C2EE91406C3D1F1F3D87CEE1C53C16D76412FE987BD6F10BE09DDB6F8640F2592BF78D6BFEBCD7309E7391518A07C4EF93C137CBEB8B2CACE27277CEE5D5A4393606B1F38AEBD9DAC73257B42DFD05BB6ED3B495C15D1919A84EC9AD942BB65D386C884CFF7CCE2DAD8187BDE13B90FE7F3C23A21867A36DB3776EF6CB2C7C5B3EF63A69FB557333A7CF83B128F3C9F9D8F1D9FB8FDC4E781F3CF175C2676DFD854FF1FFBD9DE2E534CE1AAD88C2B1D461C2A52251C3F55E162D978F41DA290776EEF6CD07F9649F3FD2E07EE49EDEC35E0B8F7F1F8EF744EC48C4FCA29D575900E5BAB49D481B5F5F5E0F38D9CABECF9E764CD1A7101FFC6C382609C0E9129B866EED8C6F7F850E1C457B38FF0478507A73736F0996B3168C3F9CABEC07E9FB84C6280DADBA9BD3DD3F6F68676290A5EDABEC3EDED97D516FC29BF00D7BB04289FF36FE37332A7FD36D37617781751EAB2A281B9FFBCBC1AD7DCCBB82F1BC015D530AE0F776EB3B70B19773F372FAABD3DD2D91964FF08B24FE5B673399878ECFE952FEDD8B1CAC918B63FDB02A3371984CDB0C855B08D0CA3EB723114F72F63B4598865BF2FEEF28CF7FCF370F9E171229D7FAE6F6B81E9E539627BD10E64A3BD3DD0BF23FDD274F47D23BD932B67B6EDB97B82E1D3487BF1923D0162CD6F37F6C860E814C33F358DB1FA068C3C2C82452C4AB83C0E8A6EB6E4F385AC3F8F36AF95BBFE3CE70A2FC8E7ECBA9E4623737D8E775473F862C28B5F576870F6E946F0BDD8E24B684FBC64EA2095F87ED530B09BF8AFBA7E4ED68605F4F3C62E39B4CAC16038AEBDFDA3BBD7F1556B17BE2C2F8A6A6F3F2AEAC75FEEDF42F1A40D27E536DC56F4E2FDC21A7C515488F3A20A5CECEADAA69F3B179E626E6692F527A29F9370E1EF483CC2E93BC5272E927E1C18AB1B699360F4611D46CA1E42967F37A1B24D957EBE133EF6A21DC8467B7BA43CA49BCF452273087FFC67FF140E8DBAF067FD2C3E5238F08698E1F3B5C75B7BF0E6F3A2F287656008AB8C7F6E82E17D067FFDD7EFC3D4D19CB63ADC6F6D39D9A339B89645BAB5AE85EC29130827963A826B7ADE64FC7FF7451BEBFFBBF332FCAF6362FCAA50869FDDEC679F5D91D8528281443098A9FA38A8184824FEABCCE79130302CDBD2C112D91F8EEC25FD6D9F0CC75B5AD9356BB1C272F99CEC4DA2566B5296CF78CE8B0A0F47CA6079ED39A6F56A76AC6E6EC286C7CC7393440A43DF301E2DC61EB3A67CFE6AF3F9DB8A391C9FF2E20BFF063EE8B3329C62C397EE2D1BAFC4321991CF5719BF9AEC75E6F1C1312C878EE98B12FD3CB066311D757810DBF244C6CF77DA3F7E37E9A47C4EF97CCFF97C6929D8D68C1AEC18EAEB09BEE3AE3F3F5458844FCB6B71B2BD0967DBA4ECF5AE4A89A3F575417BFBB98E2E7C5C598B0723FDEC3362733FDAD888732A0772F523382B6CDCC6E7E34627067A37CB207CBD5ABAF83CFC1C522E061E139BB27F31E9F234879D97BA1B3E0F5F57B7D7ED40368E9F07FC995CAB44F821A00F12F7C34B32BCD5A2C5CF8BC7F1E39B43F8C9A55EFCE4F6E63E10648F073A769A9C4CDFFC23745FBB8EFE5BB918AF2EC92A0C24223F53F57110319068FC577DFC9C9C5316581B4BC6CF1FDCBBB56DFC9C70F57B37EFE3A71F1E86E0B91FFFDF6B1FB1D7AF18DDE2A26C800D53C3B833CD22766D3A773DDBA13A015EBF57860B4D65F8B64BB86DFCBCA8AA1E156545098D9F13D77FED46C477E1CF3BCF9D43EFB5BB186B6C82BEB61223A565505557A39B9173FF9B1C949C3A12DC9F8ED8F2D6E40A3C9EF56FCEC3795956DCB937EB757CACF9E6583FD9DB422E0D5D534CBE4B383D52DAA2F9C93E78DCBC05E70330DF11D4C8B2A61DC8D6F1F3F03E4932F1771B8EEA66A9AF03320E21F9EE2EFAEFDD85BA249762E015C440A2F15F75FD3CDC3EDCD5DF1BF407C7CF19FDFC584303EE9A0C382D1623CF6261AF177B7B71AC498087364344BB3AD1CF8FB58AF149551D722D3AE40C6C1F3F17F529D1D9D69C703EA3E9E1E1CFC99838396771B8860F4DB3048ADCEB9876FA315E5F0735BF1AAE715D1003646F9AC0F81CD1D103E375217EB2A74D201C734D457DC4B6B73B12FA563218A0F676DA96271327DD6DF9E2E206FB3F93BDA066AC768A8157100389C6A77CBE259F9C0125ECD8E2D64C9CAF56DFDA896E71E236E578F9DCDCD38BB12629A6F43A78352AE6BE0FD661359C0C176B5B8530B536A7F43FA47C1EEA0EA2BD3D11F9A9C81BB5B5520C500C507B7B5CF6F618EBAB74A6D91DE79784DFE75C6BDC314E60EFC9DD6020DADE71919E93B55F8F86E55BFE281808D9175EDABDED3E923F15F511E93F9C9E7D142CAB61E5745A3140EDED54374B264E78FC6CD6CD280628065229279A3F9BF4F354C84C663E76321888573F2757F61C078B0DCF7FF14B7CFF7FFE4F440C986516189A1A316534C12C6E4B0BD612FD0FA76656A1D4CF41ABF6A41503D4DE4EDBF264E2ECA7B69C62806220136D39E5F3D4F1399917DF57CB63F7880BEC3541AEFEB7FF80FFFB5FFE0B7BDEE2FC0F7E10F28ECCC1D3682DB08CB8B1B1EA66BF45C6DCD381B544FEC3E9C567A8AAD14220B2C2AA9B4E2B06A8BD9DDA5A9389B39F6CAD14031403AFBABD3D5E9975AD1234B7B5C168D086E487D8EBD385818876F58D279BFB4592756F9CE7644EFAD38F3FD93C3FF9EFFF3E34CEFA3ABB5FA44363C7A2C70EFFD2634C695469C15A32FFA19DD1D1AD666F5A3140EDED54374B264E78FC6CD6CD280628065229279AFF20E8E766970F9A71E5B6FC88A50E766FCC7460209A7E2EAE1585AE5FB7395847FC643EFAB3D36722D4812323584BD77F98A97680DADB695BBE5FDB728A018A814CB4AB0781CFB97CCA3D27452C7504399D8459587F012973AF18F3B07B63F50D4D433EEC4A199FF759FDECBE5DE5CAA9ADE784CF23C41F92BB3973F864413F799E2EACA5EB3FCC543B40EDEDD4D6BA5F6DAD14031403D4DE9EA0CCB535D4D47407B931BF608C9D9F4DDCC0F024F24AC63168F4A3B16800E5CD165495CB31E65C45AF28F259DE89D8DBC9F9515F2FAE07F7D8243267E796315C540245250F03376F422F12B367AE04E210EE6E175BD1D4AA67AFE42CC574622D5DFF21B5B753DD8CEA6614031403543F4F857EEE502AE19F5DC1B2D783799F8F93B7AD356D244E73C7249AA536DCBC2143CFA003A74F77A2BCDE04B562226199E1FA399111E072F60CA59732C9791723BC06A8DBBBB13AE30CCE750B7C8F8423FB3E471A174835D6D2F51F66AA1DA0F676DA96EFD7B69C6280622013EDEA41E073635F2FC39B03E8CF2D85FCE16D4EDE32377E4E64BDD161C7EFDAAC38A472B1F7FEF947D03436C12AEB83BE49047D7B3B7BE64AF8F7FA879C19C15ABAFEC34CB503D4DE4E6DADFBD5D64A31403140EDEDF1C91C6DA8875EDA0F83540A556D4DF039B167A70B03E1F676625F7FBB6B127F1A7606EDEDBBC540AAB196AEFF3053ED00B5B753DD2C56FC6CD6CD280628065229279AFF20E8E7EC3D671E79263010493FFF4039C39E69F5D9C46CD0DE1E2D7E598319BC260B2A1E0CA1B9D786EFBEED4265A305A25675DAB096AEFF3053ED00B5B7D3B67CBFB6E5140314039968570F0A9F07F641CD140622F1F91FBAEC38F5E27B86CFFD3BF27955950603FA0514172AD12ED2A1A6460DB57B1DE5E52369C35ABAFEC34CB50394CF695BBE5FDB728A018A814CB4ABFB92CFC919E561677C87F33959BB16EF59E67BA19FCF3D7A8611E514C6C766609D5A66C3CB069D5859799436ACA5EB3FCC543B40C7CFE9D8E97E1D3BA518A018C8C438E65E8F9FCF4C79229EBD1DD3CF39333D706E387B3E49411164817D54259D90C5799639F7FCEF78E4133737E30BC90F192FE7EAE774FC3CF5F2E9F839D5CD62C5CF66DD8C628062209572A2F9F75A3F4F1506326D6F0F7F27963AF047F934AB9F7FAC9EDA513F4FD77FB8DB7620533293914FEDEDB42DDFAF6D39C500C54026DAD583C2E7999E0F17FE4E2C75E033E722A39FBFC061C3CEF6F674FD87BB6D0732253319F9D4DE4E6DADFBD5D64A314031F02AD8DB538101758714D6012526063AF70C03C4BEFE56CF243EE875E0CF2A37B5B7A7413EB5B7C7EE13D9E4E350D75563B8B20EFE692F466BDBA06BAAC7705101C66BAAA1EB1A84492CC468750D9657D6D05F5C81E1FC228CD7D5A23FB71086D6468CD63542DF588FA18779D0897A609674C42D3F95E5994CFC6CD6CD32858174E19B6280EAE799C080CBB301CF402B26B453D0943FD8330C88A5DBF793D92D06528DB574D541A63040EDEDB1CB50D32A8243AE80A9B713CB4B2B50949461C6390B7D470BC679D5586538DC28EA44EFDD12CCCF783050D3046D4B1BC3E1CDE8387B110BD30E0C3F2C86AD5BCAEED134505287C9C14EDA96EF230CA40BDF140394CF33C3252FA0E20BA0AC16C02A6ADE330C88A58E90FD64C83DE5F3BDE7F32146A727DF278ED80122F963BD8B378E6F617157F1771B8EC8BF78BB07393C39BE3E538C53397C5CADECC6FD2E07CEE70A71EE5E3BBE2D1BC6A5B27EF6FDB5EA7E5CAD1FC385FC4E5CAA1CC28D3A19CEDC12E042E910CEDE6961C35C65C25C2CEAC23DA99DFD0E71D1FC773A2782FE58E1A2F923BD23FB2626524EE9AA83FD848174E13B51F99992B99F30904A39D1FC2DC20E8A81146080ECC1CEDDBF9DDCEF1603A9C65ABAEA20531818189627CCE7AF927E4E7850C060EFA038D2274EA49CD25507FB0903E9C237D5CFA97EFE2A6180EC137FB5D3867C9189BD06CE68D5BBD7D150AF4559850E4EB71FD70AD51034EAA11A9ED8517EAAB1F62AEAE794CFB3CFDDD25BC07FBE817B663BF22D7ADC3658705B3D825C9717A59EAD3C88A50E366F1EDFDC569E379EE0215F870FBB26D8B524BF28D7E2B52A0D7E78A61B3F62DC7F94ABF16FF714ECFDBF97A8F0F37B32749B7D11F7A14835D6B30103E9C2F7ABD496A70B0394CFF7170622ED61C36B70C0BFB482D2420D2A794A14774C62C3378B0ADEF88EF2538DB55791CF5FA5F9EDC446BDD75C1D8F2B70BB71A4BD1B9F354AF01F27CFA160D283BF1657E29AD10A9E7B3418EE9343DF317DE15AFCE1EDB770EAF429B68E85221172F245B8FEFD73D60EF6C6E8227E9BDB8B7746E7F17EB71E1F8E4DE377AD7AFCFCE6084EAC3DC21F654E143E7B82EE61474AEA3DDB31902E7CD3F9ED747E3BC5C006BC2B4FD1D66602AFC988EE2E234A7846D40B0C9830BA77949F6AACD1F9ED543FCF0677982FC425591F7E7FB500BFFA2607A7DA1AF1D7EB17F1A7DA769CADBE15A29FCB952AB68DB2395D9B7966F4F372890D17FFEFF72C9FBF269DC13F9DEBC46FF946BC593B865FD7ABF18E6C123FB92AC39B1D46FCF3AD6194F65BA97EBECBBC252A3F5332C3E353FD3C727B4731905A99068B3F78167BBC184835D6D2550799C200B5B71F0C3EBF6732A374710D97860671A1BB1B0D1B2BB86334E3BB6105AE0DF785F079209F5A8339E8EF53CEA0807997DF39812BA55A9CBBD883CB851A9C382EC1D50A0DAE15AB70FCA414DF5CECC7C9D3DDF0F856D3F27F3D669C5BADC92A0CA40BDFB42DA77C4E3140F99CF239E5F3645DE05FB14DCD432C6CDBB19C32D5965B069570C89550370A3070E301D4CD9D58749AB30203E9C2376DCB299F530C6CFACDB645767F19B1D4117494CF33C3E774FC7CFF3AF2CFEC94FF409874D641B87F71E5093C3A2DEC6306F4DCB88BB69C7C98F8F959818174E19B8E9DD2F1738A810D18ADF32C7F937627E79A2CC8E7F1B443A9C61A1D3FA7FAF97E72E43FD929FF81FF299D7510EE7719EC304B7B305E55C7DC3F8269D40143131FF3D3CE90705EFF7AC631902E7C272A3F5332C3E353FD3C727B4731907A9962A923210CA41A6BE9AA834C6180DADBF7379F9FED95E15453137227A771562CC47D8B1D273B3A50EA76E01B8908F7ED5328B49B83E16BEB554CFD75416FB66EE5797D833D2B995D4BC2E173E24819F8D7BE87A0C58236D104FCB34BA8154FA2A1C98869E75C4AFFAF274AD5E633E558540C903411DB1CE5F383D796478B4FF9FCD5C18048640E9EDB4EF93C337C4EEDEDD9E33E17B4E3CFF7F3F05575112A98BAF9F16BBF85E0B91F5FD537E2A26C8071FDF84E36180CFFF1A133904A25B89C733578363259AF2612C92192D8581B577EC1187B254EA59D4245AD15D373F3C87F3006BE5087FBB57AAC4C91E7EA94D47BC0BFFED2AEB9CEB16F866320902EADD19B310CA40BDFD4D64AEDED1403A1FE6E6117CC4C7B147E9E3A397F7DA4B038ED583BC8F6F69C6B37826D3ED73D64CA351D7D9078FB64BB9599489F2855FA79897F859D775EEDF7A694CFBF6C1232FA391F5755461C6F6FC5B936314E77B4E038BF0187CBCB70B49E8FBB9AB16DF6F651E304C3DB0F70A3520CDBA83824FF240C71440F266560F26CA0A3C58887E57A281513B856A04743BD06CA415B308ECFE608FE7BDCFF309ADF2496C0DCD18E5EC691F652CE3C7BFA1257CF38B86B696946AF481D1C4FABAD37B2FE76B1954DDFBDC27194158DA1A3D30C91DC83EFBEED421913C634EE4A79BF3CD5F84E547EA66486C7A7FA79F7AEE2530CC4EFE796B5C3340553130FCA5A0186CB9B21B9F01DCCE2B6B4622D5D7590290CD4327A5C24CE0E38EE3776C2F7BEE573626FE6ACA536DB36D76873F9FC9AD98D72B719F71C1EE4F475E1CEA4170F6D065C576CAE05CB9D9C65EDDD79762BAE0CF4E09ED5C686BB65B2E03BB91239DD6D9BDF511B70A5BF1B37B4265C930FE286D58312BB2663FABC58EA60F3E9997F8486863A544BF5F04F28C2FEA94D2E4FA40E2C619850337D6C62378B16E7F1C653ACAF3F8688E1F3C0F3272FBFF184F3ADC5A525B6BFCE4D1B7184CFC9583A8FA703AFC982FC3235245D66D4D4A831E65CC580D890F2FF98B6E594CF290632C7E7E4DEA9506176E929866E974178F40854D5A5CCF32769C3DA7EE7736A6F7F86E5D5158818CE20F9CD7B5880A2C28778FBEDB771F2E4091C2D16B23C78C1E4C7A99A3C7CCD2B431D5306D7EC8BA8718FE252AF92E16C2D8E9415B2F6EE3FDF2FC0297E358ED716B2E18ABC73C8E995E0B656C77EE72B1E0F2706AC3855FF000F9D4E5CFBFFDBFBD2AEB69234CDE71FF44FE80FFD61FA439FAE9973E6F4CC39DDE7CC9C33A7A67A6A99EEEA9ACECEACAA7455AEAEACB4717A49EF609BF4421A04C6987D353B08C40E4242EC3B421202096DEC88DD80C160BC64E5DC087CAFAF40C22C578B517C88A390EE0DBD3722DE88E7BE4F44BCEFD4A68BFF366F27F1FEF699C525CCADBDC0EACA924BBB9073A007ED83E11D9CA4B25E898DE7CFDFD91FC4367F17DFCEFFB7986F9F9C5DA5BFD9A7D7A1E36CF141E32CC6E73729CEB7B6D825D315C6B733BE9DF1EDBED301F13CE29C9CC368472B4C0DDD98778ED06BF64E2D969C935ED3B5E3CCB707A37D3E38328DE2E23C6AA38BEDF370FD18CE66A5E28E4689AB350D88D0E950B460C3B7050AEEFA4B44E9AD94EFBEA35123AAAB11F7FB75F4BE04531F6EAAEBF15D5D25FD9F5B4D1DB852568E4BA5859CAD3E8C5385150857A4FBDC3EDF6F3B1DD63EE775E45D72C87DC2EF8EED677B6E778DC36013FDD7BB9E5F6A5D61F639B3CF03CD3E2F2CB7A0B2D48CCAE201686D8B4849E94141990D33E3F3479669EEB2C1D1A0C2787F1F2CDC9C35651EC393713BB425729A9FB55A61A9AF85D33884099D01D69616D8B8F96DA04A89017929BA33B3612C2E3A703DC95E58F21EFFB2B48CF273242D8FCFC25CA7C4C2C4025656E65CE6016FE99AB7C6A1AFE601B6BFDD353F3AF304359C1EF3F2793C27714D72E62691B7F11271FA5EA4CD2D6D7F7FBA4AAF176CBD464C6F07F237B6380C370AF7C55A1C78BCB8805B5C9BDDE6B0FE5A551562B5DD28DAD8F00A5EE7AC6D41D6D7473FC97A7DDE82133103069FE2F9664F1FFA6431744C6E88E3BEBC29D3D8A5A336CF804E2BE0B9D3E1C4687323F52BB33233ED22DFDD386678CEF03C68F1BCC0805ACD242A383CCF2F19A06B4C73CF7F4455A9E1C8324D7D53E889BD8775829F1DED3070386D5414C3A86910F23A0EB7D7268740E2AA0F94CA615054405F54C4D9D11D687BF40886C29C03D7D31D9EEB33B8F782174FB1CACDA9E3864186E7FB28CFF8F6DD7C7B52423CE5DBA322EFE3AEA24BE0DB23EBB27159A140CEEA3A64A34B483076E28FDF7F47F1F2DBEC6C242FADE2525E26CEE7E6E272F6237A5FD6DC3C67B3D722C63404C5D616DD739E3C35855349895EB3C143E4E534A6DAEDCE4E9CCDCFA332F96BE2782C32994CD8DFDEC325ABBAC165CF1ABFAF743FFBDC064A146FDB5759EF36CFB7797AE930F21B4650A81943587401CD3F4AA843896A14ADC929DC7F2A5D7440CCB77B4B0718DFEE7FAEF530F34030F2EDED7DD350D60FA3446E4463DB18B2F30C902B4C78F264F5C8326D3965680BF90ADA88EFA139F50D066411184E7C84FEA8480CA5666128FE117A42AFC059590847691577DF6DF4865E85E16112FDBDE5EC6518A32330CBCD0B330D1AFAC9E7376DEFF665352B6AEB09FB2C8695D518ACAC81ADB5C9ED3C20B5AE31BEDDB7F6F9E0F806AAAB87D1A419C1F4EA164A4A87E8D9E80DEE1DEED0EF47247EDF9B338FD6C9791473EF97A48EE3D333827D7EA9D3864FA32270312789F2E837BBB474DDFBA2A2945E0F55B6E2526D35BE4E48C5F71A05AEABEAE97D8F4C7D88686D4648523677DF3ABE912BF049F443DC696E807C6DC92BF6F96749E9F8927B27F98C7B573E9BC53D6F75A58B7D4EF6FA452764435D57BE5DFF1DE7CFC5ED7418DB6C53A516F2E6E86CF4C7DD41BFBC125D298978B6B284DB4D63C2F3100E81CFDFCDE9E7B0BC16CBCEC9EDE7E112B3CF997DCEEC73F73A40E28793BD24E4532A99047BBD6567BCD8C738F6D4D69EE601A975CD5BE3D057F3C0FBC6B7E7E60DA07F741D6A8501997213F2F275946BAA2D1F92A43D97375FA1B2AC4C901FE8FE64DCA578C724EE129C7CBDB5EB9A4A3346EB56A36E445676C63BDB490A3C1F54E462DED887EECC6D7904CFAB5756D0C63DA3926BEBB637987E57A1DFE60BB8F7F016C2177089E707A41E2B8719478134977B5326C3F3C0C77395E6AD4F54F249309DE139C3F3F78D6F6FED998542398CF847DD181C9A812CA60D8F8B4D981E993DB41C31DF9EF9381B7999C9F8F8C409BA479BDFDF4EECF31C5B27AED635E26E7323C2750E2468D5B8525C80588B058F171771519E830B251538999880CB85725C2E2F46489912276E9E41EADC3CBE888AC37F7C7703373859976B6AF0C98318DCAE57E33257EE4C410962B55D6EC7C1A9C252946CAD51BBFBEB8C6CDCACAFC24DB50A917A03CE731879455E840B351AFC293E0137EBCA90661FA6EBF7FF71330AB1837D9075D40BFF1525CB8746D3808F3FFF1372D26225E3DBC7B5BAB7ED2BE2D89F94D56042DB4DF3D3A3D378BA344FF19C60389F8C3131DBEF219A5118D56DA80E398BDEA23274242762DE39C1F8761FCB647C7B60F3EDE2B825E27C67CF944BF959FBC8DB315A572BCC71A43E822FA91DF9EE8C4C3A16D35736E87C7521370BDFF5E990336ADA376E9FD30CE2ABB4647C70F64F34CE23FF7BDF1BBF127BC94F4E4EA27CA9BB36607CFBFBC7B79B94B5B0B4F66273630D26B57ACF323BDF490FFD7E24E2DB553D43B8177A01C5A50A547358C6DBE764FD9CF0ED6713EE20696A01E15A137227FA71A5A4805E27FBDB6EB6B62371D88CBBED4D489EDAC4BD46392E341A712E331A9F3C8CC2570FD270BA281F67D21351C495F930E211BE5797D172170B3291E470B81D1F57D4CD38C99527EBE1E7AA5A70BB361711DD5D48597E89A87A05BE2D2AC19F330B70BEA008D9F363C2FF7C23E7DE158A12903E3525FC576A7A13D41A12F7348AAE2BD0FA4BC0B7BBEC8713D9E71DBFFF0CA6BA7A0C373661D161A3BF113CAF1F7B8BE9DD9C8D4E9E8DB4F5606D339AE252303FD043ED79C6B733FB9CD9E79E7540A519F358DEE5CC89688E13DF47CEABF674B50ABFF3F639999FC87C75B3A313779A6B91239A43DE9542FBA770363B19A75363E9BCE5CE3EB78F4FB87D667E9DCD5D1B30FBFCDDE5038D6F1F6E51C3A86C86BD81B3179B351ECB103D2689BC931E54E6BBEED31986843614EF6F8FEC68A2FBD863070CC85B5FDF8E316EDA7E6F25FBD8A9FF37CED62F5A59A0F7976CAC503B99FC1ED1B11D97FC6E6B2B922C4661FF39D94B473E5326C69126F2B32E4E32A305F1263D6EB776D3B2C4D71CEF672ECE3646F7D9278D8E42BEB545FFAF60795E902BE79E31DE38B88B6F5FDB7C81A6968E77B6D351F15CFBF579F4A62662A8B1074FE7B6FB4ACCB7976666BAF0EDA58565C80C0FA57C7B6F561E0CC5F90CCF7D2C93E1F931C4F33DE4C84BABB8FC4B173C7FCCD9E764FE9075B7D27CD6A47B5BC35D2273DFFD56AEACD184046EDEDA89E78D7D66A425451F5807189EBFBB7CA0E1F9406D3DB4B9F9301464C3DCA0767B5F57EFB40BDFC4FB3293A23DAD538B5056EF3EAF765C123FFE87E79EA1B9B6FC9DED74D8F36AB6F44C3A7E471BDB316B3262C6E1C4CAFC0CBDEE693F1C696BFEFF08574012B3CF199E333C77AF03647CD0F82522DF96E27BF683E774BF5079A9F0BBAFD6CF1B9A5B0FD44EA40DAC6E7C4E7AFA0FCA35124EC243DB1CB43F8E339E7B73FDFCB3982E3ADFEF4C37D2B7D767BBB533C29A118995CBE7490CDD83C8D9EF9A45A0C7633968DA4FFC73713B1DD63F5CDD1E6BDEA4BFDEF6618190277DBBFAEC1574F9A930EBA630AF53B3F36A6CFD9CAD9F7BD281E75B501616D07D2F3BF7B49894F5BBC6E47EF2E45C99B7E69EE74718C7A40DEAEA6A29A6EFDCE3E36E5F0F6913D236A48DA4E80FB67E7EB8F716B1ED264EBCED262E4330E030320FF24E745CEDF3FDB6D361FDC3D573E369E77A3C9FB7D84631393387B109A7AB7F382ECD39D761AE90C36298C1FA783FB3CF997DCEECF33DF9F6B7CF66D24D62DAA041CD992894FFF90FFBE6DBC5797FEF6FDF4B0776FA9CEC2FAD85BDA919437D76A1DE9D31D73DB6CD58871ADD2919D0E7E5A1EC7224160D1A9F8D435FCD0381C6B78BF1FC5EAF4ED81FB913CF09EF42B82649E6F21D7B45487C70B21FAEADB3DB251ECBE3292B1EE8F588D40F21BCB101B18346E4CE4FFA1DA3F914DEDE4BF7C1F331D1E32666F040DB8964DBDB782F7CFCF3E4B474EAD396D659E2FD70E47BCF1EF1585A7B06902757606E76D205CF898FA849930373250A2C71784FF644323C6778CEF07CFF783E6B6887B5AE1965273FE3C68D68FF9187FD707BE1F98DA636DC6BEF40A26900D1661BAE70734AACBE2760F0DCD2DE8ED1CE2E0CF5BFAD7777EA43EEDA6BB76D33AEEBC160550D1C7572B4173662BEAFCE67E33090F1DC9B7CBB0B9E8BFC9A113F6DE2730DE4EC8579785412AE557C5EEDFB28198D0F4EFCC3C9E5C5B894B9BDF79A8FC712D1D585CB85DB3ED78A38FC8BEAEC38B47E4B9DC83EF87B8DF5385B544C63A2CB26165038D18788B6DDF1CF897FB8B4F4741A5FAF8EB6E530C575A9F8F661EE3F77FE9FBBFC41E3B148A577FBBD8FF1ED8C6F0F58BE9D4B627F6A0B4FD6B1BEB64CF32D0F93A0B976F9D0E7D5E2165E22562DC7B58A325CD374E04EAD829EAFB9A8501C7A7E3A2ADF3EBBA3FCD4F0189E6D3E73A9F7D4C8149667A73DB6CD94C922941FEBD7FB6C1C32BE9DCBB7B60879777CFB61657ABAA668EE4575692DB2D3638477A29DF15812CD437864ECA2CF76473B8C0CDB80DF719C4F976AD5F8B6281B67B252684CF488E12924580711A12C17EE5169B6DBB1D73A8D8AE26C3CC82881B9AFCD633BEDD7363372EF05E235AC3659CCBEE29F3F8CB8FBCEF8E703A278A9DED681BDDE8BA5D0EF839661F639B3CF77EA008989C0FB382718C9E7AD9D7AD81A1B616D6BC3AA736A5F7C3B3F0FF0BFF3F67909B10FCA6A1056538B6B8A2284B7742124270737AA4A7C6F9F3BC6B05EA774ADB3568F216533AD6F776626E5F2F6D336F68E4EACCE390FDC1FC7D93EF7159E5FA96B40B673C22D9EF3FB9F2599CBDFC4572B6D34A0A6A6067999716EE39FEFE4DBC95A40EAD484DF719C4FEEF8F6C7136697675469C628CF4E3054AD6E426A6139468C03DBEDF9EA079FCDE57CFC7392F8DFDDC53F1F1BB2627D696F7F960CCF199E7BB36D0219CF5FA465BC8D5FC2D9CEEBCF7F84B9CD80E531C3BEF07C71758DCE03FCEF01B97EFE06CF5FBE3933C3E3F90057DFE5E50D68F31FEFBF6D9A3BB1E4183E707F1C673CF715DF9EB2B08C02EE5D8AE4DDF1ED03FBDCEBB833BFEBDA1B2EEA61423A9293E39191F4D063FC7331DF1EAA6EC1554581DF715C78FF71C3B7875717E14C4AB470CFC7272EA1ACB418BFFAB70F101A168AD8A44CD455971F996F3F4ABFEFE4DB572AEAA02B2981A95E85C6A86C986AE430D55631BEDD473219DFFEFEF0EDE275AE49FB244C756A589A5BB0B238B1AFFDEDE30B4F61B79A85DF03797FFBCE75B791FE41385A1A313E38B4EFB699D0EBB03CEB3C707F30BEFDE8F6F9354D2F7227877D669FABBAB458744EC1313EE931FEB9986FCFDF7889180F3E5AFD91DCF1EDF2051BEEB4B6BAD8E7734B2B50F70C41595144EBFAECCD5E385FDAE76EF3A2F8E793062B9E6E6CA1E15E3A7A0A72D19D108D596EDE914AFE61DE8BA5D0EF839661F639B3CFF7BB1F6E67F9E3BEBFFDB0FD76D479406AFD96527E20F3EDD13AAD90F7C5FA796D9715F363060C9AAD421B8AFDC33D9E9B44BCD944E39D44F5F5525F6CC4079CBF719C4FC48F1CE1DBC92789C54E62B4936724B153C578CED7B9B7570FC7FC061667DCB7ED4E3DF2E65CCEC73F37D6D4C36973C0902FC7A4D9022BF7DB26774F5F6E09C67B3BBDAE037B8DA3409BCB199E333CF7269E131FD6C4CFA44CA7439AC342BFBB9B77F8DF898FCCBC05A7F049E723D1FCE84F3C7F543A8C3F72D842D247CA51FC2ABE0B1F140FE167D19DF4B7DFD5DA84EBB2C631B7F2BDA5DFFEC6F34ECEA627FF4F12E101DCE5F7BAB65719319E5F6FE3ECF3B1219AF705DF7E213C1685398F50F0381DD7C3C2683C163EFE3989C7F2D8D629C45B09C9CEA05819D3DB7A641C962AF1715B4E66E5E3C49D07081F3023B2418EDBAAB7F152F9782C7F3E7B11F1247ECBF7B1487DF40043261356D6D677F5C7FCF2CA81FBF0A0FD4EF2BDF98598712EC0D1AFC3FCF4A4D7E5EFF73E4FF20FABDF072D2396EF2B99FED2014FE5F7922FA51C4FF9AA3A6560EA00375E6BF2F3DCFA9311EF49DDCFFEF6D4F40CA8D46A28DFEC6F272954D58C9CA5059CC9CBC6F71D6DB85E26773BEF90FB1E2F2D09B1A14EE51541D6D38E3345252E789E218BA2B123F6DA5FCFC755DC591F12174A7EFFFB03F993A1F7739F24A5A6D423FA87D7B8C93DC795AD1FF061B1111717D6F0DBB6695C1A9BC36F2B4CF41A49779F3C43D7F02C9EACAE4A360E7D350FB477F71C18CF7D659F5F6D31A068D6ECD63EE7FDF64B629BBD399BD9ADD5C264B5A3B4AC8CEAB7BB782C719D2A1A6FE57A5D3592A6E611D5E1BDF5A683263E6ECBA9A4689CCD4A46F8E0143286DB71A3A642B827357D3B1ECBA9F397111319013D39F3B1B62C69FCF3C3BCBB0E2A9B3150D500436525E6F45D5E977F98F7E240B3CD987D1EDCF6F9BBFCBDBA94D9E3FC79AFCE407D5228556A5814DBE773C9FEF6F07A35924747E95EA14F1F2523D561DE35E7F0F77DA7B309B1A1C8B9B604C704EE717323896721DC2B8BA6FB8C1DD38B989E1C73FB2C7BC56339C89C2FF6F74A52B1CA2AE0F975EEFA87250334FF51CB0CBED44DE1AB9E715C9A5DA6BF452F3DC3F8FC53BA0E2BD5380C64FBDC57781E67710831BC7DC1B72B75E3A8CCCF425ADA23A10D77C663297AF9238DB792B3BC4CF96C3E2E4A20243E6E0BFD346A295796F774957265FC3D2ACD763B92B84A83463DCAB8F7DD7AA5CA633B05F25CEE0D1DD8AFFC401BC70CCF830FCFB79FEDE8F3625347BB90E7F976122F8ACC1BD14316DCE76C3E12F3E9A191C49E7AED32E7F0F7258F3A686CA804BB9DC68C8AD49B686C0692E7EF15F3EDBD1CAE4BA103FB6DC3E286518471733949A19A517C15DF4BF35F25EA702A5387F305833897ADA3D706DEC40391721C063B9E133D399393BDA77F38A9ED73B9AA17DDED4A84DF0947A42C86B3CFEB68CC2F229FEC877B3CA6476477376E3677E2727929AED66B90381058FBE108DF7EA1A20EDF64E422927B1FBA555F85F0AAA25DF6F9E59B7770F1DB2B90A51660DCAAF3BB7D7ED071CCF09CE139C37369F0BCA4B252C8FB623F9C69660D45992992E880D4BAE6AD7118C878EE8BF36AC40EBE24CF1574C1DDFA7977618124679578FF70F76532A4E516A130276DD7FA39E1DBCF653CC277AA6A5C2ECA117CD7C568F55ED3FF8326C2B75FE1DA2C841B2BA75392219B5A41D154BFCB33F2EBE7273EFF131E44DE832C264612FF7047E9F7C39E553A8AFCFDDEC7CEAB05B60E04EB79B599856714CB33F387909FB3B79FB383C824674B46EECA309F9E89E9C808E1FCF62E7F2EEFC8BBBBB6B9B024B90E48AD6BECBC9A77EC736A93DB6C6FF33BEC73F249F63D1C46A6A76B846F7718DA515A5C24BC1389FDC95C5714E1F1FC3232C687116DD023D63A8A64EBA04FB07A3F89F893F9AEA11637D46ADC6B522276740EC97633A27BDA847BC81C40EAC6F3ED531B3FC26EE843AB761669DCB5948611FAC9A7C47A9B90E7AFE57049CA7EDFAB3CB3CF997DCEECF3DD3A30B3F20AF9F2610C18A6D1AB754A26D3617F8A55471FECBD039836EA035E07A496E3AD71E8AB792050F9F69DC9AB782EE2DBAD662D1239DB96F835370C99F7F40FF7D0364AFDAFF91BC7F9449E31877BC648F3048D9D20D36A916C1B4274EF5B3FF82ACD18DDFB92989C80DCBC5C3CCA2AC3E294CD65BFC817E6159C1A98C547F5769C1B5FC2BF170DE28C6D4ED8FF49528565D6EDBE155F8D6386E70CCF8319CFC9E7F4EC3A4C339B28CAEC954CE6409B0D4BC39DE8CD95C3C0CD0F81AE0352CB09463CDF8B6F2F528FB8EC3BD82BFF90B3F776F210A92526146AC668CAE16C433EAF503B76C91C16C5F2F0F43CEEF23BBF8BE3B124A7A641512AA7FEE1525353F7F40F279BDAA47CB6BF719C4FFC3386946A70363B19D7EA1AE9F389E3DA10FF708D1A158DC7922E8AC712293ACFF1BBFE15FCFAA106375FBFC2FF4936E0CAF22A7E2F3ACF4152FAAB17300FCFBCB36D19DFCEF876C6B7331DF0960E482D87F1EDAEEF09A99C9D47E67A7EDE27E7FB42FA27F19569017FEA1DC3EF541C966F6C0AD7CB394C207139C8B942724E70E799C3BDCE1892182062F92439E7D7DFD8A0C447B9C36D5EFCDDEA5811FE83C46351D5AB84F80462BEDD9D7FB808EED989FF357FE3B8C0B7BF79C64F12D271B5B400375B3A903D358C28377C3B1F872139478EC971BB8BBF857FBADF87FF7CA2183F8FEFC13F9EAFE5520DFED72DB570FD249774D645BFBE97EFB7FC51EF63F679E0DA66FC1CE6EDB60954FB9CE980F472BCD507BED201A9F9F69D784ECEF75D9B5D40C8D43A3EEF18C11FEAED3833FA845EBBBCF21C8D66278DC941ECE39DFBAB0FA343B54A8B606792F4A57111E79D4FF145EB38BEE13EBFEC9BC6C5B955E1FAA5D1158CCDAF09F158262D3D90CB2B77C56371E71F2EC3391370E7D576FA87CB704E22CD6177C173E2CBB6ABBB83C661E89F7E0A6B471372D40EDCFBCB0FB44DC2B8F445CF14FECCB51D693382E1A11BCF853623FDD6649D777BEED557E398E1399BCB199E331D905A4E30E2F95E7CBBB277DAF59C5FA20E610D1C86E79B1092A5C799B43E9C4AEBA7D7CB396CE5CBD7897CED93D8F323AD4A34C725A0353907F33AF5BE798CEA9A4197F789DF945B70A2D68C6F669FE1FF150CE20BEB2AAE4D395DB8E334DBBC108FE572E80D64A6A72224E434C2C2AEBBC43F8FACCBC67DDD20DD774F38EC7B9D240556FCF304931EE7CA6BF1E503128FC5895BA5C9B8D7DE28E2DBCFD0782C1F9FF818A1615770F35604EAEA6B5CF876923EED1A17DAECDCD40A3ED15819DFCEB8D680E25A19DFCE74406A398C6F97E61D44EC9BD76298C1B8AE077D7205B4F272AC8FF7EFEBBF48DA699FFF22CB805F3C6CC707AA29FC6B5A377E536977C173B17DDE6F72C0661942464ECE2EFB9CF87B25FEE1627B5A70BFB51E57AB2B11DEDA89FBED4D7EC7713E117FAF5F3E8CC2271161389391889B8609DC5516E246E5DB98C52ACD763C96B4E21A1A8FA55CD584B5A74F5CECF3D3A3ABF8797C37FE39494FDBEC93663BBEEA1963F6F911EBE9CDF7722965EE2C1FA8B6193F8779BB6D987D1EB83A20B51C6FF581AF742050F6B78B7D07ADAEBDA4F1E9C78D4378BAF19AE6F78DE72ABBB0CE4BD2071C7EFF32BE0BBF88EBC13FC76BF1BFA3DA7182C37CFEFA450EAFC9594E52766C610DCD8DF582BFA49D7C3BF17D9435E9C07DAD917EFA1BBFDD25E28747D6D7473F897FA638B309F2B525173CE7DB8DC46321752579B28F805CDBB9CFA0AACEB26BCF418F76D6EFE398E1399BCB199E331D905A4E30E2B994FE649E29EBB1A9520B897CB7D5366358AD86B6A404EB6BCBFBFFAF17BBF9769E3BFECAF2041F950CD0BCF89A986F8F4FCFC1F52B17F02046E6767F3BE1DB6F34B6E17A6D35FE10F9008A8D45BFE3B7BB14222F47AA730C9F3D48C0E731F13893F650C4B76FEF6F27F1CF2F5DBE88FB3BFCC93CE5DAD3AC6987736800CB6B2FB0B43877B0FEDCE77D8C6F675C2BE3DB990E30BEFD78F1EDBC0FA197E999821FA1818C0CAC3FFF114665E581DF7B6A6B4D2E78FE857E0E3F8DEDC64F6FB7E0C3B2017C20D7B96039E18E2D73ABF42C75539716235373C84A49D875FE9CE7DB2FCA0BF0C0A0C3A9E45428D6A7FD8EDDEEECF3CF92D2F149423C3E8B92E18F3191B85292E7629F93F3E785F212680D03D074E830373DEEE2EFD5D6DE096D753B1ABE8FC14C7F4340BE971F55FE61DE8B8F5A4F6FBE977BB33F02D536E3E7306FB70DB3CF035707A496E3AD3EF0950EF8936F17F3B63D6FFE937C9F199B8359D9006B6BFD81DB899C57DBE9CFCC9DDF33FEBBAAFFED33A8B5569464C743D3DE21B4218FE7C725A9B83A93BA35F6999196148DB8AC1C346B9442FBAD736DD196908E8EC434181BFBB0E4E80BC871CCF09CCDE50CCF990E482D2718F15C0ABEBDAB779AAEC7F2BF8BF7B7F3F7F98A6BE5FDC990F8E7F1D1B750589CE536FE7982AE09170A0BF17942027E7BFD26CA5F3EF53B3EBBB3CF4F3D7E8C0C62A773F6F9AF2FDEC1B9CC18E13AEFBFFD7AE875C8621E20EC9E0C05B959BBFCB76FF66AA92FE740E5D918DFCEB856C6B7331D905A0EE3DB77BF278CCD3E477FEF147A754E6AEFB576CEA0AB634CB8AFB3674AD86345CA3C7FF503EAD50DF453FC7F3EB3CDDEF87B55B5F5A2BCAA1AD5E5728FF1CFC394158835F4E0E4DD58EEF70DBFE3B7BB44D6CF4F65A7D1F5F33FC6A5E076C55BBE9D8FAF763F2A0A2565E5E8D3E9298EF37C3BB5CFEF44A13BEA214C7FFB3798B70C04E47BB9E43AE021CFECF3C0B5CDF839CCDB6DC3ECF3C0D501A9E578AB0F7CA503DEE0DBD332FA915B6C43455627F2AA475098D707DDF83A3A3516BA8F9AEC415769C6386CD1531BBD5ECDA5FA1E49FCC91CE53E83751C3DFD43484F7928C8DF19FF3C7B6185FBFE92EE1BF7376E7BB2CF6FB77623DE6AA1FBDB73979790627BFBACA4DD49DD3AFACD34CE3B1F8F45DC168E90AB30FCDD7F815E518E95C2AC801CC70CCFD95CCEF09CE980D472189EEFFEDF9C42332AABCC8889EE40336797878535E0B1DC0453FF04BDEECE3E2758EE37FBFC4DBE48DD8BC28C34C88BF304F9C775FD7C79F315148AD2ED782CD323425B10FBDCD6DC4DE3253AF34BB1B2B67AE0B69D9B5EC4547F0F9667173150510E834281DEDC623C5D9A976C1C333C677339C373A60352CB09463CF7C6FAB9BBFB0261ED345E33EA770C96329136DFABCEE4BC5AD7E342E8EEDE85FE3FFD1DE6D292856B1BC9C9F4FCC1BBDA766E6E05A6EA4A9A1F6E694263621E16AC3AB67E7E88326CED94AD9F331D60EBE7EFC379B59D7E49F6FB4E761499077D273AAEF6F95EF5779CBA0CD3E75731CB61F0D2979FD3DFC979C21F0117BF3F9EDA76F9D92B4CF76EC7701CD5F66358ADC1487B2F77DF8B03F74D20E88054EFD88729C36C33669F331D60F6B994F6B961D0828985554C8C3BF6D46FA975DDD7FBE1F8DF89AF5777F1CF13868D48B59B71B7B51DD94B0B7EC7667789AC9F876B3478CC7D5E51281037A0E59ED5D53F1C397F9E9C964EE3B2D03AEFD80F67CC2E86EDF60D0C2B54582ECE16B0DC239E8BCA93EFF3356ACC27C561B5B004F69B3761BD1E0A4BD86DAC2B8AF1926B5772CFE6D64B9733EF7ED70186E71ECB07EA5CCEF09CE980D4728E0B9ECFAC6C51BCEED319B9EFAF5DAE19ED7348CDCEC1C6DA768C4C29FDC30502D77A90F8E757EBEA7057598304ABD5EFD8ED2991FDED91BA1EBABFFD46B5C2E5593DC53F27F527670C6A550D7874FE2A4A43BE82FE6FFF06EDB7C2F0C34F7E22E0799F2C86B613E120C927CD8BCA93EF5D9151B034B6D2B6E5F9F6696D336D736B5A06BD47A952A3A5A8D0E58C9C3F7580F1EDEF1FD7CAF876A60352CB394E7C7B95BA0D4A65F52EAC5F7AF1234A727377FD2EF53BC87EDFC98E2AD3D3B5EC920AACAD2D63D06C15E4EF8C7F7E43A946FED238AE94D4A0FC75609E3F0FC92FC1B9123942D23310DEA0C6EDFA9A5D7C7BFFF008D2D21269CC77A7D5E0D216946FBF701F96F83B78762F025B4B2B02A6EF876F9FB1DA31929F41EFB53E780043462686F30AB77D016AF542199B9BFFF2B70EEC577EA0BD974B297367F940B5CDF839CCDB6DC3ECF3C0D501A9E578AB0F7CA503625D2D6B366061D4E8F69A381D3B3C277CF1CBD728ABA9C62A27B3BD4BE736FE391F8FE581C18838F3A0DFB1DB139E8BE3B164389DBBCEAB119EBDAEB1030A859CC67C5F9C1810CE1710BEBDEF4E14F49F7F06ABA2184F6B6A2906FFE5AFFECA339EBFE1CD4979F2DDD9D08EC5F44C2CA6C663FCBE0C93B2684C3D4AA17C3B5F7E63EB25AC6E7C0EF84D07189E7B2C1FA87339C373A60352CB394E78BE33F9221E4B2070AD3CDF5E58A2C0B7D76F2333F591C7F8E7241ECBC9C2727CF3381F250B8179065D1C8FE55767CFE0566D95886FDF8E7F4EF8F66B97CEE2BBBB32D4D5560A7C39CFA3F77278BCF47FFF051D9C7DFE97BFFEEB03F1ED1D9151680E3B0D93A619EA3BD7D09151C06177D52EBEBD3E3989F1ED0790EF2B99EF0BD7CAF876A60352CB394E7CFB7EF1FCB8DAE72416789FDE84D2A26C8FF1CF493C96C7A346FCF64E04CA5F069E7FB89DF158BECECEC59994B7FE5E559AEDF8E7F96535282ECE4366713926C71C2EE7FFC9FEB72DCE86277BD79E25261DD83E1F2AAD46F96FFE0D4F3213D0FEC5EFD1722F0AC3591942EC1D720FB3CF996D26C53C20A51C4F79669F07AE0E482DC75B7DE02B1D0894F8E707E9436FCDE524167895AA1159D919827C4FFEE1C8F740C573B17F3812FB3C69F4ED197A95668CD68D8FC7629B5DC6FCE4844B5B103C7F1572867E5F8B4FA0EBE7BC8DBE9FF57367FF1066C26EE0159756AF876292FB7472E9059767EBE76C2E97721E60781EDC3A20B59C60C4F3E3CAB75FBF750BB91575488808A3F158088FEC2E1ECBC9C404DCAC267BCCB6FC8EDFEEF05C1C8FE5D3E807886C6F14AE47CA0AD0208AC772E6FA7D14A4C7EEE2DB559C6D4E3877C2B71F747F7B4DD81D74CAC26156D54275EB1B34C527A3F5611C96176618DFCEB85649E701C6B707B70E482D87F1EDC7C03E7F73FEBCDFE480AAB1090539191CEEC5A09A9C4D53E8290E8AE3B124197B70AD8CAC49BFF63B7EBB4BE2782C174A15886C5589F0BC8CC3F3B7F158489DD756973C9E0527FBE15E9FF8C381CE9F4F73585DF6D9093807B5689571D89E558CC5312B2DC39727E7CFADDC3B003B7FCE6CB3A3CC0352CAF19467F679E0EA80D472BCD507BED201C6B7BFCD13BE9DE47BDF70C27BF1ED0FF426FAE96FEC7E17DF5EB8B68438FDC02EBE9D8FC7C2D7D9533B113C279F07E1DB17F6E2DB45E519DFCEE6F2FD946778CE7480E139C3F37DDFF7C63E2FA9AC44AF791291372FA098B36BC5F152C9F9F3046337124C7A9C2928C3999C4C28B6D6FC8EDFEEF0FC525919B2C839F4F40C9CCEC8C29592DDF152E392D32023363A5767B17DED0ECF0F6A9F2F9656C3D1A082B6B008D3DA76973667F6399BCBA59C07189E07B70E482D2718F1BCB3574BFF9F24C2EBBBCBEF756DBF65E697578E547EBFF72D2D3F11FCC315CA4BA0D134E074480894F54A61FD9CF0EDE7321EE14C7E2EEED657E2923CD7EFD8BD17DF1EAAAEA67CFBF9823CDCE49E97BF1625CBDFAEDFE95328292DDDB5FE2D5E17A767CF0EB17E4ECEABB546DDC2F2C214865B3B5DDADC929A2EAC9F2B9312B1B2B61E103AE029EF49BE14FA7D50F9BE92B9B3BCB7FA408A79404A399EF255DC7B3DD381C0D401A9E578AB0F7CA503EDDD3D07C6F340B6CF9DF3EB422C56124BCC5D5EFC5D1C1386F887EBD50F50BF69BC7CB1FFF6EB8A22C4188650FE721509369BDF71DB937D7EA55A85F0E626EABF3D7DCCE2F2ACA4CEA46EBC7FB8DCD25A18743D1EDB93F2ED07F40FB7D83F8427B97978565682A5BC7C5A8624E61F8ED966CC3E673AC0ECF3C0B2CF0319CF6B6B4D487FF5023739EC22E9E396499C322FE0E36A2BBEB42EE383023D424CB3C2F5CB2BCF61995BA57C31F10FE77CF20CB1F1B17BC663B9D9D48EE8DE56BF63B7273C17C763B9A15221D96674C17372B63E29330FD919A950B7B7A3A5A5654FBE9DE6394C7FFDF77FBF2F3CB71B4630AD3362B8A9058BF6418FFDC6F09CCDE5479D07189E07B70E482D2718F13C90CFAB55D70CBAE0F96FCA2DF8A8740097375EE3578F3A7165EB35BEB1CD0BD7494AE3BEF3FEE1483C96CCCC741A8F252D35C5633C962B747F7BE0ED87E3F9763E1ECBD54A05C22ACA846BA743EE42F1C63F9C4C2643626A0EF50F671E1E767B76ECC9E4D4DBB69E9DC3A66DEFF8E924193A47D0250B85C3BE8827F62E8FFD36EC2696BA143AC0CEAB05C75925765E8DE980D472D879B500B3CF5576FCB1694C48FFF56C3DFEDBA90AFCC3D536FCCF6BF5F81F5CFAD9BD26E1FA45CEFE9E597846CB12BE7DD8EE804A5929C877178FA570791C6155A57EC76D4FF6B9381ECBED660D229AEB77F1EDD6C9795ACF076985981E716F431FB60F06DBCDE84B4B82BDC780A7D366B7F731FF70CC3693621E90528EA73CB3CF035707A496E3AD3EF0950E1C3BBE5D6941F40FAF05DBFBE2DA2B9C32CDE26BE31CFE645AA2187E65695DB87E69740563F36B423C16E793A7A8AEAAA0314BC4782E8EC7725F6BC4DDA62694BF0E4C7F32E2782C31030388D576BBE039F1F7DAD8D24AEB59AD6E84BA41EDE2EFD517E398EC6F6FADEF61FBDB251AC7C13897333C673A20B59C60C4F3F7896F27E9D3AE717C6579828F4A06F0B56319D79E3EF3C8B7CB1E2523461649F9F6EBD7AFB9F0ED7C3C96705535624C43506C051E9EF37C3B1F8FE57C41013D63C75F23F1CF493C963321A71076ED22C2BF8F415D75B967BEDD4B3C5B45DF147DEF4AD54E33BE7D9FF27D25F37DE15A19DFCE74406A398C6F0F6CFBFC0BFD1C7E1ADB8D9FDE6EC1876503F8F76A3BCE1927DDDAE7241E4B97D182E4D8EFF78CC79261332024299BFB7DDDEFD8EDCE3E17C763395798872B056FCFD6A934DBF15265A979505614A14ADD8E51BBD9A7F639395340F621F27D40D648A4D40129EF63F679E0DA66FC1CE6EDB661F679E0EA80D472BCD507BED281E3C6B71FF4BC9AD5B122FC87E01FAE77B77FB8E392489DF97623F56C6A6F83AAA5C5A7E3983CC3B58D6D0EE52AF7FEC1F09CCDE50CCF990E303CF70F9E0732DF7E98FBF8782CF76362107231140505F9946F97CB8B85F8E7E2782C212909385B90ED776C7697145C3A55588A92AD359C789080AFE21E70CFFAD63E27F1CF1B352AFCFEF71FE0EEBD707C1B7A07E5C5F93EE5DBC9BBD4875536FC2A5D8B6FEC73A8515AFDAE038C6F7FFFB856C6B7331D905A0EE3DB03CB3E3FD47D6FFCBD1A461730343480C888DBD4DF6B5B67B7609F8BE3B1A41A7B70BDAEDAEFD8ED295D5137E3E4C3289CCCCAC7F5F20297675569083FD108597C0A8A0A73D1D1A5E5707CDDE3F9736FD9E7C27EC58567CC3EDFA77C5FC9F4850E1CA43CB3CF990E30FB3C38F9F6A3DCD73DBE89A5915ECABBF3F23DC563C9595EF63B6E7BB2CF65460BE24D7A1A9785ECC7173FAB4A3326D499D4F3B1A20EED4D4A9F8E63F20C27754E7CD93785D3D60586E7128CE3609CCB8F139E4FDB9D305654C1545D4B13C92F4F8E0BF57F32BF8A8DB5359732ABCF5FC3AEA90F6A1D905A4E30E2F971E5DBBF4BC8475EE623A425C5BA8D7FFED8D6890B251534FE79684D356EAA5548B21811AA52E13B75033E494AC597090938575880D04615BE8C8BF379CC969DF1CF7F7DF92A42CB8B84EBE2F8E7A949713873351C1909B13EE7DB7F9162C4C7F556846E3C677CFB3EE5FB4AE6FBC2B51E27BE3DFBD71FC0A4AC8359A5A6A925B514CA93BFA1D746471651F22FFF046D7E31A6C6A660AE2EC7D2DC1A7A724B91F18FFFC0DDF30C036DC318CA8B0F3A1D905A0EE3DB8F817D2E8A7FAE35E891999AE231FE795CA70A77DB9B70AFB31D11DD5D908DAFE27CC66324F4B7E0CFD979C89CB4E27667278AB832A7327329EFED6B1B5D1CFFFCC4FDEF10D1D922C2F3EDF8E76177EE2339E1E13BE39F7BCB3EFF43CB247E16AF45887E92D9E7FB94EF2B99BED08183943F8EF6F9FAC64B6CBD78295C537CFA99CB7D538BAFE06CD9F6B53CBFBA09F9BFFE12E3A3CB30E526C3D83C087DDC3DAEFC164ABF3C8DF5E79B78FC9BDF61D6D011743A20B51C6F8D435FCD038C6F7F9B27FC73435B171A5B1A05F93BF9F6A2973FA2686501594B6B28589AA3BF476B75481E7540D6DD8A074613647D3DC89A9BA7FE5CC467BF7D659F8BE39FE773589DE6B07BE4DB33F22B6131F6FB741C9367E0F7B7B3F36ADE9D470E53E67D99CBDF673CB70C2E40F5F5EFA9CF6312C720FBE73F17F24D0F9231C58DC9D599696C72F7F795ABF1F8BFFF8496AD0A39CF95DF84F2BB388C3797513C1FE16CB255E77850EA80D472189E1F1F3C27B1C0DB742654959708F28FEB79B5B9B51750D657E341760946F47D3E1DC7E419C4FE7C189E333C0F363CB79997D0177551B826B6CF1B124B31D552EA52FFE684626C2C3A507D271DCBD64E343F8CC3708D1C85273E87BDBD099D0FA3835207A496138C787EDCD6CFF75AB3E8D6CEEC797E7DBFF9C394A9AAB3482E93F8AA3F483B796BFDFCDE5F7EA07E7FC8275B3F67EBE7C1B67E3E3C388F9EFB17846B259F7C2AE455F1C598EE2C77A9BF73FE19CCF25CB4E62AE1A8C842C5375F6371B0C16DF960D201A9E5B0F5F3E3639FBB933FDCDA0F53830A46550F06B9F134505A0C5371EE91EBB65FF952B6E761CA7BA30F880F9F3B0D0E44A9ACF4B3B3672AA075C05BFA1DCC3A7090F2C7D53EAFFFFA77B034B5C0D6DA8EEC5FFC52C8975EB88D99EE4AE17E43B3091DA121309695A3AFBA1FB6E264947E7D1AFAE408614F7CC5C98F835207A496E3AD71E8AB7980F1ED7BB7A1ADBD13EB5CBEBFAA0BEBE3FDE8C9AFC0D6F3D580EAC3F7711C93F86A9E7CCC069A0E784BBF835D07A498077C31AFFA836FE7F1FCD98B1F511F7E072BCE5158D4ED1C9EF7503C57849C86A32E1B1383264C9B2D28FEDD87DCBD2F824E07A496E3AD71E8AB7980F1ED7B731C23FD43989F74627CC088F5B5652C4ECF485237C6B5BE3F3AE02DFD663A70741DF005EFE90DBEDD669A41F783DB6EF7C3D5DF4F80A528D9A5FE4B2B9B181FB643139581E1C2048CF51B31669940777C341667E631545D13943A20B51C6F8D435FCD038C6F67B6D95EE503F5BD9CE900D3017E0EF376DBF8C29FCCCEF36A3BEB5F1B9185A18C08741777A2FDEEB794972729EFA33FC0AAAE86B9AE1ED33ACFFB5A8FAB0E482DC75BE3D057F300E3DBD95CFE3E8E63A6034C0748DE17F3AA2FF0BCEA72189E3D7BEAF69E276B9BB037A8B7F3CE65AC3F5BDB759FADDB8C27E396A0D301A9E5786B1CFA6A1E607C3BE35ADF479E8DE900D30192F705EFC9E2B104AE0E482DC75B7DE02B1D607C3BB3CDF62A1FA8EFE54C07980EF07398B7DB86C563095C1D905A8EB7FAC0573AC0F8763697BF8FE398E900D30192F7C5BCCAF03C7075406A39DEEA035FE900C3733697BF8FE398E900D30192F7C5BCCAF03C7075406A39DEEA035FE9005B3F676BA7EFE3BA19D301A60324EF8B754CB67E1EB83A20B51C6FF581AF7480AD9F33DB6CAFF281FA5ECE7480E9003F8779BB6D987D1EB83A20B51C6FF581AF7480F1ED6C2E7F1FC731D301A60324EF8B7995E179E0EA80D472BCD507BED281C3E0B9D53146AF91D4ADD5B9CDEF754DCA328729FFAEFB48ECF3F7B56E472D939296F1DED5530A1D10D73B90FAC3173289BEBFAFF53C8A9CBDEABDF379DEC7B6D9ABCCBBE6B8F7A59E07FDEF9D7D1EC8753B4CF91EADFEC0787EDC53B0D63B98EB1EACF50EE6BA076BBD83B9EEC15A6F7FD6DD30BA80E95173D0D5BBDF3E87F6869AA0ECF3A62E2D3636D6FC22DB9FF526C93E3E11947DDED2A30FCA3E1F9DDD406F577350F6B9737E2928EB6D9F5A457790F679F7F82656C6FB83AEDE24E90C4341D9E76AAD15730EFFD5DD5FF56EEEB7212D293A28FB7CC8B98A099331E8EA5DAB694556764650F6B9797C091B6BFEC3747FD5BBCFB688D29CC4A0ECF316D30C9ECEDA82AEDE2333CB505657FA45B6BFEB5ED93280A7F3F6A0AB37490DCDAD41D9E725358D585E5A08BA7A4FAFBD44B35A19947DDED83D00FBB029E8EA6DB0CEA3A93E38E7767FA760AD7730D73D58EB1DCC750FD67A0773DD83B5DE24A5656442CDD53FD852B0D63B98EB1EACF50EE6BA076BBD83B9EEC15A6F92FE3F4F36FF1F +LargeImage=789CECBD777023599A27F6FBEF2485B417D2AE6257A7DD8DDB5B459C4217D2E966B537BBD7B13BDAD91D6F6E7AA67D4F7B336DA67D577775D9AEAEEE722C4B56153D8BDE03F47004E80912200880243C4800B420E809127455A356BE64210B00411020132008E41F2FF2CBCCF7F2CB97EF97EFF7BEEFB9946B372091B5265D4849D27C2773DE9335DFC99CF764CD7732E73D59F3ED0D1B0FBE4DBA90ACF94EE6BC276BBE9339EFC99AEF64CE7BB2E6FB30F3AEB5CD60C26648BA7CF75BA7D1256D4ACA326FED51C1E371275DBE49B03A4693B2CCDB159AA42C739BD303654F5B5296F9A46B2E29F36D1D5F426F929679AF630D8B8EFEA4CB37096AAD2E29CBBC5965C6F4F0E1E5FDB0F2DDD66F414EC6F5A42C73DDE41246F58349976F81AC03F985794959E606C71C3CEEC3E3F4C3CA779F6516BCA2F4A42CF376FD14969D96A4CBF7C8D402448DF54959E6F5ED03587659932EDF2448DB3A92B2CCAB9B5AB030379374F99E706FA1AD59949465DED23B00AB519F74F9D69A5D68152767DD7ED82159F39DCC794FD67C2773DE9335DFC99CF764CD77A8BC2B541A66BC5C4F5F7F5039D4BD70D3C895AA03A5DF6FBCECDC7B21F5B391B770645FFDB1D2595EC5F34B1FAD32380C0C54F26A768DE79BEF70F427120608DE43A58F670C1C444FA87CEF869B44C180B78E0B379FF18A81489F1D58E6E17E835065D0D2D11537182021523EF7BDBEBA793FA81CEA5EB8691657D70E94FEA0F176D3CF46DE22D51F2B9D81E9A35506878181403C731838FA1860534F38B849640C78F359DED80CB77B01154D52E4E7E743A31DC0E4C4C49EE917D6EEA3ACAA1606A311E3CE59485BE468904A6030985050C14747733D044229B2CB8498B0E9609B74C131310D9158864A493332D2F22112F1216D6DC3C0D0005A5B3BC06F68C024F5AC0AEA9D4AA83677734F0F4A6B45B87C3B1FB535D528C82F4051453564023E2BDF867C83A9C50D64171441D0584BBFEFC9EBF7201536A1452684AC458DCCDB85300DEB919D9D0789448C928A4AFA1DE301031C9F7375F951ADCB23D5CFF179E26180E373F6F359296A439F428EA6B66EDCBA5B8C92E29CB0F85C35BE0A6377139C4B1E0C698D10B4B76091BA5E2FE88458D682CB174EA2A88887ECC252D86DDBE3A3861D4EC8BA7BD0ACECC5A5CF2EA1B0BA0A77B23291939F89467E355ABBBBE87805158D54FB4082669502B773CB915D21C586CB84D3176EE04E5E1164421E2BDFC6FB0D245D7214523C4DDEF71AC5DFF57525E0D53722338B8FB40BA9985B9D43CAF5BBF8E4EC1548050D18360DC40506F6C3E7C4BEF7FE4BEEB58DA072A87BE1A6995F5E3950FA83C6DB4D3F1B798B547FAC7406A68F56191C0606841229878104C3009B7AC2C14D2263C0DBE7F4C5F92B3873EA38EE1454A230339DBED6201431FE5CF23D76938F9FBB80BBB76FA2BAA60E9F9FBB8882D20ADCCBBABB231EB9BFEDDFE6E34A5A06BEB97613C5D9E97E7E637E5D03AEDCD85EFFE58BAF2EA0BAA214057C11AE5FBD89CBE945F8F8D36328CA490BF93E7BC981E764BD9972CAFEFFFD871FE1F2C573CC75DFFC9350C46FC2EFDFFB00F772330EAC331C3950FF6EF1487F42A47CCED9E789D52E0F953E9E6DB348F573F679E261804D3DE1E0269131E0CDA7B043497369FFA00EADAD3274F60D412012606E666F9FB2B4BD03CDDD2AF47677C33EE38686B2F365DD6A584D06FAFAD0D000C4E2164A5640D6DA0EBD4E73200CB08D35F20D9CEE6FD124A84757472B5AE42A74B449216CED825CA9C6C6BA878E47FA16EAEBC568EF51D07D13F18201CEDFCED5E547B52E8F543FC7E78987018ECFD9CF27F1354FAEDEC7E9B317703D2D15695965F8F2D4FB61F139F18FCF791E403364400DBF0CB2AE6EA4E517A1BCB894BABE015E8B1602693326AD6A98F43A485B3AC27AE758F2F9CCFAB7C8C92946654929D2F2AA91F2D547F8FDA98BC8C9BACDF0B9C1B586941BA9C8CBBA81853957DC6080F3B773BED6A3EA6B8D543FE76F4F3C0C70FE76F6FDEDEF1C3B8537DFFB18150519F479717965D8FEF653E7CEE146FA3D5CF9E63CCE5F4DC3F9332771E6E235DC2B2EC2858B5771E6DC79BCFBCEFBB8919686F73E3D85B39FBE1F964F7A37FDFBF15DEFE56F2F6B68C57B6FBE822F4F9FF4D34FBE43609A9B59F790937997F3B71FA04D76509DFB6913B19DB748F5C74A6760FA78B6CD22D5CFD9E789870136F584839B44C640A87C868381FDFC5F07C500DB7A0E5A06D1E246CEDFCE6E1926F27F7C54EBF248F5737C9E781888455DCEF139C7E71C9FC7575D7ED0324CE4FFF8A8D6E591EAE7F83C84BCBE81F5AD07470E03B1A8CB9391CFC7E75761351BD028ED82A2A783E3F304E673AEFF3CB1FACD8E6ADF69A4FAB9FEF3DDE59A9E11AC7A3C470E035CFF79F4F2C9937440D2D8808AAA3AEA1D16234A1F2B0CB0ADE7A065B01B566285811EA52A623EE7ECF3C46A97874A1FCFB659A4FA39FB3CB87CADC58EEB7F78803BC373989E5B3F521860534F38B849540C04CBA7446EC4DCAC03F5B53CCE3E4F60FB9CE3F3C4FA8F43A58FE7BA3C52FD1C9F0797FFF96C073E9B5EC297DF7E8B1C99FD486120167579B2F279A418E0F8FC68F239E76F4F2C3F5BA8F4F1EC6B8D543FE76F0F2EFFF05C077E744785F73563C8928E1C290CC4C2D79AACFEF64831C0F9DB397F7BA8349C7DCED9E79C7D1E7D0CFC2CAD0F2FB7DAF1C5C20A679FEF819B44C5806F3EDB155AD44A24B8935D08617509EAC42D989D9D093B7D9F7E0A8EF1617428BB7035A5003525D928AE13E1EE9D1C4844F5A8114A51C70BBDDE7AB818601B6B072D03F20D3CD4B1B4920781B08DFA7612F4EB1CD09B06505DC543594D2DB2B2F251C0ABA2F775599EB5B1AEDF379E6FE0F83CF1EBF2BDD2C7735D1EA97E8ECF83CB8F672A695FFBEF0D2E8ECFF7C04DA262C0379FB26E159A5ADA20A86D425961214EA5DCC1CCA435ECF4238E359454DC83AC4F83E2EC2AF078E5C8292A427A5A2E1A05553879E50EF2EEA66263732321F99C1C2F6596D27BC49C4A4947756916847235F2EF55A2B9BD853AAF465A413EBDAFCBC6FAC2A1F339E76F7F743E605B417DBD1ED2660B46E73DA8AA1A04BFCE88719BEBC8F8D942A58F675F6BA4FA397F7B70F9EF3F94E2C5561B3E9F58E0FCED7BE02651314082777D38B23F4A7AE66DF0ABF87BAECF16B8B61A9DFE6E118A0A3271F5D215BF78B752332959B2AF35D462B53EDC41D76723DF40481DDFF9F038AEA55C7C949E8A43BE6713259323B73E5C7CDAE7C52503E81B71A399AFC5BD2A3D4A4AFA30BDFE2DCAAA7507FE1E9C7DCED9E79C7DCED9E747653CDC6160806D3DD12A83586180F3B71FAC2EEF56CDA256624146BA0A06E30C6EDCEA4609CF0455F7F091F98F43A58FD7FF783FFA393E0F2EFFE872374E7FFB079C5858E3F87C0FDC242A06F6CA67BC62806D3DD12A83586180E373F6EA72F3F0E291FC8F43A58FD7FF783FFA393E0F2EFFF8E178B80F4CD31C9FEF819B44C5C05EF98C570CB0AD275A65102B0C70FDE7ECF49DCA15E31048ACE8EA1D65ED7BC47BFFB94A370B45FF240CFA4958C6DD74FEF5BA29AEFFFC88F59DFEE08C0CEF5916F1AAC4CCF59FEF819B44C5C05EF98C570CB0AD275A65102B0C70F3D50E6E9B112E97C8EC74104A86A1503963DA2663B30C02D3EFF60D0CAE0D48F85AE4E7ABD1DA37057E793F245D0E14378E62C935179718E0ECF3E0F2775E13E0F76A073E9B5DE5ECF33D7093A818D82B9FF18A01B6F544AB0C628501CEDF7EB0BA9C7037E17089CC8E946B3D8C4CC251F98FF7C3E7CED5FB28C855A3BEC18CD45B1DA813D99092D68BD4F47EB897DC7189018ECF83CBBEEBC9707C1E1A37898A81BDF219AF18605B4F32F239E76F0F9E8670F951F4B3854A1F4E198C399730E98AACAC0E03039CBF3DB8FC4293851EDF4E02E76F0F8D9B44C5C05EF98C570CB0AD275A65102B0C70FE76766CB3F5FB7F80B87918AB1B9B316F93B1590681E9F72A03B27F87D72741643674460B039C7D1E5C2663E1BC7CCED9E7A17193A818F0CDE7D4E2064A4BEFA18AD780ECAA7A3CF7FCCBE8EF96C62506D8D613AD32881506387F3B3B7539D93B5A2156D0FB48C7BA0CA3F94F852A03C2DF1299DDAF8F21D418FFC3C600C7E7BBF339D95F8D048ECF43E3265131E09BCF05B7070DB276287AE4482BAE466E562E2C16435C62806D3DD12A835861603F7C2EA76C7AF27C12881F20981CEA5EB8695C0B8B074A7FD078BBE90F9A666515434D4D985F72B3F63D7CF5B3F13DF7937EB76F609F98F71B03989DAB61CE070DCEB8C400596329AA18884279C40203B77946A4648951293143D63B163606A289BB7031C0A69E707093A81820A1B3A797AEF36FDCCDC58953A751565CC8AC6716CEFA70D15CB7EDA8AC0F17AD6FC3AD0F175BFB9C1C2DD477398AEDF250E9C32D03C2E36CE98C160638FB7C7759DC2CA57D4C07C1009BB80B1703B1B09392C53E67A31E883506D8D613AD32881506387F3B3B7539E93F37537562B2F59F93E0A1F24CC60E4403EB1C9F73639BE389CF9756EFD3ED7612C694BD585D5BC51A75DDD2D60B476F37E626A6E018B0A2F9CB8BE8CFC9C4DABAC7EF594EC73466462CCCF9C4E834AC6DAD58752F6DE767FD0175DE8D69938989E330D8189D244C0E69313A68C1C2889E4EB3B2BE6D4B18293B8DBC13493337BF4A5F9BB1983033368581C61648CF9C8755584BA7991A9E64D290A3533F485FB7F719606BEB807B71917E0ED92BCC22EBC610651F7AF5AFB817E206036CEB49463EE7C6B70749B3BE811E610FDC1E0F6BDFE3A88C6F5FF1AC422834B2A6335A18E0C6B787F76DCC3DC3505797A3A7AA094345A9D43B2CC71C77E1622016E38C03C77D0FF68DE0D69FFE2BACAC2ED3E7E25B65A87BE617989F9D44EDE729E8CFBC8CE5D51568255A34BCF8B8DFB39AAE144071E5535AEE172AD079EE33ACAC6DA2F9722A66AC5A0CB4A8D171FE2CB4754DE82FCAA5E26D62D43E8D7B3FF81944274F6E87F7DFC6B075063D77D29967FBBED30A759EF79BB7A1BCF625F5EC55DCFBE573186E69A2E4FB683C970D4DC637989A58A09F293C7162FB991FBC8359F71ADA6F5CC3C2CC0C741D1AD85BC5F4B325A965A87AE63774BC868F3F87A5A9326E30C0B61E6E7C3B679F13797B7CBB2D89ED731B6B3AA38501CE3E0FEFDB4CDADCB048ABD0DF3C08E7A01CD35663CC71172E06D8D413CEB721D7ED8E3564FEF51FD1E7E6013B0ABFF75D6C3CB4C34DCD6D4CBC99F90DA4FEC59F6164C044D9C667E990FDC3C751F2C3C730A596A3E2FDF398EE17D2F10597F2305478C34F4F5F433FC6A872A0FBD09D6E0C9494D0F7561EBE9B3C3D8F8AB7FD6D7CDFA92DAF09CDEF3FCB3C8BBC93373F2A9116B5BF7E8C96C933354545B4BC169067A2A3F857BF62CEBBCB4458B019FCF4C70306D8D613ADFF3056F500E76F67AF2E97C8468F645D7E503E2732C93B5B3A393E8F1D06EE531C43C2F08B2F31F214BF091EF72296DC5BB47F757622B2B28D25060E8BCF53FFCD7F0775AD0899FFE59F289E1BDA9146D7D6879BFFD77F41D38B3F83DD3C09D9F163F4B7AC789BB287DF7E068B9363183638D07BED02E4E512DCFA77FF0B16C62C7E7A64E97C0C649E67F2EFB04E435F92C7E831A9C73125DF6E0FF8BE53C13F7C17AB949DEE9B4F37659B77E757E3C21FFF390673AE30D747CC13F43303DF5F25EC47FE77FECAAF0CDA6F51BA17A7E30A036CEB49463EE7FCED3BD3F4AAE6505E653992BED683F8DB49BE859209A45CD3D2321B3A397F7B6C31B04EFDCFFFDFBFFED77840713A39D72BCC18A82EC7586F2BB4B5B5D0B6B463696A3CA6B88B677FFBF0889BE6CEA12631EA4F5F44DEDFFCDF589E1DA7EF2DBA3751F2CA07B8F447FF3DDABF3A8E95D555FA7A4F6923E66C3A3F7F3B6D03BF750A57FFE48F30D9DFC1E89C732DA123A31857FEE77F8359539F5FFE9BCEA7625ADFCBA4EFCEC8A465DF77BAF7C4AB687AE55720BE7A726F6CD889DB7FF7CFB8F56FFF14BA8A821DF924CF9C312A99EB6DD975B8FE57FF165631DFAF0CA6E7D7207CEFCDB8C200DB7A387F7B72DBE712991365952338754603856A1E6BF6096C9A8DD818B1C163D061B3AD171BF373D8D01BE0D159B1B1B088CD210DD6F4943C3B874D656F58FA63D50E0C4CBF571990FCFBCA1B336EACA995D8189DC606F51DD6747AFADEA676089EB1496CAC7FBB9D7FCB187D6D73D8B1C39688160638FB7CA7BCA9D2D05CFE2D4007C2E916FD0C365C2668AAF9B0747741DDAA857B4C1753DC858B0136F584831B72DDD7B74DCED3BEF7246D4713B9E17C26CAFEE5BB987358E9FBF35333F475E2CF6EBF761BC22B39E8BBFA197DAFB3448AB21F7D174B0B4BA87AF90DB8E727E09ADDC0D7FFD39F21EFB1FF078E76311D6FC635CBE85709B468FBE465E65C9E55888D4D8FDF3BCD7B1EE0CB7FF567583475D2E777FEE539B47CF42A3C9E15FA3D66C79D587EB826337937EF337DF3DC925E8669550B2D2F3F9C834BE4BB8F3D8E95D9BDC7BEC60A036CEB89D67F18AB7A80F3B71FAC2ECFCEB5526DA2199ACBC9F99A528FADE63A6CF69BB12EE261ABBC1E9BED1DD4793FC5E1466C55907B3D583798A9A39ABE7E94F99C0481647C9BCBC9395537ADCB6474FEE9EF50D580AD0611D56EE98167711E9BC6313AFF6B1D5D943C8EADAAC2986180E3F39DF2FD6B3776F8DBED2575D0373461CE3A08875A8341592F3C4BD331C5DD51E1F305CA1EBFF857FF09B6867BF4BDAA8F2E62B2BD8696E7DC5BE8BB7D9B79D6F4A41BB7FFFE070C9F8B6F9461A461BBFFBAF60BCAEE566DF37757463E8C1209ED9F27FD1ED6A171986B8BB0BCFE00452F7E88CE936F31EF63314C63A2ADC1EF9DACC6695CF86FFE5BACBAB6DB14197FFF23ACAE6DEF91A453D8302AE1C16670D1CF5C58DD649E49DED3D028C11AA5A7FAA30BE8F9EA033A4D776621669DE3306ACCB8F23FFE2956E61D718301B6F5707C9E247CEEF1607D639309DE78BEF6291D5A5BB05547F1586B33D66BF8B85F5081ADDA3ADCCFCCC07A7E39363BA8FB3999D82CE063C33888CD4ED991E673D28E11354F327CBE6918C3BAA09A6EC3D0DF81CAF3565D2D9D679266736C8696D7EB298EB79AB02969E6F83C4CFDD1D4C9CD570BEFDB90F96A9D39A528FED13FD3E3DBF86FBD0D4DC65526CDA4630EBC575E81E4F429088F9DC650419EDFB354F59D3094A5D3F23265472BF20A61944A305056C4C49B9C5C41EE3FFE0079DFFB1E861BCAE8FCCBCB84B8F7FD1FA2F9A377E05E5AF47BCFCEBB39F43B15FDE8FBDBEFF4C6EB1816D7307106A44AD4BDF1329ACF7C05C1272731DAB6BD762B7966DE3FFD807EA6C7EDDE6EAB0C8DA2E817BF41D5B3BFC6B2737BDC04193757F2DBD751FCB31FC22E11C61506D8D6938C7C9E8CFDE7FDF26E98C5623A88C5560825367A0C587995FFFE152B13137029FBE019A7AE3B46293B54018FCE80B5B666ACF4EBE03159A86BAD585553F2889D8A673FD2FDE795BC515CBE3A84946BFA6D5F45E734563BDBE0999A82676C02ABED945D3E628647D14FA7F12CAE6DE7DF44E5DD6E85677696EB3F0F537FB869C8FC41CFFA3A2D932339DF21536D523ADEC3B6E951DC8BE3B0FACFF74A3F3D390383540637655B2F2EBAA38E8169FBD89EF9B40D193142D561A44F7D7E7E31E2EF14AF18605B0FD77F9E1CF6F96EB61DE130836589B9AE6EE880AAE41E1485F970F9AC1B11CD36994C31033E6F00376FF643A97620375F43EF5D5A5CB8BB2F3FDCEF144E1990F1705EFBDCD0DC076D453906EAEB30DCA3C660796EDC602059ECF3068B8B0E44EE303F9275CE796453F2F4DC2AB4D6455AB6DA96767C9BFD60E0A0F9DC2F06D8D4130E6E8E0A06D82E8F78C500DB7AA25506B1C24038F679796333CA6A9AE01AB786C47732F239E131BD7991E93F1FE955C0D8DD8F09A30EA31A654CCAB0A6791C36C70CD26F6B515A228795AAC3255D14AF17A8A3FE1F937C4FBA3C14476CD2B2A3CF04736B0F1CFD1D70D9A630D227A7FD8A8E9E2E987B06A1ABABC704652B2CBAA6628E8164E0F35BCD763CDBE2C0176333F88C6FC45BC6397C689EC6C794FC78BE1ACF4B6C78E1723B7E7A5349CB6F54AAE93D74B8F55E393EE7F83C71F89CEC91975D50045153FD8E7B922E39A6D7BF85A0964F9F279BBF7DA35986E92A1E36C9F814B3D52F1EE1322293A350320AE7C41C66EC563874562CCC4C1DE87B44E2E3E9EC1E8772D08996762BEAA97A5A20B1627C6C2EEAFE76B1748AB6CFB3734DB4EC1C73616CA01F4E9B9DC2E07D8ADF7BE878A68E76E8DB64E01F3B014D79E1A1602019FCED2F7C25C74F72D4782ABD034FD558F0789E1A8F67F7E1B7ADC378CF328F130BAB78B27880918F4D2CD3FBE9F40805F41891FD60808D7C2692BFFDB031108DF288570CB0AD2791FCED84B7CBAAF93BF85CD8A1049FB2AB56DC8B7ED7D96E8384DB263BA8CE48DB449B3EFBAC4C66DCC3DCC4185C8E29985B5A61EF6EC7404D2D75EFC1A1AF2743EC2CB6F72267633D19629FDB7B3A31D4DC81CED4BB18A8283D140C24837DFE4EAA123FBAA3C01B2D263C5138845F9468F19BBB0ABCD86AC11355063C5D6BC073D5838C7C62D64DE3C5CCD9E761E1E62860201AE511AF18605B4FB4CA205618F0B5CF2B6BEAA0E8E9088A63DF90CC7CEE11C960EBECA6CFC9DCDCC693DF606966FCE177393C3E275C2E91F9EF454E383D1EF89CCC7126DF709DB273C83150F68DDFD0EFA4F7E326E1993A231E2F37E0D7455AFCFC4E0F7E7E57899FE76AF1DB7A03AEECB2FF4B3858DF6F191C85BAFCFDBC41BCA79BC247638B788EC2C08B0D46BCDA318EE75BAD78A27890F6B1FFF24A0B23BFAFB4D158B170FDE71C9F737C9E307C1E2C70E3DBB7F513EEF15EB75CBE03974183B9C53518A452A8AA79186995D1FBB1B40AB587B21F8BCE34C3707879959E914938A85F485D51C9ECABA4A828A7C7F7FBEECB4482492C42D59522E69CDC1BA0E70188695F65DFB51BBBEA31E7E4D17148FF6DBD5881EB7F78802FBFFD161F2FDCC70F2FB7E2C59611BC2635E32DCD0C5E578FE1E92A2D7D9FC4AB5338E8EFCEF9DB1FC99FE4AAF162FB389EAED6E2F11B1ABCDC358CD7BBED78B6D58617EA2CF8AD88E2F5827E7C34E8A4BFE3A98DFB741BD0C88D6FE7FCED9CBF3DA1FCEDE1F27932DBE763B732303B3E092B65A3BB6C762C8CD9E97BC45749B88EF0CB6E3AF56DDD541BA0138B0E331C83662C3A89DF7E1476AD09E3833A387A3AA8FBDDD0353461885F87FECA6A2C2CAD60C53519F63B130E67B31DE96BB70945427AEE7D603C320F8ACCE1F37D86EF3CFD6036B957DEE2D530DF8FC4CF514DD03C43C253FC213C2B18C66B1D23F8C9F55EBCEF58C21B1D16FA5E9A75665B07952EDCB24D06FBFCCDBB1AFCE3371DF8C2368527B2D478B6CE88672AADF86DAB1E2F886C785668C4F39583783C5549FB403E9F5EE2ECF30870731430108DF288570CB0AD275A65102B0C70EBC944C6E79AF73F83A1B1162EE702CC12011C2A0D73CF12E03B0ED4A9AEA5ECF9C636E84B32E1748C41C36F84F4DC290C0AC518968A616D5561A0B10176B50A9D17B3306AD240595583058723EC7796C8ECACE2CEB79E17489A774DC3E67E2C05CDC3C8A1F24142BAD8C2C859D211469E74AD445CB6C9C0E71F160EE1CB07F7F1EB7C0D9EACB5E2A9B2413C53A6C3D3AD263C9ED687D7E4A3F875AE92913F1D9DE3F83C02DC1C050CB0551E7772B528BEA781486A465EA11229775548CFD1C0BDB814359D9162806D3D5E79D2FD07A4DFEE4171C900DA3BA97A2847C5CC01F6B857138ACF13C9DFAEACE4A32B271B1DA977E01A3104D5BF51C563EC49F97BC7D07923050ED308D4F54268F33299345A2A5E289DA9C7D271F3D37BB8FED249145E2946C98D0A649F2B42CE051E8AAF56E3D69BD791FAE16DDCFD3C03375E398F6F9E3D8BF20C212AD36A76F48D131F7B303DAD4235334E998C2F1FE0D7D0FB636DE7332B683E43BDB3D70FBBA152A337E52AD3B6F1C60B673F963EB10643657930B5C9A02C2947FB8D2B585E9C8B390692C1DFFEE68D5EBCD26EC7EBADC3F865D6205E6C36E257691A3CDB6AC08B0D163CDD68C5AF33E48CFCB1696A4F7FBB7D623EEAF9E4FCEDF1E76F2F2B1B40459D1919051AB48A07216C1F417EED08E6A79C718301B6F57865EBFC165AEA0650427D83CBB77A3034384AE73F275F8525D70CE76F0F430EB74D76509DBEE7434D8DD0089A61977787D41F8E6DB7977DFE75AB1DB5DF7ECB4A28A7383D981EE2F3F7FAC43D5418A822EB3E3E0899CF50EFECB5DBBC3CBEF9F0DC1B2F9CFD584C7DE3E8F9DD6B98EB6B858E5F8781AF4E73FBB1EC437FA87836AD0E46A9182FA7B633FD15C49FBE974C824416DA3E27F723992FB19F7CEEB71E60534F38B889670CB05D1E76E73A74FA6918F4B3A8115A691C18F4C9B35FAA8ACAB78E0A24CFDEFC4F4D2E4555E741317094FCED57F9469C69B1E3B4CC461F03E5C073B579764F3D4BD216386E65C07937136BB53CBF3EDEA3C8E79680F71C4D49A3F222C172351FA3A98FF2B9E6D38E8B94CF55D575B00F9AA0AB2C443F4F8033BFFC1A6597AAE975C782EDC7B254548EC9CC742C4CCF62966A53AC75B571FBB1B0FC1F13D9DAD58A9733FAA3C2E724843B5F623FF9E4F83CFEF8DCB7FC1B84267A0E4DAC74868B01B6F504CA04F3DEFC7BDBB4D1D679100C1C153E2763AEB22566A60E3A4385A7794378BE79142F748EE2E946133EB58CFBD553D7297E71B896FDC64C05EEA712385FCAF7BA573F892F160918BB77B73C9039BCF4BE2D01F378737273A96FD6C2F0F9E714A77D56D7840FF3B3C0DF70EFE0EA2A2ACD27E5953823102055A3C4A9E616BC5F5484AF44F511D9E7DE7C048BE777FDE15E33C1CA23189F135B7F69C90D53732B5A2B44F8E6B98B487BEDFC763C6E3F9643F98FC93E5FD6B60E7CC6D720F7FE261D086FEF2693F9014426470985255FDCF8E261FBBB3D9A2F6173AEA0B07408F50D66F4291CA8118F20BB5887D2D2016C1CA08EE3F83C3EF9DC5BEE84CF689C0C2F260D9F93313A81F9676B5D8F78E2F3C3E83F277B4764894D7E7CFD6A8F03C737FE805FA476E277E35B38393EB983CF07140334CF7AE757917AABFDE13C2A92BFE95DFABC899DDE2014D171C8BC2B43530333572B70BE9657EEBC7A955E678BCCBD22E9AA1B25100AEA911BC0E75FCBE528DEFA16CF9EFC34A8ED7D676E0BA92DB5149F37E2F7657CA4293BE9349FF1F94C9CCB79425A47ADA815B753AFD1320942A29F7A4FEFF9FA2E7D7F24DFDE38AD541A6FDEF422B15F7978FB55BD73F6C871DE358B99D965B8AC26DAC7EEB71F8B92DDBE25AEFF3CB2BED35ED51452AE54501830D3F50F3992F31D72F3F0763CEA3835B34AE3C63BEE621B4366A62E23FDEBDED0A25F844AAC434DBD01770A34E8EF1EA6FB15ABDA9C5820FBEFEC339F5CFF79FCF59F933526BDA1A0A49F91752657D474468A01B6F57865C2E54D22339DDFB2CA21D435EA99FCEBCDB351D1C906068E52FFB9AFBFFDDDBC013CF5A1103F7FB116BF4B53E0852F5B70B27630627F3B59EB64B7754E226D13FAFADB49DFF537597CD8B532269E97CFBFEA52E264433DCEB54883DAE734E777F6E29B9636DC50F5E062AF1A5F50B6EE75654750FBBC47A1A38E9EA0EFB9F1709DDAC0BCEDE66F37F88C61F7E689FE4EDEBC51C78EDBB918E2D762A84D0E0BD55EA9CC6F0BBA1F0B99D7A7292D64150307C15D22DBE7A1F2E97B1EA9BC7DEEEF6F97B48FA3596A434F8F1D2DDD53A8AC3142D0A43F503EF78B0136F584F33D8F0A060EAA33307D5D9321E63AA3F51F469A9E609F9BAF16DDFFF8203ABDE76BD4D1D4DC82E1EE7E587B7A316EB461D63AB46F0C05FADB6BE4562C3AFA9978BE7C7E5AD0842FC5CD48E96CD9B3AFBCC8BD816CAB01173ABAA8F3077E7CBE42856B29B729796BFB5D7C7CA50B8B1B18E9EE80B55D49CF6DD73688B1303E1AF2DBECC5E7F418FFBC52A8CB8B31D8A285A04084A1D6CE87B870FAEDC742AE8DA854DC7E2C0748132F7CCE8D873B5A18E0F89CE3F3C0104FFE7636FD18BEE7ADE945B048EB6050E8A16B5560DEDAB3A7FEDD9E6D572821CECC60FCED5E9FBE3704FADB7FF6EE7BB83DA00A6BFCDBC9964E5C1035EDF0B707EAF1F59D1BA850F4EB9730549A03E9B90BE8E3F129B96C477F8132278F91DB53AE323209CE89C96DBC485B60CACEC106AF867A6E175C8E618C0E9AD126D6A1AEBC1FD9B986A0FBB1CC8C0ED3E9B9FD5862E76B0DCCA7EF79A4328D6B6EBEDA91C3009BE541C62ED5D569E312036CEB09268BC4262CAF70EBC3ED762FDC34B1B0CF7BEF95C1286C80AE7D00E68E0E2C4F18F6D41FEAD9BEE384954316287DD6C3F71D0F77ACA61EEFDE4DC3F5DECEB0F8FC6B8511D54B8E1DFE76DBD203DC4CCDC0CA9C7DC7BBCC51F679D79D1C8CF7754357CB8356DC83458731E43B07DAE7BEDF60BFEBC944BA1F8BEF3C7BEF3814127CAF73EBC9F8CB06CB1CF36D52AED5F88D61F33D8F5426616C6AEFF5430E9ACFFDD6036CEA090737F18C81689507F1F7D5D50DC62506D8D6134C266B5FAEACAEC654E77E3190CCFEF6DD64C23F64EF34638B0483750D20F3B7C349BF7EFF0FDBFB54514772AEB34DA1BB6367FFF997ED3DB86D30E28BDABAB0FCEDDE34A7EBEA2879CB8FCF27DD0FF0D5B9B3D8587FD87FBEBEC1F8FB57D629BEEF6EC3827316D61E35F494DD3E2C5760CE61D9179F0BC918E8207B7079C8F8FF669BDFF7A0D76F7D38AF209CFD58C83723F173FA1F8D69FC687C116FEBE7F08E7E1A6F2A1D78AADE82D7DA87E97B5FABC6B77550E9383EDFC6035B73210383E421D6A2994F8ECFE397CF49A86B32C52506D8D6134C26B60AE76F3F1AFEF6DD64E21FAEFDFC2C165D6361A7378925682B2F63FCED39C555E05795EFF0B77F5C2BC0095E094E085BC2F6B793346FDFCD44ED83951DFEF6BB792590889A76F8DB4D5468BB728B9225E84A4B43F3A56B68BF707E87BFBDF3DA0D46D65655FBF9DB8784A243DB8FE59FCF37E3B7B261BCDE62C1ABED13F8597E1F9E2CEEE7F6630922974A47A2C6E7C42F12ED7C72FEF6F8F5B79350DB60884B0CB0AD27982C94D8B8FD58A2D8263BA8CEBDE211FBDC286B81BCAC0C8EF6B6B0D39BA5DBFBAC79EDF3DC723E26C71FF9A1BD7CFE699D10C7AB4AF179BD386C7F3B4973BAAE7AC77838122C238F645FFB9CF427F41755828C9533B7B543532F8459D681D5876BAD32E943D81F7E6B003CDCFF24301E9BF679BD6A12C717D769CE7EA5C386D71453785B3D8E27CAF4F845819AB2CFADF4BD4CE518679FFBC85EFBFC96D946E1AC95C655CED402CAE69C382FE947D5B7CBB86BB1A17C6116051393B8639BC0A556C1765F4EAF1E15B30EE48C8DE3DEDC224E3734214DDBCBD9E7417013CF1860BB3CCCC32BA8E48DE285173BD1DD3B1D9718605B4FA04CE6E09271BE0D42072DC742E741307014FCED12999DD913FBA97A2B7E95A5C40FAEF7E237F754F897CB5DF8F12D39739F846B2DA1D7B20AE77DB672EF6185B24D83F1CF6E6902D7871B5958C3B85EC79C7BF9FCDAA0097993549D6A3221CBA20FCADF644D19FE8607599333C8B35B9863B0F96ADA21E20BDBC9B3246C52F66FB03C6C56F39938E1F279A86F16AAFFDCE9987EB8275D17BD1FDD94C91AB26CE48AF13DFBCFF753B6C9C0E70C7E363650E0DEC057CD22A4F6A9C1FF760367659D3851CBA7EEB971BA498A4FCB4A51B138834CFB18CE8A5A5142717FF1C2026E18ADB8AB53737C1E0437F18C01B6CBC3CB65249077D8E2D763ABA4169B3C1EEE57D7622B331B1BE22E6CCA65D8AA11625D40DD6F93D2F2668F12EBB2FAA863806DAC05CAD3739B50A8E6D1299FA2E52D2995DFD6666C50F5E7564D3D360522ACCBFBA8EBD4359B036BAA216C0924D8ACA1EA577E1DB68A0B638A81FDF0B99CB2E9C9F349207E806072A87BE1A6712D2CD2C78686417A2D2B62979DA4C263A75A707266092FCA27F17AAB995E57C66F1D993F3C4095D20CA3501074FD9760EBC1F8FA8749BE09977BF5FBBE97293B777B4C3915574105DFB56A02D7933976FA321A6ACBA9FF220F7C5E256D37797DE7E704B5F8ACA2025FC8D4A85ED8D9F7795E3E881CAB1AC7F9D5289A9D638E81E3DBEBA87AF8D34F4E402269D85E5F86F8FB7DD69321F908F66DA72A2A1F8D89A7EAF5C5A5A5A0E511EC1BF8CAA4DD4EF66321E3DB85CD9341E369BAAC50DC3A0FD7E2029AD3EE4155598D598736220CEC1743BE7283CFB708F779BBE96703DF91EA0F15AF486CD9D5B773D040DA54D1CEE77E31C0A69E707013CF188854E7F2AA074B6E377DA4CF5756E8715FDE38C56516BF77586DE9C22AC5512B14977B0475F07C7517CB432AB87B5BE12EAFC1525B2796FB7B687979C285457577D431C036D60265C7C4126D9BD7340CD3D756C4322C1986E096B66395FA062BB773E0A6EACFE5F666FAFE925C8315513B96743D58D29BE09677C714035DBD8A88F93CD6F63959ABCACBE79FB8EFE3B1739D78A971103F49EDC473357A3CD368F0E3F33BC373DB6BBA7A3C61BF5BE03AB0F7AFDD086A9F93FDBAE934C4AF1DB0FF76E0FC73F5B01313B6EDF1F20A9586E273235D3FFE2EBF14BF4BBD8A8FCBF978EF5E19F89E59BFFA934F85F728BBFA6257373EA2B8EF1BA9803AF2E963A07DBEBC499D53ED838DCDED7DD703D77B25F908669F13FF0393FF10EBBD7ACB60B772236DD74997E7212E9CD870B8B0DED5864DD3383615ED58EF55C2D83C04F9B34F6346DA88FE9C62E8CF9C80A7957A978E6E6C0EE8B9FD5858689773E3E138FB3C529DA49EEA158BE87ACB3B0E868CE526BE36D267EC5D238A7907D70C3687C7E1999DC5A66D727B5D2ABD119B431A6C762AB166B662433F48CB1B1363F02C2D461D036C632D5026FD0D64EDCB6F2EAA697FC5A67E181B463DD6A69CCC37F08C50FFC7B0854EE3B14F6D7F03959EFE4E1BEE9D6BDE47130347C1DF4ED60CF6DDFB7A37D97BBED7DA17FBF986E1A40FF4B7F7D8DC41D793612378F97C91E2F38B5F5F66F8DC12506607C57A387C4AEC73E6DF9F5DC1BA4C88CDBE416C4904F47E2C5BBC2A7A2DF7D5CD356CDA5DD47919D6BA3AB139B98CADD2DC7DD7E591966D22F37967DF248D0912C8D838AF1C781EA94C02D99B37DAF9E4F83CF67C1E2A6F44263C467CCCDE77E82EA88149500F5D1D9FA96FA28D0149CF346A1B2CA82A52423D42F14096027CDE200694F6A8602D984CEAB626F1183D1E495D5E8BD1BE5EA8AB6AE1D0EA30AE56C61506B8F1ED3B65EF7EDDFD0D8D5016DE83F88B2FE176CFEC99DEF8708D73EF75D980030B138FC685BE76A387E674364276B59E7EA66BED3EF26EE753B29B7907AF3EB2DF59EBD5AB300A25E8CECA42DBCD74CCD974117DA7BDCA80B459BDEBB713DC3BB50EAC4AC5585350EDF556AAFD5E5987B5F676AC354BE8349E8959AC7550ED1E59173C261DD67A7A638681441EDF1ECD71C6D1FA0FB9F1ED878F81DDF24664D24E972B5C305896E877B02A14B0CAFBE863AC3040F660573BDCA82854A0B47A00A5A56AB82726505C391015AC05CA643F0AE27F1C199BA7E5915E154CD24E587B7B60EE6C472FC5EF4EF3000CE256184462583BFB40EC96C3C20037BE7DA7ACEF1B4757CA45CCDAB418A0CAA9F3EB5B207CB957FA40FB3C50A7A1598A91FE21D8152A7A5E385B6D325FD9D73E276BC1367F938AE166014CE22E0C4AEA616DDB395E3FD43B875306A2E6499ACBC978D8DEB6614CE907313664A1DBF0F1848144B6CFD9D4B91F0CB0AD335C0CB0A9271CDC24120648DF21D99789E9430C88E3B5CDC97FDD291F875D6DC0CCD818A64CBA7DEB8CF49DCD0E0F84B26154946B30EA5C4569F910F875468C5A231B6FBFDFF724F55A76AE89EE4327B25EDC0E97D940D56F839876B8A06DE987A9AB13A6D616C8BE3C0EABACE150317014FCED6CFF2B7BC523E3B11DDD1D703A17313B6CC1C4903EACF47BF1B9B1A31D037C3E563D1BB4BF8659733D4A7CBEB8B881F65B37A11749D0919E0BD9955468B2AE837FE60EA6D5CD617DA770CA402019A7FBD1C9FF4FD66F37CABA61904A606916C51506383EE7F89CE3F347B2EF9E0CC30A0D661C6398181E87B15986118512A35D12264D3CAC27A35039A3AE27981C6A3D9961FD1466ED06682A6BD09B950DA3A8F15031C0F1397B75F95E7CDE937F0F7DE57CE88502A8CB8A592BC3DDF89C04D286B050EDC7CEAA16E8A4CD50675E436B6635CCBCACB0BE53A4E3E1BCFBB1587B65B0B6B4C41506383EE7F89CE3F3E07C3EEFF9164E6D1FEC8E357ADDEBEE2BE7B0BAF8C8063E6C3EDF6DFF75B6F544CAE71BC3F65DD7D5F0B81EEDEFF95EAE9AD9F7D3BB476830F96B4A0E36FE8BEB3F3F78BC48FB4E03FBCF0FA3DFCC18D0473CAC5462DC3C8A69AB1906491B756D1336DD28740DF570CF4ED171C87CEFDDDE79AF32E8E99B65E6ABF9EEC7621F34C3BD18F93EC1D1C400D77FCEF59F73FDE78FE4F587F5153976DFE3617ECC025D9F036A1E0FCA8C1B708D6C8FB5D9DE8F65F0D0304078DC771D0ADFFA6ABF7AE629AE256B5BD341D044D9D5425AD68BC4CC75AF5C79B9107A2A0E9149BC1E2A0844227A3F0BB247D5AE7DD957AED0718454FCD3CD6666FED56B2A271EAF1CC03F9D6AC1BB06279EE09BF074CD107E9ADA8BE7ABD5289E59C6947391EB3F67391EDBF679A4DF830DFB9CDCF35D872D789BCEBEAB2F2BDC3208B59E4CBC6080B3CF39FB7C3FEF990CF679A8F4642EEB405DEDA16080D44B12D9369F67E76A9875A5BCF5D57EF5F8ADA1E5F1D06B76EC96C6773F16EFBCE6B58D2DBF6F184CCFDAC3BD30487C5F3EFF707205CF49CDF8D9852EBC6974E123E3141E2FD7E3E4B21B2FCB46683E9F762DEF0B039CBF3DB1F89CDE0FE6E1FC77EFBD403EA7D748F5599796FC2324907FC41BA7ADD7897EED342627E6D06F58D85E936D97EF116CBDD778C400C7E71C9F737CBE93CF37A863C7ED5C0CF16BA1282AC5A8DE8285518B5FFA8126C1AECF1A37DBA0C8CE803C278F5E2B5B5B5E8661850ACAD262484E7C8589A101E8DB3AD075250DAD972E42CBAFC170672706ABAB22C2804466670D6B816B624A42B469D8F0B79FE219FCFCEDC76A0C78FB8E129FF02DF830B70F9F56EAF069BD159F5332E76F8F4C67B8F18EA2BFBD37607D38822F1A63D4BFD6F370ED3BB27E9D5028A78EDBEBA766E5A8E9362F093A930B55C231180D63B87EA517E24E332EE569303BE64469892AA8CE15CF2AF53CE3BEF3C9F9DB397F3BE76F3F1806ACBA09A82A2BA0A9A880BDBD21627F7B677611FACB0A611F9BC7448714F6C121BFF4DA86C65D9F65EE1B84B191077949157A7232E9B14193F62968048D683F7F1DB6A121D8B52A745DCD445F5515EC8A1EB4DE4AC72459672D5C0C2C2D41283633D7C70D23708DD9E11A9DDA9E37D4D586C15A92EFB5B0BEAD31A04CBD651C2C4DA8FD5854D58D30B57752C73A682BAB6068E21D1A0648E0FCED9C7D4E389D04AF7DDE3DB00451831EE9797A3436F4E3F3AB6AD4566A20AC1B08AA73DB3E1FDE773E638501CE3EE7ECF3FDBCE751B0CFC9383632F6557DE7ABB075923A81EC7D48EC734B5B2FE6287E1CD39A3035EC80D3A8F34B1FCA3EAF68B0E0528114C7CF97E36A492BBEBA23C05DCA06BD5EABA1E4265CE5EB71F6461D8E9FBDC7846B659D3897DA843BB2613A2E097764367C49D90E41BF01C5E70AB182B9BEB2FE00B6CE6EFADCD2D98EC693DF60656E32EC6FEBB5CF03D7FE0C8C47D68793C826E9F96A440E7C5E3F4F80FEE23C5A96DDCC83B62CF7D0301088D5C0C0F179F4F97CC26887BDBF0FB3E32E280B0B21F9FA12D40564ECF98323D67F6EDF77B9737CCEF17932F279B8EB5EA68B2DF431D4BA9763D6690C2B14B0757463CE61DAD73F11EA9D43F1399B6B0D93B5B28262C0BD42DB2ADEEB168511B3C601DABF6F904AA1E6F3E9BD30F7C3E7DE7B2B02194CA206A82A6B312C5742CDE3A32DB712B272C9AEFBB1584E9CC7E8AD5B7015146159D383897BA5476E3F16CEDFCE9EBFDD36348C09AD0A0BEE4D18C48D90DE48C3E28C6B87FE70DF39707C7B3869F633BE7DDCB9ECB7EF9977AC0A09647DD078C400E76FE7FCEDF1E46F17894DCCBE1424BCD4358ED735D3F8D83187FF5A3888375ACD3BF6A52063CD57D6D6E923096ECFB67F79BDAA1AAB22313D068B045FD9EB5767D23CD44FFC6A22B1883EEEF5CEA1FCED647D60C2C545EE0D7ACFA92C870319A6C15D39FB9252835B4343289B9B46EAC3FD7D6BB73C0C9FEF8601A38F4F7C4DA90A9A575A56AAF62C0FEFB3D67DEA6C221BDB5BE19C5F437FCE5D68DB5A51F3F957A8B82B467D936D3B8EAC1D1EAB099EB66E2A7E13D633F2B156558935F9765B62B56F888A2387C7A4C4AA79847A17454CEB01CEDF7EB8F6F9A24A8FD99C0CBA9DE82AAAC0C4ED9B70DE4AA3CF9726A6227E675FFB7CC1FD007D793918D30CA137270F8AFC7B58F3B823FA4EA1CA80D80B5E3EF77279E0FCD078C200679F73F6F97EDE335AF6B9EF3E532478F789FC49A616A79696F0CED0F48E7D231B240A9828DE323FDCDF51F870AC8C25F7DEAE3A894F9DB449C8B81AB28FA4773F4862EF92F136DEFD5802F79CF4DD8F5276E122249515DB7B4B3E1C8793423D97575D8977CEA43FB2AFE5727C545A828B3D5D41B9FC64B30A59C35ABC793D0B5734BD78B5B00215D3261CAF2C61F8DC3BF6C7AB878486867AD4676532D7E97E825DBE35B917B807A6966AEFF8C6D9CD3E9F1CD2C02053C2353A0A1375AFA4D888AFBF68E6F66389F27F7C109DFBF9866CF139E9DBA6F7715BDFD881A7C034CB0F7D5C817BBF857A67DFFDD5A6E7B6606BAEA1D75E25EBBD6AEB4B22FE4E7B9501E1742F9FEFB50FCE616380E3738ECFE389CF25323B5E6EDD0E4FD60DE33FBD528DBFFD408CC73E11E0EFDEABC7F73E1731F749B8D662DFF5D98163AB7D653206FBA0DF69A0A1C16F0F46AB63946ABB93B9E07D8CBF9DD8E7AFDDBE8D37EFDEC6097E59503EBF3A348EF3826ABC9B5F8BF3E2623C71AD08A7798538DF58BEC3DFAED25931ED1CDBC600D5BEF1D5EFCDDB6EF9A6E3F9EC8169783877CC9B3E189F3B6E176054A58541DA02B3A88959933B703F1643AB1C7A712356675D71570F70FE76F67CAD93666BD0F508FCCE4522C8054D681408F65C8FA0936A139338022ABE9A0ABB3DDB2BF7563522B7B91DEDE669E619235A03E65D9370F46BE09A7246FC9DC2298331E712265D919515E76FE7FCEDC9EE6F671303768D014EBB03C39DDD7470D92CAC9687AFBFBDB9770867CF7E01B77BC1CFDFCE56FFB9578FCBBD86AEF6CE901808370FA48EF4BD1ECCDFAEBF5200F9B5D3585D5B854D3D0043730F7A94A33BF663191076A233230FCB2E1BA6C76730333A820983050E8A17C775E4BB73FBB144DA2E3F88CEFDB489D8CE9B57DE5469766D572FE90C11E9FC8C6ABF13BFDCF1C57534F4EF1CDFB69F770E55061AE3223D47DD6C9CC6C8D4F6FC50B371E6C03AA38501CE3EE7ECF3FDBCE75118DF4EC659EBEAF998712E60DA6683BAAC94D5F2E8484B43FB43DF3E69DF9C39779E912FE709FDECF357EEDCC11B57D350306ED993BFAF992771BCA61267AB8B77F8DB4F5EBA83828C5B8CBF9DF41578FB026A3FF81C2D172EA3EE8363107EFC011ADE7D33649F417BCA55BFEB9D0FFDF5DEFA77865703D3A52CF466A5C345D6D26CAC477F7135A57B0C953C9BDF7E2C9346034CB236AC7956E87905237DDDF45CB9D68B5FC1216F39D47A80F3B71F6E5D6E6CEDC1A87608FA262106EAC5B04AEA232E43AF4C7C72DEBEB633217C7391BCF36EDFC0E0DA8084AF457EBE1AAD7D53E097F743D2E54071E328965C7371898170F87CD6B584E5F9193FFDB3632E6C6C3E08A9C735BB0A47BF2AA4FEA5D9254C4D4CC32E57616DDDB323DE8C632264FED9C41D1B18E0F83C7EF85C9E578AAE9B573166B0513C540E7D630DBB18585AA2FBF2886CA6FE07454F0713CF777C3BE93F7FBBA8006FDFCC41D5C6625836F987E575A8DD5ADAE16FEF1BB4C0623632FA7DFDEDA4FDA2CC4EC78ADB0335AF0983FCAAA079F0FAD503FDED81DF66BFEBC918D4E3181FEC416F4E015ABE3A83BE7B3987868140AC06068ECFA3CFE70497DA8A627ADEC534D5EEB3AB07232E43AFFC54C5104E6DDCC731D74AD4F9DCB97A1F05B96AD43798917AAB0375221B52D27A919ADE0FF792FB403A0F83CF87876C581A1FA1FBC8FA6AA4B0368B18FD824BF958B2CA83EA515537C3333781E11137F8AFBE0E87C18EE2C79F816761D24F87A15B8BBBDF7D0CF3D67ECCCFAEA0AFA8022D5F5FA2743AE8B9B4B55F5C86E2E2C74C9AF9992578DC4B1C9FEFA19FE3F3D861C0CB8D0B6BF751C523FB826EF9F1B9777CFB1D93993E562CCE84C5E785338FE2F9F27951752D6A6BAB8362C0A135C1A91FA4F7C25C9A7162696129681EA2CDE7A1FCAB1EB39589FFE31B3D7E63219EA933E2C7B77AF0B32C0D9EA0EAEDFFF76C2B7DFEF8B54E0C0CEF1C43C7F59FC7BEFF7C3F3AC9FA42EAD202D887ACD0F06A3054C70FAA3F1C3DDF3FDB8EC78BB4784F3F45EFD9B39FF73C4A7DA791EA0FD57FBE4CC99DB75299EB922BB99823DC4BE96FBA5280A51165503DDE7B16EB226ADEFA1D7DBD35AF0E53BD0D3B74B4DE6BC0E4C3EB2498FB4D48FB8FDF41D54B4F61A455E0F75C459D129AEC8B9876CD60896A1F79C3FCFC2278BF7B9F8AB7CAF59F73FDE711EBB4E826A0AC2887BABC1CB6F6FAB0D3CF2DCCC328DCC6E8C8D41C6AF8954C3C6FFF793EC5E7C76A6A714620C4C785452818B7EDC9E524CDFBB979B82015EFE83FEF33DA30A05132FAC93AEB5E9D0E9D1513263DA61D93505757A1BFAA0ACABC6C04AE0FE7ED270F35AE89ECC722CECC88D97E2C2F768CD1FBB1FC34458E2FB7D6F1BA66123FBED98B27CA06A8BA7B929EF360303AB9FE7396E31DB5BED3E79B2CDBEBFDDB16A26E9FB399CF5861602F7F7BEBED32B8A78C5859DBC4B065197D573EA7F50BAF1661C5D1CFC45F5DFF1626690FB47C1E4429B930D596A2BBB219A54F3E014B47176A8E5F41EFF5F3287BF2650C4B1FED63D15E20C0B4727BCE42DDE797606B6BC4927B0BBCE79F071943E3FB2E5A9909AD5FBC8321A1C86FDE10A99F8A7EFA532ADE46CCCA239E31C0A69E70707314EA81503A43AD23172ABD6FFF79464119CE9E390B8944E4D77F5E418527CF7C8DDBE641BC71398BBAB6BC279F9334AFDDBC8BF392FA1DFDE7FC3A21759404ED3FEFCE2945DF9D5BF47967EA2D54BDF6162CD4FB04F69F937E7222DB7D786EC7B7A1DA09BEBEFCC0786CEFC7726C6183DE8FE507A75AF1DB9E71BC2836E1C757BBF09B722D9E29D3A2C1E2DA319F89F3B7271F9FFFC327CDF845AE0A6FF58D727C1E06D603E30D768D40997A1EBA262134CD5DA87BEE69E8A42DA878F7348CD579683C770D8EF64626CDCCCC2AC417AEC22EAD87CDEE86E0F871AC3D7880CE9C72A87233B034B5BD2ED022C5D9DA92428ACF1B616BA981AEAE016D1925687CED79E81B05287BFD18E4974FD2F2EAD212C3E7FA82EB4131C07BF3B59896473C63E028F3399BEBC385AB735C65828DB21BEDE72F60A120C3CF3F1C2ABDEFFA70D3EE4D280675F078B6DB945E7F7B01656B7F5CC147DA9006276BEB503C3DBE279F93345FF0F9C8B59B76F8DB2756EF63DC6A0E8A8159BD0DF3B959F49C71474A0A462E7C85B16F2ED1F9D9987BE4AFF6FADB0F828190FBB150BA76F3B7FB3EABC0A73C43953589B7D73F102E560303E76F3F5A7395BE7FBC052F340FE313FB1CE76F0F22EF355F6DD4B909D9FB2FD3F2D41265AF7FF2E1AEFE76735B3F630B54BEF319241FBF46D907120CD68AA06FA8A5AFD7BD7D0A8E0E01C5FBCBE8CC2E40DECF9F82B9368B7946E5EF8E6161CCC4E8D78BC58CAC96E831782F252806AADF7835A6E511CF1838CAFE76A1D0C0AC2773CC7D1F6F2846F1728B03EF0E4CE0891A13DDC77AC6B3CED875B7ADB3B42D49D6870B5BE7FA865F1ADFF9593BDECD3BA78BC4F7ACFABDB3A6AE8EF1771B47A79179FB1E252F416732E3620E8FE1E61445372E752A714A2442D178F0756073C608CF3FC0D9D64E148CD99863A0BF5D3968414BF3F63B05FADBD7772913DF7B6E2A3EDD47B0BE3B4EF6FA867AF3222EA7A850D73842CB81F1C83E36030D8DF47E2C969666A82B8AA2F27F70FEF6E4B3CF7F70A61D2FB7DBE9FA80B3CFF76EBB06C69BDFFC168D2FBC00734F3F4CB20E483E3F45DBE7E23397A1A7B85A78EC136C6C7AFCD29079333ACAAE2EFAD5D350DEBD42DBD86DE925186EC887677DCB4F07F1B70F16A5C1226DC584C10459260F9DDF7C4ACBA3437AFAB8B1B9FD6F72F679E2DBE7BEEBC39DA4C2778F49F1C5F41C9E6D1FC3EF7B6D78676886BAF7C06F7D38C9C3F5E182CDC90A2693B5D1C81A69222ACD5EEBC8F5A65CDDDE7F918AAF15FBF7F3C82E5C60F66DF4AEDB56C9AB41764E0E52F27219DFF9CF8E7D89F7EF64A2F6C11C3EA3EE07E3F3E38D125C181846664F13AE8E2ED3C7AA8D8DA8AC0F37A050D0EBC9EC1703648E9A178344DE540E62C3318CB591116C52ED0DCDAD3B505DBF89358B01165E238CA5A5D818B3D3EBC3AD8D0C63D3686505376CD8E7290FBF4B60C8A630118D7F3A92FFF8203AF7F30D8F029FC772BE5A3CD4E591EADF8BCFDDD4B1EEE5176979727C090DAFFD96D6DF952FA0F8B93CA89EEAB7DE87B54B4EEF99488E24B464F3682E0ED4E1ED3F5F985BC6826B8E6A1F7C8969E738BAAF5F85736C0ADA827B4C1A8ECF139FCF25B247E39D9FA8B7E2FF7896871F5C6CC17F7E838FBF3B26C177DF6AA4EE599938FB5D53C2F73CDCF1D881E903F76329A4EC518FC74DCB5E7F3B19DBF646461EBE140A7146D480DB2A45D0F16F1725025C5428F1456D3D529472FA785325DFE16FAF6DEE80A086C760C0D7774EF2B1EBFA702A0D6B18207BB02854F3F4FA70F4F7B38C62B3BB1DEBA2366CF5CB31FEC119CCE4A66156D482B5392716E43DD812F560C3ACC67AA7827A27312BB809970B481B2B18677B83EF33BC81F3B7C7A7BFDD97CF397F7B68BF69B0784BD4B1F027BF80B1AD03DA9A46583A3A3044D9E703C236CAEEE6A3E9938F76A42F7BE177F4983552DF912309A2D47C28AE7DCEC459746F4255518BCA0FBF44FBC52FD1F1CD794C4FCD439E7A9D8E537FF20A5C437D7ECFED170D72FEF630F41F657F7BB8329BE3DB0D2D72383483B0F5EBE05074D37B9087933E703F165E7D1D23476B7DB8CA3A0994DD8FD687F3DD8F85E4636C400F3DF5DF99DAE518EDED8A4A79182C4B54F94FA0B66198BEB65E558335751FD664526C94536D8D5BE9582BAFC47A43C576BA1625D6F9D558E7556275508735953CA618E0FCED89659F13FF1D099C7D1EDACE0A166F853AF29E7F6E57FD552FBFC9C8637A13AC545D6394B6427C3913BAEA7CD8A9766ECD1B9FC0D0DE0C8B544C9FCF4F4F326918FB7C69039ACA1A0C0944907C73013A81009DD925B089AA9977B1A886A12DBC47D5A34D30889B9940D2083E3989D585A99895473C63804D3DE1E0E628D403A1747AD7BB20E3DC2D4D95E8BB7737ACF481F6F9D4EC022377AB9CB48D4E789D1CBDC1F73C5C39976764F458276631ED9C64BE81AF7D4EF231505542AFDBD19B97014B577754CA83F8D853AEE999FD58A2816F3631C08D6F4F1C3E9750FF04196343FAE5CC41D62448B4BA3C52FD7BF1F92A756CBD72DDCF77AEA3D27865D1F11358F33C5CB7C2B345CF075F5959436B6E0DAC35D9B45CF9FA67981D51D3B232AF0C2BEE0546475B5E036C8202E67C6A6219924F3E00D9EB3E167579226280E3F3C874AAF94268CA8A30AC9FC2A8BC1546417D58E943ED7F4E9E65A5DAAF64BD5955553DA6D43D51C1802F9FF7963542539889BEE21AC82E5D435F493174B542181AAA582F0FDFFD587A738A616996C0D4D9159718E0C6B7278EBF9D0D9D47C9D71AA9FE68EDC7B2B0E866E4251F3930CDC2FCA2DFF9A27BEFBC7118E0FCEDF1808150FB9F93B511956997E05E9DC1E2E232BD67493430E0EB6F273ACD5D5DD0CB9A31587E0B0A4133846F9F42CFBD3B98B61859FB36C4D74E64DFFD588C6DDD18378ED0FBB6C41B06387F7BE2D8E76CE80C4C1FCFB659A4FAB9FD58120F036CEA090737C98A8150F6F998751A53FA017ABEA5B1B905D386A1A860C0D73E273E8185310BB49535B0CAE598D0A8B7EDE7C2728CAB144CBCBDE6ECEFF53E642C5C76AE81DE8F85C8D66E151626C7606CE98227C8DEE6878D01CEDFCED5E547B52E8F543FC7E789870136F584839B64C540283E8F150602D786F18E63DF50A9777D9E4466A7FB1E0FF29E21D79389330CEC87CFE5944D4F9E4F02F103049343DD0B378D6B61F140E90F1A6F37FD6CE42D52FDB1D219983E5A6570181868108AFCE66EF8CE6FDD4DF64DE37B3DDCF4074DB39F773EA8CEC0F4BB7D8368EA0CA70C88CCA69EDDE48CECDCA4AF07FAEBEA0FBD1E2073477CAFAF3C3CF71E833DAF4168A2835637B9EFF7148A8731BFB41CB5BCB18981AE5E05C7E71C9FEF9A9EE3738ECF393EE7F8FCD0F97CC685A1867ABFEBC1F89CAC2347F656F5C6F3F2795DA31E8E890514550DA1AC580561B31E029909A9397DC8CB536071D9BDEBFB08A9F4DE6746236F87CDE7BED7D9F42984F231B0E9C7D88F8F2359FD6CD12A83C3C040209E390C1C7D0CC4C2EFB95B7D974C1838747F3BC5A7129FF5E114D471EBE1BA66F77DD63D130A05108B0728D94EC51B4625CF48CB028995F6BB5754E8D02875A046684163B506922E072ADB9C589EDC7DAD1E325FC8BB1F4B34F276D8FEF670F9DCA1B74276E10A141977B0E09CA0AF75A41741752F13A35A3D54C5D5909EFB1AC24F4EC2D12EF47BC6D4F832D4F98FE6469ABAB5308A8518696FA3E26CD2F30EDBAFA6A1EBCA652C391FCDF15D207B0514544276E62C1CDDD2037D4FAE2E8FEFBA3C52FD1C9F271E06383E8F5F3EB7F7F56161C68D99F1498C28FAE0B4DA30A955ED1B039687E5E0BDBEF9F07C33041F4964763AE8CDB3F435C5C02C4412339A2523E8D72FA0B2C60861933EE4FB90F4072D8378E6F348E6AB15BCF83106722FD1727B9118F54FFD04EED5157A7F677DE1B587734EEE23EB7BBFC2F2B48579C660AF1DD53FFF5B5A36AAA9B6D6DBCF6FCB8313E8BD720CB3F36BD055576199CA674F69235CA63E4627595BEBEE5FFE05375F6D1F698ED25CA548F5476BBE1A87016EBE5AA26320D47CB5DDD2381737E0A4F89BCC2DD3C9A4905F3987E5B90956E6AB91E39A72BB6DB0A6E8DBF579C4469F74AD44FC6D489A269199B6EB2FA774D1FE7A229340DA06B1C05D3CCE572B7AF5337A1D6A87750AF7FEE13178DC73F4F5F1C16178F7705EA0CAFDCAFFF6B7B0F7B423F71FFF1179DFFB1EEE7CE7EF90F2C7FF037A2E9D804AA846EFE54FE867761449207EEB493F1D641F8DE6B7DF65CEC9DAD7997FFDBFEFF96E91B489F693FEA069E2A15D1ECFB659A4FA39FB3CF130C0A69E707093AC18D88F7DDE995B8515A70306F538FA79D55067A761CE61DA37067CEDF325F71626544A8C0E5930A1D763C6620DFABC83CC57239C2E916DDBF7A40F9E1CF7BB676DAC30104D7FBB97CF2B7FF523A47EE71F612A4DF58B47CF172C6DC295BFFCF7E0FFF2FBD4F916DA6FDEA1F798D2F78D83F78BFF4CC7F350419672072D37D371EBDFFD25658BFBEF4DDFD7D407E1AB3F67CE393E4F8EBA3C52FD1C9F271E06383E8F5F3E5FABAC0ABA67CA66357F5F18F0E5730DF58C85F915CC8C4D42555E064B7B4B54BE0DE16F896C9BCFBD5CCE36BE0F9BCF23F1B717BEF229BDAF84DD68C7F5FFF0F7D097A6D1D71757EF23EFF19771E37FFD63A8736F83F4899334E3630B50E7A7FBF9DB49A83C7E15597FF31FA0BA73994EBF425D1B14B6A1E1D32F71E94FFE04635D024627D93B3AE3AFFF3DE76FDF479AA3E46B8D543FE76F4F3C0C70FEF6D89487B2A474CF3D5A4D6211DA1FEEA94AC2544565D0E74D57F1FCC6AF99A93481CF0A3C2763DBEB32CA98670D085AA0A913C3D1D705E9C5140CF22AA2F66D889D3E32361B357C1F457F3B911BBFC943DD93FF40CB8ADA1E94FCD377B03C3345C79DD0999934DA6605BA328A19FBDCA876A2E0B1FF80358F1BB20C3ECCBC0CFA7AF1CB1FA1F6F5E73035E06FAF73F6397BEDF278B6CD22D5CFD9E789870136F584831B0E03BBC7F3ACAF637D6393395FCFCA0E6A9F6FF9EEB7EDF1306942BD33DF3049EF3345F68C8D26D6A25506B1C240B4FDED852F7D4AF3F9ECCC22D2FEFEC7D0A49DA5AF0F7498D1F6C94BB43C37BF01C17BBFF77B06EFF36B0C9F8FDA96D0FCE1EBB42C2FEFC01065EF13D93C300EC1BB6F414AC6B2B78BE86BF373ABE82A12527CFE971C9FB380BB78AECB23D5CFF179E26180E3F3C4C74091ECD13ED0640F4932262D5A58F3CA93EE3F20FD760F8A4B06D0DE69477A8E0A2969BD282EEC87C7BD9A507C1EAEBF7D64D004C9F98B109D3C09C9E933303556FBC56B4D2F85E88B8FD1F2D579E8F83CBF7B738B6B5015E430CFB2F619A01737C12415FAE96949CDA39FAF2DCAA2CF97A97BA6AE3EF4E5E772FEF67DA4394ABED648F573FEF6C4C300E76F8F4F0C90FED0D65BE918E4D7425959014D7D0374BCAA7DBD739674C48FCFC9B8F36861CD2B5BE7B7D052378092B2015CBED583A1C15108DB479093AFC2926B2669FDED0769B770EBC92477BB9C6DFD9C7D9E781860534F38B8E130107E9ACEEC420C549562A8A911DA0629467BE5FB7AE774991D2FB68EE23DBD134FE42A63629F93A0D2CF424785A9C925B4C8C7E97171448EA6CE836220DAFEF683E493E3F3A3F91FC7AA2E8F543FC7E789878158D4AB1C9F478E01327789EC41B6383986C5D9054C4FCC32EB7E45FACE39323BDE35CDE2E5AE713C5FA38B199FB35906B1C2C07EF8BC92571395359C2359B7F9203AC38DC7ADDD1DDF6B7747AA3FE5DA0D860348E0FCED9CBF9DF3B7C73F06D2A52378CF328F130BAB78B2782026FE76B6CB80F3B773F6F9516C97B3A1335A18E0ECF3C4C3009B7AC2C10D8781D863204366C7D33C139EA935E0459189B3CFC3C46A60E0F89CABCBE3B92E8F543FC7E789878158D4AB1C9F1F2E06EEC8ECF875811EDF3F23C3F335831C9F8789D5C0C0F1395797C7735D1EA97E8ECF130F03B1A857393E3F5C0C90F1706F758FC574BE1ADB65102B0CEC87CF23591F2E1239F03C5A7D36E1C6E3FA4EE3BBEF3452FDDC7CB5C4C3402CFA31B9FEF3C3C5C061CC5763BB0C628501AEFF9CB3CD42A58F67DB2C52FD9C7D9E781860534F38B8E130107B0C90F1EDB15E4F86ED32881506387F3B5797C7EB7FCCB67E8ECF130F03B1A857393E3F5C0C54C9ECC81419912D31E3FD3C0DE48AF1A8612D5A65102B0C70FE76CED71AAF7E36B6F573FEF6C4C3402CFC9E9CBFFDF031B0B0B448AF0F1F6D3DD12A83586180F3B773B659A8F4F16C9B45AA9FB3CF130F036CEA0907371C06E20B036CEB895619C40A039CBF9DABCB8FE27FBC1FFD1C9F271E066251AF727C1EBF18605B4FB4CA205618E0FCED9CAF359EFD6C9CBF9DC300E76FE730C0E67F78502E8895CEFDE8E7FCED9C6D162A7DBCB6CBF7A39FB3CF130F036CEA0907371C06E20B036CEB895619C40A039CBF3DF4375C702DD0F2ECBC1BA64601253FD811CFAA1CC09AC7C35C175FCE82AEBA08B6AE6E3F9DD3130BD0378A30D2DE42C5DBA4AF698472981BCA60E9D142CBABC74045253636B718FDD21B79589930C40C3747E53FE6F89CC300C7E71C06D8D6938C7C9E4CFEF601A91C7336037DDD49F1B1F4D479ACAEBA9978865E3332FEE3FF89296D2F93BEFA93140CDE4B419FA01B133D12E67955E47AE16D14FEFA05CC8E68303BEB865E2841CD6BCF3371ECBA11D4BF7F0C83D57C54BCF12EBA2E1C07E17EEFB33BAEDF08FACE13A3F3700E2A93C6CFB61FFD9CBF3DF130100BBF27E76F8F5F0CB0AD275A65102B0C70FEF6D06D22B2EF5FF3E96FA8EBDBEF326A9B41EB67EF33F18A9E790D8BE3C3B43CA63561756D15BC63D7A12FB88E152A4ED3479FC26BD3577E7C051B2E138CC2563F3D0D1FBE471F5DCE25F4979441915B8CBC9FFC10AE61F58E772E7AF245CAC61760B0AE813E7A65E9AD22F45DFDECC06510983E5EDBE5FBD1CFD9E789870136F584831B0E03F18501B6F544AB0C628501CEDFBEF737D4C8F43096A5D172CD3BEF83FFE979CC197B61528F63303B8549B3E87900555606C3E7E4BAE84A2116CD3DF47D2F9F2F2F6EB7B5D636B779DECBE7CBEB94FCCE5B20FC6F1F9E81E0DD5777BC33EFD5DF057D677DDF3834B74F27CD7FBC1FFD1C9F271E066251AF727C1EBF18605B4FB4CA205618E0F87CEF6F38EF7E80A6B75FC394D383C2C7FE067D4D4AF4DF388DB6B462ACCEDAFCBFE7F9EBA87EFF344CE57731EB5C84BC5C0C7B43117DCFCBE75E3DA20B19B03495D07C6E550CD0B676F92B1FA03FFB2674945CF1E22BE8A16C757343359326149F6BD3CF26CD7FCCF1395797737CCE61806D3DC9C8E7C9D47FEE954B9E7E09926FAE60D666C48CFB3EF84FFD57F4E615EC4833D06DC5D53FFF0B0C16DF46FE2F9E86AA4A00DD435BBDF2A3CB5875EA99344BAB9B50553422F75FFE014E8396BE3E3EB50CDE33BF02E93327FA17DD9B702FCD3369AA5F7933E83B0FF6DAA1BE733A69FACDB8FE73AEEF94EB3FE730C0B61EAEFF3CF1ED73126A4FA4627EA885392F79F209E805821D69DC94FCCD9FFF0DA49FBC09D788095A9989F6BD937B81F6B9370DB1CF473423304B4430B577A2F6C31318ACAD848EFACEFDE53C4C6A7B99349C7DBE7FFD9C7D9E781860534F38B8E130105F18605B4FB4CA205618E0FCEDE17D4359660DC6A595CC79F6532FC1D9D5E2976661D1036B7727327EF02C7A2E9EC070AF121A812A2C3EF7CA833D23E8BFF125540D72D83B0570D9A6B1E6713369383EDFBF7E8ECF130F031C9F273706D8D6938C7C2EA76C7AF27C12689F701039D4BD70D3B816160F94FEA0F17CF577944931907F9D39CF79E65DCC183AFDD2CC2FAF627A7A0615BFFF1ADAFC1B5055D642CE9743937399BE5FFEC1052C8E0D30690CDD5AA87935C8FFE92F213A770506713DBA720A316931C23E3281BAB7DEC4D4E804D54E5864D214FDFA79183BBBA16FEFA08F5EB9258787CEAF7E7FE032084C1FAD32380C0C34084507C200DBF88E547FAC741E250CB0A9271CDC7018882F0CB0AD275A65102B0C74F52A22E6F364B4CFFB1A55F4F871EF79FE4B1F63C5D11F343D19DF6EA9CCA4E5BEC67EC8534EC0D2D185C2173EC6443B6F471AAF7D3E6119A56DFADE2A29BA2F9F80A94B8E9EDBE9D8D8DC60D28C74F761C1358759A78B3E7AE5718B13A39DD2A4699773F639679B71F6398701B6F524A37D9E8C7C6ED53860A8CC65CE5BEEE6C3A5EB0B9A5EFC75068C1559B4BCB6BEC5DC73EF929FFA0F3F82EFBA733D053C2C8EDBB8FF9865FD1C9F271E066251AF1E353E2FA91B41598D11C5E972881593B8F04D0B0A794698B463098701B6F544EB3F8C1506B8F1EDDCD8E6A338AE753FFAB9F1ED898781588C333E6AE3DBCBCA74681B7021375B0171B301A5A56AA86C4B6817E9120E036CEB89D67F182B0C8433BE7DDABD058D4A1994E7C933D86A8384DB263BA8CEFDB489D8CE5BA4FA63A533307DBCB6CBF7A39FB3CF130F036CEA0907374701030BEBDFA257310AADDA896ED50CF5FE7674758E242406D8D613ADFF305618F0C5AA796C06F661CB8E7B15D57C4CCDAF6063DD1312DF6C639DE373AE2EE7F89CC300C7E7FBC38042E5A4B99C1C1315036CEB89D67F182B0CF862B5A2BA1A53AEB91DF76A456DA86E9062C3EDA4CFFF7FF6DEB4ADB1234D13BEFFC1FC83F901EF97BAE69AEBED9E79A7A7A7AA97EAAEEA5ABACBB5B8DA4BD965BBECAAB233BDA5D3B9A733D3CE85DC5720D9778100B10A49881D848440685F9184844002B12709B978F23D71488923210949484290F121AE13E79C88F3C4729FB8E37962A3F6F6ECB2B1BCAAB6D644E5537BFBC1C34026EC9EFBCDDE4EDCC0F024DAC5D6A023F7071103A99693AEFF305318E0DADB4B6A1A2011B747E47AAEA3FA7976F5C95229333C7EB6F6CB93914FF5F383878154CA890737FB0103441F178A6DAC6E5E5B6F64AFE49E3C3F681848B59C74FD8799C2009DDF4EDBF2FDF81F27239FF2F9C1C34026DAD5FDC6E75CBF58EA38D01848B59C74FD8799C200E573DA96EFC7FF3819F994CF0F1E0632D1AE523E8F5E075EFF33A86A2AA0AEABC1EACA02CC3225ECC3E33035F16018904355D784E93159DA30906AACA5EB3FCC1406E87A353A76BA1FC7CD92914FC7CF0F1E0632318EB91FC7CF897F6DE3093A44E3EC355D18985BD9803CF721C65B5BA1AC2C866E508F45871A130CAFABFBB5417FBA30906AACA5EB3FCC1406E8792C54378B153F9B75B344E553FDFCE061209572E2C1CD7EC2C0FAD3E7108944EC95DCFB6757B030E385D7398D19BD062EAD0556993CE47C884431A035CCE3E2D17BB874A112978EDFC3E58B4DC82DE8C0CD4B15B8F45D236E5EAB416E6E2BAA3A27502375B02E1E7FE0BEB0DE18537EAAB196AEFF305318A0F676DA96EFD7B63C51F994CF0F1E06289FC7F607D24EEE2D03038C1BDCF40F0E402F1D82E4EB63BBC28058EA80E0C58BB4B90BDD8E98F2538DB55791CFA9BD3DBB6C2CAFAAAD3551F9D4DE7EF0309009BBE77EB5B773D34EEE75D27E58BA3BE15F7C0CADB0096E8D054345E5708FF4478DEFF16D3A9206BD3952D9D8D2CEE7913010480BB9527BFBDEDADB5D4B4F91775F8E8A4A35BA7A6C282C5121E7CE302ACA4643C251FD9CEA66543FA718A0FA79E218586778FC0993EE67D76EB057729FAC7CAFEF09EEDEED63CB8138D24708F873AE35B2BCDBC0B83F3E28C499E6667C5C59852F84FDF8E2DEB7383F328672BB3E84A33F2CA9C21991084704ADF824BF0427DBF9F86B45234EF2CB906BD6E193E2020E9F1B5939E48C3BAE7C91A413B5B5BEE05842BAEBE320EBE7BBE573DBC253F4B7E951CDD3E2D2AD6158CD3E88079C282C1DA37C4EDB72CAE7140394CFE3C040BFD20BA988D1B1E56E981C8BA81198D1D5698D2A53D3D6054B57177472338C2D3CA88AEEC5255F2E7F02C7E412BCFE17B0BA973034200D9EF928963A4278FA787D156ECD2CE3B8408233820A7CDBD38E72B73B84CF3F17B4E370E103F0D6D6F0ABE35751E5B7E167E7F321F09B70DF62C145D900AA5757B6D9DB55060716FC5E366D26CB73AC6F3C61AF94CF77C7E7A9B0B72B757318D7CC40AD76A3596C67F73072BBFCD4DE4E6DADD4DE4E3140EDED3B6060746A0365E5636868B3A157E140F18341B4F5D850D7E3C5826B0A8F3A44782C966023E72A7B25F7A3BC3AB827A6A11954415D721B7A49FB8EF2F5E62D7BFB90FC19868D5ED496DCC1A3C78F5E968D2DA89F5FE81B46B9D7855B1A13F23D1E5C1BEE43E9E21A4A5CA136F96BCCFB5C9306B92E2F788BB3B8A450E1BED58A1226EE85EE41C675B3DF09B7B7B7770DA0B1B1964D1B4913794EAED4DEBEB7F6F680DFEB5F0FEE6344FCB1FA243B7D2BDD7DB264E2EF360ED5CDA87E4E3140F5F348185865AE6D9D931008B4282E18876C6C06B9C563A8281F6774E7AD729173E6C32D2FAFC335A2C0FCFC22969756E033EAE3926F323F8146BB39077EDCEC8354D8C8F80367796CE9E717756E141987F0195F80532D229CEC10E2BCA81367BAC428999AC23951F3B6F1F1F2950DF6F9C91E393EE5D5E358791E6E3B26513565DDA69FF78FA8312C1B62D3E69D7DCEA68B5CC9BD9DE9678C373440C5F4592607DA535E1F07593F4F059F13FE265808F03971E419E573DA96533EA718A07C1E3F0648BB69B62D468CCF9DDFDE5CCB8359248251DC090BF39C38AE7FA4B038A20CC29BE5157DA8ADDF1CBF6E686AD9367ECEEADDEEC7E0B94751B4FA141F9D3B8D0A26EE6FBEFA0A3CC2DB6E376B478F34E72DF0FC93A6215CEB11E0A8801FB4D173C7CF8BAAEA5153558E7B79A5A8E5B5412EF705F9DCE17CCCCED957DE3997547D38B493D03436C1D63788A5792F73ED83412864DFFB9C93D031FD8D25DF0CBCAE19F8DD33D0F70C6261D29E35188884D570972E7BBB7B6639C8E13575FAA09F38F22E108EDADBA9AD95DADB2906A8BD3D3A065C334BC13357B4466F68988D271032FCFDE8E57E32DCB9EE3695019ABA2A869F3C90979762BC498AFCD73E81774C1C222360D7266908F8555A1DA76CB66CE9473B7A71BEAD16677B14B86734E04C472BCE4AA528F2FA70BCB1115F307A3B7F793A84CBAFA8B4ECF3EB234338D121C5D7B51528999D43A155BFCDDE3E38B1023913AE55DA8596D68160FA485A9DA2014C5CBE0CDBD973982BBA1B1C6360AF9CFCDCAD3722BF7302050CD7041CB9BF9B37047E7E1E726E56E3F28739B853D981A6D22698470C90DDCB8134F7217A6E1740F6301FBA061E461B259831A8B20203D9626FDFFC9623248E70C003418B85E94BAAC1135A7021A70F17CEF641DA6B467EBE1CD58D164C3B7DBB92994C9F2899F8BB8DB35F75336E1D8E58E676ACB75869A6FAF9FEC4C06E65C68B8154CA890737D98601AE7D93F8B9E39664EEB79CB39F4CC85AF4A11158077A59BFB6AD152EA506FC2337E01B116E9341E69D2D2E2DB17E07D37F68E4F3B0F164F965D96CD9DBEF7B565160D5B263E3F1AE470BD8DB732C5E1C6B6E8A696F6F1B73C3A81F41457D0BB4E34A365D81BC3DE1E42DBC9CC83BB63C98F0A724669C65BE4BDC572BCFF0B6C888B73A2CF8F07E17DE3B751D27F41A9C958870D6EEC6D777F26153CA6166FA0FBA5E1914641FBCBA3A384786A1AC29C1BCCB91151888D5C671DD5EF07955D538D4EE3534315CF0E5D7ADB896370A5E8D1A172E74A286B97AD75FA0A57E7C57329329C36CFB8FB3B92DE7D661355FB363BD513E3F7818A07C9E5E0C848F57E65C9385CC4562F9EBD9F7F05A27827675EBB51BDB6CEC5C7FFFCBF7E1CF898DBEA5A539E67A35E2CE31F785EEC984D798137B3BB1D5B3D718F6F6F0F56A64EF3B7225F79697630591CA7084C9171B8709CFE573E2FE2873E24FFA45BCD3AAC6BD5BE5B83F2C639FCB0E1F66AF0516DF667FE6008F9FA7723F19A1700C8FD6D682F75AEB225AC566F0EB34E81F72E24E9E1225050A98AC7328AB1C475D831EF3F34BBB92196F386A6B4DCED6CAAD439B6B61C77AA3F6F68387016A6FCF2C060897478BFF583E12B43D07ECD09E312BB4CD0DF04C38A062B87A38B704C6F6861D31D02DD7A1BAB2004B3E5B506E607EFBF9CE2EDCD26899FBE7717379D0DE3EAE625D2C7B7BDB980BE3B20E3C2C2DDE561E248F5C1B3BD7BF66B606F3F3DBA231BCC37C93B87FBE21C77FFF4488BF7DB71E3FBE25C3A1B76FE0AD162D547FF8035E00F8523A018F6F755B1D0C2BA7B7D945A2F949D84CB603C9D8DB53CBE7ED217CCE7DD7333011F40F0C4FA64C663265181EDFEC5A825CE6807CD48399F955B433F5A7D74DC79439247706FD0A8D174B8BAB29A9C354B7ABD6A9D560DE5CDE851DF3162B9FF1D41BE5F3ECC300373EE5F303C2E7B575419E5315F1F0E8F13C169796A1EDE985F4C225183BDA76C440738F023C86CF57E6A7837203DC9CEF994591C3820B830A54FBBD51399CAC572BF27870CF6462D7A57D37AC84E0E91A7B6D60AE39F2E188FBC391F173FF8402E29EEE6DE53131AA83D73909A75A03BFCB81C5C59588E541F8B5B9D502DEFD16145CA8454D5E279A79432CFF8E5CAB86F8CD932C9713A733CD46AC834F0AB7FA04BF28D7E2B52A0D7E74BE07AF556AF0C333DDF84DA52AF8FE4F5D768C99E7B29ACF536B6F8F6C0325E5DB223441AE9C611DC10DB9A6426632368EF0F8F9050A54D45AA0334EE1FEDD41763F9C8AD649A6DF3ABB2D8EC1B98AAA1A2D6CBE4718954DB2FE49A71F0AA527253696DDE633DC5F50341ACCDB9D9BBD31F3C6F5F78CCF05F3E9D07A827DD49DEA2D569AA9BD9DDADBA9BD3D3606883D582452EF28D3C719639E762EC0246A837D5405F3603F46F3AA60EE6CDBD1DEDEC6B8F3E7CE43CC707FB8BDFDEB063ECAE7FCB863732247A140C3C64A443E27FBC97CD32E606DEC474BF2D9FD647E95538A2AC708EE198C21F3E0B9F6F61B0535E0D554E0D2D56BAC9D9DCC0D30335792D68E3317D173FE2C06ABDA60A8C9C7486959C4710592971E51072AEEDC01AFB402C5DF9E43D9CD5BAC0CDBA1C3412E278E3BAE10B0F7B336FB3A39AE7FFF9CB5C7BF31BA88DFE6F6E2EBB52778BDD58A43A669FCBE5E1362D32F7CF60406E34C46DA81BD1F3FDFFAD6F2DA734C8D2BD15A3508618B0A15F784A82B57A0F09B723454F4B0FC40B8211BF8BC84E98B35B71870F9AA9CC19699DDAFF6F68351AC2C2E458C3335B38A5B856A2CCC2CB27E419F07AA7E6B4AEA30D5ED6A798D2198B756A161C7BC05FCCB9C7CF6741843EC4FD1D6D3EC9466CAE794CF299FC7C3E7A2E0F3698B0B731E2F66DD1E2C7A5CB00D8DC1A91C0E990F9788FCD0F9708B30E8B7E6C188A55BF3E13EAB6DC0B79DEDF85ACAB4D91A7954FD9CEC23F7E1EDAB383BEEC685967A9CEE68C4CF4EDE40896508874BABF1C1BD3B7868336C9B0F376E9F854EAF06AF4504CFA43D643EDC505115066F5E8576C489196537744CDF22527E489CA5A535A62FD38A718902F2BB37D93DEDC93B326FEEC99B6F06F93C521D90F857C5E6209FBF269DC13F9DEBC45F18FDE5A77786F046B316EF888C217CDE62F1616D7D3D23EDC05E8F9FCF84D9406BCF3D40439D0AA5C71FE0D27B57517BF63AEEBFCFB8C36783E312647FC3DDC88C375CBCB6569DC917F35B46EB3C9BEEFC82B1601E883FD2D84A36D95AC9D8D1B8CE13771C929F48F90CF8B9F62B6A6FA7F6766A6F4FA5BDBD33E8D775F7C2DCCBE89B132B989E50A0EF6225D4750F42D6AB258B8195C74F2091F630FE95977233771E4BC0DEAE7779E17325368E17921F932538C6CE1D67277BE99177CFDE7A9BE5F32B7C3D4E77395877A27322E8FF43A331684F0FDAD58B54C1B56FDC7570659DF68C6180B83DB3B7DB1C78A25405D71910FF9AC581B1EA724CD9DCD0497AF0F0700EBCEA61F4D774837FE23CD6167C29E9FB26D3278A169FF014C134D13F779249C246F2C7233F993E5D327102FEC0FC5932E6B153DE769BCF5869A6FA39D5CFA97EBE3306C83E7001FF98A01DAEB11118C6DCF08D0FC0A335A0E7D61D48AACB62EE2713CDCFB5B717F23B70F6C861C62FDE666F3F5CCDC72DA50C1F57D6A1C86347D5ECEC8E7C1D389BE52F0579F886B992F35BBE6AEE449156BACDDE7EFE7E15AA4B7371F8C465F08AEF86D8DB63E581849109DB591B3DF91699EFAEE657435E5E87D1AA2A9899BC103E7A5ADFC8BE2361467FF08310BBFA9FEDAB78833F86FFEC9FC23B3D13F859D1287E7CB51FBF6F36E28D7613FEE9CA00FACCA17AF85EB4037B6A6FF72F06CF01227EEE3B624711496C9BFE67DFB37E724D453925538691E28BA5A1731A63D99443F2C3F1A7A20ED3D1AE06F246F89C5CC3F7EE4B653E299F672706D2510794CF5388018683B8E7A8B17E462F8A2693B54F332E51F95C7B3B7166BB9D53365BF676327E9E6BB3B1E7B11C292EC43941ED8E7C1E389B858C997FAB34B0E7B77C2554B0FBCC45B2B79B8C3A740E2AB0B6BA18626F8F950736CCDA1A7B25F7A4BCCC9D42B8A696A1BC7519A6FE81609C807E49C272EDEA27D69EE01DE9047EDF3B8D77BBAC7847E2C0BF9528F0FB7A357EDD64C69F9977243DFB91CF53616F5FB74E6C966B41D1E6B805E37C235AF45EBA01556323C62A1E4228DCDCABF7D1FAC6A67F7DF31BCBAB2BC139F15CFF4E32E34D5BC01FCBD6CA5D97108F4D99A431981FAE9FC9139B870879DB2B5B6B202FC4E53E1C8DB8775F549949E493DADBA9BD9DDADB538781E1721E2606FBA0A86DC0F4D42C16262D29C380546140DEDDCB5859597859365BF6F602AF1F0576337B1E8BE0C5D3B8ECE981B3596EE82DB8A356B2E7B7DC339B8273E922D9DB85C33A782C9AE4F363B260E3C489A05B3F7E1CEA8F3E87EE933F43FAD1C7505517B1E1B8F3D87FDB6CC56BC54AFC5BEE185EAFD7E2A777E4F8E1F97EFCA2680CFF766300670B955981816C98DFDEA77D0183F2057BC6C0D0B57C18E54AA88BEFB3F611B6AFC4EAE79D41FD5C64F6B27D21E237799760F62DA7A58F1CAF6E46B86EC73E2EABAB7646F693FCBCEC3B72F3960DBA593C79DB6D3E63A599EAE77B8F01AA9F476EEFF61C0351F473159F0FB7D1CCEEFBB6B6FE14533A3DDB774E567EB87E2EE9EAE194CD967E7E52D2C3DADB4F7576E3867A3CEAFC76EE9E70577A2538D9DE840BBD329C6CE2A3D069C5D1FABA90F1F34019F4EAA731EBB140D03D86E51953D2FAB941D0015BA7181EBD16EAB6362899FE8F69D48C558F09CD3FFF39D425B9DBF473626FFF438B06EF283CF88B6E06BFAA54E3DD111FFE3262C7078376FCCBCD219687F6A37E9E6A3E9F5D67FC2B2FB0E05F63C73C56FDB398B1DA43E404FCD7BA1C6CF91EB52FB2730EBE5E5C675DCB68F26BA232C1E7E1E546FCC4867D7A6C86CD0FB972F3A6B62D66455B1E4FDE769B4FCAE794CF299FEF0E0362CEF8F9ACC78F19B3018B730B98B679E0336A5077E5724263E6D1C6CF1BDAA5B87BFB5AC4FDE18E0B1AD833CDA39DBB12694FB84F6F5E81E0B91F3FFDAE903DFFBC30ECDC9648E7B1F05BC510B60A42C6CFEBAE55C73D7ECE63FA3EF25B17F178650E8AB61EF45CB984699D860DAB60DE8D305712963B7E4EDC474A0FDE56CCE1833E2BE39FC587EE4738E1F6E037623B3EEAB1EC5B3E1F62747AF27DE2881D20923FD63BAE5FC2E084F4FDC2DF91B909A687855897485947ECF2E44A6C1F81F225FE2F66D7716A6D9D9D7F18AFCC78C3F91616439ECFCDFA31CFF8FD33B35BE198B4B7B428627E6BC5600A8E2DAC0E0D07FDA29CFA90750D243F9F3A1759FF039125447EBC694E269FDCBCF93C335BF1E3C85BB47CAE0D2BD83A247EC9E9E298F98C95E6F03AD84D9E499BB05B0C64AA3E22C9CF94CCF0F8A9AC8364E2C7929F4A39F1E0265B3140D2184B26370F83550DD0335CA896196091B540F0D7EFD09B73346E0C149756C1AEEA7BF95D53907BAF6A0CC819EC61F7798B774FB88AD9299C168B7146D28B12B7195F37B6E158932064BD5A407EAF791EA3F26E9CBD5B03A3BC3D24AD241DC4C5539E06D91894058598E3D5C251940F4DFE432CB7B5B36E51AB0F86BB5CA70BCE693F54ADC307977AF1F64519FE7C578E378F89F0EBA35DF8EDC7CD78EB68076E548EEF3906881B189627CCE7A9D4CF49DFAF5FEE4677A78D5D87A6B7CDA1B6D98AEE6B756CFA083FAC340AD8F5948F5AC4F865B916BFA954B25CF02F77C6F08F376578BF59CD9679AAFBC8447EC0BFC43C9795F0A12A7C88C519CF962DE7E5DACF4038EFCA53F62C92EEBE4968C6DD906BE75077A61AA3CACD3576CF4E9FC1D2C2129B9FF62FF3F1A17E8EDD6390E4E76FBFE8C23F5DE8C4170E3F6B7BE0CA4FA72EC0CD9B7F6A32F83C3C6FDC38817C76481CF0CEF8512B9E44F385DA603E83F536C5E493E1F3C3EED560BD85E793EAE7543FA7FA79F218085F7F1E4926370F86BE7ED88764308D4FC33DDA03B3B0078AC27B4C9C2711E373EDEDCB4F5E80575D81659FF5E577B7ECED656BCFC19B73A36E6323EEF568F7DC7E7CD3D1868B3D5D285D5DC54986CB4FB5B7858C9F07CA809CC7B2E81C45E390158B764588BD9DA4833872CE1C09AF75AEA1B5C5886EE904A69636505FAF63DBABB5B50D4C68EC981AD3B0F6766BFF00EC833DBBAE83BDC640A47A0E7799E07362E3A8A854A3B9C3898151178A1F6CEEB5D678A10EBE093BFCFC0EC85FFF0D565716B0D4D18D1FBCD78EBF3BD2813FF55AF0CB02155EE36BF1418F25ED7CBECC3C9F32DAB1323787F9494FD4322CE711BD7A09F58D06F04513E86CD541F26D09AAF99B670CBA3EF91A8A82BBACBFEA5831FEF7A93EFCEF13121C75CEE2C75765F88FB2511CB6F832CAE7DCBCF9EC9321F1A3D57565ED663E8BF235A817EA90CB6774F3DADA603E49BDF5BEFF2E5B6F4D0C9FFFACDC10ACB7F07C523EA77C4EF97C777CAEA8E545B5971337C2396B6528AF04167107348C7E6468116CBE2FAF85BAA67257E7B19C950CE0E1A405471A5A705F1F5B470FB82FABAB709BE1F46F9BAAF0697D238ED6D6A0E2E90B7CD3D2B0CDDECE95BF791E8B9C5D3F43E6E43D2C5405F99CAC33229C3232B10249C3388AEBF4A8A91E65CF846A17E8A0574C4271F32C369E6CC03C38006327D169D7D2FA1F66339FA7723F19829B6686F71A051A14E429D12B9FC4832225CA3F2FC2FCE2E67A36FDB1A36C1C4F6E31FE85E182DF09F4F8CC368BFF6074F577651E7CD867C129E9F675FBA99CDFBECC3CEFBA5508D191C32C4785CC29E4CC7FD53857D026D032F9D133FD58255A3BEDC83B5C0841839A8DF3F8E429A8EA6A31BFB281E2B7BFC13B5D4EFCAE418F63FE15FCE4CE08DEED77E0B06186DD8B2053739BB9795B5EF487C4974599DB1BC8E7C3322D86060CB892A746E3A9B2603E49BD8D7DF257D65FF5D14DBCAF9C09D65B783EE9FC763ABF9DCE6F4F3D06C83924E17BA690BDDCC7DB24700C0D402DEC84412A85433E143706E4A629F0AB0AB1B238FFB26CB6CE6339D6D088AB234A542D2FC4AD9F5F559971A6BB131FE71522D762C487F7EEE14863332ADCA66DF3DBC9792C5AB9181D8372B8272C216925E9A8B8C6878C2F86553381B6CA16147C701977DFFD125ADD34AEDFE84769AD1E531333D00EE8319C770FF3D36E5806BAA128AD61BEF338ADFFE1AB32BFDDC2F916993765B0F8593FB1D706ECED81F36BC9F57F7DDD8BCF756EFC59E7C5BF9CE9C72F8B46F1E1C864DAF5F315E6B95AD006BDB8178B2E5348B82751CA83E485E4897B362FB1B707FC645CF997F746F1E5C2237C39318BBFF94884D72BC770D89A59FD9C9B37BF4317123F5ADEC2F3C90D1BA8AB40BD917CFEAE6332586FE1F98C9566AA9F53FD9CEAE7496280ECD9F5F23F7C1258174CE6BF3734303AC91A2C8C6E3AC26F82B54B12F35BC4A6BDB8B2CAFA179878221159B3B2FAB26CB6ECED645CFCBE660C171563E06FAC302E3EBB7B816B12956B4F7156D48112DF2C7BAD5B59D8666FEF189FC6AC73140D9D43589EF5B0E9226B9E485A493A240C875BFAFBE0703EC6D4F800E4B93590E75D65E2479F039FA9FF305318C8067BFBD677B7F65A0BF0F9BCA0038A8F4F62B44680F177DFC40F3F13E31F2E0DE163A503FF5EAAC15B4C7DBFDF654E3B9F93E7B39E059898742D31FDBA35DF5CF05F216B4502FF4A203EC943608DFA6CBD30F80DD5675F43CF2B854B3B8EBBFFEF6BF83593871F9FEFC597937EFCEB2D05DEEAB4E163F55446F99C9BB779B783DDDB273C6FA46D88149F9B4F2E9F937AEB3DFF251CBD3DB8F9ABEFF0BB264BB0DEC2F349F99CF239E5F3F462C0CCC9836D54037B7F0F9C632AF87CCB98663838567C62CFAFC97DC096430DF35F1717E4469DDF4EC6CEC9FCF44B1A535CFBC9F098EF7F59518BE30D02089E2FE308BF8DBD06C6E0B9F6F6DA163184EDCDB85B500E415D353BBF7DF2A5AD98B44313233A2CCFF9E0B27AB1B6B0B997B6CB6867B8DF1B921FBD792EE1F2A47C9E189F8BA5A17BAD59EA37F97C8D793FF0FE37E83D7712B65B25F8F1E521BCDEA8C75FC7DD78BDCD86B7181E7F5764C8C87CB891E2067430FAB56F7420629C35C68D33781C6AEA427DA3056DF5FD9BFD4606F381704626FE40CE45CC4FD950F8F7BFC39B423BFE93C9CF97AE39FC7BA50E6F49ACF8F3882BE3F3E102799B56F484C40FA4219037A7720C4E595FF01FE2D619C967601F39526F92AF3F85BD4788FB0C9FBF279F0ED65B783E299F533EA77C9E5E0CC4D36647E573460F36BFDC4782B8FA2601D6D6565E7E774B3F3F23ED63CF63B9D0D70B3EE1EAE5E51DF9FC9B11A61DB46970B255847392367CD335C05EF32DFA6DFAF980D10B9D56017E9B041316239B2ECB4B1B60206D644C81AB5744CA4F5EC168C2E57990F97CB7E3E7D3332B3089F918ABADC3789310F99F5F0EF279CE3559D02FB9F6004B3D322C4B37E773AC2BC7B6AD570BF8D33D7EEE639E1B45BDF06A46B1BCF208AB33BEA00E2BF8C58FA03C7412CB5DDDC87FFB2878F9123CBCD58B8BC7CA42F65A2379985119E07C999FC682AE6DEBB802FE4C8E9F73F3B6B8B412DCBBEFC9CB74AEB6333860CABEFDEC35C8AA79182B7C88BA9BD568C8ADDD5667817A5B64F21958CFD9C4F07CAC7CD2F1733A7E4EC7CFD38B8168798837BE9113BFB3B79BF3DDCC9EC7323A36849CFC228C8F0C07D31592D60E113B7727567E8E9F94869CE9A5D078211FF5C06C9C817172919D53E7995A48691D64F3F87979BD2CE40C9948FE68EF02FB87580718AEE00920397E044E858A23D311517EC0FF21870BC8393701FFB709EAE7B7F9FA1DF340D646873F1747D8B7E6F2891BB87F5A0315AF02F51F1E8257AFC6847E06ED35E2A8E549FCE4EC57B2170E493FB972F3562E8D5F3FE74912AB8348F511AD9C4A6BBAD1D2B4A99F4B6E55A3EFCE2D34FEE1750CD7B761D539BAADCE92C967B84CEE3DD5CFA97E4EF5F3DD61805DCF96979BF47E32C439145B3AAD4CB9E527672ADE67DA5EE2EE313A55C01F7E9FA83F707FB648152C8351AB17AB0BD318D1D9E09DF1B0F922FBE404E6DB933185F53AFEE6BE17D2AD79F8224657110A0D417DE3E4E96EF64ADA25B3FF3944F52A94948CA16F6C16FCAA11767D5571C5784AEB20531848543F27368E5ACE3E789FB916F1B163191FF4D999EB127BFDEBE42A3E61FA3AAF0B6DF8CAB3C88609B4DF644F30B2F79EBE55084D732BA4A74FC1D9DFB5853B9199E3170565123FB912FE21E7C3933365896DB762769975C49F08BE4F49CC2FD3BFC45CBFC79BDD4E1C712D04AF64FEF53BB2291C6278391026C047641FA0C0FE89E45B85DF5E8496C98BA1BD05C6F6A6AD3D4D99BC04F6340DC90FC7DF67F5B3F921576EDEE2ADC3F07D0913CD53A03E22EDBD1ABEFEDC35E183BABE01DABA2AB84D1358F3BB53924FCAE794CF299FA797CF77B3DF6BAC3A58587A0CA76C0006693FA60C26D69F290C907C99C3D6DD47B2B787E7FFE4E9EEA00E42F6262D2950A2B9C58CBBB707D0D06641CE9D611417295E393EFFD0FA081FF5E8F17B811E279977BFE7ABD9EB87F6C7EC3E789FCE3EC611CF127E5DA1C1D9A71B41BE110C1BD87A20FDBE16A67F153C4F853DBFA38BE36FDFF4B3E7B1B407CFF2A8AE6E0FC621E1A7A6E783FF765CF60E266E80CF5F6FB5E05DB51F876566FC69729DBD9EDC78863FCA9C38B6F13D3E6538878439EADDEA931430CF8C4C7A026B33876BAA43F6150CA493CD4B48DEDA23E68DCD4F84BCC5656361E2E5884D5BE7003D4F3C4F4DC3C6607D84AF3B1DACDABE2695E4B383C973AAF249EDEDD4DE4EEDEDFB17037D7C09A6FA9BB1B0B80C535F6F463190ACBD3DD1B239C8F6F6BBF59BE7B9FFEDA722FC2477143F3AD389FFF19594DDF38B5CFFF1FA207E5BAEC0FF3CDD8FBF39DC815F15CAF0B39BFD6C1CB27737911B4D46241B7BBCFE44FA47FF7A43865F375BF10FC745F887CBFDF81F9F76E09FAFF4B2D77FBDDA8B1F9EEFC24FF3C6F077C73BD9303FCED94CFF575DB1CF0E8D95B644F3136F9FEC64BD21780ED0DF5F1D4D284FE1F5115E4ED1FAE5A9CC67B84CEE3DD5CFA97E4EF5F3ECC500D1CFF5C236A81B9A61EAE98143D69F510C84CF8723EB8EC2CFDE0EF793B1F344CBE6A0EAE7B1F0BDDB7F25FC3E9D7C9EAEB67C2FF87C2FFE63CAE7D9F51F533EA77CFE2A6280CBE7BA0ED29F18844EDC0D975A03AFD590B2741E643E4FE5FE70E13650EE7DA2FE7865C61B2E195B6BACB4259A9F6CB6B3A5329FD4DEBE7F6DADE99249EDED14033B62606D8D1DF70CDCABF875989F5F606DFE0E930BF6819E94A5F320DBDBA97E4EF573AA9F6757BF7C2F30904E99F162209572E2C10DC540F66080CC736B519883F70E9501D65E29BB4F0ED91FCB6B31A62C9D07593FDF2D9F8BA50E765D613A1CF9763AEA3056FCF76EC8D29217F2DDDD602015B8E39601593B92E97C523EA76D39E5738A8170F9648D0C599B43E6F3923940E92E9B83CCE7BBB5B7A7730F02F2EDDDA42D195B2BE1A474EEA590489AD3696723EB41339D4F6A6FA7B6566A6FA71808974FF6CFE0EE4F95EEB2A1F6F6D8FA39BB77EFDA1A7B257BF556AC6CA0DAEFC33D830B0D2FD650E2F36D3EF7CDB261BEEDEB62AFF71D1EF66CDC52E639EFE90B9C63FEB55CE3D6D97CE4DBE9E893C58A1FE0736E7E0A5C3E089E6F30F931B379AB59F031695E62DE6FE0E1CC2CF2CC1A36EC3D9399DD1B91E4B37896E96F32F9299F7184EC7598C97E60787C6E19903D1EB6E5D3E966D39FCBE4B394A9336E3EC9190B3747FAB6D55B22F9A4FA39D5CDA87E4E31102EFF6E9315C7175671C4B7CEF0B935ED657310F4F39C6B37D8F7E1EE6161F1AED22C966EB6E3B92E2FD39677E3FA703FF2A617704ED28EB38D22D4BD60EAA94188A35565A85B5DC091961E7CFCE0268A1C165C1CD6E038BF1E251E271E3AEDC819D7E3D6A86CCFF99C9C1778A16F98CD4F85D7CDA6EBBBDE6E5CE9EEC283C9057C5A55819C1E214A165771B8A8049F3ECC47D58BA738C5EF60FA241D6C3E497ECEF60CA260C298B57C1E9E4F92DE2BBDBDB8A952E2AA4A1FCC27FFC5737C5254858F997CF21667B7D55BBCF9A47C4EDB72CAE71403E1F2AF9518F01F55E3F8A0C7C2F0B93DED65B35FF8BCB6BE312267071CF71B3BE13B513E4FC4D5ACAEC4158E7C3B1D75B8139FA7233FD9C8E799CE27E573DA96533EA71808974FF6AA26B6F6AF66897E6E4B7BD9EC173EA7E3E774FC9C8E9FD3F1F3FD3476CAF5D3F1F3571303971F8CE3BD011B3ED1CD327C6E497BD9D0F1F3E8EFE2DDC3FF4EE744C27BF8936FA7A34F162BFE99C2B1B8CF1748C47F2A8973FD92C967ACF8DC3278506F484B3E49F9454B33D5CFA96E46F5738A8170F957F2F4F865DE103ED1CFB0F3E1D25D3607593F4FE5FAF364FFE3DDC84CA60CE97F9C1DFFF16EE4533E3F7818C844BB4AF93CFB3070AB5883DF355BF1CB5B83D4DE1EA38DE3BA4CEC0F97AC9D6D3732E30D476DADD96767DB8D7C6A6F3F7818C884DD93DADBB30F03B9CD26BA5E2D827FAFF7878B1587EAE7B45F4EF5738A01AA9F530C449B0F17E0F37497CD41D6CF299F67571DBE4AFFF16EE4533E3F7818C844BB4AF93CFB3040F89C9C114D1CE5F3E86D1CD7517B3BB5B5669B9D6D37F2A9BDFDE0612013764F6A6FCF3E0CF02413B82A36B3EE045F9FF6B2A1F6F6ECD2CD92094775B3ECEB97EF463ED5CF0F1E065229271EDC500C640F06D69F3E675D26307090F573CAE7D95587AFDA7F9CAC7CCAE7070F03996857299F672F06522D275D7590290C507B3BB5B5EE273BDB6EE4537BFBC1C34026EC9ED4DE9EBD1848B59C74D541A63040EDED54378B153F5BFBE5C9C8A7FAF9C1C3402AE5C4831B8A81ECC240AAE5A4AB0E3285016A6FA76DF97EFC8F93914FF9FCE0612013ED2AE5F3ECC540AAE5A4AB0E32858164F89C7B860BB14545F2C77A176F9C1661C7AEE2EF365C34F9A9C85BA2F23325333C7EBAEA602F3040CE0B24FF45C0111BD64E7EDFC262C4E7F1C6DF6D1CAEFC4CC90C8F1FAD0CD229339E3A20FE54CA89E6AFE2D5D276204BDB8154CB49571D640A03DCB34FE3E573EEF354F641E2ED93ED5666327D22DA2FCFAE7E39C500C500F167424F8AD6DE510CEC3D06522D275D7590290C44E3EC58EF289F67571DBE8AFF31C500C500F167A25DA57C9EBD1848B59C74D541A63040F99CB6E5FBF13FA618A01820FE4CB4AB94CFB31703A99693AE3AC8140692E173BA5E2DBBD628BC8AEB5428062806883F13EB86E87AB5ECC540AAE5C45B0766D712E43207E4A31ECCCCAFA25DEA805E37BDE718A0EBD5A86E162B7EB6F6CB29062806026D58BACB86EAE7D98B8154CB89B70EF20B14A8A8B540679CC2FDBB43100F3851D13A8925DFEC9E6280DADB695BBE1FFF638A018A01E2CF445B4EF93C7B31906A39F1D64149A506CD2D065CBE2A87486242CE9D61DC7E308A95C5A53DC500B5B7535BEB7EB4B3510C500C107F266CADD4DE9EBD1848B59C64EA4067F2650D06B2CDDE5ED66006AFC9828A074368EEB5E1BB6FBB50D968816ED49E3299C9F4895291B744E324D22FAF6C9A60CBADFC7E3F46D56E1CCD914150AB82A44DBBAB34676BBF9C6280EA6681362CDD6543F5F3ECC540AAE5245A0762A983E9EFD960B62D660506B2CDDE5E55A5C1807E01C5854AB48B74A8A95143ED5E478F50933299C99461B6FFC73C9E812DB7C28261F0AA87512CF660C1338BCA8A915DA5395BFF638A01DA96137F26DA72CAE7D98B8154CB49A40EC4524790CFC99570FA5E6320DBECEDBE950D0CCB9D508EB8C16F35A15D6CC5409F8DDA5A778833F7E8195B6E230A17549A29A6DCEC6CD92D2DADEC2ACDD96A67A318A0B656E2CF84AD95DADBB31703A996136F1D04389CB89A3A7DD0AF33CDEE2906B2CDDE1EB82765D3223441AE9C49795F2B993E5122F1B5A21E4C0CF440D522827FDA0B53CF104C1D22A8F8B5B04844D075C960ED91C2246AC7F2DA738CB7B44255530F737F2FF42D4258BABA302E6885757018266133B4C22ECC5ACD71A559A6980A622B157DD76CED97673B06521587EA66543F3F0818100E7A2068B1A0B9560DA5650EF9F97254375A30EDF48584AF6BB1A2B9DE80EE7E3B247D137858416CB45A2C2EAFEC2A6F1AE72A1AEAB5A8A83260829179AD500D41A31E6A8563D77520963AB20603D9666F27F784C34919113E27D754DB319229C344E28F3588E052305CDCDFCF3E1B29ABC38CD50E4BBF14E30D4DCCB3E7B0CB4721BD59828DB559F4D432DCDEDD056D431DE477CF6375FD05868AAA30AD53C2323880FEC272784647764C3329376EBF91B8BDFE8F299FD3B69CF239C5404DF538D4EE3534317C5EC557B3E3A85EA69D6BA91F0F09CFE3E9D02E75A15148B87F945D0756DF3F07DF44E4F953F1A6A7866F837F6905E5C57A94572B50DC31890DDF2CAAF9BA579ECFD3696F1F92BB835C54C5D3A4C58E116FB8646D3CA7BF2AC3F51B2D3877E8322E9F29C6AD9C2A54481CACFFCAA97CDCCEEDC6F51C3ECE7D7A0B771F0871F75E13AE9CA9C0E58B8DB8735780EF8E15E0F2F9525C3C9A87531FDFC4CD2B5528E10DA2AA7302354C591047FC068B3F287358391D1CCBA9AD37868CEDECA63EB2D5CE96ED1848551C6A6BA5F6F6838001AD7511AD6233F8751AD85C0B28AB1C475D831EF3F34B21E187C666D02132A24368C6F0F80CC3B75AB4B7EA77FD1F4E2FAEA3ADCD84DA66336CD629A63D35A25E6080DD34B5BB3A585B835038963518C8567B7B3AFB3DC9F48912897FA1DB01C18B17697781F209979F68B9C52AA76CD6CDB21903A98A731074B37462209572A2F9A97E9E3A0C101BE2E5AB833B8EA3129D24AF6034386F3C55FF21F91EF92EF97E2AEA607DE309442251D660201BEDED5B721C6929A764CA90F279F6B5E5D98C8154C539486D793A3040F97C7F61203026B8139F8BA5A1EBC052C9E78131C954D5413C7C78D0F99CF46B888B1667B3DF634E3A3EEB5FDFD80CF7F479CADBF2B5F575F6DB91E273F93C472EC7399503A79AF8F85361197BFDA29A878AB9499C6B6F8DC8D37CC65D67E25D1E19C7D71D3D38525B812BDD425C33CFA0C82C8FCDE74C9E49B9454B5BA2B84B475B6EE9EDC3B47D16A64E314CD21EACAE2C448D4FF9FCE0B4E5C9C6A77C7E303010981715E053721F293E79C70D47383815FF21F90EF7BBC4A5A20EF63B9FA764FC7C6D0D4D79B9308A3B6161E4045CE0DE2C12A1EECAE56DCF03FEC0FB68F1593F13A6A3A69AE5B8548F9D8EB5B7B176964867CB5FE836B27C5BBAF61CDF30E1CE8E5A20F09BF0D34B05ECF5CB8606FCE6FC6DF0979C11F9FCE2D8047235FDF84EA6C4C5E1617C5E5084FB337EFC25E77448B89C6BD5DBE533696ACA2B61CB37DE7C667AECD4D4D70B1D93D645C63F945B8C09597FD4F874FC7CFF8F9DD2F1738A01EEBCA89C6BB2A09F3CE7860F3C0F0F6777F977953732FF2AD277894BB60E1ECB47F08469C7D6197C6CD4D5670506F672FC9C7C27E0B71BBD98D62A305A558BD1C60EF88D8A103956DD14FB9EACEB52D6B705DF478B6F16B7B1EF02DF20FE4018F28D9197DF88B74F149E37835812F4F3C54318EE6A0B860BE8E757347694B8EDF8B2A90DA7185E3FD52164AF25760D6E693451EDE8DF740DE29EDD8DCB43DDB86736E29B8E36E6F9D36D7102FDCB815127CA0A6F04E55B12EC2FC6AAC374E866E69E5E8C358B31EBF161E8CE3D98C4ED51E313F95EFF7ACAFBBEF186A3FA39D5CFA97E9E5A0C88A58EB8E273C3A5F23FE47E773775F084C32DCB820E8C949661D66E85CFE982BA4D02555D03FC4E4B4631B097E3E75C3E76381FC3269341DFD58591AA6AAC3A4743E4D82656D8F7645D97A2A222F83E5A7CCB60CF363E0F8421DF18AEA862BF116F19C6E2F30EC6DF21ED0986CBF4F87997D20E496365507EB6F339716B662B366C8E1DE313F9249F84D3299FEFFFB69CF2F9AB8D0132F6C98E0732D758F1C3C75B53F91F72C7237753075C3E5FEBE8C618AF82F5FB7C6B50F12AA16F6FCD3806F672BDDA8CB833E8779AA7B03CE78651DC038F6B1E2B8C7F8663E7B21B5DEC7B73671FDC9373C1F7D1E27BF446F65DE01BC41F0843BEE172CEB2DF8895CE58B6567D8728E837BBBCF04C4D06C3658ACF036BD1C89E7A7A9D3A28DF18C53E984DB6D6474CF9AD73EA265A7C229FE49338D7CC52EAE4C7198EDADBA9BD9DDADBA3D7815D3E1271AC93384541D1F6715449277AC978E0FA466C99EC3AB0AE1DE527931F15F9EECBF1C8DDD401B7FD227EF74BCEB1C95418ADAA816D488EE5F9D98C6220E3F676FF229B77D2B7795ADF18F47B6C1ED87BBA3039A2832FF72E5C972EE031AF967D479CDBE262DF4F8D99603E7D1A8E534722C7B74E61B2A682897F9E7D47C204C6380261A6EC5ECCD91839CEC9B8FB44E179E3EAE7E1F1F77A7E7BB6E9E781351D81717E1FE31E33E5F7B4B01872E9E6F8BF88F9CFE54C18F2BF937F5F2DEA65FBD1644FA1C07817D9BF96E8E99E95EFD933872B2AD5E8ED7720BF68843DAFF041810A6B2B8F924E67A21848A63C138D739074B364E353FD3C7B3110ADAD89F52E9EF629BCDC53F91F72E5EFA60EB8FAF9A2A0030ED920C6EB2570CA7A627E2B9D18C8B8BD3D0A9FAB1B1A98302F601BB7E3514D3E6C77EE84F0B9EAE5FB69ED2456AB1EC09B5F1439BE790E8F7AEB317DBF8079270CE1F340188775113A410D14B9D7E32EC3F0BC91B976D16C465C3EE731FDC05C467FBFD0DD8DF28505F65AE2F530D73E9C6A6F077F6D711B4F9338754F5FE0B67A040F3D73B8ADD5B0F12E0D0D8584174B1DDBE533DC493871277B5626DB723277317C2D02E173EEFF40D2CB5D8B108813B0B71317E073FBD2F7E86E56A39AA745CE6D394C060FBB8F54599303ABFE05CAE794CF299F533ECF289FAF31FEE62FCEC2D83B084DF9833DC3C05EDADB8D1C7BB965588DF166098C3239E626749818EC09B11B9B652AF6BD453E02D7E8000C2D4D51E3CFE847A06DE487D89E893F10867C63D1AD87A1AB3B663A63D9780C71CC6F6F60DCE7E5D5B860F282E735E1EBDA4A5C6038F9B3AA4AF67D897F05DF4ADBB7F1F9D116110A3C5EFCB5B81237E4DD38DD2A88183EDAFC76515E6E56CD6F3746B2ABEF606F0FC489666F57687D18D7CCC0EDF2A367788AE57AAD666A57E94C1403AFBAAD95DADB2906A28DEDC57A17CF786078B9A7F23FE4CADF4D1D90394084D3BD75F558686CC7C0FD228C56D5C1D2D1B46718C896F9ED3BF53592894FFCDCF970BBE99385C727FAF9F4C21A0A4BCB209274413E2C0B860BE8E727E536DC56F4E28DDB4538555F86AF6A4AF1DEDDBBF8AC24977D7FD7EEC64D795F089797AC6CE0444D258E4AFAF1D7EB17F1457D0D1E18C62386174B1DAC4CEDC4146A99BE82CDE9CA4AFDDC12A10E769A0F178843E7C365AF6E964E99F1D441A00D4B77D964B37EBECAF8C7EBEA601A75C06F1E814D3E0E73770FD30688E01CD763A4BC1CB62119BBEE67637D35E5187895F5F39DF0B117ED40B6CC6F4FA69CF692CFC9F8F9E2FA0BD4F02AD0D43584A12E4930DC4EE3E7754C38626F2FB099E21A27277A39B1B757FBBD11C7CFEDD3F3681336C3E65BC3DCB423EBC6CFC3F9DC20ED876FC2C2EE2B6395EBB03CEBD9169FCBE774BD5A6665523EDF3F7CCEFE2B8303B018FC18C9BF05636B231C8A618C553561C66A83B1AF07D207D5ECBA9F47AEF1946320537C6E55EB61686D62CFAE347476C2CAB4B7A4BF1258979C487E289F87BA54ED27D32D6C8F1A676DED117A846D49C767FD2FC3A4633F9980BDFD5E6E3EAEDF2D4041EE836DF676E24E34097074C8C2EAE7C7185D9BE8E75F56166FEAEF3D72467FEFD9C6DFA7C43D28F02EE0FD3BB771B9A78D89571D313CD7DE4ED271EEF22D9415E665B5BDDDE17A84A9FE662C2C2EB3FBCA9898F646DFD3BD2D3ED7DEBE5BF9BB0947EDEDD4DE9ECDF6F649E304547C3EC69A8450D530BAF8F030A64D5A987BE55879F218E681114C0CF5C1D041E68A3F493906526D6F0FCC97226EE4DA8DA0DF3A38027D431D46F842A6FFD20715D35F99329999F6439AB8BD9DE104323F27DA5E658179F8537A5D701E7EACF358588ED9430C6483BD9DCC75D2D4F2A2EF0FD7D18E96CBD763EE0FA7C8CFDB717F38F3CB796B89A46DA73E2971C60E21E696D72197F56144C3E89A6663305C403FBFED59C52DF920BEEE1D63C7CF89BD9D8C9F1F2E2F0DCE7BBBC0A493CBE564AFD77322092EE9EDF8ECCE559C60FA0DF734CA88E1C552072BD3ECF2C164D4A057AEC2CA923F38972C997E60783E53AD9F93F988EA8666764F38B2AF8C5E3A009FCDB22D3E573F4F47DF37151848A63C138D43F573AA9FC7C2C0E2A367D0B777C035AEC1944E95710C24A39FCB72AB316B336224B791791E7AFE3959F3F2020871CFDFFE031CE649B8460699FE899CEDAFD807C7B0F6FC29BC464BD4744F0C2B611F1EC194C11CF25CC4691F89B332E11C61E136D7C96FCD798E751E8B999EC7B2639C02E514AE7FFF1C2DA3B1F7EDDFABB63CB05EADAEBE05E5FC3A0804FC60B8009F9379ED255E2F2E0D0DB2F6F2D2B939F65AE471B1F6F60B0C9FF1166743F8BC7C6583B5C3E7D96DB8633423DFE365FC0E36DE8D71754878B1D4C1CA5C78FC0CCD8D8DD0799630A119CB7A7B7B3CF1299F27F61F533E7F35F9DCA0F5E1F18C011EAB139AFAFA8C6320193E1FAB6880B95580D10A31F37C6E5B182EA7132E27CF4C6316E85BDAE052CA3131D01D57DE8C7D0A98245D700E0FC6E43C758B1806269CD7A48F1A2E561D141635E274978375A7A4F698FE6FBBE29F0B94293E4FE7F9E7E49ECC653ECBF01571EF30DC9868FC5485DBC9DEDE2C14E1CBCF0EE1467E19EEDFB99EB0BDFD9C761A455A69DCF6F6F0F0017B7B59AD00E7CE1CC3A1AF4EA3815799D5F676A7C182E1BCFB30CA741817346065DE87A1D2E26DF1A9BD3D313B1BB5B7BF9AF6F6F65A051A0A1B71EF8B3C3C3C9DB7ED2C9348F7F1FAE3C140547B3BD3FE1823D9A1D7373056D708D1E9B350151731CF978361C87EE884CB897D9DF0F8F73FF841D0DEAE966AF068460F650D0FC6CE6126FCCA8EE5661A31A0E5D067B0763645AD4FE2147C211B6ED63A1E355C2C7BBB58D411E4AB5FD4E8707CF911FEE9E6307E766710EF2A677078621EEFB6EB83612A2C3EB8A7E652868144EDEDE50D4214165660E3C96ACCFE2AD79F6C3F90DC133C9D587B82534CDEDF6C36A5BCEF9B4C9F283C3EB1B77B171F41CA94C5A3C78FE05B580A868BD7DE4EF899E71E8DDBDE1E1E9E941391A9774C6354318C61A572EB4CB95DD8DB03E7101147F673D9E9DFF7F85663962D573FB78DEA61696F82BAA90D1A410B7C4E37C69B9BB6C5A7FA7962FDF254CA0C8F4FF5F3C8ED5D3660A0469A9EBDAB481B160F06A2E9E0A4FDA9B8F300AB2B2B98B558313FE7DF7CFEF439F825B5B0885AA11390FD40A2FF5FC172F72FC290570B7D231FDAD63628CBEB98E74F772C37AB52CDA6CFDA2D0E79FE849366E2B49DBD6C38B74A11355C2C7BFB43B139C8D5AF4B26F067A50BFF56328EFF1468F0468F0BBFAFD7E3B0CD87B3CF9FB1615A183E27FD805461201256D71877BFB81AF5B5BC6DEF4AEBDB919F9BC7F83762E23B957CFE8B322D7E53ACC4EF6AD529FF579229C3F0F8017BBB5CA34373BB147C7E7530DC4EF6F672AF8B7D5FB9F6140D1B2B3BDADB79CB7311C393722232BD2B4FA0D5A8D031E6844B33B0AB3A207E82CFC2674F58EC1D5979860FE493784BECC0EF0546C6EFC21F07EC785D60C1C74CFFE26D891577AD73C1BD60227D8FBB9FCCD2CA53CC31FFA55DD203CFF838BC561BFCDED9CDB56B9CF56BDCFD64D251B7A9C0C05EB7E594CFF7279FDFE6EB512075B02EBF7322A65F3C3A93557CEEF5C7C7E7C4157CF72D2C4323EC5CBDAE6FCFE2F1DA4AB03CDD8CBE621676C4C7E73130B053B95B07C7E01CDA3CBFF18952C572F433CE3C3BD2575862DE99DABBE0356837C3BD7CC70D17AB0E4E15C98276F5F76F29F0DEC51EBC7DAE1F9F958EE2AF451ABC7BAE079F566B70BCD980BB52C78E69DE4D3BC02DB3DB4555E0D5946F7BD7D62D4397B463477CA792CF09979C78FA026F34EA52FE7F26538691F8DCBFF61C0FEF97C1E9F540D2D9110C97E9FD5ECDEE39D45556A04EACC0C2B469577510CEE72718F7B7473A71C4EBC74F2E2B70C8338F37F86AFC7BB50E5F4EFAF14799939DE72016CBD939A191E62EF65FB91CB2DFEB6C6131BB3F1C5726D9C76F967181318B5ECAE709FDC794CFF7079F134C9F926CE973BF6DB7E2D4C6067E5EAAC6EFF91ABCA79CC1B185557CC4F49BC9FBAF17D731AE76463D3F84CBE739231A142EAEE1486D058ED65421A7BF0B170787707978109747C671ACBD1D9F9795A3D46D4711138EF8BFE91C4491C7864F790DA8989BC4B9F6D6987C6E323FC1D4F41A4C96CDBE7B2C3EBFF3C5E7B0ABCDD00BF850F26A83CF85550D18BC5F848E439F3371E6A3C6DF2D9F3B351648BFBB0ED9F50B51C338C6ED905CBE8A8A7F7B0DCA1BE7A386D38AFA60EFED8255A6C4E28C2B2E7CEC453BC0D5CF6B1A85181D1D8E984EAE1B5228D9EF1347ECFA91FCB1DEED1487D878DFEE9EC427FA19FCBA509170FC5485F32D2C468DAF6E6D8B1A3F537C4ECA29D57540FC37781A76DE0271BF6EB6E2FFF97D3D7E74B613FFFD8F02FCF04C17FEF1A214FFED8F2DF8BBAFC5F86FEF09502DB5C694A965FAE101FF92CE80D5AFBEC2CA9123EC35DC1F6F1D64030692C577B2F23325333C7EBAEA20DEF8B1E4A7524E347FCB4BFCA604034B4B217C4EECB37F51B959FBECEF6A55784B368DFF14987148630F86E1EB5CC1BD28C3F783BC5CB4B5DEE58CB413F7ED6E7C5E5084E34CFB7457ADC4993E25CE3654E23B86877294C3F8E0723E1376193C263CF117B8BD3852578C879336FCE6FC6DF0979C413E0FC8208E9401B9927434B7B8E0746DE6491BA36CDC51DEE9EE3C844E22C5ECD414F33CFAFFC52DF764FE4343DF10F45D52CC2F2CB1CFD715A3DBD6C19978DDE8CE39066D8714130A3916A73C11D7CB29EA5B601B1A807A601C868E56F67BCB0343C1BDC4C9DEE4D9D00E0C0CCB2372762C3ECF847EFE2F9786F07E9F8DE59454F77B92E91345D2CFA3C5DFEBF358765307E9D0CD42E6B7DB1C7876FA0C9E9C3CB53587F5BFFE57F61971F1D641366080EAE7543F4F46E6BFDE9005FBCB7F7FA11F3F3A23C1DF7C2EC64F6FF4E3A7B963F89F87DAF1F3A271BC29D0E05A972324FF3D7235EAEA2A82F701FD9CEC2B798BD1C3AF8CAAF14D471BBEE9E947CE703F2E744A71DB646774F4215C1D1DC50941132ABC6E9430FA39F19FEB95A1C46DC6CD11256E693411EDED2AA303A3239BFB5F9A6D9BF921767772BF4D3F67FEEF000706CED620766E8D500A7B6939EC572F85AC318F554EE9DA1F8E7C57A266DA70D90B98068C3034D6C365D0C331D017124ED0D18DCA1A46D75D7B81D1FA363807FBA1EB55C33D2667C371F76F277E6D4B0B26F5568CB576415DC787A3B725E3ED4036AE571333187DABC9827FFCB61F6F346A52FE7F265386E1F1C97CB86873CEB87C5EE09A448E6112C79A9A7049D282079E059C66E296D835AF269F739E07FE6932AF355A7CCAE794CF0F1A9F2712C76C7BC1EAF4C4CE4D38D4E29A8544DC1E0C17E07332B7E6815E8D872E27CE74F7A3D4658FD976546F3CC7A9F6369C97F6A1DAEFC6D79D83EC7D39C3EDE17C2ED3D9A1576DFEA3EC3C98B5B5E05C99587CFEA4A028C8E7E43C2D976309DD576FB3E76D05E2D8141AB814C370E96D585D59083E0F9CC9988EFF907C77E931D376AF470F17587FBEBC1A7DFD79389F937DFA9C2617A3CB7762ECDEB93D6907B275BDDAA9B52759BF5E6DA7F358784C597D59518B5372233E2BCBC339A1109FDCBF896B938BDBE6B527E3026B4AB27DAD52F8792C9AE66698E52A0C963760BCB616F69EE6A8F1E97A35BA5EED555FAFD6D3BB88DADA2D7B7B6D7D43447BFB09E9203E2CAE419EAC0D751B1B31DB8EAF1ABA50B9ECC1A7053C9C64F48C8F1B8410F84DCCF3866DF6F62A46372DCCBB1FB4B7ABC8FE6A9CB932D1F229E3BCB32AC7612DAD82A9A802E682BCAD7333CBEAE0940FB17B4586AF775371D6BBA5F23F64BFBBD3F9E7EB1B9BE162EC0F177EFEB97D44098FD30B9DA807B6DE01786DDA94A539DBF7878B15472C7584AC3F4F75DF37993E51787CAEBD9DCC2F8F34BFFD9B111B0A6D1ABCF7B012C7EBAB51E1B3E3824484434DDD38D750F8CAEAE7A41F6BECED461F6F7B3F36DE3AC8060C248BEF64E5674A663A30B09BF8AFBA7EEE9C7ACC5E897E6EF3F8D1D1D6180C17D0CF4B89FDBC8187F37D321C130870533914B3EDC8F3AEE27C7B133EAD6EC62DA514EF1735E054131FB764926DFA7933C34FAD6D4D09E7335AB991E7CDE21798F6BCC050712D26BAA55037376F8BCFD5FD53F91FC6BB7F7B34F9817091CE3F770CCAB1E0F3A7FCFFD8EFF67632679AB8FDC2E7924E61301C1D3F8FCDE7CE3115DC6617F4927ED8FB06E19BD06D8B4FF65022F98B67FDBBDE3C97709E538101CAE794CF33C1E78B2BABEC7C72C2E7DEA5353409B6F681E3DADBC93A57B227F40DBD65DBBE93C455111DA949C8AE992DB45B366D884CF87CCF2CAE8D8DB1E73D91FB703E2FAC1362A867B37D63F7CE267B5C3CFB3E66FA597B35A3C387BF23F1C8F3D9F9D8F189DB4F7C1E38FF7CC16562F78D4DF5FFB19FEDED32C514AE8ACDB8D261C4A12255C2F153152E968D47DF210A79E7F6CE06FD679934DFEF72E09ED4CE5E038E7B1F8FFF4EE744CCF8A49C525D07E9B0B59A441D585B5F0F3EDFC8B9CA9E7F4ED6AC1117F06F3C2C08C6E91099826BE68E6D7C8F0F154E7C35FB087F5478707A63039FB91683369CAFEC0BECF789CB2406A8BD9DDADB336D6F6F6897A2E0A5ED3BDCDE7E596DC19FF20B70BD4B80F239FF363E2773DA6F336D77817711A52E2B1A98FBCFCBAB71CDBD8CFBB2015C510DE3FA70E7367BBB9071F773F3A2DADB239D9D41F68F20FB546E3B978389C7EE5FF9D28E1DAB9C8C61FBB32D307A9341D80C8B5C05DBC830BA2E174371FF32469B8558F6FBE22ECF78CF3F0F971F1E27D2F9E7FAB616985E9E23B617ED4036DADB03FD3BD22F4D47DF37D23BB97266DB9EBB27183E8DB4172FD91320D6FC76638F0C864E31FC53D318AB6FC0C8C32258C4A284CBE3A0E8664B3E5FC8FAF368F35AB9EBCF73AEF0827CCEAEEB693432D7E7784735872F26BCF8758506679F6E04DF8B2DBE84F6C44BA60E5289EF570D03BB89FFAAEBE7646D58403F6FEC9243AB1C0C86E3DADB3FBA7B1D5FB576E1CBF2A2A8F6F6A3A27EFCE5FE2D144FDA70526EC36D452FDE2FACC1174585382FAAC0C5AEAE6DFAB973E129E66626597F22FA390917FE8EC4239CBE537CE222E9C781B1BA913609461FD661A4EC2164F977132ADB54E9E73BE1632FDA816CB4B747CA43BAF95C243287F0C77FF64FE1D0A80B7FD6CFE22385036F88193E5F7BBCB5076F3E2F2A7F580686B0CAF8E72618DE67F0D77FFD3E4C1DCD69ABC3FDD696933D9A836B59A45BEB5AC89E32817062A923B8A6E74DC6FF775FB4B1FEBF3B2FC3FF3A26C6AF0A65F8D9CD7EF6D915892D251848048399AA8F838A8144E2BFCA7C1E0903C3B22D1D2C91FDE1C85ED2DFF6C970BCA5955DB3162B2C97CFC9DE246AB52665F98CE7BCA8F070A40C96D79E635AAF66C7EAE6266C78CC3C3749A430F40DE3D162EC316BCAE7AF369FBFAD98C3F1292FBEF06FE0833E2BC329367CE9DEB2F14A2C9311F97C95F1ABC95E671E1F1CC372E898BE28D1CF036B16D3518707B12D4F64FC7CA7FDE377934ECAE794CFF79CCF9796826DCDA8C18EA1BE9EE03BEEFAF3438545F8B4BC1627DB9B70B64DCA5EEFAA94385A5F17B4B79FEBE8C2C795B57830D2CF3E2336F7A38D8D38A77220573F82B3C2C66D7C3E6E7462A077B30CC2D7ABA58BCFC3CF21E562E031B129FB17932E4F73D879A9BBE1F3F075757BDD0E64E3F879C09FC9B54A841F02FA20713FBC24C35B2D5AFCBC781C3FBE39849F5CEAC54F6E6FEE0341F678A063A7C9C9F4CD3F42F7B5EBE8BF958BF1EA92ACC24022F233551F07110389C67FD5C7CFC9396581B5B164FCFCC1BD5BDBC6CF0957BF77F33E7EFAE161089EFBF1FFBDF6117BFD8AD12D2ECA06D830358C3BD32C62D7A673D7B31DAA13E0F57B65B8D054866FBB84DBC6CF8BAAEA51515694D0F83971FDD76E447C17FEBCF3DC39F45EBB8BB1C626E86B2B31525A06557535BA1939F7BFC941C9A923C1FDE9882D6F4DAEC0E359FFE63C9C9765C59D7BB35EC7C79A6F8EF593BD2DE4D2D035C5E4BB84D323A52D9A9FEC83C7CD5B703E00F31D418D2C6BDA816C1D3F0FEF9324137FB7E1A86E96FA3A20E31092EFEEA2FFDE5DA84B7229065E410C241AFF55D7CFC3EDC35DFDBD417F70FC9CD1CF8F3534E0AEC980D36231F22C16F67AB1B717C79A0478683344B4AB13FDFC58AB189F54D521D7A243CEC0F6F173519F129D6DCD09E7339A1E1EFE9C8C89937316876BF8D0344BA0C8BD8E69A71FE3F57550F3ABE11AD7053140F6A6098CCF111D3D305E17E2277BDA04C231D754D4476C7BBB23A16F2583016A6FA76D793271D2DD962F2E6EB0FF33D90B6AC66AA71878053190687CCAE75BF2C91950C28E2D6ECDC4F96AF5AD9DE816276E538E97CFCD3DBD186B92624AAF8357A362EEFB601D56C3C970B1B65508536B734AFF43CAE7A1EE20DADB13919F8ABC515B2BC500C500B5B7C7656F8FB1BE4A679ADD717E49F87DCEB5C61DE304F69EDC0D06A2ED1D17E93959FBF56858BEE58F8281907DE1A5DDDBEE23F953511F91FEC3E9D947C1B21A564EA71503D4DE4E75B364E284C7CF66DD8C628062209572A2F9B3493F4F85CC64E66327838178F5737265CF71B0D8F0FC17BFC4F7FFE7FF44C480596681A1A911534613CCE2B6B4602DD1FF706A66154AFD1CB46A4F5A3140EDEDB42D4F26CE7E6ACB2906280632D196533E4F1D9F9379F17DB53C768FB8C05E13E4EA7FFB0FF8BFFFE5BFB0E72DCEFFE00721EFC81C3C8DD602CB881B1BAB6EF65B64CC3D1D584BE43F9C5E7C86AA1A2D04222BACBAE9B46280DADBA9AD359938FBC9D64A314031F0AADBDBE39559D72A41735B1B8C066D487E88BD3E5D18886857DF78B2B95F2459F7C6794EE6A43FFDF893CDF393FFFEEF43E3ACAFB3FB453A34762C7AECF02F3DC694469516AC25F31FDA191DDD6AF6A61503D4DE4E75B364E284C7CF66DD8C628062209572A2F90F827E6E76F9A019576ECB8F58EA60F7C64C0706A2E9E7E25A51E8FA759B8375C44FE6A33F3B7D26421D383282B574FD87996A07A8BD9DB6E5FBB52DA718A018C844BB7A10F89CCBA7DC7352C4524790D3499885F5179032F78A310FBB3756DFD034E4C3AE94F1799FD5CFEEDB55AE9CDA7A4EF83C42FC21B99B33874F16F493E7E9C25ABAFEC34CB503D4DE4E6DADFBD5D64A31403140EDED09CA5C5B434D4D77901BF30BC6D8F9D9C40D0C4F22AF641C83463F1A8B0650DE6C4155B91C63CE55F48A229FE59D88BD9D9C1FF5F5E27A708F4D2273766E19C345255054F23070F326F422317BE64A200EE1EE76B1154DAD7AF64ACE524C27D6D2F51F527B3BD5CDA86E4631403140F5F354E8E70EA512FED9152C7B3D98F7F93879DB5AD346E234774CA2596AC3CD1B32F40C3A70FA7427CAEB4D502B26129619AE9F1319012E67CF507A29939C7731C26B80BABD1BAB33CEE05CB7C0F74838B2EF73A4718154632D5DFF61A6DA016A6FA76DF97E6DCB2906280632D1AE1E043E37F6F532BC3980FEDC52C81FDEE6E42D73E3E744D61B1D76FCAECD8A432A177BEF9F7F044D6313ACB23EE89B44D0B7B7B367AE847FAF7FC89911ACA5EB3FCC543B40EDEDD4D6BA5F6DAD14031403D4DE1E9FCCD1867AE8A5FD3048A550D5D6049F137B76BA30106E6F27F6F5B7BB26F1A76167D0DEBE5B0CA41A6BE9FA0F33D50E507B3BD5CD62C5CF66DD8C628062209572A2F90F827ECEDE73E69167020391F4F30F9433EC99569F4DCC06EDEDD1E2973598C16BB2A0E2C1109A7B6DF8EEDB2E54365A206A55A70D6BE9FA0F33D50E507B3B6DCBF76B5B4E314031908976F5A0F079601FD44C6120129FFFA1CB8E532FBE67F8DCBF239F57556930A05F4071A112ED221D6A6AD450BBD7515E3E9236ACA5EB3FCC543B40F99CB6E5FBB52DA718A018C844BBBA2FF99C9C511E76C677389F93B56BF19E65BE17FAF9DCA36718514E617C6C06D6A96536BC6CD08995954769C35ABAFEC34CB50374FC9C8E9DEED7B1538A018A814C8C63EEF5F8F9CC9427E2D9DB31FD9C33D303E786B3E79314144116D84755D209599C679973CFFF8E473E717333BE90FC90F172AE7E4EC7CF532F9F8E9F53DD2C56FC6CD6CD280628065229279A7FAFF5F3546120D3F6F6F07762A9037F944FB3FAF9C7EAA91DF5F374FD87BB6D0732253319F9D4DE4EDBF2FDDA96530C500C64A25D3D287C9EE9F970E1EFC452073E732E32FAF90B1C36EC6C6F4FD77FB8DB7620533293914FEDEDD4D6BA5F6DAD14031403AF82BD3D1518507748611D506262A073CF3040ECEB6FF54CE2835E07FEAC72537B7B1AE4537B7BEC3E914D3E0E755D35862BEBE09FF662B4B60DBAA67A0C171560BCA61ABAAE4198C4428C56D76079650DFDC51518CE2FC2785D2DFA730B61686DC4685D23F48DF5187A98079DA807664947DCF253599EC9C4CF66DD2C53184817BE2906A87E9E090CB83C1BF00CB462423B054DF9833DC38058BA7D3F99DD6220D5584B571D640A03D4DE1EBB0C35AD2238E40A987A3BB1BCB402454919669CB3D077B4609C578D5586C38DA24EF4DE2DC1FC8C0703354DD0B6B4311CDE8C8EB317B130EDC0F0C362D8BAA5EC1E4D032575981CECA46DF93EC240BAF04D3140F93C335CF2022ABE00CA6A01ACA2E63DC38058EA08D94F86DC533EDF7B3E1F62747AF27DE2881D20923FD6BB78E3F8161677157FB7E188FC8BB77B90C393E3EB33C53895C3C7D5CA6EDCEF72E07CAE10E7EEB5E3DBB2615C2AEB67DF5FABEEC7D5FA315CC8EFC4A5CA21DCA893E1CC2D012E940EE1EC9D1636CC5526CCC5A22EDC93DAD9EF1017CD7FA77322E88F152E9A3FD23BB26F6222E594AE3AD84F184817BE13959F2999FB0903A99413CDDF22ECA018480106C81EECDCFDDBC9FD6E31906AACA5AB0E328581816179C27CFE2AE9E78407050CF60E8A237DE244CA295D75B09F30902E7C53FD9CEAE7AF1206C83EF1573B6DC81799D86BE08C56BD7B1D0DF55A9455E8E074FB71AD500D41A31EAAE1891DE5A71A6BAFA27E4EF93CFBDC2DBD05FCE71BB867B623DFA2C76D8305B7D523C8757951EAD9CA8358EA60F3E6F1CD6DE579E3091EF275F8B06B825D4BF28B722D5EABD2E08767BAF123C6FD47B91AFF764FC1DEFF7B890A3FBF2743B7D917711F8A54633D1B30902E7CBF4A6D79BA3040F97C7F6120D21E36BC0607FC4B2B282DD4A092A74471C724367CB3A8E08DEF283FD5587B15F9FC559ADF4E6CD47BCDD5F1B802B71B47DABBF159A304FF71F21C0A263DF86B7125AE19ADE0B94783E13E39F41DD317AEC51FDE7E0BA74E9F62EB58281221275F84EBDF3F67ED606F8C2EE2B7B9BD7867741EEF77EBF1E1D8347ED7AAC7CF6F8EE0C4DA23FC51E644E1B327E81E76A4A4DEB31D03E9C2379DDF4EE7B7530C6CC0BBF2146D6D26F09A8CE8EE32A2846744BDC08009A37B47F9A9C61A9DDF4EF5F36C7087F9425C92F5E1F7570BF0AB6F7270AAAD117FBD7E117FAA6DC7D9EA5B21FAB95CA962DB289BD3B59967463F2F97D870F1FF7ECFF2F96BD219FCD3B94EFC966FC49BB563F875BD1AEFC826F193AB32BCD961C43FDF1A4669BF95EAE7BBCC5BA2F23325333C3ED5CF23B7771403A99569B0F88367B1C78B8154632D5D7590290C507BFBC1E0F37B26334A17D77069681017BABBD1B0B1823B4633BE1B56E0DA705F089F07F2A9359883FE3EE50C0A9877F99D13B852AAC5B98B3DB85CA8C189E3125CADD0E05AB10AC74F4AF1CDC57E9C3CDD0D8F6F352DFFD763C6B9D59AACC240BAF04DDB72CAE7140394CF299F533E4FD605FE15DBD43CC4C2B61DCB29536DB9655009875C0975A30003371E40DDDC8945A7392B30902E7CD3B69CF239C5C0A6DF6C5B64F797114B1D4147F93C337C4EC7CFF7AF23FFCC4EF90F8449671D84FB17579EC0A3D3C23E6640CF8DBB68CBC987899F9F15184817BEE9D8291D3FA718D880D13ACFF237697772AEC9827C1E4F3B946AACD1F173AA9FEF2747FE939DF21FF89FD25907E17E97C10EB3B407E35575CCFD2398461D3034F1313FED0C09E7F5AF671C03E9C277A2F23325333C3ED5CF23B7771403A99729963A12C240AAB196AE3AC81406A8BD7D7FF3F9D95E194E35352177721A67C542DCB7D871B2A303A56E07BE918870DF3E8542BB3918BEB65EC5D45F17F466EB569ED737D8B392D9B5241C3E278E94817FED7B085A2C68134DC03FBB845AF1241A9A8C9876CEA5F4FF7AA2546D3E538E45C5004913B1CD513E3F786D79B4F894CF5F1D0C8844E6E0B9ED94CF33C3E7D4DE9E3DEE73413BFE7C3F0F5F5517A182A99B1FBFF65B089EFBF1557D232ECA0618D78FEF6483C1F01F1F3A03A95482CB395783672393F56A22911C22898DB571E5178CB157E254DA2954D45A313D378FFC0763E00B75B85FABC7CA1479AE4E49BD07FCEB2FED9AEB1CFB66380602E9D21ABD19C340BAF04D6DADD4DE4E3110EAEF1676C1CCB447E1E7A993F3D7470A8BD38EB5836C6FCFB97623D8E673DD43A65CD3D10789B74FB65B9989F48952A59F97F857D879E7D57E6F4AF9FCCB2621A39FF3715565C4F1F6569C6B13E374470B8EF31B70B8BC0C47EBF9B8AB19DB666F1F354E30BCFD00372AC5B08D8A43F24FC21047F460520626CF063A5A8C7858AE875231816B057A34D46BA01CB405E3F86C8EE0BFC7FD0FA3F94D6209CC1DEDE8651C692FE5CCB3A72F71F58C83BB969666F48AD4C1F1B4DA7A23EB6F175BD9F4DD2B1C4759D1183A3ACD10C93DF8EEDB2E9431614CE3AE94F7CB538DEF44E5674A66787CAA9F77EF2A3EC540FC7E6E593B4C533035F1A0AC1560B8BC19920BDFC12C6E4B2BD6D2550799C2402DA3C745E2EC80E37E63277CEF5B3E27F666CE5A6AB36D738D3697CFAF99DD28779B71CFE1414E5F17EE4C7AF1D066C075C5E65AB0DCC959D6DE9D67B7E2CA400FEE596D6CB85B260BBE932B91D3DDB6F91DB50157FABB71436BC235F9206E583D28B16B32A6CF8BA50E369F9EF9476868A843B5540FFF8422EC9FDAE4F244EAC012860935D3C72676B368711E6F3CC5FAFA6388183E0F3C7FF2F21B4F38DF5A5C5A62FBEBDCB41147F89C8CA5F3783AF09A2CC82F5343D265464D8D1A63CE550C880D29FF8F695B4EF99C6220737C4EEE9D0A1566979E62E8761984478F40555DCA3C7F9236ACED773EA7F6F667585E5D8188E10C92DFBC8705282A7C88B7DF7E1B274F9EC0D16221CB83174C7E9CAAC9C3D7BC32D4316570CDBE881AF7282EF52A19CED6E24859216BEFFEF3FD029CE257E3786D211BAEC83B879C5E096E6B75EC77BEE2F17062C08A53F5FF7F7B5FDAD55692A6F9FC83FE09FDA13F4C7FE8D33573CE9C9E39A7FB9C9973E6D4544F2DD35D5DD3D9995595AECAD59595364E2FE91DBCA417D22030C6ECABD9412076101262DF119210486803C42276030683D7AC9C1B81EFF5154898E56A318A0F7114D2BDA1F746C41BF1DCF78988F74D429AD309D9D4A69BFF365F27F1FEF699C525CCADBDC0EACA925BBB9073A0FBED83916D9CA4B241898D67CFDED91FC4367F17DFCEFFB7986F9F9C5DA5BFD9A7D7A1E36CF121E32C9CF39B14E7DB5AED92E90AE3DB19DFCEF876FFE980781E714DCE61ACB30DA6C61ECCBB46E9357B97164BAE499FE9DA51E6DB43D13E1F1A9D4649493EB5D1C5F6F94DFD384E67A7E1B64689CBB58D88D4E950BC60C3B7850AEEFA4B44EBAD94EFBEAD5123BABB09F70674F4BE44533FAEAB1BF05D7D15FD9F1BCD9DB8545E810B65459CAD3E82134595B8A9C8F0BB7DBED7763AA87DCEEBC8BBE490FB84DF1D5BCFF6CCEE1E87C126FAAF773DBFD4BAC2EC73669F079B7D5E546141559919552583D0DA16919ADA8BC2721B669CF3879669EEB6C1D1A88273A01F166ECE9A328FE3B1D30E6DA99CE667AD56581AEAE0320E63426780B5B515366E7E1BAC5662505E869EAC1C184B8AF75D4FB21796BCC7BF2C2BA7FC1C49CBCE5998EB95589858C0CACA9CDB3CE02B5DF3D538F4D73CC0F6B7BBE7C7661EA396D3635E3E8FE724AE49EEDC24F2375E225EDF87F4B9A5ADEF4F56E9F5C2E7AF11DBD789828DE71C861B85FBE22C0E3C5A5CC00DAECD6E71587FA5BA1A71DA1E146F6CF804AF73D79E43D6DF4F3FC97A7DFE820BB18306BFE2F9666F3FFA65B1744C6E88E3BEBC29D3D4ADA336CFA04E2BE0B9CBE1C2584B13F52BB33233ED26DFD3386678CEF03C64F1BCD0803ACD242A393C2F281DA46B4C73CF7E447599E1D0324DFD53E88DBB8B75829F9D1D3070386D5494C0A86914F23A0EB7D7268741E2AA0F96C9615054425F5CCCD9D19D687FF81086A2DC7DD7D3139EEB33B9F782174FB0CACDA94EC310C3F33D94677CFB4EBE3D393181F2EDD151F77047D12DF0ED51F539B8A8502077751DB2B125241ABBF0C7EFBFA378F96D4E0E52965671213F0B67F3F27031E721BD2F7B6E9EB3D9EB106B1A86E2F973BAE73C656A0A2792937C668387C92B684CB55B5D5D385D904F65F2D7C4F158643299B0BFBD974B5675A3DB9E357E5FE95EF6B90D962ADEB6AFB2C1639E6FF38CB21114348EA248338E8898429A7F98588F52D518DA5252B9FF54BAE980986FF7950E30BE3DF05CEB41E68150E4DB3BFAA7A16C1841A9DC88A6F671E4E41B205798F0F8F1EAA165DA72CBD11EF615B491DF4373E21B0CCA223192F41003D151184ECBC670C243F4865F82ABAA088EB26AEEBE5BE80BBF0CC38364FA7BEBE98B30C64462969B17661A35F493CF6FDADEEDCB6A56D4D613F6598C286B3054550B5B5BB3C779406A5D637CBB7FEDF321E7066A6A46D0AC19C5F4EA7394960DD3B3D11BDC3BDC81DF8F48FCBE37671EAD93F328E1DE2F491D9DD333827D7EA1CB864FA323713E3799F2E8D7BBB574DDFBBCA28C5E0F57B6E1425D0DBE4E4CC3F71A05AEAA1AE87D0F4DFD886C6B4158720E77DF3ABE912BF049CC03DC6E69847C6DC927F6F967C919F8927B27F98C7B573E9DCD3D6F4D959B7D4EF6FAC524E6405D5FB155FF6DE7CFC5ED7410DB6C53A516F2E6981C0CC4DFC680BC0ADDA94978BAB2845BCDE3C2F3100E81CFDFC91DE0B0BC0ECBAEC9ADE7E112B3CF997DCEEC73CF3A40E28793BD24E4532A99047B7D6567BCD8C338F6D6D6DEE601A975CD57E3D05FF3C0FBC6B7E7E50F62606C1D6A8501597213F20B74946BAAAB1896A43D97375FA1AABC5C901FECFE643CA504C724EE109C7CFD7CC73595669CD6AD56DD84EC9CCC77B69314783EA4C8C3BCB11F3D595BF2089ED7ACACA09D7B4625D7D6ED6F30FD8E42BFC51770EFE1AD842FE012CF0F483D560E328E82692EF7A54C86E7C18FE72ACD5B9FA8E493603AC37386E7EF1BDFDED63B0B857204090F7B30343C03596C3B1E9598303D3A7B603962BE3DEB510EF2B352F0F1B163748F36BFBF9DD8E7B9B62E5CAE6FC29D9626DCD43990A855E3524921E22C163C5A5CC479792ECE9556E27852222E16C971B1A20461E54A1CBB7E0A6973F3F8223A1EFFF1DD355CE3645DACADC527F76371AB418D8B5CB95385A588D3767B1C07278ACA50FA7C8DDADD5F67E6E07A4335AEAB5588D21B7096C3C84BF2629CABD5E04F0989B85E5F8E74FB085DBFFF8FEBD1881BEA87ACB341F8AF685901349A467CFCF99F909B1E2719DFEED4EADEB6AF88637F5C5E8B096D0FCD4F8F4DE3C9D23CC57382E17C32C6C66EBD8768C66054B7A326EC34FA8ACBD199928479D704E3DBFD2C93F1EDC1CDB78BE39688F35DBD536EE567EDA36FC7687D9D30C791FA08BEA4B6E57B32B3E858CC58D9A0F3D5B9BC6C7CD7AF43EE9869CFB87D463384AFD253F0C1E93FD1388FFCEFFD6FFC4AEC263F252599F2A59EDA80F1EDEF1FDF6E52D6C1D2D687CD8D3598D4EA5DCB6C7F273DF0FB91886F57F50EE36EF83994942950C361196F9F93F573C2B79F4EBC8DE4A905DCD49A903731804BA585F43AD9DF76BDAD03492366DCE96846CAD426EE36C971AEC988335931F8E44134BEBA9F8E93C5053895918462AECC87910FF1BDBA9C963B5F98856487C3E3F8B8A46EC171AE3C590F3F53DD8A5B757988ECE946EAF24B443728F06D7129FE9C5588B385C5C8991F17FEE71B39F7AE509C888CA929E1BFD2329AA1D690B8A7D1745D81D65F02BEDD6D3F9CC83EEFFCFD6730D53760A4A9198B0E1BFD8DE079C3F85B4CEFE16C74F26CA4AD87EA5AD01C9F8AF9C15E6ACF33BE9DD9E7CC3EF7AE032ACDB8D7F26E674E44739CF83E725EB5B7BB4DF89DB7CFC9FC44E6ABEB9D5DB8DD52875CD11CF2AE143E3085D3392938991647E72D4FF6B9DD39E1F199F975364F6DC0ECF377970F36BE7DA4550DA3B205F646CE5E6CD1782D43F49824F24EBA5F99EFBA4F671816DA50BCBF3DAAB399EE638F1B34207F7D7D2BC6B869EBBD95EC63A7FEDF385BBF786581DE5FBAB142ED64F27B64E7565CF23B6D6D48B61885FDE7642F1DF94C9D70225DE4675D9C64460B124C7ADC6AEBA16589AF39DECF5CBC6D9CEEB34F1E1B83FCF973FA7F85CBF3825C39F78C09C6A11D7CFBDAE60B34B776BEB39D0E8BE7DAAFCFA22F2D09C34DBD7832B7D55762BEBD2C2BCB8D6F2F2B2A47D6CD70CAB7F765E7C35052C0F0DCCF32199E1F413CDF458EBCAC9ACBBF74C3F3479C7D4EE60F594F1BCD674F7AB6353C2532F7DD6BE3CA1A4D48E4E6ADED78DED46F467A72CCBE7580E1F9BBCB071B9E0FD635409B570043610ECC8D6A8FF775F74DBBF14DBC2F3329DAD33AB50865CDCEF36A4725F1E37F64EE295AEA2ADED94E073DAF66CBC8A2E377ACA903B32623661C2EACCCCFD0EBDEF6C391B6E6FF8F70052431FB9CE139C373CF3A40C6078D5F22F26D29BE672F784EF70B559409BFFB6BFDBCB1A56D5FED44DAC0EAC1E7A4B7FFA05C23E124BCB4CD7EFBE328E3B92FD7CF3F8BEDA6F3FDF6742D636B7DB6473B23AC199158B97C9EC4D0DD8F9CBDAE59047B3C96FDA6BDC43F17B7D341FDC3D5EFB2E64DFAEB6D1F160A79D2B7AB4F5F41579006B36E0AF33A353BAFC6D6CFD9FAB9371D78F61CCAA242BAEF65FB9E1693B261C798DC4B9E9C2BF3D5DCF3EC10E398B4417D7D1DC5F4ED7B7C3CEDEB216D42DA86B49114FDC1D6CF0FF6DE22B6DDC489B7DDC46508061C44E67EDE898EAA7DBED7763AA87FB8066E3C6D5F8FE7F316DB182667E6303EE172F70FC7A539D73ACC9572580C3358770E30FB9CD9E7CC3EDF956F7FFB6C26DD24A60D1AD49E8A46C59FFFB067BE5D9C0FF4FEF6DD7460BBCFC981B23AD89B5B30DC6F17EADD157BD56BDB8C77AAD1939A097D7E3ECA2F4661D1A0F1DB38F4D73C106C7CBB18CFEFF6E984FD91DBF19CF02E846B92642EDFB65784C40727FBE1DABB7ADCE2B13C9AB2E2BE5E8F28FD306E3635226EC888BCF9C98063349F6E76F4D17DF07C4CF4F88919DCD77621C5F636DE0B1FFF3C253D83FAB4A57596783F1CF9DEBB4B3C96B6DE41E4CB15989B9D74C373E2236AD2E4C05CA9024B1CDE933D910CCF199E333CDF3B9ECF1A3A60AD6F41F9F1CFB87123DA7FE4653FDC6E787EADB91D773B3A91641A448CD9864BDC9C12A7EF0D1A3CB7747460ACAB1BC3036FEBDD93F680BBF6DA63DB3875BD18AAAE85A35E8E8EA226CCF7D7FB6D1C06339EFB926F77C373915F33E2A74D7CAE819CBD308F8C49C2B58ACFAB7D1F2DA3F1C1897F38B9BC0417B2B6F65EF3F15822BBBB71B168CBE75A31877FD15D9D07D66FA913D9077FB7A901A78B4B684C74D9C4028A26FA11D9BE33FE39F10F979E9141E3EBD5D3B61CA1B82E15DF3EC2FDE7F6FFF394DF6F3C16A9F46EAFF731BE9DF1ED41CBB77349EC4F6DE1F13AD6D79669BEF5413234572E1EF8BC5AFCC24BC4A9E5B852598E2B9A4EDCAE53D0F335E7158A03CF4F87E5DB67B7959F1A19C7D3CDA76EF59E1A9DC2F2ECB4D7B699325984F2E3037ABF8D43C6B773F9B65621EF896F3FA84C6FD7142D7DA829AB434E46ACF04EB43D1E4B9279180F8DDDF4D96E6B4790691B0C388EF3E9429D1ADF16E7E054762A8D891E39328544EB10229515C23D2ACD563BF659A751599283FB99A530F7B77B6DA7BDDA6646EEBD40BC86D52E8BDD53FCF3079177DE19FF7C50142FD5D73AB0DB7BB114FABDDF32CC3E67F6F9761D203111781FE70423F9BCB54B0F5B5313ACEDED58754DED896FE7E701FE77DE3E2F25F641792D226AEB7045518C9BADDD08CBCDC5B5EA52FFDBE78E71ACD72BDDEBACD56358D942EBDB939545B9BCBDB48DBDB30BAB73AE7DF7C751B6CFFD85E797EA1B91E39AF088E7FCFE6749E6F237F1D5CA9A0CA8ADAD457E56BCC7F8E7DBF976B21690363511701CE79327BEFDD184D9ED19559A71CAB3130C55AB9B9156548151E3E0567BBEFAC16F73391FFF9C24FE774FF1CFC787AD585FDADD9F25C37386E7BE6C9B60C6F317E9996FE39770B6F3FAB31F616E376079DCB0273C5F5C5DA3F300FF7B50AE9FBFC1F3976FCECCF0783EC8D577797903DA82477B6F9B962E2C3946F6DD1F4719CFFDC5B7A72E2CA3907B9722794F7CFBE01EF73A6ECFEFB8F6868B7A90988194940464263FF01AFF5CCCB787AB5B71595118701C17DE7F3CF0ED376B8A712A3546B8E7E36317505E56825FFDDB07088F08475C7216EA6B2A0ECDB71FA6DFB7F3ED2B95F5D09596C2D4A04253740E4CB57298EAAA19DFEE27998C6F7F7FF876F13AD7A47D12A67A352C2DAD58599CD8D3FE76E7C213D8AD66E1F760DEDFBE7DDD6D7460088ED626388786F7DC36137A1D96675DFBEE0FC6B71FDE3EBFA2E943DEE488DFEC7355B7168BAE29389C935EE39F8BF9F6828D9788F5E2A33510C913DF2E5FB0E1765B9B9B7D3EB7B40275EF309495C5B4AE4FDFEC85F3A77DEE312F8A7F3E69B0E2C9C67334DECD406F611E7A126330CBCD3B52C93FC87BB114FABDDF32CC3E67F6F95EF7C36D2F7FD4F7B71FB4DF0E3B0F48ADDF52CA0F66BE3D46A715F2FE583FAFEBB6627EDC8021B3556843B17FB847739348309B68BC93E8FE3EEA8B8DF8800B348EF389F891237C3BF924B1D8498C76F28C2476AA18CFF93AF7F5E9E198DFC0E28CE7B6DDAE47BE9CCBF9F8E7C6DA06B86C0E180AE498345B60E57EDBE4EEE9CF2B85B3AFCBE73AB0DB380AB6B99CE139C3735FE239F1614DFC4CCA743AA43B2CF4BBA77987FF9DF8C8CC5F70099F743E12CD8F81C4F3876523F823872D247DA41CC3AF12BAF141C9307E16D3457FFB5D9D4DB82E6B1AF728DF57FA1D683CEFE26C7AF2FF24111EC0537EB76BBB9511E3F9D576CE3E1F1FA6797FF0EDE76EC6A128F7210A1F65E06A44048DC7C2C73F27F1581ED9BA84782B613999142B63FBDA0E8DC352253E6ECBF1EC021CBB7D1F3707CD886A94E396EA6DBC543E1ECB9F4F9F470289DFF27D1CD21EDEC7B0C98495B5F51DFD31BFBCB2EF3EDC6FBF937C5F4111665C0B700CE8303F3DE973F97BBDCF9BFC83EAF77ECB88E5FB4B66A074C05BF9DDE44B29C75BBEBA5E199C3AC08DD7DA827C8FFE64C47B52F7B2BF3D2D23132AB51ACA37FBDB490A57B520776901A7F273F07D673BAE96CB3DCE3BE4BE474B4B426CA813F9C590F576E05471A91B9E67CAA269EC88DDF6D7F37115B7D787C48592DFFB7E5FFE64E8FDDC274969A90D88F9E135AE73CF71E9F90FF8B0C488F30B6BF86DFB342E8CCFE1B795267A8DA43B8F9FA27B64168F5757251B87FE9A073A7A7AF78DE7FEB2CF2FB71A503C6BF6689FF37EFB25B1CDDE9CCDECD16A61B2DA51565E4EF5DB533C96F82E158DB772B5BE06C953F388EEF4DD7AD37E131FB7E544720C4E67A7E0E6D01432473A70ADB652B8272D632B1ECB89B317111B15093D39F3B1B62C69FCF383BCBB0E295B3058DD08435515E6F4DD3E977F90F7E260B3CD987D1EDAF6F9BBFCBDBA95D9E5FC799FCE407D5228556A58145BE773C9FEF69B0D6AA48C8DD1BD429F3E4C419AC3BC63CEE1EFFB4E6713624391736D898E09DCE5E64612CF42B8571643F7193BA617313D39EEF159768BC7B29F395FECEF95A4129555C0F3ABDCF50F4B0769FEA3D6197CA99BC257BD4E5C985DA6BFC52C3D8573FE095D87956A1C06B37DEE2F3C8FB7388418DEFEE0DB953A27AA0AB2919EFE5068C3EDF1588A5FFE48E3ADE42E2F533E9B8F8B120C898FDB423F8D5ACA95E53F59A55C197F8F4AB3D58E24AED290518F72EE7DB741A9F2DA4EC13C97FB4207F62A3FD8C631C3F3D0C3F3AD673BFCBCD8DCD921E479BE9DC48B22F346CCB005F7389B8FC47C7A6024B1A75EBBCD39FC7D29630E1A1B2AD16EA731A3A2F4261A9B81E4F97BC57C7B1F87EB52E8C05EDBB0A4710C11DC5C4E52B8660C5F25F4D1FC57493A9CC8D2E16CE110CEE4E8E8B5C137F140A41C87A18EE7444F4EE5E6ECEA1F4E6AFB5CAEEA434F8712376FDF44942C96B3CFEB69CC2F229FEC877B34AE47544F0FAEB774E16245192E37689034185CFBE108DF7EAEB21EDF64E6218A7B1FBAD1508D9BD5C53BECF38BD76FE3FCB797204B2B84D3AA0BB87DBEDF71CCF09CE139C37369F0BCB4AA4AC8FB633F9C69660DC559A992E880D4BAE6AB7118CC78EE8FF36AC40EBE20CF1374C1D3FA794F51A124679578FF70F76432A4E715A328377DC7FA39E1DBCF643EC477AA1A5C2CCE157CD7C56AF53ED3FFFD26C2B75FE2DA2C8C1B2B275353209B5A41F1D480DB33F2EBE7C73EFF13EE47DD852C365612FF7087E9F7839E553A8CFCBDDEC7CEAB05B70E84EA79B59985A714CBB30A865190BBBB9FB3FDC824674B46EFC8309F9185E9A848E1FCF60E7F2EEFC87BBAB6B9B024B90E48AD6BECBC9A6FEC736A93DB6C6FF3DBEC73F249F63D1C44A6B76B846F77183A5056522CBC1389FDC95C5514E3D1FC32329D238831E811671D438A75C82F58BD9744FCC97CD758876B6A35EE362B1137368714BB1931BDEDC23D640E2075E3F9F6A98D1F6137F4A34D3B8B74EE5A6AE328FDE45352834DC8F3D772B92465BFEF569ED9E7CC3E67F6F94E1D9859798502F908060DD3E8D3BA2493E9B03FC1AAA31FF6BE414C1BF541AF0352CBF1D538F4D73C10AC7CFBF6E4533C17F1ED56B316499C6D4BFC9A1B86CDBBFA877B601BA3FED7028DE37C22CF98CB3D63947982C64E9069B548B10D23A6EFAD1F7C95669CEE7D494A49445E7E1E1E66976371CAE6B65FE40BF30A4E0CCEE2A3063BCE3897F0EFC54338659B13F67F92546999F5B86FC55FE398E139C3F350C673F2393DBB0ED3CC268AB3FA249339D86EC3D24817FAF2E43070F343B0EB80D4724211CF77E3DB8BD5A36EFB0E76CB3FE0ECBDED3C445AA909459A719A7239DB90CF2BD48E1D324744B13CBC3D8FA7FCF6EFE2782C2969E95094C9A97FB8B4B4B45DFDC3C9A636299F1D681CE713FF8C61651A9CCE49C195FA26FA7CE2B836C43F5C934645E3B16488E2B14489CE73FC6E6005BF7EA0C1F5D7AFF07F520CB8B4BC8ADF8BCE739094F1EA05CC2333EF6C5BC6B733BE9DF1ED4C077CA50352CB617CBBFB7B421A67E791B99E9FF7C9F9BEB081497C655AC09FFAC6F13B1587E51B9BC2F50A0E13485C0E72AE909C13DC7EE670B73386240688583E49AEF9F5373628F151EEF098177FB73A5684FF20F158540D2A213E81986FF7E41F2E927B76E27F2DD0382EF0ED6F9EF193C40C5C2E2BC4F5D64EE44C8D20DA03DFCEC76148C99563D26977F3B7F04FF7FAF19F8F95E0E709BDF8C7B3755CAAC5FFBAA116AE1FE792CEBA18D0F7F2BD963FEC7DCC3E0F5EDB8C9FC37CDD36C16A9F331D905E8EAFFAC05F3A2035DFBE1DCFC9F9BE2BB30B089B5AC7E79DA3F843831DA7C61ED36B17579EA1C9ECA23139887DBC7D7FF54174A84E6911EC4C92BE342EE2ACEB09BE6873E21BEEF3CBFE699C9F5B15AE5F185BC1F8FC9A108F65D2D20BB9BC6A473C164FFEE1325D3341775E6DBB7FB84CD724D21D76373C27BE6CBB7B3A691C8681E927B076362357EDC0DDBFFC40DB24824B5FF44EE1CF5CDB913623181EBEF14C6833D26FCDD6798FE75EFD358E199EB3B99CE139D301A9E584229EEFC6B72BFBA6DDCFF925E910D1C86178810961D97A9C4AEFC789F4017ABD82C356BE7CBDC8D73E893D3FDAA6444B7C22DA527231AF53EF99C7A8A91D727B9FF84D8505C7EACCF866F629FE5FE110BEB0AEE2CA94CB8D3B4EB7CD0BF1582E865F4356461AC2C24E2222E2AA5BFCF3A8FA1CDCD30DD17DF784C3BEDB455270C53F4F34E971A6A20E5FDE27F1585CB8519682BB1D4D22BEFD148DC7F2F1B18F111E7109D76F44A2BEA1D68D6F27E9D36EA7D06667A656F089C6CAF876C6B50615D7CAF876A60352CB617CBB34EF2062DFBC16C30C9CBA5EF4CB15D0CA2BB0EE1CD8D37F91B4DD3EFF45B601BF78D0810F5453F8D7F41EFCA6CAEE86E762FB7CC0E480CD328CCCDCDC1DF639F1F74AFCC3C5F5B6E25E5B032ED754E1665B17EE7534071CC7F944FCBD7EF9201A9F4446E0546612AE1B26704759846B556F6316AB345BF158D24B6A693C960A5533D69E3C76B3CF4F8EADE2E7093DF8E7643D6DB34F5AECF8AA779CD9E787ACA72FDFCBA594B9BD7CB0DA66FC1CE6EBB661F679F0EA80D4727CD507FED28160D9DF2EF61DB4BAF692C6A7771A87F164E335CDEF19CF5576619D97A40F38FCFE6542377E11DF8B7F4ED0E27F4777E01887F9FCF5F31C5E93B39CA4ECF8C21A5A9A1A047F49DBF976E2FB287BD2817B5A23FD0C347E7B4AC40F8FACBF9F7E12FF4CF16613E46B4B6E78CEB71B89C742EA4AF2641F01B9B67D9F4175BD65C79E835EED6CC0C731C3733697333C673A20B59C50C47329FDC93C55366053A51612F96EAB6BC1885A0D6D6929D6D796F7FE5F2F76F2ED3C77FC95E5313E2A1DA479F13531DF9E90918BAB97CEE17EACCCE3FE76C2B75F6B6AC7D5BA1AFC21EA3E141B8B01C76F4F294C5E8134D7383EBB9F88CF6313702AFD81886FDFDADF4EE29F5FB8781EF7B6F99379C2B5A759D301D7F02096D75E6069716E7FFDB9C7FB18DFCEB856C6B7331D607CFBD1E2DB791F422F33B2043F42839999587FF6238CCAAA7DBFF7D4D599DCF0FC0BFD1C7E1AD7839FDE6AC587E583F840AE73C372C21D5BE656E959EAE66E2D46A7E6909D9AB8E3FC39CFB79F9717E2BE418713296950AC4F071CBB3DD9E79F2567E093C4047C162DC31F63A370A934DFCD3E27E7CF8BE4A5D01A06A1E9D4616EDAE9E6EFD5D6D1056D4D071ABF8FC5CC406350BE971F56FE41DE8B0F5B4F5FBE97FBB23F82D536E3E7305FB70DB3CF835707A496E3AB3EF0970E04926F17F3B6BD6FFE937C9F199F8359D9086B5BC3BEDB899C57DBEECFCC93DF33FEBB6AE0ED33A8B55694E62440D3D129B4218FE74725A9B83A93BA35F59B919E1C83F8EC5CB4689442FBAD736DD19E9881CEA474189BFAB1E4E80FCA71CCF09CCDE50CCF990E482D2714F15C0ABEBDBB6F9AAEC7F2BF8BF7B7F3F7F98B6BE5FDC990F8E7093137505492ED31FE79A2AE19E78A8AF07962227E7BF53A2A5E3E09383E7BB2CF4F3C7A844C62A773F6F9AFCFDFC699AC58E13AEFBFFD6AF855C862EF23E2AE0C8579D93BFCB76FF669A92FE760E5D918DFCEB856C6B7331D905A0EE3DB77BE278CCF3EC340DF14FA742E6AEFB575CDA0BB735CB8AFAB774AD86345CA3C7BF5031AD48DF453FC7F7EB3CDDEF87B55B5F7A1A2BA06351572AFF1CF2394958833F4E2F89D38EEF78D80E3B7A744D6CF4FE4A4D3F5F33FC6A7E256E55BBE9D8FAF762F3A1AA5E515E8D7E9298EF37C3BB5CF6F47A327FA014C7FFB3798B70C06E57BB9E43AE025CFECF3E0B5CDF839CCD76DC3ECF3E0D501A9E5F8AA0FFCA503BEE0DBD3330790576243657617F26B465194DF0F9D731D5D1A0BDD474DF6A0AB34E31CB6E8A98DDEA0E65243AF24FE640E739FC1EA44EFC03032521F08F2B7C73FCF5958E1BEBFA4FBC6038DDBDEECF35B6D3D48B05AE8FEF6BCE525A4DADE3E2B697752B7CE01338DF3CEC76311B78523EC320C7FF75FA0575460A5283B28C731C3733697333C673A20B51C86E73BFF37B7C88CAA6A3362633AD1C2D9E511118D782437C1343041AF7BB2CF099607CC3E7F932F56F7A128331DF2927C41FE515D3F5FDE7C0585A26C2B1ECBF4A8D016C43EB7B5F4D07889AE8232ACACADEEBB6DE7A6173135D08BE5D9450C5656C0A050A02FAF044F96E6251BC70CCFD95CCEF09CE980D4724211CF7DB17EEEE9BE60583B4DD08C051C83A54CA4CD77AB3339AFD6FDA808BA3B77A0FF4F7F87B9F414E1DA464A0A3D7FF0AEB69D9B5B81A9A68AE6475A9BD194948F05AB8EAD9F1FA00C5B3B65EBE74C07D8FAF9FB705E6DBB5F92BDBE931D46E67EDF898EAA7DBE5BFD1D272EC2F4F965CC7218BCF4E5E7F477729EF047C0CDEF8FB7B65D7EFA0AD37D5B311CC7B40318516B30DAD1C7DDF762DF7D130C3A20D53BF641CA30DB8CD9E74C07987D2EA57D6E18B260626115134EC7AEFA2DB5AEFB7B3F1CFF3BF1F5EA29FE79E28811697633EEB47520676921E0D8EC2991F5F39B1A0D1E719F97140AC40F6AB96775F70F47CE9FA7A467D0B82CB4CEDBF6C319734A60BB750D230A15964B72042CF78AE7A2F2E4FB7CAD1AF3C9F1582D2A85FDFA7558AF86C312710BEB8A12BCE4DA95DCB3F9FCA5DB99F780EB00C373AFE583752E6778CE74406A394705CF67569E53BCEED719B9EFAFDDAE19ED7348CBC9C5C6DA568C4C29FDC30503D7BA9FF8E797EBEB7147598B44AB35E0D8ED2D91FDED51BA5EBABFFD5A8DC2ED59BDC53F27F527670CEA548D7878F632CAC2BE82FE6FFF061D3722F0C34F7E22E079BF2C96B613E120C927CD8BCA93EFDD51D1B034B5D1B6E5F9F6696D0B6D736B7A26BD47A952A3B5B8C8ED8C5C207580F1EDEF1FD7CAF876A60352CB394A7C7BB5BA1D4A65CD0EAC5F7AF1234AF3F276FC2EF53BC85EDFC90E2BD3DBB59CD24AACAD2D63C86C15E46F8F7F7E4DA946C19213974A6B51F13A38CF9F871594E24CA91C611999B8D9A8C6AD86DA1D7CFBC0C828D2D39368CC7797D5E0D616946F3F770F9684DB787A3712CF9756044CDF0BDF3E63B563B42093DE6BBD7F1F86CC2C8CE4176DF902D4EA8532360FFF15681DD8ABFC607B2F9752E6F6F2C16A9BF17398AFDB86D9E7C1AB0352CBF1551FF84B07C4BA5ADE62C0C298D1E335713A72784EF8E297AF515E5B83554E6647B7CE63FC733E1ECB7D8311F1E6A18063B7373C17C763C974B9769C57233C7B7D5327140A398DF9BE3831289C2F207C7BFFED68E83FFF0C5645099ED4D6510CFECB5FFD95773C7FC39B93F2E4BBABB1038B1959584C4B80F39E0C93B2184C3D4CA57C3B5F7EE3F94B583DF81C08980E303CF75A3E58E77286E74C07A4967394F07C7BF2473C9660E05A79BEBDA854816FAFDE4256DA43AFF1CF493C96E34515F8E651014A1782F30CBA381ECBAF4E9FC28DBA6A11DFBE15FF9CF0ED572E9CC6777764A8AFAB12F8729E47EFE3F078E9FFFE0B3A39FBFC2F7FFDD7FBE2DB3BA3A2D1127112264D0BD4B7AFA033B390C3EEEA1D7C7B434A32E3DBF721DF5F32DF17AE95F1ED4C07A4967394F8F6BDE2F951B5CF492CF07EBD0965C5395EE39F93782C8FC68CF8EDED4854BC0C3EFF70DBE3B17C9D938753A96FFDBDAA345BF1CF0BCA6B5152928FAC920A4C8E3BDCCEFF93FD6FCF391B9EEC5D7B9A94BC6FFB7CB8AC0615BFF9373CCE4A44C717BF47EBDD688C64670AB177C83DCC3E67B69914F3809472BCE5997D1EBC3A20B51C5FF581BF742058E29FEFA70F7D35979358E0D5AA2664E7640AF2BDF98723DF8315CFC5FEE148ECF3E4B1B767E8559A715A373E1E8B6D7619F393136E6D41F0FC55D829FA7D2D2191AE9FF336FA5ED6CF5D03C39889B886575C5ABD1A8E49EED3C5A5175C9EAD9FB3B95CCA7980E17968EB80D4724211CF8F2ADF7EF5C60DE455D623313282C663213CB2A7782CC7931271BD86EC317B1E70FCF684E7E2782C9FC6DC47544793703D4A568846513C965357EFA130236E07DFAEE26C73C2B913BE7DBFFBDB6B236EA34B761366551D5437BE4173420ADA1EC463796186F1ED8C6B95741E607C7B68EB80D47218DF7E04ECF337E7CF074C0EA89A9A51989BC9E15E2C6AC8D934859EE2A0381E4BB2B11757CAC99AF4EB80E3B7A7248EC772AE4C81A8369508CFCB393C7F1B8F85D4796D75C9EB5970B21FEEF5B13FECEBFCF93487D5E59F1D836B488B361987EDD925581CB7D2327C7972FEDCCABD03B0F3E7CC363BCC3C20A51C6F79669F07AF0E482DC7577DE02F1D607CFBDB3CE1DB49BEEF0D27BC1BDF7E5F6FA29F81C6EE77F1ED456B4B88D70FEEE0DBF9782C7C9DBDB513C173F2B91FBE7D6137BE5D549EF1ED6C2EDF4B7986E74C07189E333CDFF37D6FECF3D2AA2AF499271175FD1C4A38BB561C2F959C3F4F34F620D1A4C7A9C2729CCACD82E2F95AC0F1DB139E5F282F473639879E91899399D9B854BA335E6A7C4A3A64C446E7EA2CB6AF3DE1F97EEDF3C5B21A381A55D01615635ADBE1D6E6CC3E6773B994F300C3F3D0D601A9E584229E77F569E9FF9344787D4FF9DDAEEDB5CCFCF2CAA1CAEFF5BEA5E5C7827FB8227929349A469C0C0B83B24129AC9F13BEFD4CE6439C2AC8C39D862A5C90E7051CBB77E3DBC3D535946F3F5B988FEBDCF3F2D7A265055BF53B7902A565653BD6BFC5EBE2F4ECD901D6CFC979B5B6E81B585E98C2485B975B9B5BD23284F57365721256D6D6834207BCE5BDC99742BFF72BDF5F32B797F7551F48310F4829C75BBE9A7BAF673A109C3A20B51C5FF581BF74A0A3A777DF781ECCF6B96B7E5D88C54A628979CA8BBF8B63C210FF707DFA41EA378D972FF6DF7E55518C58C3302A5EAE22D1660B386E7BB3CF2FD5A870B3A599FA6FCF18B7B83D2BA933A91BEF1F2EAFAC0E065DAFD7F6A47CFB3EFDC32D0E0CE3715E3E9E96976229BF80962189F98763B619B3CF990E30FB3CB8ECF360C6F3BA3A13325EBDC0750EBB48FAB8751227CC0BF8B8C68A2FADCBF8A0508F30D3AC70FDE2CA3358E656295F4CFCC3B91E3F455C42DCAEF158AE377720A6AF2DE0D8ED0DCFC5F158AEA95448B119DDF09C9CAD4FCECA474E661AD41D1D686D6DDD956FA7790ED35FFFFDDFEF09CFED86514CEB8C18696EC5A27DC86BBF313C6773F961E70186E7A1AD0352CB09453C0FE6F36A35B5436E78FE9B0A0B3E2A1BC4C58DD7F8D5C32E5C7AFE1ADFD8E685EB24A573DF79FF70241E4B5656068DC7929E96EA351ECB25BABF3DF8F6C3F17C3B1F8FE57295021195E5C2B5936177A078E31F4E269321292D97FA87338F8C783C3BF67872EA6D5BCFCE61D3B67BFC74920C5DA3E89685C3615FC4637BB7D77E1BF1104B5D0A1D60E7D542E3AC123BAFC674406A39ECBC5A90D9E72A3BFED83C2EA4FF7ABA01FFED4425FEE1723BFEE79506FC0F2EFDEC6EB370FD3C677FCF2C3CA56509DF3E627740A5AC12E47B8AC752B4EC44447559C071DB9B7D2E8EC772AB4583C896861D7CBB75729ED6F37E7A11A6473DDBD007ED83A10E33FAD39361EF35E0C9B4D9E37DCC3F1CB3CDA49807A494E32DCFECF3E0D501A9E5F8AA0FFCA503478E6F575A10F3C36BC1F63EBFF60A274CB3F8DA38873F999628865F5A5A17AE5F185BC1F8FC9A108FC5F5F8096AAA2B69CC12319E8BE3B1DCD31A71A7B91915AF83D39F8C381E4BECE020E2B43D6E784EFCBD36B5B6D17AD6A89BA06E54BBF97BF5C73826FBDBDB1A7AD9FE7689C67128CEE50CCF990E482D2714F1FC7DE2DB49FAB4DB89AF2C8FF151E920BE762CE3CA93A75EF976D9C314C4CAA228DF7EF5EA1537BE9D8FC77253558358D33014CF830FCF79BE9D8FC772B6B0909EB1E3AF91F8E7241ECBA9B01388B8721E37BF8F457D4D8577BEDD473C5B65FF147DEF4AD34E33BE7D8FF2FD25F37DE15A19DFCE74406A398C6F0F6EFBFC0BFD1C7E1AD7839FDE6AC587E583F8F71A3BCE18273DDAE7241E4BB7D18294B8EF778DC7926933202C3987FB7D3DE0D8EDC93E17C7633953948F4B856FCFD6A9345BF1526569F9505616A35ADD8131BBD9AFF639395340F621F27D40D648A4D40129EF63F679F0DA66FC1CE6EBB661F679F0EA80D4727CD507FED281A3C6B7EFF7BC9AD5B122FC87E01FAE6FA77FB8A392489DF97623F56CEE6887AAB5D5AFE3983CC3958D2D0EE532F7FEC1F09CCDE50CCF990E303C0F0C9E0733DF7E90FBF8782CF7626311763E1C858505946F97CB4B84F8E7E2782C61A989385D9813706CF694145C3A515486D2E76B38763F115FC5DFE79EF5AD7D4EE29F376954F8FDEF3FC09DBB37F16DF86D549414F8956F27EF521F56DBF0AB0C2DBEB1CFA156690DB80E30BEFDFDE35A19DFCE74406A398C6F0F2EFBFC40F7BDF1F76A185BC0F0F020A2226F517FAFED5D3D827D2E8EC79266ECC5D5FA9A8063B7B77449DD82E30FA2713CBB00572B0ADD9E55A521FC44136409A9282ECA4367B796C3F175AFE7CF7D659F0BFB15179E32FB7C8FF2FD25D31F3AB09FF2CC3E673AC0ECF3D0E4DB0F735F8F73134BA37D9477E7E57B8BC792BBBC1C70DCF6669FCB8C162498F4342E0BD98F2F7E5695665CA833A9E723453D3A9A957E1DC7E4198EEB5CF8B27F0A27AD0B0CCF2518C7A138971F253C9FB6BB60ACAC86A9A68E26925F9E740AF57F3CBF8A8DB535B732ABCF5EC3AE6908691D905A4E28E2F951E5DBBF4B2C407ED643A427C7798C7FFEC8D68573A59534FE79786D0DAEAB5548B61811AE52E13B75233E494EC397898938535488F02615BE8C8FF77BCC96EDF1CF7F7DF132C22B8A85EBE2F8E769C9F13875F9263213E3FCCEB7FF22D5888F1BAC08DF78C6F8F63DCAF797CCF7856B3D4A7C7BCEAF3F8049590FB34A4D536B5A1994C77F43AF8D8D2EA2F45FFE09DA82124C8D4FC15C5381A5B935F4E69521F31FFF81BBE72906DB47309C9F10723A20B51CC6B71F01FB5C14FF5C6BD0232B2DD56BFCF3F82E15EE7434E36E5707227BBA2173AEE26CE623240EB4E2CF39F9C89AB4E25657178AB93227B2F228EFED6F1B5D1CFFFCD8BDEF10D9D52AC2F3ADF8E711B7EF2125F1C13BE39FFBCA3EFF43EB247E96A045987E92D9E77B94EF2F99FED081FD943F8AF6F9FAC64B3C7FF152B8A6F8F433B7FBA6165FC1D5BAE56B797E7513F27FFD259C63CB30E5A5C0D832047DFC5DAEFC73947D7912EBCF36F1E837BFC3ACA133E474406A39BE1A87FE9A0718DFFE364FF8E7C6F66E34B53609F2B7F3EDC52F7F44F1CA02B297D650B834477F8FD1EA9032E680ACA70DF78D26C8FA7B913D374FFDB988CF7EFBCB3E17C73F2FE0B03ADD61F7CAB7671654C1621CF0EB3826CFC0EF6F67E7D57C3B8F1CA4CCFB3297BFCF786E195A80EAEBDF539FC7248E41CECF7F2EE49BEFA7608A1B93AB33D3D8E4EEEFAF50E3D17FFF092D5B1D76962BBF09E577F170B694533C1FE56CB25597332475406A390CCF8F0E9E9358E0ED3A13AA2B4A05F947F5BCDADCDA0B281B6A703FA714A3FA7EBF8E63F20C627F3E0CCF199E871A9EDBCC4BE88F3E2F5C13DBE78D4965986A2D73AB7F4B620936161DA8B99D81656B175A1EC463A4568EA2639FC3DED18CAE073121A90352CB09453C3F6AEBE7BBAD59F46867763DBFBED7FC41CA54D75B2497497CD5EFA79D7CB57E7EF72F3F50BF3FE493AD9FB3F5F3505B3F1F199A47EFBD73C2B5D24F3E15F2AA84124C7755B8D5DF35FF1466791EDAF294705466A3F29BAFB138D4E8B17C28E980D472D8FAF9D1B1CF3DC91F691B80A95105A3AA1743DC781A2C2B81A924EFD075DBAB7C29DBF320E57DD107C487CFED4607A25556FAD9D53B15D43AE02BFD0E651DD84FF9A36A9F377CFD3B589A5B616BEB40CE2F7E29E4CBCEDDC24C4F9570BFA1C584CEF03018CB2BD05F33005B490ACABE3E097D4AA4B027BEF2F8C721A90352CBF1D538F4D73CC0F8F6DDDBD0D6D185752E3F50DD8D75E7007A0B2AF1FCD96A50F5E1FB388E497C356F3E66834D077CA5DFA1AE0352CC03FE985703C1B7F378FEF4C58F68B8791B2BAE3158D41D1C9EF7523C57849D84A33E071343264C9B2D28F9DD87DCBD2F424E07A496E3AB71E8AF7980F1EDBB731CA303C3989F74C13968C4FADA3216A76724A91BE35ADF1F1DF0957E331D38BC0EF883F7F405DF6E33CDA0E7FE2D8FFBE11AEE25C2529CE256FFA5954D3847ECD0446762A42811E303468C5B26D0931083C599790CD7D486A40E482DC757E3D05FF300E3DB996DB65BF9607D2F673AC074809FC37CDD36FEF027B3FDBCDAF6FAD74566633833123D255DE8B8F32DE5E549CAFFE80FB0AA6B60AE6FC0B4CEFBBED6A3AA0352CBF1D538F4D73CC0F8763697BF8FE398E900D30192F7C7BCEA0F3CAFBE1881A74F9F78BCE7F1DA26EC8DEAADBC6B19EB4FD776DC67EB31E3B1D312723A20B51C5F8D437FCD038C6F675CEBFBC8B3311D603A40F2FEE03D593C96E0D501A9E5F8AA0FFCA5038C6F67B6D96EE583F5BD9CE900D3017E0EF375DBB0782CC1AB0352CBF1551FF84B0718DFCEE6F2F7711C331D603A40F2FE9857199E07AF0E482DC7577DE02F1D6078CEE6F2F7711C331D603A40F2FE9857199E07AF0E482DC7577DE02F1D60EBE76CEDF47D5C37633AC07480E4FDB18EC9D6CF835707A496E3AB3EF0970EB0F573669BED563E58DFCB990E301DE0E7305FB70DB3CF835707A496E3AB3EF0970E30BE9DCDE5EFE338663AC07480E4FD31AF323C0F5E1D905A8EAFFAC05F3A70103CB73AC6E935927AB43A8FF9DDAE4959E620E5DF751F897DFEBED6EDB06552D333DFBB7A4AA103E27A07537FF84326D1F7F7B59E8791B35BBDB73FCFFBD836BB9579D71CF7BED473BFFFBDBDCF83B96E0729DFABD5EF1BCF8F7A0AD57A8772DD43B5DEA15CF750AD7728D73D54EB1DC8BA1BC616303D660EB97A0FD8E7D0D1581B927DDEDCADC5C6C65A406407B2DE24D99D1321D9E7ADBDFA90ECF3B1D90DF475B784649FBBE69742B2DEF6A955F484689FF73837B1E21C08B97A93A4330C87649FABB556CC390257F740D5BB65C086F4E49890ECF361D72A264CC690AB779DA60DD9399921D9E766E71236D60287E981AA77BF6D1165B94921D9E7ADA6193C99B5855CBD476796A1ACA90A88EC40D7BDAA75104FE6ED21576F921A5BDA42B2CF4B6B9BB0BCB41072F59E5E7B8916B53224FBBCA96710F61153C8D5DB609D47734368CEED814EA15AEF50AE7BA8D63B94EB1EAAF50EE5BA876ABD494ACFCC829AAB7FA8A550AD7728D73D54EB1DCA750FD57A8772DD43B5DE24FD7FB1A6FDB1 MediumImageOriginalSize=179000 MediumImageWidth=250 MediumImageHeight=179 -MediumImage=789CECBD577B5CC9792EFAFE8B7DB9FFC7F6C53E17FB39E7E25CD9DEB692B7256B8E652B78246B9446D4048F4693490E39E40C732640E49CD140E79C73CE394734C0303A55D5E86603E80C8000C975B19EAAAED55F8555F5D5FBD65789C717C1E1F69DC8C3E3D27EEDD2E7D23EB967FBE95F077A9CBEC0C0B2F4394CDA1687FBC4D276861228150B279276325F81D3ED3AB1B2BBBC2757E77C91E4C4D2A6DFBDBAF3F844D28E64B6E0B05B4EACECF14CEEC4D20E84632796763453C25675EB44D2A64FE204BF7B309A38B1B42389F489A59DC895902F964F24ED6C69078954EAC8CAAED19BE022184DC39ADD767EEA3A3DFE8EEF3B8519CCB603F2BDC6D39C7E2FF9DC1F66B239BACAF712673BF9FD6112B9EA40DAFBE507294737F94E651FB40EBBB5814E32CD69377F9B17D10668DACD69CA541A4CCD2D42A3D51FCC93520B15095F277C7B4320C6DADA1AE11352E8499B5D58DBC0FCC212F92DC6FA061F22B99A84F1303EB78299D9592CAFAEB46CEBCD61347D9E508AB5F50D4CCE2D639D27207109303BB700BE587AE836A050EBDAEA397D5FDE7982ADC7CFF6B8EDFCD42D6E6D777CDF2D6CBF7CAFF134CBF792CF41E47B89B39DFCFE309BCBD3F27FCDF28394A39BFC71D46137F97ECB41BFCD8B6E0312B912D7EFDCC3ED07A3D8D8DC607A40F3411FEA5F5859C3A6408429E24ECF2EE0D1A3112CADAE416BB0E0DEF824EEDDBA879189718C4D4C606E650333CBCBB8786D08F7EFDCC0CCDC5C239EE6389B5D3A5E9F595EC3BD0743189B9CC6E4CC329656D6F1C1479F4128E077956FF65B1CAE03EF0562595B3DA77EFA0DA8BFD96DE7A76E69FB71C7F7DDC2F6CBF71A4FB37C2FF91C44BE9738DBC9EF0FAB7FE7FDFF6B961FA41CDDE48FA30EBBC9F75B8E5EDADD51B7019AA640A5C3D0C828EE0F0DA358AAEC7DEFF5C1ECF4C26034812F91416972606D631D4683A1631BE8351F347D85CE82E9B925DCB87D0B66B30999CA530C8F8CA05CA91CBA0DEC1F277078CEE1F9EB8AE7530BAB305B2CD09BAC07707285B709854687F54D0136098F66F8BBB0828D8D8D03D8D90A4FDBF9EBAE5A676498AB2063072A4FC714345C6BB2416F3443AED67278FEF8707D79AFF2BDC4F952E23969EBD527EDEBE0B06DE065C1F362F5099C5E3F22B178CFF5D5AD0D1C551DB64B9FC3730ECF7B95B9ED4A439D2CBDD6785E4F53A1D1133C37F75C5FDDDAC051D561BBF47B9577ED9BF3E6F4FCF5D3F3BFBDA9C3A7C6D8C075D8AD0DBC4C7ADE4EFE55D6738EB7BF1EBCFD87AB1E7CAC8F0E5C87DDDAC0CBC2DB5704128C0E3D8240226DF95EA5B7607C6A19C323C3187EF810B7EE3E60639E17C5DB655A331E4D4C432095927CCCE0F6FD214836F93DCB9F663CB77B73E06DB831BFEA247C2A7E2C7D79AFF2FDF6E5DDF0A3D5FF4E02CFBF3F6BC7479AC8C075D8AD0DF45B0EFA6DFA6D37876D03D40E27922B60B5BBF6D8B1E843FDD44E26536BA1D6EA6BF63183B9AD4D6C103B5C37799ABE58A121AE1E56F2DB4CF269B63A5E193B5C2AFF181A439C942F0A5F207F2C7D79AFF2BDC4F932E2F90F165DF8441F1BB80EBBB5819705CFBBC9F71AE771D7E120F2A71DCFA9AB35C4B0B6E145325B7DA1789EA93CC6FABA0B325508EB7C0F4A95F6E9D7DD9711CFFFF73D03FE2C0BBED678DE9C66AF75D84B1B388E3A1C44FEB4DBE1A86E5B1D29A6E72EC2E15FA49E17B69F4047704E280D4024F3A35CDD7925F5FC07B30ECE0EF71AEBF969E0EDCCDD790A97237A6C9CAD93BC3F5CC2F29A07BE60A1A7385F46DEFE96378B0B9EECC075D8AD0DBC2CBC5D653061646611C30F1FBC56BC9DAE87A77D03956B76DBF9A99B2F6F757CDF2D6CBF7CDD0DD9EC3DE583CAF792CF5EE473A52AF91E39F04501D2DF6790CA752F5BBBF4F787515B49ABFF35CB0F528E6EF2ADC2E6374DB07A3303D761B736D06F39E8B7E9B7DD1CB60DD0F5313CA10426AB0D46B3AD679B59ABF7C761873BAC7C273BDC69E0EDCC25F510B0BB7BCAC751F2F67A98D51E6FFCEE87B375E389ADFE7712BCBD9E9788D387A0C1702A787B898C9924DF5C412E95826E640A4E910CD6A56518C7C6D9FF82363FE236235C12057C6A2D12C1082C73F3484722D04ECE4371E3266C6B9B88D9ED887823D03DB80D8FC60ABF5404CDC8047463B3089B2D109EFD12EADBB7E0375810B6B9904FA749BAB720BF7A03D95898E3ED2F92B73F7E0A9B337322BC9DFA69DAF5DFDDE27CD9787B95E854F0E13076784427747AF8746614329981BE5DE73AEC9FB7AFBEF75F50DC1D865FBC896C32836CBA80E97FFD57681E8D63F18F1F4073E53CB4C38F20B87403699F93C9E81E8D225FACC22757B2DF5E850AA9EC63ACFFF137109F3FC7E2CF2432105F1B827B651A21BB17B9686DED402A5980E6D60D24C229C408AE0F52F617518783C89F767B7B3459C5D26A185653025BC9142A8130B6325954D23954A23112963C563C77F94A50E952705A92A8C412E489632B5744A5B8C57E6FC548FADB3B0D99970DCF2B991C9EFE8FBFC193FF78135E8D01B6D565826DC613C773EA5F79EF7D987962F0DE3983A0234074FC0D44AD16A2870948EF8CC02F5C01FFAB6B107DFE293BF361FEAD3FC0343A8C02E1ED2E950D119D1C1EA506C9F41678677E83E95FFC1AE54206B3BF7E1BE6C95114F2B5B5BEAABBF7992BB8740B69AF03F95205AA076328574A039583C3F31EF19CE4AB4A309CBA06731EBE5019557F188F5757B1333E81C78B8BD85E5EC7CE32F9AD511D903F4A3C4FE71F63792D826A34856DBE008F27A7F0787616D538E1174B4BD8914ADBF6A59DD23C3578EE0D34F03C6EB223178F2345FBAF01BE5DBB3630089E57769E61F98F67A01D9F81EADA37F01A9CD00FDD837E7894FD4F3FB781B0520433DD63B6B88E522E0DD9CD07303E7A08A74C83B50F3E46C26E41AEB00DE3C21AD6DF7E0B6B841F54AB5B105FFA06BAC945444D66A8E89AB2F36711F386B1FEE16748DA4DD0CD2C61E5ED33EC8CA041CAC1E1796F78EE70BA11270FE5CB3C7E14894C95F5E18ECD0DD207E73BE6A3159E6A4C71F0855E6C08E9DC5CBA2FF9586A1B771F78605479E155AB11321FDCE3D0AE2F3D4D785EDC22E3DD780EAE44118E4C19A27006367F0E125F7A4F5E06A9C3E3C2F37EDA4DB7367014F2BDC6F9B2E0F9ECA61421BFF7C4F43C2E53A2EAABADDBA0BC3D1029C3698F2160B221B73B76ECA78EECEE0C04123F24AA08BC816C5FF275DEAE57F911B69A11F3781175BA086FBC8F90D1F0D2E8F9AC328AEF8C19F0DD491BBE3769C68F45017CE79111BFD04720DC50638B6000A7E7AFB69E97B69FE1EED07043CF7DA1E889F2F62AA9E7AC4A8FA4CF0F35E169E950E05076B86C7187CD8D49E411866B3DC9EF7E23EA7F6E877BCA9E92C184D83A1F79951ADB76170B0BE4AAB8E1C9E222E94B2E4883382F09E29123B5675F77733A2F9AB7CFCAA37843E4C577A76DF8D18607FF67CD83EF8E98F0337D144A9EEE5075D8AD0D0CC2DBFB6D37DDDAC051C8BFECBC9DEA79381A3F35BC7DCBE1425AAA42C4EE845FAB462E953930AFE62763C94C2CC6FE13757911B6391024FA1772122C2897F7C4E90DE6211007D95C783459EE588E90C98204F9067A810031D2DF50BF9AA766FE08C9978DE64D2C6579A44F5E2425FD801BABBE04FEB8F514DF9BB3E15F781EFC441DC467852A2299F2E9C0736D1C3F98B3E2BBA316FC60D5891FCC3BF0FD61037E132940BEA639541DBE4A781E49941126631B1F69332781E77E521F11927E88B8478DE727393E4F10EE60DF14A0582C36E44B3205C213B3708A2570ACADB1FF85ADF63DF13CBA328BD99B2358189AC7E2180F1357263176FE01661ECC43A9F140EBCAC0E2CB3D2FA7234630FA3112C128625E1F4993DF48B3394F549FABA45FF1933CD1B058AA4AB84094F40F5B8DFFB9E56A3256D72062B3EEC993C39381C996606B6AE85ADD48A2D4B12DBF283DCFE78B18DF74E1E78628BE37EBC077A6AD6CADEB771EE8F1536DF8809ED3F540AFAB9E3F7864C6A3513D6E0D9B512A96072AC7A07598AA3CC5C8431D4627CCB8435C9AFE8BD0F3C3F0F6294B0A63EE2C7BC63D39E64E103742F86DB34C9660627076115B763BE3C054BE99D3D65DAA7FCD61D7880E4FFFF5AF1D9F716FAE2113777B0987FE1649950E39A512C1399AA6E34039287E6F93A74AD20B3B3CB0085558BCB18C989D8C65142AECF07808DFB88BB44E8BFCF40C76644AD67FB4E24C9DBEDD8BE4EDF1780957EEADE07DF24D7E45BE1B7DEA7EEAEEE7ED0271888D755E57DE4EF74DE5CB4F062AFB61EB908E2B3524FDF2767B9941DAC071D8DB2BDB3B38EB4EE3DDA7CFF07F367CF807821D673279D6A6168249C476EDE90E871311B9B2110FD52D76069E4AC5DED7793375AD44BFECC4D59BAD189B98647AFEAE408A8F36961B7A7D56ABC36FC7C6F0A7C5055C30E8F0C01A81D54578B7560B237967A7E9AAB58DFC9676CF0E0FD86C88ECF20586E7E4A9907C78357A48A778B8F05FCB7068FCC8A8D5C84AA4A87ABCA894AAA878487B8C46DBF6A5DD30ABD7BEF8B07D397DCCA102C6940E4CE8A2B8C9B732FF883E866195135AA591D9E14C66171BDBD0F5FC224D0C8F08A64CCE5A7193605CB9DC1EE35F253C97A92298207C87DA733285EA40E518B40EA98ED33D53347DB12CC4D23FAA36705C78AE21ED45624DB1362320DF4EEE4C4345C268599A6532BE20E23C3E326231B6FDA1B65810237A57A83E25E55734F0FC03BE086795F2869E3FAA543194CBE2A2C586DBD108C3F32DF25FBA1FBF7ED661D26C47727D0349BE10D560E4005FA8E3F916F9ADBCF7109A15298C2AD2F7C8EDB0AFAF20E10F209B48C3AF37231B4F76ECCB3B7DBB93983FAFA749DD767EEA2AD4B5BDE8E1C4161BAF7A03B981DAC0CB8AE7667BB26F99A3ACC3E6F44F339EF7D3F7F8741638845282A78696F28DFE4826879D70EFA5D5759647AAE79F6AF53833397180AF5F0D119CCAC4199EEB6C5E2C2ECCD5E6E489EE6AC766609A18856383DFE00B2ED25F38C9789CFAE91A916AAE00F7EEF83C577A8CF5CD309BC3AFE73D613042F3C59708CFCF113C4F34FA6219E9CB24A48EE4647C4EFDE640AE6DD96DAE1787E721A2ABD45EB124B234DC767EEDEE7E9D4170F455C073EA3799230397FD28EAD0628D1D791B38693B5C7358C4E585716E9EF81F1F78EF94CA086FF762659DD7D0F3F7791BF87073E3809E5F22EF2FE8B54CCFE9D9FAB37344CF091F88BBDC700A4470102C57DD7F88B0D9DCD0732FE109D44F6DEAD4354B247DD9DB177C09FCE9F1B7F8E70D377E220BE21F27CCF8F094D8DB25EE4C575B46F343ED88AFB59EDB9227AAE7CDE9BF083D1F94B70BDC598C38B3B843C61877499B1F32C6991DCE93AEB694A987E54C56449696D9F8787B5FDA744C5FDE79C6CED0AFF3F68FC858F9AC4AD9689F93DFFE15A35B557C43C6CFB742FE861D2E9AA46BE09E323B5C466B4041A345748587AAD9D2E0EACDF96769EE3C1F5FEC9F3F2F986CC8CA642819CDBBF97C8A68AE8A5B9E2CBEE0FBF0C59A079F2C3A304BF2781AE6CF659E1C19D36CE1BACF8B6B64DC713D10C0598D0EDF107E74D962C005A3157793499C55D7BE251DA3F79366AB36D0AFCCFE6FD34DFEB878FBE24A04738B41EC98ECD85669B04DBECD0EC187AAD3495C1FAAA964D7380F53872E6F111B82283CFA28AA7607766C4E543D7E54E329E277A06A340DD4068E63FFF9883D863344A7FEF7B001DF9BB1E04D6F86D9E0E6424932CE76EEB1AFD530D44970D28938E1CA0532B6A6F6B11CE1D51427C34E67C30E677578B0B8BA06915842F43C825F0D0DE137637398DC2EB2F6F995DD853F6FACE143FE26EE256ABCDDE2F4616171095ACA072877A77CDCEE646914799BACBC51D2EEDBED5DF6048A6C3D9C451B4189DA0F3C1E68AEDD836D6905FED97194BD44B6F25CE634EE3F179331443F786E71A4FA4AB3551BE85766FFB7E9267F54FBCFE351BA06C3018FD5CB70D460C930F92DB51E15811895D50DE20A51D66951D11850227ADE2DCEC3D4A1CB97C7CDDB7678E42E94E91AEB957594E50453224954546AD2DEBC03B50187E7E8C7E7D660BE3146A54FDD4FC7B09D7847C8EA828F8C7DA3E4BBEF7F1FA53C99F8ED9E1ADFFD48146098DEE9B9A90CA34038805854E3E0548E8E0D420487691ABD703E5FA8C2D6B7D379B52D9108DB738BD85E5C44255DC0D6FA1AAA2A655BCED48D9BF6CAB90ECBD9EAE3730DA983BADBCEFFBA8DCFF7D7C3FA660C49527E0BE17B31B7BBEF72186D29CC2FDA31316B8544E0ECBBECD40EA4D6A7E0D43860DF10C0211423190C92BC508ED3597F3AB581D3B45FCDBE2921BA6E45D86839F07EFFFCB96D63137ECAAB9E3EEB89B32576CB65E34B619A998776F821027A634F9C8FD6BDCF16227DAC0AB944A267CED6A9ECA765BFDA51D46137F9D3CCDBCB04038A6A1DB2E93CE25E3FB2648C67B0A4D87EF762B1D47739B2A5C7305AE2305A53F0F9B37D979DEEE7D81084E173259089C71172C5E01409A17D70EB506DE0A4EDEDFBC3DA61411DCFEB6141AB03218BA5A57CAB74EA789E08916FA8D4C14770D8B6BE894AB5CAD6C2B6C7F372631F4BC0686CBB8FA6EE9E463C3FEE3A7C99F19CDA52936225D1A7208CE38F502A1561B546072E3B75A58A105B6B94C86C759429144AAC5D06493BA6ED9BFAA9AB5C57317B94938C65FD3245C3E65B25EF9D52396E6E5AD81AA7EF2F39F19D710BFE71CA86EF8F19A1DBBD3BEBB4E379272CD88FE7EDF2D1AE2FA7736A759B18DD6BCDDEEF3C66B6B9551E19A3272B08C52B088472303AB22894B61BF236325EADC7D7AD1C1C9EBF5C784E7527B2B40EBF56870C19ABD3F0B0D5B6472644F865C0604640A3876D95C7D64D1B2666D87955A950684F9CF47C626ADFE0F10344B7721DF3516FD3D436D5FCDE624BD4DA2AD1CFED788AE5913ECCE64B7886C895C2396F0EFF45FA93DF4DD9F1CE8A131F08FD8816B7DBB6819715CFEB32854285ADDF4E119CCE65726DFBF290D5CED6D3D16FBB33BF0817716D0E1FECEE2C66E69DB0525B822A8AD1091366971CB0DA130DF9BABF97BE9CC3F3D387E7D1701EEABB37904BC50FC8C7E8BA09910C7EA315116B6DBF42C8E6D8233FB7A2C2FDB1754C8BCC7838C6C3D8BA0677EF2F6068928739951BEBEE0CE674CF3900B5CB7A1C61A4E219B6E75235F408A9A0FF403E599B8E2690D4EA5109845818B5FBCAD5649C684DA0924AC1BF21827D760E8AAFBEC2563C894A2239501B384DF3E783E879365322E32A1F6477EF231D0C74E5EDB96C1169321ECB65B2CFDB9533B327FDBA4CA1B2C3E698E81A443AA7BC7F1D24A7E727AFE7C3BA08DE23D8F626DF8F9F2F3BF13B5518EF7AB3D0A4CAA8105C638F3F8C8C5C8992D1545BD31C8931ACA4F2740E86CE8B36C74FCF16AE872508768C91F86EC713B8190A34E624269E7D8B2B6E0FEE2412B8130931BB6F731D50DE5D0CC550349890E0D33DCC5A540916D3334DCBDBCFF5BCBA5BD6D0DC1C0CF3CBE05FBB8D89BB1254BD41548542946EDE437E7C0425BB1BDB6B6BA8CA6447AEE7A789B7D7D7B134E6E4C8777491EF1490ABF6F01A874406EFEEDAF8E6F93B8F58C2B8905F6B805BA240C46E6D9B7E73D8EB707EFB61EBB09BFC71F2F66182A37F7265F1E34746FCCB5D2DDE1207989E6FF8E93E0A57CB36E256699EB711BA7ECAEDDDD35EECBC0DD889AEAF13AC170805B8A1F5E002E183EF2CCD37F4FC7A24850F56D7F1FB85059C95AC313D67771D2AD584773B98BC5B2469EC89AAB2362823F971C22D143FE7EDBB658DAE6EC24FC6014EBD0B77EEB96056FB1020E385ADADAD2369032F0B6F3F1046FBC5EA0EAAA1C81E3B4589FEDE7E7C40E62B7F1623BE6CD772ECC7631BE1F5764F9AF0FA64D7B273787E3A797BD84E748CE0B95B2CEA493E4070DF66B161696D1D56D2AEEE5BC3F8DAE3C399F9258C6F97F7AC3518AE6CE3A241C3F49CE67B7E69959D01CFD64E6E8A619A9B877E6CB461670B9378EB6BAE5D44DF69FBCD92F44C04C7A3761B94EB7AA8750968254E38841224E339B8A5249EA971ECE71D4785E7A75ACF77C30226079C2231EC6B6B2DEBB8EEFF99218E33B6545F6D24517E8CF9690B19BFDBF068D28452A9722C7A9ECD95914DA4E0253843E53D5245E37F516F04895806E68565820FA2DAFFD305182627113458E1532809875121663521972F9371C9F373B14AE56AD77CBC0E7A9E8EA5102571466CF69EE5295FD49B2CA06BB0296FBF1A08E253A91C133BD503EB8AEEC4E30DDEBE4CB8402DFDA7880722ECDC8490C9FCBC3E89BEEF1F83D2BEA4391F66B6EEF5292AC49F0FC490D8DC407066A636E620E308892B8D9B64ACF28D2589738200CED235982B2E244B3B03E9F969E2EDEDC272A4CD27032124BCBE8EB6D61F2CB9F05B65B86B393AD96ABB959DBA83F276DB3A1F3611E16DABB3503F18422616472E55806A741E2E990ACA3B7720BAF4359CEB3C26675E5C44C8EA25FABF08DDD03D161670C4609E1C22B8E044C4EA806E78B8A73A386C1D76933F4EDEDE6F1DD6FDF168119A7BB7904F1F5C0F1175B961D1E931353B0F1BF996745DE5FB42297E3BF408635B853D3A3E4AC682BFBA73BBC1DBC5843758487F1225FD845BAE611C7DF3F3CFE02263743A26A0FBA5EA6716D5C70921B365CF1853B5AE627B3128C70F10AE4FF59B3E6CCC41C602742F315D5FFA634508FFBCEAC677A7ADF8E1AA03EA64F1401B7CE9797B8F7D79DDFFFF5E52E2D742DFC0F2CD4FA73C0DCADBF513938827F2308F4F403F358318E189B40F73F025105EB808FBEA2A79D6E0952989DEAB2138F70582A4BD882F5C607B7322162BD1F338020A7E235EC3F4F42B8FE743BA081B9FFF82E0D9CF969C784B5A1B9F6B9225868707E59FB2F3115AD9E62AD5DA39FC746E668BE1AA13C14884E8B91FE7CD367C2C146138F77C4FD0C342015708BE7CA9D534F0DCEA70A358A932F99287E80FC1F28C42858256CF383A5D635BDE3EB84FABEEA7EBE1D6F94124B3B56F187507D89C5FD0A06FFC3791A934CE2CAABB4ECFF3751DBDE0398F2F6AEC4936986DC78E0587C5F35EFBF237047EBCEB697FCF482F58D0ADECFBFBD24E79DE8FE786F149849D01C6C7758F26980D89BED74DCEC13833071BD171F9B52B0D79D3FC02C10C2FE4B7EF33BB51C2E542D0954450296CC46B245CAF9F6F37681D76933F4E3CA776B83344CF7FF0B5023FBCA3C57F0A7C4CCF95A1F4015B2C7DA8CDCD45BE6D40AD3B609BF3ECEE5564763812BE41F49ACE6D533DFF50AAC46752116E8582B5B38A088E7F42F4F7BC4E8BAF2DFA069E4F92BAB2105DD6F00570D3B3129AED7072157C6CFEEC69DBB2D1F570464B16194B10DB2A35324363488C8E202E1063472AC3B642D9F5DBB4C2738BDDD5D0EBE633075E353CFF29C1F27709CF39AD78AE7A388CA0C506BFD18290C50E2DE188F95C91ADB396DEBC05D9F5BBD08E0D313C484692905CB94E705CCA74D930B3805C228E6880F4EB9B6BCC0644CFC5B4ADACBCF278DE6F1DD6FD4133F93E22256CF3E307DED7E7CF83B1DABD7AAB641C3CEFC962818C89A9DBCA3FA28936F4898DEF4919FC463BDC12290C53933D9783CE9FDFBA43F22671A0E8B0A36A26DCC21F40255F62776A541289AEDFE155B4C3F55CC7DB8F1B73A6A751CF33893452D13812E128D2B12492A170E37D98E836E56FA57289AD09A2E1F57331A36E5FDBF48F4A4F5F453DCFA6728807C26C3D5B3B3DAF8799570570498448783C3DB701AAE7215F92E9B86AE82EE4DF5C6D9C2BD9A91CF4AE02BB3B078BDC0A0BDD2B573D684B3D6A3D7F19EC7083D8604E236FEFC4B9FA29C7EB367F7E1C6D206C77EE092BD2F596D104B676EFD1EBA50D50FE5F28569127BC3FEFF2221D4F93780A6C1D065D1BDB2E1FD9E263ACF202C8979F1E691B7859EE3FEF351F4779FFF9FEF7BDC4D9EBFE7319190FBEA8BBAFBBC9EC7F4FE3384AF97ECBA1359A4FB40D04E819087DCAEC6903A5321B9FDB082FA8184C88F236D99CBAD916055FECC3CABA1B2A5D149B420F56373D243CBE47DE6C890EBC7F7D7F1B1C74FFB995EE1DD5ABC9D850069FD6C0EE9C364FCD82CE3366B25B086A1408599D64FC634126958171720A9928C977F531F4A313C8A5531D79C7B1F1F623903F4EDEDE4A7E907270BCFDF06D603F6F6F9649866308BBFD88D9AD9D79BBB3B677BDEAAAD9E06A36F6A7CC36AED444083F2F41AE0A43AD8FC2E549EF91A777001C751BE8777CAE1A5F8293B70CF9E58B88051228E45258FBF82B9867C7B1F1C525F0FEF0261477EEC063207DF3E22419536EC1BCB0C4E485E72E74CD27A7E79C9E9F663D0F996D70A8CCF089789DF59C94215FA8206EB52361B337DED3BB3BDAE5A371AEF3CC8B3DD7B99D9EF33FFA00D20B67D93E8FD95FFD16CAAB9711F34761176B60B87F15864501A67EFC4F2857CAD08ECD81F7EE995D3DBFC8E939A7E7A75ECFE95C45F35C1CF5071CB5B3FE4B1BFCC61AEB085FC8CE05A56B5A9AE7EF2244DE6D75B17B3E220E378CD3533DE783EA945A57BB07F028DB40BF7638C5C81C2CD3235878F33F1072C7601EBD07CBFC0A7B6FA4679D3FB806E5AD7BF0A8ED881995E09FBF0CEB2C2967F509D6DFFF80FD6F7F9CCD619C1D8EB3C39DB41DAEA53CD1952A71334209B24A35B6084E57D93DF1B5F3459BE379E8CFB139FC50B4D4573EF2DBDF629D8CDD65AA1036457E5488BEBE083B5C2B3C8FFB436C4D5F79D7DE4FEF2B48F99FFF2F9BC9A1B4F518E9688C8565330524BCFE5A3F53E83EAFC0E13987E7F4DB9CC636405DE5DDFB30ADAC130C77B58DF35D7110FFB2E16163F17EF251DC7906AD2E0A853A04095DEB316039FAC573895C75ECB6DAFD61BDD86A3BE5A3D9DE7CD4F2BDC4D94E7E7F985A67E4F4FC25D4F35EE2FC501BC34F6481BEF5FC38DB00377FCEF1F6C3D66137F95782B7F7518EDF4CD8F0DD09335B7B7E1C753888FCEBB28FE528E47B8993E3ED1C9E7F41F49B9ED3C8E13987E71C9EBFBA78FE4017C1E7647C4DD7BE7178CEE179ABFF7178FEF2E3794DFEE9B1D5E120F2AFCD3E962390EFBD8E393D1F443F9ABFCD696C03FDE9F9F1D5E120F2A78DB7E7B20594AB8F91DA3DE7968645ACB5F3ADDD320D32D1380BF3AA8C8839EC083BFC0819F4F0A974A8942BF0A80DD8DA2AA376E721C7DBFB29FBA075D84DFE75E3EDC75D8783C89F36DE9E4AE7E1532A1030BB11502B615E1323A455221D4F4237320ECBF21ABB5F41373A018F4CC9CEED35CFCF23687160F5838FE1585F64F168C7A610B2D8481F61874DA441482DEEA91C1C9E7378FEBAE1F949F176FDC414E4376E4175EF3E3B1B93BE734A35D0DCBB0BFDA208298791FCA7762692697115EA87F7A11E9D8183B706F5D008B2D130F4E3D38D3843FE0C02B2754ECF393DE7F4FC94F0762A6F5A9522ED324333328A98CD55FBF6D52798FBE5AF605A9120AA95B27B6FEA32B2EBB710B6BB21FDFA6B78357A9472D93DEF23C11C82721EC7DB8FA90EBBC973BCFD74F3F693DA7FEED6BB11D648201F9E433EE6ABEDFF094520FAEA0A74F34204E49B500F8FB2F088D307C1B90B302CACC2BCCA83F2D64D94B6AAD04DCCB27DC441C2DBCD0235DC9B0BA76AFFF98BBCFFFCB8EBB09B7CBFE57891F79FF723DF6B9CC75D8783C83B3CEDF5FCA4F03C15CB23E9B4C2ABB5A0944D37DEBB8512E4F31524FD7EC45CEE868C4726677E9F5243747CE758FAF2E687C3F39713CF37A4616C0ABD58DDF422162BBEF678EEF285B0FDF82937AFB6EF7DBF63B36E63D056FF6B961FA41CDDE48FA30EBBC9F75B0EFA6D8EA30DD8BC5968F531C85461144BDB7DCBF75A8EE3AEC341E4EBE3739737D0D07385CE8CED9D1D4ECFF7BDEFB78EBBB5654ECF5FAC9ED373CFD737E9B954B181E45F053D5768B4A786B7F72BB35F9EE3ED1C6F6FF59EDE474EEF25A7FB4BD2F9F6673A36CB57769E211D89239FCE204BCFE40DC7502CB6DE57FEB2F1F6BA9FC3730ECF8F42BEDF72D06F735C6DC0E608B13517BDCAE7CB4FA0B87513C6E50DF8247CD80462661FEAB50D1C471D0E227F1AE7CF8FAB8E393DE7F4DC46CF48D97E029F56CFCEC5A7F75F542A95B6F22E6F0E57942E5C553A71D314C4558D17779D09DC27E1F7C8789F3E753F752F4A832F9D9E77E34F16671A0249007C911F6E5F96E3ED8F39DE7E9A797B35994166F75EC288CD89A8CB8B7C368F72A9D2F86F79FBAF30189330986BE782F0F8264CFDF5AFF84824C117461BCE6B9518AF14D9DD4B9FC814F85CA5C1E7A4CFB8E175E04628886BBE4CE3AC119DD10DB7B77AE4753888FC6178BBDB9F834C11804415813750BB8F97C3730ECF4F0B9ED37BAD27A66D585A71E0D19C13A5500455A297F41C471B5F02875008BF5AB9473E5B24E378A29B067B0166938E8DE5A99E7FA156E382DD838B246CA458BB33F5731276C9E6C6676A1DAE7B9DB8E276B27BD668FA02891491C413449307EF2C7FD9F09C9E4949CF9F95C86BE7537278CEE1F969C3738A45466B1A266B92FDAEC7ED341810757A10D0E8E0536A11D2EDDE47BA8BE74A9D1B728582E139D5E90B6623DE7A348EDF4F4FE38AC78DCB0E2B0B1FDB798C8F6552BC79E72E2E913EA08EE7CB6B3CF0856A82E75B8886F3D0DCBF8D6236D5B21C994C89DD959C898411F7051120FE74348198378852A174246DE030781E8C16211007894C0E1A53121A6D048B9B6EF036DCEC1CBB74B6FC4AE1B9DA9480DE14ED58360ECF4F0F9ED333928564BC7CF586066B1B5EF6DB65B120EA7042BD2920784E309DCF87767814FCB31749B88B9DCBECB25A61B038B041DEAD6F1A983E9FD5EA702791C0AD68147789FB2093AADD8D5C2CE32F5205DE5F9CC635AF87E9B9C9E6C0D8120FF78787D9B9CF6E9194DDC15C369B1997702A551812D9D899B0BF26F9FBC5030DDEBF761F7F9CE4617C5508F3FA06C9D3086CEB6BA46FC81C3B9EF76287B339626CFF983754C086D0872B37D5181B338127F4231E2FBC527A2ED546B1B064EF58364ECF4F8F9ED7C328F76E7E5FF1F850D5199073FA900804E096C811733A9FCB57B6104A66E1F17A1BBCFD4B8391E8F5B78DBBCFEBCF50A98CCF74467C2E13E29AC7D5E0ED4E82CB2E9F9FE94685EEB1DE3DF39DBAF4AEF5156B82E9F9BFCD39F0C6B0011FDF5A82E5EFFF1E93A17CEDFE74920F35495B4930544E5CF9AE5FB95B96A3D4F35EF893DDED6D9C5FADD127B0CAF3B0B50806736B8ED22DAC99F3E9CD092CACB831BD6083D6106DFCD746CAABD6115C55460EAC5F3C0C6F9F9A75123DB66174C18D72796BCF7B832D05B13440F89807167BA66D9C1C6F3F5DBC9DB5514768CFFB2A69F319BE0819AB9BF0642F9C9B228409D6D6EF5A7013CCD75B9C1090F17B9DB77FA152E12CE1F853CF9E3474FCEDF905FC79538C7737F8B86AD7E31BB7ABC1DB457215C47239C2A4FF302FF3A01E998697BFFAFC1E76A71B2A1E0FAB771F4043C6F2A5EF7F1F7F051A6706DBC9FB4FED51BC19D9C21B7C17FE79DD8DFF2471BF4FD29525F22F94B75337E5AAE1924B6584644E86E92F6E62EAE3AB8CCB27325B87C2F344768B9437051DD1F708C1CFFA7FBDC102D6377CE08B4388C44A4786E7741D8586F427266BE2C07BA536C6D294ABA3AC6CF44E1C0ECF5F163CAFC567178A11B0DA20FBFA0AE1A1CEF6F204CF13F92DB8DC4E86E754A7CF69B5648C6E227AFEACA1E7577D3E5C0D86F1215F880B26232EE8540D3C97138C97D1FB1C089EA793197607733A14AAA553A56B749E2245FA11C79D87C84BA5A8CECDE3D9FFF81B0C11FCBA6C4EE23CDF877F5972E17BF34EFCDD75356EF05C18D2C730EECE20D5741F53AF6DE030BCBD924863677E113BBC4D04C95827A837C0ACF3412D32A3B2B5D553DD74D2F368B28CD1091BEE3E30C2E6CC3C97A175E74C93BA4A76ADE37EDA08B5275E21DF94AE99A263B9E6F72CBD3669727A7E7AF59C72E6924CC1B87AD044C6E69E0072D91C626E371B8FD7C7E4CD7E3A3E571B2D585C5C6A8CCF3F23D87CCE60C2FD58740F6FBF6073E29DC5397C4430F9A25ED3189FAF6C0AB1B0BC82D06EBCCDE904EC0E368FEF1F1F877F6A1A914D01BC6393B04A24F89DC08D5F38D2F8DB6133FEEEAE0EFFEB0B21BE7B5B8358BE72A8367058DE4EFFE30D923E41A48283B70A3B298BDDE546B6F498F10B67B6025776ABAD7C27DE5E77297E3687559F3CABA543BE55B2B40355A2085DB2846871FBD0F6769A56CBF1092B57EB349BFFC7F1F6D3C5DBABA1080A844353AEEE22BA18B23A1020D8BCFFFEB466BF87E8B9C5E181502C69F0F64B361BBE26EDBA99B7D3F9F20B667BCBF973BE548E95B575C2DB5D08D95C7BD209112E61777961BA7717E1C515D8EE3D82E2FD3F41C75BC747F618FEB8F514FF46B0FBDF7511FCD29BC14FE8FE3AA2E787690387DD7FEEB2D9D97E6FD68778FD88115C8F8B24989458F187DC16FE958CA1DFB5257ADE3F4BF7CE16883F43B84E2E5F64715B6CC13DFFADD23A2163A2B85A8B1B3227FE40FA927F950571CE931D68EF713A9347369D617EB3C5D752264638588CE0428270B4DB521B7E972A37D26CFE1FB7FFFCF4ED3FAFC7D7889FE029759D32257C84C7CBAF5EDF2B5FAA20BFF518063266B7386A76F5CB0E3BEEA5537BB0FC22C1ED2B1ECF81F9739ABEC66C83502A438970747ACF317D9EE7A9CAEE09778AA44848C508F30528135E40C3EEE9A3F8C696C2A74B647C4E38FB5FA6AD383763ADC91CA20D383C87DB7F4EFBA8FB43264CCE9871E7DC1A725A2382D353B8726503FF346FC5FF735189FF206E3F785E217ECDF0384AF97C231F365F0913E3564CCDDA70EFF305E497D610D4E9F0EE17CB7843E0C1FFF53E1F1F4AFD03E1B9D7608357223A80B3F534EF4E9AC1BFB58292D505EFF4243EBEC16765ABA7C9E1F9E9C573FA843D9EE7782D96C13B3246FA6B112C8BCBB0AD6DC04FFAF028D1F7663B9CDAE4C0FADA6A03CFBF341AF18DCB79C0DEFE15C1EA3FCECCE00F53E3F85C216BE0F99A400CBE484CF85F94B8012CCD9A2014B8304CDACEC8B811628211BAC94578E56244CC96636F0387B5C3B1EF97AA6065DD031B4F8702E9C7A2CB6BB8F4C5147EA60FE39F165CF84FA1AFEFF1B97D43C0E60EB7B2059448BF59C9E460B2A7593A3E8989E8F92ABBCFF1DDFF1AC69BCE24BE3B69C787F2BD6B8B7B4D33ECF4226C36D5D222E5A16EC386E3CE92BAF621A2B6123D7722C2E3E1BD0BCBAC6CF534B9F1F9E91D9FEF7F5F0D4650257A5DF506605BE7C1B4CA43CCE1D8F3DF50240ABD85E8396F838DCFE9BCDAE772056E276298D8D9D9A3E793CFE8D85D894FC973D5696D8CCF97373631BBB0847824C6EE6551CCACC247E2147E730FBE401AC97405A97094DD9598236DFBB8DBC061EC7079C2AB7D84B388F90E2C2CBB219CD121B92186F64F1FE1C25F1EE1FF13F9F0BD45377EA708F69C4FC641885F3B32855CD08F1D32B64A0F3D8247A8C4C2B81CF3B34628574C088E4FC1353E8C77FEFC103F5587F09D291B3ED64507D2F3903300EBDC0CB6DD5E94E616B06DB6124E2547C0E68640E4676513CF6B90162BA0FBE64BA2E74BAC6CF534393D7F79F4BCD3B7AFFB638EDD73C4FD8186BDFD22C181AF3D5E3C4825F6E8F9BDC216BED46AD8FBDB9140C3DE6EF204A1D4EA10A3FB66766AF6406A2B684E47240DBEB036D049CF47141E8C113C1BF7E4F6B8F459227EBF5E0FC1F92F9170B91BF62B2A4F1FFAFE9DAD2778C799C167DEBD76B4BA5FE5CFEF8993FA475C698C12FF88D28DFA5ADA6B67BE8690A413361A6033F9F6A4F388C8BC57DCC11992C655F2B4E2CD93E664C772E4324594CA353B87D1E64338F657F0BEBC868D4F3F4329595BEF574FAF559ACD65E378FBE9E3EDFBFD3EBBBDA31D2E42F098FE2F1C4F92B650C602A9E3794FB6E1B6F35377441365E9871229D69FB8351AE6E6650A660FA47E9B2DC0DAD4F59B3A0452DB04BBAC585E736162C6766C6DA01D6FA736ED1BAE247E6A8CE347423F7EB4E9C1BFEB23784311C69BF638D3610FF9AF69938F2D12AFCDE6A9B9A42FB4D91D6CEECB44CFA00A8491ADB4C68715471C6FBA3378435A8BFF0D890FFF46F0F167C618DE25E9EBDD01B69EC04DFA4597C170301D9B6D379D00EB3FB7766D0E7BD221CF59528E3F6E3FC31BAA284BE727522F7E240930FFDBE9322B47BD8E9D2A55A3DEEDA48ED81C1E4993A5D7264D0ECF5F2E3CEF47BEB4F518DAB1313804FC9EE36C968FED9685ADC1DBE5C7F5FFD23557D4B53AD3046FB3B039532782E71B2A1736885EF355E4518721B126C1938720D0846109D5C6B0F5F6DAECB6F2B7CA933B5A8450176371D2F8C5A63878CA103609CFD7FBF68E597A4DA7551D6BBD19884C09F095B57208489FCB27FD099FA46520DFB85D1DEF8FBF97B2717AFEEAE979269640A150E839CE567A1E349A11B6BB904DA51BFFA56B345E541B38CCFCB98BE8FAB2C4467037B7C76DE5A7FFED8577B4E27C6A5BAAE774BC91C1EEA86C4E9FBA06322EDB1F7FBB34FDB1E7E70871BCFDF4F3F641E57B8DB3595EE8892053DAA9DD0DE40AA0904E1FBA0E07913F8CBD9D8E49F6CF33B47BE87F7BE98F5A6101B56DF49A0ECFDD3A9D7EFB727A3EC820697278FE6AE1F920E5A8CB2B0857A4EBD12748FB38CA3A3C0A3CE7F1450D7B93C16CEBD87750BBC3CD4814B7A2719C5769713D12C40DAF1B7F118A709D8CCBAFB99DB8E470E15E3CC2FE3B289E5F257A7EC5E3C5757F0097CD265C767A703B1AC65F3678B8E60FE27624CCD6240EE733D8F0B44EA7DFBEFC9EF7799A571C0E5CB458712F19C39F37364999E3AC6CADD2E4F09CC3F3BABCD090C4BF91B1E1B82773A4753888BCC5EEDA634BE6F09CC3730ECF8F06CF05FA38D3F33177BAAF7C9CB6F9F300190BD33500748EB1EED2F57DCD61753FFDEFA07ADE1C4FABB89BFDA158EFF6924E75ECF41C4CAB5D9A914489D3734ECF0FEAB93C8237843EA2E799BEF271DAEC70FBFD8370BE5E787B2FF134CB1F07676B7E7AE16CDDD2E478FBABCFDBE9D910747C4ED76B1C651D0E22CF9DDFDEBB7C3F7D792F98D5EA7F1C9EBF3A786E0DE631E64C40BC6F8EF8B07538883C87E71C9E1FB60EBBC9BFAE787E5C7538883C87E71C9E1FB60EBBC9F75B0EFA6D4E631BE835CEE3AEC341E43BE1B964773D2EDB17DAE4B6F35397EEC9EBF4BE5BD87EF95EE36996EF259F83C8F712673BF9FD6146AB9DDB7FDEE6BD58A63C956DA0D7389BE507C9C771C80BC4328EB7F728DF4B9CFD703E8EB773BC9DE3EDA78BB3353F9DE2EC87F3B50AE3783BC7DBEBF2815811567B123A4B028150EE506D80BB4791D3F3C3D66137794ECF07AB43AB338585151716579D30985BDFD97E147ADE0F6FB77B72E0F37D985B7140678C9D2ADE4EF3B6C9F76049E8875AD1DACEDD49BEEE6F27D3EC72BC9DE3ED475987F17495ADC53A6C1B382ADE1ECF6C4163884122F7C3EDCDB4FC6F2F619DB02097C9239D48239BCA22190C22118A219F2B201D8DB17323D39118D2F1380AF9E281BCA9F55128B451D8EDF18EE5E0F09CC3F36E7558DC7E028F2F8768AA8C44BACCC2B3E51DF843790463252433A5AEE9788205C4887C34513AF0BE9E3E3DD77C95E7C3C4B47DCFB9E62789E7D4ADDFC7922DEE1C0B9E5B56D6E01489E0D814423F318E80DE0CDB1A0FCAD119681FDE8169690D86A9295897970EA4A33725D8378B265B9F8FDB9C3E87E71C9E7792D19A92989EB5E1EE900E42899F852B0986D0BB591F8E182092FA3AA643CF179D9CB4E2D6A809FC555BC73AAC9D617E7AF09CDEBD42CFC2A1771C7883F996FFED25AC13167C24AA9DBFD5CF43390FCD1B7569DEEA1C88C3730ECF07C573FA24B355688DF13DE1A168899D0DD34B1D522CA47D43D73ADCA17784780FDD060E6587ABEE2060B135CE598ABBDCD06CAA9E9FB9E570C1673435DE53376877A0BCDBDF77D3F34C3ACBEE7CA0F54E1F7A9626DD877ADE6CC6BBABAB789FB789FB897063DFD8359F0F9FAAB4F8707313972CB57B34787C434DDEE986C9E0E9F8EDFBD573AFD608B75C897C26CDE9F96BA4E714372866CCCC3BA1233C9186D739360DB3BBD31DD3A1777609C421F65F853AD6B10EABA128C2F4AED563D4F3EEFCE929D39F74A60A8F4C8A8042C2EE554CA52BF0CA65F0CBC57BDF2BA5EC37950B397C302FAFA39C89EF89B399F3D1B332E91D8D7CB18485517CBE9D48E182D9822F8D06DCF0BBF7EC0FBD46F7BCFB7DB89B88E061B6764E27E5189B02314B334EDA4FEB720CC6DB033A2322260BB289E41ECE446D27FBFFCBF1F65787B7D387B64BBB2BBB279C85B9B33DD721E5E35DEB907C0B7A6F4040AB815F676667A10ED20606E6ED5B3BEC8ED7AC508CAC3742745C81F8EA32722209329E30824A1542B3D3CFDF6B34880936D96F2A1725E9F848BE4B857C5B3CA77751513714ADDD6BD8CF3EF4FAC3F6AAEECAD7CFEA6AD507F685E7DBBB673FEEDE75CBF8C9CE63E6D23B6DE9F97E74AFAA37948793F4ED2A430CC14861E0BE98C3F393C3F36430BC878FFA08B6D6B8AB173E83756F9C3BF47C525FCF7518B27BBAD6216D5FF4DE80B0D50E9F528D4C2CDEB51C47CADB77F5BC48D20E491470A9495F333B8AA282E8B7440EAFC682E0C8BDE7EFB5364416C6C96F1593B3F3A5F028150413B51DF4DCC9EE34B3B99EF3F67BA9142E13CE705EAFC525BB1DD77D9E864EDF8AA7F095D980AFAC56DC0A050EF0763A86380A3D7768B4B0B2B2AB9026FD1AF5D3FBF26C3C3E4CD638B3C7D0FB7A8CD62466171D58E1B960B4C4393D7F09F59CEA74B34C3356ECC78D7ADE7BADC3E6B8DBD5E136E18C25B10C822FAF22AC570FDC060E6B6FA7E56A7EBF5F66FF7B9BCBD331CEFDBC5D6D30412295B3308AE7DF7883F85CA5C2275231BE341870D96A61FA3CFEE419E1F2267C24E0E38ACB892B4E4783B72B757AC2A5B3EC8CE876E5684EBF1B6F4FEC9631E70F22EBF6335B09CB2FED7B897CFDDEC76EDF8EE3ED2F86B7BB942678254278C4145B5430AFF050AD147B924FB8F7DACE134D794BB4C827CD7BAE504682E855321044B972700CD72CDF4B1DEEFF1E83B48143D9DBABDB30F2058DFB5EE93D1646DE46E30ED808C15BFD3AEFF97BE29A45A29EED70518783E0311F0B4BAB0D3CFFC6E3C5175A1DFEB4388FAF1D365CB2D91B787EDEE2C4BB73D3B8150E34C2299EAF933C2E2EAFC2A7D71F099ED372507BA95BC083696595D4676037BF2ECE0ED742BEDF72D0BA3E2A3CCF139DB3ACF1E1534859FDA4630904CDD6DA38EB90781ED29B90261C92E999D18C27EFBE87F49BBF446A7A1EE6F945D8D7F970CB247BE2CE12BC29146B771C3BE572A6EB01AD1E61B38DD98FA2E1F0DE3A24BAE273380FDD060E8BE7B4DFAA8F5FD6E4265C96185ADE71517753A148C7380FE0B9CE80B9A56516C6E6CA82219C595EC3FB2B8BF852A7C1977A5D03CF2F58ECF8336F05972C66C2DF8D0D3C57917E4167B21C991D8E96A358AE927643F43D9E442E95DE83E7BDF6BB1C9E1F3F9E27525B082A2588DA3A9F69DA56BE0973A99D2D4EC68C75BF6E6894F41F2AF6BE9ACCE0E9DFFD3D9EFDCDDF20E98D206CD091B6913810B76E721E49FFF33B85A8AB1E1A27FF8D35C2F6CE9F7F8B4712232E6963B8A808E39CC0872BE6386E79724816AA87C2F3E985356C3F79DCF7FAF66FCC09FCDC9CE8ABEF69D5973EC77327E6894ECF2D2C36F0FCBCD18A8FC4629C999FC3659B95E8BDBFA1E71F496478677E1677A2A14638C5F3B9C565ACAE6F20156F9F37FA885D192C399258A167B7BBD2ECA1FE50A67200CF93F10C4CB3B37012AE10757B76F3CBE1792BF97ECB41EBFAA8F05C6D8EE19ADA8DDBD6083BDBF3BE37B7C76DF65FDCBDEFAC2D9E130EA0E10B1120D853D9DE86626E91E8BDABA667C130B6ED2E04789B488A3544FF65883A0F8EBF3D2A1D52E120BBAB3347E326AE53242358916C841593993D699EF5C4F173D20EBF3767C70F899EFF70CD85774A5598E2ADD7A9B4C3F32AD1EF99F9A5869ECBD43AE2FFB6A7FBCF9BFDE7C977FA11CFDDF33EE35661CD7B974336072C762F4C362B0B1BC4DE4EED61669B133A3276EF568EEB8E38CE90FEF36F1FE8F18F2326FC1D717F2CF460C61743C86A63F9A18F6E7585DD8999DF1430797AC76A40AD8541A345BE581AB8ECD4E5F69FF778FF7975073F1592362F0AE01FC62DF8EEB4153F22EDFFB7446755367F63DF35BD4B83CDB90623787F7595F1BC2F09C77E97F4FDC3E522FEB229263CD0888B060D6B5FF5FDE71A9D0776571991A67BEAA92B9C9C8695C7637EC918EDE737F6BCA7B29DEAC0C213C3A756625B6F448570FBACD208E1A52B847348D99DA1342CA1312044FA8C7492E87E340EC5F4263B5FD56C4F36EE5277FBB37DB50187C7C7F45C4EDAE920BCBDD9FFC9BC0BDF1D33F6C5B53AF2769767CFFB41F4BC579B187D4CFE02C4D624366561F02441F0C401AC6DFA5128EF34FE53E7725BA4CF7DFCCEBBF8F6BFFF773CF9DEF7B143FAF1FD9C6910EEC9F1F6DEDA1D5D0FFA992284FF9287F0BB191B7E376BC7DB0B0EA2C329E48A5504633978FC7E765F0EE57A97EC0E9C532971C164263CD0828B648CFEA852C6799D19D73C76DC89C759FBA2F1D3399E7C898CA50B4F9EF37652DFB48E77A81E2AD4F0115CCCCFCE63AB899BB7E2DDFBF39E89251B7EB9C18790A300B7600319A2CF348C2FF621E20CC0A732201B8BB2F9F32AC94FD8EE846D8D8F7C3A35501B38CAFDE75F2922F8B9E52879BB03763246A77D10ED9B296FBF44CAFBCBF159BC3D3A842FC8B8AB97F9F34139DFFEF7CDBC9DBA5EAD1EE6A5B51AE76AC19938DEFEE2797B71EB19C49230B46607C45209C3F389A7CFF007C2B1CF4AF97BDAC6D5500A7F9C9AC65B33B3F88437D7C0F3A9D905D6EE2264DC183659F6A41922794B46E2F0F3A588CA640809E5700A85CC264D6D660122D36B1D06766D068D30F204487FB47FFE7C8BCDDB7A992DA0582C0ED4068E721FCB034F06BFF7F6B7E6BE173CB77B6AF9A0F5304478F18D801FE33B3BB8110A1D299EEFB7C1EC7F5F7FEAF32951C2FD7C2313289B4DD84EE7D89AE765671A6B9E1C56DC19F650BF27D57AEF0C87E7476F874BE7FF8A70B48A44EE296C74BE87D4FFC836C1209391707653A35DDC8E25703318C0D7449FCFE94DB8E2B234F09CCECF50BEB0B5AB27CD1C82627DCDFF2D240A37D1F91CD2A170E37F895D3C2FE64B2816CA480642C8655A9FEBDC6A5E2DB19F0F509BAFCD05ED8387C826D203B781A3C4F350B448C6D3FDE3792092C72D571A9774515C5086705917C175771AAB52BAC6EF6943463C2781645981952B230CA7E943F5B8D94FC7E3CD61F40EF5A3C6F380DBCDD6C66CEDAED7A3616199026B3C0DCE3D7BCAEE92FE992B877F57FAF1CECE638CA44A2DE7717AED8B393CEF3D1FD9E233E88D31081506A8D46A86E7E34F9EE2BD753EBEB6E81A7A7EC1EA2063722DBEB2BBF09158862F75F2069E2B094FA3FA1C217D40F37C119DAF89ED8651BB7B78DFBA2BEAD277B4FC11A70BA6F50D68EE0DB1F560ADF2DC6A9D4C5DBE1E5E4D65E19228900AC750C8E67BFA0EFDE2F98B3A4F86F60D9F13FDF865B88CDF92FEF1873C177E9F2EE3A12FB1473F42562742363B025A6DDB7C1CE55AA8767A5EFBDF0E82D3F3C82B95357DCF16D8FE04893D0991210EA13E06BE260289398E54A17A647ACAE979F7387D4E07B4261BE484E7523D1F2538FCF36BB7F0FECA2A2E507B9BDF871B9118CECA6598223AFFF6AA109F8BD61A7ABE21103578FBFE7961CAE3EB7E175FC4FC5EA91251C2B723162B54640CAF576B10F705B145F76710DE5049D4EE35A7736F9542092E57ED7C46BB447C60FE99AEABA5B6BF46DF42E2B058DC876E03A7E1FC768AB9CD785CF7D3F07EB9E371ED61687E589EAB4FA0191E459C70C3E6FF7176B8939F3F67EB1BB6097ED82C0D3BDC45B305DF108CFDDA6E23FAECC170A98CE96F9F313DFF44A5C3ADA0B7C1DB9796D7DAA6D96A3D9C9D2F866D9D07EB2A0F4632D68F102CA2E3B82AD1D36D7F08553AA755F7BB3C7DD7617DEC799836C09D0339189EB78B93B3C39D3C9ED7F970BE52656709515DD712ECA04FDD5FBFC3BE394C6DABD9B2E399F6672EB65CDF1E25BC9370F8AACED0A88384CE8C8C44DAB097333DDFF5F75387FE70113265F858F19CD3734ECF5F663D6FFB3E9D47249E60E9142A3B3DB7813DBA4D1EA3A4B687293C35836FFFDB7F43F493CFD86F83D1C9D64AD6D74F1DA60E5DFE3CB4FAC8B1EA39777E7B7BDEDE2E4E8EB79F0EDEDEE97D2A5F462C9162E9504EBC7F4EA6531DD6B93A1DB7A99DB5F5738C8F7B03D8D19BD86F1ADF71D6E120F21C6FE7F0FC75C373E6125DD01903108883ECBC00813484D109331E8D1B4998AF6D9A753CBFE7C9E25D3ACFE64CC3B4B80C075F8084CF0FAD2186856527F8A2001299CAB1D42187E71C9E7378DE1DCF832633D1CD5504F55A86BDE138DDBFF00C81501E21E28F254B5DF1FCF3751F7E6E8CC1624F21683021441E3AEF45DF293511A4F33BC7568783C87378CEE1F9EB86E7A54A1525A59AB8ADCBD9CBF8FC2CDF8F5F7933643C9EDAF37E71D387D93933E6965DB0763943FC45B601CE0EC7E9F961EBB09BFC8BD6F390C9D2725F343D1FC1BEBBCE85AE53A7F3D82EBBA3B6FEA5E9BFCDF3D7FBE7CFE939529DF4DC13CCC3E94D9331411CB902C7DB39DECEF1F6E3E2EDBDB4811DB1AC6FF9E6B0AFD451FCA73FCBD67A746A031C6F6F1D964A66587F9A8A2610B258D81EDEA8D38924F91DB63910B1D3354A6EB67F2797C91E90E7F09CC3F36E6D20E2F2C22B53F42DDF1CF6E98A073F91050EE0F98BA8C3A3C6F37EF79F0FB277797F9851EBC4ECBD592C8DAE636D518A956901C62E8F62794E8CA99B5398B93D81A9EB1398B8360E91407F600D849A7CF756EB22F6AF917004F22DD36FDEBBBBFF7DB7B2EFDFFBDB6FD9F7CB73FBCF072B47A73AA4FEA837000F199FF72BDF1C46F1FC37B122DB0BDEA90D1C471D0E22EFF0B4C7F393E0ED4247B2EF3DE6833C0BDEE76B0943C94A636F59F37E336DA8C0F1F623903F8DBC7D10F9E63029691F8BCE04BBC74BA54F608DE7C1AAC007AF3FC3F1F61EC284F6C491EBF4ED780A7F5A17E17793B36CDFD268368CBB4A3BEEDCB90319E9D79705067CFCED33FC60D5837F5AB2E347221F7ECCF7E27D4B14894C99E3EDAF186F1F54BE9D8C83E08244118058194124963FF63A3C6ADEFEAAE0F9835C01B7A2715C0F04F03519DB3F4827189EE72B3BF0F8FC0D3C1FDDF46364DD83496910C34B4E0835919EF03C9F2F23150823A837A3506C3FF77A527DF971D76137F95711CF9BFDF9F213B62E86DEA1F422EA7010F9D701CF5B3DF39EEC81F4E95D599DB0A05DD9D3C91C3BC35739B680A05A3C70D9393C7F39F19CEE35A17A4ED7DCD07BD65E363C7F15F4FC8A3F840F3736F089448ACB3613CE19F4B89F4EE2A6D404DE26BF765EA0C30B1B1997D7EEC58B416B4E4240B83B8F3CC1F0F3BDFD9DCA5EA5E755079F9FBD4DEDB09E40AEAFB2737AFE72EA39CBB33DC2EE1165F716385CEC1CB8D3ACE73CBE68777DBF0F0673EF675ED7DDA3E0EDA3D51D8C6E6DE17E2683079914269E7D8B87B92C1E64B3B89B48E05624829BE1301EE6F32C6C7CBBDA56CF6FC6E2F8CA62C179AD0E174D067CA15661289F63BC3D104B6374611DD904DD8FF094DD81194F97C937C9436B8CB1F1563C5142269A60F547CFD3A7E78934DF0F6B5529D97A8B1DF2AD12E4DB596C7658745E886521B66E5AA288607ED985C9391B949A70D7EFC1F1F6978FB753BF6DF7CECF88CD09D3B218F26B57589B3A2DBCDD627735F4BAFEBC683C8F44A3EC1E85ABD7AEE1D69C105FC70AF8FDC31BF8CCE4C405851067D56AFC6969196F4F8EE192C3810F561689CE5AF0D6A347F8B3C2847B41DBC0BC3D922AA054A99DCF4ECF776BD597D373D9A9DFEA70A2B2FD78CF7B9BAB863DEC2C016F80C9D33E80E2B9D3934132B74DFC49B8FDA45FD9E5062FBA2F7F5DF1DC41BE7F205A80919E4D4AB0A3937C365746321466F788240986645359E4D26976DF0A3DE38DDE6348EFE3689966B680A450CCF69687F466443D3EF8545A94CA5BC752874781E727A1E7D178020A9D198F1E0D61466AC1DD7C05B7C37E5C0B4571C9ACC7359F1F5F3BEC38AFD7E316A9838B562BCEEBB4EC6C905EF59A9E29723D1CC1598D1A7712718C18FD50A8D4A4BC5EB8E89D50BB38DD6ACDA35B54BB3B272A14ED39136E65C380F90531B40A0F2C1235BB7FA3AEE7745FF3206D95D3F3A3D3737A9FE5D49409D38B4EF87DA98EF2617B08CEAB1761B9720DB61BD7E0BC7B1FFEB109F8272661FAF222341F7F8ED8E242E3CC087A8F68B39E6F29D52CDC2D91C1A350F67437EF69D1F3C3D8DBBDE112F8022F362574CD50BAA30CDD23184DE7B1BABA8279A50BB7B3657CB03C8B4B9E00AEBB2DB8134FE20B8D16E7D40A76BFDA975A2D6E46C3F85CA9C4E493C73DEBF97FDC7D808F447CDC267A3E618D61755308BDC1C0CEA0AB73AC4E9C8FD66352658163798EDDF37ADD95C2884C86F95C0EF71EADC1663410DEE668EC69EAF6ED38DE7EFCBCDD644B35F68E7592CFBA3C7DF1C1ED7D754CFBA6E63AD87FC7E249B781A3B2B7E7F345E433796452B5F3D223890A94DA0819F3D27B2DD21DFB23CADB254A0DCE7EFE29E1ED025C4D14F1E1EA2C2EBA82F852B18907641CFEB144840F36F9788F2FC099D911FCFCFA2D7CAA90E18FD3D3787F6D054364FC5EAF83BF48C4787B89874F44EB38AB52E14F8B2BF858B081A1420167E617703F1567F3E7172F5FC1CACA02DBCBD009CFE9BE0896577A6FFB86183EA502E94814776536883637B1A1D361916F867664146EF2AEDE9773787EB2782E574508A6DB99DD2591D962EFA374DDB4A3B69F85A66376B8A1379A60239C6DF4C953BC3D3E85CB56534BDDFEC3CA26DE9D1D637E0F5F0433E9D3691C5467540487285ED5EBE055C5F3A0D90CFDF8045B8B5E0F53E96258DFF4B1F9C56EFD51BAB40D97CBCDEC70C3956DDC08FA7183F0ECFBC918864A65DC2063A73BF128D3D5AF2C265C22DC9DDE854EDD6F5C2E665BABD7C7559F8F8439F190E0ECC37C81D9ED6EC7886CB148E209E01171A91D2E5B790C87C3D9160BEA61F57D8E25990291E90538080F2891B8299E8F937E84E2F9E4A6095A81001E999CC3F35384E71463A87DACFE7E3FCED27DE754CF299ED3F39F697B1A2EB4BEF7E75A308CAB1E5703CF3749DFD02A4F34FD567770B37CEC74FF36A719CFD7CC89C67D74379461A47255B69787CE2BD2F9C55EFBA3939C3F6FC682E6B0E77638D71E19893E8CE935355B331F8C57E090A8908DFA383C3F25784E7FDBAC0E76D63A1D33ABEF0DB5C5D90CD1CB7EDA4FB5431DD3F48D4A154BCBC917C3239743FF688CE583DA82B2F90AE2049B7C5A134AA44F39693CEF47CF79EE1A6FBE1909E3B633B13B2F4D6DF989AEF51589C5D9FDC753333384B7F3D9F8FC2B830A9F4825B84DE23B0ABDA6B6BB7796D670D54FD7C3A5D8FCF9D8F838A47225BCFE40E34EF64E7AEEB3DB6BF7EBECBED79AAC309A6B9C3E6F7122A5D1A1502A727A7E8AF4DCE7AA71B130D131C58DBB70AEAF13DEEE22385FE3EDF4616D95F276F2BF8FF83C66EFFD988CFD0EA3E7BEDDF77E9D9EA54D3960796B8B85279225F8544AB8156A640207E339CDBC7DC353E33A971D0E86EBB5F74FD13C87D89677907CAC0B559049848CB75F4FE4F199988F4FE552C293FAEB67DB3D7F269CFACCCC382EB93DB81D0E32DEEE0EC530BDB0825422864E76B85430C274D7AFD2ECBB9FC30DA34C7A60FE3C1D8DB72E670F611C6F3F3ADE5E3559D87912F4FEC380DE8488D5B6CBDB9F36B87CAA58859BB409CADB279EFD159748BF7DC164C259B5B22F3BDC9E7C2854D85958C236E93B7C6AA2E72623B68A95E7F7309276127178C8D82FFBD2F1F63A9E5F22EDFC399E3BD99D16CDE771B43AA3C367B3617C7A16D7AE5F6DCC9F7FB03885FF5A5DC027448F8E42CFFF303B8B9F5DBD8A7346BA5E464FF09CD4E7E5ABB8FFF021DC642CDF09CFEBFE4EFD2A9D3F8F0B25D0CDF060599842B158E6F07CC072D85C4787E7F4DE43EA8FB802ECDEF1FDBC3D5BAA2299C91E396F0FEDBE8F927833C9E776681A9ECD1410B6D850AAB49E5F7FD178DECFFEF335579A95FF4E3CF65CCFE9DD354DEBC7DAEA39E90BA666E7B1BECE6BCC9FDF247C86CE75DF8E1E0D6FBF158B117EA0C1F5A00F0F3329367F2E91AB3039B70AABC5D4D3DEE576658FF9C3F013BC08124C0F5AED08103E9F4E24BB7E3B6EFFF9F1EF3FB7107CA6E3E27ABB637725913649EF4FB3ED3E06B3152671EDEEDD3BA4DEBE76124E9A7ABE9FEA3609FBCA68C0D7040F6EC5A22CCCC817EEE1FD0E1267FDFC293A67A3D9E41F68F3341F9A4D012422333EF066F1962C84B79411BC25F2E15DF27B23943FB636E0F01CCDFEF33A6FBFE6F33EE7EDB43FD979D2519EB9242F42A9124B2BCB8DF973CADBBFB29A587C47A1E7EFF3D6F1FED21CAE87C384B707D8FCB950A6C2F21A19AFC5E2E865FEBC5DD933890CC236174AF93CB7FFFC14F176FA7BBFBDBDDE2ED97DA8BB613A93192E9982ADB1B86034E22F226143CF69D879BD119F4B25386F34E1A259CFC21D62297C744F438B3869FA5536666D6D6F37903C513D7F73D38B5F49C2F8F992036F1BA2D0A6CAAC1D9E76DE3E46DC0B06ED1EDE9E0847BAF22F3A7F3E343E89B3673F6FCC9F7FCA5FC6BBCB8BB864311F899ED339F55FDE7B800BA4EFB8E1F3B0F9F3AFBEB9864F3E3F0787DD7A68DEDE8A3371BCFD64793B5D93289485118C143BCA87E24914826128E44AE80C0698C878DDECF5C1ECF1D69EBABF298CDE8FE8207CB75B1B388E3A3C6ADE3E089E8F542A4D76B8678D3BCC3BF64744C7A46A2D5608B6AE1982B8952E109EA4C3399D06DFB81C47A2E767753A7CC017E092DDC6F09CDAE1D40613D64572A8B50E5CF064F0813C82F7C47EBC47FAD9B3A4BF9D253CAAB9DFEFA55FE5F0FCF4E079A1FA146A23D1C7DD33DC3AC947C27904E422245CEE81F6B1BCC83A1C44BE573C573A92F888E8C26F7571FC4616C42FF9644CE14E63229845CCEE805E6A8480A7C3C6AA1AC2F59A5D9ACE47517B43BD6FA5F3E9747F8775F74E54EAFA8205B6BE7D727E1913E3A378B8A66078FEE795797C2458C7B5A0FF48F4FC9D753EDE7C38848B3A256E8602CC0EB7BCBE81074343985C56E02DA2D7FFF74505FE7ED8887F78A8C1AF7C395C22759F2D56393C7F49F1BCDF6FD74DBED7385F363C6FD673AD27CDF49C8E277EAB0AE1DF27CDF89D368AC54096F07307E3BDF160144E32E62D665307D2AFDF71FEA63F8F9F1A6278431DC59F8A65BCB3F5042A6F1843A313B873F7DE81F9F3CB36CB91E8797DFEFCA2CD843BB1E8EEFCF918EE3E1AC7D482107FF9F619FE93E0F7BF1912F8852586F789CCE5FC16B2054ECF393D7FB5F5BC57DE1EDEFD5FD81D84654384723E79E0BF36670ABFF766F0CF7C3FFE61CC82FF3D6EC19BD618DEB2A690AB6CC36C77127CE56149E3DB6387A3B6CFA3B4C35D723A71371E65BC5DA2D2617D6313667792F1F6B7975DF8D54303CE2C3938DE7E84F227C5DBFBFD76DDE45F07DEDEB63F71BAB13DB780EAEA3A19DFA810A6D8DEE2BF167B1CE7089EFF69E729BE4FF4E81FC78D78EFD933869B12470053248E73E7CE35E6CFCF4C3EC22FEFDEC7D44EE948F49CDA4DDF5E5EC13F7FF239BE26984E79FBF59BB7717F78045E9F97F111B742C3D6E9B7EB43393CE7F0FC75C4F36C71878DAFFDBBFF8B794248C7226DFF4BCF4B9E372630BAEEC5AC26CACE5EE493306A879B5E58C28680CFE6D5A81DEE1B8B019FCA15987EF6E448F47C64FB09BED091BE656995ED6D67F36A7235AEDEBE8360C00F3A9FE15CE323EA72B6ED43FBEDCBBBF5BB1C9E73787E1AF19CEEF3D39BA210CB8388C68AD810FAB029F4434CC6BACDF352FDF43DD4A576B889B925CCCE4CB175323752259C9999C047EBAB44479F1E1D9E2F2EE1D7643C7EDD6565EB64D63705989E9F87D3595B0F673CF32102DF5C6CDB877278CEE1F9AB88E7FBF59C2F094220F2625DE0656BF1A5CA50EDDE999DC787D273EACA547A78038117BA5FADB0B503895A8F7CA1769E93E5D265046EDD6279AA044207F21C25ED2F6C77C0BCB4C2F624707ACEE9F9ABA0E7BDF0277A1FC561381F7377F3932F571BE7403ECC65D85EF3A3D26B8AE70F7279DC4BC431F9F429B3C3C592BB77E0EDD4F6DB987EFB1E2237AEE3F1C8189EFEF88DA6FCD5DE470522C4D737E0BAFB105B763B7B5FB7D371BC9DE3ED2F1B6F5FE4895028165EDC3990B138780221EEDEBBD7B0C3FD61EC213E138B30FDEDD18CCFA99EBF35358DFFB8791337837E6687BBFF7018F7878761319BD95A7CFEA75FC2F9FB5FE3D9FFFC9FC8FFDDDF3FDFB3E870FEFFED5DFD531A47187EFE97FC45ED4C7FEBC7B4D3693B69A73F74DAC9B4713293C68E89999868DBB4113F89350A1A31F88122180541510414044E40228882014908A246D3DEAE622001F910B832EE0F3BDCECCEDE7BCBEE73CF73F7DEFB2E6DB74BA508A8D530767462675A4BBF91F6F16D8CCF199F57039FC7F68E303CAAE071FE86AEEB18AF6733E9F672E19C3C9FF70DCA31AA1843EFE43C8D6369763B716BD6808183EC399B0BC579B37F03B5934F210E6D9EE46F9FC25FAD622C9B0D14C7DA2B3570FDF93B0E798CA7E37C95B6733D3D581577C0DD234144A3A5EDDEA565867386F3AAC039D52A27D81664DF2512C73267C4D090FCD47F5EAB1AC39D79036487F9E579CC07E735E34AD40C0FD3EFDB896E27EFDB47556A44C261105D7EC0DF6B768966BFFC2D0E3FFDECEDF59DE489B4378BE0BFDF044F5B07F6F87B04A92331E8A9E361BA9DE9F66AD1EDC9E34AE66F970C0EA3B1A13ECD7F7E4D3E58DAF7EDBC5EF8FAFEDF34E695E876B28F626B97044BE605CAD74EC72A3CC3A37873E9523A9F3B9CB45D537F138BDD6D30F6F6216C32D19C246B160BE373C6E755C3E799705E493E37586C50AB26D2FCE7753A3D068E4AC3E749FFF975E538441EF7A9FFFC9F9EEEB4BCCEAF1C1CE5F24C7C1EE8976153D48CB06A127B4A15189F333ECFD45E6D7C5E489E89D418FF4CED241EC4EA08D17DE149491E3B5CCFE1DFDC825CA1C4804C96E63F6F5C9C2DE9FB76E23FBF3A2843AB7FFDD47FDEDBFF188BA6C5633EE7C7CEF118CEF67CEE108B117C3A49EF05E1193D6DF79897B2C6F8E7FAEF589E89F2E7992865FF7CCF59EE392CA6BFD35D19DD9EFCEEF53B57045FCDFBF1B9C68B2B3C9EAFF1F89B73FB303C3E81867B0D34FE9CE0BC5EABC68D09258FD1A392E1BCCE308F9F2452B4AD7B69FC794B6B3B3AC40F6159B29CFAFF632477C0EE3E12D2BEF7C6B1A29A86CFBA9456F76E1E22A6DB996EBFC8BA9DEC474A623FBF98F5E38387167CF8D0846F16FC348E25FC720F1A831126B399FACF896EBFA5D3E0CE3CCFE76F4A8373A2DB6BB53A5EB72B799CAFD1F7701E5F00FDB227F0FB8FF751CCA5F9D66D1C225B5B29758758E7D2FF23A6DB996EAF36DD5E5A3E3F8E4BFD39B68F8FFA6DF858B98AABD1F8695CAA54AEC01F4DF7D2FCE7754FD5257B3E4FFACF2F8B5AF8E773177D0FD7D9F508CD2D2D45E793195BDB41FD8B043682B18CF752C6E78CCFCB3187A5E6F352E23C579E09E9A01C4FE44369FEF3BB6663C99ECF07FE4DE6829CA3FB2812FFF9B4669AC77A3716CDA6A270DEC86B93EFB9E3F1309C339C572BCE2BF9BE7DC5E58152A54AF39F13AC9712E72406FD3A5FC83E8A44B71B2D560C29940885C85E1285E781BC6FD9C20FBE28BD6731DD2E9C6E8FC5F6B0B1E2A4251E4FE0452C81C4C91A8F849E33DD7EF0FFF19FCB46C6D078F76DFCF98D91C7A81991E3B6C9825F1523F8B1AF0FBF4D4FE19781FEE2DFB72BC6F049DD4D3C707354B7B7B677A0A5BD1376DB72517C5E37E4C297DA35C6E702F1792C711C3F6592F4D31C652E9303EBFA29E845CD704ECFC0393109CDBD26AC4CE911E26C8CCF85E673FE779C9F1707C7A5C4B1EC40B2BB8B47B118C4A110DA031BE80C6DA3CDEF2B1AE76D814D88B74390F2E7257C1EDB3B44EFE00882818DB4EBCF97CF453C8F933C198CCF85E1F3CD400C568918B30F44D4EF611E9021CEAF717DAB18B61125ECE363D034DCC6EA94BAA071303E2F0F9FA7D6ADB937A1539AA01BD26051B7C25FCF0EC51129C9E34C75C9631BCFAD67B5277FD70399F7762C84CF1F5983B8E5DA06E70E9FD6313EAF1C9F07F8395C968AA16F1621C03FF72D7477D17A4E6780B16F0433776AE19D9980A1B5A5A0715C343E1702E73ECE0DAFCD0D8F4E8B57F158C1FF77B9DEC164C2799C1CEF1F64FD8F19CECB8BF38D8D17B0F5779DF2F91C8FE7F8FE1156753A581433981735C1A551F3BA5EC2F739C8FB9A2E1ACE2BA9DBB3F52F543F95CB779A5AF2D56CC58C83E9F6FC753BBDCF1E1CC22C1DA0F7DBF8C9D89DB366706A0DBC735AD8F96774AFD18C6870EBDC6B80E9F6D2F1793E5C70D6755492CF73DDCB8B1907E3F3C2FD6AF1FDC38AAC817CCFC9F89CF179AE3AC6E7EC7B38C6E78CCFCFDBBF1C7398AB7FA1E3B0AF16C6E7955A03F99EB3DAF8DC62B5D3765297FA9BED98C67B79BC67B69F5567342FBFD73FDFF3A4DACFE73ADFAD332FDB72F6CFE79CD9FA9F5597B4FD6EFF62C691ABFF59632F760E73AD81B3FAA4DA4ED6CD2D982AB20688ED42FAE73B1FF9CC2159EBC5CE61316B80D8CB86F3424B30BC5374DFF3DAF6FA0382D90E465E2271F05A10DBA444E309E1C62EE09C078261C16C936F7484B21D8DBFC6F38870FF3BB7E615CCB69D730B67FB59082F77B605B11D8AC6B1645D2EBAFF79ED5BED9C60B627355AC16C3FDB8A201A8D0A62DB177A05BB6DE95C639F9ED1D36B10A230DB17CF3EB32D4CF90F89F05EDE +MediumImage=789CECBD577B5CC9792EFAFE8B7DB9FFC7F6C53E17FB39E7E25CD9DEB692B7256B8E652B78246B9446D4048F4693490E39E40C732640E49CD140E79C73CE394734C0303A55D5E86603E80C8000C975B19EAAAED55F8555F5D5FBD65789C717C1E1F69DC8C3E3D27EEDD2E7D23EB967FBE95F077A9CBEC0C0B2F4394CDA1687FBC4D276861228150B279276325F81D3ED3AB1B2BBBC2757E77C91E4C4D2A6DFBDBAF3F844D28E64B6E0B05B4EACECF14CEEC4D20E84632796763453C25675EB44D2A64FE204BF7B309A38B1B42389F489A59DC895902F964F24ED6C69078954EAC8CAAED19BE022184DC39ADD767EEA3A3DFE8EEF3B8519CCB603F2BDC6D39C7E2FF9DC1F66B239BACAF712673BF9FD6112B9EA40DAFBE507294737F94E651FB40EBBB5814E32CD69377F9B17D10668DACD69CA541A4CCD2D42A3D51FCC93520B15095F277C7B4320C6DADA1AE11352E8499B5D58DBC0FCC212F92DC6FA061F22B99A84F1303EB78299D9592CAFAEB46CEBCD61347D9E508AB5F50D4CCE2D639D27207109303BB700BE587AE836A050EBDAEA397D5FDE7982ADC7CFF6B8EDFCD42D6E6D777CDF2D6CBF7CAFF134CBF792CF41E47B89B39DFCFE309BCBD3F27FCDF28394A39BFC71D46137F97ECB41BFCD8B6E0312B912D7EFDCC3ED07A3D8D8DC607A40F3411FEA5F5859C3A6408429E24ECF2EE0D1A3112CADAE416BB0E0DEF824EEDDBA879189718C4D4C606E650333CBCBB8786D08F7EFDCC0CCDC5C239EE6389B5D3A5E9F595EC3BD0743189B9CC6E4CC329656D6F1C1479F4128E077956FF65B1CAE03EF0562595B3DA77EFA0DA8BFD96DE7A76E69FB71C7F7DDC2F6CBF71A4FB37C2FF91C44BE9738DBC9EF0FAB7FE7FDFF6B961FA41CDDE48FA30EBBC9F75B8E5EDADD51B7019AA640A5C3D0C828EE0F0DA358AAEC7DEFF541677640A6506081E8A3D2E48058228682FCEED4067ACD074D5FA1B3607A6E09376EDF82D96C42A6F214C3232328572A876E03FBC7091C9E7378FEBAE2F9D4C22ACC160BF426EB019C5CE16D42289113DC154248FE4BF1778570ECC5A59503D8D90A4FDBF9EBAE5A676498AB2063072A4FC714345C6BB2416F3443AED67278FEF8707D79AFF2BDC4F952E23969EBD527EDEBE0B06DE065C1F362F5099C5E3F22B178CFF5D5AD0D1C551DB64B9FC3730ECF7B95B9ED4A439D2CBDD6785E4F53A1D1133C37F75C5FDDDAC051D561BBF47B9577ED9BF3E6F4FCF5D3F3BFBDA9C3A7C6D8C075D8AD0DBC4C7ADE4EFE55D6738EB7BF1EBCFD87AB1E7CAC8F0E5C87DDDAC0CBC2DB5704128C0E3D8240226DF95EA5B7607C6A19C323C3187EF810B7EE3E60639E17C5DB655A331E4D4C432095927CCCE0F6FD214836F93DCB9F663CB77B73E06DB831BFEA247C2A7E2C7D79AFF2FDF6E5DDF0A3D5FF4E02CFBF3F6BC7479AC8C075D8AD0DF45B0EFA6DFA6D37876D03D40E27922B60B5BBF6D8B1E843FDD44E26536BA1D6EA6BF63183B9AD4D6C103B5C37799ABE58A121AE1E56F2DB4CF269B63A5E193B5C2AFF181A439C942F0A5F207F2C7D79AFF2BDC4F932E2F90F165DF8441F1BB80EBBB5819705CFBBC9F71AE771D7E120F2A71DCFA9AB35C4B0B6E145325B7DA1789EA93CC6FABA0B325508EB7C0F4A95F6E9D7DD9711CFFFF73D03FE2C0BBED678DE9C66AF75D84B1B388E3A1C44FEB4DBE1A86E5B1D29A6E72EC2E15FA49E17B69F4047704E280D4024F3A35CDD7925F5FC07B30ECE0EF71AEBF969E0EDCCDD790A97237A6C9CAD93BC3F5CC2F29A07BE60A1A7385F46DEFE96378B0B9EECC075D8AD0DBC2CBC5D653061646611C30F1FBC56BC9DAE87A77D03956B76DBF9A99B2F6F757CDF2D6CBF7CDD0DD9EC3DE583CAF792CF5EE473A52AF91E39F04501D2DF6790CA752F5BBBF4F787515B49ABFF35CB0F528E6EF2ADC2E6374DB07A3303D761B736D06F39E8B7E9B7DD1CB60DD0F5313CA10426AB0D46B3AD679B59ABF7C761873BAC7C273BDC69E0EDCC25F510B0BB7BCAC751F2F67A98D51E6FFCEE87B375E389ADFE7712BCBD9E9788D387A0C1702A787B898C9924DF5C412E95826E640A4E910CD6A56518C7C6D9FF82363FE236235C12057C6A2D12C1082C73F3484722D04ECE4371E3266C6B9B88D9ED887823D03DB80D8FC60ABF5404CDC8047463B3089B2D109EFD12EADBB7E0375810B6B9904FA749BAB720BF7A03D95898E3ED2F92B73F7E0A9B337322BC9DFA69DAF5DFDDE27CD9787B95E854F0E13076784427747AF8746614329981BE5DE73AEC9FB7AFBEF75F50DC1D865FBC896C32836CBA80E97FFD57681E8D63F18F1F4073E53CB4C38F20B87403699F93C9E81E8D225FACC22757B2DF5E850AA9EC63ACFFF137109F3FC7E2CF2432105F1B827B651A21BB17B9686DED402A5980E6D60D24C229C408AE0F52F617518783C89F767B7B3459C5D26A185653025BC9142A8130B6325954D23954A23112963C563C77F94A50E952705A92A8C412E489632B5744A5B8C57E6FC548FADB3B0D99970DCF2B991C9EFE8FBFC193FF78135E8D01B6D565826DC613C773EA5F79EF7D987962F0DE3983A0234074FC0D44AD16A2870948EF8CC02F5C01FFAB6B107DFE293BF361FEAD3FC0343A8C02E1ED2E950D119D1C1EA506C9F41678677E83E95FFC1AE54206B3BF7E1BE6C95114F2B5B5BEAABBF7992BB8740B69AF03F95205AA076328574A039583C3F31EF19CE4AB4A309CBA06731EBE5019557F188F5757B1333E81C78B8BD85E5EC7CE32F9AD511D903F4A3C4FE71F63792D826A34856DBE008F27A7F0787616D538E1174B4BD8914ADBF6A59DD23C3578EE0D34F03C6EB223178F2345FBAF01BE5DBB3630089E57769E61F98F67A01D9F81EADA37F01A9CD00FDD837E7894FD4F3FB781B0520433DD63B6B88E522E0DD9CD07303E7A08A74C83B50F3E46C26E41AEB00DE3C21AD6DF7E0B6B841F54AB5B105FFA06BAC945444D66A8E89AB2F36711F386B1FEE16748DA4DD0CD2C61E5ED33EC8CA041CAC1E1796F78EE70BA11270FE5CB3C7E14894C95F5E18ECD0DD207E73BE6A3159E6A4C71F0855E6C08E9DC5CBA2FF9586A1B771F78605479E155AB11321FDCE3D0AE2F3D4D785EDC22E3DD780EAE44118E4C19A27006367F0E125F7A4F5E06A9C3E3C2F37EDA4DB7367014F2BDC6F9B2E0F9ECA61421BFF7C4F43C2E53A2EAABADDBA0BC3D1029C3698F2160B221B73B76ECA78EECEE0C04123F24AA08BC816C5FF275DEAE57F911B69A11F3781175BA086FBC8F90D1F0D2E8F9AC328AEF8C19F0DD491BBE3769C68F45017CE79111BFD04720DC50638B6000A7E7AFB69E97B69FE1EED07043CF7DA1E889F2F62AA9E7AC4A8FA4CF0F35E169E950E05076B86C7187CD8D49E411866B3DC9EF7E23EA7F6E877BCA9E92C184D83A1F79951ADB76170B0BE4AAB8E1C9E222E94B2E4883382F09E29123B5675F77733A2F9AB7CFCAA37843E4C577A76DF8D18607FF67CD83EF8E98F0337D144A9EEE5075D8AD0D0CC2DBFB6D37DDDAC051C8BFECBC9DEA79381A3F35BC7DCBE1425AAA42C4EE845FAB462E953930AFE62763C94C2CC6FE13757911B6391024FA1772122C2897F7C4E90DE6211007D95C783459EE588E90C98204F9067A810031D2DF50BF9AA766FE08C9978DE64D2C6579A44F5E2425FD801BABBE04FEB8F514DF9BB3E15F781EFC441DC467852A2299F2E9C0736D1C3F98B3E2BBA316FC60D5891FCC3BF0FD61037E132940BEA639541DBE4A781E49941126631B1F69332781E77E521F11927E88B8478DE727393E4F10EE60DF14A0582C36E44B3205C213B3708A2570ACADB1FF85ADF63DF13CBA328BD99B2358189AC7E2180F1357263176FE01661ECC43A9F140EBCAC0E2CB3D2FA7234630FA3112C128625E1F4993DF48B3394F549FABA45FF1933CD1B058AA4AB84094F40F5B8DFFB9E56A3256D72062B3EEC993C39381C996606B6AE85ADD48A2D4B12DBF283DCFE78B18DF74E1E78628BE37EBC077A6AD6CADEB771EE8F1536DF8809ED3F540AFAB9E3F7864C6A3513D6E0D9B512A96072AC7A07598AA3CC5C8431D4627CCB8435C9AFE8BD0F3C3F0F6294B0A63EE2C7BC63D39E64E103742F86DB34C9660627076115B763BE3C054BE99D3D65DAA7FCD61D7880E4FFFF5AF1D9F716FAE2113777B0987FE1649950E39A512C1399AA6E34039287E6F93A74AD20B3B3CB0085558BCB18C989D8C65142AECF07808DFB88BB44E8BFCF40C76644AD67FB4E24C9DBEDD8BE4EDF1780957EEADE07DF24D7E45BE1B7DEA7EEAEEE7ED0271888D755E57DE4EF74DE5CB4F062AFB61EB908E2B3524FDF2767B9941DAC071D8DB2BDB3B38EB4EE3DDA7CFF07F367CF807821D673279D6A6168249C476EDE90E871311B9B2110FD52D76069E4AC5DED7793375AD44BFECC4D59BAD189B98647AFEAE408A8F36961B7A7D56ABC36FC7C6F0A7C5055C30E8F0C01A81D54578B7560B237967A7E9AAB58DFC9676CF0E0FD86C88ECF20586E7E4A9907C78357A48A778B8F05FCB7068FCC8A8D5C84AA4A87ABCA894AAA878487B8C46DBF6A5DD30ABD7BEF8B07D397DCCA102C6940E4CE8A2B8C9B732FF883E866195135AA591D9E14C66171BDBD0F5FC224D0C8F08A64CCE5A7193605CB9DC1EE35F253C97A92298207C87DA733285EA40E518B40EA98ED33D53347DB12CC4D23FAA36705C78AE21ED45624DB1362320DF4EEE4C4345C268599A6532BE20E23C3E326231B6FDA1B65810237A57A83E25E55734F0FC03BE086795F2869E3FAA543194CBE2A2C586DBD108C3F32DF25FBA1FBF7ED661D26C47727D0349BE10D560E4005FA8E3F916F9ADBCF7109A15298C2AD2F7C8EDB0AFAF20E10F209B48C3AF37231B4F76ECCB3B7DBB93983FAFA749DD767EEA2AD4B5BDE8E1C4161BAF7A03B981DAC0CB8AE7667BB26F99A3ACC3E6F44F339EF7D3F7F8741638845282A78696F28DFE4826879D70EFA5D5759647AAE79F6AF53833397180AF5F0D119CCAC4199EEB6C5E2C2ECCD5E6E489EE6AC766609A18856383DFE00B2ED25F38C9789CFAE91A916AAE00F7EEF83C577A8CF5CD309BC3AFE73D613042F3C59708CFCF113C4F34FA6219E9CB24A48EE4647C4EFDE640AE6DD96DAE1787E721A2ABD45EB124B234DC767EEDEE7E9D4170F455C073EA3799230397FD28EAD0628D1D791B38693B5C7358C4E585716E9EF81F1F78EF94CA086FF762659DD7D0F3F7791BF87073E3809E5F22EF2FE8B54CCFCD4E2F66E7889E133E1077B9E11488E02058AEBAFF1061B3B9A1E75EC213A89FDAD4A96B9648FAB2B72FF812F8D3E36FF1CF1B6EFC4416C43F4E98F1E129B1B74BDC99AEB68CE687DA115F6B3DB7254F54CF9BD37F117A3E286F17B8B318716671878C31EE92363F648C333B9C275D6D29530FCB99AC882C2DB3F1F1F6BEB4E998BEBCF38C9DA15FE7ED1F91B1F25995B2D13E27BFFD2B46B7AAF8868C9F6F85FC0D3B5C3449D7C03D6576B88CD68082468BE80A0F55B3A5C1D59BF3CFD2DC793EBED83F7F5E30D99095C950329A77F3F914D15C15B73C597CC1F7E18B350F3E59746096E4F134CC9FCB3C3932A6D9C2759F17D7C8B8E37A2080B31A1DBE21FCE8B2C5800B462BEE269338ABAE7D4B3A46EF27CD566DA05F99FDDFA69BFC71F1F6C59508E61683D831D9B1ADD2609B7C9B1D820F55A793B83E5453C9AE711EA60E5DDE2236045178F45154ED0EECD89CA87AFCA8C653C4EF40D5681AA80D1CC7FEF3117B0C67884EFDEF6103BE3763C19BDE0CB3C1CD8592649CEDDC635FAB61A893E0A41371C2950B646C4DED6339C2AB294E869DCE861DCEEAF06071750D22B184E87904BF1A1AC26FC6E630B95D64EDF32BBB0B7FDE58C387FC4DDC4BD478BBC5E9C3C2E212B4940F50EE4EF9B8DDC9D228F2365979A3A4DDB7DBBBEC0914D97A388B368212B51F783CD05CBB07DBD20AFCB3E3287B896CE5B9CC69DC7F2E2663887EF0DCE248F59566AB36D0AFCCFE6FD34DFEA8F69FC7A3740D86031EAB97E1A8C19261F25B6A3D2A02312AAB1BC415A2ACD3A2A231A044F4BC5B9C87A943972F8F9BB7EDF0C85D28D335D62BEB28CB09A64492A8A8D4A4BD79076A030ECFD18FCFADC17C638C4A9FBA9F8E613BF18E90D5051F19FB46C977DFFF3E4A7932F1DB3D35BEFB9128C030BDD373531946817000B1A8C6C1A91C1D1B84080ED3347AE17CBE5085AD6FA7F36A5B2211B6E716B1BDB8884ABA80ADF5355455CAB69CA91B37ED95731D96B3D5C7E71A520775B79DFF751B9FEFAF87F5CD1892A4FC16C2F7626E77DFE530DA52985FB46362D60A89C0D977D9A91D48AD4FC1A971C0BE218043284632182479A11CA7B3FE746A03A769BF9A7D534274DD8AB0D172E0FDFEF973DBC626FC94573D7DD613674BEC96CBC697C234330FEDF04304F4C69E381FAD7B9F2D44FA5815728944CF9CAD53D94FCB7EB5A3A8C36EF2A799B797090614D53A64D379C4BD7E64C918CF6049B1FDEEC562A9EF72644B8F61B4C461B4A6E0F367FB2E3BDDCFB12108C3E74A20138F23E48AC1291242FBE0D6A1DAC049DBDBF787B5C3823A9ED7C382560742164B4BF956E9D4F13C1122DF50A9838FE0B06D7D13956A95AD856D8FE7E5C63E9680D1D8761F4DDD3D8D787EDC75F832E339B5A526C54AA24F4118C71FA1542AC26A8D0E5C76EA4A1521B6D62891D9EA2853289458BB0C92764CDB37F55357B9AE62F6282719CBFA658A86CDB74ADE3BA572DCDCB4B0354EDF5F72E23BE316FCE3940DDF1F3342B77B77D669C7F34E58B01FCFDBE5A35D5F4EE7D4EA3631BAD79ABDDF79CC6C73AB3C32464F56108A571008E560746451286D37E46D64BC5A8FAF5B39383C7FB9F09CEA4E64691D7EAD0E193256A7E161AB6D8F4C88F0CB80C18C80460FDB2A8FAD9B364CCCB0F3AA52A1D09E38E9F9C4D4BEC1E307886EE53AE6A3DEA6A96DAAF9BDC596A8B555A29FDBF114CB237D98CD97F00C912B8573DE1CFE8BF427BF9BB2E39D15273E10FA112D6EB76D032F2B9ED7650A850A5BBF9D22389DCBE4DAF6E521AB9DADA7A3DF76677E112EE2DA1C3ED8DD59CCCC3B61A5B6045514A31326CC2E3960B5271AF2757F2F7D3987E7A70FCFA3E13CD4776F20978A1F908FD175132219FC462B22D6DA7E8590CDB1477E6E4585FB63EB981699F1708C87B1750DEEDE5FC0D0240F732A37D6DD19CCE99E73006A97F538C248C5336CCFA56AE8115241FF817CB2361D4D20A9D5A31208B1306AF795ABC938D19A402595827F4304FBEC1C145F7D85AD7812954472A036709AE6CF07D1F36CA644C6553EC8EEDE473A18E8CADB73D922D2643C96CB649FB72B67664FFA7599426587CD31D13588744E79FF3A484ECF4F5ECF877511BC47B0ED4DBE1F3F5F76E277AA30DEF566A149955121B8C61E7F1819B91225A3A9B6A63912635849E5E91C0C9D176D8E9F9E2D5C0F4B10EC1823F1DD8E2770331468CC494C3CFB1657DC1EDC49247027126276DFE63AA0BCBB188AA1683021C1A77B98B5A8122CA6679A96B79FEB7975B7ACA1B93918E697C1BF761B137725A87A83A80A8528DDBC87FCF8084A7637B6D7D65095C98E5CCF4F136FAFAF6369CCC991EFE822DF292057EDE1350E890CDEDDB5F1CDF3771EB1847121BFD600B7448188DDDA36FDE6B0D7E1FCF6C3D66137F9E3E4EDC30447FFE4CAE2C78F8CF897BB5ABC250E303DDFF0D37D14AE966DC4ADD23C6F2374FD94DBBBA7BDD8791BB0135D5F27582F100A7043EBC105C207DF599A6FE8F9F5480A1FACAEE3F70B0B382B59637ACEEE3A54AA09EF763079B748D2D81355656D5046F2E3845B287ECEDB77CB1A5DDD849F8C039C7A17EEDC73C1ACF62140C60B5B5B5B47D2065E16DE7E208CF68BD51D5443913D768A12FDBDFDF880CC57FE2C467CD9AEE5D88FC736C2EBED9E34E1F5C9AE65E7F0FC74F2F6B09DE818C173B758D4937C80E0BECD62C3D2DA3AACA45DDDB786F1B5C78733F34B18DF2EEF596B305CD9C6458386E939CDF7FCD22A3B039EAD9DDC14C334370FFDD868C3CE1626F1D6D75CBB88BED3F69B25E999088E47ED3628D7F550EB12D04A9C70082548C673704B493C53E3D8CF3B8E0ACF4FB59EEF86054C0E384562D8D7D65AD671DDFF33431C676CA9BEDA48A2FC18F3D316327EB7E1D1A409A552E558F43C9B2B239B48C14B7086CA7BA48AC6FFA2DE0812B10CCC0BCB041F44B5FFA70B304C4E2268B0C2A750120EA342CC6A422E5F26E392E7E76295CAD5AEF9781DF43C1D4B214AE28CD8EC3DCB53BEA8375940D76053DE7E3510C4A752392676AA07D615DD89C71BBC7D9970815AFA4F110F44D8B9092193F9797D127DDF3F06A57D49733ECC6CDDEB5354883F1F8821B1B981E0CC4C6DCC41C61112571A37C958E51B4B12E704019CA56B30575C48967606D2F3D3C4DBDB85E5489B4F064248787D1D6DAD3F5872E1B7CA70D77274B2D5762B3B7507E5EDB6753E6C22C2DB5667A17E30844C2C8E5CAA00D5E83C5C32159477EE4074E96B38D7794CCEBCB88890D54BF47F11BAA17B2C2CE088C13C394470C18988D501DDF0704F7570D83AEC267F9CBCBDDF3AACFBE3D12234F76E219F3EB81E22EA72C3A2D3636A761E36F22DE9BACAF78552FC76E811C6B60A7B747C948C057F75E77683B78B096FB090FE244AFA09B75CC338FAE6E79FC145C6E8744C40F74BD5CF2CAA8F134266CB9E31A66A5DC5F662508E1F205C9FEA377DD898838C05E85E62BABEF4C78A10FE79D58DEF4E5BF1C35507D4C9E28136F8D2F3F61EFBF2BAFFFFBDA4C4AF85BE81E59B9F4E791A94B7EB2726114FE4611E9F807E6A0631C213691FE6E04B20BC7011F6D555F2ACC12B5312BD574370EE0B04497B115FB8C0F6E6442C56A2E7710414FC46BC86E9E9571ECF877411363EFF05C1B39F2D39F196B4363ED7244B0C0F0FCA3F65E723B4B2CD55AAB573F8E9DCCC16C35527829108D1733FCE9B6DF85828C270EEF99EA0878502AE107CF952AB69E0B9D5E146B15265F2250FD11F82E519850A05AD9E7174BAC6B6BC7D709F56DD4FD7C3ADF38348666BDF30EA0EB039BFA041DFF86F2253699C5954779D9EE7EB3A7AC1731E5FD4D8936C30DB8E1D0B0E8BE7BDF6E56F08FC78D7D3FE9E915EB0A05BD9F7F7A59DF2BC1FCF0DE393083B038C8FEB1E4D301B127DAF9B9C8371660E36A2E3F26B571AF2A6F90582195EC86FDF6776A384CB85A02B89A052D888D748B85E3FDF6ED03AEC267F9C784EED7067889EFFE06B057E78478BFF14F8989E2B43E903B658FA509B9B8B7CDB805A77C036E7D9DDABC8EC70247C83E8359DDBA67AFEA15489CFA422DC0A056B6715111CFF84E8EF799D165F5BF40D3C9F24756521BAACE10BE0A6672534DBE1E42AF8D8FCD9D3B665A3EBE18C962C329620B6556A6486C690181D415C20C68E54866D85B2EBB76985E716BBABA1D7CD670EBC6A78FE5382E5EF129E735AF15CF57018418B0D7EA305218B1D5AC211F3B9225B672DBD790BB2EB77A11D1B6278908C2421B9729DE0B894E9B2616601B9441CD100E9D737D7980D889E8B695B5979E5F1BCDF3AACFB8366F27D444AD8E6C70FBCAFCF9F0763B57BF556C93878DE93C502191353B7957F44136DE8131BDF9332F88D76B8255218A6267B2E079D3FBF7587E44DE240D16147D54CB8853F804ABEC4EED4A824125DBFC3AB6887EBB98EB71F37E64C4FA39E671269A4A27124C251A463492443E1C6FB30D16DCADF4AE5125B1344C3EBE76246DDBEB6E91F959EBE8A7A9E4DE5100F84D97AB6767A5E0F33AF0AE0920891F0787A6E0354CF43BE24D371D5D05DC8BFB9DA3857B25339E85D0576770E16B91516BA57AE7AD0967AD47AFE32D8E106B1C19C46DEDE8973F5538ED76DFEFC38DA40D8EEDC1356A4EB2DA3096CEDDEA3D74B1BA0FCBF50AC224F787FDEE5453A9E26F114D83A0CBA36B65D3EB2C5C758E505902F3F3DD236F0B2DC7FDE6B3E8EF2FEF3FDEF7B89B3D7FDE732321E7C51775F7793D9FF9EC67194F2FD96436B349F681B08D03310FA94D9D3064A65363EB7115E50319810E56DB23975B32D0ABED88795753754BA2836851EAC6E7A48787C8FBCD9121D78FFFAFE3638E8FE732BDD3BAA5793B1A10C3EAD81DD396D9E9A059D67CC64B710D42810B23AC9F8C7824C2A03E3E414325192EFEA63E84727904BA73AF28E63E3ED47207F9CBCBD95FC20E5E078FBE1DBC07EDEDE2C930CC71076FB11B35B3BF376676DEF7AD555B3C1D56CEC4F996D5CA989107E5E825C15865A1F85CB93DE234FEF0038EA36D0EFF85C35BE04276F19F2CB17110B2450C8A5B0F6F15730CF8E63E38B4BE0FDE14D28EEDC81C740FAE6C54932A6DC82796189C90BCF5DE89A4F4ECF393D3FCD7A1E32DBE05099E113F13AEB392943BE5041DC6A47C2666FBCA77777B4CB47E35CE799177BAE733B3DE77FF401A417CEB27D1EB3BFFA2D94572F23E68FC22ED6C070FF2A0C8B024CFDF89F50AE94A11D9B03EFDD33BB7A7E91D3734ECF4FBD9ED3B98AE6B938EA0F386A67FD9736F88D35D611BE909D0B4AD7B434CFDF4588BCDBEA62F77C441C6E18A7A77ACE07D529B5AE760FE051B6817EED708A913958A647B0F0E67F20E48EC13C7A0F96F915F6DE48CF3A7F700DCA5BF7E051DB11332AC13F7F19D65952CEEA13ACBFFF01FBDFFE389BC3383B1C67873B693B5C4B79A22B55E266841264956A6C119CAEB27BE26BE78B36C7F3D09F6373F8A168A9AF7CE4B7BFC53A19BBCB54216C8AFCA8107D7D1176B856781EF787D89ABEF2AEBD9FDE5790F23FFF5F36934369EB31D2D1180BCB660A4878FDB57EA6D07D5E81C3730ECFE9B7398D6D80BACABBF7615A592718EE6A1BE7BBE220FE65C3C3C6E2FDE4A3B8F30C5A5D140A750812BAD663C072F48BE712B9EAD86DB5FBC37AB1D576CA47B3BDF9A8E57B89B39DFCFE30B5CEC8E9F94BA8E7BDC4F9A136869FC8027DEBF971B6016EFE9CE3ED87ADC36EF2AF046FEFA31CBF99B0E1BB1366B6F6FC38EA7010F9D7651FCB51C8F71227C7DB393CFF82E8373DA791C3730ECF393C7F75F1FC812E82CFC9F89AAE7DE3F09CC3F356FFE3F0FCE5C7F39AFCD363ABC341E45F9B7D2C4720DF7B1D737A3E887E347F9BD3D806FAD3F3E3ABC341E44F1B6FCF650B28571F23B57BCE2D0D8B586BE75BBB651A64A27116E655191173D81176F81132E8E153E9502957E0511BB0B55546EDCE438EB7F753F641EBB09BFCEBC6DB8FBB0E07913F6DBC3D95CEC3A75420607623A056C2BC264648AB443A9E846E641C96E53576BF826E74021E99929DDB6B9E9F47D0E2C0EA071FC3B1BEC8E2D18E4D2164B1913EC20E9B4883905ADC5339383CE7F0FC75C3F393E2EDFA8929C86FDC82EADE7D7636267DE7946AA0B97717FA4511520E23F94FED4C24D3E22AD40FEF433D3A03076F0DEAA11164A361E8C7A71B7186FC190464EB9C9E737ACEE9F929E1ED54DEB42A45DA6586666414319BABF6EDAB4F30F7CB5FC1B42241542B65F7DED46564D76F216C7743FAF5D7F06AF428E5B27BDE47823904E53C8EB71F531D7693E778FBE9E6ED27B5FFDCAD7723AC91403E3C877CCC57DBFF138A40F4D515E8E68508C837A11E1E65E111A70F82731760585885799507E5AD9B286D55A19B9865FB888384B79B056AB837174ED5FEF31779FFF971D76137F97ECBF122EF3FEF47BED7388FBB0E07917778DAEBF949E1792A9647D26985576B41299B6EBC770B25C8E72B48FAFD88B9DC0D198F4CCEFC3EA586E8F8CEB1F4E5CD0F87E72F279E6F48C3D8147AB1BAE9452C567CEDF1DCE50B61FBF1536E5E6DDFFB7EC766DDC6A0ADFED72C3F4839BAC91F471D7693EFB71CF4DB1C471BB079B3D0EA6390A9C22896B6FB96EFB51CC75D8783C8D7C7E72E6FA0A1E70A9D19DB3B3B9C9EEF7BDF6F1D776BCB9C9EBF583DA7E79EAF6FD273A96203C9BF0A7AAED0684F0D6FEF5766BF3CC7DB39DEDEEA3DBD8F9CDE4B4EF797A4F3EDCF746C96AFEC3C433A12473E9D41969EC91B8EA1586CBDAFFC65E3ED753F87E71C9E1F857CBFE5A0DFE6B8DA80CD11626B2E7A95CF979F4071EB268CCB1BF049F8B009C4CC3ED46B1B388E3A1C44FE34CE9F1F571D737ACEE9B98D9E91B2FD043EAD9E9D8B4FEFBFA8542A6DE55DDE1CAE285DB8AA74E2A62988AB1A2FEE3A13B84FC2EF91F13E7DEA7EEA5E94065F3A3DEFC69F2CCE34049200F8223FDCBE2CC7DB1F73BCFD34F3F66A3283CCEEBD84119B13519717F96C1EE552A5F1DFF2F65F6130266130D7CE05E1F14D98FAEB5FF19148822F8C369CD72A315E29B2BB973E9129F0B94A83CF499F71C3EBC08D5010D77C99C659233AA31B6E6FF5C8EB7010F9C3F076B73F07992200892A026FA0761F2F87E71C9E9F163CA7F75A4F4CDBB0B4E2C0A339274AA108AA442FE9398E36BE040EA1107EB5728F7CB648C6F144370DF602CC261D1BCB533DFF42ADC605BB071749D848B17667EAE724EC92CD8DCFD43A5CF73A71C5ED64F7ACD1F405122922892788260FDE59FEB2E1393D93929E3F2B91D7CEA7E4F09CC3F3D386E7148B8CD6344CD624FB5D8FDB693020EAF420A0D1C1A7D422A4DBBD8F7417CF953A37E40A05C373AAD317CC46BCF5681CBF9F9EC6158F1B971D56163EB6F3181FCBA478F3CE5D5C227D401DCF97D778E00BD504CFB7100DE7A1B97F1BC56CAA6539329912BB2B39130923EE0B2240FCE96802316F10A542E948DAC061F03C182D42200E12991C34A62434DA081637DDE06DB8D93976E96CF995C273B52901BD29DAB16C1C9E9F1E3CA767240BC978F9EA0D0DD636BCECB7CB6241D4E1847A5340F09C603A9F0FEDF028F8672F9270173B97D965B5C260716083BC5BDF34307D3EABD5E14E22815BD128EE12F7412655BB1BB958C65FA40ABCBF388D6B5E0FD37393CD81B1251EEE0F0FB3739FDD2229BB83B96C36332EE154AA3024B2B133617F4DF2F78B071ABC7FED3EFE38C9C3F8AA10E6F50D92A711D8D6D748DF9039763CEFC50E6773C4D8FE316FA8800DA10F576EAA313666024FE8473C5E78A5F45CAA8D6261C9DEB16C9C9E9F1E3DAF8751EEDDFCBEE2F1A1AA3320E7F4211108C02D9123E6743E97AF6C2194CCC2E3F53678FB970623D1EB6F1B779FD79FA152199FE98CF85C26C4358FABC1DB9D04975D3E3FD38D0ADD63BD7BE63B75E95DEB2BD604D3F37F9B73E08D61033EBEB504CBDFFF3D2643F9DAFDE9241F6A92B69260A89CB8F25DBF72B72C47A9E7BDF027BBDBDB38BF5AA34F6095E7616B110CE6D61CA55B5833E7D39B13585871637AC106AD21DAF8AF8D9457AD23B8AA8C1C58BF7818DE3E35EB247A6CC3E8821BE5F2D69EF7065B0A626980F0310F2CF64CDB3839DE7EBA783B6BA38ED09EF755D2E6337C11325637E1C95E3837450813ACADDFB5E02698AFB7382120E3F73A6FFF42A5C259C2F1A79E3D69E8F8DBF30BF8F3A618EF6EF071D5AEC7376E5783B78BE42A88E5728449FF615EE6413D320D2F7FF5F93DEC4E37543C1E56EF3E80868CE54BDFFF3EFE0A34CE0CB693F79FDAA37833B28537F82EFCF3BA1BFF49E27E9FA42B4BE45F286FA76ECA55C32597CA08C99C0CD35FDCC4D4C75719974F64B60E85E789EC16296F0A3AA2EF11829FF5FF7A8305AC6FF8C017871089958E0CCFE93A0A0DE94F4CD6C481F74A6D8CA529574759D9E89D381C9EBF2C785E8BCF2E142360B541F6F515C2439DEDE5099E27F25B70B99D0CCFA94E9FD36AC918DD44F4FC5943CFAFFA7CB81A0CE343BE10174C465CD0A91A782E27182FA3F739103C4F2733EC0EE67428544BA74AD7E83C458AF4238E3B0F91974A519D9BC7B3FFF1371822F875D99CC479BE0FFFB2E4C2F7E69DF8BBEB6ADCE0B930A48F61DC9D41AAE93EA65EDBC061787B2591C6CEFC2276789B0892B14E506F8059E7835A6446656BABA7BAE9A4E7D16419A31336DC7D6084CD99792E43EBCE99267595EC5AC7FDB4116A4FBC42BE295D3345C772CDEF597A6DD2E4F4FCF4EA39E5CC25998271F5A0898CCD3D01E4B239C4DC6E361EAF8FC99BFD747CAE365AB0B8B8D4189F7F46B0F99CC184FBB1E81EDE7EC1E6C43B8B73F88860F245BDA6313E5FD91462617905A1DD789BD309D81D6C1EDF3F3E0EFFD434229B0278C726619548F03B811BBF70A4F1B7C366FCDD5D1DFED717427CF7B606B17CE5506DE0B0BC9DFEC71B247D824805076F15765216BBCB8D6CE931E317CE6C05AEEC565BF94EBCBDEE52FC6C0EAB3E79564B877CAB646907AA4411BA6409D1E2F6A1EDED34AD96E31356AED66936FF8FE3EDA78BB7574311140887A65CDD45743164752040B079FFFD69CD7E0FD1738BC303A158D2E0ED976C367C4DDA75336FA7F3E517CCF696F3E77CA91C2B6BEB84B7BB10B2B9F6A413225CC2EEF2C274EF2EC28B2BB0DD7B04C5FB7F828EB78E8FEC31FC71EB29FE8D60F7BFEB22F8A537839FD0FD7544CF0FD3060EBBFFDC65B3B3FDDEAC0FF1FA1123B81E17493029B1E20FB92DFC2B1943BF6B4BF4BC7F96EE9D2D107F86709D5CBEC8E2B6D8827BFE5BA57542C64471B51637644EFC81F425FF2A0BE29C273BD0DEE374268F6C3AC3FC668BAFA54C8C70B018C18504E168B7A536FC2E556EA4D9FC3F6EFFF9E9DB7F5E8FAF113FC153EA3A654AF8088F975FBDBE57BE54417EEB310C64CC6E71D4ECEA971D76DC4BA7F660F94582DB573C9E03F3E7347D8DD906A1548612E1E8F49E63FA3CCF5395DD13EE144991908A11E60B5026BC8086DDD347F18D2D854F97C8F89C70F6BF4C5B716EC65A9339441B70780EB7FF9CF651F7874C989C31E3CEB935E4B44604A7A770E5CA06FE69DE8AFFE7A212FF41DC7EF0BC42FC9AE17194F2F9463E6CBE1226C6AD989AB5E1DEE70BC82FAD21A8D3E1DD2F96F186C083FFEB7D3E3E94FA07C273AFC106AF44740067EB69DE9D34837F6B0525AB0BDEE9497C7C83CFCA564F93C3F3D38BE7F4097B3CCFF15A2C8377648CF4D722581697615BDB809FF4E151A2EFCD7638B5C981F5B5D5069E7F6934E21B97F380BDFD2B82D57F9C99C11FA6C6F1B942D6C0F33581187C9198F0BF287103589A354128706198B49D917123C4042374938BF0CAC588982DC7DE060E6B8763DF2F55C1CABA07369E0E05D28F4597D770E98B29FC4C1FC63F2DB8F09F425FDFE373FB8680CD1D6E650B28917EB392C9C1644FB3747C1213D1F355769FE3BBFF358C379D497C77D28E0FE57BD716F79A66D8E945D86CAAA545CA43DD860DC79D2575ED43446D257AEE4484C7C37B179659D9EA6972E3F3D33B3EDFFFBE1A8CA04AF4BAEA0DC0B6CE8369958798C3B1E7BFA148147A0BD173DE061B9FD379B5CFE50ADC4EC430B1B3B347CF279FD1B1BB129F92E7AAD3DA189F2F6F6C62766109F1488CDDCBA29859858FC429FCE61E7C813492E90A52E128BB2B3147DAF671B781C3D8E1F28457FB086711F31D5858764338A34372430CED9F3EC285BF3CC2FF27F2E17B8B6EFC4E11EC399F8C8310BF76640AB9A01F3B646C951E7A048F5089857139E6678D50AE98101C9F826B7C18EFFCF9217EAA0EE13B53367CAC8B0EA4E7216700D6B9196CBBBD28CD2D60DB6C259C4A8E80CD0D81C8CFCA269ED7202D5640F7CD9744CF9758D9EA69727AFEF2E879A76F5FF7C71CBBE788FB030D7BFB4582035F7BBC78904AECD1F37B852D7CA9D5B0F7B7238186BDDDE40942A9D52146F7CDECD4EC81D456D09C8E481A7C616DA0939E8F283C18237836EEC9ED71E9B344FC7EBD1E82F35F22E17237EC57549E3EF4FD3B5B4FF08E3383CFBC7BED6875BFCA9FDF1327F58FB8D21825FE11A51BF5B5B4D7CE7C0D2149276C34C066F2ED49E7119179AFB88333248DABE469C59B27CDC98EE5C8658A28956B760EA3CD8770ECAFE07D790D1B9F7E8652B2B6DEAF9E5EAB349BCBC6F1F6D3C7DBF7FB7D767B473B5C84E031FD5F389E246DA18C0552C7F39E6CC36DE7A7EE8826CAD20F2552AC3F716B34CCCDCB14CC1E48FD365B80B5A9EB377508A4B6097659B1BCE6C2C48CEDD8DA403BDE4E6DDA375C49FCD418C78F847EFC68D3837FD747F086228C37ED71A6C31EF25FD3261F5B245E9BCD5373495F68B33BD8DC97899E411508235B698D0F2B8E38DE7467F086B416FF1B121FFE8DE0E3CF8C31BC4BD2D7BB036C3D819BF48B2E83E1603A36DB6E3A01D67F6EEDDA1CF6A4439EB3A41C7FDC7E8637545196CE4FA45EFC481260FEB7D365568E7A1D3B55AA46BDDB491DB1393C92264BAF4D9A1C9EBF5C78DE8F7C69EB31B463637008F83DC7D92C1FDB2D0B5B83B7CB8FEBFFA56BAEA86B75A609DE666173A64E04CF37542E6C10BDE6ABC8A30E43624D82270F41A009C312AA8D61EBEDB5D96DE56F952777B408A12EC6E2A4F18B4D71F094216C129EAFF7ED1DB3F49A4EAB3AD67A33109912E02B6BE510903E974FFA133E49CB40BE71BB3ADE1F7F2F65E3F4FCD5D3F34C2C8142A1D0739CADF43C6834236C77219B4A37FE4BD768BCA8367098F97317D1F565898DE06E6E8FDBCA4FFFDB0BEF68C5F9D4B654CFE9782383DD51D99C3E750D645CB63FFE7669FA63CFCF11E278FBE9E7ED83CAF71A67B3BCD01341A6B453BB1BC81540219D3E741D0E227F187B3B1D93EC9F6768F7D0FFF6D21FB5C2026ADBE8351D9EBB753AFDF6E5F47C9041D2E4F0FCD5C2F341CA51975710AE48D7A34F90F6719475781478CEE38B1AF62683D9D6B1EFA076879B91286E45E338AFD2E27A24881B5E37FE2214E13A19975F733B71C9E1C2BD7884FD77503CBF4AF4FC8AC78BEBFE002E9B4DB8ECF4E076348CBF6CF070CD1FC4ED4898AD491CCE67B0E1699D4EBF7DF93DEFF334AF381CB868B1E25E32863F6F6C9232C759D95AA5C9E13987E77579A121897F2363C3714FE648EB7010798BDDB5C796CCE13987E71C9E1F0D9E0BF471A6E763EE745FF9386DF3E7013216A66B00E81C63DDA5EBFB9AC3EA7EFADF41F5BC399E567137FB43B1DEED259DEAD8E9399856BB34238912A7E79C9E1FD47379046F087D44CF337DE5E3B4D9E1F6FB07E17CBDF0F65EE269963F0ECED6FCF4C2D9BAA5C9F1F6579FB7D3B321E8F89CAED738CA3A1C449E3BBFBD77F97EFAF25E30ABD5FF383C7F75F0DC1ACC63CC998078DF1CF161EB7010790ECF393C3F6C1D76937F5DF1FCB8EA7010790ECF393C3F6C1D7693EFB71CF4DB9CC636D06B9CC75D8783C877C273C9EE7A5CB62FB4C96DE7A72EDD93D7E97DB7B0FDF2BDC6D32CDF4B3E0791EF25CE76F2FBC38C563BB7FFBCCD7BB14C792ADB40AF7136CB0F928FE3901788651C6FEF51BE9738FBE17C1C6FE7783BC7DB4F17676B7E3AC5D90FE76B15C6F1768EB7D7E503B122ACF62474960402A1DCA1DA00778F22A7E787ADC36EF29C9E0F568756670A0B2B2E2CAE3A6130B7BEB3FD28F4BC1FDE6EF7E4C0E7FB30B7E280CE183B55BC9DE66D93EFC192D00FB5A2B59DBB937CDDDF4EA6D9E5783BC7DB8FB20EE3E92A5B8B75D8367054BC3D9ED982C6108344EE87DB9B69F9DF5EC23A61412E93473A91463695453218442214433E57403A1A63E746A62331A4E37114F2C5037953EBA35068A3B0DBE31DCBC1E13987E7DDEAB0B8FD041E5F0ED154198974998567CB3BF087F208C64A48664A5DD3F1040B8811F968A274E07D3D7D7AAEF92ACF878969FB9E73CD4F12CFA95BBF8F255BDC39163CB7ACACC12912C1B129847E621C01BD19B6351E94A333D03EBC03D3D21A0C5353B02E2F1D48476F4AB06F164DB63E1FB7397D0ECF393CEF24A33525313D6BC3DD211D84123F0B57120CA177B33E1C314024F5754C879E2F3A3969C5AD5113F8ABB68E75583BC3FCF4E039BD7B859E8543EF38F006F32DFFDB4B58272CF848543B7FAB9F87721E9A37EAD2BCD5391087E71C9E0F8AE7F44966ABD01AE37BC243D1123B1BA6973AA45848FB86AE75B843EF08F11EBA0D1CCA0E57DD41C0626B9CB31477B9A1D9543D3F73CBE182CF686ABCA76ED0EE4079B7BFEFA6E7997496DDF940EB9D3EF42C4DBA0FF5BCD98C775757F13E6F13F713E1C6BEB16B3E1F3E5569F1E1E6262E596AF768F0F8869ABCD30D93C1D3F1DBF7ABE75EAD116EB912F94C9AD3F3D748CF296E50CC989977424778220DAF736C1A6677A73BA643EFEC128843ECBF0A75AC631D56435184E95DABC7A8E7DDF9D353A63FE94C151E9914018584DDAB984A57E095CBE0978BF7BE574AD96F2A1772F8605E5E473913DF136733E7A36765D23B1AF962090BA3F87C3B91C205B3055F1A0DB8E177EFD91F7A8DEE79F7FB703711C1C36CED9C4ECA3136056296669CB49FD6E5188CB7077446444C166413C93D9C89DA4EF6FF97E3EDAF0E6FA70F6D977657764F380B73677BAE43CAC7BBD621F916F4DE80805603BFCECCCE421DA40D0CCCDBB776D81DAF59A118596F84E8B802F1D565E44412643C6104952A8466A79FBFD76810136CB2DF542E4AD2F1917C970AF9B6784EEFA2A26E285ABBD7B09F7DE8F587ED55DD95AF9FD5D5AA0FEC0BCFB777CF7EDCBDEB96F1939DC7CCA577DAD2F3FDE85E556F280F27E9DB5586188291C2C07D3187E72787E7C960780F1FF5116CAD71572F7C06EBDE3877E8F9A4BE9EEB3064F774AD43DABEE8BD0161AB1D3EA51A9958BC6B398E94B7EFEA7991A41D9228E05293BE6676144505D16F891C5E8D05C1917BCFDF6B6D882C8C93DF2A2667E74BE1512A08266A3BE8B993DD6966733DE7EDF752295C269CE1BC5E8B4B763BAEFB3C0D9DBE154FE12BB3015F59ADB8150A1CE0ED740C71147AEED06861656557214DFA35EAA7F7E5D9787C98AC71668FA1F7F518AD49CC2E3AB0C273C16889737AFE12EA39D5E9669966ACD88F1BF5BCF75A87CD71B7ABC36DC2194B6219045F5E4558AF1EB80D1CD6DE4ECBD5FC7EBFCCFEF73697A7639CFB79BBDA6082442A676114CFBFF106F1B94A854FA4627C6930E0B2D5C2F479FCC933C2E54DF848C0C7159713579C8E066F57EAF4844B67D919D1EDCAD19C7E37DE9ED82D63CE1F44D6ED67B612965FDAF712F9FABD8FDDBE1DC7DB5F0C6F77294DF04A84F08829B6A8605EE1A15A29F6249F70EFB59D279AF29668914F9AF75CA18C04D1AB64208872E5E018AE59BE973ADCFF3D06690387B2B757B761E40B1AF7BDD27B2C8CBC8DC61DB01182B7FA75DEF3F7C4358B443DDBE1A20E07C1633E1696561B78FE8DC78B2FB43AFC69711E5F3B6CB864B337F0FCBCC58977E7A6712B1C6884533C5F27795C5C5E854FAF3F123CA7E5A0F652B78007D3CA2AA9CFC06E7E5D9C1DAE857CBFE5A0757D54789E273A6759E3C3A790B2FA49C712089AADB571D621F13CA437214D3824D333A3194FDE7D0FE9377F89D4F43CCCF38BB0AFF3E19649F6C49D25785328D6EE3876CAE54CD7035A3DC2661BB31F45C3E1BD754874C5E7701EBA0D1C16CF69BF551FBFACC94DB82C31B4BCE3A2EEA642918E711EC0739D01734BCB2C8CCD95054338B3BC86F75716F1A54E832FF5BA069E5FB0D8F167DE0A2E59CC84BF1B1B78AE22FD82CE6439323B1C2D47B15C25ED86E87B3C895C2ABD07CF7BED77393C3F7E3C4FA4B610544A10B5753ED3B4AD7C13E6523B5B9C8C19EB7EDDD028E93F54EC7D3599C1D3BFFB7B3CFB9BBF41D21B41D8A0236D2371206EDDE43C92FEE7770A51573D344EFE1B6B84ED9D3FFF168F24465CD2C6705111C639810F57CC71DCF2E4902C540F85E7D30B6BD87EF2B8EFF5EDDF9813F8B939D157DFD3AA2F7D8EE74ECC139D9E5B586CE0F979A3151F89C538333F87CB362BD17B7F43CF3F92C8F0CEFC2CEE44438D708AE7738BCB585DDF402ADE3E6FF411BB32587224B142CF6E77A5D943FDA14CE5009E27E319986667E1245C21EAF6ECE697C3F356F2FD9683D6F551E1B9DA1CC335B51BB7AD1176B6E77D6F6E8FDBECBFB87BDF595B3C271C40C3172240B0A7B2BD0DC5DC22D17B574DCF82616CDB5D08F03691146B88FECB10751E1C7F7B543AA4C2417657678EC64D5CA74846B022D9082B26337BD23CEB89E3E7A41D7E6FCE8E1F123DFFE19A0BEF94AA30C55BAF536987E755A2DF33F34B0D3D97A975C4FF6D4FF79F37FBCF93EFF4239EBBE77DC6ADC29AF72E876C0E58EC5E986C56163688BD9DDAC3CC36277464ECDEAD1CD71D719C21FDE7DF3ED0E31F474CF83BE2FE58E8C18C2F8690D5C6F2431FDDEA0ABB1333BF2960F2F48ED5805A0B83468B7CB13470D9A9CBED3FEFF1FEF3EA0E7E2A246D5E14C03F8C5BF0DD692B7E44DAFF6F89CEAA6CFEC6BE6B7A97069B730D46F0FEEA2AE3795F128EFD2EE9FB87CB45FC65534C78A011170D1AD6BEEAFBCF353A0FECAE32224DF7D4535738390D2B8FC7FC9231DACF6FEC794F653BD5818527864FADC4B6DE880AE1F659A511C24B5708E790B23B43695842634088F419E924D1FD681C8AE94D76BEAAD99E6CDCA5EEF667FB6A030E8F8FE9B99CB4D341787BB3FF937917BE3B66EC8B6B75E4ED2ECF9EF783E879AF3631FA98FC0588AD496CCAC2E04982E0890358DBF4A350DE69FCA7CEE5B6489FFBF89D77F1ED7FFFEF78F2BDEF6387F4E3FB39D320DC93E3EDBDB53BBA1EF4334508FF250FE1773336FC6ED68EB7171C448753C815AB08C672F0F8FDECBE1CCAF52ED91D38A752E282C94C78A00517C918FD51A58CF33A33AE79ECB8138FB3F645E3A7733CF912194B179E3CE7EDA4BE691DEF503D54A8E123B8989F9DC75613376FC5BBF7E73D134B36FC72830F2147016EC10632449F69185FEC43C419804F6540361665F3E755929FB0DD09DB1A1FF9746AA0367094FBCFBF5244F073CB51F27607EC648C4EFB20DA3753DE7E8994F797E3B3787B74085F9071572FF3E78372BEFDEF9B793B75BD5A3DCC4B6B35CED5823371BCFDC5F3F6E2D63388256168CD0E88A51286E7134F9FE10F84639F95F2F7B48DABA114FE38358DB76666F1096FAE81E753B30BACDD45C8B8316CB2EC493344F2968CC4E1E74B1195C91012CAE1140A994D9ADACC0244A6D73A0CECDA0C1A61E40990FE68FFFCF9169BB7F5325B40B1581CA80D1CE53E96079E0C7EEFED6FCD7D2F786EF7D4F241EB6188F0E21B013FC677767023143A523CDF6F83D9FFBEFED4E753A284FBF9462650369BB09DCEB135CFCBCE34D63C39ACB833ECA17E4FAAF5DE190ECF8FDE0E97CEFF15E1681589DC53D8E87C0FA9FF916D82412623E1ECA646BBB81D4BE0663080AF893E9FD39B70C56569E0399D9FA17C616B574F9A3904C5FA9AFF5B48146EA2F339A443E1C6FF12BB785ECC97502C94910C8490CBB43ED7B9D5BC5A623F1FA0365F9B0BDA070F914DA4076E034789E7A168918CA7FBC7F340248F5BAE342EE9A2B8A00CE1B22E82EBEE3456A5748DDFD3868C784E02C9B2022B5746184ED387EA71B39F8EC79BC3E81DEA478DE701B79BAD8DD9DA5DAF47C3C23205D6781A9C7BF694DD25FD33570EFFAEF4E39D9DC71849955ACEE3F4DA177378DE7B3EB2C567D01B63102A0C50A9D50CCFC79F3CC57BEB7C7C6DD135F4FC82D541C6E45A7C6577E123B10C5FEAE40D3C57129E46F53942FA80E6F9223A5F13DB0DA376F7F0BE7557D4A5EF68F9234E174CEB1BD0DC1B62EBC15AE5B9D53A99BA7C3DBC9ACAC2255120158EA190CDF7F41DFAC5F317759E0CED1B3E27FAF1CB7019BF25FDE30F792EFC3E5DC6435F628F7E84AC4E846C7604B4DAB6F938CAB550EDF4BCF6BF1D04A7E791572A6BFA9E2DB0FD09127B1222431C427D0C7C4D0412731CA942F5C8F494D3F3EE71FA9C0E684D36C809CFA57A3E4A70F8E7D76EE1FD95555CA0F636BF0F3722319C95CB304574FEED55213E17AD35F47C43206AF0F6FDF3C294C7D7FD2EBE88F9BD5225A2846F472C56A8C8185EAFD620EE0B628BEECF20BCA192A8DD6B4EE7DE2A85125CAEDAF98C7689F8C0FC335D574B6D7F8DBE85C461B1B80FDD064EC3F9ED14739BF1B8EEA7E1FD72C7E3DAC3D0FCB03C579F40333C8A38E186CDFFE3EC70273F7FCED6376C13FCB0591A76B88B660BBE2118FBB5DD46F4D983E15219D3DF3E637AFE894A875B416F83B72F2DAFB54DB3D57A383B5F0CDB3A0FD6551E8C64AC1F215844C77155A2A7DBFE10AA744EABEE7779FAAEC3FAD8F3306D803B0772303C6F172767873B793CAFF3E17CA5CACE12A2BAAE25D8419FBABF7E877D7398DA56B365C733EDCF5C6CB9BE3D4A7827E1F0559DA15107099D191989B4612F677ABEEBEFA70EFDE12264CAF0B1E239A7E79C9EBFCC7ADEF67D3A8F483CC1D22954767A6E037B749B3C46496D0F53786A06DFFEB7FF86E8279FB1DF06A393AD95ACAF9F3A4C1DBAFC7968F59163D573EEFCF6F6BCBD5D9C1C6F3F1DBCBDD3FB54BE8C5822C5D2A19C78FF9C4CA73AAC73753A6E533B6BEBE7181FF706B0A337B1DF34BEE3ACC341E439DECEE1F9EB86E7CC25BAA03306201007D97901026908A313663C1A3792305FDB34EB787ECF93C5BB749ECD99866971190EBE00099F1F5A430C0BCB4EF0450124329563A9430ECF393CE7F0BC3B9E074D66A29BAB08EAB50C7BC371BA7FE11902A13C42C41F4B96BAE2F9E7EB3EFCDC1883C59E42D06042883C74DE8BBE536A2248E7778EAD0E0791E7F09CC3F3D70DCF4B952A4A4A35715B97B397F1F959BE1FBFF266C8783CB5E7FDE2A60FB37366CC2DBB60ED7286F88B6C039C1D8ED3F3C3D66137F917ADE72193A5E5BE687A3E827D779D0B5DA74EE7B15D76476DFD4BD37F9BE7AFF7CF9FD373A43AE9B9279887D39B2663823872058EB773BC9DE3EDC7C5DB7B69033B6259DFF2CD615FA9A3F84F7F96ADF5E8D40638DEDE3A2C95CCB0FE34154D2064B1B03DBC51A71349F23B6C732062A76B94DC6CFF4E2E933D20CFE13987E7DDDA40C4E58557A6E85BBE39ECD3150F7E220B1CC0F3175187478DE7FDEE3F1F64EFF2FE30A3D689D97BB3581A5DC7DAA2142BD3028C5D1EC5F29C185337A730737B0253D72730716D1C2281FEC01A0835F9EEADD645EC5F23E108E45BA6DFBC7777FFFB6E65DFBFF7B7DFB2EF97E7F69F0F568E4E7548FD516F001E323EEF57BE398CE2F96F6245B617BC531B388E3A1C44DEE1698FE727C1DB858E64DF7BCC077916BCCFD712869295C6DEB2E6FD66DA5081E3ED47207F1A79FB20F2CD6152D23E169D09768F974A9FC01ACF8355810F5E7F86E3ED3D8409ED8923D7E9DBF114FEB42EC2EF2667D9BEA5D16C18779576DCB9730732D2AF2F0B0CF8F8DB67F8C1AA07FFB464C78F443EFC98EFC5FB9628129932C7DB5F31DE3EA87C3B1907C105892200B13282482C7FEC7578D4BCFD55C1F307B9026E45E3B81E08E06B32B67F904E303CCF5776E0F1F91B783EBAE9C7C8BA0793D22086979C106A223DE1793E5F462A1046506F46A1D87EEEF5A4FAF2E3AEC36EF2AF229E37FBF3E5276C5D0CBD43E945D4E120F2AF039EB77AE63DD903E9D3BBB23A6141BBB2A793397686AF726C0141B578E0B27378FE72E239DD6B42F59CAEB9A1F7ACBD6C78FE2AE8F9157F081F6E6CE0138914976D269C33E8713F9DC44DA909BC4D7EEDBC40871736322EAFDD8B1783D69C848070771E7982E1E77BFB3B95BD4ACFAB0E3E3F7B9BDA613D815C5F65E7F4FCE5D47396677B84DD23CAEE2D70B8D83970A759CF797CD1EEFA7E1F0CE6DECFBCAEBB47C1DB47AB3B18DDDAC2FD4C060F32294C3CFB160F73593CC866713791C0AD480437C3613CCCE759D8F876B5AD9EDF8CC5F195C582F35A1D2E9A0CF842ADC2503EC7787B2096C6E8C23AB209BA1FE129BB03339E2E936F9287D61863E3AD78A2844C34C1EA8F9EA74FCF1369BE1FD6AA52B2F5163BE45B25C8B7B3D8ECB0E8BC10CB426CDDB44411C1FCB20B9373362835E1AEDF83E3ED2F1F6FA77EDBEE9D9F119B13A66531E4D7AEB036755A78BBC5EE6AE875FD79D1781E8946D93D0A57AF5DC3AD3921BE8E15F0FB8737F099C9890B0A21CEAAD5F8D3D232DE9E1CC32587031FAC2C129DB5E0AD478FF0678509F782B681797B245540A9523B9F9D9EEFD6AA2FA7E7B253BFD5E14465FBF19EF736570D7BD85902DE0093A77D00C573A72783646E9BF89370FB49BFB2CB0D5E745FFEBAE2B9837CFF40B400233D9B94604727F96CAE8C6428CCEE1149120CC9A6B2C8A5D3ECBE157AC61BBDC790DEC7D132CD6C0149A198ED2D0FE9CD887A7CF0A9B42895B78EA50E8F02CF4F42CFA3F104143A331E3D1AC28CD482BBF90A6E87FDB8168AE292598F6B3E3FBE76D8715EAFC72D520717AD569CD769D9D920BDEA353D53E47A3882B31A35EE24E21831FAA150A94979BD70D13BA17671BAD59A47B7A876774E5428DA7326DCCA8601F30B6268151E58246A76FF465DCFE9BEE641DA2AA7E747A7E7F43ECBA92913A6179DF0FB521DE5C3F6109C572FC272E51A6C37AEC179F73EFC6313F04F4CC2F4E545683EFE1CB1C585C69911F41ED1663DDF52AA59B85B228347A1ECE96EDED3A2E787B1B77BC325F0055E6C4AE89AA1744719BA47309ACE63757505F34A176E67CBF8607916973C015C775B70279EC4171A2DCEA915EC7EB52FB55ADC8C86F1B95289C9278F7BD6F3FFB8FB001F89F8B84DF47CC21AC3EAA6107A83819D4157E7589D381FADC7A4CA02C7F21CBBE7F5BA2B8511990CF3B91CEE3D5A83CD6820BCCDD1D8D3D4EDDB71BCFDF879BBC9966AEC1DEB249F7579FAE283DBFBEA98F64DCD75B0FF8EC5936E0347656FCFE78BC867F2C8A46AE7A547121528B51132E6A5F75AA43BF64794B74B941A9CFDFC53C2DB05B89A28E2C3D5595C7405F1A562130FC838FC6389081F6CF2F11E5F8033B323F8F9F55BF85421C31FA7A7F1FEDA0A86C8F8BD5E077F9188F1F6120F9F88D67156A5C29F1657F0B16003438502CECC2FE07E2ACEE6CF2F5EBE82959505B697A1139ED37D112CAFF4DEF60D317C4A05D29128EECA6C106D6E6243A7C322DF0CEDC828DCE45DBD2FE7F0FC64F15CAE8A104CB733BB4B22B3C5DE47E9BA69476D3F0B4DC7EC70436F34C14638DBE893A7787B7C0A97ADA696BAFD87954DBC3B3BC6FC1EBE0866D2A7D338A8CEA8080E51BCAAD7C1AB8AE741B319FAF109B616BD1EA6D2C5B0BEE963F38BDDFAA374691B2E979BD9E1862BDBB811F4E306E1D9F793310C95CAB841C64E77E251A6AB5F594CB844B83BBD0B9DBADFB85CCCB656AF8FAB3E1F0973E221C1D987F902B3DBDD8E11D96291C413C023E2523B5CB6F2180E87B32D16D4C3EAFB1C4B320522D30B70101E502271533C1F27FD08C5F3C94D13B402013C323987E7A708CF29C650FB58FDFD7E9CA5FBCEA99E533CA7E73FD3F6345C687DEFCFB56018573DAE069E6F92BEA1559E68FAADEEE066F9D8E9FE6D4E339EAF99138DFBE86E28C348E5AA6C2F0F9D57A4F38BBDF64727397FDE8C05CD61CFED70AE3D32127D18D36B6AB6663E18AFC02151211BF571787E4AF09CFEB6591DECAC753A6656DF1B6A8BB319A297FDB49F6A873AA6E91B952A9696932F86472E87FED118CB07B50565F315C40936F9B42694489F72D278DE8F9EF3DC35DE7C3312C66D6762775E9ADAF2135DEB2B128BB3FB8FA76666086FE7B3F1F95706153E914A709BC477147A4D6D77EF2CADE1AA9FAE874BB1F9F3B1F17148E54A78FD81C69DEC9DF4DC67B7D7EED7D97DAF35596134D7387DDEE2444AA343A154E4F4FC14E9B9CF55E36261A2638A1B77E15C5F27BCDD4570BEC6DBE9C3DA2AE5EDE47F1FF179CCDEFB3119FB1D46CF7DBBEFFD3A3D4B9B72C0F2D6160B4F244BF0A994702BD4C8040EC6739A79FB86A7C6752E3B1C0CD76BEF9FA2790EB12DEF20F95817AA209308196FBF9EC8E333311F9FCAA58427F5D7CFB67BFE4C38F59999715C727B703B1C64BCDD1D8A617A6105A9440C9DEC70A96084E9AE5FA5D9773F871B4699F4C0FC793A1A6F5DCE1EC238DE7E74BCBD6AB2B0F324E8FD8701BD0911AB6D97B73F6D70F954B10A37691394B74F3CFB2B2E917EFB82C984B36A655F76B83DF950A8B0B3B0846DD277F8D444CF4D466C152BCFEF6124ED24E2F090B15FF6A5E3ED753CBF44DAF9733C77B23B2D9ACFE368754687CF66C3F8F42CAE5DBFDA983FFF60710AFFB5BA804F881E1D859EFF6176163FBB7A15E78C74BD8C9EE039A9CFCB5771FFE143B8C958BE139ED7FD9DFA553A7F1E174AA09BE1C1B2308562B1CCE1F980E5B0B98E0ECFE9BD87D41F7105D8BDE3FB797BB6544532933D72DE1EDA7D1F25F16692CFEDD0343C9B29206CB1A154693DBFFEA2F1BC9FFDE76BAE342BFF9D78ECB99ED3BB6B9AD68FB5D573D2174CCDCE637D9DD7983FBF49F80C9DEBBE1D3D1ADE7E2B1623FC4083EB411F1E66526CFE5C225761726E15568BA9A7BDCBEDCA1EF387E127781124981EB4DA11207C3E9D4876FD76DCFEF3E3DF7F6E21F84CC7C5F576C7EE4A226D92DE9F66DB7D0C662B4CE2DADDBB7748BD7DED249C34F57C3FD56D12F695D180AF091EDC8A455998912FDCC3FB1D24CEFAF95374CE46B3C93FD0E6693E349B024844667CE0CDE22D59086F2923784BE4C3BBE4F746287F6C6DC0E1399AFDE775DE7ECDE77DCEDB697FB2F3A4A33C73495E8452259656961BF3E794B77F6535B1F88E42CFDFE7ADE3FDA5395C0F87096F0FB0F973A14C85E535325E8BC5D1CBFC79BBB2671219846D2E94F2796EFFF929E2EDF4F77E7B7BBD5DB2FB5077C37426335C32055B6371C168C45F44C2869ED3B0F37A233E974A70DE68C245B39E853BC452F8E89E861671D2F4AB6CCCDADADE6E2079A27AFEE6A617BF9284F1F32507DE3644A14D95593B3CEDBC7D8CB8170CDA3DBC3D118E74E55F74FE7C687C1267CF7EDE983FFF94BF8C77971771C9623E123DA773EABFBCF7001748DF71C3E761F3E75F7D730D9F7C7E0E0EBBF5D0BCBD1567E278FBC9F276BA2651280B23182976940FC5932804C350C895D0190C3091F1BAD9EB83D9E3AD3D757F5318BD1FD141F86EB736701C7578D4BC7D103C1FA9549AEC70CF1A779877EC8F888E49D55AAC106C5D3304712B5D203C4987733A0DBE71398E44CFCFEA74F8802FC025BB8DE139B5C3A90D26AC8BE4506B1DB8E0C9E0037904EF89FD788FF4B367497F3B4B785473BFDF4BBFCAE1F9E9C1F342F529D446A28FBB67B875928F84F308C84548B8DC03ED6379917538887CAF78AE7424F111D185DFEAE2F88D2C885FF2C998C29DC644308B98DD01BDD408014F878D553584EB35BB349D8FA2F6867ADF4AE7D3E9FE0EEBEE9DA8D4F5050B6C7DFBE4FC3226C647F1704DC1F0FCCF2BF3F848B08E6B41FF91E8F93BEB7CBCF9700817754ADC0C05981D6E797D030F868630B9ACC05B44AFFFEF8B0AFCFDB011FFF050835FF972B844EA3E5BAC7278FE92E279BFDFAE9B7CAF71BE6C78DEACE75A4F9AE9391D4FFC5615C2BF4F9AF13B6D148B812CE1E70EC67BE3C1289C64CC5BCCA60EA45FBFE3FC4D7F1E3F35C4F0863A8A3F15CB7867EB0954DE3086462770E7EEBD03F3E7976D9623D1F3FAFCF9459B097762D1DDF9F331DC7D348EA90521FEF2ED33FC27C1EF7F3324F00B4B0CEF1399CBF92D640B9C9E737AFE6AEB79AFBC3DBCFBBFB03B08CB8608E57CF2C07F6DCE147EEFCDE09FF97EFCC39805FF7BDC8237AD31BC654D2157D986D9EE24F8CAC392C6B7C70E476D9F476987BBE474E26E3CCA78BB44A5C3FAC626CCEE24E3ED6F2FBBF0AB87069C597270BCFD08E54F8AB7F7FBEDBAC9BF0EBCBD6D7FE274637B6E01D5D57532BE51214CB1BDC57F2DF638CE113CFFD3CE537C9FE8D13F8E1BF1DEB3670C37258E00A6481CE7CE9D6BCC9F9F997C845FDEBD8FA99DD291E839B59BBEBDBC827FFEE4737C4D309DF2F6EB376FE3FEF008BC3E2FE3236E8586ADD36FD7877278CEE1F9EB88E7D9E20E1B5FFB77FF17F384908E45DAFE979E973C6F4C6074DD8B594D949DBDC82761D40E37BDB0840D019FCDAB513BDC3716033E952B30FDECC991E8F9C8F6137CA1237DCBD22ADBDBCEE6D5E46A5CBD7D07C1801F743EC3B9C647D4E56CDB87F6DB9777EB77393CE7F0FC34E239DDE7A73745219607118D15B121F46153E887988C759BE7A5FAE97BA84BED7013734B989D9962EB646EA44A383333818FD657898E3E3D3A3C5F5CC2AFC978FCBACBCAD6C9AC6F0A303D3F0FA7B3B61ECE78E64304BEB9D8B60FE5F09CC3F35711CFF7EB395F128440E4C5BAC0CBD6E24B95A1DABD333B8F0FA5E7D495A9F4F006022F74BF5A616B0712B51EF942ED3C27CBA5CB08DCBAC5F25409840EE4394ADA5FD8EE80796985ED49E0F49CD3F35741CF7BE14FF43E8AC3703EE6EEE6275FAE36CE817C98CBB0BDE647A5D714CF1FE4F2B8978863F2E95366878B2577EFC0DBA9EDB731FDF63D446E5CC7E391313CFDF11B4DF9ABBD8F0A4488AF6FC075F721B6EC76F6BE6EA7E3783BC7DB5F36DEBEC813A1502CBCB873206371F00442DCBD77AF6187FBC3D8437C261661FADBA3199F533D7F6B6A1AFF71F3266E06FDCC0E77FFE130EE0F0FC36236B3B5F8FC4FBF84F3F7BFC6B3FFF93F91FFBBBF7FBE67D1E164EF6D63FF7F7B57FF94C611869FFF257F513BD3DFFA31ED74DA4EDAE90F9D76326D9CCCA4B163622626DA366DC44F628D82460C7EA00846415014010581139008A260401282A8D1B4B7AB1848403E04AE8CFBC30E37BBB3F7DEB2FBDCF3DCBDF7BE2B4540AD86B1A3133BD35AFA8DB48F6F637CCEF8BC1AF83CB67784E151058FF337745DC7783D9B49B7970BE7E4F9BC6F508E51C5187A27E7691C4BB3DB895BB3060C1C64CFD95C28CE9BFD1BA89D7C0A7168F3247FFB14FE6A1563D96CA038D65EA981EBCFDF71C8633C1DE7ABB49DEBE9C1AAB803EE1E09221A2D6DF72E2D339C339C5705CEA95639C1B620FB2E91389639238686E4A7FEF35AD518EECC1B203BCC2FCF633E38AF1957A26678987EDF4E743B79DF3EAA5223120E83E8F203FE5EB34B34FBE56F71F8E9676FAFEF244FA4BD5904FFFD2678DA3AB0C7DF23481D89414F1D0FD3ED4CB7578B6E4F1E57327FBB6470188D0DF569FEF36BF2C1D2BE6FE7F5C2D7F7FFA631AF44B7937D145BBB2458322F50BE763A56E1191EC59B4B97D2F9DCE1A4ED9AFA9B58EC6E83B1B70F619389E62459B358189F333EAF1A3ECF84F34AF2B9C162835A3591E63FAFD3E93170541A3E4FFACFAF2BC721F2B84FFDE7FFF474A7E5757EE5E0289767E2F340BF0C9BA266845593D853AAC0F89CF179A6F66AE3F342F24CA4C6F8676A27F120564788EE0B4F4AF2D8E17A0EFFE616E40A250664B234FF79E3E26C49DFB713FFF9D541195AFDEBA7FEF3DEFEC758342D1EF3393F768EC770B6E77387588CE0D3497A2F08CFE869BBC7BC9435C63FD77FC7F24C943FCF4429FBE77BCE72CF6131FD9DEECAE8F6E477AFDFB922F86ADE8FCF355E5CE1F17C8DC7DF9CDB87E1F10934DC6BA0F1E704E7F55A356E4C28798C1E950CE7758679FC2491A26DDD4BE3CF5B5ADBD1217E08CB92E5D4FF1F23B90376F79190F6BD378E15D5347CD6A5B4BA77F31031DDCE74FB45D6ED643F5212FBF9C5AC1F1F3CB4E0C387267CB3E0A7712CE1977BD0188C3099CDD47F4E74FB2D9D0677E6793E7F531A9C13DD5EABD5F1BA5DC9E37C8DBE87F3F802E8973D81DF7FBC8F622ECDB76EE310D9DA4AA93BC43A97FE1F31DDCE747BB5E9F6D2F2F9715CEACFB17D7CD46FC3C7CA555C8DC64FE352A57205FE68BA97E63FAF7BAA2ED9F379D27F7E59D4C23F9FBBE87BB8CEAE47686E69293A9FCCD8DA0EEA5F24B0118C65BC97323E677C5E8E392C359F9712E7B9F24C4807E578221F4AF39FDF351B4BF67C3EF06F3217E41CDD4791F8CFA735D33CD6BBB168361585F3465E9B7CCF1D8F87E19CE1BC5A715EC9F7ED2B2E0F942A559AFF9C60BD94382731E8D7F942F65124BADD68B16248A1442844F692283C0FE47DCB167EF045E93D8BE976E1747B2CB6878D15272DF178022F6209244ED67824F49CE9F683FF8FFF5C363286C6BB6FE3CF6F8C3C46CD881CB74D16FCAA18C18F7D7DF86D7A0ABF0CF417FFBE5D31864FEA6EE2819BA3BABDB5BD032DED9DB0DB968BE2F3BA2117BED4AE313E1788CF6389E3F82993A49FE62873991C58D74F412F6A86737A06CE894968EE3561654A8F1067637C2E349FF3BFE3FCBC38382E258E650792DD5D3C8AC5200E85D01ED84067681B6D7E5FD1386F0B6C42BC1D82943F2FE1F3D8DE217A0747100C6CA45D7FBE7C2EE2799CE4C9607C2E0C9F6F0662B04AC4987D20A27E0FF3800C717E8DEB5BC5B08D28611F1F83A6E13656A7D4058D83F17979F83CB56ECDBD099DD204DD90068BBA15FE7A76288E48491E67AA4B1EDB786E3DAB3DF9BB1EC8BCB763217CFEC81AC42DD7363877F8B48EF179E5F83CC0CFE1B2540C7DB30801FEB96FA1BB8BD6733A038C7D2398B9530BEFCC040CAD2D058DE3A2F1B91038F7716E786D6E78745ABC8AC70AFEBFCBF50E2613CEE3E478FF20EB7FCC705E5E9C6F6CBC80ADBFEB94CFE7783CC7F78FB0AAD3C1A298C1BCA8092E8D9AD7F512BECF41DED774D1705E49DD9EAD7FA1FAA95CBED3D492AF662B661C4CB7E7AFDBE97DF6E01066E900BDDFC64FC6EE9C3583536BE09DD3C2CE3FA37B8D6644835BE75E034CB7978ECFF3E182B3AEA3927C9EEB5E5ECC38189F17EE578BEF1F56640DE47B4EC6E78CCF73D5313E67DFC3313E677C7EDEFEE598C35CFD0B1D877DB5303EAFD41AC8F79CD5C6E716AB9DB693BAD4DF6CC734DECBE33DB3FDAC3AA379F9BDFEF99E27D57E3ED7F96E9D79D996B37F3EE7CCD6FFACBAA4ED77FB17338E5CFDCF1A7BB173986B0D9CD527D576B26E6EC1549135406C17D23FDFF9C8670EC95A2F760E8B5903C45E369C175A82E19DA2FB9ED7B6D71F10CC7630F2128983D782D826251A4F08377601E73C100C0B669B7CA32394ED68FC359E4784FBDFB935AF60B6ED9C5B38DBCF4278B9B32D88ED50348E25EB72D1FDCF6BDF6AE704B33DA9D10A66FBD95604D1685410DBBED02BD86D4BE71AFBF48C9E5E831085D9BE78F6996D61CA7FC1845E84 SmallImageOriginalSize=64800 SmallImageWidth=150 SmallImageHeight=108 -SmallImage=789CED7D797B1BC999DFEF03254FF24FF209926F906437F191D8B1377E123BBB9BCD7A127BD79BD91D8D3DE3B92C8F66342369349A439A91288A927893E009120488FB3E1B8D4677038DFB06294B76DE2A102048022040821229E18F7A7074F55B555DBF7EAF7AEB2D9737003999EE592231F9D83AAE3EE808928A98AC0E87561F7DEA9756501087464B9086F3ACA27115E2909E95A4248736BE9010EB8B162B3B4FFFD4B3E44AD563EBF443A7BCF30714CAB5A1D04AE50AC7D6E99756A6501A1AAD74EE785AFDD0C9D273CA97CAC3A155A80C6D7CAA96198896CB1780A2A53B967822D5F5DAE9EA65CEAC4DF6EE3DEF364F52EF703F4F4A6B61651D138FA7118D49ADFF56F506CC2DAD62667E112E8F0FE30F1E62626A06EB06231E3D9EC4D7F7C6E1F1F93AF669ECE1242667E7F1687A0EF30B8B7DF7AD89A7FDCF146A4F9E762C15E233DDAE9DA65E75B77BFDD3B6292752CFBDCD93D43BDCCF93D25ADED8C2DDFB0F60B6DA394D5696D637F07866110B3A1D1E4F4DB7FE97D464EB7BA7E2F607719F30F868F2313CC1088C6673CF7B0E5C1BE16AE0368BD5DD738B2B46272CCAC815CBC7D23E49FF7BF5B3BD9E9ACA8C7035609BBF30C9A4D7D5CE2DAE52B922E9AFD5971A5771B5045129BE54B8FAF1A644E32A9F4B5CAD6E9A486E4DC31F0CB564926E558F8793B3182399667738FB96839DEAD93C01D2C91E61767109E3E3132F4C0E6ED2BB6DB22A2F15AEFE82C6745E71D5A4D34F9B67A9479E35BFB2D813F00432A7C69592AA6271290C8B23F1C271F5039D30C2D580B88AAB1ABFDEA994EBBB5DAF75ABA7CA69FA7CD2B35EB9DEF97A7B9D4265176B1B71887271A0BE31DE7CD236BB95777C09A85AF944CFA35B39DCCF93D2DAB27B3136761F2E8F6720F936F47A672C073535DD95370CCA3BE25DF4B4E7CDAF18CD0C95343DC761F2AB4A6D17914D03A2260B844D2392E108648F0F2AD9F889701471A70BA28D8AC5866C4243C4B085E836D5DD3243309A115858442AAE5249C03D358B72B9726EF8D5B07165B2A48FADD7EF1C7B8305648BBB2F1657993CAA3FFD19549AC798DD36545CB1CF857FFA35A2860D186FDC8293F46CDDEBAFC3F5780A019D0E864F6FA2542C42B23938CE16DEF80DD5DD84F9EB6F2159AD84373B7299227C737310ED1ED47A8CF1A2E22A9D48229E28C3E5CDA3B4B185FAF22AEAF46ED56DB623F4D81CA7F375640AF59E6DAE1B52D06C4194E61750F70739BD5A267BE6B82AD71A32937D96B52C528F2691F305914B67878A2BC6AF1CE30F11238C0474CB484B32C2FA4D28D4562214816B72064A308CF0DA3AE74B0EC29D64B521B0B40AC9E585679AAE0704C297158E4753A8EE747E079F27AEAC6E1F242531345C65C202FFEEF2E620FB4328576A5DE9B1395E3748D8344A3DDB74F9F210FD12343186206135A7A58EEDDB30707569358AD79623F83995FFAD8B201494863E2FC3D2DB07A97796B862FE88069E86CBAF8A828498CB8F00C9FEE61C160B658EAF62B14CFA418ADEFF9DD61C9B2C09D8DD47DB2E640B48C6E25C9F08BB45FE295329D95DA8C6157A3F43B8AA96F057F321FCAD5E843E7350A71806AEFE722A80EF51F90E951F2E0B08523F46B8EA5D6F987230B861205E5EE7F592DB36C4DD5E646495E3885D9FD69931B96CC4CC861D0FE736B0E40E634BAB70F9974CE40867BB84451FB450A04593E12F43BA44514EC061279D54C9A3423A4E706A06593FD5ABEE40C9D5E0279D3E4072B7507D32545C150A45FC7C4BC28F3662F8D1A6841F135F6DE24ACB1EE5C1E701571B4605B34B2154EB4F4E4D8BBDEBD30B6124D3E581FA3628AE98FFFC176463FFD9B8073FF5A7F09552E03C446576B2C98CBACB8304D93071B26518265811085F16BB03D70209BC6FD9C2C49FFE84ABA28437F5EBF8329D82D52920120C412579C9EEAF19B7A1103D4697DD5F538947E9B770EFCA2C345F8CF435036AA47BD449D7A8154B3D9FD16971C5DE89DBEE386E78D55689901C54E83DD8DA5661B225303D178410CB9F1B5C85A279ACAC8B28D74FAFB7CBC932742B51EEE7394B5C55769E729F60B3E44AFBED05D60CC49FE247FACB70E520AC7D164EE18DC5598E2B56BECC1771A798C7E676000186AB500CDED9792449474D8971281E3FE9AE0AF2C4AFD46D2BCC7A1FC4808C6C528377711919453DF6190D430E76F3D724D2D5AE345E24AE5889C9DD713E282D8978C7A07D1BB63D982FD611356E1EC495C70BB3DD891B410DBF5E5E68E1EA736AFBA62A13AEFC08864348938D13D41B10339BA07A03D0841832C4B714217A44BFAA1B8C9CB731FDEA6DB988EF4C078887BAA1D34A43C595512AE26A58C535318D1BF12CAE4B695C8BA5F18990C0A238F8F37E1EB852B41A82C2F17DEB8756A1F2846CAFC1EDDE41FDEDF7852CFE0BD947DF99F2E3E7C4234525D59277199A6F85ECFF0AE9D4E52D13978DFB72D0856B3E096FE816F1E0E913DC4A67F09ED5826FCB25182D01789C2E2E07AB4E37AA849938C949E6A76FF72FFB4205685216256AC7FFE031324E072AE52A52B92A44B98018E9582C86A5971F7B507FBB85C6F8E08F7FC49D52095F170AF82A97C337E50ABEAD56B1962CF7F47D77A2D7AD0CC3DFAE11FF56942CECAE2C0AC4EBEB3A1D6A340FB56DB29DA8DF27E957B6B883A565053503F10AA67F10DD2AC996E3FA366C7E955668CE97D7502EEDF38D0C61355BAA60C91CC05A38C17575560C342FEC339E249B8F7094CD56E09E9A86E2F3776C93F9AF1457846C413B6A842DA663D5F6FC176729079F47BD53F32BD20353F44E17C8E68E0839443C02D9DFA59EB42C8E2496F4B19EFA3DE35766470671E20B217ADF996FED24FCEA2CE2AF18AED8678A6CBA52B174A41E9B63C6D7AABB4F91B49821393D4865AB5C576CA7C5F85594F4AB62E1E87ACE2B8F2B7AC6B94004A2D5861C8B05961B6BFDC56205E56A8D632CA76550AEECFB9EFDA12C0CDB0AD799DB69315B451144AE83B0B90BBA04923D0994CD56AE7B24BD7EBC1148E1C7B341FCB785303E77255F28AEF8B5DA2EF2D902C7C6415C910CA552255B30AEA6E00D6448D74F615117C1AABE61D79F97F5C1F382ABC0EADAFEB54C1E8A819E1DC9A94AB54E72A311F7B1B666C5C2BA0553731B78FC68094B461797EDC97C9DEB198A92E3BE7C95D9D66DF39589C650263E90D67270B8A86FA4B708248764D3366AB922C24483F97558D18A3B2F1657C48FCACCCF69712067B3F271B5E3AA58A8908E1541A55246BEBCCBDFA326AD62F50956F412E9519D79FBCB8CABF1680E3F32C9F8CEA41FAF91DE20CA64BB10FFA86F6EEDD92E41CE5B986F8763824AC4E124FE1EC1BD4802EFD2B3667612D30DDF22BBFA962A61CB2F43884910084F25A251627BDC488EA6E24A63BEA8A449F6396697303F4732D5487692C3857A2C4ED73AAFB73F775CD1BBD3182F8D9DFA9EA57194693C71596DFDBF1888C190AE204B3CBCBAF3E408AD0CBD136EAFC6E3644E822B769D61A9DDC75FAEEE7DA76BA552C36750D9D3E7CF13AED8DAE9BE6FA7F15E55A9B035C44C97391649566D91DC7A4836ECAF66E731FE875D8C3F7B86AFF245B26D058E2B8BCD8114CD8DF7EB3B9057D7F93CC5D89A36E1314FFC4A359810F34660736720933DC5D64FA473A45FB5975C3ACF796EA9583EC03BBEF2A57187F4CD6EB418FF62BEC778E264FC8AADD706E9D90556D6F87A5248BF09F3DD090417E7105CDB40CCE181FDDE188AF93CC29B46A409F38A3F70E2710E1357FDD012CC07E79BE16ADB66E7B8FABBA959DC7FB2C379D6FD677FC447013F36BC7158C9FE613A6F70790511D23FD83B1E3599F9A71C89F6D4AF7EE9D7F05DD2AFFEFD5D37AE39135D71B5BFC7F5C5EC9BB8B125E34EE4A89FE4B46D36E74BA0E71558D1C3AB5B41219B876D6C028EF1718846135C93B3F0AD6CC233F9185A54A4676CE6F744CD9673812B2607FFF37214FF71C28BD748AF9148FF6CCA3B36F74C26B2350A36E74C9665E9BF08F117B3CD89B1481CAF2F2EE136BD2F77C876BEECF1E0A62CC1E09361B33B2192FCAB35E5A9C747BAEF417F2AB3071D6E9A9738C9CD9905A4583C4A423B769C6C8F58FB7EE71785ABC57811BA0E326E68B822BD82D999FE7513D224079C8F67094F93C4F76DC4AF0C88D9DDF0CD2FA25CAE4224BD22AD2489AF86CE05AEDAE5205B57397C9DC944C68BD3B1D8FE3D4CF7201B504F7C6931AC629DF4B2F622656B84478DF32BF65EC94E47C7B673A527585C5691B710AF0A841A98CA76F6E5BF4839D80D5767D56637BD9DD90CCD76D967F5398CF3A4B83A499B4D7B509364EE77E8468BF1BC38F1EC18BD4BA55205C9CCC1B574EE6FF76509B3F181FAD6CDDFCE620B980E9DCF15A0C5141EDF52A0764B953A4AF44E17F2259448EFCD674EE6C76DAF779A58F3E3EAF982918E31D86C9C2F24EEBB4BF1043AFBB04FFA3C52A41F1E4B8BE638E4F6A24A3A8224AB7C4D715E17816E45C09C6EBF3FECFF41FBD68B5FADBC7719A1E525D263B7B179E523ACBEF30E02A4E3B9497E840D16E43515EEA9990BC9AF2E929FE134FCAA459FEC1589ECC7C3B498BCD7085B856CC36662FB6D0FDC4772776159186A3C83F1E62D98BFF8029B573F257D3606E3B56BF0CE2E22ACD763E1FFBD4176558174DD11AECE23AE3289E6BA6DC3DF9C271DBD423231CE638F1AF147AE888C65398794D4790D839528E9BD4E5F0AB9E2D118F193E2AA5998DC65F3F032E9572F3BAEDAEB31DD31E668D822ED75E6853CAEF97BB7CB6217C3B13CE93CA7E3574E8FFFB9EB1D67A9EBB0BC64AF3AAEBA95296F1A571DEA99B4F9AADA83235C3DC58652C27D7178F17F235C8D7075D6E33C0B5CB118A0ECDE7362FABE26C6B98F5B72FAF8FA884A36752A26231911502AD71ABA5B9718A011AE46B86A9662B90ED7C347704E4C22ABAAB08F8DF3FD9521BD89AF9378E617B1F5E935D223550457F57C0D3DB8B636B4318D7075FE7035ACBC1F6C5DC13539CD7F6F7FFD0D61EC11049305B96C01B6B1FBB0DE1BE73E16965780F94585EDED53B7D9E9FFB3C8FB7116F58695F763907A6739CEB3D2AF12C130645F231E400D84394F623291BF9B647332BB97ED43CF52BB6C8D2AA30C967F68C4AF9E2295DF85C92AC3EE3AFAECFA69F32CC7D9C495D31B40AE501AE9ED170857AC581D49443AD8742F1A57DE9080742E3FB2072F20AED8BE53973705553B9A8FA8598FC5E8317F3A2BCF739C233FC3C5C5152B4C1F66FB05646F88ECEBE85E9DA7ADBDCEB7D7DD18F70878E093309BAA1C28369EA3AE51FF79E32A95DFE1F9174D366584AB73842BB33D01875743DD6C45D6EEE2F1A2D59D465C75B6F0142E7F0A5EBF1F1FB945BC45F6D2872E1BC69E3EC3AF5757F0B6C9884F23211E9765B6B92129BDF34C9C05AE18EE59FEC550B48064A6CAD78B72A59D1786AB52AD912BAB50DEEDABCD9715573C6FAB3F4DFC2A092591E479D644B385C72E966B4F11125208900CBC15CFE1CD753DDE366EE17A5CC2DD9D5DFCFDF4143EF4B839AE1696D79048D5109959405910502B5561544A588FE6313FB70193D985A07E1392C339545CB112577350D3552CE8C27838E98727D03D075F3B7D96BB81E75CD96DFCCFF6D414AB47F744F49A632D5BE57B6E9BBFD9FAFAC29A083196ED3AA65701576EC214D3ABCAE51AD2F38B5057D6105C5B87EC72F3D8644152E070B9703D92C20D29CA63DBC79FFD11B70B05BC6534E0E350835FADE837789EAA2CE191E57DD2C202AEF893F83FF35E5CF9720ACB9FDD42215FC4762489B5481EEB911CEC1DF4B993E02A4563CEA47298FA76031337E6BBEEB53A4C9FBD4FEBC63892E90ADF4FA337C4E1F6A58FD4EB36C74C06EB3745CED39BFFAD138DC565F148CE8D570D572CC69DED39D5080BBE353D4A955A635F7922C97115A3FFDD5E3FAE05157CE8F3E2C11F9FF13D13EF99B78977195A7270797D83EFBFF7AF19A07A3D8D7B2D1658EE7C8BD26FDF41E06F7E89097318BFDC12F1DDE920FE7E39826B349FC5DAD1F5914171553699A1996C70AC6C4208498D7C881DE81EA6CFF0B7B41AE3B1ACEC37E37B7135DFBAFFB839663278792DC67954F3BF068DDC913EBC6AB8AAD81CC8935E9510A2C824B5D6DE99E65E0A917065773A39AEAE04FCB85BAD729E759D30F496611357C30D5CCD2EEA085789D6BDECBBBC6140FCDE18C277EE62CCE0C67F776BF8B3075E7C77CC4578EA1E2FD30B579DFCED92A44208A72198ECC8B83CB8124CE252240B8970DBCDEF9ACF1551AED689C7668957D59194E9D3EDC5B2D98737851C6ECB859EBE6F16EF53C817F8FDFC376188C94495F44CD68737A339DE07A6F31DF6F51EE8FB4BEA6F9769FED97A198BDF137C7EC4EC4E9EDF96AD61B0128BCB70BA3DB81E5270438E737EC5E4E0EF680E98DEFE71C08785908A39DD12CD8D02AB2100459011F28BF0923E15999D816CDCC67250C5E560066F6D4A7873318C5C75A7AF71F6C3AF622199C73CBB367C484ECFE2275796F1BDD920DF43DD0DB731871B957285AF3F7B7C29CC8F99214D2DE0CE3D03FED3431FDEB5EEDB979D784791F4F2B8D3C1F72CD5A81EC30FEB83BC6C823C3387FF70CFCDFBC0F6A8BC8AFC8AC5A633BE94F5F890A5E721E80D08AFAFEEED016EF02BB7D7874F032AC7D08367CF38BFBA5D2AE3D7A4535D76BB5A7290BDBBBA292BB666B6B0B5EE45C811E4395C4F33CE63ED41EA7F78CB846D8B8A802584F0DD87F8DB69277E62537BE24A72F95089C7111D9FC1F69C11A6552FA234866FC674F88945C165C25AAF392E557678BEF29CD182F8861D814D23CF411A353811206CFF98F436D687571557ED85C51933D950A9EDDB37823F0827E95737A31A3ED792B857AB715CDDA3715F8B0AF83293E2B89A9E5F8042BA7A99E45495E505213A4E4F8A74DB3ADF5B9E2DD44F8DABFA1F9EE127FA18BE371FC20F37593ECD18BE94F370CFCED2FC65B84DCB8A3191855E4EA3D49667F03EC9A5EFEB22F8A15EC4F716C2F81B214B75D3F0111E62C48FE34AE37EAFA8F07BEDC95C9B0EDAC82DF97DE2B3DF5F0CE107EB223E17D23C0E9BE51C50FC11F8D7D7E9FE6CAB0F8C869E9F65D17BEE5E055CB13D51FBBA55A394F6F23759E6D611F44A07722C364B3ADFA8C3F7368722BC48F48C37B664C493156CDB14245295A1F02BE7A13E305F41B7D8DF769AED7B27597EB3F6B5856EF7B7CFF1E13137F34B36EB1CD78757195727ADD7ACA351DB09C296ECF50FADCDE3E46084E6F86A38D1310FE274F4F87DAFB703699E47F13ADD7343CEF1FBAE139D1BF10C3DCB4A5F736C27BBF2B85C8C235C9D1C573F2759D32B57EA59E02A4A737F87DAFC9230718BE6F306618C7DFF52C963BE4B7ECD76FAE3CCF623DEF505E181C9FA5B22CBA19CE745D1FAC3954B29B5F521437D505B7D58898D70755A5CFD704D6CE9A9CF0B57CFE3798FD6075F2CAE7EEA4D8D7035C2D5D0713523E60EE44B1FE16A84AB61E0EA2CEABDECFB52B56CA1A34FF8BCF9DBC5B87A26CFF679D13A52EF8CCFB57CD1FCEA3CB57991F99548FA178BA367EB1E27E157DD7095CCD66075A8F0878F3F7BE02473ECF26560F3248FE4121FE1EA7CE08ACDFF32D98DD90E67449E06572CB660452F4290063F1F83AD57A921819F45C1E2ADA3162B24870B92C7DB9AE3B058C0FA66EFF30747B83A5D9B669B0A07BDBBC59DA7B0D814D8DC47F7F1303F96C1A222DE76BE0EA39529ECC017CC1D88851B06AE583C9E2790EDEB6CB4C3635A0E2671CB15C1756B009F3BC3F83A28E34B5F1C37AC3EDC550B70AB259E27CEE3CF1C39836A84ABE1B56977697CED8F7D3711769C9EA37942595C956E55E4EB378769B1BCFAFDB6D90FAEC4103BC7C009F7DA3A8FCDE7675B13EF896C9910B45A79EE3E76FED161FA6A2C0E9BCB833931852B81208FCFB8A5697B714009FCDEEBC157D9343643F4EE38DD484847739BF47A8E2C176D62EF5CD6E362A347B87ACACF4566BE68B6A6EA251EA174C855CA62E5D8990CA95CFD08AD8AD18CB4AC1C88753831AEE877C5B84D72CB8BD4E4631EAF2A2F2EA162B622E670223BBF882CC934D16A6FCD55933E937FF972E37CA2B1DD27B8532AF238589EEFF90F4F71BB58C4D8CE0E9C8932AFD7291779A7E7C3DA89B17C97AC5F740FDBEFEA7027E1F4A660D896F95ECD11AE1AF592C1C63990894098AFE337CF128F27D89A7DE7D8CC8CDAC53743731F5CD1F35C1BA7C615ABC3E27C5239C4A322CF9FDF3CC7324B75259A5396733497CA1CA12F06C3585C5AE1FCEA776E0FFE7179059F84021C571FFA03B8EC72E0A6AA6083F89561DBC273ACF6FB1C79CCADD7CFF3C0B3EF0976A600C97E567AC9EA970557D95496E75C67E785CBBEA3EBC5AD7A7B74B387E8B3F698CEA1D1FB7938AF6DB63D8FF66E1B46BD01A4E34A5FE3EC0757E9BD7321163C21885185F3154D94F87FA90EEDECE32A82D9F9058EABF788B7FD8ABE5F13C21C57974967FFC06E25B998E47250B7B23A10AE34498144B2B311CFADBD72FA951657F9BC1C8B3F4677770F2BF4299A6DA8111F78F2C3FF8ADA958F1125DDA4995B946135298890086B92DB8FB8CD8E18FD6ED27208714C44F318F36A781C2F205FEDBE27AA892B93CDC5E3C37AF9AFDE746AB07739EFA113FD28E16A89F0C270F529C9E4DF138FFAA6DC9083D7A438BED012F8A65AE5B89AD72DA3543D68C3F2F302D422FE713E844B2B02EE85D37B71DC49F86C0EC4881716822144D899875D78FA45C75598F8F043318FBBCE241EC5F2900B0D5ECCE2383E8DA6F07B8F407A6A0C57C32C8E9D6C21290DAF52E27A52B1BA8F2BF3DC023F6736B0B48C5A7D979F1B5AA57733D596F39DE56489194DA8913EADB8FC8811E6D8F7DC5EDCE02AB5F711F5E3837511374319A47BE08A9D47CF62A1FBC927F37FA743B0A9C5BEFDCB2C0F11FB5C4D9678FC2BD3D9EFEDD45BE7A5368B83ECC16EB436D53216AC09E8C8967189FBF99ED3247FEB573E42FD83DFA142B2F93CE5F63E49BD6EF1ED2E7A769FF832787F4DC455670266210BABD385F95806EF586CA44BB848A708E2934804BF356DE37A4C8431A0C26AF720936FC42A57E9FD2E6DDB20AEAE221B12F89912AC3D160BDCDE168B052C152B101D7EC8363FB2248B04AB1F5A50205E9641DD604284F4EA5C3A73EC3807591FFC582B13BFEAFF5C7295E6DEE50B707E755588F23D20B70BF923B872F6A0D94BBFF2DF1D43C6EEE03E101B6193F58D954C8F9CD0178D5F1D2E5E7F0176B2B119AEDE26DEC2CE9B1D7B427C3D1EC725FD166ECA2236FD0AB6CD667E7E2D3B538AF12B9607B9A465A0BAD9D9C6092E17198F67FA32DB875FADEF3FB376FDAA516F5F6F1748A76B8F77EE36CE4170A512AEDAF7951E2ECCE77185DEAFD7B7E3788BF8A4496CC8FF6820868D7BB3F4EC4A3C96AF5958FC31FBCC97075C4B274C48F42ED58947B3F3CCBC01091F12EFFFD57A1497884F7B7BE484BEE8B81249AFB1925EC97075696D1D9FC932C9820ADE2199F5AECD4972300213F12B6F20C471D5CCB5DD2CCD3DC24D5C2924AF22460B2AE5FDBD740771B51FD7CB7C49855C77BF782F5C29F4C9CFF5E85098ECE8768D957C790706E2172BC134D62259A4092FBDEA37E935CF1419A4CD12FDEF9999E9BB6FC368F32CEB31FDA31F5A2C169DED8798F425F0C68A099756CDA457493CFEF637262F3E7487B0E189C3C8CFE5DADF53A878FCADEF6C3F987F650D66B2A38AA4A7D6499ED6D92715E6B3510FEC45D41A67EDD0A7CD2AF53DCE443A375A77BE40FCEAB0BF809574A1CCF7C2B7E78539DC66437FFF03DF7352BCF525F2EF7F80A894804432B5D7B368D26239E0BD7DE64FE8C4AF46B8BA80B8CA1711247B90EDA3090A79F8C299D65E9BF6FB3C853ABCD92A3492A305B71746B37AA2F5DE11AECE579B67852B7666672218823798E5EBC64121874CE128AE6E3A9298207B52243D2C9FCD2214CD21D963BFC4085717A3CD61E02A25C6F774F1464930B9463A578AECEE345B03D9FB3FD3F69D15E653FFC2A3E14168EF9C7A92999B5B31D846E74D5CF8368781AB23B4C8BE2B319D3F936BD97ADDDABC694FE0BEEFF83D976781AB61E4D9F638C35898DBC0E2DC1AE6A7563037B38EA97B33987D380F57B2D22ACC6FC53F93E503FFB33C2167E17B6CAF7751FCA2FDD0928311B2FFF3C7D6FBC2ADE191981BA85F27AD7716FC6A5B2D1EF17D1E576E282ADEB35A70BB54C4F4D21622A2848F8867BF361DC42F97047C114A0F95C7BC34FC6A807A09A6B3933EBFBA21617A218C7217FFE659F0AB17852BB6CEF3453A8D6F2A65849422B7719C4A091BC4BB0DA417F8BA9C0FC4F2218536B651CC1D3DCB7E84ABCED7FCA11CB71D8B7D9CFD765A5C0DF33CFA4171F5792A8DDF1AB7F18910C6D7B934741B36C46415F144090EC294C3938289F07538F69DE9132C675D3EA6F0333623B1020AD5273C5744B738BF11AE1ACF2DE213B96E5F2CF41F473048BD619E475F2893AEE4F5E1E1B607BFF7F9704D92F049248CB78D465C8D44F0215DBB4CF81DAB950EE0EADB5A8DC7F87DAE6918DBDD855FCA13963C9C26F3C3A8A90A3F0F36A7651AB99DC8F6E1BE6025013F7D67F650C81384C1A4705BDB6856BAE6407D1970C5D6BDD8BBD3892E3BC78A61A5582CF3D83416CB5B2C1C5A7F6567767BFD086FDB10316C9DC9384F220759AED04C877D190C578BCB2B98B4FAF18ED546FA5110EFDBEDB8B4B686CB849377CC665C13A31C3B8779D6032AEF395DB8A9489822FD2AC472E724B403F6723224F0F855CDE5458E78DC824BC29CC50F95DE0DB6D6703836FE65C555482A62753D0A453BBA5E1F26BEBFAD5B817575050E9315DB0B0BB0E81611A3E756CC175BB82A86058836077F3F5F24AED859BCD9BD9850AB53C3FC72F4885C62B85A5E5BE7FC8AE1EAE37088F0E4C2070E372EAD2FE3B5F109FC667303EF9A4D1C4B1F130FBBB4AEC7EFDC6EFC46BF8E772D167C95CD606C6A150EA7F308AE52A4CBB3756665731B09C2EC98C98D79E28BC689C73C17F02063BFC8B862BE4F96638EC5C6B2385D6D6F3F68241687458CE12D8311B7F3FB71239703617CE87120188A2024883CB6219969E4D77CD1B88AC43398D65B60255D9AE59165E7B2743AA720457AF449F4F6F612A43632B9A37962F833A0FF631607B7AB67DC321E136F0CB8FD90DDC7E7177F5970C53E454146321C85BCB7578E956426074F52EBFA5C1334B7E9B67804EEDF205EAF4525C82E0F927105E50ACB594AB6777D67A0FE9F1457CCAFF4552E8B7135CFF19ECA1EF5FF337EB5B6B149FCCA8DF71D2EBC6BB5E2FEEED138BE4EE56A54C43F2DEBB84DF860760D66E2772CE6E030AE181EB4BDFD15929AE0EBA8397ABE2929FEEAE0AA5243D61F82E20BC13B33D7E2578188C8F9158BCB7A83F877275C1DA0C5F60610AED8DE4EB69F33E3F3231B8D41A0F7B654C89F6A9C83E0EA732D8D7125CB71B51FDBB35F5234BE89478FB91C64B87ADB62C3FD7A79205C7D9E4C12AEF4D02D2D1FC155758F6FB7E79366EB1869970FF605DD81BD1B2F3BAE72842B4D8811CF8AB4AE3159711CBF3A8CAB1CB3DB7C61544A454E334FB2347BB8DE1070D5CDDFCE7CE3B752A916BFEA852BA6B7335CFD96F4A5F1DDDA40B8BA95A2E732BFC971C5FC76C7F97A35997896C7C763B3597C6DBF3EE18BEE6F17238D754286AD26BF72936DBCC1F639916CFC38D8D8F774D9EDC1DB26133E5364989C6E08849B78426BED1360F15CCDF9538428363D71FC0F6F0A3F32C9F8AB601A727EF0186F5606E257C44B9AB8CA77D843C6E4E0BD070F5AFCEA1DC2D558BD3A20BF6AE06A6A6686305EE4B94A59CEAF5EFBB74FF24E5D687EC5E6C377D48F92299410233BCF413CCC4BF3E8D50E1696DF56CBF6966F85CA6E2BC76B3347EC30E5E01D318F4FBC695C0FA4B1992CC0EF17B1E411A177465B7228477D60B9B69B25992DE2FEC347FBB822BB8FE5A3EF0757EC1C847F989BE53ADC83D975CC2F2CE217FE14FEDD5D37FEC228E15AA2345AC769A3D56D8F64215F463E9DEDABCDB31C67375C2D90CD3721E430E6D11064BE4976968FD5CE63EE9BF73AE205FC8C78E69F3FF4E267C10C1E2B39DC9F78D4D2DBDF316FE36EB53210BFFA4C51B8DEBEB8B4843708D33F98F0E17FD955DCD2CA235C0DB9CD1781ABF6529654BE975ED8321EF8DF4B72EA5772093F18F7E0B55006332AE1F0C104E757BF259DFD438FAB6FDF02F38BFE72761ED7E3318CCFAC63667E1E3992EDA27D30FFC10857E71B5781480EFE4806B25A822790414C4E1E4B9FE95777EF8F73BD9DE3CA7D025C49313C9CDFE072309321FDEAF39B235CBD44B892486F63F1ACB962BDA1BFEDF6479FE5333CAD5F344CBA1AEB472E5781F8FE07D899996BD1CF253390744BC8B8DC235C5D005CF923312452A78B6760FC6A95FB451B72F033926983F22BB66F757C660DABEBEB088544F85E7F1DCFFED5BF6EE421253B94AD6949130F919A9B27DB2772E2B18F7075B6E30C0AD21E9E8613CFF0CDBDFB5C6FBFA4DFC4BB66E340B8FAEBBBF7713512225CAD62766E0E71966FE4CBAFF1EC5FFCCB16AE826B7A58DEBC84C4E349447D8111AECE29AE8619D7C770F57072AAC5AFAE8BD181F955D3CFB0A0D3711CA964573EFB67FFBC852BC1B085E0CD1BC8EA9647B8BA40B81A24BE3D99AF412FE5F9FEE675318790C6FC0C137864F6725C5DF17B06C6D5674A9CE36A7A6E96AFFDC96E2F9EFD9B7FDBC295E470204176693914E1E73976EBDB7163B8E8FEF661D43BAFF1EDCC7FF53FC956FCF3071EFCCC9FE2FEABF1478F5AFCEA6AD03F30AE6E26142E071F4F4E82AF0F5677502BEEC719A5D5143451E4DF536D311E237E75BEF9D520B80A6B657CAA94787EAA2B911C36B402EE3F7C8C074617C7D5A77B39D4FAC6D5DC22BE486B189F5EC5F4EC0C0EAF3B1F2E37926558D5D208572F19AE0E17AE5F4D4D71BDFDED6D0B3E0AF8F155A1483C48C5DD5AEF754286ABBF9B5FC44D398647F37A3C263AC7E1EA1FB6E2D890F2AF04AED8B9C692DD819492E4F1C52C7F308BB57C357055C3E4EC1CE6DC02CF7775231EC3EF03617C1A8D50118EC5D5DB662BD7DBD7B67D3C7FE471B87AC39E84E115E057EC4C70FF820E92D385C0F22A1C13D3B08F8F232B1F9F9FF765C055B3C4A30ACCB37A88D1D4817C57874B33FF155B3B6FFFBF3D4EBD579B2B7201C1BDFC022F33AE02AB6BF02F2E21B2B5C563EE8C5F7CCBFFCB27BAC732BE8CB8BA08737C9170C5E2ECC21B061432B9466C27CB75EEF5239FEE1EC738C2D50857C7E1EAACDA7C9EB872FB821C5B9D0A3FCFADCBB5D3D453F6F6C3BEEC6DF62AFC7CBEE7DCE6598EF330AE7A955CA97A6C9D7EE8146BBB3CC67818B4D2F9D2B175FAA5C5CE2A1C162D767EC670E8D4B83D340C5ACC173CACF12533F9BE6879FC41FE0EF72A424C3EB64E3F7462642B47A5E1D08A88F163EBF44D2B363C5A212136143A425C85281DDFAF7E6885A3D2D0C6170847FBA2F5FF018C925335 +SmallImage=789CED7D797B1B479ADFEF03254FF24FF209926F906437992399C9CC669E6426BB9BCD8E9399DDD978D7F28C6DF918D9B2654BB22C1F922D511425F1BE0F902040DCF7D96834BA1B68DC37488D3493B70A040892000890A04452F8A31E1C5DFD5655D7AFDFABDE7ACBE9F1434EA4BA9670543EB28EB3073A82A4222AAB83A1D5439F7AA51510C481D112A4C13CAB484C8538A067252989818D2F28447BA2C5CAF6B33F752DD962E5C83ABDD0296DFF01F9527520B492D9FC91757AA595CE1707462B953D9A562F7432F49C72C5D26068E5CB031B9FAAA5FBA2E5F4FAA168A9B625164F76BC76B27AE9536B93BD7B2FBACDE3D43BD8CFE3D29A5B5EC3D8934944A252F3BF159D1E338B2B989A9D87D3EDC5E8C347189B98C29ADE80C74FC6F1CDFD51B8BDDEB67D1A79348EF1E9593C9E9CC1ECDC7CCF7D6BE069EF3389EAD3676D4B99F84CA76B27A957D9E95CFFA46DCAF1E40B6FF338F50EF6F3B8B496D63771EFC143982C364E9395D9C5658E8FB985453C99986CFE2FA989E6F776C5E50BE00161F0F1F813B80361184CA6AEF7ECBB36C455DF6D162A3B6716578C4E4894912D948EA47D9CFE77EB676B3D35991EE2AACF367F659449AFAB9E595C25B305D25F2B171A5731B50851295C285CFD7443A27195CE24AE56368C24B726E10B049B326961458747E3D318219966B33B7A9683EDEA59DD7ED2C91E637A7E11A3A3632F4D0E6ED0BB6DB428170A577F41633AABB86AD0E9A5CDD3D4234F9B5F996D71B8FDE913E34A495630BF1882D91E7FE9B8FAD18230C4559FB88AA91ABFDEAE946A3B1DAF75AAA7CA29FA7CDAB55EA9D6FE7A6B9D7C7907ABEB318872A1AFBE31DE7CDC363B95CBDE3854AD74ACE7D1A91CECE771696DDA3C18197900A7DBDD977C1B78BD5396839A9AEAC81BFAE51DB10E7ADA8BE6578C669A4A8A9EE320F955B9BA83F0861E11A319C28601895018B2DB0B956CFC78288298C309D14AC56C4526AE21ACDF44648BEA6E9A20184CF0CFCD231953A9C4E19A9846A9543E33FC6AD0B8329A5347D6EB758E3D813C32859D978BAB740E959FFF022ACD63D4661D28AED8E7DC3FFD1611FD3A0C376FC3417AF6C2EBAFC3F96402FE8505E83FBB8562A100C96AE7389B7BE377547703A66FBE8364B110DE6CC8A60BF0CECC40B4B951ED32C6F38AAB543C8158BC04A72787E2FA266A4B2BA8D1BB55B35A0FD163739CCAD590CED7BAB6B9A64F42B306509C9D43CD17E0F4AAE9CCA9E3AA54ADCB4CF659D232483E1E47D61B4036951928AE18BFB28F3E429430E25F58424A9211D26D40A1B6E2C1309CE3535002218456D7385FB213EE248B15FEC515484E0FDC9374DD2F10BE2CB03F9E4065BBFD3BF822716571792129F181E12A1D12F877A7270BD91744A95CED488FCDF19A5EC28641EADAA6D39B83E893A089510408AB592D7964DF0681AB4B2B11BCB614C62FA9FCEF8530820169E0F33228BDBD9F7AA7892BE68FA8E369B0FCAA2048883A7DF093EC6FCC61215FE2F82A144AA41F24E9FDDF6ECEB1D11C87CD75B8ED7C268F4434C6F589904BE49F3295A2CD894A4CA1F733886B6A117F351BC4DFEA44E8D2FB758A41E0EA2F27FCF80195EF51F9F1928000F56388ABEEF506290703EB7AE2E5355E2FB16545CCE5415A56398ED8F5C90513C6970C985AB7E1D1CC3A165D216C6A652EFF12F12CE16C87B0E88516F4376932FCA5499728C871D86DA4932A399449C7094C4C21E3A37A956D28D92A7CA4D3FB49EEE62B4F078AAB7CBE805F6E4AF8C97A143FD990F053E2AB0D5C6999C33CF82CE06ADDA0607A31884AEDE98969B1777D722E8444AAD457DFFAC515F39FFF8A6CEC3F1B75E3E7BE24BE56F29C87A8CC4E369A5073BA11271B2646B60CC3042B02E1CB6CB3E3BA3F8EF7CD9B18FBD39F704D94F0A66E0D5FA592B03804840341A8242FD9FD55C31614A2C7E8B2FBAB2AF128DD26EE5F9D86E68D92BEA64795748F1AE91AD542B1EB333A29AED83B71C715C34D8FDA2C6192830ABD079B5B2A8CD63826670210A2B93383AB602487E53511A5DAC9F5763951C2C27284FB794E1357E5ED67DC27D828D9E25E7BFE553DF1A7D8A1FE325CD9096B9F879278637E9AE38A95AF7205DC2DE4B0B1E5879FE12A1885677A1609D25193620C8ADB47BAAB821CF12B75CB0293CE0BD12F2393D0E0995F425A518F7C468390839DFC35F154A5238D97892B56A272679CF74B4B22DED16FDF066D0FE60A35440C1BFB71E5F6C06473E06640C36F97E69AB8FA82DABEA5CA842B1F02A1205264E304747A444D46A81E3F34218A34F12D45881CD2AF6A7A03E76D4CBF7A5B2EE07B937EE2A12E2C68C581E2CA2015702DA4E2BA98C2CD580637A414AE4753F85488635EECFF79BF085C295A1501E1E8BEF5422B5F7E4AB657FF766FBFFEF6074206FF85ECA3EF4DF8F04BE291A2926CCABB34CDB742F67F9974EAD2A691CBC63D39E8C475AF843716E6F1F0D953DC4EA5F19EC58CEF4A4518CC7EB81D4E2E072B0E172A849918C949E6A76FF52F7B8379685206456AC7F7F009D20E3BCAA50A92D90A44398F28E9582C86A59B1FBB5F7FBB99C6F8F08F7FC4DD6211DFE4F3F83A9BC5B7A532BEAB54B09A2875F57DB7A3D7A90CC2DFAE11FF56940C6CCE0CF2C4EB6B0B0BA8D23C54B7C876A27E1FA75F99C23616971454F5C42B98FE41742B245B8EEADBA0F9554AA1395F5A45A9B8C737D284D54CB18C45931FABA138D7D559D1D3BCB0CF58826C3EC2512653866B62128AD7D7B64DE6BF529C61B2056DA812B6988E55DDF55F9CA61C7C11F54ECCAF480F4CD23B9D279B3B2C6411760B647F17BBD232DB1358D445BBEAF78C5F99EC69C4882F04E97D67BEB5E3F0ABD388BF62B8629F49B2E98A85E2A17A6C8E195FABEC3C43C26C82E4702399A9705DB19516E35711D2AF0AF9C3EB39AF3CAEE81967FD6188162BB22C1658AEAFF5170A65942A558EB1AC9646A9BCE77BF60533D06F295C676EA5C56C154510B90EC2E62EE01448F6C4513259B8EE91F0F8F0863F899F4E07F0DFE642F8C29978A9B8E2D7AA3BC865F21C1BFB714532944A856CC1989A84C79F265D3F89F98530567475BBFEACAC0F9E155CF95756F7AEA57350F4F4EC484E952B35921BF5B88FD5550BE6D6CC989859C793C78B583438B96C4FE46A5CCF50942CF7E5ABCCB66E99AF74248A12F181949685DD497D23BD452039241BB750CD1610221ACCAFC38A56D87EB9B8227E54627E4EB31D59AB858FAB1557857C9974AC30CAE51272A51DFE1E3568152A4FB1AC93488F6ACFDB2F32AE462359FCC428E37BE33EBC467A832893ED42FCA3B6B1B96BBB04386F61BE1D8E092A61BB83F87B18F7C371BC4BCF9AD9494C377C8BECEADBAA844D9F0C212A41203C15894691ED7123399A8C29F5F9A29222D9679F5EC4EC0CC95403D94976276AD1185D6BBFDEFEC27145EF4E7DBC3476EA7B86C651A2F1C464B5F9FFBC3F0A7DAA8C0CF1F0CAF6D343B4D2F44EB83C1A8F93390EAED87586A5561F7FA9B2FB9DAE158B759F4179579F3F4BB8626BA77BBE9DFA7B55A1C2D610D31DE6582459B54972EB11D9B0BF999EC5E81F7630FAFC39BECE15C8B61538AECC563B9234379E6FEE425E59E3F314656BDA84C71CF12B556F44D41386D595864CF6145B3F91CE907ED55AB2A91CE7B9C542691FEFF8DA9BC25DD2373BD162FC8BF91E63F1E3F12BB65E1BA067E75F5EE5EB4941DD064CF7C610989F4160751D51BB1BB6FB2328E472086D189022CC2B3EFFB1C739485CF5424B30ED9F6F86AB2DAB8DE3EAEF26A6F1E0E936E7590F9EFF111FFB7D58F7C46021FB87E9BC81A5658449FF60EF78C468E29F7238D255BFFAB54FC3F749BFFAF7F75CB8EE8877C4D5DE1ED797B36FE2E6A68CBBE1C37E9293B6D9982F819E977F5907CFC232F2991CAC2363B08F8E423418E11C9F86777903EEF127D022223D6313BF2762329F095C3139F89F9722F88F631EBC467A8D44FA6743DEB1B9673291AD51B03967B22C43FF8589BF98AC0E8C8463787D7E1177E87DB94BB6F315B71BB764097AAF0CABCD0191E45FB5214FDD5ED27DF7FB53993D6877D1BCC4486E4ECD21C9E251E2DA91E3647BC45AF73BBF2C5CCDC70A586823E306862BD22B989DE95B33224572C0F1649AF0344E7CDF4AFC4A8FA8CD05EFEC3C4AA50A44D22B524A82F86AF04CE0AA550EB2759583D7994C64BC38158DEEDDC3740FB20175C497E6432AD6482F6B2D52A64A78D438BF62EF95ECB0B76D3B5B7C8AF925153933F12A7FB08EA94C7B5FFECB94839D70755A6D76D2DB99CDD068977D565EC0388F8BABE3B4D9B0073549E67E874EB418CF8B11CF8ED2BB542C969148EF5F4BE7FE766F86301BEBAB6F9DFCED2CB680E9D0B96C1E5A54E1F12D796AB758AEA148EF743E574491F4DE5CFA787EDCD67A2789353FAA9E37106E1B83CDC6F952E2BE3B14B7BFBD0FFBB8CF2349FAE191B4688E832E0F2AA42348B2CAD7146717C258581630B3B0D71FF67FBF7DEBC6AF96DFBB82E0D222E9B15BD8B8FA31562E5F869F743C17C98F90DE8C9CA6C23531752EF9D579F2339C845F35E993BD2291FD78901693F71A612B9FA9DB4C6CBFEDBEFB48EECE2D09038D6730DCBA0DD3975F62E3DA67A4CF4661B87E1D9EE97984743ACCFDBF37C8AECA93AE3BC4D559C4553ADE58B7ADFB9B73A4A3974926C678EC513DFEC81996B124679194DAAF61B01221BDD7E14D225B381C237E5C5C350A93BB6C1E2E927E75D171D55A8FE98E517BDD1669AD332BE470DDD7BD5D16BB188AE648E73919BF72B87D2F5CEF384D5D87E5257BD571D5A94C7852B866574FA5CD57D51E1CE2EA19D695221E88838BFF1BE26A88ABD31EE769E08AC50065769F13D3F73531C67DDC92C3CBD74754B2A993511989B08062A95AD7DD3AC4000D7135C455A3144A35381F3D86636C1C1955856D6494EFAF0CEA8C7C9DC43D3B8FCDCFAE931EA922B0A2E36BE881D5D5818D6988ABB387AB41E5FD60EB0ACEF149FE7BEB9B6F09638F2118CDC866F2B08E3C80E5FE28F7B1B0BC02CC2F2A6C6D9DB8CD76FF9F46DE8FD3A837A8BC1FFDD43BCD719E967E150F84207BEBF100AA3FC479129389FCDD249B93D9BD6C1F7A86DA656B5469A5BFFC43437EF50CC9DC0E8C161936E7E167D74B9BA739CE06AE1C1E3FB2F9E2506F3F47B862C5624F20DCC6A67BD9B8F20405A4B2B9A13D780E71C5F69D3A3D49A8DAE17C448D7A2C468FF9D3597991E31CFA19CE2FAE5861FA30DB2F207B82645F4776EB3C6BEE75BEB3E6C2A85BC043AF84E964795FB1F21C75F5FA2F1A57C9DC36CFBF68B42A435C9D215C996C71D83D1A6A260B3236278F17AD6CD7E3AA33F96770FA92F0F87CF8D825E22DB2973E725A31F2EC397EBBB28CB78D067C160EF2B82C93D50549E99E67E23470C570CFF22F06237924D215BE5E942D6EBF345C15ABF55C59F9D24E4F6D5E545CF1BCADBE14F1AB04947882E759134D661EBB58AA3E435048C24F32F0762C8B37D77478DBB0891B3109F7B677F0F79313F8C8EDE2B89A5B5A453C5945786A0E254140B558814129622D92C3ECCC3A8C262702BA0D4876C74071C54A4CCD424D5530B710C2A3711FDCFECE39F85AE9B3DC0D3CE7CA4EFD7FB6A7A65039BC27A2DB1C6B990ADF73DBF8CDD6D7E7564588D14CC731BD0AB87211A6985E552A55919A9D87BABC8AC0EA1A64A78BC7260B9202BBD3891BE1246E4A111EDB3EFAFC8FB893CFE32D831E9F04EBFC6A59B7CEF35465088F2CEF93161270D597C0FF99F5E0EA571358FAFC36F2B902B6C209AC8673580B67616BA3CF1D0757491A733A99C5C477EB18BB39DB71AFD541FAEC7D5A33C4904895F97E1A9D3E06973775A85EA739663258B721729EDEF86F8D68CC2F8987726EBC6AB86231EE6CCFA94658F0AEEA502C57EBFBCAE3098EAB28FDEFF2F8703DA0E023AF070FFFF89CEF9978CFB445BC4BDF94834B6BEB7CFFBD6F550FD5E3AEDF6B36C37CF73B14DFB90CFFDFFC1A63A6107EBD29E2FB9301FCFD5218D7693E0BD5C3EB23FDE2AA643441335A615FDE801094EAF910DBD03D489FE16F7125CA6359D96FC6F7626AAE79FF5173CC64F0D26A94F3A8C67F751AD9437D78D57055B6DA9123BD2A2E44904E68CDBD338DBD1422E1CAE670705C5DF5FB70AF52E13CEB0661E82DFD06AE85EAB89A9E5F205CC59BF7B2EFF2BA1EB1FB2308DDBD8711BD0BFFDDA5E1CF1E7AF0FD1127E1A973BC4C375CB5F3B74B920A21948260B421ED74E36A20814BE10C24C26D27BF6B2E5B40A952231E9B215E554342A64F97074B262FDE14B2B823E7BBFABE59BC4F3E97E7F7F3DF8421261355D233591FDE8C64791F98CE77D0D7BBAFEF17D4DF2ED3FCB3F53216BF27787D88DA1C3CBF2D5BC360251A93E170B97123A8E0A61CE3FC8AC9C1DFD31C30BDFD13BF17734115330B8B34370A2C7A3F144146D027C243FA54787A0AB2610B4B0115570269BCB521E1CDF910B295ED9EC6D90BBF8A06651EF3EC5CF72231398D9F5D5DC20FA6037C0F7527DC46ED2E944B65BEFEECF626313B6282343187BBF7F5F84F8FBC78D7B2675FB6E31D05D2CB630E3BDFB354A57A0C3FAC0FF29211F2D40CFEC37D17EF03DBA3F22AF22B169BCEF852C6ED45869E87A0D323B4B6B2BB07B8CEAF5C1E2F3EF3AB1C430F9F3FE7FCEA4EB184DF924E75C5E56CCA41F6EE2E4C58B039B589CD350F82F600CFE17A92711E690F52FF439B466C9955F8CD4184EE3DC2DF4E3AF033ABDA155792D38B722C86C8E814B6660C30AE7810A1317C3BB2809F99155C21AC759BE362799BE72BCF1ACC88ADDBE0DF30F01CA411BD037EC2F64F496F637D785571D55A589C31930DE5EA9E7D23F80270907E752BA2E10B2D81FBD52AC7D57D1AF7F58880AFD2498EABC9D93928A4AB97484E55585E10A2E3702749B7ADF1BDE5997CEDC4B8AAFDE1397EA68BE207B341FC7883E5D38CE22B3907D7F434CD5F9ADBB4AC18E219E8E4148A2D79061F905CFAE142183FD689F8C15C087F2364A86E0A5EC24394F8714CA9DFEF11157EAF2D916DD141EBB9257F487CF687F341FC684DC417428AC761B39C038A2F0CDFDA1ADD9F69F681D1D0F1B32CBACFDDAB802BB6276A4FB7AA97E26EFE26F3CC1A021E695F8EC54649E5EA75F8DEE6609817899EF1FAA68C58A28C2DAB8278B23C107EE538D007E62BE814FBDB4AB375EF24CB6FD6BAB6D0E9FED6393E38E6467EC9469DA3FAF02AE3EAB8F51A75346A3B4ED8923DBE81B579941C0CD31C5F0BC5DBE6419C8C1CBDEFF58E3FC5F328DEA07B6ECA597EDF0DA2733396A66759EE698E6D64571E958B7188ABE3E3EA97246BBAE54A3D0D5C4568EEEF529B5F11266ED37CDE248CB1EF5F2939CC76C8AFD94A7F94D97EC4BBBE243C30597F5B64399473BC285A6FB8722AC5963EA4A90F6AB30FCBD121AE4E8AAB1FAF8A4D3DF545E1EA453CEFE1FAE0CBC5D5CF3DC921AE86B81A38AEA6C4ECBE7CE9435C0D7135085C9D46BD8BBE2F55CBE4DBFA84CF9ABF5D8CA9A7F26C5F14AD43F54EF95CCB97CDAFCE529BE7995F89A47FB1387AB6EE711C7ED50957894C1516BB0A5FE8E8B3078E33C74E6F1A5677E2502EF121AECE06AED8FC2F91DD98697346E44970C5620B96752204A9FFF331D87A951A14F859142CDE3A62B640B23B21B93DCD390E8979AC6D743F7F7088AB93B569B2AAB0D3BB5BD87E06B35581D575781F0FF363E9CD2A622DE7EB305AE9FC36BC81ECBE58B841E08AC5E3B9FD999ECE463B38A6A54002B79D61DCB0F8F18523846F0232BEF2C670D3E2C53D350F975AE479E2DCBEF4A133A886B81A5C9B36A7C6D7FED8772361C7E13E9C2794C5552DAC887CFDE6202D9657BFD7367BC1951864E71838E05A5DE3B1F9FC6C6BE23DE14D2302160BCFDDC7CE3F3A485F8DC66075BA31232671D51FE0F119B7356D370E288E0F3D6E7C9D49612348EF8EC385B87438B749B7E7C872D1C677CF653D2A367A88AB67FC5C64E68B666BAA1EE2114A9B5CA52C568E9DC990CCD60ED12A1B4C48C9CABE588763E38A7E970D5B24B73C488E3FE1F1AAF2FC22CA260BA2760732B3F3C8904C132DB6E65C35E833F9972BD5CF271AD9798ABBC5028F83E5F99EFFF00C770A058C6C6FC3112FF17AED7291B77B3EAC9D28CB77C9FA45F7B0FDAE7657020E4F12FA2D99EFD51CE2AA5E2F11A89F0319F787F83A7EE32CF1589CADD9B78FCD4CAB1D7C3334F781651DCFB571625CB13A2CCE2799452C22F2FCF98D732C335457A239653947B3C9F421FA622084F9C565CEAF7EEF72E31F9796F169D0CF71F591CF8F2B4E3B6EA90AD6895FE9B7CC3CC76AAFCF91C7DC7A7C3C0F3CFB1E67670A90EC67A59BACBE28B8CA24333CE73A3B2F5CF61E5E2F6ED6DBA59B39409FB5C7740E8DDECF83796D33AD79B4775A30EAF12315537A1A672FB84AED9E0B31E70E428C289CAF68A2C4FF4BB669670F57614CCFCE715CBD47BCED37F4FDBA10E2B8BA423AFB07360BC9C50497830BCB2B7DE14A931448243BEBF1DCDA2BA75F693195CFCB91F863747776B1429FA2C98A2AF181A73FFEAFA85EFD0411D24D1AB945195613820889B026B97C88596D88D2EF062DBB10C3582487118F8627B13C7295CE7BA21AB8325A9D3C3EAC9BFFEA4D87065B87F31EDAD18F10AE16092F0C579F914CFE9078D4B7A5BA1CBC2EC5F0A516C7B7950AC7D5ECC2128A95FD362C3F2F402DE01F6783B8B42CE07E28B51BC79D80D76A479478613E1044989D79D881A79F775C85880F3F1273B8E748E0713407395FE7C52C8EE3B348121FBA05D253A3B8166271EC640B4929789422D7930A953D5C9966E6F839B3FEC525546B3BFCDCD00ABD9BC9969CEF2C274BD4604495F469C5E9439430C7BE6777E30657A8BD8FA91F1FAC89B8154C23D50557EC3C7A160BDD4B3E99FF3B1984552DF4EC5F667988D8E74AA2C8E35F99CE7E7FBBD63C2FB551EC640F76A2B5A19630678963816C19A7B897EF3945F2B776F563D43EF83DCA249BCF526EEFE3D4EB14DFEEA467F7A9378DF757455C73C4611232B0389C988DA671D96C255DC2493A45009F86C378C7B8851B511106BF0A8BCD8D74AE1EAB5CA1F7BBB86585B8B2824C50E0674AB0F6582C706B5B2C16B0582843B4FB205B7DC8902C122C3E68018178591A35BD1161D2ABB3A9F491E3EC677DF013AD44FCAAF773C9559A7BA7D7CFF9D53521C2F780DCC9E70EE1CAD1856637FDCA776F04699B9DFB40AC844DD63756D25D72429F377E75B0787C79D8C8C666B87A9B780B3B6F76E429F1F5580C97749BB8258BD8F029D83299F8F9B5EC4C29C6AF581EE4A29686EA62671BC7B95C643C9EE9CB6C1F7EA5B6F7CC5AF5AB7ABD3DBD5D209DAE35DEB9D338FBC1954AB86ADD577AB0309FC7557ABF5EDF8AE12DE29346B12EFF23FE28D6EF4FD3B32BF258BE4661F1C7EC3357EA732D9D3021D1BB54231ECDCE33F3F8257C44BCFF376B115C223EEDE99213FABCE34A24BDC6427A25C3D5A5D5357C2ECB240BCAB84C32EB5DAB83E4601846E2571E7F90E3AA916BBB511A7B841BB852485E850D66944B7B7BE9F6E36A2FAE97F992F2D9CE7EF16EB852E8939FEBD1A630D9D1E91A2BB9D236F4C42F960329AC863348115EBAD56FD06B9C29D24F9B45FADF3D35D573DF06D1E669D663FA472FB4582C3ADB0F31EE8DE38D65232EAD9848AF9278FCEDEF8C1E7CE40A62DD1D83819FCBB5B7A75071FB9ADFD97E30DFF22A4C644715484FAD913CADB14F2ACC67A3EEDB8BA8D5CFDAA14FAB45EA799CF15476B8EE7C8EF8D5417F012BA97C89EF856FCD0B73B0CDBAFEFE07BEE7A470FB2BE4DEFF0011290E89646AB767D1A0C572C07B7ACC9FD08E5F0D71750E71952B2040F620DB47131072F086D2CDBD36ADF7B9F335783215682447F32E0F0C26F558EBBD435C9DAD364F0B57ECCCCE7820084F20C3D78D034216E9FC615CDDB2273046F6A4487A582E9341309245A2CB7E8921AECE479B83C055528CEDEAE2F51267728D74AE24D9DD29B606B2FB7FBAE53B2BCCA7FEA55BC3C3E0EE39F524333736A3B00ECF9B38F76D0E02578768917D57643A7F3ADBB4F53AB579CB16C703EFD17B2E4F035783C8B3ED76843037B38EF99955CC4E2C63666A0D13F7A730FD6816CE44B95998DF8A7F264AFBFE6779424EC3F7D85AEFBCF8457BA12507C264FFE78EACF7A54BC36331DB57BF8E5BEF34F8D5965A38E4FB3CAADC5454BC6731E34EB180C9C54D8445091F13CF7E6D32805F2F0AF832981A288FB930FCAA8F7A71A6B3933EBFB22E61722E845207FFE669F0AB97852BB6CEF3652A856FCB25049502B7711C4A11EBC4BBF5A417783B9C0FC4F22105D7B750C81E3ECB7E88ABF6D77CC12CB71D0B3D9CFD76525C0DF23CFA7E71F5453285770C5BF85408E19B6C0A0BEB56446515B1781176C294DD9D8491F07530F69DE9132C675D2EAAF03336C3D13CF295A73C5744A738BF21AEEACF2DEC15B96E5FC8F71E47D04FBD419E479F2F91AEE4F1E2D1961B1F7ABDB82E49F8341CC2DB0603AE85C3F888AE5D21FC8E548BFB70F55DB5CA63FCBED0348CECECC027E5084B6E4E93F961D464999F079BD5D2F5DC4E64FB705FB012878FBE337B28E80E406F54B8AD6D30291D73A05E045CB1752FF6EEB4A3CBCEB1625829144A3C368DC5F216F207D65FD999DD1E1F425B5684F59BA732CEE3C841962B34DD665F06C3D5FCD232C62D3E5CB658493F0AE07D9B0D97565771857072D964C27531C2B17390673DA4F29EC3895B8A8409D2AF822C774E5CDB672F2782028F5FD59C1E6489C7CD3925CC987D50E9DD606B0D0763E32F2AAE8252012B6B1128DAE1F5FA10F1FDAD856558569661375AB0353707F3C23CA2F4DC0AB9421357859000D16AE7EFE7CBC4153B8B37B31B136A7168985D8A1C924B0C574BAB6B9C5F315C7D120A129E9CF8C0EEC2A5B525BC363A86DF6DACE35D939163E913E26197D674F8BDCB85DFE9D6F0AED98CAF33698C4CACC0EE701CC255927479B6CEAC6C6C214E981D31BA304B7CD130F684E702EE67ECE71957CCF7C972CCB1D85816A7ABEDEE070D4763308B51BCA537E04E6E2F6EE48A3F848FDC76048261040591C73624D2F5FC9A2F1B57E1581A933A332CA44BB33CB2EC5C9676E71424498F3E8EDEDE5A02D4463A7B384F0C7F06F47FD46CE776F5944BC613E28D7E970FB2EBE8FCE2170557EC531464244211C8BB7BE55849A4B37027B48ECF354E739B6A8947E0FE0DE2F55A4482EC74231153502AB39CA5647BD7B6FBEAFF7171C5FC4A5F67331855731CEFC9CC61FF3FE357ABEB1BC4AF5C78DFEEC4BB160B1EEC1C8EE36B57AE4544FCD3D202B7091F4EAFC244FC8EC51C1CC415C383B6BBBF4252E37C1D354BCF3729C55E1D5C95ABC8F88250BC4178A6669AFCCA1F1639BF6271596F10FF6E87AB7DB4D8DE00C215DBDBC9F673A6BD3E64225108F4DE16F3B9138DB31F5C7DA1A530AA6438AEF6627BF64A92C637F6F80997830C576F9BAD78502BF585AB2F1209C2950E0B8B4B877055D9E5DBADF9A4D93A46CAE9856D6E61DFDE8D8B8EAB2CE14A13A2C4B3C2CD6B4C561CC5AF0EE22ACBEC366F08E56281D3CC912CCD1CAC37005C75F2B733DFF8ED64B2C9AFBAE18AE9ED0C57EF90BE34BA53ED0B57B793F45C663738AE98DFEE285FAF2613CF727B796C368BAFEDD5277CDEFDED62B8BE4EC8B0D5E0572EB28DD7D93E27928D9F04EAFB9EAEB8DC78DB68C4E78A0CA3C3058170138B6BCD7D022C9EAB317F8A10C1863B86FFE149E22746197F154841CEF51FE3CD4A5FFC8A78490357B9367BC8981CBCFFF061935F5D265C8DD42A7DF2AB3AAE26A6A608E3059EAB94E5FCEAB67FFB38EFD4B9E6576C3EBC87FD28E97C1151B2F3ECC4C33C348F1E6D7F61F96DB54C77F9962FEF3473BC3672C40E520EDE1573F8D493C20D7F0A1B893C7C3E118B6E113A47A42987B2D407966BBB511299021E3C7ABC872BB2FB583EFA5E70C5CE41F8879969AEC33D9C5EC3ECDC3C7EE54BE2DFDD73E12F0C12AEC78BC3759C165A9DF648E67325E452999EDA3CCD7176C2D51CD97C634216236E0D01E69B6467F9586C3CE6BE71AF3D96C72F8867FEF9230F7E1148E38992C583B1C74DBDFDB2690BF72AE5BEF8D5E78AC2F5F6F9C545BC4198FED19817FFCBA6E2B6561AE26AC06DBE0C5CB59692A4F2BDF4C2A661DFFF1E9253BF918BF8D1A81BAF05D3985209870FC738BF7A8774F68FDCCE9E7D0BCC2FFAEBE959DC8845313AB586A9D9596449B68BB6FEFC07435C9D6D5CF9C359F8C269C86A116E7F1A513971247DA65FDD7B30CAF5768E2BD731702545F168769DCBC1749AF4AB2F6E0D717581702591DEC6E259B3855A5D7FDBE98D3ECB677852BF68887435D68F6CB60CF1FD0FB03D35D3A49F4DA4212D2C22ED740D71750E70E50B47114F9E2C9E81F1AB15EE17ADCBC1CF49A6F5CBAFD8BED5D1A955ACACAD211814E17DFD753CFF57FFBA9E8794EC50B6A6258D3D427266966C9FF0B1C73EC4D5E98E332048BB781A4C3CC3B7F71F70BDFD926E03EF9A0C7DE1EAAFEF3DC0B5709070B582E99919C458BE91AFBEC1F37FF12F9BB80AACEA607EF312E24FC611F1FA87B83AA3B81A645C1FC3D5A3F18926BFBA2146FAE6570D3FC3DCC202C7914A76E5F37FF6CF9BB812F49B08DCBA89CCC2D21057E70857FDC4B7277255E8A41CDFDFBC266611D4989F610C8F4D1E8EABAB3E77DFB8FA5C89715C4DCE4CF3B53FD9E5C1F37FF36F9BB892EC76C4C92E2D05C3FC3CC74E7D3B6A0CE7DDDF3E887A6735BE9DF9AFFE27D98A7FFED08D5FF892DC7F35FAF871935F5D0BF8FAC6D5ADB8C2E5E093F171F0F5C1CA36AA85BD38A3949A84268AFC7BB225C663C8AFCE36BFEA075721AD84CF9422CF4F75359CC5BA96C783474FF0D0E0E4B8FA6C37875ACFB89A99C797290DA3932B989C9EC2C175E783E566A2048B5A1CE2EA82E1EA60E1FAD5C404D7DBDFDE32E363BF0F5FE70BC48354DCAB765F2764B8FABBD979DC92A3783CABC313A27314AEFE6133867529F74AE08A9D6B2CD9EC482A091E5FCCF207B358CB570357558C4FCF60C625F07C573763517CE80FE1B348988A7024AEDE3659B8DEBEBAE5E5F9238FC2D51BB604F4AF00BF626782FBE61620399CF02FADC03E3609DBE82832F2D1F9792F02AE1A251651609AD6418C24F7E5BB3A581AF9AFD8DA79EBFFAD71EADDDA5C96F308ECE617B8C8B8F2AFACC237BF88F0E6268FB9337CF91DFF2F17EF1CCB781171751EE6F83CE18AC5D985D6F5C8A7B3F5D84E96EBDCE3432ED5398E7188AB21AE8EC2D569B5F92271E5F20638B6DA157E9E5B876B27A9A7ECEE87BDE86D762BFC7CBE17DCE6698EF320AEBA956CB172649D5EE814AA3B3CC67810B452B9E291757AA5C5CE2A1C142D767EC660E854B93D34085ACC173CA8F125D2B99E68B97D01FE0E772B42543EB24E2F74A2642B47A4C1D00A8BB123EBF44C2B3A385A41213A103A424C85281DDDAF5E688522D2C0C6E70F457AA2F5FF011B295313 diff --git a/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_hal_conf.h b/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_hal_conf.h index f21dd27..951881c 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_hal_conf.h +++ b/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_hal_conf.h @@ -64,7 +64,7 @@ /*#define HAL_SMARTCARD_MODULE_ENABLED */ /*#define HAL_SPI_MODULE_ENABLED */ /*#define HAL_SRAM_MODULE_ENABLED */ -#define HAL_TIM_MODULE_ENABLED +/*#define HAL_TIM_MODULE_ENABLED */ #define HAL_UART_MODULE_ENABLED /*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ diff --git a/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_it.h b/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_it.h index 49ca180..6da2b93 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_it.h +++ b/Software/master/PressureSensorBoardMaster/Core/Inc/stm32f1xx_it.h @@ -56,10 +56,7 @@ void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void DMA1_Channel5_IRQHandler(void); -void TIM3_IRQHandler(void); void USART1_IRQHandler(void); -void USART2_IRQHandler(void); -void USART3_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Software/master/PressureSensorBoardMaster/Core/Inc/tim.h b/Software/master/PressureSensorBoardMaster/Core/Inc/tim.h deleted file mode 100644 index 899839b..0000000 --- a/Software/master/PressureSensorBoardMaster/Core/Inc/tim.h +++ /dev/null @@ -1,52 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file tim.h - * @brief This file contains all the function prototypes for - * the tim.c file - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __TIM_H__ -#define __TIM_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -extern TIM_HandleTypeDef htim3; - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -void MX_TIM3_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __TIM_H__ */ - diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/dma.c b/Software/master/PressureSensorBoardMaster/Core/Src/dma.c index 041c4cf..df95463 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Src/dma.c +++ b/Software/master/PressureSensorBoardMaster/Core/Src/dma.c @@ -44,7 +44,7 @@ void MX_DMA_Init(void) /* DMA interrupt init */ /* DMA1_Channel5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0); + HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 1, 0); HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); } diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/main.c b/Software/master/PressureSensorBoardMaster/Core/Src/main.c index 64ea24a..9f21482 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Src/main.c +++ b/Software/master/PressureSensorBoardMaster/Core/Src/main.c @@ -9,7 +9,6 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "dma.h" -#include "tim.h" #include "usart.h" #include "gpio.h" @@ -21,21 +20,21 @@ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ -// 从机信æ¯ç»“æž„ +// �ӻ���Ϣ�ṹ typedef struct { - uint8_t address; // ä»Žæœºåœ°å€ - uint8_t is_online; // 是å¦åœ¨çº¿ - uint8_t is_responded; // 是å¦å›žå¤ - uint8_t matrix_data[5]; // çŸ©é˜µæ•°æ® - uint8_t retry_count; // é‡è¯•计数 + uint8_t address; // �ӻ���ַ + uint8_t is_online; // �Ƿ����� + uint8_t is_responded; // �Ƿ�ظ� + uint8_t matrix_data[5]; // �������� + uint8_t retry_count; // ���Լ��� } SlaveDevice_t; -// ä»»åŠ¡çŠ¶æ€ +// ����״̬ typedef enum { - STATE_IDLE = 0, // ç©ºé—²çŠ¶æ€ - STATE_WORKING = 1, // 工作中 - STATE_COMPLETE = 2, // åº”ç­”å®Œæˆ - STATE_OUTTIME = 3 // 应答超时 + STATE_IDLE = 0, // ����״̬ + STATE_WORKING = 1, // ������ + STATE_COMPLETE = 2, // Ӧ����� + STATE_OUTTIME = 3 // Ӧ��ʱ } CommState_t; @@ -50,13 +49,18 @@ typedef enum { #define sta_query_len 5 #define matrix_query_len 10 -// 通信端å£å®šä¹‰ +// ͨ�Ŷ˿ڶ��� #define RS485_SLAVE_PORT &huart1 #define RS485_OUTPUT_PORT &huart2 #define RS232_OUTPUT_PORT &huart3 -//查询状æ€å®šä¹‰ - +//��ѯ״̬���� +#define S1_Pin GPIO_PIN_4 +#define S1_GPIO_Port GPIOB +#define S2_Pin GPIO_PIN_5 +#define S2_GPIO_Port GPIOB +#define S3_Pin GPIO_PIN_6 +#define S3_GPIO_Port GPIOB /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -67,26 +71,26 @@ typedef enum { /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ -// 从机设备数组 +// �ӻ��豸���� SlaveDevice_t slaves[SLAVE_COUNT] = { - {0x01, 0, 0, {0}, 0}, // 从机1 - {0x02, 0, 0, {0}, 0}, // 从机2 - {0x03, 0, 0, {0}, 0} // 从机3 + {0x01, 0, 0, {0}, 0}, // �ӻ�1 + {0x02, 0, 0, {0}, 0}, // �ӻ�2 + {0x03, 0, 0, {0}, 0} // �ӻ�3 }; CommState_t query_state[SLAVE_COUNT] = {0,0,0}; -// å…¨å±€çŸ©é˜µçŠ¶æ€ +// ȫ�־���״̬ uint8_t global_matrix[TOTAL_MATRIX_POINTS] = {0}; -// 通信缓冲区 +// ͨ�Ż����� uint8_t tx_buffer[16]; uint8_t rx_buffer[RX_BUFFER_SIZE]; uint8_t output_frame[output_frame_len]; uint16_t last_dma_pos = 0; -// ç³»ç»ŸçŠ¶æ€ +// ϵͳ״̬ uint8_t current_task_index = 0; uint8_t expecting_response_from = 0; @@ -142,14 +146,12 @@ int main(void) MX_GPIO_Init(); MX_DMA_Init(); MX_USART2_UART_Init(); - MX_TIM3_Init(); MX_USART1_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ - // å¯åŠ¨å®šæ—¶å™¨ -// HAL_TIM_Base_Start_IT(&htim3); - current_task_index = 1; - // å¯åЍ䏲å£DMA接收(Normal模å¼ï¼‰ + + memset(rx_buffer, 0, RX_BUFFER_SIZE); + // ��������DMA���գ�Normalģʽ�� HAL_UART_Receive_DMA(RS485_SLAVE_PORT, rx_buffer, RX_BUFFER_SIZE); __HAL_UART_ENABLE_IT(RS485_SLAVE_PORT, UART_IT_IDLE); /* USER CODE END 2 */ @@ -157,114 +159,87 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) - { - - if(current_task_index == 8) - current_task_index = 1; - + { + + current_task_index++; + if(current_task_index > 7) current_task_index = 1; + switch(current_task_index) { case 1: - //先确定当å‰ä»»åŠ¡çš„æ‰§è¡ŒçŠ¶æ€ï¼Œå½“任务为完æˆã€è¶…时和空闲时å†è¿›åˆ¤æ–­ - //执行函数 - //将任务状æ€è®¾ç½®ä¸ºå·¥ä½œ - //开定时器 + //��ȷ����ǰ�����ִ��״̬��������Ϊ��ɡ���ʱ�Ϳ���ʱ�ٽ��ж� + //ִ�к��� + //������״̬����Ϊ���� + //����ʱ�� // - //å®šæ—¶å™¨ä¸­æ–­é‡Œé¢æ¯æ¬¡éƒ½è¯»å–æ˜¯å¦æ”¶åˆ°è¯¥ä»»åŠ¡çš„å›žå¤ï¼Œç„¶åŽæ¸…é›¶å›žå¤æ ‡å¿—ä½ å¦‚æžœæ ‡å¿—ä½ä¸º0,则确定为离线 无论是å¦åœ¨çº¿ï¼Œå‡ä½¿å¾—任务索引加1 + //��ʱ���ж�����ÿ�ζ���ȡ�Ƿ��յ�������Ļظ���Ȼ������ظ���־λ �����־λΪ0����ȷ��Ϊ���� �����Ƿ����ߣ���ʹ������������1 // - if(query_state[0] != STATE_WORKING) - { + + Slave1_Sta_Query(); - query_state[0] = STATE_WORKING; - expecting_response_from = 1; - HAL_UART_Receive_DMA(&huart1, rx_buffer, sta_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); + HAL_Delay(40); - - } + break; case 2: - if(query_state[0] != STATE_WORKING) - { - Slave1_Sta_Query(); - query_state[0] = STATE_WORKING; - HAL_UART_Receive_DMA(&huart1, rx_buffer, matrix_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); - - - } - - - + + + Slave1_Matrix_Query(); + HAL_Delay(40); + + break; case 3: - if(query_state[1] != STATE_WORKING) - { - Slave1_Sta_Query(); - query_state[1] = STATE_WORKING; - expecting_response_from = 2; - HAL_UART_Receive_DMA(&huart1, rx_buffer, sta_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); + + + Slave2_Sta_Query(); + HAL_Delay(40); + - - } + break; case 4: - if(query_state[1] != STATE_WORKING) - { - Slave1_Sta_Query(); - query_state[1] = STATE_WORKING; - HAL_UART_Receive_DMA(&huart1, rx_buffer, matrix_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); + + + Slave2_Matrix_Query(); + HAL_Delay(40); + - - } + break; case 5: - if(query_state[2] != STATE_WORKING) - { - Slave1_Sta_Query(); - query_state[2] = STATE_WORKING; - expecting_response_from = 3; - HAL_UART_Receive_DMA(&huart1, rx_buffer, sta_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); + + + Slave3_Sta_Query(); + HAL_Delay(40); + - - } + break; case 6: - if(query_state[2] != STATE_WORKING) - { - Slave1_Sta_Query(); - query_state[2] = STATE_WORKING; - HAL_UART_Receive_DMA(&huart1, rx_buffer, matrix_query_len); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); - - } - + + + Slave3_Matrix_Query(); + HAL_Delay(40); + + break; case 7: RS485_Output(); - __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); // 清除潜在的旧标志 - HAL_TIM_Base_Start_IT(&htim3); + HAL_Delay(40); + break; @@ -275,7 +250,8 @@ int main(void) } - + + @@ -338,16 +314,16 @@ uint8_t Slave1_Sta_Query(void) { uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x01; tx_buffer[frame_index++] = 0x01; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); } @@ -356,16 +332,16 @@ uint8_t Slave1_Matrix_Query(void) { uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x01; tx_buffer[frame_index++] = 0x03; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); @@ -375,16 +351,16 @@ uint8_t Slave2_Sta_Query(void) { uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x02; tx_buffer[frame_index++] = 0x01; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); @@ -394,34 +370,35 @@ uint8_t Slave2_Matrix_Query(void) { uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x02; tx_buffer[frame_index++] = 0x03; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); } uint8_t Slave3_Sta_Query(void) { + HAL_GPIO_WritePin(S1_GPIO_Port, S1_Pin, GPIO_PIN_RESET); uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x03; tx_buffer[frame_index++] = 0x01; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); } @@ -430,16 +407,16 @@ uint8_t Slave3_Matrix_Query(void) { uint8_t frame_index = 0; - // 构建查询帧 + // ������ѯ֡ tx_buffer[frame_index++] = 0x03; tx_buffer[frame_index++] = 0x03; - // CRC校验 + // CRC�� uint16_t crc = Calculate_CRC16(tx_buffer, frame_index); tx_buffer[frame_index++] = crc & 0xFF; tx_buffer[frame_index++] = (crc >> 8) & 0xFF; - // å‘é€ + // ���� HAL_UART_Transmit(RS485_SLAVE_PORT, tx_buffer, frame_index, 10); @@ -449,6 +426,7 @@ uint8_t Process_Reply(uint8_t data_len) { if(data_len == 5) { + HAL_GPIO_WritePin(S3_GPIO_Port, S3_Pin, GPIO_PIN_RESET); uint8_t index =0; uint8_t addr = rx_buffer[index++]; uint8_t ret2 = rx_buffer[index++]; @@ -456,13 +434,14 @@ uint8_t Process_Reply(uint8_t data_len) if((addr == expecting_response_from) && (ret2 == 0x01) && (ret3 == 0x01)) { slaves[addr-1].is_online = 1; - query_state[addr-1] = STATE_COMPLETE; - slaves[addr-1].is_responded = 1; // 矩阵回å¤è¡¨ç¤ºä»Žæœºå°±ç»ª + slaves[addr-1].is_responded = 1; // ����ظ���ʾ�ӻ����� + } } else if(data_len == 10) { + uint8_t index =0; uint8_t col,row,buf,global_index,value; uint8_t addr = rx_buffer[index++]; @@ -481,8 +460,8 @@ uint8_t Process_Reply(uint8_t data_len) global_matrix[global_index] = value; } } - slaves[addr-1].is_online = 1; // 标记在线 - query_state[addr-1] = STATE_COMPLETE; // æŸ¥è¯¢å®Œæˆ + slaves[addr-1].is_online = 1; // ������� + query_state[addr-1] = STATE_COMPLETE; // ��ѯ��� } @@ -498,13 +477,13 @@ uint8_t RS485_Output(void) output_frame[index++] = 0xAA; output_frame[index++] = 0x55; - // ä»Žæœºåœ¨çº¿çŠ¶æ€ (3字节) + // �ӻ�����״̬ (3�ֽ�) for(uint8_t i = 0; i < SLAVE_COUNT; i++) { output_frame[index++] = slaves[i].is_online; } - // ä»Žæœºå°±ç»ªçŠ¶æ€ (3字节) + // �ӻ�����״̬ (3�ֽ�) for(uint8_t i = 0; i < SLAVE_COUNT; i++) { output_frame[index++] = slaves[i].is_responded; @@ -514,8 +493,8 @@ uint8_t RS485_Output(void) { output_frame[index++] = global_matrix[i]; } - // 通过RS485å‘é€ - HAL_UART_Transmit(RS485_OUTPUT_PORT, output_frame, index, 10); + // ͨ��RS485���� + HAL_UART_Transmit(RS485_OUTPUT_PORT, output_frame, index, 100); @@ -523,7 +502,7 @@ uint8_t RS485_Output(void) } /** - * @brief 计算CRC16校验 + * @brief ����CRC16�� */ uint16_t Calculate_CRC16(uint8_t *data, uint8_t length) { @@ -542,54 +521,26 @@ uint16_t Calculate_CRC16(uint8_t *data, uint8_t length) return crc; } - - -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - /* 判断是哪个定时器触å‘的中断 */ - if (htim->Instance == TIM3) - { - if(current_task_index < 7) - { - uint8_t group = (current_task_index + 1) / 2; - - if(query_state[group] != STATE_COMPLETE) - { - slaves[group].is_online = 0; - slaves[group].is_responded = 0; // 矩阵回å¤è¡¨ç¤ºä»Žæœºå°±ç»ª - } - - } - else if (current_task_index == 7) - { - for(uint8_t i = 0; i < SLAVE_COUNT; i++) - { - slaves[group].is_online = 0; - slaves[group].is_responded = 0; // 矩阵回å¤è¡¨ç¤ºä»Žæœºå°±ç»ª - } - - - - } - current_task_index++; - // 注æ„:é¿å…在中断中进行长时间æ“作或调用HAL_Delay。 - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE); // å…ˆæ¸…é™¤æ ‡å¿—ä½ - HAL_TIM_Base_Stop_IT(htim); // å†å®‰å…¨åœ°åœæ­¢å®šæ—¶å™¨ - } - // 如果工程中有多个定时器中断,å¯ä»¥ç»§ç»­ç”¨ else if 判断 -} - - -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) -{ +void HAL_UART_IdleCallback(UART_HandleTypeDef *huart) +{ if(huart->Instance == USART1) { - // åœæ­¢DMA - HAL_UART_DMAStop(RS485_SLAVE_PORT); + HAL_GPIO_WritePin(S1_GPIO_Port, S1_Pin, GPIO_PIN_RESET); uint8_t received_len = RX_BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx); - Process_Reply(received_len); - // 釿–°å¯åЍDMA - HAL_UART_Receive_DMA(&huart1, rx_buffer, RX_BUFFER_SIZE); + if(received_len > 0) + { + // ��������DMA���� +// HAL_UART_DMAStop(&huart1); + HAL_GPIO_WritePin(S2_GPIO_Port, S2_Pin, GPIO_PIN_RESET); + // ������յ������� + Process_Reply(received_len); + + } + memset(rx_buffer, 0, RX_BUFFER_SIZE); + HAL_UART_Receive_DMA(RS485_SLAVE_PORT, rx_buffer, RX_BUFFER_SIZE); + __HAL_UART_ENABLE_IT(RS485_SLAVE_PORT, UART_IT_IDLE); + + } } diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/stm32f1xx_it.c b/Software/master/PressureSensorBoardMaster/Core/Src/stm32f1xx_it.c index d65b462..bf5992a 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Src/stm32f1xx_it.c +++ b/Software/master/PressureSensorBoardMaster/Core/Src/stm32f1xx_it.c @@ -55,11 +55,8 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ -extern TIM_HandleTypeDef htim3; extern DMA_HandleTypeDef hdma_usart1_rx; extern UART_HandleTypeDef huart1; -extern UART_HandleTypeDef huart2; -extern UART_HandleTypeDef huart3; /* USER CODE BEGIN EV */ /* USER CODE END EV */ @@ -217,20 +214,6 @@ void DMA1_Channel5_IRQHandler(void) /* USER CODE END DMA1_Channel5_IRQn 1 */ } -/** - * @brief This function handles TIM3 global interrupt. - */ -void TIM3_IRQHandler(void) -{ - /* USER CODE BEGIN TIM3_IRQn 0 */ - - /* USER CODE END TIM3_IRQn 0 */ - HAL_TIM_IRQHandler(&htim3); - /* USER CODE BEGIN TIM3_IRQn 1 */ - - /* USER CODE END TIM3_IRQn 1 */ -} - /** * @brief This function handles USART1 global interrupt. */ @@ -245,34 +228,6 @@ void USART1_IRQHandler(void) /* USER CODE END USART1_IRQn 1 */ } -/** - * @brief This function handles USART2 global interrupt. - */ -void USART2_IRQHandler(void) -{ - /* USER CODE BEGIN USART2_IRQn 0 */ - - /* USER CODE END USART2_IRQn 0 */ - HAL_UART_IRQHandler(&huart2); - /* USER CODE BEGIN USART2_IRQn 1 */ - - /* USER CODE END USART2_IRQn 1 */ -} - -/** - * @brief This function handles USART3 global interrupt. - */ -void USART3_IRQHandler(void) -{ - /* USER CODE BEGIN USART3_IRQn 0 */ - - /* USER CODE END USART3_IRQn 0 */ - HAL_UART_IRQHandler(&huart3); - /* USER CODE BEGIN USART3_IRQn 1 */ - - /* USER CODE END USART3_IRQn 1 */ -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/tim.c b/Software/master/PressureSensorBoardMaster/Core/Src/tim.c deleted file mode 100644 index 65f0e59..0000000 --- a/Software/master/PressureSensorBoardMaster/Core/Src/tim.c +++ /dev/null @@ -1,111 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file tim.c - * @brief This file provides code for the configuration - * of the TIM instances. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "tim.h" - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -TIM_HandleTypeDef htim3; - -/* TIM3 init function */ -void MX_TIM3_Init(void) -{ - - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 7199; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 4999; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - -} - -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) -{ - - if(tim_baseHandle->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* TIM3 clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - - /* TIM3 interrupt Init */ - HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(TIM3_IRQn); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } -} - -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) -{ - - if(tim_baseHandle->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - - /* TIM3 interrupt Deinit */ - HAL_NVIC_DisableIRQ(TIM3_IRQn); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/usart.c b/Software/master/PressureSensorBoardMaster/Core/Src/usart.c index 28a82cc..ccad688 100644 --- a/Software/master/PressureSensorBoardMaster/Core/Src/usart.c +++ b/Software/master/PressureSensorBoardMaster/Core/Src/usart.c @@ -152,7 +152,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart1_rx.Init.Mode = DMA_NORMAL; + hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; hdma_usart1_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) { @@ -191,9 +191,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(USART2_IRQn); /* USER CODE BEGIN USART2_MspInit 1 */ /* USER CODE END USART2_MspInit 1 */ @@ -221,9 +218,6 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /* USART3 interrupt Init */ - HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); /* USER CODE BEGIN USART3_MspInit 1 */ /* USER CODE END USART3_MspInit 1 */ @@ -270,8 +264,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); - /* USART2 interrupt Deinit */ - HAL_NVIC_DisableIRQ(USART2_IRQn); /* USER CODE BEGIN USART2_MspDeInit 1 */ /* USER CODE END USART2_MspDeInit 1 */ @@ -290,8 +282,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11); - /* USART3 interrupt Deinit */ - HAL_NVIC_DisableIRQ(USART3_IRQn); /* USER CODE BEGIN USART3_MspDeInit 1 */ /* USER CODE END USART3_MspDeInit 1 */ diff --git a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h b/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h deleted file mode 100644 index ac72075..0000000 --- a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h +++ /dev/null @@ -1,2153 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_tim.h - * @author MCD Application Team - * @brief Header file of TIM HAL module. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32F1xx_HAL_TIM_H -#define STM32F1xx_HAL_TIM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal_def.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @addtogroup TIM - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup TIM_Exported_Types TIM Exported Types - * @{ - */ - -/** - * @brief TIM Time base Configuration Structure definition - */ -typedef struct -{ - uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ - - uint32_t CounterMode; /*!< Specifies the counter mode. - This parameter can be a value of @ref TIM_Counter_Mode */ - - uint32_t Period; /*!< Specifies the period value to be loaded into the active - Auto-Reload Register at the next update event. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - - uint32_t ClockDivision; /*!< Specifies the clock division. - This parameter can be a value of @ref TIM_ClockDivision */ - - uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter - reaches zero, an update event is generated and counting restarts - from the RCR value (N). - This means in PWM mode that (N+1) corresponds to: - - the number of PWM periods in edge-aligned mode - - the number of half PWM period in center-aligned mode - GP timers: this parameter must be a number between Min_Data = 0x00 and - Max_Data = 0xFF. - Advanced timers: this parameter must be a number between Min_Data = 0x0000 and - Max_Data = 0xFFFF. */ - - uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload. - This parameter can be a value of @ref TIM_AutoReloadPreload */ -} TIM_Base_InitTypeDef; - -/** - * @brief TIM Output Compare Configuration Structure definition - */ -typedef struct -{ - uint32_t OCMode; /*!< Specifies the TIM mode. - This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ - - uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ - - uint32_t OCPolarity; /*!< Specifies the output polarity. - This parameter can be a value of @ref TIM_Output_Compare_Polarity */ - - uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. - This parameter can be a value of @ref TIM_Output_Compare_N_Polarity - @note This parameter is valid only for timer instances supporting break feature. */ - - uint32_t OCFastMode; /*!< Specifies the Fast mode state. - This parameter can be a value of @ref TIM_Output_Fast_State - @note This parameter is valid only in PWM1 and PWM2 mode. */ - - - uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_Output_Compare_Idle_State - @note This parameter is valid only for timer instances supporting break feature. */ - - uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State - @note This parameter is valid only for timer instances supporting break feature. */ -} TIM_OC_InitTypeDef; - -/** - * @brief TIM One Pulse Mode Configuration Structure definition - */ -typedef struct -{ - uint32_t OCMode; /*!< Specifies the TIM mode. - This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ - - uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ - - uint32_t OCPolarity; /*!< Specifies the output polarity. - This parameter can be a value of @ref TIM_Output_Compare_Polarity */ - - uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. - This parameter can be a value of @ref TIM_Output_Compare_N_Polarity - @note This parameter is valid only for timer instances supporting break feature. */ - - uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_Output_Compare_Idle_State - @note This parameter is valid only for timer instances supporting break feature. */ - - uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State - @note This parameter is valid only for timer instances supporting break feature. */ - - uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - - uint32_t ICSelection; /*!< Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint32_t ICFilter; /*!< Specifies the input capture filter. - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ -} TIM_OnePulse_InitTypeDef; - -/** - * @brief TIM Input Capture Configuration Structure definition - */ -typedef struct -{ - uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - - uint32_t ICSelection; /*!< Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint32_t ICFilter; /*!< Specifies the input capture filter. - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ -} TIM_IC_InitTypeDef; - -/** - * @brief TIM Encoder Configuration Structure definition - */ -typedef struct -{ - uint32_t EncoderMode; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Encoder_Mode */ - - uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ - - uint32_t IC1Selection; /*!< Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint32_t IC1Filter; /*!< Specifies the input capture filter. - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ - - uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ - - uint32_t IC2Selection; /*!< Specifies the input. - This parameter can be a value of @ref TIM_Input_Capture_Selection */ - - uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint32_t IC2Filter; /*!< Specifies the input capture filter. - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ -} TIM_Encoder_InitTypeDef; - -/** - * @brief Clock Configuration Handle Structure definition - */ -typedef struct -{ - uint32_t ClockSource; /*!< TIM clock sources - This parameter can be a value of @ref TIM_Clock_Source */ - uint32_t ClockPolarity; /*!< TIM clock polarity - This parameter can be a value of @ref TIM_Clock_Polarity */ - uint32_t ClockPrescaler; /*!< TIM clock prescaler - This parameter can be a value of @ref TIM_Clock_Prescaler */ - uint32_t ClockFilter; /*!< TIM clock filter - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ -} TIM_ClockConfigTypeDef; - -/** - * @brief TIM Clear Input Configuration Handle Structure definition - */ -typedef struct -{ - uint32_t ClearInputState; /*!< TIM clear Input state - This parameter can be ENABLE or DISABLE */ - uint32_t ClearInputSource; /*!< TIM clear Input sources - This parameter can be a value of @ref TIM_ClearInput_Source */ - uint32_t ClearInputPolarity; /*!< TIM Clear Input polarity - This parameter can be a value of @ref TIM_ClearInput_Polarity */ - uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler - This parameter must be 0: When OCRef clear feature is used with ETR source, - ETR prescaler must be off */ - uint32_t ClearInputFilter; /*!< TIM Clear Input filter - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ -} TIM_ClearInputConfigTypeDef; - -/** - * @brief TIM Master configuration Structure definition - */ -typedef struct -{ - uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection - This parameter can be a value of @ref TIM_Master_Mode_Selection */ - uint32_t MasterSlaveMode; /*!< Master/slave mode selection - This parameter can be a value of @ref TIM_Master_Slave_Mode - @note When the Master/slave mode is enabled, the effect of - an event on the trigger input (TRGI) is delayed to allow a - perfect synchronization between the current timer and its - slaves (through TRGO). It is not mandatory in case of timer - synchronization mode. */ -} TIM_MasterConfigTypeDef; - -/** - * @brief TIM Slave configuration Structure definition - */ -typedef struct -{ - uint32_t SlaveMode; /*!< Slave mode selection - This parameter can be a value of @ref TIM_Slave_Mode */ - uint32_t InputTrigger; /*!< Input Trigger source - This parameter can be a value of @ref TIM_Trigger_Selection */ - uint32_t TriggerPolarity; /*!< Input Trigger polarity - This parameter can be a value of @ref TIM_Trigger_Polarity */ - uint32_t TriggerPrescaler; /*!< Input trigger prescaler - This parameter can be a value of @ref TIM_Trigger_Prescaler */ - uint32_t TriggerFilter; /*!< Input trigger filter - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ - -} TIM_SlaveConfigTypeDef; - -/** - * @brief TIM Break input(s) and Dead time configuration Structure definition - * @note 2 break inputs can be configured (BKIN and BKIN2) with configurable - * filter and polarity. - */ -typedef struct -{ - uint32_t OffStateRunMode; /*!< TIM off state in run mode, This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ - - uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode, This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ - - uint32_t LockLevel; /*!< TIM Lock level, This parameter can be a value of @ref TIM_Lock_level */ - - uint32_t DeadTime; /*!< TIM dead Time, This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ - - uint32_t BreakState; /*!< TIM Break State, This parameter can be a value of @ref TIM_Break_Input_enable_disable */ - - uint32_t BreakPolarity; /*!< TIM Break input polarity, This parameter can be a value of @ref TIM_Break_Polarity */ - - uint32_t BreakFilter; /*!< Specifies the break input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ - - uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state, This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ - -} TIM_BreakDeadTimeConfigTypeDef; - -/** - * @brief HAL State structures definition - */ -typedef enum -{ - HAL_TIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ - HAL_TIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ - HAL_TIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ - HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ - HAL_TIM_STATE_ERROR = 0x04U /*!< Reception process is ongoing */ -} HAL_TIM_StateTypeDef; - -/** - * @brief TIM Channel States definition - */ -typedef enum -{ - HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state */ - HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use */ - HAL_TIM_CHANNEL_STATE_BUSY = 0x02U, /*!< An internal process is ongoing on the TIM channel */ -} HAL_TIM_ChannelStateTypeDef; - -/** - * @brief DMA Burst States definition - */ -typedef enum -{ - HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */ - HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */ - HAL_DMA_BURST_STATE_BUSY = 0x02U, /*!< Ongoing DMA Burst */ -} HAL_TIM_DMABurstStateTypeDef; - -/** - * @brief HAL Active channel structures definition - */ -typedef enum -{ - HAL_TIM_ACTIVE_CHANNEL_1 = 0x01U, /*!< The active channel is 1 */ - HAL_TIM_ACTIVE_CHANNEL_2 = 0x02U, /*!< The active channel is 2 */ - HAL_TIM_ACTIVE_CHANNEL_3 = 0x04U, /*!< The active channel is 3 */ - HAL_TIM_ACTIVE_CHANNEL_4 = 0x08U, /*!< The active channel is 4 */ - HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U /*!< All active channels cleared */ -} HAL_TIM_ActiveChannel; - -/** - * @brief TIM Time Base Handle Structure definition - */ -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -typedef struct __TIM_HandleTypeDef -#else -typedef struct -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -{ - TIM_TypeDef *Instance; /*!< Register base address */ - TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */ - HAL_TIM_ActiveChannel Channel; /*!< Active channel */ - DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array - This array is accessed by a @ref DMA_Handle_index */ - HAL_LockTypeDef Lock; /*!< Locking object */ - __IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */ - __IO HAL_TIM_ChannelStateTypeDef ChannelState[4]; /*!< TIM channel operation state */ - __IO HAL_TIM_ChannelStateTypeDef ChannelNState[4]; /*!< TIM complementary channel operation state */ - __IO HAL_TIM_DMABurstStateTypeDef DMABurstState; /*!< DMA burst operation state */ - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp Init Callback */ - void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp DeInit Callback */ - void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp Init Callback */ - void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp DeInit Callback */ - void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp Init Callback */ - void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp DeInit Callback */ - void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp Init Callback */ - void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp DeInit Callback */ - void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp Init Callback */ - void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp DeInit Callback */ - void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp Init Callback */ - void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp DeInit Callback */ - void (* HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp Init Callback */ - void (* HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp DeInit Callback */ - void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed Callback */ - void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed half complete Callback */ - void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger Callback */ - void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger half complete Callback */ - void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture Callback */ - void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture half complete Callback */ - void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Output Compare Delay Elapsed Callback */ - void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished Callback */ - void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback */ - void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Error Callback */ - void (* CommutationCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation Callback */ - void (* CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation half complete Callback */ - void (* BreakCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Break Callback */ -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} TIM_HandleTypeDef; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -/** - * @brief HAL TIM Callback ID enumeration definition - */ -typedef enum -{ - HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID */ - , HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID */ - , HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID */ - , HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID */ - , HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID */ - , HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID */ - , HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID */ - , HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID */ - , HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID */ - , HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID */ - , HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID */ - , HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID */ - , HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID */ - , HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID */ - , HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID */ - , HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID */ - , HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID */ - , HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID */ - , HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID */ - , HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID */ - , HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID */ - , HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID */ - , HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID */ - , HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID */ - , HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID */ - , HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID */ - , HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID */ -} HAL_TIM_CallbackIDTypeDef; - -/** - * @brief HAL TIM Callback pointer definition - */ -typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */ - -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @} - */ -/* End of exported types -----------------------------------------------------*/ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup TIM_Exported_Constants TIM Exported Constants - * @{ - */ - -/** @defgroup TIM_ClearInput_Source TIM Clear Input Source - * @{ - */ -#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */ -#define TIM_CLEARINPUTSOURCE_ETR 0x00000001U /*!< OCREF_CLR is connected to ETRF input */ -/** - * @} - */ - -/** @defgroup TIM_DMA_Base_address TIM DMA Base Address - * @{ - */ -#define TIM_DMABASE_CR1 0x00000000U -#define TIM_DMABASE_CR2 0x00000001U -#define TIM_DMABASE_SMCR 0x00000002U -#define TIM_DMABASE_DIER 0x00000003U -#define TIM_DMABASE_SR 0x00000004U -#define TIM_DMABASE_EGR 0x00000005U -#define TIM_DMABASE_CCMR1 0x00000006U -#define TIM_DMABASE_CCMR2 0x00000007U -#define TIM_DMABASE_CCER 0x00000008U -#define TIM_DMABASE_CNT 0x00000009U -#define TIM_DMABASE_PSC 0x0000000AU -#define TIM_DMABASE_ARR 0x0000000BU -#define TIM_DMABASE_RCR 0x0000000CU -#define TIM_DMABASE_CCR1 0x0000000DU -#define TIM_DMABASE_CCR2 0x0000000EU -#define TIM_DMABASE_CCR3 0x0000000FU -#define TIM_DMABASE_CCR4 0x00000010U -#define TIM_DMABASE_BDTR 0x00000011U -#define TIM_DMABASE_DCR 0x00000012U -#define TIM_DMABASE_DMAR 0x00000013U -/** - * @} - */ - -/** @defgroup TIM_Event_Source TIM Event Source - * @{ - */ -#define TIM_EVENTSOURCE_UPDATE TIM_EGR_UG /*!< Reinitialize the counter and generates an update of the registers */ -#define TIM_EVENTSOURCE_CC1 TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */ -#define TIM_EVENTSOURCE_CC2 TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */ -#define TIM_EVENTSOURCE_CC3 TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */ -#define TIM_EVENTSOURCE_CC4 TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */ -#define TIM_EVENTSOURCE_COM TIM_EGR_COMG /*!< A commutation event is generated */ -#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG /*!< A trigger event is generated */ -#define TIM_EVENTSOURCE_BREAK TIM_EGR_BG /*!< A break event is generated */ -/** - * @} - */ - -/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity - * @{ - */ -#define TIM_INPUTCHANNELPOLARITY_RISING 0x00000000U /*!< Polarity for TIx source */ -#define TIM_INPUTCHANNELPOLARITY_FALLING TIM_CCER_CC1P /*!< Polarity for TIx source */ -#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */ -/** - * @} - */ - -/** @defgroup TIM_ETR_Polarity TIM ETR Polarity - * @{ - */ -#define TIM_ETRPOLARITY_INVERTED TIM_SMCR_ETP /*!< Polarity for ETR source */ -#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U /*!< Polarity for ETR source */ -/** - * @} - */ - -/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler - * @{ - */ -#define TIM_ETRPRESCALER_DIV1 0x00000000U /*!< No prescaler is used */ -#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */ -#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */ -#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS /*!< ETR input source is divided by 8 */ -/** - * @} - */ - -/** @defgroup TIM_Counter_Mode TIM Counter Mode - * @{ - */ -#define TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as up-counter */ -#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as down-counter */ -#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1 */ -#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2 */ -#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS /*!< Center-aligned mode 3 */ -/** - * @} - */ - -/** @defgroup TIM_ClockDivision TIM Clock Division - * @{ - */ -#define TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< Clock division: tDTS=tCK_INT */ -#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */ -#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_State TIM Output Compare State - * @{ - */ -#define TIM_OUTPUTSTATE_DISABLE 0x00000000U /*!< Capture/Compare 1 output disabled */ -#define TIM_OUTPUTSTATE_ENABLE TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */ -/** - * @} - */ - -/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload - * @{ - */ -#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U /*!< TIMx_ARR register is not buffered */ -#define TIM_AUTORELOAD_PRELOAD_ENABLE TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */ - -/** - * @} - */ - -/** @defgroup TIM_Output_Fast_State TIM Output Fast State - * @{ - */ -#define TIM_OCFAST_DISABLE 0x00000000U /*!< Output Compare fast disable */ -#define TIM_OCFAST_ENABLE TIM_CCMR1_OC1FE /*!< Output Compare fast enable */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State - * @{ - */ -#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U /*!< OCxN is disabled */ -#define TIM_OUTPUTNSTATE_ENABLE TIM_CCER_CC1NE /*!< OCxN is enabled */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity - * @{ - */ -#define TIM_OCPOLARITY_HIGH 0x00000000U /*!< Capture/Compare output polarity */ -#define TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< Capture/Compare output polarity */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity - * @{ - */ -#define TIM_OCNPOLARITY_HIGH 0x00000000U /*!< Capture/Compare complementary output polarity */ -#define TIM_OCNPOLARITY_LOW TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State - * @{ - */ -#define TIM_OCIDLESTATE_SET TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */ -#define TIM_OCIDLESTATE_RESET 0x00000000U /*!< Output Idle state: OCx=0 when MOE=0 */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State - * @{ - */ -#define TIM_OCNIDLESTATE_SET TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */ -#define TIM_OCNIDLESTATE_RESET 0x00000000U /*!< Complementary output Idle state: OCxN=0 when MOE=0 */ -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity - * @{ - */ -#define TIM_ICPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Capture triggered by rising edge on timer input */ -#define TIM_ICPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Capture triggered by falling edge on timer input */ -#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/ -/** - * @} - */ - -/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity - * @{ - */ -#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */ -#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */ -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection - * @{ - */ -#define TIM_ICSELECTION_DIRECTTI TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */ -#define TIM_ICSELECTION_INDIRECTTI TIM_CCMR1_CC1S_1 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */ -#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */ -/** - * @} - */ - -/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler - * @{ - */ -#define TIM_ICPSC_DIV1 0x00000000U /*!< Capture performed each time an edge is detected on the capture input */ -#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events */ -#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events */ -#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC /*!< Capture performed once every 8 events */ -/** - * @} - */ - -/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode - * @{ - */ -#define TIM_OPMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ -#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ -/** - * @} - */ - -/** @defgroup TIM_Encoder_Mode TIM Encoder Mode - * @{ - */ -#define TIM_ENCODERMODE_TI1 TIM_SMCR_SMS_0 /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level */ -#define TIM_ENCODERMODE_TI2 TIM_SMCR_SMS_1 /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */ -#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */ -/** - * @} - */ - -/** @defgroup TIM_Interrupt_definition TIM interrupt Definition - * @{ - */ -#define TIM_IT_UPDATE TIM_DIER_UIE /*!< Update interrupt */ -#define TIM_IT_CC1 TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */ -#define TIM_IT_CC2 TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */ -#define TIM_IT_CC3 TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */ -#define TIM_IT_CC4 TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */ -#define TIM_IT_COM TIM_DIER_COMIE /*!< Commutation interrupt */ -#define TIM_IT_TRIGGER TIM_DIER_TIE /*!< Trigger interrupt */ -#define TIM_IT_BREAK TIM_DIER_BIE /*!< Break interrupt */ -/** - * @} - */ - -/** @defgroup TIM_Commutation_Source TIM Commutation Source - * @{ - */ -#define TIM_COMMUTATION_TRGI TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */ -#define TIM_COMMUTATION_SOFTWARE 0x00000000U /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */ -/** - * @} - */ - -/** @defgroup TIM_DMA_sources TIM DMA Sources - * @{ - */ -#define TIM_DMA_UPDATE TIM_DIER_UDE /*!< DMA request is triggered by the update event */ -#define TIM_DMA_CC1 TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */ -#define TIM_DMA_CC2 TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */ -#define TIM_DMA_CC3 TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */ -#define TIM_DMA_CC4 TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */ -#define TIM_DMA_COM TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */ -#define TIM_DMA_TRIGGER TIM_DIER_TDE /*!< DMA request is triggered by the trigger event */ -/** - * @} - */ - -/** @defgroup TIM_CC_DMA_Request CCx DMA request selection - * @{ - */ -#define TIM_CCDMAREQUEST_CC 0x00000000U /*!< CCx DMA request sent when capture or compare match event occurs */ -#define TIM_CCDMAREQUEST_UPDATE TIM_CR2_CCDS /*!< CCx DMA requests sent when update event occurs */ -/** - * @} - */ - -/** @defgroup TIM_Flag_definition TIM Flag Definition - * @{ - */ -#define TIM_FLAG_UPDATE TIM_SR_UIF /*!< Update interrupt flag */ -#define TIM_FLAG_CC1 TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */ -#define TIM_FLAG_CC2 TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */ -#define TIM_FLAG_CC3 TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */ -#define TIM_FLAG_CC4 TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */ -#define TIM_FLAG_COM TIM_SR_COMIF /*!< Commutation interrupt flag */ -#define TIM_FLAG_TRIGGER TIM_SR_TIF /*!< Trigger interrupt flag */ -#define TIM_FLAG_BREAK TIM_SR_BIF /*!< Break interrupt flag */ -#define TIM_FLAG_CC1OF TIM_SR_CC1OF /*!< Capture 1 overcapture flag */ -#define TIM_FLAG_CC2OF TIM_SR_CC2OF /*!< Capture 2 overcapture flag */ -#define TIM_FLAG_CC3OF TIM_SR_CC3OF /*!< Capture 3 overcapture flag */ -#define TIM_FLAG_CC4OF TIM_SR_CC4OF /*!< Capture 4 overcapture flag */ -/** - * @} - */ - -/** @defgroup TIM_Channel TIM Channel - * @{ - */ -#define TIM_CHANNEL_1 0x00000000U /*!< Capture/compare channel 1 identifier */ -#define TIM_CHANNEL_2 0x00000004U /*!< Capture/compare channel 2 identifier */ -#define TIM_CHANNEL_3 0x00000008U /*!< Capture/compare channel 3 identifier */ -#define TIM_CHANNEL_4 0x0000000CU /*!< Capture/compare channel 4 identifier */ -#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier */ -/** - * @} - */ - -/** @defgroup TIM_Clock_Source TIM Clock Source - * @{ - */ -#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source */ -#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF /*!< External clock source mode 1 (ETRF) */ -#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2 */ -#define TIM_CLOCKSOURCE_TI1ED TIM_TS_TI1F_ED /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */ -#define TIM_CLOCKSOURCE_TI1 TIM_TS_TI1FP1 /*!< External clock source mode 1 (TTI1FP1) */ -#define TIM_CLOCKSOURCE_TI2 TIM_TS_TI2FP2 /*!< External clock source mode 1 (TTI2FP2) */ -#define TIM_CLOCKSOURCE_ITR0 TIM_TS_ITR0 /*!< External clock source mode 1 (ITR0) */ -#define TIM_CLOCKSOURCE_ITR1 TIM_TS_ITR1 /*!< External clock source mode 1 (ITR1) */ -#define TIM_CLOCKSOURCE_ITR2 TIM_TS_ITR2 /*!< External clock source mode 1 (ITR2) */ -#define TIM_CLOCKSOURCE_ITR3 TIM_TS_ITR3 /*!< External clock source mode 1 (ITR3) */ -/** - * @} - */ - -/** @defgroup TIM_Clock_Polarity TIM Clock Polarity - * @{ - */ -#define TIM_CLOCKPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx clock sources */ -#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx clock sources */ -#define TIM_CLOCKPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIx clock sources */ -#define TIM_CLOCKPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIx clock sources */ -#define TIM_CLOCKPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */ -/** - * @} - */ - -/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler - * @{ - */ -#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ -#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */ -#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */ -#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */ -/** - * @} - */ - -/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity - * @{ - */ -#define TIM_CLEARINPUTPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx pin */ -#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */ -/** - * @} - */ - -/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler - * @{ - */ -#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ -#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */ -#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */ -#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */ -/** - * @} - */ - -/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state - * @{ - */ -#define TIM_OSSR_ENABLE TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ -#define TIM_OSSR_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ -/** - * @} - */ - -/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state - * @{ - */ -#define TIM_OSSI_ENABLE TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ -#define TIM_OSSI_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ -/** - * @} - */ -/** @defgroup TIM_Lock_level TIM Lock level - * @{ - */ -#define TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF */ -#define TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ -#define TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ -#define TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ -/** - * @} - */ - -/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable - * @{ - */ -#define TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break input BRK is enabled */ -#define TIM_BREAK_DISABLE 0x00000000U /*!< Break input BRK is disabled */ -/** - * @} - */ - -/** @defgroup TIM_Break_Polarity TIM Break Input Polarity - * @{ - */ -#define TIM_BREAKPOLARITY_LOW 0x00000000U /*!< Break input BRK is active low */ -#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */ -/** - * @} - */ - -/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable - * @{ - */ -#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ -#define TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event (if none of the break inputs BRK and BRK2 is active) */ -/** - * @} - */ - -/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection - * @{ - */ -#define TIM_TRGO_RESET 0x00000000U /*!< TIMx_EGR.UG bit is used as trigger output (TRGO) */ -#define TIM_TRGO_ENABLE TIM_CR2_MMS_0 /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO) */ -#define TIM_TRGO_UPDATE TIM_CR2_MMS_1 /*!< Update event is used as trigger output (TRGO) */ -#define TIM_TRGO_OC1 (TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< Capture or a compare match 1 is used as trigger output (TRGO) */ -#define TIM_TRGO_OC1REF TIM_CR2_MMS_2 /*!< OC1REF signal is used as trigger output (TRGO) */ -#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0) /*!< OC2REF signal is used as trigger output(TRGO) */ -#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1) /*!< OC3REF signal is used as trigger output(TRGO) */ -#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO) */ -/** - * @} - */ - -/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode - * @{ - */ -#define TIM_MASTERSLAVEMODE_ENABLE TIM_SMCR_MSM /*!< No action */ -#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U /*!< Master/slave mode is selected */ -/** - * @} - */ - -/** @defgroup TIM_Slave_Mode TIM Slave mode - * @{ - */ -#define TIM_SLAVEMODE_DISABLE 0x00000000U /*!< Slave mode disabled */ -#define TIM_SLAVEMODE_RESET TIM_SMCR_SMS_2 /*!< Reset Mode */ -#define TIM_SLAVEMODE_GATED (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0) /*!< Gated Mode */ -#define TIM_SLAVEMODE_TRIGGER (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1) /*!< Trigger Mode */ -#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1 */ -/** - * @} - */ - -/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes - * @{ - */ -#define TIM_OCMODE_TIMING 0x00000000U /*!< Frozen */ -#define TIM_OCMODE_ACTIVE TIM_CCMR1_OC1M_0 /*!< Set channel to active level on match */ -#define TIM_OCMODE_INACTIVE TIM_CCMR1_OC1M_1 /*!< Set channel to inactive level on match */ -#define TIM_OCMODE_TOGGLE (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< Toggle */ -#define TIM_OCMODE_PWM1 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1) /*!< PWM mode 1 */ -#define TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2 */ -#define TIM_OCMODE_FORCED_ACTIVE (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0) /*!< Force active level */ -#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2 /*!< Force inactive level */ -/** - * @} - */ - -/** @defgroup TIM_Trigger_Selection TIM Trigger Selection - * @{ - */ -#define TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) */ -#define TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) */ -#define TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) */ -#define TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) */ -#define TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) */ -#define TIM_TS_TI1FP1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 1 (TI1FP1) */ -#define TIM_TS_TI2FP2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 2 (TI2FP2) */ -#define TIM_TS_ETRF (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */ -#define TIM_TS_NONE 0x0000FFFFU /*!< No trigger selected */ -/** - * @} - */ - -/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity - * @{ - */ -#define TIM_TRIGGERPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx trigger sources */ -#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx trigger sources */ -#define TIM_TRIGGERPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ -#define TIM_TRIGGERPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ -#define TIM_TRIGGERPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */ -/** - * @} - */ - -/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler - * @{ - */ -#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ -#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */ -#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */ -#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */ -/** - * @} - */ - -/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection - * @{ - */ -#define TIM_TI1SELECTION_CH1 0x00000000U /*!< The TIMx_CH1 pin is connected to TI1 input */ -#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */ -/** - * @} - */ - -/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length - * @{ - */ -#define TIM_DMABURSTLENGTH_1TRANSFER 0x00000000U /*!< The transfer is done to 1 register starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_2TRANSFERS 0x00000100U /*!< The transfer is done to 2 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_3TRANSFERS 0x00000200U /*!< The transfer is done to 3 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_4TRANSFERS 0x00000300U /*!< The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_5TRANSFERS 0x00000400U /*!< The transfer is done to 5 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_6TRANSFERS 0x00000500U /*!< The transfer is done to 6 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_7TRANSFERS 0x00000600U /*!< The transfer is done to 7 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_8TRANSFERS 0x00000700U /*!< The transfer is done to 8 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_9TRANSFERS 0x00000800U /*!< The transfer is done to 9 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ -/** - * @} - */ - -/** @defgroup DMA_Handle_index TIM DMA Handle Index - * @{ - */ -#define TIM_DMA_ID_UPDATE ((uint16_t) 0x0000) /*!< Index of the DMA handle used for Update DMA requests */ -#define TIM_DMA_ID_CC1 ((uint16_t) 0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */ -#define TIM_DMA_ID_CC2 ((uint16_t) 0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */ -#define TIM_DMA_ID_CC3 ((uint16_t) 0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */ -#define TIM_DMA_ID_CC4 ((uint16_t) 0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */ -#define TIM_DMA_ID_COMMUTATION ((uint16_t) 0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */ -#define TIM_DMA_ID_TRIGGER ((uint16_t) 0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */ -/** - * @} - */ - -/** @defgroup Channel_CC_State TIM Capture/Compare Channel State - * @{ - */ -#define TIM_CCx_ENABLE 0x00000001U /*!< Input or output channel is enabled */ -#define TIM_CCx_DISABLE 0x00000000U /*!< Input or output channel is disabled */ -#define TIM_CCxN_ENABLE 0x00000004U /*!< Complementary output channel is enabled */ -#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */ -/** - * @} - */ - -/** - * @} - */ -/* End of exported constants -------------------------------------------------*/ - -/* Exported macros -----------------------------------------------------------*/ -/** @defgroup TIM_Exported_Macros TIM Exported Macros - * @{ - */ - -/** @brief Reset TIM handle state. - * @param __HANDLE__ TIM handle. - * @retval None - */ -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ - (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ - (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ - (__HANDLE__)->Base_MspInitCallback = NULL; \ - (__HANDLE__)->Base_MspDeInitCallback = NULL; \ - (__HANDLE__)->IC_MspInitCallback = NULL; \ - (__HANDLE__)->IC_MspDeInitCallback = NULL; \ - (__HANDLE__)->OC_MspInitCallback = NULL; \ - (__HANDLE__)->OC_MspDeInitCallback = NULL; \ - (__HANDLE__)->PWM_MspInitCallback = NULL; \ - (__HANDLE__)->PWM_MspDeInitCallback = NULL; \ - (__HANDLE__)->OnePulse_MspInitCallback = NULL; \ - (__HANDLE__)->OnePulse_MspDeInitCallback = NULL; \ - (__HANDLE__)->Encoder_MspInitCallback = NULL; \ - (__HANDLE__)->Encoder_MspDeInitCallback = NULL; \ - (__HANDLE__)->HallSensor_MspInitCallback = NULL; \ - (__HANDLE__)->HallSensor_MspDeInitCallback = NULL; \ - } while(0) -#else -#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ - (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ - (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ - (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ - } while(0) -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @brief Enable the TIM peripheral. - * @param __HANDLE__ TIM handle - * @retval None - */ -#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) - -/** - * @brief Enable the TIM main Output. - * @param __HANDLE__ TIM handle - * @retval None - */ -#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) - -/** - * @brief Disable the TIM peripheral. - * @param __HANDLE__ TIM handle - * @retval None - */ -#define __HAL_TIM_DISABLE(__HANDLE__) \ - do { \ - if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ - { \ - if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ - { \ - (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \ - } \ - } \ - } while(0) - -/** - * @brief Disable the TIM main Output. - * @param __HANDLE__ TIM handle - * @retval None - * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been - * disabled - */ -#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \ - do { \ - if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ - { \ - if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ - { \ - (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \ - } \ - } \ - } while(0) - -/** - * @brief Disable the TIM main Output. - * @param __HANDLE__ TIM handle - * @retval None - * @note The Main Output Enable of a timer instance is disabled unconditionally - */ -#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE) - -/** @brief Enable the specified TIM interrupt. - * @param __HANDLE__ specifies the TIM Handle. - * @param __INTERRUPT__ specifies the TIM interrupt source to enable. - * This parameter can be one of the following values: - * @arg TIM_IT_UPDATE: Update interrupt - * @arg TIM_IT_CC1: Capture/Compare 1 interrupt - * @arg TIM_IT_CC2: Capture/Compare 2 interrupt - * @arg TIM_IT_CC3: Capture/Compare 3 interrupt - * @arg TIM_IT_CC4: Capture/Compare 4 interrupt - * @arg TIM_IT_COM: Commutation interrupt - * @arg TIM_IT_TRIGGER: Trigger interrupt - * @arg TIM_IT_BREAK: Break interrupt - * @retval None - */ -#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) - -/** @brief Disable the specified TIM interrupt. - * @param __HANDLE__ specifies the TIM Handle. - * @param __INTERRUPT__ specifies the TIM interrupt source to disable. - * This parameter can be one of the following values: - * @arg TIM_IT_UPDATE: Update interrupt - * @arg TIM_IT_CC1: Capture/Compare 1 interrupt - * @arg TIM_IT_CC2: Capture/Compare 2 interrupt - * @arg TIM_IT_CC3: Capture/Compare 3 interrupt - * @arg TIM_IT_CC4: Capture/Compare 4 interrupt - * @arg TIM_IT_COM: Commutation interrupt - * @arg TIM_IT_TRIGGER: Trigger interrupt - * @arg TIM_IT_BREAK: Break interrupt - * @retval None - */ -#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) - -/** @brief Enable the specified DMA request. - * @param __HANDLE__ specifies the TIM Handle. - * @param __DMA__ specifies the TIM DMA request to enable. - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: Update DMA request - * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request - * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request - * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request - * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request - * @arg TIM_DMA_COM: Commutation DMA request - * @arg TIM_DMA_TRIGGER: Trigger DMA request - * @retval None - */ -#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) - -/** @brief Disable the specified DMA request. - * @param __HANDLE__ specifies the TIM Handle. - * @param __DMA__ specifies the TIM DMA request to disable. - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: Update DMA request - * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request - * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request - * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request - * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request - * @arg TIM_DMA_COM: Commutation DMA request - * @arg TIM_DMA_TRIGGER: Trigger DMA request - * @retval None - */ -#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) - -/** @brief Check whether the specified TIM interrupt flag is set or not. - * @param __HANDLE__ specifies the TIM Handle. - * @param __FLAG__ specifies the TIM interrupt flag to check. - * This parameter can be one of the following values: - * @arg TIM_FLAG_UPDATE: Update interrupt flag - * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag - * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag - * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag - * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag - * @arg TIM_FLAG_COM: Commutation interrupt flag - * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag - * @arg TIM_FLAG_BREAK: Break interrupt flag - * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag - * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag - * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag - * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag - * @retval The new state of __FLAG__ (TRUE or FALSE). - */ -#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) - -/** @brief Clear the specified TIM interrupt flag. - * @param __HANDLE__ specifies the TIM Handle. - * @param __FLAG__ specifies the TIM interrupt flag to clear. - * This parameter can be one of the following values: - * @arg TIM_FLAG_UPDATE: Update interrupt flag - * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag - * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag - * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag - * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag - * @arg TIM_FLAG_COM: Commutation interrupt flag - * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag - * @arg TIM_FLAG_BREAK: Break interrupt flag - * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag - * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag - * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag - * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag - * @retval The new state of __FLAG__ (TRUE or FALSE). - */ -#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) - -/** - * @brief Check whether the specified TIM interrupt source is enabled or not. - * @param __HANDLE__ TIM handle - * @param __INTERRUPT__ specifies the TIM interrupt source to check. - * This parameter can be one of the following values: - * @arg TIM_IT_UPDATE: Update interrupt - * @arg TIM_IT_CC1: Capture/Compare 1 interrupt - * @arg TIM_IT_CC2: Capture/Compare 2 interrupt - * @arg TIM_IT_CC3: Capture/Compare 3 interrupt - * @arg TIM_IT_CC4: Capture/Compare 4 interrupt - * @arg TIM_IT_COM: Commutation interrupt - * @arg TIM_IT_TRIGGER: Trigger interrupt - * @arg TIM_IT_BREAK: Break interrupt - * @retval The state of TIM_IT (SET or RESET). - */ -#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \ - == (__INTERRUPT__)) ? SET : RESET) - -/** @brief Clear the TIM interrupt pending bits. - * @param __HANDLE__ TIM handle - * @param __INTERRUPT__ specifies the interrupt pending bit to clear. - * This parameter can be one of the following values: - * @arg TIM_IT_UPDATE: Update interrupt - * @arg TIM_IT_CC1: Capture/Compare 1 interrupt - * @arg TIM_IT_CC2: Capture/Compare 2 interrupt - * @arg TIM_IT_CC3: Capture/Compare 3 interrupt - * @arg TIM_IT_CC4: Capture/Compare 4 interrupt - * @arg TIM_IT_COM: Commutation interrupt - * @arg TIM_IT_TRIGGER: Trigger interrupt - * @arg TIM_IT_BREAK: Break interrupt - * @retval None - */ -#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__)) - -/** - * @brief Indicates whether or not the TIM Counter is used as downcounter. - * @param __HANDLE__ TIM handle. - * @retval False (Counter used as upcounter) or True (Counter used as downcounter) - * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode - * or Encoder mode. - */ -#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)) - -/** - * @brief Set the TIM Prescaler on runtime. - * @param __HANDLE__ TIM handle. - * @param __PRESC__ specifies the Prescaler new value. - * @retval None - */ -#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) - -/** - * @brief Set the TIM Counter Register value on runtime. - * @param __HANDLE__ TIM handle. - * @param __COUNTER__ specifies the Counter register new value. - * @retval None - */ -#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) - -/** - * @brief Get the TIM Counter Register value on runtime. - * @param __HANDLE__ TIM handle. - * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT) - */ -#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT) - -/** - * @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function. - * @param __HANDLE__ TIM handle. - * @param __AUTORELOAD__ specifies the Counter register new value. - * @retval None - */ -#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ - do{ \ - (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \ - (__HANDLE__)->Init.Period = (__AUTORELOAD__); \ - } while(0) - -/** - * @brief Get the TIM Autoreload Register value on runtime. - * @param __HANDLE__ TIM handle. - * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR) - */ -#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR) - -/** - * @brief Set the TIM Clock Division value on runtime without calling another time any Init function. - * @param __HANDLE__ TIM handle. - * @param __CKD__ specifies the clock division value. - * This parameter can be one of the following value: - * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT - * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT - * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT - * @retval None - */ -#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ - do{ \ - (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \ - (__HANDLE__)->Instance->CR1 |= (__CKD__); \ - (__HANDLE__)->Init.ClockDivision = (__CKD__); \ - } while(0) - -/** - * @brief Get the TIM Clock Division value on runtime. - * @param __HANDLE__ TIM handle. - * @retval The clock division can be one of the following values: - * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT - * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT - * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT - */ -#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) - -/** - * @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() - * function. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param __ICPSC__ specifies the Input Capture4 prescaler new value. - * This parameter can be one of the following values: - * @arg TIM_ICPSC_DIV1: no prescaler - * @arg TIM_ICPSC_DIV2: capture is done once every 2 events - * @arg TIM_ICPSC_DIV4: capture is done once every 4 events - * @arg TIM_ICPSC_DIV8: capture is done once every 8 events - * @retval None - */ -#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \ - do{ \ - TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \ - TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \ - } while(0) - -/** - * @brief Get the TIM Input Capture prescaler on runtime. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: get input capture 1 prescaler value - * @arg TIM_CHANNEL_2: get input capture 2 prescaler value - * @arg TIM_CHANNEL_3: get input capture 3 prescaler value - * @arg TIM_CHANNEL_4: get input capture 4 prescaler value - * @retval The input capture prescaler can be one of the following values: - * @arg TIM_ICPSC_DIV1: no prescaler - * @arg TIM_ICPSC_DIV2: capture is done once every 2 events - * @arg TIM_ICPSC_DIV4: capture is done once every 4 events - * @arg TIM_ICPSC_DIV8: capture is done once every 8 events - */ -#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\ - (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U) - -/** - * @brief Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param __COMPARE__ specifies the Capture Compare register new value. - * @retval None - */ -#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\ - ((__HANDLE__)->Instance->CCR4 = (__COMPARE__))) - -/** - * @brief Get the TIM Capture Compare Register value on runtime. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channel associated with the capture compare register - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: get capture/compare 1 register value - * @arg TIM_CHANNEL_2: get capture/compare 2 register value - * @arg TIM_CHANNEL_3: get capture/compare 3 register value - * @arg TIM_CHANNEL_4: get capture/compare 4 register value - * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy) - */ -#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\ - ((__HANDLE__)->Instance->CCR4)) - -/** - * @brief Set the TIM Output compare preload. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval None - */ -#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ - ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE)) - -/** - * @brief Reset the TIM Output compare preload. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval None - */ -#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\ - ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE)) - -/** - * @brief Enable fast mode for a given channel. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @note When fast mode is enabled an active edge on the trigger input acts - * like a compare match on CCx output. Delay to sample the trigger - * input and to activate CCx output is reduced to 3 clock cycles. - * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode. - * @retval None - */ -#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\ - ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE)) - -/** - * @brief Disable fast mode for a given channel. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @note When fast mode is disabled CCx output behaves normally depending - * on counter and CCRx values even when the trigger is ON. The minimum - * delay to activate CCx output when an active edge occurs on the - * trigger input is 5 clock cycles. - * @retval None - */ -#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\ - ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE)) - -/** - * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register. - * @param __HANDLE__ TIM handle. - * @note When the URS bit of the TIMx_CR1 register is set, only counter - * overflow/underflow generates an update interrupt or DMA request (if - * enabled) - * @retval None - */ -#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS) - -/** - * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register. - * @param __HANDLE__ TIM handle. - * @note When the URS bit of the TIMx_CR1 register is reset, any of the - * following events generate an update interrupt or DMA request (if - * enabled): - * _ Counter overflow underflow - * _ Setting the UG bit - * _ Update generation through the slave mode controller - * @retval None - */ -#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS) - -/** - * @brief Set the TIM Capture x input polarity on runtime. - * @param __HANDLE__ TIM handle. - * @param __CHANNEL__ TIM Channels to be configured. - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param __POLARITY__ Polarity for TIx source - * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge - * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge - * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge - * @retval None - */ -#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ - do{ \ - TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ - TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ - }while(0) - -/** @brief Select the Capture/compare DMA request source. - * @param __HANDLE__ specifies the TIM Handle. - * @param __CCDMA__ specifies Capture/compare DMA request source - * This parameter can be one of the following values: - * @arg TIM_CCDMAREQUEST_CC: CCx DMA request generated on Capture/Compare event - * @arg TIM_CCDMAREQUEST_UPDATE: CCx DMA request generated on Update event - * @retval None - */ -#define __HAL_TIM_SELECT_CCDMAREQUEST(__HANDLE__, __CCDMA__) \ - MODIFY_REG((__HANDLE__)->Instance->CR2, TIM_CR2_CCDS, (__CCDMA__)) - -/** - * @} - */ -/* End of exported macros ----------------------------------------------------*/ - -/* Private constants ---------------------------------------------------------*/ -/** @defgroup TIM_Private_Constants TIM Private Constants - * @{ - */ -/* The counter of a timer instance is disabled only if all the CCx and CCxN - channels have been disabled */ -#define TIM_CCER_CCxE_MASK ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E)) -#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) -/** - * @} - */ -/* End of private constants --------------------------------------------------*/ - -/* Private macros ------------------------------------------------------------*/ -/** @defgroup TIM_Private_Macros TIM Private Macros - * @{ - */ -#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || \ - ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)) - -#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \ - ((__BASE__) == TIM_DMABASE_CR2) || \ - ((__BASE__) == TIM_DMABASE_SMCR) || \ - ((__BASE__) == TIM_DMABASE_DIER) || \ - ((__BASE__) == TIM_DMABASE_SR) || \ - ((__BASE__) == TIM_DMABASE_EGR) || \ - ((__BASE__) == TIM_DMABASE_CCMR1) || \ - ((__BASE__) == TIM_DMABASE_CCMR2) || \ - ((__BASE__) == TIM_DMABASE_CCER) || \ - ((__BASE__) == TIM_DMABASE_CNT) || \ - ((__BASE__) == TIM_DMABASE_PSC) || \ - ((__BASE__) == TIM_DMABASE_ARR) || \ - ((__BASE__) == TIM_DMABASE_RCR) || \ - ((__BASE__) == TIM_DMABASE_CCR1) || \ - ((__BASE__) == TIM_DMABASE_CCR2) || \ - ((__BASE__) == TIM_DMABASE_CCR3) || \ - ((__BASE__) == TIM_DMABASE_CCR4) || \ - ((__BASE__) == TIM_DMABASE_BDTR)) - -#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) - -#define IS_TIM_COUNTER_MODE(__MODE__) (((__MODE__) == TIM_COUNTERMODE_UP) || \ - ((__MODE__) == TIM_COUNTERMODE_DOWN) || \ - ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || \ - ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \ - ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3)) - -#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \ - ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \ - ((__DIV__) == TIM_CLOCKDIVISION_DIV4)) - -#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \ - ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE)) - -#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || \ - ((__STATE__) == TIM_OCFAST_ENABLE)) - -#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \ - ((__POLARITY__) == TIM_OCPOLARITY_LOW)) - -#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || \ - ((__POLARITY__) == TIM_OCNPOLARITY_LOW)) - -#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || \ - ((__STATE__) == TIM_OCIDLESTATE_RESET)) - -#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \ - ((__STATE__) == TIM_OCNIDLESTATE_RESET)) - -#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \ - ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING)) - -#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \ - ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \ - ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE)) - -#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \ - ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \ - ((__SELECTION__) == TIM_ICSELECTION_TRC)) - -#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \ - ((__PRESCALER__) == TIM_ICPSC_DIV2) || \ - ((__PRESCALER__) == TIM_ICPSC_DIV4) || \ - ((__PRESCALER__) == TIM_ICPSC_DIV8)) - -#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || \ - ((__MODE__) == TIM_OPMODE_REPETITIVE)) - -#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || \ - ((__MODE__) == TIM_ENCODERMODE_TI2) || \ - ((__MODE__) == TIM_ENCODERMODE_TI12)) - -#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) - -#define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ - ((__CHANNEL__) == TIM_CHANNEL_2) || \ - ((__CHANNEL__) == TIM_CHANNEL_3) || \ - ((__CHANNEL__) == TIM_CHANNEL_4) || \ - ((__CHANNEL__) == TIM_CHANNEL_ALL)) - -#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ - ((__CHANNEL__) == TIM_CHANNEL_2)) - -#define IS_TIM_PERIOD(__PERIOD__) (((__PERIOD__) > 0U) && ((__PERIOD__) <= 0xFFFFU)) - -#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ - ((__CHANNEL__) == TIM_CHANNEL_2) || \ - ((__CHANNEL__) == TIM_CHANNEL_3)) - -#define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_TI1) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || \ - ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3)) - -#define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || \ - ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \ - ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) || \ - ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || \ - ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE)) - -#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \ - ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \ - ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \ - ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8)) - -#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) - -#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \ - ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED)) - -#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \ - ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \ - ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \ - ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8)) - -#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) - -#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || \ - ((__STATE__) == TIM_OSSR_DISABLE)) - -#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || \ - ((__STATE__) == TIM_OSSI_DISABLE)) - -#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || \ - ((__LEVEL__) == TIM_LOCKLEVEL_1) || \ - ((__LEVEL__) == TIM_LOCKLEVEL_2) || \ - ((__LEVEL__) == TIM_LOCKLEVEL_3)) - -#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL) - -#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || \ - ((__STATE__) == TIM_BREAK_DISABLE)) - -#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || \ - ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH)) - -#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || \ - ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE)) - -#define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET) || \ - ((__SOURCE__) == TIM_TRGO_ENABLE) || \ - ((__SOURCE__) == TIM_TRGO_UPDATE) || \ - ((__SOURCE__) == TIM_TRGO_OC1) || \ - ((__SOURCE__) == TIM_TRGO_OC1REF) || \ - ((__SOURCE__) == TIM_TRGO_OC2REF) || \ - ((__SOURCE__) == TIM_TRGO_OC3REF) || \ - ((__SOURCE__) == TIM_TRGO_OC4REF)) - -#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \ - ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE)) - -#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE) || \ - ((__MODE__) == TIM_SLAVEMODE_RESET) || \ - ((__MODE__) == TIM_SLAVEMODE_GATED) || \ - ((__MODE__) == TIM_SLAVEMODE_TRIGGER) || \ - ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1)) - -#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || \ - ((__MODE__) == TIM_OCMODE_PWM2)) - -#define IS_TIM_OC_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_TIMING) || \ - ((__MODE__) == TIM_OCMODE_ACTIVE) || \ - ((__MODE__) == TIM_OCMODE_INACTIVE) || \ - ((__MODE__) == TIM_OCMODE_TOGGLE) || \ - ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) || \ - ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE)) - -#define IS_TIM_TRIGGER_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ - ((__SELECTION__) == TIM_TS_ITR1) || \ - ((__SELECTION__) == TIM_TS_ITR2) || \ - ((__SELECTION__) == TIM_TS_ITR3) || \ - ((__SELECTION__) == TIM_TS_TI1F_ED) || \ - ((__SELECTION__) == TIM_TS_TI1FP1) || \ - ((__SELECTION__) == TIM_TS_TI2FP2) || \ - ((__SELECTION__) == TIM_TS_ETRF)) - -#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ - ((__SELECTION__) == TIM_TS_ITR1) || \ - ((__SELECTION__) == TIM_TS_ITR2) || \ - ((__SELECTION__) == TIM_TS_ITR3) || \ - ((__SELECTION__) == TIM_TS_NONE)) - -#define IS_TIM_TRIGGERPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED ) || \ - ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \ - ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING ) || \ - ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING ) || \ - ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE )) - -#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \ - ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \ - ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \ - ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8)) - -#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) - -#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \ - ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION)) - -#define IS_TIM_DMA_LENGTH(__LENGTH__) (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || \ - ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS)) - -#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U)) - -#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) - -#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU) - -#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER) - -#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\ - ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U))) - -#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\ - ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC)) - -#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\ - ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U)))) - -#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P)) :\ - ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P))) - -#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\ - (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\ - (__HANDLE__)->ChannelState[3]) - -#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\ - ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__))) - -#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ - (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__); \ - } while(0) - -#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)\ - (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelNState[0] :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] :\ - (__HANDLE__)->ChannelNState[3]) - -#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ - (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) :\ - ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) :\ - ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__))) - -#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ - (__HANDLE__)->ChannelNState[0] = \ - (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelNState[1] = \ - (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelNState[2] = \ - (__CHANNEL_STATE__); \ - (__HANDLE__)->ChannelNState[3] = \ - (__CHANNEL_STATE__); \ - } while(0) - -/** - * @} - */ -/* End of private macros -----------------------------------------------------*/ - -/* Include TIM HAL Extended module */ -#include "stm32f1xx_hal_tim_ex.h" - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup TIM_Exported_Functions TIM Exported Functions - * @{ - */ - -/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions - * @brief Time Base functions - * @{ - */ -/* Time Base functions ********************************************************/ -HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length); -HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions - * @brief TIM Output Compare functions - * @{ - */ -/* Timer Output Compare functions *********************************************/ -HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length); -HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions - * @brief TIM PWM functions - * @{ - */ -/* Timer PWM functions ********************************************************/ -HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length); -HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions - * @brief TIM Input Capture functions - * @{ - */ -/* Timer Input Capture functions **********************************************/ -HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); -HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions - * @brief TIM One Pulse functions - * @{ - */ -/* Timer One Pulse functions **************************************************/ -HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode); -HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions - * @brief TIM Encoder functions - * @{ - */ -/* Timer Encoder functions ****************************************************/ -HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig); -HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim); -void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim); -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, - uint32_t *pData2, uint16_t Length); -HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management - * @brief IRQ handler management - * @{ - */ -/* Interrupt Handler functions ***********************************************/ -void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim); -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions - * @brief Peripheral Control functions - * @{ - */ -/* Control functions *********************************************************/ -HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, - uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, - uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, - uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, - uint32_t OutputChannel, uint32_t InputChannel); -HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, - const TIM_ClearInputConfigTypeDef *sClearInputConfig, - uint32_t Channel); -HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig); -HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); -HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); -HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); -HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, - uint32_t BurstLength); -HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, - uint32_t BurstLength, uint32_t DataLength); -HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); -HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); -HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, uint32_t *BurstBuffer, - uint32_t BurstLength, uint32_t DataLength); -HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); -HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource); -uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions - * @brief TIM Callbacks functions - * @{ - */ -/* Callback in non blocking modes (Interrupt and DMA) *************************/ -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim); -void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim); - -/* Callbacks Register/UnRegister functions ***********************************/ -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, - pTIM_CallbackTypeDef pCallback); -HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions - * @brief Peripheral State functions - * @{ - */ -/* Peripheral State functions ************************************************/ -HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim); - -/* Peripheral Channel state functions ************************************************/ -HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim); -HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim); -/** - * @} - */ - -/** - * @} - */ -/* End of exported functions -------------------------------------------------*/ - -/* Private functions----------------------------------------------------------*/ -/** @defgroup TIM_Private_Functions TIM Private Functions - * @{ - */ -void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure); -void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter); -void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); -void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, - uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter); - -void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma); -void TIM_DMAError(DMA_HandleTypeDef *hdma); -void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); -void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma); -void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -void TIM_ResetCallback(TIM_HandleTypeDef *htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @} - */ -/* End of private functions --------------------------------------------------*/ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32F1xx_HAL_TIM_H */ diff --git a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h b/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h deleted file mode 100644 index 3edc9d3..0000000 --- a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h +++ /dev/null @@ -1,261 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_tim_ex.h - * @author MCD Application Team - * @brief Header file of TIM HAL Extended module. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32F1xx_HAL_TIM_EX_H -#define STM32F1xx_HAL_TIM_EX_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal_def.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @addtogroup TIMEx - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types - * @{ - */ - -/** - * @brief TIM Hall sensor Configuration Structure definition - */ - -typedef struct -{ - uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - - uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - - uint32_t IC1Filter; /*!< Specifies the input capture filter. - This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ - - uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ -} TIM_HallSensor_InitTypeDef; -/** - * @} - */ -/* End of exported types -----------------------------------------------------*/ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants - * @{ - */ - -/** @defgroup TIMEx_Remap TIM Extended Remapping - * @{ - */ -/** - * @} - */ - -/** - * @} - */ -/* End of exported constants -------------------------------------------------*/ - -/* Exported macro ------------------------------------------------------------*/ -/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros - * @{ - */ - -/** - * @} - */ -/* End of exported macro -----------------------------------------------------*/ - -/* Private macro -------------------------------------------------------------*/ -/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros - * @{ - */ - -/** - * @} - */ -/* End of private macro ------------------------------------------------------*/ - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions - * @{ - */ - -/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions - * @brief Timer Hall Sensor functions - * @{ - */ -/* Timer Hall Sensor functions **********************************************/ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig); -HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim); - -void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim); -void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim); - -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim); -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim); -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions - * @brief Timer Complementary Output Compare functions - * @{ - */ -/* Timer Complementary Output Compare functions *****************************/ -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); - -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); - -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length); -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions - * @brief Timer Complementary PWM functions - * @{ - */ -/* Timer Complementary PWM functions ****************************************/ -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); - -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); -/* Non-Blocking mode: DMA */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length); -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions - * @brief Timer Complementary One Pulse functions - * @{ - */ -/* Timer Complementary One Pulse functions **********************************/ -/* Blocking mode: Polling */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); - -/* Non-Blocking mode: Interrupt */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions - * @brief Peripheral Control functions - * @{ - */ -/* Extended Control functions ************************************************/ -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource); -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource); -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource); -HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, - const TIM_MasterConfigTypeDef *sMasterConfig); -HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, - const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); -HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions - * @brief Extended Callbacks functions - * @{ - */ -/* Extended Callback **********************************************************/ -void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim); -void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim); -void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); -/** - * @} - */ - -/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions - * @brief Extended Peripheral State functions - * @{ - */ -/* Extended Peripheral State functions ***************************************/ -HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(const TIM_HandleTypeDef *htim); -HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const TIM_HandleTypeDef *htim, uint32_t ChannelN); -/** - * @} - */ - -/** - * @} - */ -/* End of exported functions -------------------------------------------------*/ - -/* Private functions----------------------------------------------------------*/ -/** @addtogroup TIMEx_Private_Functions TIM Extended Private Functions - * @{ - */ -void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); -void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma); -/** - * @} - */ -/* End of private functions --------------------------------------------------*/ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - - -#endif /* STM32F1xx_HAL_TIM_EX_H */ diff --git a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_tim.h b/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_tim.h deleted file mode 100644 index d54a00e..0000000 --- a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_tim.h +++ /dev/null @@ -1,3901 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_ll_tim.h - * @author MCD Application Team - * @brief Header file of TIM LL module. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_LL_TIM_H -#define __STM32F1xx_LL_TIM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx.h" - -/** @addtogroup STM32F1xx_LL_Driver - * @{ - */ - -#if defined (TIM1) || defined (TIM2) || defined (TIM3) || defined (TIM4) || defined (TIM5) || defined (TIM6) || defined (TIM7) || defined (TIM8) || defined (TIM9) || defined (TIM10) || defined (TIM11) || defined (TIM12) || defined (TIM13) || defined (TIM14) || defined (TIM15) || defined (TIM16) || defined (TIM17) - -/** @defgroup TIM_LL TIM - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/** @defgroup TIM_LL_Private_Variables TIM Private Variables - * @{ - */ -static const uint8_t OFFSET_TAB_CCMRx[] = -{ - 0x00U, /* 0: TIMx_CH1 */ - 0x00U, /* 1: TIMx_CH1N */ - 0x00U, /* 2: TIMx_CH2 */ - 0x00U, /* 3: TIMx_CH2N */ - 0x04U, /* 4: TIMx_CH3 */ - 0x04U, /* 5: TIMx_CH3N */ - 0x04U /* 6: TIMx_CH4 */ -}; - -static const uint8_t SHIFT_TAB_OCxx[] = -{ - 0U, /* 0: OC1M, OC1FE, OC1PE */ - 0U, /* 1: - NA */ - 8U, /* 2: OC2M, OC2FE, OC2PE */ - 0U, /* 3: - NA */ - 0U, /* 4: OC3M, OC3FE, OC3PE */ - 0U, /* 5: - NA */ - 8U /* 6: OC4M, OC4FE, OC4PE */ -}; - -static const uint8_t SHIFT_TAB_ICxx[] = -{ - 0U, /* 0: CC1S, IC1PSC, IC1F */ - 0U, /* 1: - NA */ - 8U, /* 2: CC2S, IC2PSC, IC2F */ - 0U, /* 3: - NA */ - 0U, /* 4: CC3S, IC3PSC, IC3F */ - 0U, /* 5: - NA */ - 8U /* 6: CC4S, IC4PSC, IC4F */ -}; - -static const uint8_t SHIFT_TAB_CCxP[] = -{ - 0U, /* 0: CC1P */ - 2U, /* 1: CC1NP */ - 4U, /* 2: CC2P */ - 6U, /* 3: CC2NP */ - 8U, /* 4: CC3P */ - 10U, /* 5: CC3NP */ - 12U /* 6: CC4P */ -}; - -static const uint8_t SHIFT_TAB_OISx[] = -{ - 0U, /* 0: OIS1 */ - 1U, /* 1: OIS1N */ - 2U, /* 2: OIS2 */ - 3U, /* 3: OIS2N */ - 4U, /* 4: OIS3 */ - 5U, /* 5: OIS3N */ - 6U /* 6: OIS4 */ -}; -/** - * @} - */ - -/* Private constants ---------------------------------------------------------*/ -/** @defgroup TIM_LL_Private_Constants TIM Private Constants - * @{ - */ - - - -/* Mask used to set the TDG[x:0] of the DTG bits of the TIMx_BDTR register */ -#define DT_DELAY_1 ((uint8_t)0x7F) -#define DT_DELAY_2 ((uint8_t)0x3F) -#define DT_DELAY_3 ((uint8_t)0x1F) -#define DT_DELAY_4 ((uint8_t)0x1F) - -/* Mask used to set the DTG[7:5] bits of the DTG bits of the TIMx_BDTR register */ -#define DT_RANGE_1 ((uint8_t)0x00) -#define DT_RANGE_2 ((uint8_t)0x80) -#define DT_RANGE_3 ((uint8_t)0xC0) -#define DT_RANGE_4 ((uint8_t)0xE0) - - -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/** @defgroup TIM_LL_Private_Macros TIM Private Macros - * @{ - */ -/** @brief Convert channel id into channel index. - * @param __CHANNEL__ This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval none - */ -#define TIM_GET_CHANNEL_INDEX( __CHANNEL__) \ - (((__CHANNEL__) == LL_TIM_CHANNEL_CH1) ? 0U :\ - ((__CHANNEL__) == LL_TIM_CHANNEL_CH1N) ? 1U :\ - ((__CHANNEL__) == LL_TIM_CHANNEL_CH2) ? 2U :\ - ((__CHANNEL__) == LL_TIM_CHANNEL_CH2N) ? 3U :\ - ((__CHANNEL__) == LL_TIM_CHANNEL_CH3) ? 4U :\ - ((__CHANNEL__) == LL_TIM_CHANNEL_CH3N) ? 5U : 6U) - -/** @brief Calculate the deadtime sampling period(in ps). - * @param __TIMCLK__ timer input clock frequency (in Hz). - * @param __CKD__ This parameter can be one of the following values: - * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 - * @retval none - */ -#define TIM_CALC_DTS(__TIMCLK__, __CKD__) \ - (((__CKD__) == LL_TIM_CLOCKDIVISION_DIV1) ? ((uint64_t)1000000000000U/(__TIMCLK__)) : \ - ((__CKD__) == LL_TIM_CLOCKDIVISION_DIV2) ? ((uint64_t)1000000000000U/((__TIMCLK__) >> 1U)) : \ - ((uint64_t)1000000000000U/((__TIMCLK__) >> 2U))) -/** - * @} - */ - - -/* Exported types ------------------------------------------------------------*/ -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup TIM_LL_ES_INIT TIM Exported Init structure - * @{ - */ - -/** - * @brief TIM Time Base configuration structure definition. - */ -typedef struct -{ - uint16_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. - This parameter can be a number between Min_Data=0x0000 and Max_Data=0xFFFF. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetPrescaler().*/ - - uint32_t CounterMode; /*!< Specifies the counter mode. - This parameter can be a value of @ref TIM_LL_EC_COUNTERMODE. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetCounterMode().*/ - - uint32_t Autoreload; /*!< Specifies the auto reload value to be loaded into the active - Auto-Reload Register at the next update event. - This parameter must be a number between Min_Data=0x0000 and Max_Data=0xFFFF. - Some timer instances may support 32 bits counters. In that case this parameter must - be a number between 0x0000 and 0xFFFFFFFF. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetAutoReload().*/ - - uint32_t ClockDivision; /*!< Specifies the clock division. - This parameter can be a value of @ref TIM_LL_EC_CLOCKDIVISION. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetClockDivision().*/ - - uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter - reaches zero, an update event is generated and counting restarts - from the RCR value (N). - This means in PWM mode that (N+1) corresponds to: - - the number of PWM periods in edge-aligned mode - - the number of half PWM period in center-aligned mode - GP timers: this parameter must be a number between Min_Data = 0x00 and - Max_Data = 0xFF. - Advanced timers: this parameter must be a number between Min_Data = 0x0000 and - Max_Data = 0xFFFF. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetRepetitionCounter().*/ -} LL_TIM_InitTypeDef; - -/** - * @brief TIM Output Compare configuration structure definition. - */ -typedef struct -{ - uint32_t OCMode; /*!< Specifies the output mode. - This parameter can be a value of @ref TIM_LL_EC_OCMODE. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetMode().*/ - - uint32_t OCState; /*!< Specifies the TIM Output Compare state. - This parameter can be a value of @ref TIM_LL_EC_OCSTATE. - - This feature can be modified afterwards using unitary functions - @ref LL_TIM_CC_EnableChannel() or @ref LL_TIM_CC_DisableChannel().*/ - - uint32_t OCNState; /*!< Specifies the TIM complementary Output Compare state. - This parameter can be a value of @ref TIM_LL_EC_OCSTATE. - - This feature can be modified afterwards using unitary functions - @ref LL_TIM_CC_EnableChannel() or @ref LL_TIM_CC_DisableChannel().*/ - - uint32_t CompareValue; /*!< Specifies the Compare value to be loaded into the Capture Compare Register. - This parameter can be a number between Min_Data=0x0000 and Max_Data=0xFFFF. - - This feature can be modified afterwards using unitary function - LL_TIM_OC_SetCompareCHx (x=1..6).*/ - - uint32_t OCPolarity; /*!< Specifies the output polarity. - This parameter can be a value of @ref TIM_LL_EC_OCPOLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetPolarity().*/ - - uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. - This parameter can be a value of @ref TIM_LL_EC_OCPOLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetPolarity().*/ - - - uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_LL_EC_OCIDLESTATE. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetIdleState().*/ - - uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. - This parameter can be a value of @ref TIM_LL_EC_OCIDLESTATE. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetIdleState().*/ -} LL_TIM_OC_InitTypeDef; - -/** - * @brief TIM Input Capture configuration structure definition. - */ - -typedef struct -{ - - uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. - This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPolarity().*/ - - uint32_t ICActiveInput; /*!< Specifies the input. - This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetActiveInput().*/ - - uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. - This parameter can be a value of @ref TIM_LL_EC_ICPSC. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPrescaler().*/ - - uint32_t ICFilter; /*!< Specifies the input capture filter. - This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetFilter().*/ -} LL_TIM_IC_InitTypeDef; - - -/** - * @brief TIM Encoder interface configuration structure definition. - */ -typedef struct -{ - uint32_t EncoderMode; /*!< Specifies the encoder resolution (x2 or x4). - This parameter can be a value of @ref TIM_LL_EC_ENCODERMODE. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetEncoderMode().*/ - - uint32_t IC1Polarity; /*!< Specifies the active edge of TI1 input. - This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPolarity().*/ - - uint32_t IC1ActiveInput; /*!< Specifies the TI1 input source - This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetActiveInput().*/ - - uint32_t IC1Prescaler; /*!< Specifies the TI1 input prescaler value. - This parameter can be a value of @ref TIM_LL_EC_ICPSC. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPrescaler().*/ - - uint32_t IC1Filter; /*!< Specifies the TI1 input filter. - This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetFilter().*/ - - uint32_t IC2Polarity; /*!< Specifies the active edge of TI2 input. - This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPolarity().*/ - - uint32_t IC2ActiveInput; /*!< Specifies the TI2 input source - This parameter can be a value of @ref TIM_LL_EC_ACTIVEINPUT. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetActiveInput().*/ - - uint32_t IC2Prescaler; /*!< Specifies the TI2 input prescaler value. - This parameter can be a value of @ref TIM_LL_EC_ICPSC. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPrescaler().*/ - - uint32_t IC2Filter; /*!< Specifies the TI2 input filter. - This parameter can be a value of @ref TIM_LL_EC_IC_FILTER. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetFilter().*/ - -} LL_TIM_ENCODER_InitTypeDef; - -/** - * @brief TIM Hall sensor interface configuration structure definition. - */ -typedef struct -{ - - uint32_t IC1Polarity; /*!< Specifies the active edge of TI1 input. - This parameter can be a value of @ref TIM_LL_EC_IC_POLARITY. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPolarity().*/ - - uint32_t IC1Prescaler; /*!< Specifies the TI1 input prescaler value. - Prescaler must be set to get a maximum counter period longer than the - time interval between 2 consecutive changes on the Hall inputs. - This parameter can be a value of @ref TIM_LL_EC_ICPSC. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetPrescaler().*/ - - uint32_t IC1Filter; /*!< Specifies the TI1 input filter. - This parameter can be a value of - @ref TIM_LL_EC_IC_FILTER. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_IC_SetFilter().*/ - - uint32_t CommutationDelay; /*!< Specifies the compare value to be loaded into the Capture Compare Register. - A positive pulse (TRGO event) is generated with a programmable delay every time - a change occurs on the Hall inputs. - This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetCompareCH2().*/ -} LL_TIM_HALLSENSOR_InitTypeDef; - -/** - * @brief BDTR (Break and Dead Time) structure definition - */ -typedef struct -{ - uint32_t OSSRState; /*!< Specifies the Off-State selection used in Run mode. - This parameter can be a value of @ref TIM_LL_EC_OSSR - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetOffStates() - - @note This bit-field cannot be modified as long as LOCK level 2 has been - programmed. */ - - uint32_t OSSIState; /*!< Specifies the Off-State used in Idle state. - This parameter can be a value of @ref TIM_LL_EC_OSSI - - This feature can be modified afterwards using unitary function - @ref LL_TIM_SetOffStates() - - @note This bit-field cannot be modified as long as LOCK level 2 has been - programmed. */ - - uint32_t LockLevel; /*!< Specifies the LOCK level parameters. - This parameter can be a value of @ref TIM_LL_EC_LOCKLEVEL - - @note The LOCK bits can be written only once after the reset. Once the TIMx_BDTR - register has been written, their content is frozen until the next reset.*/ - - uint8_t DeadTime; /*!< Specifies the delay time between the switching-off and the - switching-on of the outputs. - This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF. - - This feature can be modified afterwards using unitary function - @ref LL_TIM_OC_SetDeadTime() - - @note This bit-field can not be modified as long as LOCK level 1, 2 or 3 has been - programmed. */ - - uint16_t BreakState; /*!< Specifies whether the TIM Break input is enabled or not. - This parameter can be a value of @ref TIM_LL_EC_BREAK_ENABLE - - This feature can be modified afterwards using unitary functions - @ref LL_TIM_EnableBRK() or @ref LL_TIM_DisableBRK() - - @note This bit-field can not be modified as long as LOCK level 1 has been - programmed. */ - - uint32_t BreakPolarity; /*!< Specifies the TIM Break Input pin polarity. - This parameter can be a value of @ref TIM_LL_EC_BREAK_POLARITY - - This feature can be modified afterwards using unitary function - @ref LL_TIM_ConfigBRK() - - @note This bit-field can not be modified as long as LOCK level 1 has been - programmed. */ - - uint32_t AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. - This parameter can be a value of @ref TIM_LL_EC_AUTOMATICOUTPUT_ENABLE - - This feature can be modified afterwards using unitary functions - @ref LL_TIM_EnableAutomaticOutput() or @ref LL_TIM_DisableAutomaticOutput() - - @note This bit-field can not be modified as long as LOCK level 1 has been - programmed. */ -} LL_TIM_BDTR_InitTypeDef; - -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup TIM_LL_Exported_Constants TIM Exported Constants - * @{ - */ - -/** @defgroup TIM_LL_EC_GET_FLAG Get Flags Defines - * @brief Flags defines which can be used with LL_TIM_ReadReg function. - * @{ - */ -#define LL_TIM_SR_UIF TIM_SR_UIF /*!< Update interrupt flag */ -#define LL_TIM_SR_CC1IF TIM_SR_CC1IF /*!< Capture/compare 1 interrupt flag */ -#define LL_TIM_SR_CC2IF TIM_SR_CC2IF /*!< Capture/compare 2 interrupt flag */ -#define LL_TIM_SR_CC3IF TIM_SR_CC3IF /*!< Capture/compare 3 interrupt flag */ -#define LL_TIM_SR_CC4IF TIM_SR_CC4IF /*!< Capture/compare 4 interrupt flag */ -#define LL_TIM_SR_COMIF TIM_SR_COMIF /*!< COM interrupt flag */ -#define LL_TIM_SR_TIF TIM_SR_TIF /*!< Trigger interrupt flag */ -#define LL_TIM_SR_BIF TIM_SR_BIF /*!< Break interrupt flag */ -#define LL_TIM_SR_CC1OF TIM_SR_CC1OF /*!< Capture/Compare 1 overcapture flag */ -#define LL_TIM_SR_CC2OF TIM_SR_CC2OF /*!< Capture/Compare 2 overcapture flag */ -#define LL_TIM_SR_CC3OF TIM_SR_CC3OF /*!< Capture/Compare 3 overcapture flag */ -#define LL_TIM_SR_CC4OF TIM_SR_CC4OF /*!< Capture/Compare 4 overcapture flag */ -/** - * @} - */ - -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup TIM_LL_EC_BREAK_ENABLE Break Enable - * @{ - */ -#define LL_TIM_BREAK_DISABLE 0x00000000U /*!< Break function disabled */ -#define LL_TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break function enabled */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_AUTOMATICOUTPUT_ENABLE Automatic output enable - * @{ - */ -#define LL_TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ -#define LL_TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event */ -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/** @defgroup TIM_LL_EC_IT IT Defines - * @brief IT defines which can be used with LL_TIM_ReadReg and LL_TIM_WriteReg functions. - * @{ - */ -#define LL_TIM_DIER_UIE TIM_DIER_UIE /*!< Update interrupt enable */ -#define LL_TIM_DIER_CC1IE TIM_DIER_CC1IE /*!< Capture/compare 1 interrupt enable */ -#define LL_TIM_DIER_CC2IE TIM_DIER_CC2IE /*!< Capture/compare 2 interrupt enable */ -#define LL_TIM_DIER_CC3IE TIM_DIER_CC3IE /*!< Capture/compare 3 interrupt enable */ -#define LL_TIM_DIER_CC4IE TIM_DIER_CC4IE /*!< Capture/compare 4 interrupt enable */ -#define LL_TIM_DIER_COMIE TIM_DIER_COMIE /*!< COM interrupt enable */ -#define LL_TIM_DIER_TIE TIM_DIER_TIE /*!< Trigger interrupt enable */ -#define LL_TIM_DIER_BIE TIM_DIER_BIE /*!< Break interrupt enable */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_UPDATESOURCE Update Source - * @{ - */ -#define LL_TIM_UPDATESOURCE_REGULAR 0x00000000U /*!< Counter overflow/underflow, Setting the UG bit or Update generation through the slave mode controller generates an update request */ -#define LL_TIM_UPDATESOURCE_COUNTER TIM_CR1_URS /*!< Only counter overflow/underflow generates an update request */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_ONEPULSEMODE One Pulse Mode - * @{ - */ -#define LL_TIM_ONEPULSEMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ -#define LL_TIM_ONEPULSEMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_COUNTERMODE Counter Mode - * @{ - */ -#define LL_TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as upcounter */ -#define LL_TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as downcounter */ -#define LL_TIM_COUNTERMODE_CENTER_DOWN TIM_CR1_CMS_0 /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting down. */ -#define LL_TIM_COUNTERMODE_CENTER_UP TIM_CR1_CMS_1 /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting up */ -#define LL_TIM_COUNTERMODE_CENTER_UP_DOWN TIM_CR1_CMS /*!< The counter counts up and down alternatively. Output compare interrupt flags of output channels are set only when the counter is counting up or down. */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_CLOCKDIVISION Clock Division - * @{ - */ -#define LL_TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< tDTS=tCK_INT */ -#define LL_TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< tDTS=2*tCK_INT */ -#define LL_TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< tDTS=4*tCK_INT */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_COUNTERDIRECTION Counter Direction - * @{ - */ -#define LL_TIM_COUNTERDIRECTION_UP 0x00000000U /*!< Timer counter counts up */ -#define LL_TIM_COUNTERDIRECTION_DOWN TIM_CR1_DIR /*!< Timer counter counts down */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_CCUPDATESOURCE Capture Compare Update Source - * @{ - */ -#define LL_TIM_CCUPDATESOURCE_COMG_ONLY 0x00000000U /*!< Capture/compare control bits are updated by setting the COMG bit only */ -#define LL_TIM_CCUPDATESOURCE_COMG_AND_TRGI TIM_CR2_CCUS /*!< Capture/compare control bits are updated by setting the COMG bit or when a rising edge occurs on trigger input (TRGI) */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_CCDMAREQUEST Capture Compare DMA Request - * @{ - */ -#define LL_TIM_CCDMAREQUEST_CC 0x00000000U /*!< CCx DMA request sent when CCx event occurs */ -#define LL_TIM_CCDMAREQUEST_UPDATE TIM_CR2_CCDS /*!< CCx DMA requests sent when update event occurs */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_LOCKLEVEL Lock Level - * @{ - */ -#define LL_TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF - No bit is write protected */ -#define LL_TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ -#define LL_TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ -#define LL_TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_CHANNEL Channel - * @{ - */ -#define LL_TIM_CHANNEL_CH1 TIM_CCER_CC1E /*!< Timer input/output channel 1 */ -#define LL_TIM_CHANNEL_CH1N TIM_CCER_CC1NE /*!< Timer complementary output channel 1 */ -#define LL_TIM_CHANNEL_CH2 TIM_CCER_CC2E /*!< Timer input/output channel 2 */ -#define LL_TIM_CHANNEL_CH2N TIM_CCER_CC2NE /*!< Timer complementary output channel 2 */ -#define LL_TIM_CHANNEL_CH3 TIM_CCER_CC3E /*!< Timer input/output channel 3 */ -#define LL_TIM_CHANNEL_CH3N TIM_CCER_CC3NE /*!< Timer complementary output channel 3 */ -#define LL_TIM_CHANNEL_CH4 TIM_CCER_CC4E /*!< Timer input/output channel 4 */ -/** - * @} - */ - -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup TIM_LL_EC_OCSTATE Output Configuration State - * @{ - */ -#define LL_TIM_OCSTATE_DISABLE 0x00000000U /*!< OCx is not active */ -#define LL_TIM_OCSTATE_ENABLE TIM_CCER_CC1E /*!< OCx signal is output on the corresponding output pin */ -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/** @defgroup TIM_LL_EC_OCMODE Output Configuration Mode - * @{ - */ -#define LL_TIM_OCMODE_FROZEN 0x00000000U /*!TIMx_CCRy else active.*/ -#define LL_TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!TIMx_CCRy else inactive*/ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_OCPOLARITY Output Configuration Polarity - * @{ - */ -#define LL_TIM_OCPOLARITY_HIGH 0x00000000U /*!< OCxactive high*/ -#define LL_TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< OCxactive low*/ -/** - * @} - */ - -/** @defgroup TIM_LL_EC_OCIDLESTATE Output Configuration Idle State - * @{ - */ -#define LL_TIM_OCIDLESTATE_LOW 0x00000000U /*!__REG__, (__VALUE__)) - -/** - * @brief Read a value in TIM register. - * @param __INSTANCE__ TIM Instance - * @param __REG__ Register to be read - * @retval Register value - */ -#define LL_TIM_ReadReg(__INSTANCE__, __REG__) READ_REG((__INSTANCE__)->__REG__) -/** - * @} - */ - -/** - * @brief HELPER macro calculating DTG[0:7] in the TIMx_BDTR register to achieve the requested dead time duration. - * @note ex: @ref __LL_TIM_CALC_DEADTIME (80000000, @ref LL_TIM_GetClockDivision (), 120); - * @param __TIMCLK__ timer input clock frequency (in Hz) - * @param __CKD__ This parameter can be one of the following values: - * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 - * @param __DT__ deadtime duration (in ns) - * @retval DTG[0:7] - */ -#define __LL_TIM_CALC_DEADTIME(__TIMCLK__, __CKD__, __DT__) \ - ( (((uint64_t)((__DT__)*1000U)) < ((DT_DELAY_1+1U) * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ - (uint8_t)(((uint64_t)((__DT__)*1000U) / TIM_CALC_DTS((__TIMCLK__), (__CKD__))) & DT_DELAY_1) : \ - (((uint64_t)((__DT__)*1000U)) < ((64U + (DT_DELAY_2+1U)) * 2U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ - (uint8_t)(DT_RANGE_2 | ((uint8_t)((uint8_t)((((uint64_t)((__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ - (__CKD__))) >> 1U) - (uint8_t) 64) & DT_DELAY_2)) :\ - (((uint64_t)((__DT__)*1000U)) < ((32U + (DT_DELAY_3+1U)) * 8U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ - (uint8_t)(DT_RANGE_3 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ - (__CKD__))) >> 3U) - (uint8_t) 32) & DT_DELAY_3)) :\ - (((uint64_t)((__DT__)*1000U)) < ((32U + (DT_DELAY_4+1U)) * 16U * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? \ - (uint8_t)(DT_RANGE_4 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), \ - (__CKD__))) >> 4U) - (uint8_t) 32) & DT_DELAY_4)) :\ - 0U) - -/** - * @brief HELPER macro calculating the prescaler value to achieve the required counter clock frequency. - * @note ex: @ref __LL_TIM_CALC_PSC (80000000, 1000000); - * @param __TIMCLK__ timer input clock frequency (in Hz) - * @param __CNTCLK__ counter clock frequency (in Hz) - * @retval Prescaler value (between Min_Data=0 and Max_Data=65535) - */ -#define __LL_TIM_CALC_PSC(__TIMCLK__, __CNTCLK__) \ - (((__TIMCLK__) >= (__CNTCLK__)) ? (uint32_t)((((__TIMCLK__) + (__CNTCLK__)/2U)/(__CNTCLK__)) - 1U) : 0U) - -/** - * @brief HELPER macro calculating the auto-reload value to achieve the required output signal frequency. - * @note ex: @ref __LL_TIM_CALC_ARR (1000000, @ref LL_TIM_GetPrescaler (), 10000); - * @param __TIMCLK__ timer input clock frequency (in Hz) - * @param __PSC__ prescaler - * @param __FREQ__ output signal frequency (in Hz) - * @retval Auto-reload value (between Min_Data=0 and Max_Data=65535) - */ -#define __LL_TIM_CALC_ARR(__TIMCLK__, __PSC__, __FREQ__) \ - ((((__TIMCLK__)/((__PSC__) + 1U)) >= (__FREQ__)) ? (((__TIMCLK__)/((__FREQ__) * ((__PSC__) + 1U))) - 1U) : 0U) - -/** - * @brief HELPER macro calculating the compare value required to achieve the required timer output compare - * active/inactive delay. - * @note ex: @ref __LL_TIM_CALC_DELAY (1000000, @ref LL_TIM_GetPrescaler (), 10); - * @param __TIMCLK__ timer input clock frequency (in Hz) - * @param __PSC__ prescaler - * @param __DELAY__ timer output compare active/inactive delay (in us) - * @retval Compare value (between Min_Data=0 and Max_Data=65535) - */ -#define __LL_TIM_CALC_DELAY(__TIMCLK__, __PSC__, __DELAY__) \ - ((uint32_t)(((uint64_t)(__TIMCLK__) * (uint64_t)(__DELAY__)) \ - / ((uint64_t)1000000U * (uint64_t)((__PSC__) + 1U)))) - -/** - * @brief HELPER macro calculating the auto-reload value to achieve the required pulse duration - * (when the timer operates in one pulse mode). - * @note ex: @ref __LL_TIM_CALC_PULSE (1000000, @ref LL_TIM_GetPrescaler (), 10, 20); - * @param __TIMCLK__ timer input clock frequency (in Hz) - * @param __PSC__ prescaler - * @param __DELAY__ timer output compare active/inactive delay (in us) - * @param __PULSE__ pulse duration (in us) - * @retval Auto-reload value (between Min_Data=0 and Max_Data=65535) - */ -#define __LL_TIM_CALC_PULSE(__TIMCLK__, __PSC__, __DELAY__, __PULSE__) \ - ((uint32_t)(__LL_TIM_CALC_DELAY((__TIMCLK__), (__PSC__), (__PULSE__)) \ - + __LL_TIM_CALC_DELAY((__TIMCLK__), (__PSC__), (__DELAY__)))) - -/** - * @brief HELPER macro retrieving the ratio of the input capture prescaler - * @note ex: @ref __LL_TIM_GET_ICPSC_RATIO (@ref LL_TIM_IC_GetPrescaler ()); - * @param __ICPSC__ This parameter can be one of the following values: - * @arg @ref LL_TIM_ICPSC_DIV1 - * @arg @ref LL_TIM_ICPSC_DIV2 - * @arg @ref LL_TIM_ICPSC_DIV4 - * @arg @ref LL_TIM_ICPSC_DIV8 - * @retval Input capture prescaler ratio (1, 2, 4 or 8) - */ -#define __LL_TIM_GET_ICPSC_RATIO(__ICPSC__) \ - ((uint32_t)(0x01U << (((__ICPSC__) >> 16U) >> TIM_CCMR1_IC1PSC_Pos))) - - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup TIM_LL_Exported_Functions TIM Exported Functions - * @{ - */ - -/** @defgroup TIM_LL_EF_Time_Base Time Base configuration - * @{ - */ -/** - * @brief Enable timer counter. - * @rmtoll CR1 CEN LL_TIM_EnableCounter - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableCounter(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->CR1, TIM_CR1_CEN); -} - -/** - * @brief Disable timer counter. - * @rmtoll CR1 CEN LL_TIM_DisableCounter - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableCounter(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->CR1, TIM_CR1_CEN); -} - -/** - * @brief Indicates whether the timer counter is enabled. - * @rmtoll CR1 CEN LL_TIM_IsEnabledCounter - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledCounter(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->CR1, TIM_CR1_CEN) == (TIM_CR1_CEN)) ? 1UL : 0UL); -} - -/** - * @brief Enable update event generation. - * @rmtoll CR1 UDIS LL_TIM_EnableUpdateEvent - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableUpdateEvent(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->CR1, TIM_CR1_UDIS); -} - -/** - * @brief Disable update event generation. - * @rmtoll CR1 UDIS LL_TIM_DisableUpdateEvent - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableUpdateEvent(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->CR1, TIM_CR1_UDIS); -} - -/** - * @brief Indicates whether update event generation is enabled. - * @rmtoll CR1 UDIS LL_TIM_IsEnabledUpdateEvent - * @param TIMx Timer instance - * @retval Inverted state of bit (0 or 1). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledUpdateEvent(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->CR1, TIM_CR1_UDIS) == (uint32_t)RESET) ? 1UL : 0UL); -} - -/** - * @brief Set update event source - * @note Update event source set to LL_TIM_UPDATESOURCE_REGULAR: any of the following events - * generate an update interrupt or DMA request if enabled: - * - Counter overflow/underflow - * - Setting the UG bit - * - Update generation through the slave mode controller - * @note Update event source set to LL_TIM_UPDATESOURCE_COUNTER: only counter - * overflow/underflow generates an update interrupt or DMA request if enabled. - * @rmtoll CR1 URS LL_TIM_SetUpdateSource - * @param TIMx Timer instance - * @param UpdateSource This parameter can be one of the following values: - * @arg @ref LL_TIM_UPDATESOURCE_REGULAR - * @arg @ref LL_TIM_UPDATESOURCE_COUNTER - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetUpdateSource(TIM_TypeDef *TIMx, uint32_t UpdateSource) -{ - MODIFY_REG(TIMx->CR1, TIM_CR1_URS, UpdateSource); -} - -/** - * @brief Get actual event update source - * @rmtoll CR1 URS LL_TIM_GetUpdateSource - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_UPDATESOURCE_REGULAR - * @arg @ref LL_TIM_UPDATESOURCE_COUNTER - */ -__STATIC_INLINE uint32_t LL_TIM_GetUpdateSource(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_URS)); -} - -/** - * @brief Set one pulse mode (one shot v.s. repetitive). - * @rmtoll CR1 OPM LL_TIM_SetOnePulseMode - * @param TIMx Timer instance - * @param OnePulseMode This parameter can be one of the following values: - * @arg @ref LL_TIM_ONEPULSEMODE_SINGLE - * @arg @ref LL_TIM_ONEPULSEMODE_REPETITIVE - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetOnePulseMode(TIM_TypeDef *TIMx, uint32_t OnePulseMode) -{ - MODIFY_REG(TIMx->CR1, TIM_CR1_OPM, OnePulseMode); -} - -/** - * @brief Get actual one pulse mode. - * @rmtoll CR1 OPM LL_TIM_GetOnePulseMode - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_ONEPULSEMODE_SINGLE - * @arg @ref LL_TIM_ONEPULSEMODE_REPETITIVE - */ -__STATIC_INLINE uint32_t LL_TIM_GetOnePulseMode(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_OPM)); -} - -/** - * @brief Set the timer counter counting mode. - * @note Macro IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx) can be used to - * check whether or not the counter mode selection feature is supported - * by a timer instance. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * @rmtoll CR1 DIR LL_TIM_SetCounterMode\n - * CR1 CMS LL_TIM_SetCounterMode - * @param TIMx Timer instance - * @param CounterMode This parameter can be one of the following values: - * @arg @ref LL_TIM_COUNTERMODE_UP - * @arg @ref LL_TIM_COUNTERMODE_DOWN - * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP - * @arg @ref LL_TIM_COUNTERMODE_CENTER_DOWN - * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP_DOWN - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetCounterMode(TIM_TypeDef *TIMx, uint32_t CounterMode) -{ - MODIFY_REG(TIMx->CR1, (TIM_CR1_DIR | TIM_CR1_CMS), CounterMode); -} - -/** - * @brief Get actual counter mode. - * @note Macro IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx) can be used to - * check whether or not the counter mode selection feature is supported - * by a timer instance. - * @rmtoll CR1 DIR LL_TIM_GetCounterMode\n - * CR1 CMS LL_TIM_GetCounterMode - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_COUNTERMODE_UP - * @arg @ref LL_TIM_COUNTERMODE_DOWN - * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP - * @arg @ref LL_TIM_COUNTERMODE_CENTER_DOWN - * @arg @ref LL_TIM_COUNTERMODE_CENTER_UP_DOWN - */ -__STATIC_INLINE uint32_t LL_TIM_GetCounterMode(const TIM_TypeDef *TIMx) -{ - uint32_t counter_mode; - - counter_mode = (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_CMS)); - - if (counter_mode == 0U) - { - counter_mode = (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_DIR)); - } - - return counter_mode; -} - -/** - * @brief Enable auto-reload (ARR) preload. - * @rmtoll CR1 ARPE LL_TIM_EnableARRPreload - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableARRPreload(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->CR1, TIM_CR1_ARPE); -} - -/** - * @brief Disable auto-reload (ARR) preload. - * @rmtoll CR1 ARPE LL_TIM_DisableARRPreload - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableARRPreload(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->CR1, TIM_CR1_ARPE); -} - -/** - * @brief Indicates whether auto-reload (ARR) preload is enabled. - * @rmtoll CR1 ARPE LL_TIM_IsEnabledARRPreload - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledARRPreload(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->CR1, TIM_CR1_ARPE) == (TIM_CR1_ARPE)) ? 1UL : 0UL); -} - -/** - * @brief Set the division ratio between the timer clock and the sampling clock used by the dead-time generators - * (when supported) and the digital filters. - * @note Macro IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx) can be used to check - * whether or not the clock division feature is supported by the timer - * instance. - * @rmtoll CR1 CKD LL_TIM_SetClockDivision - * @param TIMx Timer instance - * @param ClockDivision This parameter can be one of the following values: - * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetClockDivision(TIM_TypeDef *TIMx, uint32_t ClockDivision) -{ - MODIFY_REG(TIMx->CR1, TIM_CR1_CKD, ClockDivision); -} - -/** - * @brief Get the actual division ratio between the timer clock and the sampling clock used by the dead-time - * generators (when supported) and the digital filters. - * @note Macro IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx) can be used to check - * whether or not the clock division feature is supported by the timer - * instance. - * @rmtoll CR1 CKD LL_TIM_GetClockDivision - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_CLOCKDIVISION_DIV1 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV2 - * @arg @ref LL_TIM_CLOCKDIVISION_DIV4 - */ -__STATIC_INLINE uint32_t LL_TIM_GetClockDivision(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_CKD)); -} - -/** - * @brief Set the counter value. - * @rmtoll CNT CNT LL_TIM_SetCounter - * @param TIMx Timer instance - * @param Counter Counter value (between Min_Data=0 and Max_Data=0xFFFF) - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetCounter(TIM_TypeDef *TIMx, uint32_t Counter) -{ - WRITE_REG(TIMx->CNT, Counter); -} - -/** - * @brief Get the counter value. - * @rmtoll CNT CNT LL_TIM_GetCounter - * @param TIMx Timer instance - * @retval Counter value (between Min_Data=0 and Max_Data=0xFFFF) - */ -__STATIC_INLINE uint32_t LL_TIM_GetCounter(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CNT)); -} - -/** - * @brief Get the current direction of the counter - * @rmtoll CR1 DIR LL_TIM_GetDirection - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_COUNTERDIRECTION_UP - * @arg @ref LL_TIM_COUNTERDIRECTION_DOWN - */ -__STATIC_INLINE uint32_t LL_TIM_GetDirection(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_BIT(TIMx->CR1, TIM_CR1_DIR)); -} - -/** - * @brief Set the prescaler value. - * @note The counter clock frequency CK_CNT is equal to fCK_PSC / (PSC[15:0] + 1). - * @note The prescaler can be changed on the fly as this control register is buffered. The new - * prescaler ratio is taken into account at the next update event. - * @note Helper macro @ref __LL_TIM_CALC_PSC can be used to calculate the Prescaler parameter - * @rmtoll PSC PSC LL_TIM_SetPrescaler - * @param TIMx Timer instance - * @param Prescaler between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetPrescaler(TIM_TypeDef *TIMx, uint32_t Prescaler) -{ - WRITE_REG(TIMx->PSC, Prescaler); -} - -/** - * @brief Get the prescaler value. - * @rmtoll PSC PSC LL_TIM_GetPrescaler - * @param TIMx Timer instance - * @retval Prescaler value between Min_Data=0 and Max_Data=65535 - */ -__STATIC_INLINE uint32_t LL_TIM_GetPrescaler(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->PSC)); -} - -/** - * @brief Set the auto-reload value. - * @note The counter is blocked while the auto-reload value is null. - * @note Helper macro @ref __LL_TIM_CALC_ARR can be used to calculate the AutoReload parameter - * @rmtoll ARR ARR LL_TIM_SetAutoReload - * @param TIMx Timer instance - * @param AutoReload between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetAutoReload(TIM_TypeDef *TIMx, uint32_t AutoReload) -{ - WRITE_REG(TIMx->ARR, AutoReload); -} - -/** - * @brief Get the auto-reload value. - * @rmtoll ARR ARR LL_TIM_GetAutoReload - * @param TIMx Timer instance - * @retval Auto-reload value - */ -__STATIC_INLINE uint32_t LL_TIM_GetAutoReload(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->ARR)); -} - -/** - * @brief Set the repetition counter value. - * @note Macro IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports a repetition counter. - * @rmtoll RCR REP LL_TIM_SetRepetitionCounter - * @param TIMx Timer instance - * @param RepetitionCounter between Min_Data=0 and Max_Data=255 or 65535 for advanced timer. - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetRepetitionCounter(TIM_TypeDef *TIMx, uint32_t RepetitionCounter) -{ - WRITE_REG(TIMx->RCR, RepetitionCounter); -} - -/** - * @brief Get the repetition counter value. - * @note Macro IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports a repetition counter. - * @rmtoll RCR REP LL_TIM_GetRepetitionCounter - * @param TIMx Timer instance - * @retval Repetition counter value - */ -__STATIC_INLINE uint32_t LL_TIM_GetRepetitionCounter(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->RCR)); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Capture_Compare Capture Compare configuration - * @{ - */ -/** - * @brief Enable the capture/compare control bits (CCxE, CCxNE and OCxM) preload. - * @note CCxE, CCxNE and OCxM bits are preloaded, after having been written, - * they are updated only when a commutation event (COM) occurs. - * @note Only on channels that have a complementary output. - * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check - * whether or not a timer instance is able to generate a commutation event. - * @rmtoll CR2 CCPC LL_TIM_CC_EnablePreload - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_EnablePreload(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->CR2, TIM_CR2_CCPC); -} - -/** - * @brief Disable the capture/compare control bits (CCxE, CCxNE and OCxM) preload. - * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check - * whether or not a timer instance is able to generate a commutation event. - * @rmtoll CR2 CCPC LL_TIM_CC_DisablePreload - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_DisablePreload(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->CR2, TIM_CR2_CCPC); -} - -/** - * @brief Indicates whether the capture/compare control bits (CCxE, CCxNE and OCxM) preload is enabled. - * @rmtoll CR2 CCPC LL_TIM_CC_IsEnabledPreload - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_CC_IsEnabledPreload(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->CR2, TIM_CR2_CCPC) == (TIM_CR2_CCPC)) ? 1UL : 0UL); -} - -/** - * @brief Set the updated source of the capture/compare control bits (CCxE, CCxNE and OCxM). - * @note Macro IS_TIM_COMMUTATION_EVENT_INSTANCE(TIMx) can be used to check - * whether or not a timer instance is able to generate a commutation event. - * @rmtoll CR2 CCUS LL_TIM_CC_SetUpdate - * @param TIMx Timer instance - * @param CCUpdateSource This parameter can be one of the following values: - * @arg @ref LL_TIM_CCUPDATESOURCE_COMG_ONLY - * @arg @ref LL_TIM_CCUPDATESOURCE_COMG_AND_TRGI - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_SetUpdate(TIM_TypeDef *TIMx, uint32_t CCUpdateSource) -{ - MODIFY_REG(TIMx->CR2, TIM_CR2_CCUS, CCUpdateSource); -} - -/** - * @brief Set the trigger of the capture/compare DMA request. - * @rmtoll CR2 CCDS LL_TIM_CC_SetDMAReqTrigger - * @param TIMx Timer instance - * @param DMAReqTrigger This parameter can be one of the following values: - * @arg @ref LL_TIM_CCDMAREQUEST_CC - * @arg @ref LL_TIM_CCDMAREQUEST_UPDATE - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_SetDMAReqTrigger(TIM_TypeDef *TIMx, uint32_t DMAReqTrigger) -{ - MODIFY_REG(TIMx->CR2, TIM_CR2_CCDS, DMAReqTrigger); -} - -/** - * @brief Get actual trigger of the capture/compare DMA request. - * @rmtoll CR2 CCDS LL_TIM_CC_GetDMAReqTrigger - * @param TIMx Timer instance - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_CCDMAREQUEST_CC - * @arg @ref LL_TIM_CCDMAREQUEST_UPDATE - */ -__STATIC_INLINE uint32_t LL_TIM_CC_GetDMAReqTrigger(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_BIT(TIMx->CR2, TIM_CR2_CCDS)); -} - -/** - * @brief Set the lock level to freeze the - * configuration of several capture/compare parameters. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * the lock mechanism is supported by a timer instance. - * @rmtoll BDTR LOCK LL_TIM_CC_SetLockLevel - * @param TIMx Timer instance - * @param LockLevel This parameter can be one of the following values: - * @arg @ref LL_TIM_LOCKLEVEL_OFF - * @arg @ref LL_TIM_LOCKLEVEL_1 - * @arg @ref LL_TIM_LOCKLEVEL_2 - * @arg @ref LL_TIM_LOCKLEVEL_3 - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_SetLockLevel(TIM_TypeDef *TIMx, uint32_t LockLevel) -{ - MODIFY_REG(TIMx->BDTR, TIM_BDTR_LOCK, LockLevel); -} - -/** - * @brief Enable capture/compare channels. - * @rmtoll CCER CC1E LL_TIM_CC_EnableChannel\n - * CCER CC1NE LL_TIM_CC_EnableChannel\n - * CCER CC2E LL_TIM_CC_EnableChannel\n - * CCER CC2NE LL_TIM_CC_EnableChannel\n - * CCER CC3E LL_TIM_CC_EnableChannel\n - * CCER CC3NE LL_TIM_CC_EnableChannel\n - * CCER CC4E LL_TIM_CC_EnableChannel - * @param TIMx Timer instance - * @param Channels This parameter can be a combination of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_EnableChannel(TIM_TypeDef *TIMx, uint32_t Channels) -{ - SET_BIT(TIMx->CCER, Channels); -} - -/** - * @brief Disable capture/compare channels. - * @rmtoll CCER CC1E LL_TIM_CC_DisableChannel\n - * CCER CC1NE LL_TIM_CC_DisableChannel\n - * CCER CC2E LL_TIM_CC_DisableChannel\n - * CCER CC2NE LL_TIM_CC_DisableChannel\n - * CCER CC3E LL_TIM_CC_DisableChannel\n - * CCER CC3NE LL_TIM_CC_DisableChannel\n - * CCER CC4E LL_TIM_CC_DisableChannel - * @param TIMx Timer instance - * @param Channels This parameter can be a combination of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_CC_DisableChannel(TIM_TypeDef *TIMx, uint32_t Channels) -{ - CLEAR_BIT(TIMx->CCER, Channels); -} - -/** - * @brief Indicate whether channel(s) is(are) enabled. - * @rmtoll CCER CC1E LL_TIM_CC_IsEnabledChannel\n - * CCER CC1NE LL_TIM_CC_IsEnabledChannel\n - * CCER CC2E LL_TIM_CC_IsEnabledChannel\n - * CCER CC2NE LL_TIM_CC_IsEnabledChannel\n - * CCER CC3E LL_TIM_CC_IsEnabledChannel\n - * CCER CC3NE LL_TIM_CC_IsEnabledChannel\n - * CCER CC4E LL_TIM_CC_IsEnabledChannel - * @param TIMx Timer instance - * @param Channels This parameter can be a combination of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_CC_IsEnabledChannel(const TIM_TypeDef *TIMx, uint32_t Channels) -{ - return ((READ_BIT(TIMx->CCER, Channels) == (Channels)) ? 1UL : 0UL); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Output_Channel Output channel configuration - * @{ - */ -/** - * @brief Configure an output channel. - * @rmtoll CCMR1 CC1S LL_TIM_OC_ConfigOutput\n - * CCMR1 CC2S LL_TIM_OC_ConfigOutput\n - * CCMR2 CC3S LL_TIM_OC_ConfigOutput\n - * CCMR2 CC4S LL_TIM_OC_ConfigOutput\n - * CCER CC1P LL_TIM_OC_ConfigOutput\n - * CCER CC2P LL_TIM_OC_ConfigOutput\n - * CCER CC3P LL_TIM_OC_ConfigOutput\n - * CCER CC4P LL_TIM_OC_ConfigOutput\n - * CR2 OIS1 LL_TIM_OC_ConfigOutput\n - * CR2 OIS2 LL_TIM_OC_ConfigOutput\n - * CR2 OIS3 LL_TIM_OC_ConfigOutput\n - * CR2 OIS4 LL_TIM_OC_ConfigOutput - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param Configuration This parameter must be a combination of all the following values: - * @arg @ref LL_TIM_OCPOLARITY_HIGH or @ref LL_TIM_OCPOLARITY_LOW - * @arg @ref LL_TIM_OCIDLESTATE_LOW or @ref LL_TIM_OCIDLESTATE_HIGH - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_ConfigOutput(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Configuration) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - CLEAR_BIT(*pReg, (TIM_CCMR1_CC1S << SHIFT_TAB_OCxx[iChannel])); - MODIFY_REG(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel]), - (Configuration & TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]); - MODIFY_REG(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel]), - (Configuration & TIM_CR2_OIS1) << SHIFT_TAB_OISx[iChannel]); -} - -/** - * @brief Define the behavior of the output reference signal OCxREF from which - * OCx and OCxN (when relevant) are derived. - * @rmtoll CCMR1 OC1M LL_TIM_OC_SetMode\n - * CCMR1 OC2M LL_TIM_OC_SetMode\n - * CCMR2 OC3M LL_TIM_OC_SetMode\n - * CCMR2 OC4M LL_TIM_OC_SetMode - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param Mode This parameter can be one of the following values: - * @arg @ref LL_TIM_OCMODE_FROZEN - * @arg @ref LL_TIM_OCMODE_ACTIVE - * @arg @ref LL_TIM_OCMODE_INACTIVE - * @arg @ref LL_TIM_OCMODE_TOGGLE - * @arg @ref LL_TIM_OCMODE_FORCED_INACTIVE - * @arg @ref LL_TIM_OCMODE_FORCED_ACTIVE - * @arg @ref LL_TIM_OCMODE_PWM1 - * @arg @ref LL_TIM_OCMODE_PWM2 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetMode(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Mode) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - MODIFY_REG(*pReg, ((TIM_CCMR1_OC1M | TIM_CCMR1_CC1S) << SHIFT_TAB_OCxx[iChannel]), Mode << SHIFT_TAB_OCxx[iChannel]); -} - -/** - * @brief Get the output compare mode of an output channel. - * @rmtoll CCMR1 OC1M LL_TIM_OC_GetMode\n - * CCMR1 OC2M LL_TIM_OC_GetMode\n - * CCMR2 OC3M LL_TIM_OC_GetMode\n - * CCMR2 OC4M LL_TIM_OC_GetMode - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_OCMODE_FROZEN - * @arg @ref LL_TIM_OCMODE_ACTIVE - * @arg @ref LL_TIM_OCMODE_INACTIVE - * @arg @ref LL_TIM_OCMODE_TOGGLE - * @arg @ref LL_TIM_OCMODE_FORCED_INACTIVE - * @arg @ref LL_TIM_OCMODE_FORCED_ACTIVE - * @arg @ref LL_TIM_OCMODE_PWM1 - * @arg @ref LL_TIM_OCMODE_PWM2 - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetMode(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - return (READ_BIT(*pReg, ((TIM_CCMR1_OC1M | TIM_CCMR1_CC1S) << SHIFT_TAB_OCxx[iChannel])) >> SHIFT_TAB_OCxx[iChannel]); -} - -/** - * @brief Set the polarity of an output channel. - * @rmtoll CCER CC1P LL_TIM_OC_SetPolarity\n - * CCER CC1NP LL_TIM_OC_SetPolarity\n - * CCER CC2P LL_TIM_OC_SetPolarity\n - * CCER CC2NP LL_TIM_OC_SetPolarity\n - * CCER CC3P LL_TIM_OC_SetPolarity\n - * CCER CC3NP LL_TIM_OC_SetPolarity\n - * CCER CC4P LL_TIM_OC_SetPolarity - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param Polarity This parameter can be one of the following values: - * @arg @ref LL_TIM_OCPOLARITY_HIGH - * @arg @ref LL_TIM_OCPOLARITY_LOW - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetPolarity(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Polarity) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - MODIFY_REG(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel]), Polarity << SHIFT_TAB_CCxP[iChannel]); -} - -/** - * @brief Get the polarity of an output channel. - * @rmtoll CCER CC1P LL_TIM_OC_GetPolarity\n - * CCER CC1NP LL_TIM_OC_GetPolarity\n - * CCER CC2P LL_TIM_OC_GetPolarity\n - * CCER CC2NP LL_TIM_OC_GetPolarity\n - * CCER CC3P LL_TIM_OC_GetPolarity\n - * CCER CC3NP LL_TIM_OC_GetPolarity\n - * CCER CC4P LL_TIM_OC_GetPolarity - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_OCPOLARITY_HIGH - * @arg @ref LL_TIM_OCPOLARITY_LOW - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetPolarity(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - return (READ_BIT(TIMx->CCER, (TIM_CCER_CC1P << SHIFT_TAB_CCxP[iChannel])) >> SHIFT_TAB_CCxP[iChannel]); -} - -/** - * @brief Set the IDLE state of an output channel - * @note This function is significant only for the timer instances - * supporting the break feature. Macro IS_TIM_BREAK_INSTANCE(TIMx) - * can be used to check whether or not a timer instance provides - * a break input. - * @rmtoll CR2 OIS1 LL_TIM_OC_SetIdleState\n - * CR2 OIS1N LL_TIM_OC_SetIdleState\n - * CR2 OIS2 LL_TIM_OC_SetIdleState\n - * CR2 OIS2N LL_TIM_OC_SetIdleState\n - * CR2 OIS3 LL_TIM_OC_SetIdleState\n - * CR2 OIS3N LL_TIM_OC_SetIdleState\n - * CR2 OIS4 LL_TIM_OC_SetIdleState - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param IdleState This parameter can be one of the following values: - * @arg @ref LL_TIM_OCIDLESTATE_LOW - * @arg @ref LL_TIM_OCIDLESTATE_HIGH - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetIdleState(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t IdleState) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - MODIFY_REG(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel]), IdleState << SHIFT_TAB_OISx[iChannel]); -} - -/** - * @brief Get the IDLE state of an output channel - * @rmtoll CR2 OIS1 LL_TIM_OC_GetIdleState\n - * CR2 OIS1N LL_TIM_OC_GetIdleState\n - * CR2 OIS2 LL_TIM_OC_GetIdleState\n - * CR2 OIS2N LL_TIM_OC_GetIdleState\n - * CR2 OIS3 LL_TIM_OC_GetIdleState\n - * CR2 OIS3N LL_TIM_OC_GetIdleState\n - * CR2 OIS4 LL_TIM_OC_GetIdleState - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH1N - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH2N - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH3N - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_OCIDLESTATE_LOW - * @arg @ref LL_TIM_OCIDLESTATE_HIGH - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetIdleState(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - return (READ_BIT(TIMx->CR2, (TIM_CR2_OIS1 << SHIFT_TAB_OISx[iChannel])) >> SHIFT_TAB_OISx[iChannel]); -} - -/** - * @brief Enable fast mode for the output channel. - * @note Acts only if the channel is configured in PWM1 or PWM2 mode. - * @rmtoll CCMR1 OC1FE LL_TIM_OC_EnableFast\n - * CCMR1 OC2FE LL_TIM_OC_EnableFast\n - * CCMR2 OC3FE LL_TIM_OC_EnableFast\n - * CCMR2 OC4FE LL_TIM_OC_EnableFast - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_EnableFast(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - SET_BIT(*pReg, (TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel])); - -} - -/** - * @brief Disable fast mode for the output channel. - * @rmtoll CCMR1 OC1FE LL_TIM_OC_DisableFast\n - * CCMR1 OC2FE LL_TIM_OC_DisableFast\n - * CCMR2 OC3FE LL_TIM_OC_DisableFast\n - * CCMR2 OC4FE LL_TIM_OC_DisableFast - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_DisableFast(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - CLEAR_BIT(*pReg, (TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel])); - -} - -/** - * @brief Indicates whether fast mode is enabled for the output channel. - * @rmtoll CCMR1 OC1FE LL_TIM_OC_IsEnabledFast\n - * CCMR1 OC2FE LL_TIM_OC_IsEnabledFast\n - * CCMR2 OC3FE LL_TIM_OC_IsEnabledFast\n - * CCMR2 OC4FE LL_TIM_OC_IsEnabledFast\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledFast(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - uint32_t bitfield = TIM_CCMR1_OC1FE << SHIFT_TAB_OCxx[iChannel]; - return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); -} - -/** - * @brief Enable compare register (TIMx_CCRx) preload for the output channel. - * @rmtoll CCMR1 OC1PE LL_TIM_OC_EnablePreload\n - * CCMR1 OC2PE LL_TIM_OC_EnablePreload\n - * CCMR2 OC3PE LL_TIM_OC_EnablePreload\n - * CCMR2 OC4PE LL_TIM_OC_EnablePreload - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_EnablePreload(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - SET_BIT(*pReg, (TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel])); -} - -/** - * @brief Disable compare register (TIMx_CCRx) preload for the output channel. - * @rmtoll CCMR1 OC1PE LL_TIM_OC_DisablePreload\n - * CCMR1 OC2PE LL_TIM_OC_DisablePreload\n - * CCMR2 OC3PE LL_TIM_OC_DisablePreload\n - * CCMR2 OC4PE LL_TIM_OC_DisablePreload - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_DisablePreload(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - CLEAR_BIT(*pReg, (TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel])); -} - -/** - * @brief Indicates whether compare register (TIMx_CCRx) preload is enabled for the output channel. - * @rmtoll CCMR1 OC1PE LL_TIM_OC_IsEnabledPreload\n - * CCMR1 OC2PE LL_TIM_OC_IsEnabledPreload\n - * CCMR2 OC3PE LL_TIM_OC_IsEnabledPreload\n - * CCMR2 OC4PE LL_TIM_OC_IsEnabledPreload\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledPreload(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - uint32_t bitfield = TIM_CCMR1_OC1PE << SHIFT_TAB_OCxx[iChannel]; - return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); -} - -/** - * @brief Enable clearing the output channel on an external event. - * @note This function can only be used in Output compare and PWM modes. It does not work in Forced mode. - * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether - * or not a timer instance can clear the OCxREF signal on an external event. - * @rmtoll CCMR1 OC1CE LL_TIM_OC_EnableClear\n - * CCMR1 OC2CE LL_TIM_OC_EnableClear\n - * CCMR2 OC3CE LL_TIM_OC_EnableClear\n - * CCMR2 OC4CE LL_TIM_OC_EnableClear - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_EnableClear(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - SET_BIT(*pReg, (TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel])); -} - -/** - * @brief Disable clearing the output channel on an external event. - * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether - * or not a timer instance can clear the OCxREF signal on an external event. - * @rmtoll CCMR1 OC1CE LL_TIM_OC_DisableClear\n - * CCMR1 OC2CE LL_TIM_OC_DisableClear\n - * CCMR2 OC3CE LL_TIM_OC_DisableClear\n - * CCMR2 OC4CE LL_TIM_OC_DisableClear - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_DisableClear(TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - CLEAR_BIT(*pReg, (TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel])); -} - -/** - * @brief Indicates clearing the output channel on an external event is enabled for the output channel. - * @note This function enables clearing the output channel on an external event. - * @note This function can only be used in Output compare and PWM modes. It does not work in Forced mode. - * @note Macro IS_TIM_OCXREF_CLEAR_INSTANCE(TIMx) can be used to check whether - * or not a timer instance can clear the OCxREF signal on an external event. - * @rmtoll CCMR1 OC1CE LL_TIM_OC_IsEnabledClear\n - * CCMR1 OC2CE LL_TIM_OC_IsEnabledClear\n - * CCMR2 OC3CE LL_TIM_OC_IsEnabledClear\n - * CCMR2 OC4CE LL_TIM_OC_IsEnabledClear\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledClear(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - uint32_t bitfield = TIM_CCMR1_OC1CE << SHIFT_TAB_OCxx[iChannel]; - return ((READ_BIT(*pReg, bitfield) == bitfield) ? 1UL : 0UL); -} - -/** - * @brief Set the dead-time delay (delay inserted between the rising edge of the OCxREF signal and the rising edge of - * the Ocx and OCxN signals). - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * dead-time insertion feature is supported by a timer instance. - * @note Helper macro @ref __LL_TIM_CALC_DEADTIME can be used to calculate the DeadTime parameter - * @rmtoll BDTR DTG LL_TIM_OC_SetDeadTime - * @param TIMx Timer instance - * @param DeadTime between Min_Data=0 and Max_Data=255 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetDeadTime(TIM_TypeDef *TIMx, uint32_t DeadTime) -{ - MODIFY_REG(TIMx->BDTR, TIM_BDTR_DTG, DeadTime); -} - -/** - * @brief Set compare value for output channel 1 (TIMx_CCR1). - * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not - * output channel 1 is supported by a timer instance. - * @rmtoll CCR1 CCR1 LL_TIM_OC_SetCompareCH1 - * @param TIMx Timer instance - * @param CompareValue between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetCompareCH1(TIM_TypeDef *TIMx, uint32_t CompareValue) -{ - WRITE_REG(TIMx->CCR1, CompareValue); -} - -/** - * @brief Set compare value for output channel 2 (TIMx_CCR2). - * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not - * output channel 2 is supported by a timer instance. - * @rmtoll CCR2 CCR2 LL_TIM_OC_SetCompareCH2 - * @param TIMx Timer instance - * @param CompareValue between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetCompareCH2(TIM_TypeDef *TIMx, uint32_t CompareValue) -{ - WRITE_REG(TIMx->CCR2, CompareValue); -} - -/** - * @brief Set compare value for output channel 3 (TIMx_CCR3). - * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not - * output channel is supported by a timer instance. - * @rmtoll CCR3 CCR3 LL_TIM_OC_SetCompareCH3 - * @param TIMx Timer instance - * @param CompareValue between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetCompareCH3(TIM_TypeDef *TIMx, uint32_t CompareValue) -{ - WRITE_REG(TIMx->CCR3, CompareValue); -} - -/** - * @brief Set compare value for output channel 4 (TIMx_CCR4). - * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not - * output channel 4 is supported by a timer instance. - * @rmtoll CCR4 CCR4 LL_TIM_OC_SetCompareCH4 - * @param TIMx Timer instance - * @param CompareValue between Min_Data=0 and Max_Data=65535 - * @retval None - */ -__STATIC_INLINE void LL_TIM_OC_SetCompareCH4(TIM_TypeDef *TIMx, uint32_t CompareValue) -{ - WRITE_REG(TIMx->CCR4, CompareValue); -} - -/** - * @brief Get compare value (TIMx_CCR1) set for output channel 1. - * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not - * output channel 1 is supported by a timer instance. - * @rmtoll CCR1 CCR1 LL_TIM_OC_GetCompareCH1 - * @param TIMx Timer instance - * @retval CompareValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH1(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR1)); -} - -/** - * @brief Get compare value (TIMx_CCR2) set for output channel 2. - * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not - * output channel 2 is supported by a timer instance. - * @rmtoll CCR2 CCR2 LL_TIM_OC_GetCompareCH2 - * @param TIMx Timer instance - * @retval CompareValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH2(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR2)); -} - -/** - * @brief Get compare value (TIMx_CCR3) set for output channel 3. - * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not - * output channel 3 is supported by a timer instance. - * @rmtoll CCR3 CCR3 LL_TIM_OC_GetCompareCH3 - * @param TIMx Timer instance - * @retval CompareValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH3(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR3)); -} - -/** - * @brief Get compare value (TIMx_CCR4) set for output channel 4. - * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not - * output channel 4 is supported by a timer instance. - * @rmtoll CCR4 CCR4 LL_TIM_OC_GetCompareCH4 - * @param TIMx Timer instance - * @retval CompareValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_OC_GetCompareCH4(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR4)); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Input_Channel Input channel configuration - * @{ - */ -/** - * @brief Configure input channel. - * @rmtoll CCMR1 CC1S LL_TIM_IC_Config\n - * CCMR1 IC1PSC LL_TIM_IC_Config\n - * CCMR1 IC1F LL_TIM_IC_Config\n - * CCMR1 CC2S LL_TIM_IC_Config\n - * CCMR1 IC2PSC LL_TIM_IC_Config\n - * CCMR1 IC2F LL_TIM_IC_Config\n - * CCMR2 CC3S LL_TIM_IC_Config\n - * CCMR2 IC3PSC LL_TIM_IC_Config\n - * CCMR2 IC3F LL_TIM_IC_Config\n - * CCMR2 CC4S LL_TIM_IC_Config\n - * CCMR2 IC4PSC LL_TIM_IC_Config\n - * CCMR2 IC4F LL_TIM_IC_Config\n - * CCER CC1P LL_TIM_IC_Config\n - * CCER CC1NP LL_TIM_IC_Config\n - * CCER CC2P LL_TIM_IC_Config\n - * CCER CC2NP LL_TIM_IC_Config\n - * CCER CC3P LL_TIM_IC_Config\n - * CCER CC3NP LL_TIM_IC_Config\n - * CCER CC4P LL_TIM_IC_Config\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param Configuration This parameter must be a combination of all the following values: - * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI or @ref LL_TIM_ACTIVEINPUT_INDIRECTTI or @ref LL_TIM_ACTIVEINPUT_TRC - * @arg @ref LL_TIM_ICPSC_DIV1 or ... or @ref LL_TIM_ICPSC_DIV8 - * @arg @ref LL_TIM_IC_FILTER_FDIV1 or ... or @ref LL_TIM_IC_FILTER_FDIV32_N8 - * @arg @ref LL_TIM_IC_POLARITY_RISING or @ref LL_TIM_IC_POLARITY_FALLING - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_Config(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Configuration) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - MODIFY_REG(*pReg, ((TIM_CCMR1_IC1F | TIM_CCMR1_IC1PSC | TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel]), - ((Configuration >> 16U) & (TIM_CCMR1_IC1F | TIM_CCMR1_IC1PSC | TIM_CCMR1_CC1S)) \ - << SHIFT_TAB_ICxx[iChannel]); - MODIFY_REG(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]), - (Configuration & (TIM_CCER_CC1NP | TIM_CCER_CC1P)) << SHIFT_TAB_CCxP[iChannel]); -} - -/** - * @brief Set the active input. - * @rmtoll CCMR1 CC1S LL_TIM_IC_SetActiveInput\n - * CCMR1 CC2S LL_TIM_IC_SetActiveInput\n - * CCMR2 CC3S LL_TIM_IC_SetActiveInput\n - * CCMR2 CC4S LL_TIM_IC_SetActiveInput - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param ICActiveInput This parameter can be one of the following values: - * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI - * @arg @ref LL_TIM_ACTIVEINPUT_INDIRECTTI - * @arg @ref LL_TIM_ACTIVEINPUT_TRC - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_SetActiveInput(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICActiveInput) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - MODIFY_REG(*pReg, ((TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel]), (ICActiveInput >> 16U) << SHIFT_TAB_ICxx[iChannel]); -} - -/** - * @brief Get the current active input. - * @rmtoll CCMR1 CC1S LL_TIM_IC_GetActiveInput\n - * CCMR1 CC2S LL_TIM_IC_GetActiveInput\n - * CCMR2 CC3S LL_TIM_IC_GetActiveInput\n - * CCMR2 CC4S LL_TIM_IC_GetActiveInput - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_ACTIVEINPUT_DIRECTTI - * @arg @ref LL_TIM_ACTIVEINPUT_INDIRECTTI - * @arg @ref LL_TIM_ACTIVEINPUT_TRC - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetActiveInput(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - return ((READ_BIT(*pReg, ((TIM_CCMR1_CC1S) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); -} - -/** - * @brief Set the prescaler of input channel. - * @rmtoll CCMR1 IC1PSC LL_TIM_IC_SetPrescaler\n - * CCMR1 IC2PSC LL_TIM_IC_SetPrescaler\n - * CCMR2 IC3PSC LL_TIM_IC_SetPrescaler\n - * CCMR2 IC4PSC LL_TIM_IC_SetPrescaler - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param ICPrescaler This parameter can be one of the following values: - * @arg @ref LL_TIM_ICPSC_DIV1 - * @arg @ref LL_TIM_ICPSC_DIV2 - * @arg @ref LL_TIM_ICPSC_DIV4 - * @arg @ref LL_TIM_ICPSC_DIV8 - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_SetPrescaler(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICPrescaler) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - MODIFY_REG(*pReg, ((TIM_CCMR1_IC1PSC) << SHIFT_TAB_ICxx[iChannel]), (ICPrescaler >> 16U) << SHIFT_TAB_ICxx[iChannel]); -} - -/** - * @brief Get the current prescaler value acting on an input channel. - * @rmtoll CCMR1 IC1PSC LL_TIM_IC_GetPrescaler\n - * CCMR1 IC2PSC LL_TIM_IC_GetPrescaler\n - * CCMR2 IC3PSC LL_TIM_IC_GetPrescaler\n - * CCMR2 IC4PSC LL_TIM_IC_GetPrescaler - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_ICPSC_DIV1 - * @arg @ref LL_TIM_ICPSC_DIV2 - * @arg @ref LL_TIM_ICPSC_DIV4 - * @arg @ref LL_TIM_ICPSC_DIV8 - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetPrescaler(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - return ((READ_BIT(*pReg, ((TIM_CCMR1_IC1PSC) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); -} - -/** - * @brief Set the input filter duration. - * @rmtoll CCMR1 IC1F LL_TIM_IC_SetFilter\n - * CCMR1 IC2F LL_TIM_IC_SetFilter\n - * CCMR2 IC3F LL_TIM_IC_SetFilter\n - * CCMR2 IC4F LL_TIM_IC_SetFilter - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param ICFilter This parameter can be one of the following values: - * @arg @ref LL_TIM_IC_FILTER_FDIV1 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N2 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N4 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV2_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV2_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV4_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV4_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV8_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV8_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N5 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N5 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N8 - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_SetFilter(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICFilter) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - MODIFY_REG(*pReg, ((TIM_CCMR1_IC1F) << SHIFT_TAB_ICxx[iChannel]), (ICFilter >> 16U) << SHIFT_TAB_ICxx[iChannel]); -} - -/** - * @brief Get the input filter duration. - * @rmtoll CCMR1 IC1F LL_TIM_IC_GetFilter\n - * CCMR1 IC2F LL_TIM_IC_GetFilter\n - * CCMR2 IC3F LL_TIM_IC_GetFilter\n - * CCMR2 IC4F LL_TIM_IC_GetFilter - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_IC_FILTER_FDIV1 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N2 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N4 - * @arg @ref LL_TIM_IC_FILTER_FDIV1_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV2_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV2_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV4_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV4_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV8_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV8_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N5 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV16_N8 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N5 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N6 - * @arg @ref LL_TIM_IC_FILTER_FDIV32_N8 - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetFilter(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - const __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&TIMx->CCMR1) + OFFSET_TAB_CCMRx[iChannel])); - return ((READ_BIT(*pReg, ((TIM_CCMR1_IC1F) << SHIFT_TAB_ICxx[iChannel])) >> SHIFT_TAB_ICxx[iChannel]) << 16U); -} - -/** - * @brief Set the input channel polarity. - * @rmtoll CCER CC1P LL_TIM_IC_SetPolarity\n - * CCER CC1NP LL_TIM_IC_SetPolarity\n - * CCER CC2P LL_TIM_IC_SetPolarity\n - * CCER CC2NP LL_TIM_IC_SetPolarity\n - * CCER CC3P LL_TIM_IC_SetPolarity\n - * CCER CC3NP LL_TIM_IC_SetPolarity\n - * CCER CC4P LL_TIM_IC_SetPolarity\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @param ICPolarity This parameter can be one of the following values: - * @arg @ref LL_TIM_IC_POLARITY_RISING - * @arg @ref LL_TIM_IC_POLARITY_FALLING - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_SetPolarity(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ICPolarity) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - MODIFY_REG(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel]), - ICPolarity << SHIFT_TAB_CCxP[iChannel]); -} - -/** - * @brief Get the current input channel polarity. - * @rmtoll CCER CC1P LL_TIM_IC_GetPolarity\n - * CCER CC1NP LL_TIM_IC_GetPolarity\n - * CCER CC2P LL_TIM_IC_GetPolarity\n - * CCER CC2NP LL_TIM_IC_GetPolarity\n - * CCER CC3P LL_TIM_IC_GetPolarity\n - * CCER CC3NP LL_TIM_IC_GetPolarity\n - * CCER CC4P LL_TIM_IC_GetPolarity\n - * @param TIMx Timer instance - * @param Channel This parameter can be one of the following values: - * @arg @ref LL_TIM_CHANNEL_CH1 - * @arg @ref LL_TIM_CHANNEL_CH2 - * @arg @ref LL_TIM_CHANNEL_CH3 - * @arg @ref LL_TIM_CHANNEL_CH4 - * @retval Returned value can be one of the following values: - * @arg @ref LL_TIM_IC_POLARITY_RISING - * @arg @ref LL_TIM_IC_POLARITY_FALLING - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetPolarity(const TIM_TypeDef *TIMx, uint32_t Channel) -{ - uint8_t iChannel = TIM_GET_CHANNEL_INDEX(Channel); - return (READ_BIT(TIMx->CCER, ((TIM_CCER_CC1NP | TIM_CCER_CC1P) << SHIFT_TAB_CCxP[iChannel])) >> - SHIFT_TAB_CCxP[iChannel]); -} - -/** - * @brief Connect the TIMx_CH1, CH2 and CH3 pins to the TI1 input (XOR combination). - * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides an XOR input. - * @rmtoll CR2 TI1S LL_TIM_IC_EnableXORCombination - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_EnableXORCombination(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->CR2, TIM_CR2_TI1S); -} - -/** - * @brief Disconnect the TIMx_CH1, CH2 and CH3 pins from the TI1 input. - * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides an XOR input. - * @rmtoll CR2 TI1S LL_TIM_IC_DisableXORCombination - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_IC_DisableXORCombination(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->CR2, TIM_CR2_TI1S); -} - -/** - * @brief Indicates whether the TIMx_CH1, CH2 and CH3 pins are connectected to the TI1 input. - * @note Macro IS_TIM_XOR_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides an XOR input. - * @rmtoll CR2 TI1S LL_TIM_IC_IsEnabledXORCombination - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IC_IsEnabledXORCombination(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->CR2, TIM_CR2_TI1S) == (TIM_CR2_TI1S)) ? 1UL : 0UL); -} - -/** - * @brief Get captured value for input channel 1. - * @note Macro IS_TIM_CC1_INSTANCE(TIMx) can be used to check whether or not - * input channel 1 is supported by a timer instance. - * @rmtoll CCR1 CCR1 LL_TIM_IC_GetCaptureCH1 - * @param TIMx Timer instance - * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH1(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR1)); -} - -/** - * @brief Get captured value for input channel 2. - * @note Macro IS_TIM_CC2_INSTANCE(TIMx) can be used to check whether or not - * input channel 2 is supported by a timer instance. - * @rmtoll CCR2 CCR2 LL_TIM_IC_GetCaptureCH2 - * @param TIMx Timer instance - * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH2(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR2)); -} - -/** - * @brief Get captured value for input channel 3. - * @note Macro IS_TIM_CC3_INSTANCE(TIMx) can be used to check whether or not - * input channel 3 is supported by a timer instance. - * @rmtoll CCR3 CCR3 LL_TIM_IC_GetCaptureCH3 - * @param TIMx Timer instance - * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH3(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR3)); -} - -/** - * @brief Get captured value for input channel 4. - * @note Macro IS_TIM_CC4_INSTANCE(TIMx) can be used to check whether or not - * input channel 4 is supported by a timer instance. - * @rmtoll CCR4 CCR4 LL_TIM_IC_GetCaptureCH4 - * @param TIMx Timer instance - * @retval CapturedValue (between Min_Data=0 and Max_Data=65535) - */ -__STATIC_INLINE uint32_t LL_TIM_IC_GetCaptureCH4(const TIM_TypeDef *TIMx) -{ - return (uint32_t)(READ_REG(TIMx->CCR4)); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Clock_Selection Counter clock selection - * @{ - */ -/** - * @brief Enable external clock mode 2. - * @note When external clock mode 2 is enabled the counter is clocked by any active edge on the ETRF signal. - * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports external clock mode2. - * @rmtoll SMCR ECE LL_TIM_EnableExternalClock - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableExternalClock(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->SMCR, TIM_SMCR_ECE); -} - -/** - * @brief Disable external clock mode 2. - * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports external clock mode2. - * @rmtoll SMCR ECE LL_TIM_DisableExternalClock - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableExternalClock(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->SMCR, TIM_SMCR_ECE); -} - -/** - * @brief Indicate whether external clock mode 2 is enabled. - * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports external clock mode2. - * @rmtoll SMCR ECE LL_TIM_IsEnabledExternalClock - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledExternalClock(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SMCR, TIM_SMCR_ECE) == (TIM_SMCR_ECE)) ? 1UL : 0UL); -} - -/** - * @brief Set the clock source of the counter clock. - * @note when selected clock source is external clock mode 1, the timer input - * the external clock is applied is selected by calling the @ref LL_TIM_SetTriggerInput() - * function. This timer input must be configured by calling - * the @ref LL_TIM_IC_Config() function. - * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports external clock mode1. - * @note Macro IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports external clock mode2. - * @rmtoll SMCR SMS LL_TIM_SetClockSource\n - * SMCR ECE LL_TIM_SetClockSource - * @param TIMx Timer instance - * @param ClockSource This parameter can be one of the following values: - * @arg @ref LL_TIM_CLOCKSOURCE_INTERNAL - * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE1 - * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE2 - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetClockSource(TIM_TypeDef *TIMx, uint32_t ClockSource) -{ - MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS | TIM_SMCR_ECE, ClockSource); -} - -/** - * @brief Set the encoder interface mode. - * @note Macro IS_TIM_ENCODER_INTERFACE_INSTANCE(TIMx) can be used to check - * whether or not a timer instance supports the encoder mode. - * @rmtoll SMCR SMS LL_TIM_SetEncoderMode - * @param TIMx Timer instance - * @param EncoderMode This parameter can be one of the following values: - * @arg @ref LL_TIM_ENCODERMODE_X2_TI1 - * @arg @ref LL_TIM_ENCODERMODE_X2_TI2 - * @arg @ref LL_TIM_ENCODERMODE_X4_TI12 - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetEncoderMode(TIM_TypeDef *TIMx, uint32_t EncoderMode) -{ - MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS, EncoderMode); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Timer_Synchronization Timer synchronisation configuration - * @{ - */ -/** - * @brief Set the trigger output (TRGO) used for timer synchronization . - * @note Macro IS_TIM_MASTER_INSTANCE(TIMx) can be used to check - * whether or not a timer instance can operate as a master timer. - * @rmtoll CR2 MMS LL_TIM_SetTriggerOutput - * @param TIMx Timer instance - * @param TimerSynchronization This parameter can be one of the following values: - * @arg @ref LL_TIM_TRGO_RESET - * @arg @ref LL_TIM_TRGO_ENABLE - * @arg @ref LL_TIM_TRGO_UPDATE - * @arg @ref LL_TIM_TRGO_CC1IF - * @arg @ref LL_TIM_TRGO_OC1REF - * @arg @ref LL_TIM_TRGO_OC2REF - * @arg @ref LL_TIM_TRGO_OC3REF - * @arg @ref LL_TIM_TRGO_OC4REF - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetTriggerOutput(TIM_TypeDef *TIMx, uint32_t TimerSynchronization) -{ - MODIFY_REG(TIMx->CR2, TIM_CR2_MMS, TimerSynchronization); -} - -/** - * @brief Set the synchronization mode of a slave timer. - * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not - * a timer instance can operate as a slave timer. - * @rmtoll SMCR SMS LL_TIM_SetSlaveMode - * @param TIMx Timer instance - * @param SlaveMode This parameter can be one of the following values: - * @arg @ref LL_TIM_SLAVEMODE_DISABLED - * @arg @ref LL_TIM_SLAVEMODE_RESET - * @arg @ref LL_TIM_SLAVEMODE_GATED - * @arg @ref LL_TIM_SLAVEMODE_TRIGGER - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetSlaveMode(TIM_TypeDef *TIMx, uint32_t SlaveMode) -{ - MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS, SlaveMode); -} - -/** - * @brief Set the selects the trigger input to be used to synchronize the counter. - * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not - * a timer instance can operate as a slave timer. - * @rmtoll SMCR TS LL_TIM_SetTriggerInput - * @param TIMx Timer instance - * @param TriggerInput This parameter can be one of the following values: - * @arg @ref LL_TIM_TS_ITR0 - * @arg @ref LL_TIM_TS_ITR1 - * @arg @ref LL_TIM_TS_ITR2 - * @arg @ref LL_TIM_TS_ITR3 - * @arg @ref LL_TIM_TS_TI1F_ED - * @arg @ref LL_TIM_TS_TI1FP1 - * @arg @ref LL_TIM_TS_TI2FP2 - * @arg @ref LL_TIM_TS_ETRF - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetTriggerInput(TIM_TypeDef *TIMx, uint32_t TriggerInput) -{ - MODIFY_REG(TIMx->SMCR, TIM_SMCR_TS, TriggerInput); -} - -/** - * @brief Enable the Master/Slave mode. - * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not - * a timer instance can operate as a slave timer. - * @rmtoll SMCR MSM LL_TIM_EnableMasterSlaveMode - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableMasterSlaveMode(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->SMCR, TIM_SMCR_MSM); -} - -/** - * @brief Disable the Master/Slave mode. - * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not - * a timer instance can operate as a slave timer. - * @rmtoll SMCR MSM LL_TIM_DisableMasterSlaveMode - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableMasterSlaveMode(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->SMCR, TIM_SMCR_MSM); -} - -/** - * @brief Indicates whether the Master/Slave mode is enabled. - * @note Macro IS_TIM_SLAVE_INSTANCE(TIMx) can be used to check whether or not - * a timer instance can operate as a slave timer. - * @rmtoll SMCR MSM LL_TIM_IsEnabledMasterSlaveMode - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledMasterSlaveMode(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SMCR, TIM_SMCR_MSM) == (TIM_SMCR_MSM)) ? 1UL : 0UL); -} - -/** - * @brief Configure the external trigger (ETR) input. - * @note Macro IS_TIM_ETR_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides an external trigger input. - * @rmtoll SMCR ETP LL_TIM_ConfigETR\n - * SMCR ETPS LL_TIM_ConfigETR\n - * SMCR ETF LL_TIM_ConfigETR - * @param TIMx Timer instance - * @param ETRPolarity This parameter can be one of the following values: - * @arg @ref LL_TIM_ETR_POLARITY_NONINVERTED - * @arg @ref LL_TIM_ETR_POLARITY_INVERTED - * @param ETRPrescaler This parameter can be one of the following values: - * @arg @ref LL_TIM_ETR_PRESCALER_DIV1 - * @arg @ref LL_TIM_ETR_PRESCALER_DIV2 - * @arg @ref LL_TIM_ETR_PRESCALER_DIV4 - * @arg @ref LL_TIM_ETR_PRESCALER_DIV8 - * @param ETRFilter This parameter can be one of the following values: - * @arg @ref LL_TIM_ETR_FILTER_FDIV1 - * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N2 - * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N4 - * @arg @ref LL_TIM_ETR_FILTER_FDIV1_N8 - * @arg @ref LL_TIM_ETR_FILTER_FDIV2_N6 - * @arg @ref LL_TIM_ETR_FILTER_FDIV2_N8 - * @arg @ref LL_TIM_ETR_FILTER_FDIV4_N6 - * @arg @ref LL_TIM_ETR_FILTER_FDIV4_N8 - * @arg @ref LL_TIM_ETR_FILTER_FDIV8_N6 - * @arg @ref LL_TIM_ETR_FILTER_FDIV8_N8 - * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N5 - * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N6 - * @arg @ref LL_TIM_ETR_FILTER_FDIV16_N8 - * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N5 - * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N6 - * @arg @ref LL_TIM_ETR_FILTER_FDIV32_N8 - * @retval None - */ -__STATIC_INLINE void LL_TIM_ConfigETR(TIM_TypeDef *TIMx, uint32_t ETRPolarity, uint32_t ETRPrescaler, - uint32_t ETRFilter) -{ - MODIFY_REG(TIMx->SMCR, TIM_SMCR_ETP | TIM_SMCR_ETPS | TIM_SMCR_ETF, ETRPolarity | ETRPrescaler | ETRFilter); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_Break_Function Break function configuration - * @{ - */ -/** - * @brief Enable the break function. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR BKE LL_TIM_EnableBRK - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableBRK(TIM_TypeDef *TIMx) -{ - __IO uint32_t tmpreg; - SET_BIT(TIMx->BDTR, TIM_BDTR_BKE); - /* Note: Any write operation to this bit takes a delay of 1 APB clock cycle to become effective. */ - tmpreg = READ_REG(TIMx->BDTR); - (void)(tmpreg); -} - -/** - * @brief Disable the break function. - * @rmtoll BDTR BKE LL_TIM_DisableBRK - * @param TIMx Timer instance - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableBRK(TIM_TypeDef *TIMx) -{ - __IO uint32_t tmpreg; - CLEAR_BIT(TIMx->BDTR, TIM_BDTR_BKE); - /* Note: Any write operation to this bit takes a delay of 1 APB clock cycle to become effective. */ - tmpreg = READ_REG(TIMx->BDTR); - (void)(tmpreg); -} - -/** - * @brief Configure the break input. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR BKP LL_TIM_ConfigBRK - * @param TIMx Timer instance - * @param BreakPolarity This parameter can be one of the following values: - * @arg @ref LL_TIM_BREAK_POLARITY_LOW - * @arg @ref LL_TIM_BREAK_POLARITY_HIGH - * @retval None - */ -__STATIC_INLINE void LL_TIM_ConfigBRK(TIM_TypeDef *TIMx, uint32_t BreakPolarity) -{ - __IO uint32_t tmpreg; - MODIFY_REG(TIMx->BDTR, TIM_BDTR_BKP, BreakPolarity); - /* Note: Any write operation to BKP bit takes a delay of 1 APB clock cycle to become effective. */ - tmpreg = READ_REG(TIMx->BDTR); - (void)(tmpreg); -} - -/** - * @brief Select the outputs off state (enabled v.s. disabled) in Idle and Run modes. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR OSSI LL_TIM_SetOffStates\n - * BDTR OSSR LL_TIM_SetOffStates - * @param TIMx Timer instance - * @param OffStateIdle This parameter can be one of the following values: - * @arg @ref LL_TIM_OSSI_DISABLE - * @arg @ref LL_TIM_OSSI_ENABLE - * @param OffStateRun This parameter can be one of the following values: - * @arg @ref LL_TIM_OSSR_DISABLE - * @arg @ref LL_TIM_OSSR_ENABLE - * @retval None - */ -__STATIC_INLINE void LL_TIM_SetOffStates(TIM_TypeDef *TIMx, uint32_t OffStateIdle, uint32_t OffStateRun) -{ - MODIFY_REG(TIMx->BDTR, TIM_BDTR_OSSI | TIM_BDTR_OSSR, OffStateIdle | OffStateRun); -} - -/** - * @brief Enable automatic output (MOE can be set by software or automatically when a break input is active). - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR AOE LL_TIM_EnableAutomaticOutput - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableAutomaticOutput(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->BDTR, TIM_BDTR_AOE); -} - -/** - * @brief Disable automatic output (MOE can be set only by software). - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR AOE LL_TIM_DisableAutomaticOutput - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableAutomaticOutput(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->BDTR, TIM_BDTR_AOE); -} - -/** - * @brief Indicate whether automatic output is enabled. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR AOE LL_TIM_IsEnabledAutomaticOutput - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledAutomaticOutput(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->BDTR, TIM_BDTR_AOE) == (TIM_BDTR_AOE)) ? 1UL : 0UL); -} - -/** - * @brief Enable the outputs (set the MOE bit in TIMx_BDTR register). - * @note The MOE bit in TIMx_BDTR register allows to enable /disable the outputs by - * software and is reset in case of break or break2 event - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR MOE LL_TIM_EnableAllOutputs - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableAllOutputs(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->BDTR, TIM_BDTR_MOE); -} - -/** - * @brief Disable the outputs (reset the MOE bit in TIMx_BDTR register). - * @note The MOE bit in TIMx_BDTR register allows to enable /disable the outputs by - * software and is reset in case of break or break2 event. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR MOE LL_TIM_DisableAllOutputs - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableAllOutputs(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->BDTR, TIM_BDTR_MOE); -} - -/** - * @brief Indicates whether outputs are enabled. - * @note Macro IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not - * a timer instance provides a break input. - * @rmtoll BDTR MOE LL_TIM_IsEnabledAllOutputs - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledAllOutputs(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->BDTR, TIM_BDTR_MOE) == (TIM_BDTR_MOE)) ? 1UL : 0UL); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_DMA_Burst_Mode DMA burst mode configuration - * @{ - */ -/** - * @brief Configures the timer DMA burst feature. - * @note Macro IS_TIM_DMABURST_INSTANCE(TIMx) can be used to check whether or - * not a timer instance supports the DMA burst mode. - * @rmtoll DCR DBL LL_TIM_ConfigDMABurst\n - * DCR DBA LL_TIM_ConfigDMABurst - * @param TIMx Timer instance - * @param DMABurstBaseAddress This parameter can be one of the following values: - * @arg @ref LL_TIM_DMABURST_BASEADDR_CR1 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CR2 - * @arg @ref LL_TIM_DMABURST_BASEADDR_SMCR - * @arg @ref LL_TIM_DMABURST_BASEADDR_DIER - * @arg @ref LL_TIM_DMABURST_BASEADDR_SR - * @arg @ref LL_TIM_DMABURST_BASEADDR_EGR - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCMR1 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCMR2 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCER - * @arg @ref LL_TIM_DMABURST_BASEADDR_CNT - * @arg @ref LL_TIM_DMABURST_BASEADDR_PSC - * @arg @ref LL_TIM_DMABURST_BASEADDR_ARR - * @arg @ref LL_TIM_DMABURST_BASEADDR_RCR - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR1 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR2 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR3 - * @arg @ref LL_TIM_DMABURST_BASEADDR_CCR4 - * @arg @ref LL_TIM_DMABURST_BASEADDR_BDTR - * @param DMABurstLength This parameter can be one of the following values: - * @arg @ref LL_TIM_DMABURST_LENGTH_1TRANSFER - * @arg @ref LL_TIM_DMABURST_LENGTH_2TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_3TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_4TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_5TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_6TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_7TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_8TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_9TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_10TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_11TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_12TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_13TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_14TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_15TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_16TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_17TRANSFERS - * @arg @ref LL_TIM_DMABURST_LENGTH_18TRANSFERS - * @retval None - */ -__STATIC_INLINE void LL_TIM_ConfigDMABurst(TIM_TypeDef *TIMx, uint32_t DMABurstBaseAddress, uint32_t DMABurstLength) -{ - MODIFY_REG(TIMx->DCR, (TIM_DCR_DBL | TIM_DCR_DBA), (DMABurstBaseAddress | DMABurstLength)); -} - -/** - * @} - */ - - -/** @defgroup TIM_LL_EF_FLAG_Management FLAG-Management - * @{ - */ -/** - * @brief Clear the update interrupt flag (UIF). - * @rmtoll SR UIF LL_TIM_ClearFlag_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_UPDATE(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_UIF)); -} - -/** - * @brief Indicate whether update interrupt flag (UIF) is set (update interrupt is pending). - * @rmtoll SR UIF LL_TIM_IsActiveFlag_UPDATE - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_UPDATE(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_UIF) == (TIM_SR_UIF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 1 interrupt flag (CC1F). - * @rmtoll SR CC1IF LL_TIM_ClearFlag_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC1(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC1IF)); -} - -/** - * @brief Indicate whether Capture/Compare 1 interrupt flag (CC1F) is set (Capture/Compare 1 interrupt is pending). - * @rmtoll SR CC1IF LL_TIM_IsActiveFlag_CC1 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC1(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC1IF) == (TIM_SR_CC1IF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 2 interrupt flag (CC2F). - * @rmtoll SR CC2IF LL_TIM_ClearFlag_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC2(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC2IF)); -} - -/** - * @brief Indicate whether Capture/Compare 2 interrupt flag (CC2F) is set (Capture/Compare 2 interrupt is pending). - * @rmtoll SR CC2IF LL_TIM_IsActiveFlag_CC2 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC2(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC2IF) == (TIM_SR_CC2IF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 3 interrupt flag (CC3F). - * @rmtoll SR CC3IF LL_TIM_ClearFlag_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC3(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC3IF)); -} - -/** - * @brief Indicate whether Capture/Compare 3 interrupt flag (CC3F) is set (Capture/Compare 3 interrupt is pending). - * @rmtoll SR CC3IF LL_TIM_IsActiveFlag_CC3 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC3(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC3IF) == (TIM_SR_CC3IF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 4 interrupt flag (CC4F). - * @rmtoll SR CC4IF LL_TIM_ClearFlag_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC4(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC4IF)); -} - -/** - * @brief Indicate whether Capture/Compare 4 interrupt flag (CC4F) is set (Capture/Compare 4 interrupt is pending). - * @rmtoll SR CC4IF LL_TIM_IsActiveFlag_CC4 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC4(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC4IF) == (TIM_SR_CC4IF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the commutation interrupt flag (COMIF). - * @rmtoll SR COMIF LL_TIM_ClearFlag_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_COM(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_COMIF)); -} - -/** - * @brief Indicate whether commutation interrupt flag (COMIF) is set (commutation interrupt is pending). - * @rmtoll SR COMIF LL_TIM_IsActiveFlag_COM - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_COM(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_COMIF) == (TIM_SR_COMIF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the trigger interrupt flag (TIF). - * @rmtoll SR TIF LL_TIM_ClearFlag_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_TRIG(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_TIF)); -} - -/** - * @brief Indicate whether trigger interrupt flag (TIF) is set (trigger interrupt is pending). - * @rmtoll SR TIF LL_TIM_IsActiveFlag_TRIG - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_TRIG(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_TIF) == (TIM_SR_TIF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the break interrupt flag (BIF). - * @rmtoll SR BIF LL_TIM_ClearFlag_BRK - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_BRK(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_BIF)); -} - -/** - * @brief Indicate whether break interrupt flag (BIF) is set (break interrupt is pending). - * @rmtoll SR BIF LL_TIM_IsActiveFlag_BRK - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_BRK(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_BIF) == (TIM_SR_BIF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 1 over-capture interrupt flag (CC1OF). - * @rmtoll SR CC1OF LL_TIM_ClearFlag_CC1OVR - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC1OVR(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC1OF)); -} - -/** - * @brief Indicate whether Capture/Compare 1 over-capture interrupt flag (CC1OF) is set - * (Capture/Compare 1 interrupt is pending). - * @rmtoll SR CC1OF LL_TIM_IsActiveFlag_CC1OVR - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC1OVR(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC1OF) == (TIM_SR_CC1OF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 2 over-capture interrupt flag (CC2OF). - * @rmtoll SR CC2OF LL_TIM_ClearFlag_CC2OVR - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC2OVR(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC2OF)); -} - -/** - * @brief Indicate whether Capture/Compare 2 over-capture interrupt flag (CC2OF) is set - * (Capture/Compare 2 over-capture interrupt is pending). - * @rmtoll SR CC2OF LL_TIM_IsActiveFlag_CC2OVR - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC2OVR(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC2OF) == (TIM_SR_CC2OF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 3 over-capture interrupt flag (CC3OF). - * @rmtoll SR CC3OF LL_TIM_ClearFlag_CC3OVR - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC3OVR(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC3OF)); -} - -/** - * @brief Indicate whether Capture/Compare 3 over-capture interrupt flag (CC3OF) is set - * (Capture/Compare 3 over-capture interrupt is pending). - * @rmtoll SR CC3OF LL_TIM_IsActiveFlag_CC3OVR - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC3OVR(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC3OF) == (TIM_SR_CC3OF)) ? 1UL : 0UL); -} - -/** - * @brief Clear the Capture/Compare 4 over-capture interrupt flag (CC4OF). - * @rmtoll SR CC4OF LL_TIM_ClearFlag_CC4OVR - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_ClearFlag_CC4OVR(TIM_TypeDef *TIMx) -{ - WRITE_REG(TIMx->SR, ~(TIM_SR_CC4OF)); -} - -/** - * @brief Indicate whether Capture/Compare 4 over-capture interrupt flag (CC4OF) is set - * (Capture/Compare 4 over-capture interrupt is pending). - * @rmtoll SR CC4OF LL_TIM_IsActiveFlag_CC4OVR - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_CC4OVR(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->SR, TIM_SR_CC4OF) == (TIM_SR_CC4OF)) ? 1UL : 0UL); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_IT_Management IT-Management - * @{ - */ -/** - * @brief Enable update interrupt (UIE). - * @rmtoll DIER UIE LL_TIM_EnableIT_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_UPDATE(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_UIE); -} - -/** - * @brief Disable update interrupt (UIE). - * @rmtoll DIER UIE LL_TIM_DisableIT_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_UPDATE(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_UIE); -} - -/** - * @brief Indicates whether the update interrupt (UIE) is enabled. - * @rmtoll DIER UIE LL_TIM_IsEnabledIT_UPDATE - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_UPDATE(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_UIE) == (TIM_DIER_UIE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 1 interrupt (CC1IE). - * @rmtoll DIER CC1IE LL_TIM_EnableIT_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_CC1(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC1IE); -} - -/** - * @brief Disable capture/compare 1 interrupt (CC1IE). - * @rmtoll DIER CC1IE LL_TIM_DisableIT_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_CC1(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC1IE); -} - -/** - * @brief Indicates whether the capture/compare 1 interrupt (CC1IE) is enabled. - * @rmtoll DIER CC1IE LL_TIM_IsEnabledIT_CC1 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC1(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC1IE) == (TIM_DIER_CC1IE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 2 interrupt (CC2IE). - * @rmtoll DIER CC2IE LL_TIM_EnableIT_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_CC2(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC2IE); -} - -/** - * @brief Disable capture/compare 2 interrupt (CC2IE). - * @rmtoll DIER CC2IE LL_TIM_DisableIT_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_CC2(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC2IE); -} - -/** - * @brief Indicates whether the capture/compare 2 interrupt (CC2IE) is enabled. - * @rmtoll DIER CC2IE LL_TIM_IsEnabledIT_CC2 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC2(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC2IE) == (TIM_DIER_CC2IE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 3 interrupt (CC3IE). - * @rmtoll DIER CC3IE LL_TIM_EnableIT_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_CC3(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC3IE); -} - -/** - * @brief Disable capture/compare 3 interrupt (CC3IE). - * @rmtoll DIER CC3IE LL_TIM_DisableIT_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_CC3(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC3IE); -} - -/** - * @brief Indicates whether the capture/compare 3 interrupt (CC3IE) is enabled. - * @rmtoll DIER CC3IE LL_TIM_IsEnabledIT_CC3 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC3(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC3IE) == (TIM_DIER_CC3IE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 4 interrupt (CC4IE). - * @rmtoll DIER CC4IE LL_TIM_EnableIT_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_CC4(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC4IE); -} - -/** - * @brief Disable capture/compare 4 interrupt (CC4IE). - * @rmtoll DIER CC4IE LL_TIM_DisableIT_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_CC4(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC4IE); -} - -/** - * @brief Indicates whether the capture/compare 4 interrupt (CC4IE) is enabled. - * @rmtoll DIER CC4IE LL_TIM_IsEnabledIT_CC4 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_CC4(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC4IE) == (TIM_DIER_CC4IE)) ? 1UL : 0UL); -} - -/** - * @brief Enable commutation interrupt (COMIE). - * @rmtoll DIER COMIE LL_TIM_EnableIT_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_COM(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_COMIE); -} - -/** - * @brief Disable commutation interrupt (COMIE). - * @rmtoll DIER COMIE LL_TIM_DisableIT_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_COM(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_COMIE); -} - -/** - * @brief Indicates whether the commutation interrupt (COMIE) is enabled. - * @rmtoll DIER COMIE LL_TIM_IsEnabledIT_COM - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_COM(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_COMIE) == (TIM_DIER_COMIE)) ? 1UL : 0UL); -} - -/** - * @brief Enable trigger interrupt (TIE). - * @rmtoll DIER TIE LL_TIM_EnableIT_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_TRIG(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_TIE); -} - -/** - * @brief Disable trigger interrupt (TIE). - * @rmtoll DIER TIE LL_TIM_DisableIT_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_TRIG(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_TIE); -} - -/** - * @brief Indicates whether the trigger interrupt (TIE) is enabled. - * @rmtoll DIER TIE LL_TIM_IsEnabledIT_TRIG - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_TRIG(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_TIE) == (TIM_DIER_TIE)) ? 1UL : 0UL); -} - -/** - * @brief Enable break interrupt (BIE). - * @rmtoll DIER BIE LL_TIM_EnableIT_BRK - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableIT_BRK(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_BIE); -} - -/** - * @brief Disable break interrupt (BIE). - * @rmtoll DIER BIE LL_TIM_DisableIT_BRK - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableIT_BRK(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_BIE); -} - -/** - * @brief Indicates whether the break interrupt (BIE) is enabled. - * @rmtoll DIER BIE LL_TIM_IsEnabledIT_BRK - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_BRK(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_BIE) == (TIM_DIER_BIE)) ? 1UL : 0UL); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_DMA_Management DMA Management - * @{ - */ -/** - * @brief Enable update DMA request (UDE). - * @rmtoll DIER UDE LL_TIM_EnableDMAReq_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_UPDATE(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_UDE); -} - -/** - * @brief Disable update DMA request (UDE). - * @rmtoll DIER UDE LL_TIM_DisableDMAReq_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_UPDATE(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_UDE); -} - -/** - * @brief Indicates whether the update DMA request (UDE) is enabled. - * @rmtoll DIER UDE LL_TIM_IsEnabledDMAReq_UPDATE - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_UPDATE(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_UDE) == (TIM_DIER_UDE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 1 DMA request (CC1DE). - * @rmtoll DIER CC1DE LL_TIM_EnableDMAReq_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_CC1(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC1DE); -} - -/** - * @brief Disable capture/compare 1 DMA request (CC1DE). - * @rmtoll DIER CC1DE LL_TIM_DisableDMAReq_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_CC1(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC1DE); -} - -/** - * @brief Indicates whether the capture/compare 1 DMA request (CC1DE) is enabled. - * @rmtoll DIER CC1DE LL_TIM_IsEnabledDMAReq_CC1 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC1(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC1DE) == (TIM_DIER_CC1DE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 2 DMA request (CC2DE). - * @rmtoll DIER CC2DE LL_TIM_EnableDMAReq_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_CC2(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC2DE); -} - -/** - * @brief Disable capture/compare 2 DMA request (CC2DE). - * @rmtoll DIER CC2DE LL_TIM_DisableDMAReq_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_CC2(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC2DE); -} - -/** - * @brief Indicates whether the capture/compare 2 DMA request (CC2DE) is enabled. - * @rmtoll DIER CC2DE LL_TIM_IsEnabledDMAReq_CC2 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC2(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC2DE) == (TIM_DIER_CC2DE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 3 DMA request (CC3DE). - * @rmtoll DIER CC3DE LL_TIM_EnableDMAReq_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_CC3(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC3DE); -} - -/** - * @brief Disable capture/compare 3 DMA request (CC3DE). - * @rmtoll DIER CC3DE LL_TIM_DisableDMAReq_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_CC3(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC3DE); -} - -/** - * @brief Indicates whether the capture/compare 3 DMA request (CC3DE) is enabled. - * @rmtoll DIER CC3DE LL_TIM_IsEnabledDMAReq_CC3 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC3(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC3DE) == (TIM_DIER_CC3DE)) ? 1UL : 0UL); -} - -/** - * @brief Enable capture/compare 4 DMA request (CC4DE). - * @rmtoll DIER CC4DE LL_TIM_EnableDMAReq_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_CC4(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_CC4DE); -} - -/** - * @brief Disable capture/compare 4 DMA request (CC4DE). - * @rmtoll DIER CC4DE LL_TIM_DisableDMAReq_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_CC4(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_CC4DE); -} - -/** - * @brief Indicates whether the capture/compare 4 DMA request (CC4DE) is enabled. - * @rmtoll DIER CC4DE LL_TIM_IsEnabledDMAReq_CC4 - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_CC4(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_CC4DE) == (TIM_DIER_CC4DE)) ? 1UL : 0UL); -} - -/** - * @brief Enable commutation DMA request (COMDE). - * @rmtoll DIER COMDE LL_TIM_EnableDMAReq_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_COM(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_COMDE); -} - -/** - * @brief Disable commutation DMA request (COMDE). - * @rmtoll DIER COMDE LL_TIM_DisableDMAReq_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_COM(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_COMDE); -} - -/** - * @brief Indicates whether the commutation DMA request (COMDE) is enabled. - * @rmtoll DIER COMDE LL_TIM_IsEnabledDMAReq_COM - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_COM(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_COMDE) == (TIM_DIER_COMDE)) ? 1UL : 0UL); -} - -/** - * @brief Enable trigger interrupt (TDE). - * @rmtoll DIER TDE LL_TIM_EnableDMAReq_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_EnableDMAReq_TRIG(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->DIER, TIM_DIER_TDE); -} - -/** - * @brief Disable trigger interrupt (TDE). - * @rmtoll DIER TDE LL_TIM_DisableDMAReq_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_DisableDMAReq_TRIG(TIM_TypeDef *TIMx) -{ - CLEAR_BIT(TIMx->DIER, TIM_DIER_TDE); -} - -/** - * @brief Indicates whether the trigger interrupt (TDE) is enabled. - * @rmtoll DIER TDE LL_TIM_IsEnabledDMAReq_TRIG - * @param TIMx Timer instance - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_TIM_IsEnabledDMAReq_TRIG(const TIM_TypeDef *TIMx) -{ - return ((READ_BIT(TIMx->DIER, TIM_DIER_TDE) == (TIM_DIER_TDE)) ? 1UL : 0UL); -} - -/** - * @} - */ - -/** @defgroup TIM_LL_EF_EVENT_Management EVENT-Management - * @{ - */ -/** - * @brief Generate an update event. - * @rmtoll EGR UG LL_TIM_GenerateEvent_UPDATE - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_UPDATE(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_UG); -} - -/** - * @brief Generate Capture/Compare 1 event. - * @rmtoll EGR CC1G LL_TIM_GenerateEvent_CC1 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_CC1(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_CC1G); -} - -/** - * @brief Generate Capture/Compare 2 event. - * @rmtoll EGR CC2G LL_TIM_GenerateEvent_CC2 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_CC2(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_CC2G); -} - -/** - * @brief Generate Capture/Compare 3 event. - * @rmtoll EGR CC3G LL_TIM_GenerateEvent_CC3 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_CC3(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_CC3G); -} - -/** - * @brief Generate Capture/Compare 4 event. - * @rmtoll EGR CC4G LL_TIM_GenerateEvent_CC4 - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_CC4(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_CC4G); -} - -/** - * @brief Generate commutation event. - * @rmtoll EGR COMG LL_TIM_GenerateEvent_COM - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_COM(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_COMG); -} - -/** - * @brief Generate trigger event. - * @rmtoll EGR TG LL_TIM_GenerateEvent_TRIG - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_TRIG(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_TG); -} - -/** - * @brief Generate break event. - * @rmtoll EGR BG LL_TIM_GenerateEvent_BRK - * @param TIMx Timer instance - * @retval None - */ -__STATIC_INLINE void LL_TIM_GenerateEvent_BRK(TIM_TypeDef *TIMx) -{ - SET_BIT(TIMx->EGR, TIM_EGR_BG); -} - -/** - * @} - */ - -#if defined(USE_FULL_LL_DRIVER) -/** @defgroup TIM_LL_EF_Init Initialisation and deinitialisation functions - * @{ - */ - -ErrorStatus LL_TIM_DeInit(const TIM_TypeDef *TIMx); -void LL_TIM_StructInit(LL_TIM_InitTypeDef *TIM_InitStruct); -ErrorStatus LL_TIM_Init(TIM_TypeDef *TIMx, const LL_TIM_InitTypeDef *TIM_InitStruct); -void LL_TIM_OC_StructInit(LL_TIM_OC_InitTypeDef *TIM_OC_InitStruct); -ErrorStatus LL_TIM_OC_Init(TIM_TypeDef *TIMx, uint32_t Channel, const LL_TIM_OC_InitTypeDef *TIM_OC_InitStruct); -void LL_TIM_IC_StructInit(LL_TIM_IC_InitTypeDef *TIM_ICInitStruct); -ErrorStatus LL_TIM_IC_Init(TIM_TypeDef *TIMx, uint32_t Channel, const LL_TIM_IC_InitTypeDef *TIM_IC_InitStruct); -void LL_TIM_ENCODER_StructInit(LL_TIM_ENCODER_InitTypeDef *TIM_EncoderInitStruct); -ErrorStatus LL_TIM_ENCODER_Init(TIM_TypeDef *TIMx, const LL_TIM_ENCODER_InitTypeDef *TIM_EncoderInitStruct); -void LL_TIM_HALLSENSOR_StructInit(LL_TIM_HALLSENSOR_InitTypeDef *TIM_HallSensorInitStruct); -ErrorStatus LL_TIM_HALLSENSOR_Init(TIM_TypeDef *TIMx, const LL_TIM_HALLSENSOR_InitTypeDef *TIM_HallSensorInitStruct); -void LL_TIM_BDTR_StructInit(LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct); -ErrorStatus LL_TIM_BDTR_Init(TIM_TypeDef *TIMx, const LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct); -/** - * @} - */ -#endif /* USE_FULL_LL_DRIVER */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* TIM1 || TIM2 || TIM3 || TIM4 || TIM5 || TIM6 || TIM7 || TIM8 || TIM9 || TIM10 || TIM11 || TIM12 || TIM13 || TIM14 || TIM15 || TIM16 || TIM17 */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_LL_TIM_H */ diff --git a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c b/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c deleted file mode 100644 index c00a9de..0000000 --- a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c +++ /dev/null @@ -1,7629 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_tim.c - * @author MCD Application Team - * @brief TIM HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Timer (TIM) peripheral: - * + TIM Time Base Initialization - * + TIM Time Base Start - * + TIM Time Base Start Interruption - * + TIM Time Base Start DMA - * + TIM Output Compare/PWM Initialization - * + TIM Output Compare/PWM Channel Configuration - * + TIM Output Compare/PWM Start - * + TIM Output Compare/PWM Start Interruption - * + TIM Output Compare/PWM Start DMA - * + TIM Input Capture Initialization - * + TIM Input Capture Channel Configuration - * + TIM Input Capture Start - * + TIM Input Capture Start Interruption - * + TIM Input Capture Start DMA - * + TIM One Pulse Initialization - * + TIM One Pulse Channel Configuration - * + TIM One Pulse Start - * + TIM Encoder Interface Initialization - * + TIM Encoder Interface Start - * + TIM Encoder Interface Start Interruption - * + TIM Encoder Interface Start DMA - * + Commutation Event configuration with Interruption and DMA - * + TIM OCRef clear configuration - * + TIM External Clock configuration - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### TIMER Generic features ##### - ============================================================================== - [..] The Timer features include: - (#) 16-bit up, down, up/down auto-reload counter. - (#) 16-bit programmable prescaler allowing dividing (also on the fly) the - counter clock frequency either by any factor between 1 and 65536. - (#) Up to 4 independent channels for: - (++) Input Capture - (++) Output Compare - (++) PWM generation (Edge and Center-aligned Mode) - (++) One-pulse mode output - (#) Synchronization circuit to control the timer with external signals and to interconnect - several timers together. - (#) Supports incremental encoder for positioning purposes - - ##### How to use this driver ##### - ============================================================================== - [..] - (#) Initialize the TIM low level resources by implementing the following functions - depending on the selected feature: - (++) Time Base : HAL_TIM_Base_MspInit() - (++) Input Capture : HAL_TIM_IC_MspInit() - (++) Output Compare : HAL_TIM_OC_MspInit() - (++) PWM generation : HAL_TIM_PWM_MspInit() - (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit() - (++) Encoder mode output : HAL_TIM_Encoder_MspInit() - - (#) Initialize the TIM low level resources : - (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); - (##) TIM pins configuration - (+++) Enable the clock for the TIM GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); - - (#) The external Clock can be configured, if needed (the default clock is the - internal clock from the APBx), using the following function: - HAL_TIM_ConfigClockSource, the clock configuration should be done before - any start function. - - (#) Configure the TIM in the desired functioning mode using one of the - Initialization function of this driver: - (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base - (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an - Output Compare signal. - (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a - PWM signal. - (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an - external signal. - (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer - in One Pulse Mode. - (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface. - - (#) Activate the TIM peripheral using one of the start functions depending from the feature used: - (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT() - (++) Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT() - (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT() - (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT() - (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT() - (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT(). - - (#) The DMA Burst is managed with the two following functions: - HAL_TIM_DMABurst_WriteStart() - HAL_TIM_DMABurst_ReadStart() - - *** Callback registration *** - ============================================= - - [..] - The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1 - allows the user to configure dynamically the driver callbacks. - - [..] - Use Function HAL_TIM_RegisterCallback() to register a callback. - HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle, - the Callback ID and a pointer to the user callback function. - - [..] - Use function HAL_TIM_UnRegisterCallback() to reset a callback to the default - weak function. - HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle, - and the Callback ID. - - [..] - These functions allow to register/unregister following callbacks: - (+) Base_MspInitCallback : TIM Base Msp Init Callback. - (+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback. - (+) IC_MspInitCallback : TIM IC Msp Init Callback. - (+) IC_MspDeInitCallback : TIM IC Msp DeInit Callback. - (+) OC_MspInitCallback : TIM OC Msp Init Callback. - (+) OC_MspDeInitCallback : TIM OC Msp DeInit Callback. - (+) PWM_MspInitCallback : TIM PWM Msp Init Callback. - (+) PWM_MspDeInitCallback : TIM PWM Msp DeInit Callback. - (+) OnePulse_MspInitCallback : TIM One Pulse Msp Init Callback. - (+) OnePulse_MspDeInitCallback : TIM One Pulse Msp DeInit Callback. - (+) Encoder_MspInitCallback : TIM Encoder Msp Init Callback. - (+) Encoder_MspDeInitCallback : TIM Encoder Msp DeInit Callback. - (+) HallSensor_MspInitCallback : TIM Hall Sensor Msp Init Callback. - (+) HallSensor_MspDeInitCallback : TIM Hall Sensor Msp DeInit Callback. - (+) PeriodElapsedCallback : TIM Period Elapsed Callback. - (+) PeriodElapsedHalfCpltCallback : TIM Period Elapsed half complete Callback. - (+) TriggerCallback : TIM Trigger Callback. - (+) TriggerHalfCpltCallback : TIM Trigger half complete Callback. - (+) IC_CaptureCallback : TIM Input Capture Callback. - (+) IC_CaptureHalfCpltCallback : TIM Input Capture half complete Callback. - (+) OC_DelayElapsedCallback : TIM Output Compare Delay Elapsed Callback. - (+) PWM_PulseFinishedCallback : TIM PWM Pulse Finished Callback. - (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback. - (+) ErrorCallback : TIM Error Callback. - (+) CommutationCallback : TIM Commutation Callback. - (+) CommutationHalfCpltCallback : TIM Commutation half complete Callback. - (+) BreakCallback : TIM Break Callback. - - [..] -By default, after the Init and when the state is HAL_TIM_STATE_RESET -all interrupt callbacks are set to the corresponding weak functions: - examples HAL_TIM_TriggerCallback(), HAL_TIM_ErrorCallback(). - - [..] - Exception done for MspInit and MspDeInit functions that are reset to the legacy weak - functionalities in the Init / DeInit only when these callbacks are null - (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit - keep and use the user MspInit / MspDeInit callbacks(registered beforehand) - - [..] - Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only. - Exception done MspInit / MspDeInit that can be registered / unregistered - in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state, - thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit. - In that case first register the MspInit/MspDeInit user callbacks - using HAL_TIM_RegisterCallback() before calling DeInit or Init function. - - [..] - When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or - not defined, the callback registration feature is not available and all callbacks - are set to the corresponding weak functions. - - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @defgroup TIM TIM - * @brief TIM HAL module driver - * @{ - */ - -#ifdef HAL_TIM_MODULE_ENABLED - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/** @addtogroup TIM_Private_Functions - * @{ - */ -static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); -static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); -static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); -static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); -static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter); -static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); -static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter); -static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter); -static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource); -static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma); -static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma); -static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma); -static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma); -static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma); -static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, - const TIM_SlaveConfigTypeDef *sSlaveConfig); -/** - * @} - */ -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup TIM_Exported_Functions TIM Exported Functions - * @{ - */ - -/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions - * @brief Time Base functions - * -@verbatim - ============================================================================== - ##### Time Base functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM base. - (+) De-initialize the TIM base. - (+) Start the Time Base. - (+) Stop the Time Base. - (+) Start the Time Base and enable interrupt. - (+) Stop the Time Base and disable interrupt. - (+) Start the Time Base and enable DMA transfer. - (+) Stop the Time Base and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM Time base Unit according to the specified - * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) -{ - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->Base_MspInitCallback == NULL) - { - htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->Base_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - HAL_TIM_Base_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Set the Time Base configuration */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM Base peripheral - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->Base_MspDeInitCallback == NULL) - { - htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; - } - /* DeInit the low level hardware */ - htim->Base_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ - HAL_TIM_Base_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Change the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM Base MSP. - * @param htim TIM Base handle - * @retval None - */ -__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_Base_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM Base MSP. - * @param htim TIM Base handle - * @retval None - */ -__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_Base_MspDeInit could be implemented in the user file - */ -} - - -/** - * @brief Starts the TIM Base generation. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - /* Check the TIM state */ - if (htim->State != HAL_TIM_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Base generation. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_READY; - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Base generation in interrupt mode. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - /* Check the TIM state */ - if (htim->State != HAL_TIM_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Enable the TIM Update interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Base generation in interrupt mode. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - /* Disable the TIM Update interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_READY; - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Base generation in DMA mode. - * @param htim TIM Base handle - * @param pData The source Buffer address. - * @param Length The length of data to be transferred from memory to peripheral. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); - - /* Set the TIM state */ - if (htim->State == HAL_TIM_STATE_BUSY) - { - return HAL_BUSY; - } - else if (htim->State == HAL_TIM_STATE_READY) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - htim->State = HAL_TIM_STATE_BUSY; - } - } - else - { - return HAL_ERROR; - } - - /* Set the DMA Period elapsed callbacks */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; - htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Enable the TIM Update DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Base generation in DMA mode. - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); - - /* Disable the TIM Update DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE); - - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_READY; - - /* Return function status */ - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions - * @brief TIM Output Compare functions - * -@verbatim - ============================================================================== - ##### TIM Output Compare functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM Output Compare. - (+) De-initialize the TIM Output Compare. - (+) Start the TIM Output Compare. - (+) Stop the TIM Output Compare. - (+) Start the TIM Output Compare and enable interrupt. - (+) Stop the TIM Output Compare and disable interrupt. - (+) Start the TIM Output Compare and enable DMA transfer. - (+) Stop the TIM Output Compare and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM Output Compare according to the specified - * parameters in the TIM_HandleTypeDef and initializes the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() - * @param htim TIM Output Compare handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) -{ - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->OC_MspInitCallback == NULL) - { - htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->OC_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_OC_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Init the base time for the Output Compare */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM peripheral - * @param htim TIM Output Compare handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->OC_MspDeInitCallback == NULL) - { - htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; - } - /* DeInit the low level hardware */ - htim->OC_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_OC_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Change the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM Output Compare MSP. - * @param htim TIM Output Compare handle - * @retval None - */ -__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OC_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM Output Compare MSP. - * @param htim TIM Output Compare handle - * @retval None - */ -__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OC_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the TIM Output Compare signal generation. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Output Compare signal generation. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Disable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Output Compare signal generation in interrupt mode. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Enable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Enable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Output Compare signal generation in interrupt mode. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @brief Starts the TIM Output Compare signal generation in DMA mode. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData The source Buffer address. - * @param Length The length of data to be transferred from memory to TIM peripheral - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Set the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) - { - return HAL_BUSY; - } - else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Enable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Enable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 4 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Output Compare signal generation in DMA mode. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Output compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions - * @brief TIM PWM functions - * -@verbatim - ============================================================================== - ##### TIM PWM functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM PWM. - (+) De-initialize the TIM PWM. - (+) Start the TIM PWM. - (+) Stop the TIM PWM. - (+) Start the TIM PWM and enable interrupt. - (+) Stop the TIM PWM and disable interrupt. - (+) Start the TIM PWM and enable DMA transfer. - (+) Stop the TIM PWM and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM PWM Time Base according to the specified - * parameters in the TIM_HandleTypeDef and initializes the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() - * @param htim TIM PWM handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) -{ - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->PWM_MspInitCallback == NULL) - { - htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->PWM_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_PWM_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Init the base time for the PWM */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM peripheral - * @param htim TIM PWM handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->PWM_MspDeInitCallback == NULL) - { - htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; - } - /* DeInit the low level hardware */ - htim->PWM_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_PWM_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Change the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM PWM MSP. - * @param htim TIM PWM handle - * @retval None - */ -__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM PWM MSP. - * @param htim TIM PWM handle - * @retval None - */ -__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the PWM signal generation. - * @param htim TIM handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the PWM signal generation. - * @param htim TIM PWM handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Disable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the PWM signal generation in interrupt mode. - * @param htim TIM PWM handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Enable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Enable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the PWM signal generation in interrupt mode. - * @param htim TIM PWM handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @brief Starts the TIM PWM signal generation in DMA mode. - * @param htim TIM PWM handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData The source Buffer address. - * @param Length The length of data to be transferred from memory to TIM peripheral - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Set the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) - { - return HAL_BUSY; - } - else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Enable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Output Capture/Compare 3 request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 4 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM PWM signal generation in DMA mode. - * @param htim TIM PWM handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions - * @brief TIM Input Capture functions - * -@verbatim - ============================================================================== - ##### TIM Input Capture functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM Input Capture. - (+) De-initialize the TIM Input Capture. - (+) Start the TIM Input Capture. - (+) Stop the TIM Input Capture. - (+) Start the TIM Input Capture and enable interrupt. - (+) Stop the TIM Input Capture and disable interrupt. - (+) Start the TIM Input Capture and enable DMA transfer. - (+) Stop the TIM Input Capture and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM Input Capture Time base according to the specified - * parameters in the TIM_HandleTypeDef and initializes the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init() - * @param htim TIM Input Capture handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) -{ - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->IC_MspInitCallback == NULL) - { - htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->IC_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_IC_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Init the base time for the input capture */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM peripheral - * @param htim TIM Input Capture handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->IC_MspDeInitCallback == NULL) - { - htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; - } - /* DeInit the low level hardware */ - htim->IC_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_IC_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Change the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM Input Capture MSP. - * @param htim TIM Input Capture handle - * @retval None - */ -__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_IC_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM Input Capture MSP. - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_IC_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the TIM Input Capture measurement. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpsmcr; - HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); - HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Input Capture measurement. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Disable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Input Capture measurement in interrupt mode. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); - HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Enable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Enable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Input Capture measurement in interrupt mode. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @brief Starts the TIM Input Capture measurement in DMA mode. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData The destination Buffer address. - * @param Length The length of data to be transferred from TIM peripheral to memory. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); - HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); - - /* Set the TIM channel state */ - if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) - { - return HAL_BUSY; - } - else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - /* Enable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); - break; - } - - case TIM_CHANNEL_4: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 4 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); - break; - } - - default: - status = HAL_ERROR; - break; - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Input Capture measurement in DMA mode. - * @param htim TIM Input Capture handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - - case TIM_CHANNEL_4: - { - /* Disable the TIM Capture/Compare 4 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions - * @brief TIM One Pulse functions - * -@verbatim - ============================================================================== - ##### TIM One Pulse functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM One Pulse. - (+) De-initialize the TIM One Pulse. - (+) Start the TIM One Pulse. - (+) Stop the TIM One Pulse. - (+) Start the TIM One Pulse and enable interrupt. - (+) Stop the TIM One Pulse and disable interrupt. - (+) Start the TIM One Pulse and enable DMA transfer. - (+) Stop the TIM One Pulse and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM One Pulse Time Base according to the specified - * parameters in the TIM_HandleTypeDef and initializes the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init() - * @note When the timer instance is initialized in One Pulse mode, timer - * channels 1 and channel 2 are reserved and cannot be used for other - * purpose. - * @param htim TIM One Pulse handle - * @param OnePulseMode Select the One pulse mode. - * This parameter can be one of the following values: - * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. - * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) -{ - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_OPM_MODE(OnePulseMode)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->OnePulse_MspInitCallback == NULL) - { - htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->OnePulse_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_OnePulse_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Configure the Time base in the One Pulse Mode */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Reset the OPM Bit */ - htim->Instance->CR1 &= ~TIM_CR1_OPM; - - /* Configure the OPM Mode */ - htim->Instance->CR1 |= OnePulseMode; - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM One Pulse - * @param htim TIM One Pulse handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->OnePulse_MspDeInitCallback == NULL) - { - htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; - } - /* DeInit the low level hardware */ - htim->OnePulse_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ - HAL_TIM_OnePulse_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM One Pulse MSP. - * @param htim TIM One Pulse handle - * @retval None - */ -__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OnePulse_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM One Pulse MSP. - * @param htim TIM One Pulse handle - * @retval None - */ -__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the TIM One Pulse signal generation. - * @note Though OutputChannel parameter is deprecated and ignored by the function - * it has been kept to avoid HAL_TIM API compatibility break. - * @note The pulse output channel is determined when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel See note above - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Prevent unused argument(s) compilation warning */ - UNUSED(OutputChannel); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Capture compare and the Input Capture channels - (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) - if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and - if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output - whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together - - No need to enable the counter, it's enabled automatically by hardware - (the counter starts in response to a stimulus and generate a pulse */ - - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM One Pulse signal generation. - * @note Though OutputChannel parameter is deprecated and ignored by the function - * it has been kept to avoid HAL_TIM API compatibility break. - * @note The pulse output channel is determined when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel See note above - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(OutputChannel); - - /* Disable the Capture compare and the Input Capture channels - (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) - if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and - if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output - whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ - - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM One Pulse signal generation in interrupt mode. - * @note Though OutputChannel parameter is deprecated and ignored by the function - * it has been kept to avoid HAL_TIM API compatibility break. - * @note The pulse output channel is determined when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel See note above - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Prevent unused argument(s) compilation warning */ - UNUSED(OutputChannel); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Capture compare and the Input Capture channels - (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) - if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and - if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output - whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together - - No need to enable the counter, it's enabled automatically by hardware - (the counter starts in response to a stimulus and generate a pulse */ - - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM One Pulse signal generation in interrupt mode. - * @note Though OutputChannel parameter is deprecated and ignored by the function - * it has been kept to avoid HAL_TIM API compatibility break. - * @note The pulse output channel is determined when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel See note above - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(OutputChannel); - - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - - /* Disable the Capture compare and the Input Capture channels - (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) - if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and - if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output - whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - { - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions - * @brief TIM Encoder functions - * -@verbatim - ============================================================================== - ##### TIM Encoder functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure the TIM Encoder. - (+) De-initialize the TIM Encoder. - (+) Start the TIM Encoder. - (+) Stop the TIM Encoder. - (+) Start the TIM Encoder and enable interrupt. - (+) Stop the TIM Encoder and disable interrupt. - (+) Start the TIM Encoder and enable DMA transfer. - (+) Stop the TIM Encoder and disable DMA transfer. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM Encoder Interface and initialize the associated handle. - * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) - * requires a timer reset to avoid unexpected direction - * due to DIR bit readonly in center aligned mode. - * Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init() - * @note Encoder mode and External clock mode 2 are not compatible and must not be selected together - * Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource - * using TIM_CLOCKSOURCE_ETRMODE2 and vice versa - * @note When the timer instance is initialized in Encoder mode, timer - * channels 1 and channel 2 are reserved and cannot be used for other - * purpose. - * @param htim TIM Encoder Interface handle - * @param sConfig TIM Encoder Interface configuration structure - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig) -{ - uint32_t tmpsmcr; - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); - assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); - assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); - assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity)); - assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity)); - assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); - assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler)); - assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); - assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy weak callbacks */ - TIM_ResetCallback(htim); - - if (htim->Encoder_MspInitCallback == NULL) - { - htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->Encoder_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_Encoder_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Reset the SMS and ECE bits */ - htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE); - - /* Configure the Time base in the Encoder Mode */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Get the TIMx SMCR register value */ - tmpsmcr = htim->Instance->SMCR; - - /* Get the TIMx CCMR1 register value */ - tmpccmr1 = htim->Instance->CCMR1; - - /* Get the TIMx CCER register value */ - tmpccer = htim->Instance->CCER; - - /* Set the encoder Mode */ - tmpsmcr |= sConfig->EncoderMode; - - /* Select the Capture Compare 1 and the Capture Compare 2 as input */ - tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S); - tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U)); - - /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */ - tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC); - tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F); - tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U); - tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U); - - /* Set the TI1 and the TI2 Polarities */ - tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); - tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U); - - /* Write to TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - - /* Write to TIMx CCMR1 */ - htim->Instance->CCMR1 = tmpccmr1; - - /* Write to TIMx CCER */ - htim->Instance->CCER = tmpccer; - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - - -/** - * @brief DeInitializes the TIM Encoder interface - * @param htim TIM Encoder Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->Encoder_MspDeInitCallback == NULL) - { - htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; - } - /* DeInit the low level hardware */ - htim->Encoder_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ - HAL_TIM_Encoder_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM Encoder Interface MSP. - * @param htim TIM Encoder Interface handle - * @retval None - */ -__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_Encoder_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM Encoder Interface MSP. - * @param htim TIM Encoder Interface handle - * @retval None - */ -__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_Encoder_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the TIM Encoder Interface. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Set the TIM channel(s) state */ - if (Channel == TIM_CHANNEL_1) - { - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else if (Channel == TIM_CHANNEL_2) - { - if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - - /* Enable the encoder interface channels */ - switch (Channel) - { - case TIM_CHANNEL_1: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - break; - } - - case TIM_CHANNEL_2: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - break; - } - - default : - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - break; - } - } - /* Enable the Peripheral */ - __HAL_TIM_ENABLE(htim); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Encoder Interface. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channels 1 and 2 - (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ - switch (Channel) - { - case TIM_CHANNEL_1: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - break; - } - - case TIM_CHANNEL_2: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - break; - } - - default : - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - break; - } - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel(s) state */ - if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Encoder Interface in interrupt mode. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Set the TIM channel(s) state */ - if (Channel == TIM_CHANNEL_1) - { - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else if (Channel == TIM_CHANNEL_2) - { - if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - - /* Enable the encoder interface channels */ - /* Enable the capture compare Interrupts 1 and/or 2 */ - switch (Channel) - { - case TIM_CHANNEL_1: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - default : - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - } - - /* Enable the Peripheral */ - __HAL_TIM_ENABLE(htim); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Encoder Interface in interrupt mode. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channels 1 and 2 - (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ - if (Channel == TIM_CHANNEL_1) - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - - /* Disable the capture compare Interrupts 1 */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - } - else if (Channel == TIM_CHANNEL_2) - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - /* Disable the capture compare Interrupts 2 */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - } - else - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - /* Disable the capture compare Interrupts 1 and 2 */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel(s) state */ - if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Encoder Interface in DMA mode. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @param pData1 The destination Buffer address for IC1. - * @param pData2 The destination Buffer address for IC2. - * @param Length The length of data to be transferred from TIM peripheral to memory. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, - uint32_t *pData2, uint16_t Length) -{ - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Set the TIM channel(s) state */ - if (Channel == TIM_CHANNEL_1) - { - if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) - { - return HAL_BUSY; - } - else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) - { - if ((pData1 == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - } - else if (Channel == TIM_CHANNEL_2) - { - if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) - { - return HAL_BUSY; - } - else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) - { - if ((pData2 == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - } - else - { - if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) - { - return HAL_BUSY; - } - else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) - && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) - { - if ((((pData1 == NULL) || (pData2 == NULL))) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - } - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Input Capture DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - - /* Enable the Peripheral */ - __HAL_TIM_ENABLE(htim); - - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError; - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Input Capture DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - - /* Enable the Peripheral */ - __HAL_TIM_ENABLE(htim); - - break; - } - - default: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - - /* Enable the TIM Input Capture DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - /* Enable the TIM Input Capture DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); - - /* Enable the Peripheral */ - __HAL_TIM_ENABLE(htim); - - break; - } - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Encoder Interface in DMA mode. - * @param htim TIM Encoder Interface handle - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channels 1 and 2 - (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ - if (Channel == TIM_CHANNEL_1) - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - - /* Disable the capture compare DMA Request 1 */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - } - else if (Channel == TIM_CHANNEL_2) - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - /* Disable the capture compare DMA Request 2 */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - } - else - { - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); - - /* Disable the capture compare DMA Request 1 and 2 */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - } - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel(s) state */ - if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) - { - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @} - */ -/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management - * @brief TIM IRQ handler management - * -@verbatim - ============================================================================== - ##### IRQ handler management ##### - ============================================================================== - [..] - This section provides Timer IRQ handler function. - -@endverbatim - * @{ - */ -/** - * @brief This function handles TIM interrupts requests. - * @param htim TIM handle - * @retval None - */ -void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) -{ - uint32_t itsource = htim->Instance->DIER; - uint32_t itflag = htim->Instance->SR; - - /* Capture compare 1 event */ - if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1)) - { - if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1)) - { - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1); - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - - /* Input capture event */ - if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - /* Output compare event */ - else - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - } - } - } - /* Capture compare 2 event */ - if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2)) - { - if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2); - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - /* Input capture event */ - if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - /* Output compare event */ - else - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - } - } - /* Capture compare 3 event */ - if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3)) - { - if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3); - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - /* Input capture event */ - if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - /* Output compare event */ - else - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - } - } - /* Capture compare 4 event */ - if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4)) - { - if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4); - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - /* Input capture event */ - if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - /* Output compare event */ - else - { -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->OC_DelayElapsedCallback(htim); - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_OC_DelayElapsedCallback(htim); - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; - } - } - /* TIM Update event */ - if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE)) - { - if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE); -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PeriodElapsedCallback(htim); -#else - HAL_TIM_PeriodElapsedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM Break input event */ - if ((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) - { - if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK); -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->BreakCallback(htim); -#else - HAL_TIMEx_BreakCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM Trigger detection event */ - if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER)) - { - if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER); -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->TriggerCallback(htim); -#else - HAL_TIM_TriggerCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } - /* TIM commutation event */ - if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM)) - { - if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM)) - { - __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM); -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->CommutationCallback(htim); -#else - HAL_TIMEx_CommutCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - } -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions - * @brief TIM Peripheral Control functions - * -@verbatim - ============================================================================== - ##### Peripheral Control functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode. - (+) Configure External Clock source. - (+) Configure Complementary channels, break features and dead time. - (+) Configure Master and the Slave synchronization. - (+) Configure the DMA Burst Mode. - -@endverbatim - * @{ - */ - -/** - * @brief Initializes the TIM Output Compare Channels according to the specified - * parameters in the TIM_OC_InitTypeDef. - * @param htim TIM Output Compare handle - * @param sConfig TIM Output Compare configuration structure - * @param Channel TIM Channels to configure - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, - const TIM_OC_InitTypeDef *sConfig, - uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CHANNELS(Channel)); - assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); - assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); - - /* Process Locked */ - __HAL_LOCK(htim); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - /* Configure the TIM Channel 1 in Output Compare */ - TIM_OC1_SetConfig(htim->Instance, sConfig); - break; - } - - case TIM_CHANNEL_2: - { - /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - /* Configure the TIM Channel 2 in Output Compare */ - TIM_OC2_SetConfig(htim->Instance, sConfig); - break; - } - - case TIM_CHANNEL_3: - { - /* Check the parameters */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); - - /* Configure the TIM Channel 3 in Output Compare */ - TIM_OC3_SetConfig(htim->Instance, sConfig); - break; - } - - case TIM_CHANNEL_4: - { - /* Check the parameters */ - assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); - - /* Configure the TIM Channel 4 in Output Compare */ - TIM_OC4_SetConfig(htim->Instance, sConfig); - break; - } - - default: - status = HAL_ERROR; - break; - } - - __HAL_UNLOCK(htim); - - return status; -} - -/** - * @brief Initializes the TIM Input Capture Channels according to the specified - * parameters in the TIM_IC_InitTypeDef. - * @param htim TIM IC handle - * @param sConfig TIM Input Capture configuration structure - * @param Channel TIM Channel to configure - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity)); - assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection)); - assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler)); - assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter)); - - /* Process Locked */ - __HAL_LOCK(htim); - - if (Channel == TIM_CHANNEL_1) - { - /* TI1 Configuration */ - TIM_TI1_SetConfig(htim->Instance, - sConfig->ICPolarity, - sConfig->ICSelection, - sConfig->ICFilter); - - /* Reset the IC1PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; - - /* Set the IC1PSC value */ - htim->Instance->CCMR1 |= sConfig->ICPrescaler; - } - else if (Channel == TIM_CHANNEL_2) - { - /* TI2 Configuration */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - TIM_TI2_SetConfig(htim->Instance, - sConfig->ICPolarity, - sConfig->ICSelection, - sConfig->ICFilter); - - /* Reset the IC2PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; - - /* Set the IC2PSC value */ - htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U); - } - else if (Channel == TIM_CHANNEL_3) - { - /* TI3 Configuration */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); - - TIM_TI3_SetConfig(htim->Instance, - sConfig->ICPolarity, - sConfig->ICSelection, - sConfig->ICFilter); - - /* Reset the IC3PSC Bits */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC; - - /* Set the IC3PSC value */ - htim->Instance->CCMR2 |= sConfig->ICPrescaler; - } - else if (Channel == TIM_CHANNEL_4) - { - /* TI4 Configuration */ - assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); - - TIM_TI4_SetConfig(htim->Instance, - sConfig->ICPolarity, - sConfig->ICSelection, - sConfig->ICFilter); - - /* Reset the IC4PSC Bits */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC; - - /* Set the IC4PSC value */ - htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U); - } - else - { - status = HAL_ERROR; - } - - __HAL_UNLOCK(htim); - - return status; -} - -/** - * @brief Initializes the TIM PWM channels according to the specified - * parameters in the TIM_OC_InitTypeDef. - * @param htim TIM PWM handle - * @param sConfig TIM PWM configuration structure - * @param Channel TIM Channels to be configured - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, - const TIM_OC_InitTypeDef *sConfig, - uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CHANNELS(Channel)); - assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); - assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); - assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); - - /* Process Locked */ - __HAL_LOCK(htim); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - /* Configure the Channel 1 in PWM mode */ - TIM_OC1_SetConfig(htim->Instance, sConfig); - - /* Set the Preload enable bit for channel1 */ - htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; - - /* Configure the Output Fast mode */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; - htim->Instance->CCMR1 |= sConfig->OCFastMode; - break; - } - - case TIM_CHANNEL_2: - { - /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - /* Configure the Channel 2 in PWM mode */ - TIM_OC2_SetConfig(htim->Instance, sConfig); - - /* Set the Preload enable bit for channel2 */ - htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; - - /* Configure the Output Fast mode */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; - htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; - break; - } - - case TIM_CHANNEL_3: - { - /* Check the parameters */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); - - /* Configure the Channel 3 in PWM mode */ - TIM_OC3_SetConfig(htim->Instance, sConfig); - - /* Set the Preload enable bit for channel3 */ - htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; - - /* Configure the Output Fast mode */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; - htim->Instance->CCMR2 |= sConfig->OCFastMode; - break; - } - - case TIM_CHANNEL_4: - { - /* Check the parameters */ - assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); - - /* Configure the Channel 4 in PWM mode */ - TIM_OC4_SetConfig(htim->Instance, sConfig); - - /* Set the Preload enable bit for channel4 */ - htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; - - /* Configure the Output Fast mode */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; - htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; - break; - } - - default: - status = HAL_ERROR; - break; - } - - __HAL_UNLOCK(htim); - - return status; -} - -/** - * @brief Initializes the TIM One Pulse Channels according to the specified - * parameters in the TIM_OnePulse_InitTypeDef. - * @param htim TIM One Pulse handle - * @param sConfig TIM One Pulse configuration structure - * @param OutputChannel TIM output channel to configure - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @param InputChannel TIM input Channel to configure - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @note To output a waveform with a minimum delay user can enable the fast - * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx - * output is forced in response to the edge detection on TIx input, - * without taking in account the comparison. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, - uint32_t OutputChannel, uint32_t InputChannel) -{ - HAL_StatusTypeDef status = HAL_OK; - TIM_OC_InitTypeDef temp1; - - /* Check the parameters */ - assert_param(IS_TIM_OPM_CHANNELS(OutputChannel)); - assert_param(IS_TIM_OPM_CHANNELS(InputChannel)); - - if (OutputChannel != InputChannel) - { - /* Process Locked */ - __HAL_LOCK(htim); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Extract the Output compare configuration from sConfig structure */ - temp1.OCMode = sConfig->OCMode; - temp1.Pulse = sConfig->Pulse; - temp1.OCPolarity = sConfig->OCPolarity; - temp1.OCNPolarity = sConfig->OCNPolarity; - temp1.OCIdleState = sConfig->OCIdleState; - temp1.OCNIdleState = sConfig->OCNIdleState; - - switch (OutputChannel) - { - case TIM_CHANNEL_1: - { - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - TIM_OC1_SetConfig(htim->Instance, &temp1); - break; - } - - case TIM_CHANNEL_2: - { - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - TIM_OC2_SetConfig(htim->Instance, &temp1); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - switch (InputChannel) - { - case TIM_CHANNEL_1: - { - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, - sConfig->ICSelection, sConfig->ICFilter); - - /* Reset the IC1PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; - - /* Select the Trigger source */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= TIM_TS_TI1FP1; - - /* Select the Slave Mode */ - htim->Instance->SMCR &= ~TIM_SMCR_SMS; - htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; - break; - } - - case TIM_CHANNEL_2: - { - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, - sConfig->ICSelection, sConfig->ICFilter); - - /* Reset the IC2PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; - - /* Select the Trigger source */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= TIM_TS_TI2FP2; - - /* Select the Slave Mode */ - htim->Instance->SMCR &= ~TIM_SMCR_SMS; - htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; - break; - } - - default: - status = HAL_ERROR; - break; - } - } - - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return status; - } - else - { - return HAL_ERROR; - } -} - -/** - * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral - * @param htim TIM handle - * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write - * This parameter can be one of the following values: - * @arg TIM_DMABASE_CR1 - * @arg TIM_DMABASE_CR2 - * @arg TIM_DMABASE_SMCR - * @arg TIM_DMABASE_DIER - * @arg TIM_DMABASE_SR - * @arg TIM_DMABASE_EGR - * @arg TIM_DMABASE_CCMR1 - * @arg TIM_DMABASE_CCMR2 - * @arg TIM_DMABASE_CCER - * @arg TIM_DMABASE_CNT - * @arg TIM_DMABASE_PSC - * @arg TIM_DMABASE_ARR - * @arg TIM_DMABASE_RCR - * @arg TIM_DMABASE_CCR1 - * @arg TIM_DMABASE_CCR2 - * @arg TIM_DMABASE_CCR3 - * @arg TIM_DMABASE_CCR4 - * @arg TIM_DMABASE_BDTR - * @param BurstRequestSrc TIM DMA Request sources - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: TIM update Interrupt source - * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source - * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source - * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source - * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source - * @arg TIM_DMA_COM: TIM Commutation DMA source - * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer The Buffer address. - * @param BurstLength DMA Burst length. This parameter can be one value - * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. - * @note This function should be used only when BurstLength is equal to DMA data transfer length. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, - uint32_t BurstLength) -{ - HAL_StatusTypeDef status; - - status = HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, - ((BurstLength) >> 8U) + 1U); - - - - return status; -} - -/** - * @brief Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral - * @param htim TIM handle - * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write - * This parameter can be one of the following values: - * @arg TIM_DMABASE_CR1 - * @arg TIM_DMABASE_CR2 - * @arg TIM_DMABASE_SMCR - * @arg TIM_DMABASE_DIER - * @arg TIM_DMABASE_SR - * @arg TIM_DMABASE_EGR - * @arg TIM_DMABASE_CCMR1 - * @arg TIM_DMABASE_CCMR2 - * @arg TIM_DMABASE_CCER - * @arg TIM_DMABASE_CNT - * @arg TIM_DMABASE_PSC - * @arg TIM_DMABASE_ARR - * @arg TIM_DMABASE_RCR - * @arg TIM_DMABASE_CCR1 - * @arg TIM_DMABASE_CCR2 - * @arg TIM_DMABASE_CCR3 - * @arg TIM_DMABASE_CCR4 - * @arg TIM_DMABASE_BDTR - * @param BurstRequestSrc TIM DMA Request sources - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: TIM update Interrupt source - * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source - * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source - * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source - * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source - * @arg TIM_DMA_COM: TIM Commutation DMA source - * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer The Buffer address. - * @param BurstLength DMA Burst length. This parameter can be one value - * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. - * @param DataLength Data length. This parameter can be one value - * between 1 and 0xFFFF. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, - uint32_t BurstLength, uint32_t DataLength) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); - assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); - assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); - assert_param(IS_TIM_DMA_LENGTH(BurstLength)); - assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); - - if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) - { - return HAL_BUSY; - } - else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) - { - if ((BurstBuffer == NULL) && (BurstLength > 0U)) - { - return HAL_ERROR; - } - else - { - htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; - } - } - else - { - /* nothing to do */ - } - - switch (BurstRequestSrc) - { - case TIM_DMA_UPDATE: - { - /* Set the DMA Period elapsed callbacks */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; - htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC1: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC2: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC3: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC4: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; - htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_COM: - { - /* Set the DMA commutation callbacks */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_TRIGGER: - { - /* Set the DMA trigger callbacks */ - htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; - htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, - (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Configure the DMA Burst Mode */ - htim->Instance->DCR = (BurstBaseAddress | BurstLength); - /* Enable the TIM DMA Request */ - __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM DMA Burst mode - * @param htim TIM handle - * @param BurstRequestSrc TIM DMA Request sources to disable - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); - - /* Abort the DMA transfer (at least disable the DMA channel) */ - switch (BurstRequestSrc) - { - case TIM_DMA_UPDATE: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); - break; - } - case TIM_DMA_CC1: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - case TIM_DMA_CC2: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - case TIM_DMA_CC3: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - case TIM_DMA_CC4: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); - break; - } - case TIM_DMA_COM: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); - break; - } - case TIM_DMA_TRIGGER: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); - break; - } - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the TIM Update DMA request */ - __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - } - - /* Return function status */ - return status; -} - -/** - * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory - * @param htim TIM handle - * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read - * This parameter can be one of the following values: - * @arg TIM_DMABASE_CR1 - * @arg TIM_DMABASE_CR2 - * @arg TIM_DMABASE_SMCR - * @arg TIM_DMABASE_DIER - * @arg TIM_DMABASE_SR - * @arg TIM_DMABASE_EGR - * @arg TIM_DMABASE_CCMR1 - * @arg TIM_DMABASE_CCMR2 - * @arg TIM_DMABASE_CCER - * @arg TIM_DMABASE_CNT - * @arg TIM_DMABASE_PSC - * @arg TIM_DMABASE_ARR - * @arg TIM_DMABASE_RCR - * @arg TIM_DMABASE_CCR1 - * @arg TIM_DMABASE_CCR2 - * @arg TIM_DMABASE_CCR3 - * @arg TIM_DMABASE_CCR4 - * @arg TIM_DMABASE_BDTR - * @param BurstRequestSrc TIM DMA Request sources - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: TIM update Interrupt source - * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source - * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source - * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source - * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source - * @arg TIM_DMA_COM: TIM Commutation DMA source - * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer The Buffer address. - * @param BurstLength DMA Burst length. This parameter can be one value - * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. - * @note This function should be used only when BurstLength is equal to DMA data transfer length. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) -{ - HAL_StatusTypeDef status; - - status = HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, - ((BurstLength) >> 8U) + 1U); - - - return status; -} - -/** - * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory - * @param htim TIM handle - * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read - * This parameter can be one of the following values: - * @arg TIM_DMABASE_CR1 - * @arg TIM_DMABASE_CR2 - * @arg TIM_DMABASE_SMCR - * @arg TIM_DMABASE_DIER - * @arg TIM_DMABASE_SR - * @arg TIM_DMABASE_EGR - * @arg TIM_DMABASE_CCMR1 - * @arg TIM_DMABASE_CCMR2 - * @arg TIM_DMABASE_CCER - * @arg TIM_DMABASE_CNT - * @arg TIM_DMABASE_PSC - * @arg TIM_DMABASE_ARR - * @arg TIM_DMABASE_RCR - * @arg TIM_DMABASE_CCR1 - * @arg TIM_DMABASE_CCR2 - * @arg TIM_DMABASE_CCR3 - * @arg TIM_DMABASE_CCR4 - * @arg TIM_DMABASE_BDTR - * @param BurstRequestSrc TIM DMA Request sources - * This parameter can be one of the following values: - * @arg TIM_DMA_UPDATE: TIM update Interrupt source - * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source - * @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source - * @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source - * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source - * @arg TIM_DMA_COM: TIM Commutation DMA source - * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer The Buffer address. - * @param BurstLength DMA Burst length. This parameter can be one value - * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. - * @param DataLength Data length. This parameter can be one value - * between 1 and 0xFFFF. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, - uint32_t BurstRequestSrc, uint32_t *BurstBuffer, - uint32_t BurstLength, uint32_t DataLength) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); - assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); - assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); - assert_param(IS_TIM_DMA_LENGTH(BurstLength)); - assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); - - if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) - { - return HAL_BUSY; - } - else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) - { - if ((BurstBuffer == NULL) && (BurstLength > 0U)) - { - return HAL_ERROR; - } - else - { - htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; - } - } - else - { - /* nothing to do */ - } - switch (BurstRequestSrc) - { - case TIM_DMA_UPDATE: - { - /* Set the DMA Period elapsed callbacks */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; - htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC1: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC2: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC3: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_CC4: - { - /* Set the DMA capture callbacks */ - htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_COM: - { - /* Set the DMA commutation callbacks */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - case TIM_DMA_TRIGGER: - { - /* Set the DMA trigger callbacks */ - htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; - htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, - DataLength) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - break; - } - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Configure the DMA Burst Mode */ - htim->Instance->DCR = (BurstBaseAddress | BurstLength); - - /* Enable the TIM DMA Request */ - __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); - } - - /* Return function status */ - return status; -} - -/** - * @brief Stop the DMA burst reading - * @param htim TIM handle - * @param BurstRequestSrc TIM DMA Request sources to disable. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); - - /* Abort the DMA transfer (at least disable the DMA channel) */ - switch (BurstRequestSrc) - { - case TIM_DMA_UPDATE: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); - break; - } - case TIM_DMA_CC1: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - case TIM_DMA_CC2: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - case TIM_DMA_CC3: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - case TIM_DMA_CC4: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); - break; - } - case TIM_DMA_COM: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); - break; - } - case TIM_DMA_TRIGGER: - { - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); - break; - } - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the TIM Update DMA request */ - __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - } - - /* Return function status */ - return status; -} - -/** - * @brief Generate a software event - * @param htim TIM handle - * @param EventSource specifies the event source. - * This parameter can be one of the following values: - * @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source - * @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source - * @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source - * @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source - * @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source - * @arg TIM_EVENTSOURCE_COM: Timer COM event source - * @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source - * @arg TIM_EVENTSOURCE_BREAK: Timer Break event source - * @note Basic timers can only generate an update event. - * @note TIM_EVENTSOURCE_COM is relevant only with advanced timer instances. - * @note TIM_EVENTSOURCE_BREAK are relevant only for timer instances - * supporting a break input. - * @retval HAL status - */ - -HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - assert_param(IS_TIM_EVENT_SOURCE(EventSource)); - - /* Process Locked */ - __HAL_LOCK(htim); - - /* Change the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Set the event sources */ - htim->Instance->EGR = EventSource; - - /* Change the TIM state */ - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Configures the OCRef clear feature - * @param htim TIM handle - * @param sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that - * contains the OCREF clear feature and parameters for the TIM peripheral. - * @param Channel specifies the TIM Channel - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 - * @arg TIM_CHANNEL_2: TIM Channel 2 - * @arg TIM_CHANNEL_3: TIM Channel 3 - * @arg TIM_CHANNEL_4: TIM Channel 4 - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, - const TIM_ClearInputConfigTypeDef *sClearInputConfig, - uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance)); - assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource)); - - /* Process Locked */ - __HAL_LOCK(htim); - - htim->State = HAL_TIM_STATE_BUSY; - - switch (sClearInputConfig->ClearInputSource) - { - case TIM_CLEARINPUTSOURCE_NONE: - { - /* Clear the OCREF clear selection bit and the the ETR Bits */ - CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); - break; - } - - case TIM_CLEARINPUTSOURCE_ETR: - { - /* Check the parameters */ - assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity)); - assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler)); - assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter)); - - /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */ - if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) - { - htim->State = HAL_TIM_STATE_READY; - __HAL_UNLOCK(htim); - return HAL_ERROR; - } - - TIM_ETR_SetConfig(htim->Instance, - sClearInputConfig->ClearInputPrescaler, - sClearInputConfig->ClearInputPolarity, - sClearInputConfig->ClearInputFilter); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - switch (Channel) - { - case TIM_CHANNEL_1: - { - if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) - { - /* Enable the OCREF clear feature for Channel 1 */ - SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); - } - else - { - /* Disable the OCREF clear feature for Channel 1 */ - CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); - } - break; - } - case TIM_CHANNEL_2: - { - if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) - { - /* Enable the OCREF clear feature for Channel 2 */ - SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); - } - else - { - /* Disable the OCREF clear feature for Channel 2 */ - CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); - } - break; - } - case TIM_CHANNEL_3: - { - if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) - { - /* Enable the OCREF clear feature for Channel 3 */ - SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); - } - else - { - /* Disable the OCREF clear feature for Channel 3 */ - CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); - } - break; - } - case TIM_CHANNEL_4: - { - if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) - { - /* Enable the OCREF clear feature for Channel 4 */ - SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); - } - else - { - /* Disable the OCREF clear feature for Channel 4 */ - CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); - } - break; - } - default: - break; - } - } - - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return status; -} - -/** - * @brief Configures the clock source to be used - * @param htim TIM handle - * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that - * contains the clock source information for the TIM peripheral. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Process Locked */ - __HAL_LOCK(htim); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Check the parameters */ - assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); - - /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ - tmpsmcr = htim->Instance->SMCR; - tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - htim->Instance->SMCR = tmpsmcr; - - switch (sClockSourceConfig->ClockSource) - { - case TIM_CLOCKSOURCE_INTERNAL: - { - assert_param(IS_TIM_INSTANCE(htim->Instance)); - break; - } - - case TIM_CLOCKSOURCE_ETRMODE1: - { - /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/ - assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); - - /* Check ETR input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - sClockSourceConfig->ClockPrescaler, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - - /* Select the External clock mode1 and the ETRF trigger */ - tmpsmcr = htim->Instance->SMCR; - tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); - /* Write to TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - break; - } - - case TIM_CLOCKSOURCE_ETRMODE2: - { - /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/ - assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance)); - - /* Check ETR input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - sClockSourceConfig->ClockPrescaler, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - /* Enable the External clock mode2 */ - htim->Instance->SMCR |= TIM_SMCR_ECE; - break; - } - - case TIM_CLOCKSOURCE_TI1: - { - /* Check whether or not the timer instance supports external clock mode 1 */ - assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); - break; - } - - case TIM_CLOCKSOURCE_TI2: - { - /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ - assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); - - /* Check TI2 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI2_ConfigInputStage(htim->Instance, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); - break; - } - - case TIM_CLOCKSOURCE_TI1ED: - { - /* Check whether or not the timer instance supports external clock mode 1 */ - assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - sClockSourceConfig->ClockPolarity, - sClockSourceConfig->ClockFilter); - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); - break; - } - - case TIM_CLOCKSOURCE_ITR0: - case TIM_CLOCKSOURCE_ITR1: - case TIM_CLOCKSOURCE_ITR2: - case TIM_CLOCKSOURCE_ITR3: - { - /* Check whether or not the timer instance supports internal trigger input */ - assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); - - TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); - break; - } - - default: - status = HAL_ERROR; - break; - } - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return status; -} - -/** - * @brief Selects the signal connected to the TI1 input: direct from CH1_input - * or a XOR combination between CH1_input, CH2_input & CH3_input - * @param htim TIM handle. - * @param TI1_Selection Indicate whether or not channel 1 is connected to the - * output of a XOR gate. - * This parameter can be one of the following values: - * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input - * @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3 - * pins are connected to the TI1 input (XOR combination) - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) -{ - uint32_t tmpcr2; - - /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TI1SELECTION(TI1_Selection)); - - /* Get the TIMx CR2 register value */ - tmpcr2 = htim->Instance->CR2; - - /* Reset the TI1 selection */ - tmpcr2 &= ~TIM_CR2_TI1S; - - /* Set the TI1 selection */ - tmpcr2 |= TI1_Selection; - - /* Write to TIMxCR2 */ - htim->Instance->CR2 = tmpcr2; - - return HAL_OK; -} - -/** - * @brief Configures the TIM in Slave mode - * @param htim TIM handle. - * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that - * contains the selected trigger (internal trigger input, filtered - * timer input or external trigger input) and the Slave mode - * (Disable, Reset, Gated, Trigger, External clock mode 1). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig) -{ - /* Check the parameters */ - assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); - assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); - assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); - - __HAL_LOCK(htim); - - htim->State = HAL_TIM_STATE_BUSY; - - if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) - { - htim->State = HAL_TIM_STATE_READY; - __HAL_UNLOCK(htim); - return HAL_ERROR; - } - - /* Disable Trigger Interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); - - /* Disable Trigger DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); - - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configures the TIM in Slave mode in interrupt mode - * @param htim TIM handle. - * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that - * contains the selected trigger (internal trigger input, filtered - * timer input or external trigger input) and the Slave mode - * (Disable, Reset, Gated, Trigger, External clock mode 1). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, - const TIM_SlaveConfigTypeDef *sSlaveConfig) -{ - /* Check the parameters */ - assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); - assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); - assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); - - __HAL_LOCK(htim); - - htim->State = HAL_TIM_STATE_BUSY; - - if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) - { - htim->State = HAL_TIM_STATE_READY; - __HAL_UNLOCK(htim); - return HAL_ERROR; - } - - /* Enable Trigger Interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER); - - /* Disable Trigger DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); - - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Read the captured value from Capture Compare unit - * @param htim TIM handle. - * @param Channel TIM Channels to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval Captured value - */ -uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpreg = 0U; - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - /* Return the capture 1 value */ - tmpreg = htim->Instance->CCR1; - - break; - } - case TIM_CHANNEL_2: - { - /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - /* Return the capture 2 value */ - tmpreg = htim->Instance->CCR2; - - break; - } - - case TIM_CHANNEL_3: - { - /* Check the parameters */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); - - /* Return the capture 3 value */ - tmpreg = htim->Instance->CCR3; - - break; - } - - case TIM_CHANNEL_4: - { - /* Check the parameters */ - assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); - - /* Return the capture 4 value */ - tmpreg = htim->Instance->CCR4; - - break; - } - - default: - break; - } - - return tmpreg; -} - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions - * @brief TIM Callbacks functions - * -@verbatim - ============================================================================== - ##### TIM Callbacks functions ##### - ============================================================================== - [..] - This section provides TIM callback functions: - (+) TIM Period elapsed callback - (+) TIM Output Compare callback - (+) TIM Input capture callback - (+) TIM Trigger callback - (+) TIM Error callback - -@endverbatim - * @{ - */ - -/** - * @brief Period elapsed callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PeriodElapsedCallback could be implemented in the user file - */ -} - -/** - * @brief Period elapsed half complete callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Output Compare callback in non-blocking mode - * @param htim TIM OC handle - * @retval None - */ -__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file - */ -} - -/** - * @brief Input Capture callback in non-blocking mode - * @param htim TIM IC handle - * @retval None - */ -__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_IC_CaptureCallback could be implemented in the user file - */ -} - -/** - * @brief Input Capture half complete callback in non-blocking mode - * @param htim TIM IC handle - * @retval None - */ -__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief PWM Pulse finished callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file - */ -} - -/** - * @brief PWM Pulse finished half complete callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Hall Trigger detection callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_TriggerCallback could be implemented in the user file - */ -} - -/** - * @brief Hall Trigger detection half complete callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Timer error callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_ErrorCallback could be implemented in the user file - */ -} - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -/** - * @brief Register a User TIM callback to be used instead of the weak predefined callback - * @param htim tim handle - * @param CallbackID ID of the callback to be registered - * This parameter can be one of the following values: - * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID - * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID - * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID - * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID - * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID - * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID - * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID - * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID - * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID - * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID - * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID - * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID - * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID - * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID - * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID - * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID - * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID - * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID - * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID - * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID - * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID - * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID - * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID - * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID - * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID - * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID - * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID - * @param pCallback pointer to the callback function - * @retval status - */ -HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, - pTIM_CallbackTypeDef pCallback) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (pCallback == NULL) - { - return HAL_ERROR; - } - - if (htim->State == HAL_TIM_STATE_READY) - { - switch (CallbackID) - { - case HAL_TIM_BASE_MSPINIT_CB_ID : - htim->Base_MspInitCallback = pCallback; - break; - - case HAL_TIM_BASE_MSPDEINIT_CB_ID : - htim->Base_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_IC_MSPINIT_CB_ID : - htim->IC_MspInitCallback = pCallback; - break; - - case HAL_TIM_IC_MSPDEINIT_CB_ID : - htim->IC_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_OC_MSPINIT_CB_ID : - htim->OC_MspInitCallback = pCallback; - break; - - case HAL_TIM_OC_MSPDEINIT_CB_ID : - htim->OC_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_PWM_MSPINIT_CB_ID : - htim->PWM_MspInitCallback = pCallback; - break; - - case HAL_TIM_PWM_MSPDEINIT_CB_ID : - htim->PWM_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : - htim->OnePulse_MspInitCallback = pCallback; - break; - - case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : - htim->OnePulse_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_ENCODER_MSPINIT_CB_ID : - htim->Encoder_MspInitCallback = pCallback; - break; - - case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : - htim->Encoder_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : - htim->HallSensor_MspInitCallback = pCallback; - break; - - case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : - htim->HallSensor_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_PERIOD_ELAPSED_CB_ID : - htim->PeriodElapsedCallback = pCallback; - break; - - case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : - htim->PeriodElapsedHalfCpltCallback = pCallback; - break; - - case HAL_TIM_TRIGGER_CB_ID : - htim->TriggerCallback = pCallback; - break; - - case HAL_TIM_TRIGGER_HALF_CB_ID : - htim->TriggerHalfCpltCallback = pCallback; - break; - - case HAL_TIM_IC_CAPTURE_CB_ID : - htim->IC_CaptureCallback = pCallback; - break; - - case HAL_TIM_IC_CAPTURE_HALF_CB_ID : - htim->IC_CaptureHalfCpltCallback = pCallback; - break; - - case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : - htim->OC_DelayElapsedCallback = pCallback; - break; - - case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : - htim->PWM_PulseFinishedCallback = pCallback; - break; - - case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : - htim->PWM_PulseFinishedHalfCpltCallback = pCallback; - break; - - case HAL_TIM_ERROR_CB_ID : - htim->ErrorCallback = pCallback; - break; - - case HAL_TIM_COMMUTATION_CB_ID : - htim->CommutationCallback = pCallback; - break; - - case HAL_TIM_COMMUTATION_HALF_CB_ID : - htim->CommutationHalfCpltCallback = pCallback; - break; - - case HAL_TIM_BREAK_CB_ID : - htim->BreakCallback = pCallback; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (htim->State == HAL_TIM_STATE_RESET) - { - switch (CallbackID) - { - case HAL_TIM_BASE_MSPINIT_CB_ID : - htim->Base_MspInitCallback = pCallback; - break; - - case HAL_TIM_BASE_MSPDEINIT_CB_ID : - htim->Base_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_IC_MSPINIT_CB_ID : - htim->IC_MspInitCallback = pCallback; - break; - - case HAL_TIM_IC_MSPDEINIT_CB_ID : - htim->IC_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_OC_MSPINIT_CB_ID : - htim->OC_MspInitCallback = pCallback; - break; - - case HAL_TIM_OC_MSPDEINIT_CB_ID : - htim->OC_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_PWM_MSPINIT_CB_ID : - htim->PWM_MspInitCallback = pCallback; - break; - - case HAL_TIM_PWM_MSPDEINIT_CB_ID : - htim->PWM_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : - htim->OnePulse_MspInitCallback = pCallback; - break; - - case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : - htim->OnePulse_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_ENCODER_MSPINIT_CB_ID : - htim->Encoder_MspInitCallback = pCallback; - break; - - case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : - htim->Encoder_MspDeInitCallback = pCallback; - break; - - case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : - htim->HallSensor_MspInitCallback = pCallback; - break; - - case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : - htim->HallSensor_MspDeInitCallback = pCallback; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Return error status */ - status = HAL_ERROR; - } - - return status; -} - -/** - * @brief Unregister a TIM callback - * TIM callback is redirected to the weak predefined callback - * @param htim tim handle - * @param CallbackID ID of the callback to be unregistered - * This parameter can be one of the following values: - * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID - * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID - * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID - * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID - * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID - * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID - * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID - * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID - * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID - * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID - * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID - * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID - * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID - * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID - * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID - * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID - * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID - * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID - * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID - * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID - * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID - * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID - * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID - * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID - * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID - * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID - * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID - * @retval status - */ -HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) -{ - HAL_StatusTypeDef status = HAL_OK; - - if (htim->State == HAL_TIM_STATE_READY) - { - switch (CallbackID) - { - case HAL_TIM_BASE_MSPINIT_CB_ID : - /* Legacy weak Base MspInit Callback */ - htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; - break; - - case HAL_TIM_BASE_MSPDEINIT_CB_ID : - /* Legacy weak Base Msp DeInit Callback */ - htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; - break; - - case HAL_TIM_IC_MSPINIT_CB_ID : - /* Legacy weak IC Msp Init Callback */ - htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; - break; - - case HAL_TIM_IC_MSPDEINIT_CB_ID : - /* Legacy weak IC Msp DeInit Callback */ - htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; - break; - - case HAL_TIM_OC_MSPINIT_CB_ID : - /* Legacy weak OC Msp Init Callback */ - htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; - break; - - case HAL_TIM_OC_MSPDEINIT_CB_ID : - /* Legacy weak OC Msp DeInit Callback */ - htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; - break; - - case HAL_TIM_PWM_MSPINIT_CB_ID : - /* Legacy weak PWM Msp Init Callback */ - htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; - break; - - case HAL_TIM_PWM_MSPDEINIT_CB_ID : - /* Legacy weak PWM Msp DeInit Callback */ - htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; - break; - - case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : - /* Legacy weak One Pulse Msp Init Callback */ - htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; - break; - - case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : - /* Legacy weak One Pulse Msp DeInit Callback */ - htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; - break; - - case HAL_TIM_ENCODER_MSPINIT_CB_ID : - /* Legacy weak Encoder Msp Init Callback */ - htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; - break; - - case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : - /* Legacy weak Encoder Msp DeInit Callback */ - htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; - break; - - case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : - /* Legacy weak Hall Sensor Msp Init Callback */ - htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; - break; - - case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : - /* Legacy weak Hall Sensor Msp DeInit Callback */ - htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; - break; - - case HAL_TIM_PERIOD_ELAPSED_CB_ID : - /* Legacy weak Period Elapsed Callback */ - htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; - break; - - case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : - /* Legacy weak Period Elapsed half complete Callback */ - htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; - break; - - case HAL_TIM_TRIGGER_CB_ID : - /* Legacy weak Trigger Callback */ - htim->TriggerCallback = HAL_TIM_TriggerCallback; - break; - - case HAL_TIM_TRIGGER_HALF_CB_ID : - /* Legacy weak Trigger half complete Callback */ - htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; - break; - - case HAL_TIM_IC_CAPTURE_CB_ID : - /* Legacy weak IC Capture Callback */ - htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; - break; - - case HAL_TIM_IC_CAPTURE_HALF_CB_ID : - /* Legacy weak IC Capture half complete Callback */ - htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; - break; - - case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : - /* Legacy weak OC Delay Elapsed Callback */ - htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; - break; - - case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : - /* Legacy weak PWM Pulse Finished Callback */ - htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; - break; - - case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : - /* Legacy weak PWM Pulse Finished half complete Callback */ - htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; - break; - - case HAL_TIM_ERROR_CB_ID : - /* Legacy weak Error Callback */ - htim->ErrorCallback = HAL_TIM_ErrorCallback; - break; - - case HAL_TIM_COMMUTATION_CB_ID : - /* Legacy weak Commutation Callback */ - htim->CommutationCallback = HAL_TIMEx_CommutCallback; - break; - - case HAL_TIM_COMMUTATION_HALF_CB_ID : - /* Legacy weak Commutation half complete Callback */ - htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; - break; - - case HAL_TIM_BREAK_CB_ID : - /* Legacy weak Break Callback */ - htim->BreakCallback = HAL_TIMEx_BreakCallback; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else if (htim->State == HAL_TIM_STATE_RESET) - { - switch (CallbackID) - { - case HAL_TIM_BASE_MSPINIT_CB_ID : - /* Legacy weak Base MspInit Callback */ - htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; - break; - - case HAL_TIM_BASE_MSPDEINIT_CB_ID : - /* Legacy weak Base Msp DeInit Callback */ - htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; - break; - - case HAL_TIM_IC_MSPINIT_CB_ID : - /* Legacy weak IC Msp Init Callback */ - htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; - break; - - case HAL_TIM_IC_MSPDEINIT_CB_ID : - /* Legacy weak IC Msp DeInit Callback */ - htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; - break; - - case HAL_TIM_OC_MSPINIT_CB_ID : - /* Legacy weak OC Msp Init Callback */ - htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; - break; - - case HAL_TIM_OC_MSPDEINIT_CB_ID : - /* Legacy weak OC Msp DeInit Callback */ - htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; - break; - - case HAL_TIM_PWM_MSPINIT_CB_ID : - /* Legacy weak PWM Msp Init Callback */ - htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; - break; - - case HAL_TIM_PWM_MSPDEINIT_CB_ID : - /* Legacy weak PWM Msp DeInit Callback */ - htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; - break; - - case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : - /* Legacy weak One Pulse Msp Init Callback */ - htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; - break; - - case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : - /* Legacy weak One Pulse Msp DeInit Callback */ - htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; - break; - - case HAL_TIM_ENCODER_MSPINIT_CB_ID : - /* Legacy weak Encoder Msp Init Callback */ - htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; - break; - - case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : - /* Legacy weak Encoder Msp DeInit Callback */ - htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; - break; - - case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : - /* Legacy weak Hall Sensor Msp Init Callback */ - htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; - break; - - case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : - /* Legacy weak Hall Sensor Msp DeInit Callback */ - htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; - break; - - default : - /* Return error status */ - status = HAL_ERROR; - break; - } - } - else - { - /* Return error status */ - status = HAL_ERROR; - } - - return status; -} -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions - * @brief TIM Peripheral State functions - * -@verbatim - ============================================================================== - ##### Peripheral State functions ##### - ============================================================================== - [..] - This subsection permits to get in run-time the status of the peripheral - and the data flow. - -@endverbatim - * @{ - */ - -/** - * @brief Return the TIM Base handle state. - * @param htim TIM Base handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM OC handle state. - * @param htim TIM Output Compare handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM PWM handle state. - * @param htim TIM handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM Input Capture handle state. - * @param htim TIM IC handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM One Pulse Mode handle state. - * @param htim TIM OPM handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM Encoder Mode handle state. - * @param htim TIM Encoder Interface handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return the TIM Encoder Mode handle state. - * @param htim TIM handle - * @retval Active channel - */ -HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim) -{ - return htim->Channel; -} - -/** - * @brief Return actual state of the TIM channel. - * @param htim TIM handle - * @param Channel TIM Channel - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 - * @arg TIM_CHANNEL_2: TIM Channel 2 - * @arg TIM_CHANNEL_3: TIM Channel 3 - * @arg TIM_CHANNEL_4: TIM Channel 4 - * @arg TIM_CHANNEL_5: TIM Channel 5 - * @arg TIM_CHANNEL_6: TIM Channel 6 - * @retval TIM Channel state - */ -HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_TIM_ChannelStateTypeDef channel_state; - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); - - return channel_state; -} - -/** - * @brief Return actual state of a DMA burst operation. - * @param htim TIM handle - * @retval DMA burst state - */ -HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); - - return htim->DMABurstState; -} - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup TIM_Private_Functions TIM Private Functions - * @{ - */ - -/** - * @brief TIM DMA error callback - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIM_DMAError(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); - } - else - { - htim->State = HAL_TIM_STATE_READY; - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->ErrorCallback(htim); -#else - HAL_TIM_ErrorCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA Delay Pulse complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); - } - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA Delay Pulse half complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PWM_PulseFinishedHalfCpltCallback(htim); -#else - HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA Capture complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); - } - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureCallback(htim); -#else - HAL_TIM_IC_CaptureCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA Capture half complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->IC_CaptureHalfCpltCallback(htim); -#else - HAL_TIM_IC_CaptureHalfCpltCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA Period Elapse complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) - { - htim->State = HAL_TIM_STATE_READY; - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PeriodElapsedCallback(htim); -#else - HAL_TIM_PeriodElapsedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - -/** - * @brief TIM DMA Period Elapse half complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PeriodElapsedHalfCpltCallback(htim); -#else - HAL_TIM_PeriodElapsedHalfCpltCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - -/** - * @brief TIM DMA Trigger callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) - { - htim->State = HAL_TIM_STATE_READY; - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->TriggerCallback(htim); -#else - HAL_TIM_TriggerCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - -/** - * @brief TIM DMA Trigger half complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->TriggerHalfCpltCallback(htim); -#else - HAL_TIM_TriggerHalfCpltCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - -/** - * @brief Time Base configuration - * @param TIMx TIM peripheral - * @param Structure TIM Base configuration structure - * @retval None - */ -void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure) -{ - uint32_t tmpcr1; - tmpcr1 = TIMx->CR1; - - /* Set TIM Time Base Unit parameters ---------------------------------------*/ - if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) - { - /* Select the Counter Mode */ - tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); - tmpcr1 |= Structure->CounterMode; - } - - if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) - { - /* Set the clock division */ - tmpcr1 &= ~TIM_CR1_CKD; - tmpcr1 |= (uint32_t)Structure->ClockDivision; - } - - /* Set the auto-reload preload */ - MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); - - TIMx->CR1 = tmpcr1; - - /* Set the Autoreload value */ - TIMx->ARR = (uint32_t)Structure->Period ; - - /* Set the Prescaler value */ - TIMx->PSC = Structure->Prescaler; - - if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) - { - /* Set the Repetition Counter value */ - TIMx->RCR = Structure->RepetitionCounter; - } - - /* Generate an update event to reload the Prescaler - and the repetition counter (only for advanced timer) value immediately */ - TIMx->EGR = TIM_EGR_UG; - - /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */ - if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE)) - { - /* Clear the update flag */ - CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE); - } -} - -/** - * @brief Timer Output Compare 1 configuration - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - - /* Disable the Channel 1: Reset the CC1E Bit */ - TIMx->CCER &= ~TIM_CCER_CC1E; - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - - /* Get the TIMx CCMR1 register value */ - tmpccmrx = TIMx->CCMR1; - - /* Reset the Output Compare Mode Bits */ - tmpccmrx &= ~TIM_CCMR1_OC1M; - tmpccmrx &= ~TIM_CCMR1_CC1S; - /* Select the Output Compare Mode */ - tmpccmrx |= OC_Config->OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC1P; - /* Set the Output Compare Polarity */ - tmpccer |= OC_Config->OCPolarity; - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) - { - /* Check parameters */ - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC1NP; - /* Set the Output N Polarity */ - tmpccer |= OC_Config->OCNPolarity; - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC1NE; - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - { - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS1; - tmpcr2 &= ~TIM_CR2_OIS1N; - /* Set the Output Idle state */ - tmpcr2 |= OC_Config->OCIdleState; - /* Set the Output N Idle state */ - tmpcr2 |= OC_Config->OCNIdleState; - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR1 */ - TIMx->CCMR1 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR1 = OC_Config->Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Timer Output Compare 2 configuration - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - - /* Disable the Channel 2: Reset the CC2E Bit */ - TIMx->CCER &= ~TIM_CCER_CC2E; - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - - /* Get the TIMx CCMR1 register value */ - tmpccmrx = TIMx->CCMR1; - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR1_OC2M; - tmpccmrx &= ~TIM_CCMR1_CC2S; - - /* Select the Output Compare Mode */ - tmpccmrx |= (OC_Config->OCMode << 8U); - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC2P; - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 4U); - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) - { - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC2NP; - /* Set the Output N Polarity */ - tmpccer |= (OC_Config->OCNPolarity << 4U); - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC2NE; - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - { - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS2; - tmpcr2 &= ~TIM_CR2_OIS2N; - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 2U); - /* Set the Output N Idle state */ - tmpcr2 |= (OC_Config->OCNIdleState << 2U); - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR1 */ - TIMx->CCMR1 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR2 = OC_Config->Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Timer Output Compare 3 configuration - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - - /* Disable the Channel 3: Reset the CC2E Bit */ - TIMx->CCER &= ~TIM_CCER_CC3E; - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - - /* Get the TIMx CCMR2 register value */ - tmpccmrx = TIMx->CCMR2; - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR2_OC3M; - tmpccmrx &= ~TIM_CCMR2_CC3S; - /* Select the Output Compare Mode */ - tmpccmrx |= OC_Config->OCMode; - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC3P; - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 8U); - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) - { - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC3NP; - /* Set the Output N Polarity */ - tmpccer |= (OC_Config->OCNPolarity << 8U); - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC3NE; - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - { - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS3; - tmpcr2 &= ~TIM_CR2_OIS3N; - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 4U); - /* Set the Output N Idle state */ - tmpcr2 |= (OC_Config->OCNIdleState << 4U); - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR3 = OC_Config->Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Timer Output Compare 4 configuration - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - - /* Disable the Channel 4: Reset the CC4E Bit */ - TIMx->CCER &= ~TIM_CCER_CC4E; - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - - /* Get the TIMx CCMR2 register value */ - tmpccmrx = TIMx->CCMR2; - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR2_OC4M; - tmpccmrx &= ~TIM_CCMR2_CC4S; - - /* Select the Output Compare Mode */ - tmpccmrx |= (OC_Config->OCMode << 8U); - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC4P; - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 12U); - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - { - /* Check parameters */ - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS4; - - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 6U); - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - - /* Set the Capture Compare Register value */ - TIMx->CCR4 = OC_Config->Pulse; - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; -} - -/** - * @brief Slave Timer configuration function - * @param htim TIM handle - * @param sSlaveConfig Slave timer configuration - * @retval None - */ -static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, - const TIM_SlaveConfigTypeDef *sSlaveConfig) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Get the TIMx SMCR register value */ - tmpsmcr = htim->Instance->SMCR; - - /* Reset the Trigger Selection Bits */ - tmpsmcr &= ~TIM_SMCR_TS; - /* Set the Input Trigger source */ - tmpsmcr |= sSlaveConfig->InputTrigger; - - /* Reset the slave mode Bits */ - tmpsmcr &= ~TIM_SMCR_SMS; - /* Set the slave mode */ - tmpsmcr |= sSlaveConfig->SlaveMode; - - /* Write to TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - - /* Configure the trigger prescaler, filter, and polarity */ - switch (sSlaveConfig->InputTrigger) - { - case TIM_TS_ETRF: - { - /* Check the parameters */ - assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler)); - assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); - assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - /* Configure the ETR Trigger source */ - TIM_ETR_SetConfig(htim->Instance, - sSlaveConfig->TriggerPrescaler, - sSlaveConfig->TriggerPolarity, - sSlaveConfig->TriggerFilter); - break; - } - - case TIM_TS_TI1F_ED: - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - - if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) - { - return HAL_ERROR; - } - - /* Disable the Channel 1: Reset the CC1E Bit */ - tmpccer = htim->Instance->CCER; - htim->Instance->CCER &= ~TIM_CCER_CC1E; - tmpccmr1 = htim->Instance->CCMR1; - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC1F; - tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U); - - /* Write to TIMx CCMR1 and CCER registers */ - htim->Instance->CCMR1 = tmpccmr1; - htim->Instance->CCER = tmpccer; - break; - } - - case TIM_TS_TI1FP1: - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); - assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - - /* Configure TI1 Filter and Polarity */ - TIM_TI1_ConfigInputStage(htim->Instance, - sSlaveConfig->TriggerPolarity, - sSlaveConfig->TriggerFilter); - break; - } - - case TIM_TS_TI2FP2: - { - /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); - assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - - /* Configure TI2 Filter and Polarity */ - TIM_TI2_ConfigInputStage(htim->Instance, - sSlaveConfig->TriggerPolarity, - sSlaveConfig->TriggerFilter); - break; - } - - case TIM_TS_ITR0: - case TIM_TS_ITR1: - case TIM_TS_ITR2: - case TIM_TS_ITR3: - { - /* Check the parameter */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - break; - } - - default: - status = HAL_ERROR; - break; - } - - return status; -} - -/** - * @brief Configure the TI1 as Input. - * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @arg TIM_ICPOLARITY_BOTHEDGE - * @param TIM_ICSelection specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1. - * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2. - * @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC. - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 - * (on channel2 path) is used as the input signal. Therefore CCMR1 must be - * protected against un-initialized filter and polarity values. - */ -void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 1: Reset the CC1E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC1E; - tmpccmr1 = TIMx->CCMR1; - - /* Select the Input */ - if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) - { - tmpccmr1 &= ~TIM_CCMR1_CC1S; - tmpccmr1 |= TIM_ICSelection; - } - else - { - tmpccmr1 |= TIM_CCMR1_CC1S_0; - } - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC1F; - tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F); - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); - tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP)); - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the Polarity and Filter for TI1. - * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @arg TIM_ICPOLARITY_BOTHEDGE - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 1: Reset the CC1E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC1E; - tmpccmr1 = TIMx->CCMR1; - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC1F; - tmpccmr1 |= (TIM_ICFilter << 4U); - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); - tmpccer |= TIM_ICPolarity; - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI2 as Input. - * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @arg TIM_ICPOLARITY_BOTHEDGE - * @param TIM_ICSelection specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2. - * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1. - * @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC. - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 - * (on channel1 path) is used as the input signal. Therefore CCMR1 must be - * protected against un-initialized filter and polarity values. - */ -static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 2: Reset the CC2E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC2E; - tmpccmr1 = TIMx->CCMR1; - - /* Select the Input */ - tmpccmr1 &= ~TIM_CCMR1_CC2S; - tmpccmr1 |= (TIM_ICSelection << 8U); - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC2F; - tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F); - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP)); - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the Polarity and Filter for TI2. - * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @arg TIM_ICPOLARITY_BOTHEDGE - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 2: Reset the CC2E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC2E; - tmpccmr1 = TIMx->CCMR1; - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC2F; - tmpccmr1 |= (TIM_ICFilter << 12U); - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - tmpccer |= (TIM_ICPolarity << 4U); - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI3 as Input. - * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @param TIM_ICSelection specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3. - * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4. - * @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC. - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 - * (on channel1 path) is used as the input signal. Therefore CCMR2 must be - * protected against un-initialized filter and polarity values. - */ -static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr2; - uint32_t tmpccer; - - /* Disable the Channel 3: Reset the CC3E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC3E; - tmpccmr2 = TIMx->CCMR2; - - /* Select the Input */ - tmpccmr2 &= ~TIM_CCMR2_CC3S; - tmpccmr2 |= TIM_ICSelection; - - /* Set the filter */ - tmpccmr2 &= ~TIM_CCMR2_IC3F; - tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F); - - /* Select the Polarity and set the CC3E Bit */ - tmpccer &= ~(TIM_CCER_CC3P); - tmpccer |= ((TIM_ICPolarity << 8U) & TIM_CCER_CC3P); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer; -} - -/** - * @brief Configure the TI4 as Input. - * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity The Input Polarity. - * This parameter can be one of the following values: - * @arg TIM_ICPOLARITY_RISING - * @arg TIM_ICPOLARITY_FALLING - * @param TIM_ICSelection specifies the input to be used. - * This parameter can be one of the following values: - * @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4. - * @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3. - * @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC. - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 - * (on channel1 path) is used as the input signal. Therefore CCMR2 must be - * protected against un-initialized filter and polarity values. - * @retval None - */ -static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, - uint32_t TIM_ICFilter) -{ - uint32_t tmpccmr2; - uint32_t tmpccer; - - /* Disable the Channel 4: Reset the CC4E Bit */ - tmpccer = TIMx->CCER; - TIMx->CCER &= ~TIM_CCER_CC4E; - tmpccmr2 = TIMx->CCMR2; - - /* Select the Input */ - tmpccmr2 &= ~TIM_CCMR2_CC4S; - tmpccmr2 |= (TIM_ICSelection << 8U); - - /* Set the filter */ - tmpccmr2 &= ~TIM_CCMR2_IC4F; - tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F); - - /* Select the Polarity and set the CC4E Bit */ - tmpccer &= ~(TIM_CCER_CC4P); - tmpccer |= ((TIM_ICPolarity << 12U) & TIM_CCER_CC4P); - - /* Write to TIMx CCMR2 and CCER registers */ - TIMx->CCMR2 = tmpccmr2; - TIMx->CCER = tmpccer ; -} - -/** - * @brief Selects the Input Trigger source - * @param TIMx to select the TIM peripheral - * @param InputTriggerSource The Input Trigger source. - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal Trigger 0 - * @arg TIM_TS_ITR1: Internal Trigger 1 - * @arg TIM_TS_ITR2: Internal Trigger 2 - * @arg TIM_TS_ITR3: Internal Trigger 3 - * @arg TIM_TS_TI1F_ED: TI1 Edge Detector - * @arg TIM_TS_TI1FP1: Filtered Timer Input 1 - * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 - * @arg TIM_TS_ETRF: External Trigger input - * @retval None - */ -static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) -{ - uint32_t tmpsmcr; - - /* Get the TIMx SMCR register value */ - tmpsmcr = TIMx->SMCR; - /* Reset the TS Bits */ - tmpsmcr &= ~TIM_SMCR_TS; - /* Set the Input Trigger source and the slave mode*/ - tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; -} -/** - * @brief Configures the TIMx External Trigger (ETR). - * @param TIMx to select the TIM peripheral - * @param TIM_ExtTRGPrescaler The external Trigger Prescaler. - * This parameter can be one of the following values: - * @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF. - * @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2. - * @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4. - * @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8. - * @param TIM_ExtTRGPolarity The external Trigger Polarity. - * This parameter can be one of the following values: - * @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active. - * @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active. - * @param ExtTRGFilter External Trigger Filter. - * This parameter must be a value between 0x00 and 0x0F - * @retval None - */ -void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, - uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) -{ - uint32_t tmpsmcr; - - tmpsmcr = TIMx->SMCR; - - /* Reset the ETR Bits */ - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - - /* Set the Prescaler, the Filter value and the Polarity */ - tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); - - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; -} - -/** - * @brief Enables or disables the TIM Capture Compare Channel x. - * @param TIMx to select the TIM peripheral - * @param Channel specifies the TIM Channel - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 - * @arg TIM_CHANNEL_2: TIM Channel 2 - * @arg TIM_CHANNEL_3: TIM Channel 3 - * @arg TIM_CHANNEL_4: TIM Channel 4 - * @param ChannelState specifies the TIM Channel CCxE bit new state. - * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. - * @retval None - */ -void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) -{ - uint32_t tmp; - - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(TIMx)); - assert_param(IS_TIM_CHANNELS(Channel)); - - tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ - - /* Reset the CCxE Bit */ - TIMx->CCER &= ~tmp; - - /* Set or reset the CCxE Bit */ - TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ -} - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) -/** - * @brief Reset interrupt callbacks to the legacy weak callbacks. - * @param htim pointer to a TIM_HandleTypeDef structure that contains - * the configuration information for TIM module. - * @retval None - */ -void TIM_ResetCallback(TIM_HandleTypeDef *htim) -{ - /* Reset the TIM callback to the legacy weak callbacks */ - htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; - htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; - htim->TriggerCallback = HAL_TIM_TriggerCallback; - htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; - htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; - htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; - htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; - htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; - htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; - htim->ErrorCallback = HAL_TIM_ErrorCallback; - htim->CommutationCallback = HAL_TIMEx_CommutCallback; - htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; - htim->BreakCallback = HAL_TIMEx_BreakCallback; -} -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - -/** - * @} - */ - -#endif /* HAL_TIM_MODULE_ENABLED */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c b/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c deleted file mode 100644 index 8a565a6..0000000 --- a/Software/master/PressureSensorBoardMaster/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c +++ /dev/null @@ -1,2359 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_tim_ex.c - * @author MCD Application Team - * @brief TIM HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Timer Extended peripheral: - * + Time Hall Sensor Interface Initialization - * + Time Hall Sensor Interface Start - * + Time Complementary signal break and dead time configuration - * + Time Master and Slave synchronization configuration - * + Timer remapping capabilities configuration - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### TIMER Extended features ##### - ============================================================================== - [..] - The Timer Extended features include: - (#) Complementary outputs with programmable dead-time for : - (++) Output Compare - (++) PWM generation (Edge and Center-aligned Mode) - (++) One-pulse mode output - (#) Synchronization circuit to control the timer with external signals and to - interconnect several timers together. - (#) Break input to put the timer output signals in reset state or in a known state. - (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for - positioning purposes - - ##### How to use this driver ##### - ============================================================================== - [..] - (#) Initialize the TIM low level resources by implementing the following functions - depending on the selected feature: - (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() - - (#) Initialize the TIM low level resources : - (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); - (##) TIM pins configuration - (+++) Enable the clock for the TIM GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); - - (#) The external Clock can be configured, if needed (the default clock is the - internal clock from the APBx), using the following function: - HAL_TIM_ConfigClockSource, the clock configuration should be done before - any start function. - - (#) Configure the TIM in the desired functioning mode using one of the - initialization function of this driver: - (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the - Timer Hall Sensor Interface and the commutation event with the corresponding - Interrupt and DMA request if needed (Note that One Timer is used to interface - with the Hall sensor Interface and another Timer should be used to use - the commutation event). - - (#) Activate the TIM peripheral using one of the start functions: - (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), - HAL_TIMEx_OCN_Start_IT() - (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), - HAL_TIMEx_PWMN_Start_IT() - (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() - (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), - HAL_TIMEx_HallSensor_Start_IT(). - - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/** @addtogroup STM32F1xx_HAL_Driver - * @{ - */ - -/** @defgroup TIMEx TIMEx - * @brief TIM Extended HAL module driver - * @{ - */ - -#ifdef HAL_TIM_MODULE_ENABLED - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macros ------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma); -static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma); -static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState); - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions - * @{ - */ - -/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions - * @brief Timer Hall Sensor functions - * -@verbatim - ============================================================================== - ##### Timer Hall Sensor functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Initialize and configure TIM HAL Sensor. - (+) De-initialize TIM HAL Sensor. - (+) Start the Hall Sensor Interface. - (+) Stop the Hall Sensor Interface. - (+) Start the Hall Sensor Interface and enable interrupts. - (+) Stop the Hall Sensor Interface and disable interrupts. - (+) Start the Hall Sensor Interface and enable DMA transfers. - (+) Stop the Hall Sensor Interface and disable DMA transfers. - -@endverbatim - * @{ - */ -/** - * @brief Initializes the TIM Hall Sensor Interface and initialize the associated handle. - * @note When the timer instance is initialized in Hall Sensor Interface mode, - * timer channels 1 and channel 2 are reserved and cannot be used for - * other purpose. - * @param htim TIM Hall Sensor Interface handle - * @param sConfig TIM Hall Sensor configuration structure - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig) -{ - TIM_OC_InitTypeDef OC_Config; - - /* Check the TIM handle allocation */ - if (htim == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); - assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); - - if (htim->State == HAL_TIM_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - /* Reset interrupt callbacks to legacy week callbacks */ - TIM_ResetCallback(htim); - - if (htim->HallSensor_MspInitCallback == NULL) - { - htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->HallSensor_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIMEx_HallSensor_MspInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Configure the Time base in the Encoder Mode */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - - /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ - TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); - - /* Reset the IC1PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; - /* Set the IC1PSC value */ - htim->Instance->CCMR1 |= sConfig->IC1Prescaler; - - /* Enable the Hall sensor interface (XOR function of the three inputs) */ - htim->Instance->CR2 |= TIM_CR2_TI1S; - - /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= TIM_TS_TI1F_ED; - - /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ - htim->Instance->SMCR &= ~TIM_SMCR_SMS; - htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; - - /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ - OC_Config.OCFastMode = TIM_OCFAST_DISABLE; - OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; - OC_Config.OCMode = TIM_OCMODE_PWM2; - OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; - OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; - OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; - OC_Config.Pulse = sConfig->Commutation_Delay; - - TIM_OC2_SetConfig(htim->Instance, &OC_Config); - - /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 - register to 101 */ - htim->Instance->CR2 &= ~TIM_CR2_MMS; - htim->Instance->CR2 |= TIM_TRGO_OC2REF; - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - - return HAL_OK; -} - -/** - * @brief DeInitializes the TIM Hall Sensor interface - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_INSTANCE(htim->Instance)); - - htim->State = HAL_TIM_STATE_BUSY; - - /* Disable the TIM Peripheral Clock */ - __HAL_TIM_DISABLE(htim); - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - if (htim->HallSensor_MspDeInitCallback == NULL) - { - htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; - } - /* DeInit the low level hardware */ - htim->HallSensor_MspDeInitCallback(htim); -#else - /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ - HAL_TIMEx_HallSensor_MspDeInit(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - /* Change the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; - - /* Change the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); - - /* Change TIM state */ - htim->State = HAL_TIM_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Initializes the TIM Hall Sensor MSP. - * @param htim TIM Hall Sensor Interface handle - * @retval None - */ -__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitializes TIM Hall Sensor MSP. - * @param htim TIM Hall Sensor Interface handle - * @retval None - */ -__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file - */ -} - -/** - * @brief Starts the TIM Hall Sensor Interface. - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) -{ - uint32_t tmpsmcr; - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Input Capture channel 1 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Hall sensor Interface. - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channels 1, 2 and 3 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Hall Sensor Interface in interrupt mode. - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) -{ - uint32_t tmpsmcr; - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the capture compare Interrupts 1 event */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - - /* Enable the Input Capture channel 1 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Hall Sensor Interface in interrupt mode. - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channel 1 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - - /* Disable the capture compare Interrupts event */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Hall Sensor Interface in DMA mode. - * @param htim TIM Hall Sensor Interface handle - * @param pData The destination Buffer address. - * @param Length The length of data to be transferred from TIM peripheral to memory. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) -{ - uint32_t tmpsmcr; - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Set the TIM channel state */ - if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) - || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) - { - return HAL_BUSY; - } - else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) - && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - /* Enable the Input Capture channel 1 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); - - /* Set the DMA Input Capture 1 Callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; - - /* Enable the DMA channel for Capture 1*/ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the capture compare 1 Interrupt */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Hall Sensor Interface in DMA mode. - * @param htim TIM Hall Sensor Interface handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) -{ - /* Check the parameters */ - assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - - /* Disable the Input Capture channel 1 - (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, - TIM_CHANNEL_2 and TIM_CHANNEL_3) */ - TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); - - - /* Disable the capture compare Interrupts 1 event */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions - * @brief Timer Complementary Output Compare functions - * -@verbatim - ============================================================================== - ##### Timer Complementary Output Compare functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Start the Complementary Output Compare/PWM. - (+) Stop the Complementary Output Compare/PWM. - (+) Start the Complementary Output Compare/PWM and enable interrupts. - (+) Stop the Complementary Output Compare/PWM and disable interrupts. - (+) Start the Complementary Output Compare/PWM and enable DMA transfers. - (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. - -@endverbatim - * @{ - */ - -/** - * @brief Starts the TIM Output Compare signal generation on the complementary - * output. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM Output Compare signal generation on the complementary - * output. - * @param htim TIM handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Disable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM Output Compare signal generation in interrupt mode - * on the complementary output. - * @param htim TIM OC handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Enable the TIM Output Compare interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Enable the TIM Output Compare interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Enable the TIM Output Compare interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); - break; - } - - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the TIM Break interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); - - /* Enable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Output Compare signal generation in interrupt mode - * on the complementary output. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpccer; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Output Compare interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Output Compare interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Output Compare interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the TIM Break interrupt (only if no more channel is active) */ - tmpccer = htim->Instance->CCER; - if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET) - { - __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); - } - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @brief Starts the TIM Output Compare signal generation in DMA mode - * on the complementary output. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @param pData The source Buffer address. - * @param Length The length of data to be transferred from memory to TIM peripheral - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Set the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) - { - return HAL_BUSY; - } - else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Output Compare DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Output Compare DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Output Compare DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM Output Compare signal generation in DMA mode - * on the complementary output. - * @param htim TIM Output Compare handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Output Compare DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Output Compare DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Output Compare DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the Capture compare channel N */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions - * @brief Timer Complementary PWM functions - * -@verbatim - ============================================================================== - ##### Timer Complementary PWM functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Start the Complementary PWM. - (+) Stop the Complementary PWM. - (+) Start the Complementary PWM and enable interrupts. - (+) Stop the Complementary PWM and disable interrupts. - (+) Start the Complementary PWM and enable DMA transfers. - (+) Stop the Complementary PWM and disable DMA transfers. -@endverbatim - * @{ - */ - -/** - * @brief Starts the PWM signal generation on the complementary output. - * @param htim TIM handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the PWM signal generation on the complementary output. - * @param htim TIM handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Disable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the PWM signal generation in interrupt mode on the - * complementary output. - * @param htim TIM handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - { - return HAL_ERROR; - } - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Enable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the TIM Break interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); - - /* Enable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the PWM signal generation in interrupt mode on the - * complementary output. - * @param htim TIM handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpccer; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the TIM Break interrupt (only if no more channel is active) */ - tmpccer = htim->Instance->CCER; - if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET) - { - __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); - } - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @brief Starts the TIM PWM signal generation in DMA mode on the - * complementary output - * @param htim TIM handle - * @param Channel TIM Channel to be enabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @param pData The source Buffer address. - * @param Length The length of data to be transferred from memory to TIM peripheral - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - /* Set the TIM complementary channel state */ - if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) - { - return HAL_BUSY; - } - else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) - { - if ((pData == NULL) || (Length == 0U)) - { - return HAL_ERROR; - } - else - { - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - } - } - else - { - return HAL_ERROR; - } - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); - break; - } - - case TIM_CHANNEL_2: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); - break; - } - - case TIM_CHANNEL_3: - { - /* Set the DMA compare callbacks */ - htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; - htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; - - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; - - /* Enable the DMA channel */ - if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, - Length) != HAL_OK) - { - /* Return error status */ - return HAL_ERROR; - } - /* Enable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Enable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - { - __HAL_TIM_ENABLE(htim); - } - } - else - { - __HAL_TIM_ENABLE(htim); - } - } - - /* Return function status */ - return status; -} - -/** - * @brief Stops the TIM PWM signal generation in DMA mode on the complementary - * output - * @param htim TIM handle - * @param Channel TIM Channel to be disabled - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - HAL_StatusTypeDef status = HAL_OK; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); - - switch (Channel) - { - case TIM_CHANNEL_1: - { - /* Disable the TIM Capture/Compare 1 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); - break; - } - - case TIM_CHANNEL_2: - { - /* Disable the TIM Capture/Compare 2 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); - break; - } - - case TIM_CHANNEL_3: - { - /* Disable the TIM Capture/Compare 3 DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); - (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); - break; - } - - default: - status = HAL_ERROR; - break; - } - - if (status == HAL_OK) - { - /* Disable the complementary PWM output */ - TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM complementary channel state */ - TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); - } - - /* Return function status */ - return status; -} - -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions - * @brief Timer Complementary One Pulse functions - * -@verbatim - ============================================================================== - ##### Timer Complementary One Pulse functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Start the Complementary One Pulse generation. - (+) Stop the Complementary One Pulse. - (+) Start the Complementary One Pulse and enable interrupts. - (+) Stop the Complementary One Pulse and disable interrupts. - -@endverbatim - * @{ - */ - -/** - * @brief Starts the TIM One Pulse signal generation on the complementary - * output. - * @note OutputChannel must match the pulse output channel chosen when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel pulse output channel to enable - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the complementary One Pulse output channel and the Input Capture channel */ - TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); - TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM One Pulse signal generation on the complementary - * output. - * @note OutputChannel must match the pulse output channel chosen when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel pulse output channel to disable - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); - - /* Disable the complementary One Pulse output channel and the Input Capture channel */ - TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); - TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Starts the TIM One Pulse signal generation in interrupt mode on the - * complementary channel. - * @note OutputChannel must match the pulse output channel chosen when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel pulse output channel to enable - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; - HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); - HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); - HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); - - /* Check the TIM channels state */ - if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) - || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) - { - return HAL_ERROR; - } - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); - - /* Enable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - - /* Enable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); - - /* Enable the complementary One Pulse output channel and the Input Capture channel */ - TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); - TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); - - /* Enable the Main Output */ - __HAL_TIM_MOE_ENABLE(htim); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Stops the TIM One Pulse signal generation in interrupt mode on the - * complementary channel. - * @note OutputChannel must match the pulse output channel chosen when calling - * @ref HAL_TIM_OnePulse_ConfigChannel(). - * @param htim TIM One Pulse handle - * @param OutputChannel pulse output channel to disable - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 selected - * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) -{ - uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); - - /* Disable the TIM Capture/Compare 1 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); - - /* Disable the TIM Capture/Compare 2 interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); - - /* Disable the complementary One Pulse output channel and the Input Capture channel */ - TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); - TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); - - /* Disable the Main Output */ - __HAL_TIM_MOE_DISABLE(htim); - - /* Disable the Peripheral */ - __HAL_TIM_DISABLE(htim); - - /* Set the TIM channels state */ - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - - /* Return function status */ - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions - * @brief Peripheral Control functions - * -@verbatim - ============================================================================== - ##### Peripheral Control functions ##### - ============================================================================== - [..] - This section provides functions allowing to: - (+) Configure the commutation event in case of use of the Hall sensor interface. - (+) Configure Output channels for OC and PWM mode. - - (+) Configure Complementary channels, break features and dead time. - (+) Configure Master synchronization. - (+) Configure timer remapping capabilities. - -@endverbatim - * @{ - */ - -/** - * @brief Configure the TIM commutation event sequence. - * @note This function is mandatory to use the commutation event in order to - * update the configuration at each commutation detection on the TRGI input of the Timer, - * the typical use of this feature is with the use of another Timer(interface Timer) - * configured in Hall sensor interface, this interface Timer will generate the - * commutation at its TRGO output (connected to Timer used in this function) each time - * the TI1 of the Interface Timer detect a commutation at its input TI1. - * @param htim TIM handle - * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal trigger 0 selected - * @arg TIM_TS_ITR1: Internal trigger 1 selected - * @arg TIM_TS_ITR2: Internal trigger 2 selected - * @arg TIM_TS_ITR3: Internal trigger 3 selected - * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource the Commutation Event source - * This parameter can be one of the following values: - * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer - * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); - assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); - - __HAL_LOCK(htim); - - if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || - (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) - { - /* Select the Input trigger */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= InputTrigger; - } - - /* Select the Capture Compare preload feature */ - htim->Instance->CR2 |= TIM_CR2_CCPC; - /* Select the Commutation event source */ - htim->Instance->CR2 &= ~TIM_CR2_CCUS; - htim->Instance->CR2 |= CommutationSource; - - /* Disable Commutation Interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); - - /* Disable Commutation DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configure the TIM commutation event sequence with interrupt. - * @note This function is mandatory to use the commutation event in order to - * update the configuration at each commutation detection on the TRGI input of the Timer, - * the typical use of this feature is with the use of another Timer(interface Timer) - * configured in Hall sensor interface, this interface Timer will generate the - * commutation at its TRGO output (connected to Timer used in this function) each time - * the TI1 of the Interface Timer detect a commutation at its input TI1. - * @param htim TIM handle - * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal trigger 0 selected - * @arg TIM_TS_ITR1: Internal trigger 1 selected - * @arg TIM_TS_ITR2: Internal trigger 2 selected - * @arg TIM_TS_ITR3: Internal trigger 3 selected - * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource the Commutation Event source - * This parameter can be one of the following values: - * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer - * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); - assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); - - __HAL_LOCK(htim); - - if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || - (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) - { - /* Select the Input trigger */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= InputTrigger; - } - - /* Select the Capture Compare preload feature */ - htim->Instance->CR2 |= TIM_CR2_CCPC; - /* Select the Commutation event source */ - htim->Instance->CR2 &= ~TIM_CR2_CCUS; - htim->Instance->CR2 |= CommutationSource; - - /* Disable Commutation DMA request */ - __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); - - /* Enable the Commutation Interrupt */ - __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configure the TIM commutation event sequence with DMA. - * @note This function is mandatory to use the commutation event in order to - * update the configuration at each commutation detection on the TRGI input of the Timer, - * the typical use of this feature is with the use of another Timer(interface Timer) - * configured in Hall sensor interface, this interface Timer will generate the - * commutation at its TRGO output (connected to Timer used in this function) each time - * the TI1 of the Interface Timer detect a commutation at its input TI1. - * @note The user should configure the DMA in his own software, in This function only the COMDE bit is set - * @param htim TIM handle - * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor - * This parameter can be one of the following values: - * @arg TIM_TS_ITR0: Internal trigger 0 selected - * @arg TIM_TS_ITR1: Internal trigger 1 selected - * @arg TIM_TS_ITR2: Internal trigger 2 selected - * @arg TIM_TS_ITR3: Internal trigger 3 selected - * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource the Commutation Event source - * This parameter can be one of the following values: - * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer - * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, - uint32_t CommutationSource) -{ - /* Check the parameters */ - assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); - assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); - - __HAL_LOCK(htim); - - if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || - (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) - { - /* Select the Input trigger */ - htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= InputTrigger; - } - - /* Select the Capture Compare preload feature */ - htim->Instance->CR2 |= TIM_CR2_CCPC; - /* Select the Commutation event source */ - htim->Instance->CR2 &= ~TIM_CR2_CCUS; - htim->Instance->CR2 |= CommutationSource; - - /* Enable the Commutation DMA Request */ - /* Set the DMA Commutation Callback */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; - /* Set the DMA error callback */ - htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; - - /* Disable Commutation Interrupt */ - __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); - - /* Enable the Commutation DMA Request */ - __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configures the TIM in master mode. - * @param htim TIM handle. - * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that - * contains the selected trigger output (TRGO) and the Master/Slave - * mode. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, - const TIM_MasterConfigTypeDef *sMasterConfig) -{ - uint32_t tmpcr2; - uint32_t tmpsmcr; - - /* Check the parameters */ - assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); - assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); - - /* Check input state */ - __HAL_LOCK(htim); - - /* Change the handler state */ - htim->State = HAL_TIM_STATE_BUSY; - - /* Get the TIMx CR2 register value */ - tmpcr2 = htim->Instance->CR2; - - /* Get the TIMx SMCR register value */ - tmpsmcr = htim->Instance->SMCR; - - /* Reset the MMS Bits */ - tmpcr2 &= ~TIM_CR2_MMS; - /* Select the TRGO source */ - tmpcr2 |= sMasterConfig->MasterOutputTrigger; - - /* Update TIMx CR2 */ - htim->Instance->CR2 = tmpcr2; - - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - { - /* Reset the MSM Bit */ - tmpsmcr &= ~TIM_SMCR_MSM; - /* Set master mode */ - tmpsmcr |= sMasterConfig->MasterSlaveMode; - - /* Update TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - } - - /* Change the htim state */ - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State - * and the AOE(automatic output enable). - * @param htim TIM handle - * @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that - * contains the BDTR Register configuration information for the TIM peripheral. - * @note Interrupts can be generated when an active level is detected on the - * break input, the break 2 input or the system break input. Break - * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, - const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) -{ - /* Keep this variable initialized to 0 as it is used to configure BDTR register */ - uint32_t tmpbdtr = 0U; - - /* Check the parameters */ - assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); - assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); - assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); - assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); - assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); - assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); - assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); - assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); - - /* Check input state */ - __HAL_LOCK(htim); - - /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, - the OSSI State, the dead time value and the Automatic Output Enable Bit */ - - /* Set the BDTR bits */ - MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); - MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); - MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode); - MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode); - MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); - MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); - MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); - - - /* Set TIMx_BDTR */ - htim->Instance->BDTR = tmpbdtr; - - __HAL_UNLOCK(htim); - - return HAL_OK; -} - -/** - * @brief Configures the TIMx Remapping input capabilities. - * @param htim TIM handle. - * @param Remap specifies the TIM remapping source. - * - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - UNUSED(Remap); - - return HAL_OK; -} - -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions - * @brief Extended Callbacks functions - * -@verbatim - ============================================================================== - ##### Extended Callbacks functions ##### - ============================================================================== - [..] - This section provides Extended TIM callback functions: - (+) Timer Commutation callback - (+) Timer Break callback - -@endverbatim - * @{ - */ - -/** - * @brief Commutation callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_CommutCallback could be implemented in the user file - */ -} -/** - * @brief Commutation half complete callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file - */ -} - -/** - * @brief Break detection callback in non-blocking mode - * @param htim TIM handle - * @retval None - */ -__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIMEx_BreakCallback could be implemented in the user file - */ -} -/** - * @} - */ - -/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions - * @brief Extended Peripheral State functions - * -@verbatim - ============================================================================== - ##### Extended Peripheral State functions ##### - ============================================================================== - [..] - This subsection permits to get in run-time the status of the peripheral - and the data flow. - -@endverbatim - * @{ - */ - -/** - * @brief Return the TIM Hall Sensor interface handle state. - * @param htim TIM Hall Sensor handle - * @retval HAL state - */ -HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(const TIM_HandleTypeDef *htim) -{ - return htim->State; -} - -/** - * @brief Return actual state of the TIM complementary channel. - * @param htim TIM handle - * @param ChannelN TIM Complementary channel - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 - * @arg TIM_CHANNEL_2: TIM Channel 2 - * @arg TIM_CHANNEL_3: TIM Channel 3 - * @retval TIM Complementary channel state - */ -HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const TIM_HandleTypeDef *htim, uint32_t ChannelN) -{ - HAL_TIM_ChannelStateTypeDef channel_state; - - /* Check the parameters */ - assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN)); - - channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN); - - return channel_state; -} -/** - * @} - */ - -/** - * @} - */ - -/* Private functions ---------------------------------------------------------*/ -/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions - * @{ - */ - -/** - * @brief TIM DMA Commutation callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - /* Change the htim state */ - htim->State = HAL_TIM_STATE_READY; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->CommutationCallback(htim); -#else - HAL_TIMEx_CommutCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - -/** - * @brief TIM DMA Commutation half complete callback. - * @param hdma pointer to DMA handle. - * @retval None - */ -void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - /* Change the htim state */ - htim->State = HAL_TIM_STATE_READY; - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->CommutationHalfCpltCallback(htim); -#else - HAL_TIMEx_CommutHalfCpltCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ -} - - -/** - * @brief TIM DMA Delay Pulse complete callback (complementary channel). - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - - if (hdma->Init.Mode == DMA_NORMAL) - { - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - } - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->PWM_PulseFinishedCallback(htim); -#else - HAL_TIM_PWM_PulseFinishedCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief TIM DMA error callback (complementary channel) - * @param hdma pointer to DMA handle. - * @retval None - */ -static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) -{ - TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - - if (hdma == htim->hdma[TIM_DMA_ID_CC1]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); - } - else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) - { - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; - TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); - } - else - { - /* nothing to do */ - } - -#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) - htim->ErrorCallback(htim); -#else - HAL_TIM_ErrorCallback(htim); -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - - htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; -} - -/** - * @brief Enables or disables the TIM Capture Compare Channel xN. - * @param TIMx to select the TIM peripheral - * @param Channel specifies the TIM Channel - * This parameter can be one of the following values: - * @arg TIM_CHANNEL_1: TIM Channel 1 - * @arg TIM_CHANNEL_2: TIM Channel 2 - * @arg TIM_CHANNEL_3: TIM Channel 3 - * @param ChannelNState specifies the TIM Channel CCxNE bit new state. - * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. - * @retval None - */ -static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) -{ - uint32_t tmp; - - tmp = TIM_CCER_CC1NE << (Channel & 0xFU); /* 0xFU = 15 bits max shift */ - - /* Reset the CCxNE Bit */ - TIMx->CCER &= ~tmp; - - /* Set or reset the CCxNE Bit */ - TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0xFU)); /* 0xFU = 15 bits max shift */ -} -/** - * @} - */ - -#endif /* HAL_TIM_MODULE_ENABLED */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.0101 b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.0101 deleted file mode 100644 index 4e040c4..0000000 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.0101 +++ /dev/null @@ -1,3637 +0,0 @@ - - - - -6.1 - -
### uVision Project, (C) Keil Software
- - - - - - - - - - 38003 - Registers - 124 99 - - - 346 - Code Coverage - 877 160 - - - 204 - Performance Analyzer - 1037 - - - - - - 35141 - Event Statistics - - 200 50 700 - - - 1506 - Symbols - - 71 71 71 - - - 1936 - Watch 1 - - 200 133 133 - - - 1937 - Watch 2 - - 200 133 133 - - - 1935 - Call Stack + Locals - - 200 133 133 - - - 2506 - Trace Data - - 75 135 130 95 70 230 200 150 - - - 466 - Source Browser - 500 - 300 - - - - - - - - 1 - 1 - 0 - 0 - -1 - - - - - - - 44 - 0 - 1 - - -32000 - -32000 - - - -1 - -1 - - - 315 - 235 - 1627 - 1193 - - - - 0 - - 593 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000000000000100000064433A5C55736572735C31353433355C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF65433A5C55736572735C31353433355C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C5372635C75736172742E63000000000775736172742E6300000000FFDC7800FFFFFFFF8C433A5C55736572735C31353433355C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C447269766572735C434D5349535C4465766963655C53545C53544D3332463178785C496E636C7564655C73746D33326631303378622E68000000000D73746D33326631303378622E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000E0010000A901000053060000B0030000 - - - - 0 - Build - - -1 - -1 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - D90000004F000000F0040000DA000000 - - - 16 - D900000066000000F0040000F1000000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000E60000003D020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 109 - 109 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000E60000003D020000 - - - 16 - 3C000000530000003801000080020000 - - - - 1465 - 1465 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1935 - 1935 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 195 - 195 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000E60000003D020000 - - - 16 - 3C000000530000003801000080020000 - - - - 196 - 196 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000E60000003D020000 - - - 16 - 3C000000530000003801000080020000 - - - - 197 - 197 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 03000000710200005D0500001B030000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 198 - 198 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0000000006020000F0040000A5020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000071020000A80600001C030000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 203 - 203 - 0 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 38003 - 38003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000E6000000D9020000 - - - 16 - 3C000000530000003801000080020000 - - - - 38007 - 38007 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000710200005D0500001B030000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000071020000A80600001C030000 - - - 16 - 3C000000530000003801000080020000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000071020000A80600001C030000 - - - 16 - 3C000000530000003801000080020000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000071020000A80600001C030000 - - - 16 - 3C000000530000003801000080020000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000ED040000C1000000 - - - 16 - 3C00000053000000B4020000DE000000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - 3C00000053000000110100001A010000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000340300006005000047030000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 1 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 0 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 00000000380000006F02000054000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000001D020000ED0400008C020000 - - - 16 - 3C00000053000000110100001A010000 - - - - 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD9000000DA000000F0040000DE000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D900000066000000F0040000F1000000D90000004F000000F0040000DA0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF170400004F0000001B04000016020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000001B04000066000000F00400002D0200001B0400004F000000F00400001602000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE90000004F000000ED00000056020000010000000200001004000000010000002DFFFFFFCD050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E900000009030000000000004F000000E9000000560200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000002020000F00400000602000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001D020000F0040000BC0200000000000006020000F0040000A502000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF78020000060200007C020000A502000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000056020000600500005A0200000100000001000010040000000100000027FEFFFF01010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000000D030000AB060000E8030000000000005A02000060050000340300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2604 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001148414C5F554152545F5472616E736D69749600000000000000020017657870656374696E675F726573706F6E73655F66726F6D1148414C5F554152545F5472616E736D69740000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 1010 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000019507265737375726553656E736F72426F6172644D61737465729600000000000000010019507265737375726553656E736F72426F6172644D6173746572000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 1707 - 1067 - - - - 1 - Debug - - -1 - -1 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - D90000004F000000AB060000DA000000 - - - 16 - D900000066000000B5050000F1000000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000D200000015030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 109 - 109 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000D200000071020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 1465 - 1465 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C03000049030000A8060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1935 - 1935 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 5C03000049030000A8060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 195 - 195 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000D200000071020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 196 - 196 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000D200000071020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 197 - 197 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 198 - 198 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 000000003203000055030000D1030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 203 - 203 - 1 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - D900000063000000AB060000DA000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 38003 - 38003 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000D200000015030000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 38007 - 38007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000031020000ED0400008C020000 - - - 16 - A4000000BB000000A0010000E8020000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - DC00000066000000B2050000C1000000 - - - 16 - A4000000BB0000001C03000046010000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 1E04000066000000ED040000FD010000 - - - 16 - A4000000BB0000007901000082010000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000D1030000AB060000E4030000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 0 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 1 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 000000001C0000006F02000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 5C030000490300002C060000B8030000 - - - 16 - A4000000BB0000007901000082010000 - - - - 3311 - 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFD9000000DA000000AB060000DE000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000D900000066000000B5050000F1000000D90000004F000000AB060000DA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF170400004F0000001B04000016020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000001B04000066000000F00400002D0200001B0400004F000000F00400001602000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFD50000004F000000D90000002E030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000D5000000A1020000000000004F000000D50000002E0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000002E030000AB0600003203000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000DF020000A5020000B5050000440300005903000032030000AB060000D103000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFF550300003203000059030000D103000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000016020000F00400001A020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000000000000000000031020000F0040000BC020000000000001A020000F0040000A50200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2874 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000E5448524553484F4C445F48494748960000000000000011000E5448524553484F4C445F484947480B63757272656E745F726F77114D61747269785F53656C6563745F526F771748414C5F554152545F527843706C7443616C6C6261636B1650726F636573735F4D6F646275735F436F6D6D616E640E52585F4255464645525F53495A45013610756172745F72785F636F6D706C657465134D61747269785F50726F636573735F44617461144D61737465725F53746174655F4D616368696E650A646174615F76616C69640B6672616D655F696E64657808E58A9FE883BDE7A009E58A9FE883BDE7A03F0F43616C63756C6174655F43524331360F52533438355F456E61626C655F52580D53544154455F574F524B494E470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 1707 - 1067 - - - - - - 1 - 0 - - 100 - 0 - - ../Core/Src/main.c - 70 - 551 - 568 - 1 - - 0 - - - ../Core/Src/usart.c - 0 - 17 - 43 - 1 - - 0 - - - ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h - 0 - 639 - 648 - 1 - - 0 - - - - -
diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt index 4ac6027..63ee67f 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt @@ -15,17 +15,17 @@ 38003 Registers - 140 90 + 140 100 346 Code Coverage - 1010 160 + 514 656 204 Performance Analyzer - 1170 + 352 175 175 468 @@ -34,7 +34,7 @@ 35141 Event Statistics - 200 50 700 + 250 50 874 1506 @@ -78,11 +78,11 @@ - 1 - 1 + 0 + 0 0 - 0 - -1 + 50 + 16 @@ -101,17 +101,17 @@ -1 - 402 - 314 - 1754 - 1161 + 0 + 208 + 1648 + 1100 0 - 1014 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000006000000000000000100000064433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF63433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C5372635C74696D2E63000000000574696D2E6300000000BECEA100FFFFFFFF64433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000F0A0A100FFFFFFFF89433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F74696D2E68000000001373746D3332663178785F68616C5F74696D2E6800000000F7B88600FFFFFFFF63433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C496E635C74696D2E68000000000574696D2E68000000009CC1B600FFFFFFFF8A433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F756172742E63000000001473746D3332663178785F68616C5F756172742E63000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000D01000066000000800700003A030000 + 791 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000000000000100000064433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF72433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000BECEA100FFFFFFFF8A433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F756172742E63000000001473746D3332663178785F68616C5F756172742E6300000000BECEA100FFFFFFFF85433A5C55736572735C6B6B6B6A745C4465736B746F705C507265737375726553656E736F72426F6172645C536F6674776172655C6D61737465725C507265737375726553656E736F72426F6172644D61737465725C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C2E63000000000F73746D3332663178785F68616C2E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000069030000 @@ -150,11 +150,11 @@ 0 16 - 0300000066000000060100000A030000 + 0300000066000000ED00000039030000 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -170,11 +170,11 @@ 0 16 - 0300000066000000060100000A030000 + 0300000066000000ED00000039030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -194,7 +194,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -214,7 +214,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -234,7 +234,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -254,7 +254,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -274,7 +274,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -294,7 +294,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -314,7 +314,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -334,7 +334,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -354,7 +354,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -374,7 +374,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -394,7 +394,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -414,7 +414,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -434,7 +434,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -450,11 +450,11 @@ 0 16 - 0300000066000000060100000A030000 + 0300000066000000ED00000039030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -470,11 +470,11 @@ 0 16 - 0300000066000000060100000A030000 + 0300000066000000ED00000039030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -490,11 +490,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 000000006A03000080070000E6030000 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -514,7 +514,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -530,11 +530,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 030000006D0300007D070000CD030000 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -554,7 +554,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -574,7 +574,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -614,7 +614,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -634,7 +634,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -654,7 +654,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -674,7 +674,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -694,7 +694,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -714,7 +714,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -734,7 +734,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -754,7 +754,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -774,7 +774,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -794,7 +794,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -814,7 +814,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -834,7 +834,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -854,7 +854,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -874,7 +874,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -894,7 +894,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -914,7 +914,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -934,7 +934,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -954,7 +954,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -974,7 +974,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -994,7 +994,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1014,7 +1014,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1034,7 +1034,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1054,7 +1054,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1074,7 +1074,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1094,7 +1094,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1114,7 +1114,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1134,7 +1134,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1150,17 +1150,17 @@ 0 16 - 0300000066000000ED0000000A030000 + 0300000066000000ED00000039030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 38007 38007 - 1 + 0 0 0 0 @@ -1170,11 +1170,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 030000006D0300007D070000CD030000 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -1190,11 +1190,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 030000006D0300007D070000CD030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -1214,7 +1214,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1234,7 +1234,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1250,11 +1250,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 030000006D0300007D070000CD030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -1270,11 +1270,11 @@ 0 16 - 030000003E0300007D070000CD030000 + 030000006D0300007D070000CD030000 16 - A4000000BB000000C0010000FB020000 + 70000000870000008C010000C7020000 @@ -1294,7 +1294,7 @@ 16 - A4000000BB0000006C0300004B010000 + 70000000870000003803000017010000 @@ -1314,7 +1314,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1334,7 +1334,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1354,7 +1354,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1374,7 +1374,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1394,7 +1394,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1414,7 +1414,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1434,7 +1434,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1454,7 +1454,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1474,7 +1474,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1494,7 +1494,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1514,7 +1514,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1534,7 +1534,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1554,7 +1554,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1574,7 +1574,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1594,7 +1594,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1614,7 +1614,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1634,7 +1634,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1654,7 +1654,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1674,7 +1674,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1694,7 +1694,7 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 @@ -1794,19 +1794,19 @@ 16 - A4000000BB0000009401000086010000 + 70000000870000006001000052010000 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF090100004F0000000D010000230300000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F00000003A030000000000004F00000009010000230300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002303000080070000270300000100000001000010040000000100000002FDFFFF8E000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000003E03000080070000FD030000000000002703000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000052030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000069030000000000004F000000F0000000520300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000520300008007000056030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000006D03000080070000FD030000000000005603000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2860 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A636F6E74726F6C6C6572960000000000000014001748414C5F554152545F547843706C7443616C6C6261636B000A426173655F53746172740A636F6E74726F6C6C6572067461726765741148414C5F4750494F5F577269746550696E155F5F48414C5F444D415F4745545F434F554E544552045F73696E05666C6F6174055F73717274056874696D32155F5F48414C5F54494D5F5345545F434F4D50415245057374617465134D61747269785F436F6D70726573735F526F770B6D61747269785F646174610C6465766963655F73746174650B63757272656E745F726F7714554152545F53656E645F4144435F56616C756573056372633136036372630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2585 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000002000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000968616C5F64656C6179960000000000000002000968616C5F64656C61791463757272656E745F7461736B5F696E6465782B2B0000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1855,6 +1855,1747 @@ 1080 + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000080070000DF000000 + + + 16 + F40000006600000090050000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000025030000 + + + 16 + 70000000870000006001000052010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + 70000000870000008C010000C7020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000590300007D070000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + C7030000590300007D070000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + 70000000870000008C010000C7020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + 70000000870000008C010000C7020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000003803000017010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000042030000C0030000E6030000 + + + 16 + 70000000870000003803000017010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000003803000017010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F40000006300000080070000DF000000 + + + 16 + 70000000870000003803000017010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000003803000017010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000006001000052010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000025030000 + + + 16 + 70000000870000008C010000C7020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000003803000017010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000008C010000C7020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000008C010000C7020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + 70000000870000008C010000C7020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 70000000870000003803000017010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 70000000870000006001000052010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + 70000000870000006001000052010000 + + + + 3311 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000DF00000080070000E3000000010000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F40000006600000090050000F6000000F40000004F00000080070000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F40000003E030000010000000200000004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F00000002C020000000000004F000000F00000003E0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003E030000800700004203000001000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000CC0200003002000090050000D4020000C40300004203000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFC003000042030000C4030000E603000001000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000029020000900500002D020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000004402000090050000D4020000000000002D02000090050000BD0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2582 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001463757272656E745F7461736B5F696E6465782B2B960000000000000001001463757272656E745F7461736B5F696E6465782B2B00000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 955 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + @@ -1865,54 +3606,36 @@ 0 ../Core/Src/main.c - 8 - 13 - 57 + 15 + 505 + 120 1 0 - ../Core/Src/tim.c + startup_stm32f103xb.s 0 - 29 - 30 - 1 - - 0 - - - ../Core/Inc/main.h - 20 - 4 - 30 - 1 - - 0 - - - ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h - 0 - 705 - 719 - 1 - - 0 - - - ../Core/Inc/tim.h - 30 - 3 - 35 + 119 + 132 1 0 ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c - 62 - 2576 - 2592 + 0 + 1197 + 1210 + 1 + + 0 + + + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c + 0 + 294 + 307 1 0 diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvoptx b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvoptx index 2d9032d..2f032f3 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvoptx +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvoptx @@ -117,6 +117,26 @@ STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + 0 UL2CM3 @@ -125,27 +145,10 @@ 0 ST-LINKIII-KEIL_SWO - -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) + -U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 -WK0-R0 - - - 0 - 0 - 163 - 1 -
0
- 0 - 0 - 0 - 0 - 0 - 0 - ../Core/Src/main.c - - -
-
+ 0 @@ -190,7 +193,7 @@ 1 - 1 + 0 0 2 10000000 @@ -200,7 +203,7 @@ Application/MDK-ARM - 1 + 0 0 0 0 @@ -267,18 +270,6 @@ 0 0 0 - ../Core/Src/tim.c - tim.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 ../Core/Src/usart.c usart.c 0 @@ -286,7 +277,7 @@ 2 - 7 + 6 1 0 0 @@ -298,7 +289,7 @@ 2 - 8 + 7 1 0 0 @@ -318,7 +309,7 @@ 0 3 - 9 + 8 1 0 0 @@ -328,6 +319,18 @@ 0 0 + + 3 + 9 + 1 + 0 + 0 + 0 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c + stm32f1xx_hal_uart.c + 0 + 0 + 3 10 @@ -335,30 +338,6 @@ 0 0 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c - stm32f1xx_hal_tim.c - 0 - 0 - - - 3 - 11 - 1 - 0 - 0 - 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c - stm32f1xx_hal_tim_ex.c - 0 - 0 - - - 3 - 12 - 1 - 0 - 0 - 0 ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c stm32f1xx_hal.c 0 @@ -366,7 +345,7 @@ 3 - 13 + 11 1 0 0 @@ -378,7 +357,7 @@ 3 - 14 + 12 1 0 0 @@ -390,7 +369,7 @@ 3 - 15 + 13 1 0 0 @@ -402,7 +381,7 @@ 3 - 16 + 14 1 0 0 @@ -414,7 +393,7 @@ 3 - 17 + 15 1 0 0 @@ -426,7 +405,7 @@ 3 - 18 + 16 1 0 0 @@ -438,7 +417,7 @@ 3 - 19 + 17 1 0 0 @@ -450,7 +429,7 @@ 3 - 20 + 18 1 0 0 @@ -462,7 +441,7 @@ 3 - 21 + 19 1 0 0 @@ -472,18 +451,6 @@ 0 0 - - 3 - 22 - 1 - 0 - 0 - 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c - stm32f1xx_hal_uart.c - 0 - 0 - @@ -494,7 +461,7 @@ 0 4 - 23 + 20 1 0 0 diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvprojx b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvprojx index a350715..35cd4c4 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvprojx +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvprojx @@ -408,113 +408,6 @@ dma.c 1 ../Core/Src/dma.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - tim.c - 1 - ../Core/Src/tim.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - usart.c @@ -542,116 +435,9 @@ ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c - stm32f1xx_hal_tim.c + stm32f1xx_hal_uart.c 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - stm32f1xx_hal_tim_ex.c - 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c stm32f1xx_hal.c @@ -703,11 +489,6 @@ 1 ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c - - stm32f1xx_hal_uart.c - 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c - diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf new file mode 100644 index 0000000..8f57764 Binary files /dev/null and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm index 1a52cea..fd8b6f8 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm @@ -3,65 +3,66 @@
 

µVision Build Log

Tool Versions:

-IDE-Version: ¦ÌVision V5.41.0.0 -Copyright (C) 2024 ARM Ltd and ARM Germany GmbH. All rights reserved. -License Information: 123 1543588107@qq.com, 123, LIC=65ISZ-J0KE9-011P1-CAV5H-FN80T-C8A3E +IDE-Version: ¦ÌVision V5.43.1.0 +Copyright (C) 2025 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: 23 23, 2323, LIC=X96CK-Z03Q7-63IMB-2TXM6-GA9NR-VVDXS Tool Versions: -Toolchain: MDK-ARM Plus Version: 5.41.0.0 -Toolchain Path: C:\app\Keil_v5\ARM\ARMCC\Bin +Toolchain: MDK-ARM Plus Version: 5.43.0.0 +Toolchain Path: C:\keil\ARM\ARMCC\Bin C Compiler: Armcc.exe V5.06 update 7 (build 960) Assembler: Armasm.exe V5.06 update 7 (build 960) Linker/Locator: ArmLink.exe V5.06 update 7 (build 960) Library Manager: ArmAr.exe V5.06 update 7 (build 960) Hex Converter: FromElf.exe V5.06 update 7 (build 960) -CPU DLL: SARMCM3.DLL V5.41.0.0 +CPU DLL: SARMCM3.DLL V5.43.0.0 Dialog DLL: DCM.DLL V1.17.5.0 -Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.3.0.0 -Dialog DLL: TCM.DLL V1.56.4.0 +Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.3.1.0 +Dialog DLL: TCM.DLL V1.56.6.0

Project:

-C:\Users\15435\Desktop\PressureSensorBoard\Software\master\PressureSensorBoardMaster\MDK-ARM\PressureSensorBoardMaster.uvprojx -Project File Date: 12/04/2025 +C:\Users\kkkjt\Desktop\PressureSensorBoard\Software\master\PressureSensorBoardMaster\MDK-ARM\PressureSensorBoardMaster.uvprojx +Project File Date: 12/06/2025

Output:

-*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\app\Keil_v5\ARM\ARMCC\Bin' +*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\keil\ARM\ARMCC\Bin' Build target 'PressureSensorBoardMaster' compiling main.c... -../Core/Src/main.c(77): warning: #188-D: enumerated type mixed with another type +../Core/Src/main.c(81): warning: #188-D: enumerated type mixed with another type CommState_t query_state[SLAVE_COUNT] = {0,0,0}; -../Core/Src/main.c(77): warning: #188-D: enumerated type mixed with another type +../Core/Src/main.c(81): warning: #188-D: enumerated type mixed with another type CommState_t query_state[SLAVE_COUNT] = {0,0,0}; -../Core/Src/main.c(77): warning: #188-D: enumerated type mixed with another type +../Core/Src/main.c(81): warning: #188-D: enumerated type mixed with another type CommState_t query_state[SLAVE_COUNT] = {0,0,0}; -../Core/Src/main.c(353): warning: #940-D: missing return statement at end of non-void function "Slave1_Sta_Query" +../Core/Src/main.c(329): warning: #940-D: missing return statement at end of non-void function "Slave1_Sta_Query" } -../Core/Src/main.c(372): warning: #940-D: missing return statement at end of non-void function "Slave1_Matrix_Query" +../Core/Src/main.c(348): warning: #940-D: missing return statement at end of non-void function "Slave1_Matrix_Query" } -../Core/Src/main.c(391): warning: #940-D: missing return statement at end of non-void function "Slave2_Sta_Query" +../Core/Src/main.c(367): warning: #940-D: missing return statement at end of non-void function "Slave2_Sta_Query" } -../Core/Src/main.c(409): warning: #940-D: missing return statement at end of non-void function "Slave2_Matrix_Query" +../Core/Src/main.c(385): warning: #940-D: missing return statement at end of non-void function "Slave2_Matrix_Query" } -../Core/Src/main.c(427): warning: #940-D: missing return statement at end of non-void function "Slave3_Sta_Query" +../Core/Src/main.c(404): warning: #940-D: missing return statement at end of non-void function "Slave3_Sta_Query" } -../Core/Src/main.c(446): warning: #940-D: missing return statement at end of non-void function "Slave3_Matrix_Query" +../Core/Src/main.c(423): warning: #940-D: missing return statement at end of non-void function "Slave3_Matrix_Query" } -../Core/Src/main.c(493): warning: #940-D: missing return statement at end of non-void function "Process_Reply" +../Core/Src/main.c(472): warning: #940-D: missing return statement at end of non-void function "Process_Reply" } -../Core/Src/main.c(523): warning: #940-D: missing return statement at end of non-void function "RS485_Output" +../Core/Src/main.c(502): warning: #940-D: missing return statement at end of non-void function "RS485_Output" } -../Core/Src/main.c(552): error: #29: expected an expression - if() -../Core/Src/main.c: 11 warnings, 1 error -"PressureSensorBoardMaster\PressureSensorBoardMaster.axf" - 1 Error(s), 11 Warning(s). +../Core/Src/main.c: 11 warnings, 0 errors +linking... +Program Size: Code=6852 RO-data=312 RW-data=48 ZI-data=2184 +FromELF: creating hex file... +"PressureSensorBoardMaster\PressureSensorBoardMaster.axf" - 0 Error(s), 11 Warning(s).

Software Packages used:

Package Vendor: ARM - https://www.keil.com/pack/ARM.CMSIS.6.1.0.pack - ARM::CMSIS@6.1.0 + https://www.keil.com/pack/ARM.CMSIS.6.2.0.pack + ARM::CMSIS@6.2.0 CMSIS (Common Microcontroller Software Interface Standard) - * Component: CORE Version: 6.1.0 + * Component: CORE Version: 6.1.1 Package Vendor: Keil https://www.keil.com/pack/Keil.STM32F1xx_DFP.2.4.1.pack @@ -70,15 +71,14 @@ Package Vendor: Keil

Collection of Component include folders:

./RTE/_PressureSensorBoardMaster - C:/app/Keil_v5/ARM/Packs/ARM/CMSIS/6.1.0/CMSIS/Core/Include - C:/app/Keil_v5/ARM/Packs/Keil/STM32F1xx_DFP/2.4.1/Device/Include + C:/keil/ARM/CMSIS/6.2.0/CMSIS/Core/Include + C:/keil/Keil/STM32F1xx_DFP/2.4.1/Device/Include

Collection of Component Files used:

- * Component: ARM::CMSIS:CORE@6.1.0 + * Component: ARM::CMSIS:CORE@6.1.1 Include file: CMSIS/Core/Include/tz_context.h -Target not created. -Build Time Elapsed: 00:00:00 +Build Time Elapsed: 00:00:01
diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.hex b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.hex index f54906e..92f3779 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.hex +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.hex @@ -1,8 +1,8 @@ :020000040800F2 -:100000000009002089010008B3190008FD17000845 -:10001000B1190008D30200088D200008000000007C -:10002000000000000000000000000000F91A0008B5 -:100030003F03000800000000B91900082D1B00084C +:10000000B808002089010008E71400089F130008C1 +:10001000E5140008D3020008F11A000800000000EF +:100020000000000000000000000000006115000852 +:100030003F03000800000000ED14000899160008B6 :10004000A3010008A3010008A3010008A301000800 :10005000A3010008A3010008A3010008A3010008F0 :10006000A3010008A3010008A3010008A3010008E0 @@ -10,24 +10,24 @@ :10008000A3010008A3010008A3010008A3010008C0 :10009000A3010008A3010008A3010008A3010008B0 :1000A000A3010008A3010008A3010008A3010008A0 -:1000B000A3010008951B0008A3010008A301000884 +:1000B000A3010008A3010008A3010008A301000890 :1000C000A3010008A3010008A3010008A301000880 -:1000D000A30100086920000875200008812000089D +:1000D000A3010008E51A0008A3010008A301000815 :1000E000A3010008A3010008A301000800F002F822 :1000F00000F03AF80AA090E8000C82448344AAF188 :100100000107DA4501D100F02FF8AFF2090EBAE885 :100110000F0013F0010F18BFFB1A43F0010318473B -:10012000C0200000E0200000103A24BF78C878C149 +:10012000BC1A0000DC1A0000103A24BF78C878C15D :10013000FAD8520724BF30C830C144BF04680C60ED :10014000704700000023002400250026103A28BF35 :1001500078C1FBD8520728BF30C148BF0B60704739 :100160001FB51FBD10B510BD00F07AF81146FFF79E -:10017000F7FF01F09DFF00F098F803B4FFF7F2FFDE +:10017000F7FF01F0CFFC00F098F803B4FFF7F2FFAF :1001800003BC00F09FF80000094880470948004779 :10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737 :1001A000FEE7FEE704480549054A064B7047000094 -:1001B000911B0008ED00000800030020000900204A -:1001C00000050020000500204FF000020429C0F0C7 +:1001B000FD160008ED000008B8020020B808002075 +:1001C000B8040020B80400204FF000020429C0F059 :1001D000128010F0030C00F01B80CCF1040CBCF179 :1001E000020F18BF00F8012BA8BF20F8022BA1EBCB :1001F0000C0100F00DB85FEAC17C24BF00F8012BB0 @@ -43,12 +43,12 @@ :1002900021F00701AC46ACE8C009ACE8C009ACE805 :1002A000C009ACE8C0098D46704710B50446AFF3ED :1002B00000802046BDE81040FFF75FBF0048704750 -:1002C000A002002001491820ABBEFEE72600020074 +:1002C0005802002001491820ABBEFEE726000200BC :1002D0007047FEE770B505464FF6FF7000224AF200 :1002E00001040EE0AB5C58400023C60702D084EA4C :1002F000500000E040085B1CDBB2082BF5D3521C19 :10030000D2B28A42EED370BD014800F08BB8000033 -:100310005C02002030B590F840500124AC40C56B21 +:100310001402002030B590F840500124AC40C56B69 :100320006C60046863604368102B036803D09960B5 :100330000068C26030BD9A600068C16030BD70471F :1003400072B6FEE710B590F821100022022905D000 @@ -99,452 +99,356 @@ :1006100006602046FFF77EFEE06A00282068016839 :1006200002D041F00E0106E021F0040101602068D3 :10063000016841F00A0101602068016841F0010190 -:100640000160D9E72DE9F84FDFF8B8910024A9F14E -:10065000040B23460F2709F1040AABF1040EC9E08D -:100660000125A5402A40AA427DD1674ED1F804C099 -:10067000ACEB0608B44532D014DCBCF1030F3AD021 -:1006800009DCBCF1000F2AD0BCF1010F1CD0BCF179 -:10069000020F31D11DE0BCF1110F17D0BCF1120FC8 -:1006A0002AD119E0B8F5881F19D006DCB8F5803FCB -:1006B00015D0B8F5801F1FD111E0B8F5001F0ED07E -:1006C000B8F5041F18D10AE0CB6815E0CB681B1DF4 -:1006D00012E0CB6808330FE0CB680C330CE08B687A -:1006E0002BB1012B4FF0080303D0456104E0042334 -:1006F00002E0056100E00023FF2A01D8064601E080 -:1007000000F104064FEA840501D9A5F12005D6F8C9 -:10071000008007FA05FC28EA0C0803FA05F548EA08 -:100720000508C6F800804D68ED0062D5374DAE690A -:1007300046F00106AE61AD6924F0030605F001053F -:100740000095334D06EB050CDCF80850A607360F74 -:1007500007FA06F825EA0805DFF8B880404503D116 -:100760004FF0000817E044E0DFF8AC80404502D1CC -:100770004FF001080FE0DFF8A480404502D14FF0B0 -:10078000020808E0DFF89880404502D14FF00308E6 -:1007900001E04FF0040808FA06F848EA0508CCF82A -:1007A00008804D68D9F80060ED024D4601D516432A -:1007B00000E096432E604D68DAF80060AD025546C1 -:1007C00001D5164300E096432E604D68DBF80060CB -:1007D000AD035D4601D5164300E096432E604D689B -:1007E000DEF80060ED03754601D5164300E0964340 -:1007F0002E60641C0D682A46E5407FF431AFBDE8E9 -:10080000F88F0000080401400000111000100240A1 -:100810000000014000080140000C014000100140B0 -:10082000001401400AB1016170470904FBE70000B0 -:10083000014880687047000020000020024881685D -:10084000027811448160704720000020074810B5ED -:10085000016841F010010160032000F075F80F20DD -:1008600000F006F800F024F8002010BD002002403F -:1008700070B50D4D04464FF47A712878B1FBF0F055 -:100880000A490968B1FBF0F000F0F0FA48B9102C01 -:1008900007D200222146501E00F036F800206C607E -:1008A00070BD012070BD0000200000202C00002041 -:1008B0000C4808B5816941F001018161816901F04D -:1008C00001010091C16941F08051C161C06900F02E -:1008D000805000900448416821F0E06141F00071CF -:1008E000416008BD0010024000000140002809DB03 -:1008F00000F01F02012191404009800000F1E0203A -:10090000C0F8001170470000F0B40E4B1B680C4695 -:10091000C3F30223C3F10705042D00D90425191DD3 -:10092000072901D2002300E0DB1E012606FA05F1AB -:10093000491E214099409E40761E16403143F0BC2E -:1009400001F0A5BB0CED00E0064900F007020868C5 -:100950004FF6FF03184040EA0220034A10430860A4 -:10096000704700000CED00E00000FA057047000041 -:100970002DE9F0470F46050061D0434E306800F086 -:100980000700B84209D2306820F0070038433060D1 -:10099000306800F00700B84251D128683B4C81070D -:1009A00012D5400703D5606840F4E06060602878A5 -:1009B000000703D5606840F4605060606068A96813 -:1009C00020F0F000084360602878C00728D06868ED -:1009D000012810D02168022810D0890700292EDABA -:1009E000616821F0030101436160FFF721FF804648 -:1009F00041F288390DE021688903EFE78901EDE7CD -:100A0000FFF716FFA0EB0801494502D90320BDE816 -:100A1000F0876068696800F00C00B0EB810FEFD1DF -:100A2000306800F00700B8420BD9306820F00700AA -:100A300038433060306800F00700B84201D0012030 -:100A4000E5E72878400705D56068E96820F4E060AC -:100A5000084360602878000706D56068296920F49B -:100A6000605040EAC100606000F03EF86168084AEA -:100A7000C1F30311515CC84006490860064800688C -:100A8000FFF7F6FE0020C2E70020024000100240FF -:100A9000C62100082C00002024000020014901206C -:100AA000C86470470000424204480549006849682C -:100AB000044AC1F30221515CC84070472C00002059 -:100AC00000100240D6210008044805490068496822 -:100AD000044AC1F3C221515CC84070472C00002079 -:100AE00000100240D62100080E4A51680E4801F05D -:100AF0000C03042B11D0082B0FD10C48C1F38343F6 -:100B0000C903C05C0AD55168084AC1F34041921E2E -:100B1000515C054A5043B0FBF1F07047044948432B -:100B2000704700000010024000127A00B621000851 -:100B300000093D0010B5044CA068000603D5FFF77E -:100B400015FF8020A07210BD001002402DE9F84F63 -:100B5000040070D02078C04DC00749D06868C0F349 -:100B60008100012807D06868C0F38100022809D1FC -:100B70006868C00306D52868800339D560680028F6 -:100B8000E7D035E06068B0F5803F0BD010B1B0F52C -:100B9000A02F11D0286820F480302860286820F425 -:100BA000802002E0286840F480302860606890B1BE -:100BB000FFF73EFE06460AE0286840F480202860E1 -:100BC000F0E700BFFFF734FE801B642873D8286865 -:100BD0008003F7D50CE0FFF72BFE064605E000BFCB -:100BE000FFF726FE801B6428F0D828688003F7D41E -:100BF00020789A4E80074FF001094FF0000839D550 -:100C0000686810F00C0F07D06868C0F381000228F4 -:100C100009D16868C00306D42868800714D5206904 -:100C2000012808D110E02069B0B1C6F80090FFF7A4 -:100C3000FFFD074605E00AE1FFF7FAFDC01B0228A9 -:100C4000C4D828688007F7D52868616920F0F800C3 -:100C500040EAC10028600DE0C6F80080FFF7E8FD1B -:100C6000074604E0FFF7E4FDC01B022823D82868EC -:100C70008007F7D4207800072CD57948A169D9B12D -:100C8000C0F80090FFF7D4FD074604E0FFF7D0FD61 -:100C9000C01B02280FD8686A8007F7D571484FF447 -:100CA000FA510068B0FBF1F0009000BF0098411EBF -:100CB0000091FAD20EE080E0C0F80080FFF7B8FDA6 -:100CC000074604E0FFF7B4FDC01B022875D8686A28 -:100CD0008007F7D42078400760D5E8690027C00076 -:100CE00008D4E86940F08050E861E869012700F025 -:100CF000805000905C480168C90513D401688346A0 -:100D000041F480710160FFF793FD824606E000BF69 -:100D1000FFF78EFDA0EB0A0064284ED8DBF8000038 -:100D2000C005F5D5E06801280AD008B1052813D020 -:100D3000286A20F001002862286A20F0040002E0FE -:100D4000286A40F001002862E06841F2883B98B1CF -:100D5000FFF76EFD82460BE0286A40F0040028622F -:100D6000EEE700BFFFF764FDA0EB0A0159455AD832 -:100D7000286A8007F6D50CE0FFF75AFD824605E0A9 -:100D8000FFF756FDA0EB0A0159454CD8286A8007A9 -:100D9000F6D41FB1E86920F08050E861E06988B3BB -:100DA0006968C1F38101022944D00228C6F8608035 -:100DB00004D0FFF73DFD044638E034E0FFF738FD8E -:100DC000074604E0FFF734FDC01B02282BD8286833 -:100DD0008001F7D4206AB0F5803F05D16868A1682A -:100DE00020F4003008436860D4E9080108436968CA -:100DF00021F4741108436860C6F86090FFF718FD8D -:100E0000044606E025E000BFFFF712FD001B0228A4 -:100E100009D828688001F7D51BE000BFFFF708FD5F -:100E2000001B022802D90320BDE8F88F2868800142 -:100E3000F4D40EE00128F7D06868226A00F480310B -:100E4000914204D1616A00F47010884201D00120FF -:100E5000EAE70020E8E700000010024000004242FC -:100E6000800442422C0000200070004010B5401E5B -:100E7000B0F1807F01D3012010BD4FF0E02460610C -:100E80000F21601701F003F90020A0610720206105 -:100E9000002010BD7047704770B590F83C20012AC3 -:100EA00026D0012480F83C40022280F83D200368CF -:100EB0005A689D6822F070060A6832435A600D4BEA -:100EC00002689A4208D0B2F1804F05D00A4B9A428C -:100ED00002D00A4B9A4204D1496825F08003194395 -:100EE000916080F83D40002180F83C10084670BDBC -:100EF000022070BD002C01400004004000080040AA -:100F000010B5040003D094F83D0010B107E00120B3 -:100F100010BD002084F83C00204600F01FF802209D -:100F200084F83D00211D206800F03AFE012084F87D -:100F3000460084F83E0084F83F0084F8400084F8BE -:100F4000410084F8420084F8430084F8440084F8A7 -:100F5000450084F83D00002010BD000008B5006881 -:100F60000B49884212D10B48C16941F00201C161AD -:100F7000C069002200F00200009011461D20FFF71A -:100F8000C3FCBDE808401D20FFF7B0BC08BD000051 -:100F9000000400400010024090F83D10012901D0EB -:100FA00001207047022180F83D100168CA6842F0B4 -:100FB0000102CA6000680B49884208D0B0F1804F36 -:100FC00005D00949884202D00849884204D1816885 -:100FD00001F00701062903D0016841F00101016019 -:100FE00000207047002C0140000400400008004031 -:100FF0000168CA6822F00102CA6001680A6A41F207 -:1010000011131A4207D10A6A9B101A4203D10A68C7 -:1010100022F001020A60012180F83D100020704793 -:1010200070B5044690F83C000025012817D0012631 -:1010300084F83C60022084F83D002068826822F039 -:10104000770222F47F4282600868502838D00DDC95 -:1010500020284FD005DC90B3102811D14AE002209F -:1010600070BD302846D040280AD13BE060282FD000 -:1010700070280DD0B0F5805F03D0B0F5005F12D0BE -:10108000012584F83D60002084F83C00284670BDAE -:10109000CB68D1E90121206800F0BEFD206881689D -:1010A00041F0770109E0CB68D1E90121206800F027 -:1010B000B3FD2068816841F480418160E1E719E077 -:1010C000CA684968206800F0B9FD5021206806E030 -:1010D000CA684968206800F0C2FD6021206800F0FD -:1010E000A5FDCEE7CA684968206800F0A7FD402149 -:1010F0002068F4E7226801461046F0E770472DE9C2 -:10110000F04104460068C66805694FF00007A9076A -:1011100013D5B10711D5F91E016101202077206890 -:1011200080698007204602D0FFF7E8FF04E000F066 -:101130007EF8204600F07CF82777680716D5700700 -:1011400014D521686FF00400086102202077206820 -:10115000806910F4407F204602D0FFF7CFFF04E003 -:1011600000F065F8204600F063F82777280715D5CA -:10117000300713D521686FF008000861042020773C -:101180002068C0698007204602D0FFF7B7FF04E05F -:1011900000F04DF8204600F04BF82777E80616D50A -:1011A000F00614D521686FF0100008610820207740 -:1011B0002068C06910F4407F204602D0FFF79EFFF0 -:1011C00004E000F034F8204600F032F82777E80712 -:1011D00008D0F00706D021686FF0010008612046B2 -:1011E00000F028F8280608D5300606D521686FF0EB -:1011F000800008612046FFF74DFE680608D570069E -:1012000006D521686FF040000861204600F01EF806 -:10121000A8060AD5B00608D521686FF0200008613D -:101220002046BDE8F041FFF736BEBDE8F0817047CB -:1012300070470000044A0168914204D16FF0010236 -:101240000A61FFF7D5BE7047000400407047704741 -:1012500010B504460068406994F84110C0F3C0100E -:10126000212911D180B12068143050E8001F21F0ED -:10127000800140E80012002AF5D1A06B08B1FFF709 -:1012800061F8204600F0A3FD2068406994F8421000 -:10129000C0F38010222911D180B12068143050E8A9 -:1012A000001F21F0400140E80012002AF5D1E06B58 -:1012B00008B1FFF747F8204600F062FD002010BD9E -:1012C00070470000F8B5016804460868CA684B69B1 -:1012D00010F00F0F4FF0000559D003F0010602F493 -:1012E0009077374365D0C10705D0D10503D5616C30 -:1012F00041F001016164410705D5D90703D0616C54 -:1013000041F002016164810705D5D90703D0616C02 -:1013100041F004016164010707D502F02001314367 -:1013200003D0616C41F008016164616C00293AD01E -:10133000800604D5900602D5204600F056FD2068B0 -:101340004069616CC0F38010090700D460B3204687 -:1013500000F016FD20684069400621D52068143051 -:1013600050E8001F21F0400140E80012002AF5D1AA -:10137000E06BA8B16D494163E06BFFF707F8002807 -:1013800011D0E06B416B01B0BDE8F0400847830627 -:101390000FD593060DD52046BDE8F84000F025BDD9 -:1013A0002046FFF78DFFF8BD2046FFF789FF6564F3 -:1013B000F8BD266B2023012E7CD1C6067AD5D60631 -:1013C00078D508684868009048694FF002064006E2 -:1013D00040D5E16B086840680004000CE8D0A28D9D -:1013E0008242E5D9E085886920282DD020680C301C -:1013F00050E8001F21F4807140E80012002AF5D166 -:101400002068143050E8001F21F0010140E800126C -:10141000002AF5D12068143050E8001F21F0400167 -:1014200040E80012002AF5D184F842302563206894 -:101430000C3050E8001F21F0100140E80012002A93 -:10144000F5D1E06BFEF77EFF6663A08DE18D401A5B -:1014500081B22AE0A08DE18D401A81B2E08D002892 -:10146000A6D00029A4D022680C3252E8000F20F444 -:10147000907042E80007002FF5D12068143050E842 -:10148000002F22F0010240E80027002FF5D184F858 -:101490004230256320680C3050E8002F22F0100203 -:1014A00040E80023002BF5D166632046FFF7CFFE0E -:1014B000F8BDFFE705062BD5150629D594F84100A0 -:1014C0002128F5D1A068B0F5805F01D12069B0B1C5 -:1014D000206A411C2162216800784860E08C401E2F -:1014E0000004000CE084E3D12068C16821F0800191 -:1014F000C1602068C16841F04001C160D8E7206A3E -:101500000088C0F308004860206A801C2062E5E77C -:101510004006CDD55006CBD5CA68204622F0400201 -:10152000CA6084F8413000F049F9C1E7831C000823 -:1015300070B5040004D094F84100002510B106E015 -:10154000012070BD84F84050204600F023F824208C -:1015500084F841002068C16821F40051C160204630 -:1015600000F0A4FC2068016921F490410161206829 -:10157000416921F02A0141612068C16841F40051AC -:10158000C1606564202084F8410084F842006563EE -:10159000002070BDF0B585B0002400940194029441 -:1015A0000394054603684E48DFF830C10221032248 -:1015B0004C4E071563453AD1836943F480438361F8 -:1015C000836903F480430493836943F004038361D4 -:1015D0008069039200F0040004900802CDE9000144 -:1015E00069463046FFF72EF8CDE90074694630466B -:1015F0000294FFF727F83D4E3B48C6E900048020DF -:10160000C6E9024034614FF440507461C6E90640B7 -:101610003046FEF7B1FF08B1FEF792FEEE630022FE -:10162000114625207562FFF76FF9252028E0304D1F -:10163000AB4229D1C36943F40033C361C36903F4E6 -:1016400000330493836943F0040383618069039248 -:1016500000F0040004900420CDE900016946304602 -:10166000FEF7F0FF0820CDE90004694630460294F9 -:10167000FEF7E8FF002211462620FFF745F9262055 -:10168000FFF734F905B0F0BD1A4DAB42FAD1C3698A -:1016900043F48023C361C36903F480230493836903 -:1016A00043F0080383618069CDE9007100F0080010 -:1016B000CDE90320104D69462846FEF7C3FFE81424 -:1016C000CDE90004694628460294FEF7BBFF0022DC -:1016D00011462720FFF718F92720D1E700380140ED -:1016E0000010024000080140580002405C02002047 -:1016F0000044004000480040000C014090F8423097 -:10170000202B01D00220704721B11AB100230363BE -:1017100000F028BC01207047704770472DE9F8435E -:10172000044690F84100984616460D46202802D0FF -:101730000220BDE8F88385B17EB1002060642120DD -:1017400084F84100FFF774F8A6848146E684A06817 -:101750002027B0F5805F02D003E00120E9E720698F -:1017600010B12E4600250EE000260CE08021204618 -:1017700000F040FCA8B9C6B116F8010B216848601A -:10178000E08C401EE084E08C4B464FF00002CDF828 -:1017900000800028EAD14FF04001204600F02AFCEA -:1017A00040B184F841700320C3E735F8020BC0F361 -:1017B0000800E3E784F841700020BAE710B500683C -:1017C0000B49884212D10B48FFF742FD0948C06B14 -:1017D00000684068C0F14000C0B200F0EFF8BDE81A -:1017E0001040402204490348FFF788BF10BD0000A5 -:1017F00000380140840100209A000020FEE700002C -:10180000094808B5416941F0010141614069002280 -:1018100000F00100009011460F20FFF775F8BDE8B9 -:1018200008400F20FFF762B80010024030B585B0C5 -:10183000002418480094019402940394816941F0B3 -:1018400020018161816901F020010491816941F0E9 -:1018500004018161816901F004010491816941F011 -:101860000801816180690C4D00F00800049001229C -:10187000F0212846FEF7D6FFF02000900120CDE9A8 -:1018800001040220039069462846FEF7DBFE05B0FE -:1018900030BD000000100240000C014010B586B0C1 -:1018A0000024184800940194029403940494144969 -:1018B0000594016041F61F41C0E9011441F28731EE -:1018C000C0E9031480218161FFF71AFB08B1FEF71C -:1018D00037FD4FF48050009069460A48FFF7A0FB9F -:1018E00008B1FEF72DFD049404A906480594FFF7FE -:1018F000D3FA002801D0FEF723FD06B010BD00008A -:10190000000400403C0100200C4810B50A49016069 -:101910004FF416514160002181600C22C160C0E982 -:1019200004128161C161FFF703FE002803D0BDE806 -:101930001040FEF705BD10BD0038014084010020B5 -:101940000C4810B50A4901604FF41651416000215E -:1019500081600C22C160C0E904128161C161FFF79E -:10196000E7FD002803D0BDE81040FEF7E9BC10BD3C -:1019700000440040CC0100200C4810B50A49016029 -:101980004FF416514160002181600C22C160C0E912 -:1019900004128161C161FFF7CBFD002803D0BDE8CF -:1019A0001040FEF7CDBC10BD0048004014020020DE -:1019B000FEE7FFF7BFF8FEE7704700002DE9F05F94 -:1019C000304DDFF8BCA0012329786C78AA78022674 -:1019D000AAF1030B052802D00A2814D04AE02848AF -:1019E000401F4078814245D1012C43D1012A41D189 -:1019F00001EBC10202EB0A00594400F8083D01F86E -:101A0000016C437036E09E460323032C32D1052A35 -:101A100030D1481EDFF86C800022C0EB0010A946D0 -:101A20004700A8F16A0800BF19F803505B1C02EBDD -:101A30004204DBB2002007EB440600BF25FA00F4A5 -:101A400004F0010C3418E4B25A2C01D208F804C096 -:101A5000401CC0B20628F1D3521CD2B2052AE3D3EF -:101A600001EBC10303EB0A02594402F808EC02201F -:101A700001F8010C40210348FEF7A6FBBDE8F09FEA -:101A8000050000209A000020184830B4AA210170F7 -:101A9000552141700222164B002100BF01EBC10409 -:101AA0001C44491C64788454521CC9B2D2B2032924 -:101AB000F4D3002101EBC1041C44491CA4788454D4 -:101AC000521CC9B2D2B20329F4D3084B0021AA3B5D -:101AD0005C5C8454521C491CC9B2D2B25A29F7D357 -:101AE00030BC0A2301490348FFF718BEDA00002082 -:101AF00005000020CC0100207047000010B5094C03 -:101B000001200221207060702046FEF7E3FBA070E8 -:101B1000000AE07021460422BDE810400A23024872 -:101B2000FFF7FCBD8A00002084010020FEF786BE7E -:101B300030B58FB028216846FEF768FB14210AA84B -:101B4000FEF764FB01210804CDE900100024029493 -:101B500002250491CDE907504FF4E0100990684642 -:101B6000FEF7F4FF08B172B6FEE70F20CDE90A05D3 -:101B70004FF48060CDE90C4002210AA80E94FEF7D4 -:101B8000F7FE08B172B6FEE7FEF788FF0FB030BD72 -:101B9000704700000148FFF7B2BA00003C01002086 -:101BA000F0B50268194B1A4C1A4D4FF08047984215 -:101BB00005D0B84203D0A04201D0A84203D122F000 -:101BC00070064A683243984205D0B84203D0A0421A -:101BD00001D0A84203D122F44074CA6822434C6960 -:101BE00022F08002224302608A68C2620A6882622E -:101BF000984201D109690163012141610169C90765 -:101C000003D0016921F001010161F0BD002C014008 -:101C1000000400400008004010B5846842EA032236 -:101C200024F47F440A432243826010BD826822F07C -:101C300070020A4342F007018160704710B5036AE1 -:101C4000046A24F001040462846924F0F00444EA84 -:101C5000021423F00A020A438461026210BD10B527 -:101C6000036A046A24F010040462846923F0A00368 -:101C700024F4704444EA023243EA011182610162B1 -:101C800010BD10B5406A0021C185C184FFF718FB63 -:101C900010BD70B5446A2068406994F84110C0F3E3 -:101CA000C0100025212904D118B1E584204600F098 -:101CB0008EF82068406994F84210C0F38010222901 -:101CC00004D118B1E585204600F05AF8606C40F068 -:101CD000100060642046FFF7F3FA70BD10B50146AE -:101CE000406A096809684FF0000289062ED4C2854F -:101CF00001680C3151E8003F23F4807341E800345F -:101D0000002CF5D10168143151E8003F23F00103A4 -:101D100041E80034002CF5D10168143151E8003F4E -:101D200023F0400341E80034002CF5D1202180F855 -:101D30004210016B012909D101680C3151E8003FC3 -:101D400023F0100341E80034002CF5D14263016B0D -:101D5000012902D0FFF7E0FC10BD818DFFF777FA73 -:101D600010BD10B5406A01214163016B012902D009 -:101D7000FFF7D3FC10BD818D4908FFF768FA10BD4D -:101D800001680C3151E8002F22F4907241E80023E1 -:101D9000002BF5D10168143151E8002F22F0010227 -:101DA00041E80023002BF5D1016B012909D101681D -:101DB0000C3151E8002F22F0100241E80023002BE3 -:101DC000F5D1202180F8421000210163704701689D -:101DD0000C3151E8002F22F0C00241E80023002B13 -:101DE000F5D1202180F84110704708B590F84210D5 -:101DF000222901D0022008BD82684FF480539A4204 -:101E000001D1016921B1816A9A421BD04AB10AE02D -:101E10000268816A5268C2F308020A80816A891CDA -:101E200008E0026972B10268526802F07F020A702B -:101E3000816A491C8162C18D491E0904090CC18552 -:101E400003D01BE002685268F1E70168CA6822F01B -:101E50002002CA600168CA6822F48072CA60016800 -:101E60004A6922F001024A61202180F842100021D3 -:101E70004163026B012A03D0FFF74EFC002008BD2E -:101E8000016301680C3151E8002F22F0100241E893 -:101E90000023002BF5D101680A68D20602D50A6832 -:101EA00049680091818DFFF7D2F9E7E770B50446E4 -:101EB00000680169E26821F4405111430161216920 -:101EC000A0680843616908432168CA6841F20C634D -:101ED0009A430243CA6020684169A26921F44071B3 -:101EE000114341611E492068884202D1FEF7ECFD92 -:101EF00001E0FEF7D9FD00EBC00101EB00126068C4 -:101F000064218000B2FBF0F3B3FBF1F36FF018062D -:101F10007343B2FBF0F5B2FBF0F605EB8305322319 -:101F200003EB0515B5FBF1F5B6FBF1F605F0F00591 -:101F300005EB0615B2FBF0F6B2FBF0F0B0FBF1F0EA -:101F40006FF01802504306EB800003EB0010B0FB6B -:101F5000F1F0216800F00F002844886070BD000097 -:101F60000038014038B5816204468285002013465E -:101F70006064222284F84220E56B1B4AAA62E56B6A -:101F80001A4AEA62E56B1A4A2A63E26B50630A4610 -:101F90002168E06B091DFEF71DFB206801684068A1 -:101FA0000090206948B120680C3050E8001F41F4CF -:101FB000807140E80012002AF5D12068143050E802 -:101FC000001F41F0010140E80012002AF5D120680D -:101FD000143050E8001F41F0400140E80012002A90 -:101FE000F5D1002038BD0000DD1C0008631D00088D -:101FF000931C00082DE9F843984617460D46044601 -:10200000089E24E0701C22D0FEF712FCA0EB080012 -:10201000B0421AD8CEB12068C168490717D5802DC3 -:1020200015D0402D13D00168C94309070FD40168AA -:102030000025406800902046FFF7A2FE082060645B -:1020400084F840500120BDE8F8830320FBE72068B6 -:10205000006835EA000004D00020B842D2D0002049 -:10206000F1E70120F9E700000148FFF72BB9000074 -:10207000840100200148FFF725B90000CC010020B1 -:102080000148FFF71FB9000014020020FEE709070E -:10209000090E002804DB00F1E02080F800147047EE -:1020A00000F00F0000F1E02080F8141D70470000E0 -:1020B000FEF7CCFBFFF73CFDFFF7B8FBFFF7A0FBFB -:1020C000FFF73EFCFFF7EAFBFFF71EFCFFF754FCAF -:1020D000344C01254022257033493448FFF70EFB6C -:1020E00032480068C16841F01001C160304F04F10E -:1020F0000208EE1E2078082800D1257020780828D4 -:10210000F8D2DFE800F00405151E2A38434CF1E749 -:1021100098F800000128EDD0FFF7F0FC88F8005097 -:10212000657018E0386806612148FEF735FFE1E781 -:1021300098F800000128DDD0FFF7E0FC88F8005097 -:1021400013E098F801000128D4D0FFF7D7FC88F8F5 -:102150000150022018E0052208E098F8010001284B -:10216000C8D0FFF7CBFC88F801500A220E490F486F -:10217000FFF7C4FAD6E798F802000128BAD0FFF7B3 -:10218000BDFC88F8025003206070E4E798F8020074 -:102190000128AFD0FFF7B2FC88F80250E5E7FFF75F -:1021A00073FCBFE7000000209A000020840100209B -:1021B0003C010020010202030405060708090A0B7E -:1021C0000C0D0E0F101000000000000000000102B6 -:1021D00003040607080900000000010203040000D0 -:1021E0000022000800000020300000002801000844 -:1021F0003022000830000020D00800004401000810 -:1022000000000000000100000000000000000200CB -:1022100000000000000000030000000000000000BB -:1022200001000000100000000000000000127A0011 +:100640000160D9E770B5044600F004F90546601C66 +:1006500002D004480078044400F0FCF8401BA0429B +:10066000FAD370BD200000202DE9F84FDFF8B891D3 +:100670000024A9F1040B23460F2709F1040AABF16A +:10068000040EC9E00125A5402A40AA427DD1674E4B +:10069000D1F804C0ACEB0608B44532D014DCBCF190 +:1006A000030F3AD009DCBCF1000F2AD0BCF1010FD6 +:1006B0001CD0BCF1020F31D11DE0BCF1110F17D0DD +:1006C000BCF1120F2AD119E0B8F5881F19D006DC49 +:1006D000B8F5803F15D0B8F5801F1FD111E0B8F5EF +:1006E000001F0ED0B8F5041F18D10AE0CB6815E042 +:1006F000CB681B1D12E0CB6808330FE0CB680C33CE +:100700000CE08B682BB1012B4FF0080303D045613F +:1007100004E0042302E0056100E00023FF2A01D881 +:10072000064601E000F104064FEA840501D9A5F16F +:100730002005D6F8008007FA05FC28EA0C0803FA21 +:1007400005F548EA0508C6F800804D68ED0062D559 +:10075000374DAE6946F00106AE61AD6924F003067F +:1007600005F001050095334D06EB050CDCF808504B +:10077000A607360F07FA06F825EA0805DFF8B8805D +:10078000404503D14FF0000817E044E0DFF8AC80AB +:10079000404502D14FF001080FE0DFF8A48040454A +:1007A00002D14FF0020808E0DFF89880404502D1FE +:1007B0004FF0030801E04FF0040808FA06F848EA91 +:1007C0000508CCF808804D68D9F80060ED024D4668 +:1007D00001D5164300E096432E604D68DAF80060BC +:1007E000AD02554601D5164300E096432E604D6894 +:1007F000DBF80060AD035D4601D5164300E096438B +:100800002E604D68DEF80060ED03754601D5164395 +:1008100000E096432E60641C0D682A46E5407FF494 +:1008200031AFBDE8F88F000008040140000011104E +:10083000001002400000014000080140000C01408F +:1008400000100140001401400AB101617047090421 +:10085000FBE700000148806870470000200000208E +:1008600002488168027811448160704720000020AE +:10087000074810B5016841F010010160032000F045 +:1008800075F80F2000F006F800F024F8002010BDE5 +:100890000020024070B50D4D04464FF47A7128785F +:1008A000B1FBF0F00A490968B1FBF0F000F0F0FA92 +:1008B00048B9102C07D200222146501E00F036F80D +:1008C00000206C6070BD012070BD00002000002081 +:1008D0002C0000200C4808B5816941F001018161BC +:1008E000816901F001010091C16941F08051C1614C +:1008F000C06900F0805000900448416821F0E06138 +:1009000041F00071416008BD00100240000001404C +:10091000002809DB00F01F020121914040098000FE +:1009200000F1E020C0F8001170470000F0B40E4B59 +:100930001B680C46C3F30223C3F10705042D00D93D +:100940000425191D072901D2002300E0DB1E012622 +:1009500006FA05F1491E214099409E40761E164038 +:100960003143F0BC01F0C5B80CED00E0064900F0E1 +:10097000070208684FF6FF03184040EA0220034AC6 +:1009800010430860704700000CED00E00000FA051D +:10099000704700002DE9F0470F46050061D0434E37 +:1009A000306800F00700B84209D2306820F0070034 +:1009B00038433060306800F00700B84251D12868F1 +:1009C0003B4C810712D5400703D5606840F4E060D6 +:1009D00060602878000703D5606840F4605060606C +:1009E0006068A96820F0F000084360602878C007BC +:1009F00028D06868012810D02168022810D0890703 +:100A000000292EDA616821F0030101436160FFF7DC +:100A100021FF804641F288390DE021688903EFE724 +:100A20008901EDE7FFF716FFA0EB0801494502D960 +:100A30000320BDE8F0876068696800F00C00B0EB47 +:100A4000810FEFD1306800F00700B8420BD9306851 +:100A500020F0070038433060306800F00700B842EB +:100A600001D00120E5E72878400705D56068E968EE +:100A700020F4E060084360602878000706D56068CD +:100A8000296920F4605040EAC100606000F03EF83F +:100A90006168084AC1F30311515CC8400649086007 +:100AA00006480068FFF7F6FE0020C2E7002002407B +:100AB00000100240C21B00082C000020240000206F +:100AC00001490120C86470470000424204480549BA +:100AD00000684968044AC1F30221515CC84070476C +:100AE0002C00002000100240D21B000804480549D9 +:100AF00000684968044AC1F3C221515CC84070478C +:100B00002C00002000100240D21B00080E4A516841 +:100B10000E4801F00C03042B11D0082B0FD10C4808 +:100B2000C1F38343C903C05C0AD55168084AC1F3C5 +:100B30004041921E515C054A5043B0FBF1F07047B2 +:100B400004494843704700000010024000127A0038 +:100B5000B21B000800093D0010B5044CA068000657 +:100B600003D5FFF715FF8020A07210BD00100240D2 +:100B70002DE9F84F040070D02078C04DC00749D04F +:100B80006868C0F38100012807D06868C0F381005D +:100B9000022809D16868C00306D52868800339D5C2 +:100BA00060680028E7D035E06068B0F5803F0BD082 +:100BB00010B1B0F5A02F11D0286820F48030286043 +:100BC000286820F4802002E0286840F48030286003 +:100BD000606890B1FFF73EFE06460AE0286840F4E0 +:100BE00080202860F0E700BFFFF734FE801B6428F8 +:100BF00073D828688003F7D50CE0FFF72BFE064674 +:100C000005E000BFFFF726FE801B6428F0D82868A7 +:100C10008003F7D420789A4E80074FF001094FF0F7 +:100C2000000839D5686810F00C0F07D06868C0F369 +:100C30008100022809D16868C00306D428688007AB +:100C400014D52069012808D110E02069B0B1C6F898 +:100C50000090FFF7FFFD074605E00AE1FFF7FAFD08 +:100C6000C01B0228C4D828688007F7D528686169A6 +:100C700020F0F80040EAC10028600DE0C6F80080CE +:100C8000FFF7E8FD074604E0FFF7E4FDC01B02287C +:100C900023D828688007F7D4207800072CD5794816 +:100CA000A169D9B1C0F80090FFF7D4FD074604E070 +:100CB000FFF7D0FDC01B02280FD8686A8007F7D560 +:100CC00071484FF4FA510068B0FBF1F0009000BF9A +:100CD0000098411E0091FAD20EE080E0C0F800803A +:100CE000FFF7B8FD074604E0FFF7B4FDC01B02287C +:100CF00075D8686A8007F7D42078400760D5E8691E +:100D00000027C00008D4E86940F08050E861E86935 +:100D1000012700F0805000905C480168C90513D499 +:100D20000168834641F480710160FFF793FD8246BC +:100D300006E000BFFFF78EFDA0EB0A0064284ED846 +:100D4000DBF80000C005F5D5E06801280AD008B13D +:100D5000052813D0286A20F001002862286A20F0B4 +:100D6000040002E0286A40F001002862E06841F2D5 +:100D7000883B98B1FFF76EFD82460BE0286A40F091 +:100D800004002862EEE700BFFFF764FDA0EB0A0154 +:100D900059455AD8286A8007F6D50CE0FFF75AFD66 +:100DA000824605E0FFF756FDA0EB0A0159454CD8F5 +:100DB000286A8007F6D41FB1E86920F08050E86106 +:100DC000E06988B36968C1F38101022944D002282F +:100DD000C6F8608004D0FFF73DFD044638E034E0FB +:100DE000FFF738FD074604E0FFF734FDC01B02287B +:100DF0002BD828688001F7D4206AB0F5803F05D150 +:100E00006868A16820F4003008436860D4E90801EC +:100E10000843696821F4741108436860C6F860905B +:100E2000FFF718FD044606E025E000BFFFF712FDBE +:100E3000001B022809D828688001F7D51BE000BFF5 +:100E4000FFF708FD001B022802D90320BDE8F88F38 +:100E500028688001F4D40EE00128F7D06868226A7F +:100E600000F48031914204D1616A00F4701088422C +:100E700001D00120EAE70020E8E70000001002406E +:100E800000004242800442422C00002000700040DA +:100E900010B5401EB0F1807F01D3012010BD4FF08E +:100EA000E02460610F21601700F023FE0020A061A4 +:100EB00007202061002010BD70477047F8B5016819 +:100EC00004460868CA684B6910F00F0F4FF0000520 +:100ED00059D003F0010602F49077374365D0C1077B +:100EE00005D0D10503D5616C41F001016164410772 +:100EF00005D5D90703D0616C41F002016164810717 +:100F000005D5D90703D0616C41F004016164010784 +:100F100007D502F02001314303D0616C41F0080194 +:100F20006164616C00293AD0800604D5900602D530 +:100F3000204600F098FC20684069616CC0F3801086 +:100F4000090700D460B3204600F058FC20684069CF +:100F5000400621D52068143050E8001F21F04001E0 +:100F600040E80012002AF5D1E06BA8B16D49416359 +:100F7000E06BFFF70BFA002811D0E06B416B01B07A +:100F8000BDE8F040084783060FD593060DD52046EF +:100F9000BDE8F84000F067BC2046FFF78EFFF8BDC3 +:100FA0002046FFF78AFF6564F8BD266B2023012EDB +:100FB0007CD1C6067AD5D60678D5086848680090F0 +:100FC00048694FF00206400640D5E16B086840686A +:100FD0000004000CE8D0A28D8242E5D9E085886942 +:100FE00020282DD020680C3050E8001F21F480719B +:100FF00040E80012002AF5D12068143050E8001FA4 +:1010000021F0010140E80012002AF5D120681430D7 +:1010100050E8001F21F0400140E80012002AF5D1FD +:1010200084F84230256320680C3050E8001F21F01E +:10103000100140E80012002AF5D1E06BFFF782F9B9 +:101040006663A08DE18D401A81B22AE0A08DE18D0A +:10105000401A81B2E08D0028A6D00029A4D02268D1 +:101060000C3252E8000F20F4907042E80007002F85 +:10107000F5D12068143050E8002F22F0010240E83A +:101080000027002FF5D184F84230256320680C300A +:1010900050E8002F22F0100240E80023002BF5D189 +:1010A00066632046FFF708FFF8BDFFE705062BD56E +:1010B000150629D594F841002128F5D1A068B0F58E +:1010C000805F01D12069B0B1206A411C2162216892 +:1010D00000784860E08C401E0004000CE084E3D1FE +:1010E0002068C16821F08001C1602068C16841F0BA +:1010F0004001C160D8E7206A0088C0F3080048605A +:10110000206A801C2062E5E74006CDD55006CBD58D +:10111000CA68204622F04002CA6084F8413000F0DC +:101120003DF9C1E7FF16000870B5040004D094F83B +:101130004100002510B106E0012070BD84F8405048 +:10114000204600F023F8242084F841002068C1687C +:1011500021F40051C160204600F0E6FB20680169DF +:1011600021F4904101612068416921F02A01416127 +:101170002068C16841F40051C1606564202084F892 +:10118000410084F842006563002070BDF0B585B071 +:10119000002400940194029403940546036848488F +:1011A000DFF818C102210322464E071563453ED1E0 +:1011B000836943F480438361836903F48043049328 +:1011C000836943F0040383618069039200F00400A3 +:1011D00004900802CDE9000169463046FFF744FA61 +:1011E000CDE90074694630460294FFF73DFA374E68 +:1011F0003548C6E900048020C6E902402020346159 +:10120000C6E905404FF44050F0613046FFF7B4F9AD +:1012100008B1FFF795F8EE630022114625207562AC +:10122000FFF784FB2520FFF773FB05B0F0BD284DC9 +:10123000AB421ED1C36943F40033C361C36903F4F5 +:1012400000330493836943F004038361806903924C +:1012500000F0040004900420CDE900016946304606 +:10126000FFF702FA0820CDE90004694630460294EF +:1012700020E0184DAB42D8D1C36943F48023C36149 +:10128000C36903F480230493836943F008038361F3 +:101290008069CDE9007100F00800CDE903200E4D12 +:1012A00069462846FFF7E0F9E814CDE900046946ED +:1012B00028460294FFF7D8F9B7E70000003801404C +:1012C00000100240000801405800024014020020B3 +:1012D0000044004000480040000C014090F84230BB +:1012E000202B01D00220704721B11AB100230363E3 +:1012F00000F076BB01207047704770472DE9F84336 +:10130000044690F84100984616460D46202802D023 +:101310000220BDE8F88385B17EB100206064212001 +:1013200084F84100FFF796FAA6848146E684A06817 +:101330002027B0F5805F02D003E00120E9E72069B3 +:1013400010B12E4600250EE000260CE0802120463C +:1013500000F08EFBA8B9C6B116F8010B21684860F1 +:10136000E08C401EE084E08C4B464FF00002CDF84C +:1013700000800028EAD14FF04001204600F078FBC1 +:1013800040B184F841700320C3E735F8020BC0F385 +:101390000800E3E784F841700020BAE77047FEE7F1 +:1013A000094808B5416941F00101416140690022E5 +:1013B00000F00100009001210F20FFF7B7FABDE80F +:1013C00008400F20FFF7A4BA0010024030B585B0E6 +:1013D000002418480094019402940394816941F018 +:1013E00020018161816901F020010491816941F04E +:1013F00004018161816901F004010491816941F076 +:101400000801816180690C4D00F008000490012200 +:10141000F0212846FFF718FAF02000900120CDE9CE +:1014200001040220039069462846FFF71DF905B024 +:1014300030BD000000100240000C01400C4810B507 +:101440000A4901604FF416514160002181600C226D +:10145000C160C0E904128161C161FFF765FE002827 +:1014600003D0BDE81040FEF76BBF10BD003801404F +:101470003C0100200C4810B50A4901604FF4165198 +:101480004160002181600C22C160C0E904128161C9 +:10149000C161FFF749FE002803D0BDE81040FEF708 +:1014A0004FBF10BD00440040840100200C4810B51F +:1014B0000A4901604FF416514160002181600C22FD +:1014C000C160C0E904128161C161FFF72DFE0028EF +:1014D00003D0BDE81040FEF733BF10BD0048004008 +:1014E000CC010020FEE7FFF737FBFEE77047000066 +:1014F000184830B4AA210170552141700222164BC0 +:10150000002100BF01EBC1041C44491C64788454D1 +:10151000521CC9B2D2B20329F4D3002101EBC10499 +:101520001C44491CA4788454521CC9B2D2B2032969 +:10153000F4D3084B0021AA3B5C5C8454521C491C28 +:10154000C9B2D2B25A29F7D330BC64230149034847 +:10155000FFF7D4BEDA00002005000020840100203F +:101560007047000010B50A4C0120022120700320B2 +:1015700060702046FEF7AEFEA070000AE0702146C3 +:101580000422BDE810400A230248FFF7B7BE00005E +:101590008A0000203C01002010B5094C01200221E6 +:1015A000207060702046FEF795FEA070000AE07083 +:1015B00021460422BDE810400A230248FFF79EBEE0 +:1015C0008A0000203C01002010B5094C02210320B4 +:1015D000217060702046FEF77DFEA070000AE0706A +:1015E00021460422BDE810400A230248FFF786BEC8 +:1015F0008A0000203C01002010B5094C0221012086 +:10160000217060702046FEF765FEA070000AE07051 +:1016100021460422BDE810400A230248FFF76EBEAF +:101620008A0000203C01002010B5094C0320022153 +:10163000207060702046FEF74DFEA070000AE0703A +:1016400021460422BDE810400A230248FFF756BE97 +:101650008A0000203C01002010B5002210210B4818 +:10166000FFF7F2F80A4C032002212070012060707D +:101670002046FEF72FFEA070000AE07021460422EB +:10168000BDE810400A230348FFF738BE000C0140B4 +:101690008A0000203C010020FFF7E2B830B58FB08F +:1016A00028216846FEF7B2FD14210AA8FEF7AEFD18 +:1016B00001210804CDE900100024029402250491C0 +:1016C000CDE907504FF4E01009906846FFF750FA53 +:1016D00008B172B6FEE70F20CDE90A054FF480602D +:1016E000CDE90C4002210AA80E94FFF753F908B186 +:1016F00072B6FEE7FFF7E4F90FB030BD704710B5E2 +:10170000406A0021C185C184FFF7D7FB10BD70B5C9 +:10171000446A2068406994F84110C0F3C010002565 +:10172000212904D118B1E584204600F08EF8206804 +:10173000406994F84210C0F38010222904D118B1F6 +:10174000E585204600F05AF8606C40F010006064B7 +:101750002046FFF7B2FB70BD10B50146406A09682C +:1017600009684FF0000289062ED4C28501680C3149 +:1017700051E8003F23F4807341E80034002CF5D198 +:101780000168143151E8003F23F0010341E80034BF +:10179000002CF5D10168143151E8003F23F04003DB +:1017A00041E80034002CF5D1202180F84210016B73 +:1017B000012909D101680C3151E8003F23F01003E1 +:1017C00041E80034002CF5D14263016B012902D0BD +:1017D000FFF792FD10BD818DFFF76EFB10BD10B5B8 +:1017E000406A01214163016B012902D0FFF785FDA9 +:1017F00010BD818D4908FFF75FFB10BD01680C31FA +:1018000051E8002F22F4907241E80023002BF5D11B +:101810000168143151E8002F22F0010241E8002351 +:10182000002BF5D1016B012909D101680C3151E878 +:10183000002F22F0100241E80023002BF5D12021D7 +:1018400080F8421000210163704701680C3151E8B3 +:10185000002F22F0C00241E80023002BF5D1202107 +:1018600080F84110704708B590F84210222901D045 +:10187000022008BD82684FF480539A4201D1016969 +:1018800021B1816A9A421BD04AB10AE00268816A9A +:101890005268C2F308020A80816A891C08E0026962 +:1018A00072B10268526802F07F020A70816A491CB4 +:1018B0008162C18D491E0904090CC18503D01BE05A +:1018C00002685268F1E70168CA6822F02002CA6023 +:1018D0000168CA6822F48072CA6001684A6922F00D +:1018E00001024A61202180F8421000214163026B0D +:1018F000012A03D0FFF700FD002008BD0163016845 +:101900000C3151E8002F22F0100241E80023002B97 +:10191000F5D101680A68D20602D50A6849680091C3 +:10192000818DFFF7C9FAE7E770B5044600680169E1 +:10193000E26821F44051114301612169A068084324 +:10194000616908432168CA6841F20C639A43024303 +:10195000CA6020684169A26921F440711143416164 +:101960001E492068884202D1FFF7C0F801E0FFF766 +:10197000ADF800EBC00101EB00126068642180004B +:10198000B2FBF0F3B3FBF1F36FF018067343B2FB55 +:10199000F0F5B2FBF0F605EB8305322303EB0515FA +:1019A000B5FBF1F5B6FBF1F605F0F00505EB061514 +:1019B000B2FBF0F6B2FBF0F0B0FBF1F06FF0180202 +:1019C000504306EB800003EB0010B0FBF1F0216800 +:1019D00000F00F002844886070BD0000003801400E +:1019E00038B5816204468285002013466064222255 +:1019F00084F84220E56B1B4AAA62E56B1A4AEA6248 +:101A0000E56B1A4A2A63E26B50630A462168E06B71 +:101A1000091DFEF7DFFD206801684068009020691D +:101A200048B120680C3050E8001F41F4807140E854 +:101A30000012002AF5D12068143050E8001F41F050 +:101A4000010140E80012002AF5D12068143050E866 +:101A5000001F41F0400140E80012002AF5D10020AB +:101A600038BD000059170008DF1700080F170008DD +:101A70002DE9F843984617460D460446089E24E093 +:101A8000701C22D0FEF7E6FEA0EB0800B0421AD888 +:101A9000CEB12068C168490717D5802D15D0402DDB +:101AA00013D00168C94309070FD4016800254068B5 +:101AB00000902046FFF7A2FE0820606484F84050A2 +:101AC0000120BDE8F8830320FBE72068006835EAC1 +:101AD000000004D00020B842D2D00020F1E701205D +:101AE000F9E700000148FFF7E9B900003C010020D8 +:101AF000FEE70907090E002804DB00F1E02080F86A +:101B00000014704700F00F0000F1E02080F8141D71 +:101B100070470000FEF7ACFEFFF7C0FDFFF756FC74 +:101B2000FFF73EFCFFF7A6FCFFF788FCFFF7BEFCC3 +:101B300040211C48FEF748FB40221A491A48FFF78B +:101B4000CDFB19480068C16841F01001C160174C15 +:101B500001252078401CC0B22070072800D92570CC +:101B600020780828F5D2DFE800F00405080B0E11F4 +:101B70001417EEE7FFF710FD10E0FFF7F3FC0DE0A0 +:101B8000FFF73AFD0AE0FFF71FFD07E0FFF764FDEE +:101B900004E0FFF749FD01E0FFF7AAFC2820FEF76B +:101BA00051FDD6E79A0000203C01002000000020F3 +:101BB000010202030405060708090A0B0C0D0E0FAB +:101BC00010100000000000000000010203040607DE +:101BD000080900000000010203040000FC1B0008CB +:101BE0000000002030000000280100082C1C000824 +:101BF00030000020880800004401000800000000B8 +:101C000000010000000000000000020000000000D1 +:101C100000000003000000000000000001000000C0 +:0C1C2000100000000000000000127A001C :04000005080000ED02 :00000001FF diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.htm b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.htm index 1a77da1..47cf1f5 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.htm +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.htm @@ -3,7 +3,7 @@ Static Call Graph - [PressureSensorBoardMaster\PressureSensorBoardMaster.axf]

Static Call Graph for image PressureSensorBoardMaster\PressureSensorBoardMaster.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Fri Dec 05 17:11:08 2025 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Sat Dec 06 16:10:45 2025

Maximum Stack Usage = 136 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -22,9 +22,9 @@ Mutually Recursive functions
  • BusFault_Handler   ⇒   BusFault_Handler
  • HardFault_Handler   ⇒   HardFault_Handler
  • MemManage_Handler   ⇒   MemManage_Handler
    -
  • UART_EndTxTransfer   ⇒   UART_EndTxTransfer
    -
  • UART_EndRxTransfer   ⇒   UART_EndRxTransfer
    +
  • UART_EndRxTransfer   ⇒   UART_EndRxTransfer
  • UsageFault_Handler   ⇒   UsageFault_Handler
    +
  • UART_EndTxTransfer   ⇒   UART_EndTxTransfer

    @@ -74,15 +74,15 @@ Function Pointers
  • TIM1_TRG_COM_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • TIM1_UP_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • TIM2_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET) -
  • TIM3_IRQHandler from stm32f1xx_it.o(i.TIM3_IRQHandler) referenced from startup_stm32f103xb.o(RESET) +
  • TIM3_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • TIM4_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • UART_DMAAbortOnError from stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) referenced from stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler)
  • UART_DMAError from stm32f1xx_hal_uart.o(i.UART_DMAError) referenced from stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA)
  • UART_DMAReceiveCplt from stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) referenced from stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA)
  • UART_DMARxHalfCplt from stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) referenced from stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA)
  • USART1_IRQHandler from stm32f1xx_it.o(i.USART1_IRQHandler) referenced from startup_stm32f103xb.o(RESET) -
  • USART2_IRQHandler from stm32f1xx_it.o(i.USART2_IRQHandler) referenced from startup_stm32f103xb.o(RESET) -
  • USART3_IRQHandler from stm32f1xx_it.o(i.USART3_IRQHandler) referenced from startup_stm32f103xb.o(RESET) +
  • USART2_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET) +
  • USART3_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • USBWakeUp_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • USB_HP_CAN1_TX_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET)
  • USB_LP_CAN1_RX0_IRQHandler from startup_stm32f103xb.o(.text) referenced from startup_stm32f103xb.o(RESET) @@ -95,8 +95,8 @@ Function Pointers Global Symbols
  • __main (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main)) -

    [Calls]

    • >>   __rt_entry -
    • >>   __scatterload +

      [Calls]
      • >>   __scatterload +
      • >>   __rt_entry

      __scatterload (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter)) @@ -107,9 +107,9 @@ Global Symbols

      [Calls]

      • >>   __rt_entry
      -

      __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

      __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) -

      __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

      __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)

      __scatterload_copy (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED)

      [Calls]

      • >>   __scatterload_copy @@ -117,80 +117,80 @@ Global Symbols
        [Called By]
        • >>   __scatterload_copy
        -

        __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED) +

        __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)

        __rt_lib_init (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000))

        [Called By]

        • >>   __rt_entry_li
        -

        __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) +

        __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) -

        __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) +

        __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) -

        __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) +

        __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) -

        __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) +

        __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) -

        __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) +

        __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) -

        __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) +

        __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) -

        __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) +

        __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) -

        __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) +

        __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) -

        __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) +

        __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) -

        __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) +

        __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) -

        __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) +

        __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) -

        __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) +

        __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) -

        __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) +

        __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) -

        __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) +

        __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) -

        __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) +

        __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) -

        __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) +

        __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) -

        __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) +

        __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) -

        __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) +

        __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) -

        __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) +

        __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) -

        __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) +

        __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) -

        __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) +

        __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C))

        __rt_lib_shutdown (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000))

        [Called By]

        • >>   __rt_exit_ls
        -

        __rt_lib_shutdown_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)) +

        __rt_lib_shutdown_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)) -

        __rt_lib_shutdown_fini_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)) +

        __rt_lib_shutdown_fini_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)) -

        __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)) +

        __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)) -

        __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000011)) +

        __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000011)) -

        __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000012)) +

        __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000012)) -

        __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)) +

        __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)) -

        __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)) +

        __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)) -

        __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)) +

        __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E))

        __rt_entry (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000)) -

        [Called By]

        • >>   __main -
        • >>   __scatterload_rt2 +

          [Called By]
          • >>   __scatterload_rt2 +
          • >>   __main
          -

          __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002)) +

          __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))

          __rt_entry_sh (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004))

          [Stack]

          • Max Depth = 8 + Unknown Stack Size @@ -203,7 +203,7 @@ Global Symbols

            [Calls]
            • >>   __rt_lib_init
            -

            __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009)) +

            __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))

            __rt_entry_main (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D))

            [Stack]

            • Max Depth = 136 + Unknown Stack Size @@ -213,7 +213,7 @@ Global Symbols
            • >>   exit
            -

            __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)) +

            __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))

            __rt_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000))

            [Called By]

            • >>   exit @@ -223,7 +223,7 @@ Global Symbols

              [Calls]
              • >>   __rt_lib_shutdown
              -

              __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002)) +

              __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))

              __rt_exit_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004))

              [Calls]

              • >>   _sys_exit @@ -335,9 +335,18 @@ Global Symbols

                TIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text))
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET)
                +

                TIM3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text)) +
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET) +

                TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text))
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET)
                +

                USART2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text)) +
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET) +
                +

                USART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text)) +
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET) +

                USBWakeUp_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f103xb.o(.text))
                [Address Reference Count : 1]

                • startup_stm32f103xb.o(RESET)
                @@ -354,35 +363,35 @@ Global Symbols

                [Called By]
                • >>   __user_setup_stackheap
                -

                __aeabi_memclr (Thumb, 0 bytes, Stack size 0 bytes, rt_memclr.o(.text)) -

                [Called By]

                • >>   Process_Reply +

                  __aeabi_memclr (Thumb, 0 bytes, Stack size 0 bytes, rt_memclr.o(.text)) +

                  [Called By]

                  • >>   main

                  __rt_memclr (Thumb, 68 bytes, Stack size 0 bytes, rt_memclr.o(.text), UNUSED)

                  [Calls]

                  • >>   _memset_w
                  -

                  _memset (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr.o(.text), UNUSED) +

                  _memset (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr.o(.text), UNUSED) -

                  __aeabi_memclr4 (Thumb, 0 bytes, Stack size 4 bytes, rt_memclr_w.o(.text)) +

                  __aeabi_memclr4 (Thumb, 0 bytes, Stack size 4 bytes, rt_memclr_w.o(.text))

                  [Stack]

                  • Max Depth = 4
                  • Call Chain = __aeabi_memclr4
                  -
                  [Called By]
                  • >>   SystemClock_Config +
                    [Called By]
                    • >>   SystemClock_Config
                    -

                    __aeabi_memclr8 (Thumb, 0 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED) +

                    __aeabi_memclr8 (Thumb, 0 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED) -

                    __rt_memclr_w (Thumb, 78 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED) +

                    __rt_memclr_w (Thumb, 78 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED)

                    _memset_w (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED)

                    [Called By]

                    • >>   __rt_memclr
                    -

                    __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                    __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                    __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)

                    __user_setup_stackheap (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text))

                    [Stack]

                    • Max Depth = 8 + Unknown Stack Size @@ -403,21 +412,21 @@ Global Symbols
                      [Called By]
                      • >>   __rt_entry_main
                      -

                      __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                      __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                      __user_perproc_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))

                      [Called By]

                      • >>   __user_setup_stackheap
                      -

                      __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                      __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                      _sys_exit (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text))

                      [Called By]

                      • >>   __rt_exit_exit
                      -

                      __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                      __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) -

                      __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                      __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)

                      BusFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.BusFault_Handler))

                      [Calls]

                      • >>   BusFault_Handler @@ -426,12 +435,17 @@ Global Symbols

                      [Address Reference Count : 1]
                      • startup_stm32f103xb.o(RESET)
                      -

                      __semihosting_library_function (Thumb, 0 bytes, Stack size 0 bytes, indicate_semi.o(.text), UNUSED) +

                      __semihosting_library_function (Thumb, 0 bytes, Stack size 0 bytes, indicate_semi.o(.text), UNUSED) -

                      Calculate_CRC16 (Thumb, 52 bytes, Stack size 16 bytes, main.o(i.Calculate_CRC16)) +

                      Calculate_CRC16 (Thumb, 52 bytes, Stack size 16 bytes, main.o(i.Calculate_CRC16))

                      [Stack]

                      • Max Depth = 16
                      • Call Chain = Calculate_CRC16
                      -
                      [Called By]
                      • >>   Slave1_Sta_Query +
                        [Called By]
                        • >>   Slave3_Sta_Query +
                        • >>   Slave3_Matrix_Query +
                        • >>   Slave2_Sta_Query +
                        • >>   Slave2_Matrix_Query +
                        • >>   Slave1_Sta_Query +
                        • >>   Slave1_Matrix_Query

                        DMA1_Channel5_IRQHandler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.DMA1_Channel5_IRQHandler)) @@ -444,25 +458,23 @@ Global Symbols

                        DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.DebugMon_Handler))
                        [Address Reference Count : 1]

                        • startup_stm32f103xb.o(RESET)
                        -

                        Error_Handler (Thumb, 4 bytes, Stack size 0 bytes, main.o(i.Error_Handler)) -

                        [Called By]

                        • >>   HAL_UART_MspInit -
                        • >>   MX_USART3_UART_Init -
                        • >>   MX_USART2_UART_Init -
                        • >>   MX_USART1_UART_Init -
                        • >>   MX_TIM3_Init +

                          Error_Handler (Thumb, 4 bytes, Stack size 0 bytes, main.o(i.Error_Handler)) +

                          [Called By]

                          • >>   HAL_UART_MspInit +
                          • >>   MX_USART3_UART_Init +
                          • >>   MX_USART2_UART_Init +
                          • >>   MX_USART1_UART_Init
                          -

                          HAL_DMA_Abort (Thumb, 70 bytes, Stack size 8 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Abort)) +

                          HAL_DMA_Abort (Thumb, 70 bytes, Stack size 8 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Abort))

                          [Stack]

                          • Max Depth = 8
                          • Call Chain = HAL_DMA_Abort
                          -
                          [Called By]
                          • >>   HAL_UART_IRQHandler -
                          • >>   HAL_UART_DMAStop +
                            [Called By]
                            • >>   HAL_UART_IRQHandler
                            -

                            HAL_DMA_Abort_IT (Thumb, 148 bytes, Stack size 8 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT)) +

                            HAL_DMA_Abort_IT (Thumb, 148 bytes, Stack size 8 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT))

                            [Stack]

                            • Max Depth = 8
                            • Call Chain = HAL_DMA_Abort_IT
                            -
                            [Called By]
                            • >>   HAL_UART_IRQHandler +
                              [Called By]
                              • >>   HAL_UART_IRQHandler

                              HAL_DMA_IRQHandler (Thumb, 316 bytes, Stack size 40 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler)) @@ -471,10 +483,10 @@ Global Symbols
                              [Called By]

                              • >>   DMA1_Channel5_IRQHandler
                              -

                              HAL_DMA_Init (Thumb, 84 bytes, Stack size 12 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Init)) +

                              HAL_DMA_Init (Thumb, 84 bytes, Stack size 12 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Init))

                              [Stack]

                              • Max Depth = 12
                              • Call Chain = HAL_DMA_Init
                              -
                              [Called By]
                              • >>   HAL_UART_MspInit +
                                [Called By]
                                • >>   HAL_UART_MspInit

                                HAL_DMA_Start_IT (Thumb, 112 bytes, Stack size 16 bytes, stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT)) @@ -482,317 +494,224 @@ Global Symbols


                              [Calls]
                              • >>   DMA_SetConfig
                              -
                              [Called By]
                              • >>   UART_Start_Receive_DMA +
                                [Called By]
                                • >>   UART_Start_Receive_DMA
                                -

                                HAL_GPIO_Init (Thumb, 446 bytes, Stack size 40 bytes, stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init)) -

                                [Stack]

                                • Max Depth = 40
                                • Call Chain = HAL_GPIO_Init +

                                  HAL_Delay (Thumb, 32 bytes, Stack size 16 bytes, stm32f1xx_hal.o(i.HAL_Delay)) +

                                  [Stack]

                                  • Max Depth = 16
                                  • Call Chain = HAL_Delay
                                  -
                                  [Called By]
                                  • >>   HAL_UART_MspInit -
                                  • >>   MX_GPIO_Init -
                                  - -

                                  HAL_GPIO_WritePin (Thumb, 10 bytes, Stack size 0 bytes, stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin)) -

                                  [Called By]

                                  • >>   MX_GPIO_Init -
                                  - -

                                  HAL_GetTick (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_hal.o(i.HAL_GetTick)) -

                                  [Called By]

                                  • >>   HAL_UART_Transmit -
                                  • >>   HAL_RCC_OscConfig -
                                  • >>   HAL_RCC_ClockConfig -
                                  • >>   UART_WaitOnFlagUntilTimeout -
                                  - -

                                  HAL_IncTick (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal.o(i.HAL_IncTick)) -

                                  [Called By]

                                  • >>   SysTick_Handler -
                                  - -

                                  HAL_Init (Thumb, 32 bytes, Stack size 8 bytes, stm32f1xx_hal.o(i.HAL_Init)) -

                                  [Stack]

                                  • Max Depth = 40
                                  • Call Chain = HAL_Init ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority -
                                  -
                                  [Calls]
                                  • >>   HAL_MspInit -
                                  • >>   HAL_InitTick -
                                  • >>   HAL_NVIC_SetPriorityGrouping +
                                    [Calls]
                                    • >>   HAL_GetTick

                                    [Called By]
                                    • >>   main
                                    -

                                    HAL_InitTick (Thumb, 54 bytes, Stack size 16 bytes, stm32f1xx_hal.o(i.HAL_InitTick)) +

                                    HAL_GPIO_Init (Thumb, 446 bytes, Stack size 40 bytes, stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init)) +

                                    [Stack]

                                    • Max Depth = 40
                                    • Call Chain = HAL_GPIO_Init +
                                    +
                                    [Called By]
                                    • >>   HAL_UART_MspInit +
                                    • >>   MX_GPIO_Init +
                                    + +

                                    HAL_GPIO_WritePin (Thumb, 10 bytes, Stack size 0 bytes, stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin)) +

                                    [Called By]

                                    • >>   MX_GPIO_Init +
                                    • >>   Slave3_Sta_Query +
                                    + +

                                    HAL_GetTick (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_hal.o(i.HAL_GetTick)) +

                                    [Called By]

                                    • >>   UART_WaitOnFlagUntilTimeout +
                                    • >>   HAL_UART_Transmit +
                                    • >>   HAL_RCC_OscConfig +
                                    • >>   HAL_RCC_ClockConfig +
                                    • >>   HAL_Delay +
                                    + +

                                    HAL_IncTick (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal.o(i.HAL_IncTick)) +

                                    [Called By]

                                    • >>   SysTick_Handler +
                                    + +

                                    HAL_Init (Thumb, 32 bytes, Stack size 8 bytes, stm32f1xx_hal.o(i.HAL_Init)) +

                                    [Stack]

                                    • Max Depth = 40
                                    • Call Chain = HAL_Init ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority +
                                    +
                                    [Calls]
                                    • >>   HAL_MspInit +
                                    • >>   HAL_InitTick +
                                    • >>   HAL_NVIC_SetPriorityGrouping +
                                    +
                                    [Called By]
                                    • >>   main +
                                    + +

                                    HAL_InitTick (Thumb, 54 bytes, Stack size 16 bytes, stm32f1xx_hal.o(i.HAL_InitTick))

                                    [Stack]

                                    • Max Depth = 32
                                    • Call Chain = HAL_InitTick ⇒ HAL_NVIC_SetPriority
                                    -
                                    [Calls]
                                    • >>   HAL_NVIC_SetPriority -
                                    • >>   HAL_SYSTICK_Config +
                                      [Calls]
                                      • >>   HAL_NVIC_SetPriority +
                                      • >>   HAL_SYSTICK_Config
                                      -
                                      [Called By]
                                      • >>   HAL_RCC_ClockConfig -
                                      • >>   HAL_Init +
                                        [Called By]
                                        • >>   HAL_RCC_ClockConfig +
                                        • >>   HAL_Init
                                        -

                                        HAL_MspInit (Thumb, 52 bytes, Stack size 8 bytes, stm32f1xx_hal_msp.o(i.HAL_MspInit)) +

                                        HAL_MspInit (Thumb, 52 bytes, Stack size 8 bytes, stm32f1xx_hal_msp.o(i.HAL_MspInit))

                                        [Stack]

                                        • Max Depth = 8
                                        • Call Chain = HAL_MspInit
                                        -
                                        [Called By]
                                        • >>   HAL_Init +
                                          [Called By]
                                          • >>   HAL_Init
                                          -

                                          HAL_NVIC_EnableIRQ (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)) -

                                          [Called By]

                                          • >>   HAL_UART_MspInit -
                                          • >>   HAL_TIM_Base_MspInit -
                                          • >>   MX_DMA_Init +

                                            HAL_NVIC_EnableIRQ (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ)) +

                                            [Called By]

                                            • >>   HAL_UART_MspInit +
                                            • >>   MX_DMA_Init
                                            -

                                            HAL_NVIC_SetPriority (Thumb, 60 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority)) +

                                            HAL_NVIC_SetPriority (Thumb, 60 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority))

                                            [Stack]

                                            • Max Depth = 16
                                            • Call Chain = HAL_NVIC_SetPriority
                                            -
                                            [Calls]
                                            • >>   __NVIC_SetPriority +
                                              [Calls]
                                              • >>   __NVIC_SetPriority
                                              -
                                              [Called By]
                                              • >>   HAL_UART_MspInit -
                                              • >>   HAL_TIM_Base_MspInit -
                                              • >>   MX_DMA_Init -
                                              • >>   HAL_InitTick +
                                                [Called By]
                                                • >>   HAL_UART_MspInit +
                                                • >>   MX_DMA_Init +
                                                • >>   HAL_InitTick
                                                -

                                                HAL_NVIC_SetPriorityGrouping (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping)) -

                                                [Called By]

                                                • >>   HAL_Init +

                                                  HAL_NVIC_SetPriorityGrouping (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping)) +

                                                  [Called By]

                                                  • >>   HAL_Init
                                                  -

                                                  HAL_RCC_CSSCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback)) -

                                                  [Called By]

                                                  • >>   HAL_RCC_NMI_IRQHandler +

                                                    HAL_RCC_CSSCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback)) +

                                                    [Called By]

                                                    • >>   HAL_RCC_NMI_IRQHandler
                                                    -

                                                    HAL_RCC_ClockConfig (Thumb, 280 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig)) +

                                                    HAL_RCC_ClockConfig (Thumb, 280 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig))

                                                    [Stack]

                                                    • Max Depth = 64
                                                    • Call Chain = HAL_RCC_ClockConfig ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority
                                                    -
                                                    [Calls]
                                                    • >>   HAL_RCC_GetSysClockFreq -
                                                    • >>   HAL_InitTick -
                                                    • >>   HAL_GetTick +
                                                      [Calls]
                                                      • >>   HAL_RCC_GetSysClockFreq +
                                                      • >>   HAL_InitTick +
                                                      • >>   HAL_GetTick
                                                      -
                                                      [Called By]
                                                      • >>   SystemClock_Config +
                                                        [Called By]
                                                        • >>   SystemClock_Config
                                                        -

                                                        HAL_RCC_EnableCSS (Thumb, 8 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS)) -

                                                        [Called By]

                                                        • >>   SystemClock_Config +

                                                          HAL_RCC_EnableCSS (Thumb, 8 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS)) +

                                                          [Called By]

                                                          • >>   SystemClock_Config
                                                          -

                                                          HAL_RCC_GetPCLK1Freq (Thumb, 20 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)) -

                                                          [Called By]

                                                          • >>   UART_SetConfig +

                                                            HAL_RCC_GetPCLK1Freq (Thumb, 20 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq)) +

                                                            [Called By]

                                                            • >>   UART_SetConfig
                                                            -

                                                            HAL_RCC_GetPCLK2Freq (Thumb, 20 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq)) -

                                                            [Called By]

                                                            • >>   UART_SetConfig +

                                                              HAL_RCC_GetPCLK2Freq (Thumb, 20 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq)) +

                                                              [Called By]

                                                              • >>   UART_SetConfig
                                                              -

                                                              HAL_RCC_GetSysClockFreq (Thumb, 58 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)) -

                                                              [Called By]

                                                              • >>   HAL_RCC_ClockConfig +

                                                                HAL_RCC_GetSysClockFreq (Thumb, 58 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq)) +

                                                                [Called By]

                                                                • >>   HAL_RCC_ClockConfig
                                                                -

                                                                HAL_RCC_NMI_IRQHandler (Thumb, 20 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler)) +

                                                                HAL_RCC_NMI_IRQHandler (Thumb, 20 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler))

                                                                [Stack]

                                                                • Max Depth = 8
                                                                • Call Chain = HAL_RCC_NMI_IRQHandler
                                                                -
                                                                [Calls]
                                                                • >>   HAL_RCC_CSSCallback +
                                                                  [Calls]
                                                                  • >>   HAL_RCC_CSSCallback

                                                                  [Called By]
                                                                  • >>   NMI_Handler
                                                                  -

                                                                  HAL_RCC_OscConfig (Thumb, 778 bytes, Stack size 40 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig)) +

                                                                  HAL_RCC_OscConfig (Thumb, 778 bytes, Stack size 40 bytes, stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig))

                                                                  [Stack]

                                                                  • Max Depth = 40
                                                                  • Call Chain = HAL_RCC_OscConfig
                                                                  -
                                                                  [Calls]
                                                                  • >>   HAL_GetTick +
                                                                    [Calls]
                                                                    • >>   HAL_GetTick
                                                                    -
                                                                    [Called By]
                                                                    • >>   SystemClock_Config +
                                                                      [Called By]
                                                                      • >>   SystemClock_Config
                                                                      -

                                                                      HAL_SYSTICK_Config (Thumb, 40 bytes, Stack size 8 bytes, stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config)) +

                                                                      HAL_SYSTICK_Config (Thumb, 40 bytes, Stack size 8 bytes, stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config))

                                                                      [Stack]

                                                                      • Max Depth = 8
                                                                      • Call Chain = HAL_SYSTICK_Config
                                                                      -
                                                                      [Calls]
                                                                      • >>   __NVIC_SetPriority +
                                                                        [Calls]
                                                                        • >>   __NVIC_SetPriority
                                                                        -
                                                                        [Called By]
                                                                        • >>   HAL_InitTick +
                                                                          [Called By]
                                                                          • >>   HAL_InitTick
                                                                          -

                                                                          HAL_TIMEx_BreakCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIMEx_CommutCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIMEx_MasterConfigSynchronization (Thumb, 92 bytes, Stack size 16 bytes, stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization)) -

                                                                          [Stack]

                                                                          • Max Depth = 16
                                                                          • Call Chain = HAL_TIMEx_MasterConfigSynchronization -
                                                                          -
                                                                          [Called By]
                                                                          • >>   MX_TIM3_Init -
                                                                          - -

                                                                          HAL_TIM_Base_Init (Thumb, 90 bytes, Stack size 8 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init)) -

                                                                          [Stack]

                                                                          • Max Depth = 32
                                                                          • Call Chain = HAL_TIM_Base_Init ⇒ HAL_TIM_Base_MspInit ⇒ HAL_NVIC_SetPriority -
                                                                          -
                                                                          [Calls]
                                                                          • >>   HAL_TIM_Base_MspInit -
                                                                          • >>   TIM_Base_SetConfig -
                                                                          -
                                                                          [Called By]
                                                                          • >>   MX_TIM3_Init -
                                                                          - -

                                                                          HAL_TIM_Base_MspInit (Thumb, 50 bytes, Stack size 8 bytes, tim.o(i.HAL_TIM_Base_MspInit)) -

                                                                          [Stack]

                                                                          • Max Depth = 24
                                                                          • Call Chain = HAL_TIM_Base_MspInit ⇒ HAL_NVIC_SetPriority -
                                                                          -
                                                                          [Calls]
                                                                          • >>   HAL_NVIC_SetPriority -
                                                                          • >>   HAL_NVIC_EnableIRQ -
                                                                          -
                                                                          [Called By]
                                                                          • >>   HAL_TIM_Base_Init -
                                                                          - -

                                                                          HAL_TIM_Base_Start_IT (Thumb, 76 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT)) -

                                                                          [Called By]

                                                                          • >>   main -
                                                                          - -

                                                                          HAL_TIM_Base_Stop_IT (Thumb, 48 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_IT)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_PeriodElapsedCallback -
                                                                          - -

                                                                          HAL_TIM_ConfigClockSource (Thumb, 220 bytes, Stack size 16 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource)) -

                                                                          [Stack]

                                                                          • Max Depth = 24
                                                                          • Call Chain = HAL_TIM_ConfigClockSource ⇒ TIM_TI2_ConfigInputStage -
                                                                          -
                                                                          [Calls]
                                                                          • >>   TIM_TI2_ConfigInputStage -
                                                                          • >>   TIM_TI1_ConfigInputStage -
                                                                          • >>   TIM_ITRx_SetConfig -
                                                                          • >>   TIM_ETR_SetConfig -
                                                                          -
                                                                          [Called By]
                                                                          • >>   MX_TIM3_Init -
                                                                          - -

                                                                          HAL_TIM_IC_CaptureCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIM_IRQHandler (Thumb, 304 bytes, Stack size 24 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler)) -

                                                                          [Stack]

                                                                          • Max Depth = 24
                                                                          • Call Chain = HAL_TIM_IRQHandler -
                                                                          -
                                                                          [Calls]
                                                                          • >>   HAL_TIM_PeriodElapsedCallback -
                                                                          • >>   HAL_TIM_TriggerCallback -
                                                                          • >>   HAL_TIM_PWM_PulseFinishedCallback -
                                                                          • >>   HAL_TIM_OC_DelayElapsedCallback -
                                                                          • >>   HAL_TIM_IC_CaptureCallback -
                                                                          • >>   HAL_TIMEx_CommutCallback -
                                                                          • >>   HAL_TIMEx_BreakCallback -
                                                                          -
                                                                          [Called By]
                                                                          • >>   TIM3_IRQHandler -
                                                                          - -

                                                                          HAL_TIM_OC_DelayElapsedCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIM_PWM_PulseFinishedCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIM_PeriodElapsedCallback (Thumb, 20 bytes, Stack size 0 bytes, main.o(i.HAL_TIM_PeriodElapsedCallback)) -

                                                                          [Calls]

                                                                          • >>   HAL_TIM_Base_Stop_IT -
                                                                          -
                                                                          [Called By]
                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_TIM_TriggerCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_TIM_IRQHandler -
                                                                          - -

                                                                          HAL_UARTEx_RxEventCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback)) -

                                                                          [Called By]

                                                                          • >>   HAL_UART_IRQHandler -
                                                                          • >>   UART_Receive_IT +

                                                                            HAL_UARTEx_RxEventCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback)) +

                                                                            [Called By]

                                                                            • >>   UART_Receive_IT
                                                                            • >>   UART_DMARxHalfCplt
                                                                            • >>   UART_DMAReceiveCplt +
                                                                            • >>   HAL_UART_IRQHandler
                                                                            -

                                                                            HAL_UART_DMAStop (Thumb, 112 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop)) -

                                                                            [Stack]

                                                                            • Max Depth = 16
                                                                            • Call Chain = HAL_UART_DMAStop ⇒ HAL_DMA_Abort -
                                                                            -
                                                                            [Calls]
                                                                            • >>   HAL_DMA_Abort -
                                                                            • >>   UART_EndTxTransfer -
                                                                            • >>   UART_EndRxTransfer -
                                                                            -
                                                                            [Called By]
                                                                            • >>   HAL_UART_TxCpltCallback -
                                                                            - -

                                                                            HAL_UART_ErrorCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback)) -

                                                                            [Called By]

                                                                            • >>   HAL_UART_IRQHandler -
                                                                            • >>   UART_DMAError +

                                                                              HAL_UART_ErrorCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback)) +

                                                                              [Called By]

                                                                              • >>   UART_DMAError
                                                                              • >>   UART_DMAAbortOnError +
                                                                              • >>   HAL_UART_IRQHandler
                                                                              -

                                                                              HAL_UART_IRQHandler (Thumb, 616 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler)) -

                                                                              [Stack]

                                                                              • Max Depth = 76
                                                                              • Call Chain = HAL_UART_IRQHandler ⇒ HAL_UART_TxCpltCallback ⇒ HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig +

                                                                                HAL_UART_IRQHandler (Thumb, 616 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler)) +

                                                                                [Stack]

                                                                                • Max Depth = 32
                                                                                • Call Chain = HAL_UART_IRQHandler ⇒ UART_Receive_IT
                                                                                -
                                                                                [Calls]
                                                                                • >>   HAL_UART_TxCpltCallback -
                                                                                • >>   HAL_DMA_Abort -
                                                                                • >>   HAL_UART_ErrorCallback -
                                                                                • >>   HAL_UARTEx_RxEventCallback -
                                                                                • >>   UART_Receive_IT -
                                                                                • >>   UART_EndRxTransfer -
                                                                                • >>   HAL_DMA_Abort_IT +
                                                                                  [Calls]
                                                                                  • >>   UART_Receive_IT +
                                                                                  • >>   UART_EndRxTransfer +
                                                                                  • >>   HAL_UART_TxCpltCallback +
                                                                                  • >>   HAL_UART_ErrorCallback +
                                                                                  • >>   HAL_UARTEx_RxEventCallback +
                                                                                  • >>   HAL_DMA_Abort_IT +
                                                                                  • >>   HAL_DMA_Abort
                                                                                  -
                                                                                  [Called By]
                                                                                  • >>   USART3_IRQHandler -
                                                                                  • >>   USART2_IRQHandler -
                                                                                  • >>   USART1_IRQHandler +
                                                                                    [Called By]
                                                                                    • >>   USART1_IRQHandler
                                                                                    -

                                                                                    HAL_UART_Init (Thumb, 100 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Init)) +

                                                                                    HAL_UART_Init (Thumb, 100 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Init))

                                                                                    [Stack]

                                                                                    • Max Depth = 96
                                                                                    • Call Chain = HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init
                                                                                    -
                                                                                    [Calls]
                                                                                    • >>   HAL_UART_MspInit -
                                                                                    • >>   UART_SetConfig +
                                                                                      [Calls]
                                                                                      • >>   UART_SetConfig +
                                                                                      • >>   HAL_UART_MspInit
                                                                                      -
                                                                                      [Called By]
                                                                                      • >>   MX_USART3_UART_Init -
                                                                                      • >>   MX_USART2_UART_Init -
                                                                                      • >>   MX_USART1_UART_Init +
                                                                                        [Called By]
                                                                                        • >>   MX_USART3_UART_Init +
                                                                                        • >>   MX_USART2_UART_Init +
                                                                                        • >>   MX_USART1_UART_Init
                                                                                        -

                                                                                        HAL_UART_MspInit (Thumb, 328 bytes, Stack size 40 bytes, usart.o(i.HAL_UART_MspInit)) +

                                                                                        HAL_UART_MspInit (Thumb, 302 bytes, Stack size 40 bytes, usart.o(i.HAL_UART_MspInit))

                                                                                        [Stack]

                                                                                        • Max Depth = 80
                                                                                        • Call Chain = HAL_UART_MspInit ⇒ HAL_GPIO_Init
                                                                                        -
                                                                                        [Calls]
                                                                                        • >>   HAL_DMA_Init -
                                                                                        • >>   HAL_NVIC_SetPriority -
                                                                                        • >>   HAL_NVIC_EnableIRQ -
                                                                                        • >>   HAL_GPIO_Init -
                                                                                        • >>   Error_Handler +
                                                                                          [Calls]
                                                                                          • >>   HAL_DMA_Init +
                                                                                          • >>   HAL_NVIC_SetPriority +
                                                                                          • >>   HAL_NVIC_EnableIRQ +
                                                                                          • >>   HAL_GPIO_Init +
                                                                                          • >>   Error_Handler
                                                                                          -
                                                                                          [Called By]
                                                                                          • >>   HAL_UART_Init +
                                                                                            [Called By]
                                                                                            • >>   HAL_UART_Init
                                                                                            -

                                                                                            HAL_UART_Receive_DMA (Thumb, 28 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA)) +

                                                                                            HAL_UART_Receive_DMA (Thumb, 28 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA))

                                                                                            [Stack]

                                                                                            • Max Depth = 44
                                                                                            • Call Chain = HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig
                                                                                            -
                                                                                            [Calls]
                                                                                            • >>   UART_Start_Receive_DMA +
                                                                                              [Calls]
                                                                                              • >>   UART_Start_Receive_DMA

                                                                                              [Called By]
                                                                                              • >>   main -
                                                                                              • >>   HAL_UART_TxCpltCallback
                                                                                              -

                                                                                              HAL_UART_RxCpltCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback)) -

                                                                                              [Called By]

                                                                                              • >>   UART_Receive_IT +

                                                                                                HAL_UART_RxCpltCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback)) +

                                                                                                [Called By]

                                                                                                • >>   UART_Receive_IT
                                                                                                • >>   UART_DMAReceiveCplt
                                                                                                -

                                                                                                HAL_UART_RxHalfCpltCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback)) +

                                                                                                HAL_UART_RxHalfCpltCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback))

                                                                                                [Called By]

                                                                                                • >>   UART_DMARxHalfCplt
                                                                                                -

                                                                                                HAL_UART_Transmit (Thumb, 160 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Transmit)) +

                                                                                                HAL_UART_Transmit (Thumb, 160 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_Transmit))

                                                                                                [Stack]

                                                                                                • Max Depth = 64
                                                                                                • Call Chain = HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
                                                                                                -
                                                                                                [Calls]
                                                                                                • >>   HAL_GetTick -
                                                                                                • >>   UART_WaitOnFlagUntilTimeout +
                                                                                                  [Calls]
                                                                                                  • >>   UART_WaitOnFlagUntilTimeout +
                                                                                                  • >>   HAL_GetTick
                                                                                                  -
                                                                                                  [Called By]
                                                                                                  • >>   Slave1_Sta_Query -
                                                                                                  • >>   RS485_Output +
                                                                                                    [Called By]
                                                                                                    • >>   Slave3_Sta_Query +
                                                                                                    • >>   Slave3_Matrix_Query +
                                                                                                    • >>   Slave2_Sta_Query +
                                                                                                    • >>   Slave2_Matrix_Query +
                                                                                                    • >>   Slave1_Sta_Query +
                                                                                                    • >>   Slave1_Matrix_Query +
                                                                                                    • >>   RS485_Output
                                                                                                    -

                                                                                                    HAL_UART_TxCpltCallback (Thumb, 50 bytes, Stack size 8 bytes, main.o(i.HAL_UART_TxCpltCallback)) -

                                                                                                    [Stack]

                                                                                                    • Max Depth = 52
                                                                                                    • Call Chain = HAL_UART_TxCpltCallback ⇒ HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig -
                                                                                                    -
                                                                                                    [Calls]
                                                                                                    • >>   HAL_UART_Receive_DMA -
                                                                                                    • >>   HAL_UART_DMAStop -
                                                                                                    • >>   Process_Reply -
                                                                                                    -
                                                                                                    [Called By]
                                                                                                    • >>   HAL_UART_IRQHandler +

                                                                                                      HAL_UART_TxCpltCallback (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback)) +

                                                                                                      [Called By]

                                                                                                      • >>   HAL_UART_IRQHandler

                                                                                                      HardFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.HardFault_Handler)) @@ -802,58 +721,47 @@ Global Symbols


                                                                                                    [Address Reference Count : 1]
                                                                                                    • startup_stm32f103xb.o(RESET)
                                                                                                    -

                                                                                                    MX_DMA_Init (Thumb, 40 bytes, Stack size 8 bytes, dma.o(i.MX_DMA_Init)) +

                                                                                                    MX_DMA_Init (Thumb, 40 bytes, Stack size 8 bytes, dma.o(i.MX_DMA_Init))

                                                                                                    [Stack]

                                                                                                    • Max Depth = 24
                                                                                                    • Call Chain = MX_DMA_Init ⇒ HAL_NVIC_SetPriority
                                                                                                    -
                                                                                                    [Calls]
                                                                                                    • >>   HAL_NVIC_SetPriority -
                                                                                                    • >>   HAL_NVIC_EnableIRQ +
                                                                                                      [Calls]
                                                                                                      • >>   HAL_NVIC_SetPriority +
                                                                                                      • >>   HAL_NVIC_EnableIRQ

                                                                                                      [Called By]
                                                                                                      • >>   main
                                                                                                      -

                                                                                                      MX_GPIO_Init (Thumb, 102 bytes, Stack size 32 bytes, gpio.o(i.MX_GPIO_Init)) +

                                                                                                      MX_GPIO_Init (Thumb, 102 bytes, Stack size 32 bytes, gpio.o(i.MX_GPIO_Init))

                                                                                                      [Stack]

                                                                                                      • Max Depth = 72
                                                                                                      • Call Chain = MX_GPIO_Init ⇒ HAL_GPIO_Init
                                                                                                      -
                                                                                                      [Calls]
                                                                                                      • >>   HAL_GPIO_WritePin -
                                                                                                      • >>   HAL_GPIO_Init +
                                                                                                        [Calls]
                                                                                                        • >>   HAL_GPIO_Init +
                                                                                                        • >>   HAL_GPIO_WritePin

                                                                                                        [Called By]
                                                                                                        • >>   main
                                                                                                        -

                                                                                                        MX_TIM3_Init (Thumb, 98 bytes, Stack size 32 bytes, tim.o(i.MX_TIM3_Init)) -

                                                                                                        [Stack]

                                                                                                        • Max Depth = 64
                                                                                                        • Call Chain = MX_TIM3_Init ⇒ HAL_TIM_Base_Init ⇒ HAL_TIM_Base_MspInit ⇒ HAL_NVIC_SetPriority -
                                                                                                        -
                                                                                                        [Calls]
                                                                                                        • >>   HAL_TIM_ConfigClockSource -
                                                                                                        • >>   HAL_TIM_Base_Init -
                                                                                                        • >>   HAL_TIMEx_MasterConfigSynchronization -
                                                                                                        • >>   Error_Handler -
                                                                                                        -
                                                                                                        [Called By]
                                                                                                        • >>   main -
                                                                                                        - -

                                                                                                        MX_USART1_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART1_UART_Init)) +

                                                                                                        MX_USART1_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART1_UART_Init))

                                                                                                        [Stack]

                                                                                                        • Max Depth = 104
                                                                                                        • Call Chain = MX_USART1_UART_Init ⇒ HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init
                                                                                                        -
                                                                                                        [Calls]
                                                                                                        • >>   HAL_UART_Init -
                                                                                                        • >>   Error_Handler +
                                                                                                          [Calls]
                                                                                                          • >>   HAL_UART_Init +
                                                                                                          • >>   Error_Handler

                                                                                                          [Called By]
                                                                                                          • >>   main
                                                                                                          -

                                                                                                          MX_USART2_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART2_UART_Init)) +

                                                                                                          MX_USART2_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART2_UART_Init))

                                                                                                          [Stack]

                                                                                                          • Max Depth = 104
                                                                                                          • Call Chain = MX_USART2_UART_Init ⇒ HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init
                                                                                                          -
                                                                                                          [Calls]
                                                                                                          • >>   HAL_UART_Init -
                                                                                                          • >>   Error_Handler +
                                                                                                            [Calls]
                                                                                                            • >>   HAL_UART_Init +
                                                                                                            • >>   Error_Handler

                                                                                                            [Called By]
                                                                                                            • >>   main
                                                                                                            -

                                                                                                            MX_USART3_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART3_UART_Init)) +

                                                                                                            MX_USART3_UART_Init (Thumb, 48 bytes, Stack size 8 bytes, usart.o(i.MX_USART3_UART_Init))

                                                                                                            [Stack]

                                                                                                            • Max Depth = 104
                                                                                                            • Call Chain = MX_USART3_UART_Init ⇒ HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init
                                                                                                            -
                                                                                                            [Calls]
                                                                                                            • >>   HAL_UART_Init -
                                                                                                            • >>   Error_Handler +
                                                                                                              [Calls]
                                                                                                              • >>   HAL_UART_Init +
                                                                                                              • >>   Error_Handler

                                                                                                              [Called By]
                                                                                                              • >>   main
                                                                                                              @@ -868,25 +776,17 @@ Global Symbols

                                                                                                              NMI_Handler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.NMI_Handler))

                                                                                                              [Stack]

                                                                                                              • Max Depth = 8
                                                                                                              • Call Chain = NMI_Handler ⇒ HAL_RCC_NMI_IRQHandler
                                                                                                              -
                                                                                                              [Calls]
                                                                                                              • >>   HAL_RCC_NMI_IRQHandler +
                                                                                                                [Calls]
                                                                                                                • >>   HAL_RCC_NMI_IRQHandler

                                                                                                                [Address Reference Count : 1]
                                                                                                                • startup_stm32f103xb.o(RESET)

                                                                                                                PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.PendSV_Handler))
                                                                                                                [Address Reference Count : 1]

                                                                                                                • startup_stm32f103xb.o(RESET)
                                                                                                                -

                                                                                                                Process_Reply (Thumb, 196 bytes, Stack size 40 bytes, main.o(i.Process_Reply)) -

                                                                                                                [Stack]

                                                                                                                • Max Depth = 40
                                                                                                                • Call Chain = Process_Reply -
                                                                                                                -
                                                                                                                [Calls]
                                                                                                                • >>   __aeabi_memclr -
                                                                                                                -
                                                                                                                [Called By]
                                                                                                                • >>   HAL_UART_TxCpltCallback -
                                                                                                                - -

                                                                                                                RS485_Output (Thumb, 100 bytes, Stack size 8 bytes, main.o(i.RS485_Output)) +

                                                                                                                RS485_Output (Thumb, 100 bytes, Stack size 8 bytes, main.o(i.RS485_Output))

                                                                                                                [Stack]

                                                                                                                • Max Depth = 72
                                                                                                                • Call Chain = RS485_Output ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
                                                                                                                -
                                                                                                                [Calls]
                                                                                                                • >>   HAL_UART_Transmit +
                                                                                                                  [Calls]
                                                                                                                  • >>   HAL_UART_Transmit

                                                                                                                  [Called By]
                                                                                                                  • >>   main
                                                                                                                  @@ -894,27 +794,73 @@ Global Symbols

                                                                                                                  SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.SVC_Handler))
                                                                                                                  [Address Reference Count : 1]

                                                                                                                  • startup_stm32f103xb.o(RESET)
                                                                                                                  -

                                                                                                                  Slave1_Sta_Query (Thumb, 40 bytes, Stack size 8 bytes, main.o(i.Slave1_Sta_Query)) +

                                                                                                                  Slave1_Matrix_Query (Thumb, 42 bytes, Stack size 8 bytes, main.o(i.Slave1_Matrix_Query)) +

                                                                                                                  [Stack]

                                                                                                                  • Max Depth = 72
                                                                                                                  • Call Chain = Slave1_Matrix_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout +
                                                                                                                  +
                                                                                                                  [Calls]
                                                                                                                  • >>   HAL_UART_Transmit +
                                                                                                                  • >>   Calculate_CRC16 +
                                                                                                                  +
                                                                                                                  [Called By]
                                                                                                                  • >>   main +
                                                                                                                  + +

                                                                                                                  Slave1_Sta_Query (Thumb, 40 bytes, Stack size 8 bytes, main.o(i.Slave1_Sta_Query))

                                                                                                                  [Stack]

                                                                                                                  • Max Depth = 72
                                                                                                                  • Call Chain = Slave1_Sta_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout
                                                                                                                  -
                                                                                                                  [Calls]
                                                                                                                  • >>   HAL_UART_Transmit -
                                                                                                                  • >>   Calculate_CRC16 +
                                                                                                                    [Calls]
                                                                                                                    • >>   HAL_UART_Transmit +
                                                                                                                    • >>   Calculate_CRC16 +
                                                                                                                    +
                                                                                                                    [Called By]
                                                                                                                    • >>   main +
                                                                                                                    + +

                                                                                                                    Slave2_Matrix_Query (Thumb, 40 bytes, Stack size 8 bytes, main.o(i.Slave2_Matrix_Query)) +

                                                                                                                    [Stack]

                                                                                                                    • Max Depth = 72
                                                                                                                    • Call Chain = Slave2_Matrix_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout +
                                                                                                                    +
                                                                                                                    [Calls]
                                                                                                                    • >>   HAL_UART_Transmit +
                                                                                                                    • >>   Calculate_CRC16 +
                                                                                                                    +
                                                                                                                    [Called By]
                                                                                                                    • >>   main +
                                                                                                                    + +

                                                                                                                    Slave2_Sta_Query (Thumb, 40 bytes, Stack size 8 bytes, main.o(i.Slave2_Sta_Query)) +

                                                                                                                    [Stack]

                                                                                                                    • Max Depth = 72
                                                                                                                    • Call Chain = Slave2_Sta_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout +
                                                                                                                    +
                                                                                                                    [Calls]
                                                                                                                    • >>   HAL_UART_Transmit +
                                                                                                                    • >>   Calculate_CRC16 +
                                                                                                                    +
                                                                                                                    [Called By]
                                                                                                                    • >>   main +
                                                                                                                    + +

                                                                                                                    Slave3_Matrix_Query (Thumb, 40 bytes, Stack size 8 bytes, main.o(i.Slave3_Matrix_Query)) +

                                                                                                                    [Stack]

                                                                                                                    • Max Depth = 72
                                                                                                                    • Call Chain = Slave3_Matrix_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout +
                                                                                                                    +
                                                                                                                    [Calls]
                                                                                                                    • >>   HAL_UART_Transmit +
                                                                                                                    • >>   Calculate_CRC16 +
                                                                                                                    +
                                                                                                                    [Called By]
                                                                                                                    • >>   main +
                                                                                                                    + +

                                                                                                                    Slave3_Sta_Query (Thumb, 52 bytes, Stack size 8 bytes, main.o(i.Slave3_Sta_Query)) +

                                                                                                                    [Stack]

                                                                                                                    • Max Depth = 72
                                                                                                                    • Call Chain = Slave3_Sta_Query ⇒ HAL_UART_Transmit ⇒ UART_WaitOnFlagUntilTimeout +
                                                                                                                    +
                                                                                                                    [Calls]
                                                                                                                    • >>   HAL_UART_Transmit +
                                                                                                                    • >>   HAL_GPIO_WritePin +
                                                                                                                    • >>   Calculate_CRC16

                                                                                                                    [Called By]
                                                                                                                    • >>   main

                                                                                                                    SysTick_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.SysTick_Handler)) -

                                                                                                                    [Calls]

                                                                                                                    • >>   HAL_IncTick +

                                                                                                                      [Calls]
                                                                                                                      • >>   HAL_IncTick

                                                                                                                      [Address Reference Count : 1]
                                                                                                                      • startup_stm32f103xb.o(RESET)
                                                                                                                      -

                                                                                                                      SystemClock_Config (Thumb, 96 bytes, Stack size 72 bytes, main.o(i.SystemClock_Config)) +

                                                                                                                      SystemClock_Config (Thumb, 96 bytes, Stack size 72 bytes, main.o(i.SystemClock_Config))

                                                                                                                      [Stack]

                                                                                                                      • Max Depth = 136
                                                                                                                      • Call Chain = SystemClock_Config ⇒ HAL_RCC_ClockConfig ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority
                                                                                                                      -
                                                                                                                      [Calls]
                                                                                                                      • >>   HAL_RCC_OscConfig -
                                                                                                                      • >>   HAL_RCC_EnableCSS -
                                                                                                                      • >>   HAL_RCC_ClockConfig -
                                                                                                                      • >>   __aeabi_memclr4 +
                                                                                                                        [Calls]
                                                                                                                        • >>   HAL_RCC_OscConfig +
                                                                                                                        • >>   HAL_RCC_EnableCSS +
                                                                                                                        • >>   HAL_RCC_ClockConfig +
                                                                                                                        • >>   __aeabi_memclr4

                                                                                                                        [Called By]
                                                                                                                        • >>   main
                                                                                                                        @@ -922,51 +868,18 @@ Global Symbols

                                                                                                                        SystemInit (Thumb, 2 bytes, Stack size 0 bytes, system_stm32f1xx.o(i.SystemInit))
                                                                                                                        [Address Reference Count : 1]

                                                                                                                        • startup_stm32f103xb.o(.text)
                                                                                                                        -

                                                                                                                        TIM3_IRQHandler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.TIM3_IRQHandler)) -

                                                                                                                        [Stack]

                                                                                                                        • Max Depth = 24
                                                                                                                        • Call Chain = TIM3_IRQHandler ⇒ HAL_TIM_IRQHandler -
                                                                                                                        -
                                                                                                                        [Calls]
                                                                                                                        • >>   HAL_TIM_IRQHandler -
                                                                                                                        -
                                                                                                                        [Address Reference Count : 1]
                                                                                                                        • startup_stm32f103xb.o(RESET) -
                                                                                                                        -

                                                                                                                        TIM_Base_SetConfig (Thumb, 108 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig)) -

                                                                                                                        [Stack]

                                                                                                                        • Max Depth = 20
                                                                                                                        • Call Chain = TIM_Base_SetConfig -
                                                                                                                        -
                                                                                                                        [Called By]
                                                                                                                        • >>   HAL_TIM_Base_Init -
                                                                                                                        - -

                                                                                                                        TIM_ETR_SetConfig (Thumb, 20 bytes, Stack size 8 bytes, stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig)) -

                                                                                                                        [Stack]

                                                                                                                        • Max Depth = 8
                                                                                                                        • Call Chain = TIM_ETR_SetConfig -
                                                                                                                        -
                                                                                                                        [Called By]
                                                                                                                        • >>   HAL_TIM_ConfigClockSource -
                                                                                                                        - -

                                                                                                                        UART_Start_Receive_DMA (Thumb, 130 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA)) +

                                                                                                                        UART_Start_Receive_DMA (Thumb, 130 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA))

                                                                                                                        [Stack]

                                                                                                                        • Max Depth = 44
                                                                                                                        • Call Chain = UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig

                                                                                                                        [Calls]
                                                                                                                        • >>   HAL_DMA_Start_IT
                                                                                                                        -
                                                                                                                        [Called By]
                                                                                                                        • >>   HAL_UART_Receive_DMA +
                                                                                                                          [Called By]
                                                                                                                          • >>   HAL_UART_Receive_DMA

                                                                                                                          USART1_IRQHandler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.USART1_IRQHandler)) -

                                                                                                                          [Stack]

                                                                                                                          • Max Depth = 76
                                                                                                                          • Call Chain = USART1_IRQHandler ⇒ HAL_UART_IRQHandler ⇒ HAL_UART_TxCpltCallback ⇒ HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig +

                                                                                                                            [Stack]
                                                                                                                            • Max Depth = 32
                                                                                                                            • Call Chain = USART1_IRQHandler ⇒ HAL_UART_IRQHandler ⇒ UART_Receive_IT
                                                                                                                            -
                                                                                                                            [Calls]
                                                                                                                            • >>   HAL_UART_IRQHandler -
                                                                                                                            -
                                                                                                                            [Address Reference Count : 1]
                                                                                                                            • startup_stm32f103xb.o(RESET) -
                                                                                                                            -

                                                                                                                            USART2_IRQHandler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.USART2_IRQHandler)) -

                                                                                                                            [Stack]

                                                                                                                            • Max Depth = 76
                                                                                                                            • Call Chain = USART2_IRQHandler ⇒ HAL_UART_IRQHandler ⇒ HAL_UART_TxCpltCallback ⇒ HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig -
                                                                                                                            -
                                                                                                                            [Calls]
                                                                                                                            • >>   HAL_UART_IRQHandler -
                                                                                                                            -
                                                                                                                            [Address Reference Count : 1]
                                                                                                                            • startup_stm32f103xb.o(RESET) -
                                                                                                                            -

                                                                                                                            USART3_IRQHandler (Thumb, 6 bytes, Stack size 0 bytes, stm32f1xx_it.o(i.USART3_IRQHandler)) -

                                                                                                                            [Stack]

                                                                                                                            • Max Depth = 76
                                                                                                                            • Call Chain = USART3_IRQHandler ⇒ HAL_UART_IRQHandler ⇒ HAL_UART_TxCpltCallback ⇒ HAL_UART_Receive_DMA ⇒ UART_Start_Receive_DMA ⇒ HAL_DMA_Start_IT ⇒ DMA_SetConfig -
                                                                                                                            -
                                                                                                                            [Calls]
                                                                                                                            • >>   HAL_UART_IRQHandler +
                                                                                                                              [Calls]
                                                                                                                              • >>   HAL_UART_IRQHandler

                                                                                                                              [Address Reference Count : 1]
                                                                                                                              • startup_stm32f103xb.o(RESET)
                                                                                                                              @@ -977,21 +890,26 @@ Global Symbols

                                                                                                                            [Address Reference Count : 1]
                                                                                                                            • startup_stm32f103xb.o(RESET)
                                                                                                                            -

                                                                                                                            main (Thumb, 244 bytes, Stack size 0 bytes, main.o(i.main)) +

                                                                                                                            main (Thumb, 144 bytes, Stack size 0 bytes, main.o(i.main))

                                                                                                                            [Stack]

                                                                                                                            • Max Depth = 136
                                                                                                                            • Call Chain = main ⇒ SystemClock_Config ⇒ HAL_RCC_ClockConfig ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority
                                                                                                                            -
                                                                                                                            [Calls]
                                                                                                                            • >>   MX_USART3_UART_Init -
                                                                                                                            • >>   MX_USART2_UART_Init -
                                                                                                                            • >>   MX_USART1_UART_Init -
                                                                                                                            • >>   MX_TIM3_Init -
                                                                                                                            • >>   MX_GPIO_Init -
                                                                                                                            • >>   MX_DMA_Init -
                                                                                                                            • >>   HAL_UART_Receive_DMA -
                                                                                                                            • >>   HAL_TIM_Base_Start_IT -
                                                                                                                            • >>   HAL_Init -
                                                                                                                            • >>   SystemClock_Config -
                                                                                                                            • >>   Slave1_Sta_Query -
                                                                                                                            • >>   RS485_Output +
                                                                                                                              [Calls]
                                                                                                                              • >>   MX_USART3_UART_Init +
                                                                                                                              • >>   MX_USART2_UART_Init +
                                                                                                                              • >>   MX_USART1_UART_Init +
                                                                                                                              • >>   MX_GPIO_Init +
                                                                                                                              • >>   MX_DMA_Init +
                                                                                                                              • >>   HAL_UART_Receive_DMA +
                                                                                                                              • >>   HAL_Init +
                                                                                                                              • >>   HAL_Delay +
                                                                                                                              • >>   SystemClock_Config +
                                                                                                                              • >>   Slave3_Sta_Query +
                                                                                                                              • >>   Slave3_Matrix_Query +
                                                                                                                              • >>   Slave2_Sta_Query +
                                                                                                                              • >>   Slave2_Matrix_Query +
                                                                                                                              • >>   Slave1_Sta_Query +
                                                                                                                              • >>   Slave1_Matrix_Query +
                                                                                                                              • >>   RS485_Output +
                                                                                                                              • >>   __aeabi_memclr

                                                                                                                              [Called By]
                                                                                                                              • >>   __rt_entry_main
                                                                                                                              @@ -999,20 +917,79 @@ Global Symbols

                                                                                                                              Local Symbols

                                                                                                                              -

                                                                                                                              TIM_ITRx_SetConfig (Thumb, 16 bytes, Stack size 0 bytes, stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig)) -

                                                                                                                              [Called By]

                                                                                                                              • >>   HAL_TIM_ConfigClockSource +

                                                                                                                                UART_DMAAbortOnError (Thumb, 16 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError)) +

                                                                                                                                [Stack]

                                                                                                                                • Max Depth = 8
                                                                                                                                • Call Chain = UART_DMAAbortOnError +
                                                                                                                                +
                                                                                                                                [Calls]
                                                                                                                                • >>   HAL_UART_ErrorCallback +
                                                                                                                                +
                                                                                                                                [Address Reference Count : 1]
                                                                                                                                • stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) +
                                                                                                                                +

                                                                                                                                UART_DMAError (Thumb, 74 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_DMAError)) +

                                                                                                                                [Stack]

                                                                                                                                • Max Depth = 16
                                                                                                                                • Call Chain = UART_DMAError +
                                                                                                                                +
                                                                                                                                [Calls]
                                                                                                                                • >>   UART_EndTxTransfer +
                                                                                                                                • >>   UART_EndRxTransfer +
                                                                                                                                • >>   HAL_UART_ErrorCallback +
                                                                                                                                +
                                                                                                                                [Address Reference Count : 1]
                                                                                                                                • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) +
                                                                                                                                +

                                                                                                                                UART_DMAReceiveCplt (Thumb, 134 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt)) +

                                                                                                                                [Stack]

                                                                                                                                • Max Depth = 8
                                                                                                                                • Call Chain = UART_DMAReceiveCplt +
                                                                                                                                +
                                                                                                                                [Calls]
                                                                                                                                • >>   HAL_UART_RxCpltCallback +
                                                                                                                                • >>   HAL_UARTEx_RxEventCallback +
                                                                                                                                +
                                                                                                                                [Address Reference Count : 1]
                                                                                                                                • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) +
                                                                                                                                +

                                                                                                                                UART_DMARxHalfCplt (Thumb, 30 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt)) +

                                                                                                                                [Stack]

                                                                                                                                • Max Depth = 8
                                                                                                                                • Call Chain = UART_DMARxHalfCplt +
                                                                                                                                +
                                                                                                                                [Calls]
                                                                                                                                • >>   HAL_UART_RxHalfCpltCallback +
                                                                                                                                • >>   HAL_UARTEx_RxEventCallback +
                                                                                                                                +
                                                                                                                                [Address Reference Count : 1]
                                                                                                                                • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) +
                                                                                                                                +

                                                                                                                                UART_EndRxTransfer (Thumb, 78 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.UART_EndRxTransfer)) +

                                                                                                                                [Calls]

                                                                                                                                • >>   UART_EndRxTransfer +
                                                                                                                                +
                                                                                                                                [Called By]
                                                                                                                                • >>   UART_WaitOnFlagUntilTimeout +
                                                                                                                                • >>   UART_EndRxTransfer +
                                                                                                                                • >>   UART_DMAError +
                                                                                                                                • >>   HAL_UART_IRQHandler
                                                                                                                                -

                                                                                                                                TIM_TI1_ConfigInputStage (Thumb, 34 bytes, Stack size 8 bytes, stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage)) -

                                                                                                                                [Stack]

                                                                                                                                • Max Depth = 8
                                                                                                                                • Call Chain = TIM_TI1_ConfigInputStage +

                                                                                                                                  UART_EndTxTransfer (Thumb, 28 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.UART_EndTxTransfer)) +

                                                                                                                                  [Calls]

                                                                                                                                  • >>   UART_EndTxTransfer
                                                                                                                                  -
                                                                                                                                  [Called By]
                                                                                                                                  • >>   HAL_TIM_ConfigClockSource +
                                                                                                                                    [Called By]
                                                                                                                                    • >>   UART_EndTxTransfer +
                                                                                                                                    • >>   UART_DMAError
                                                                                                                                    -

                                                                                                                                    TIM_TI2_ConfigInputStage (Thumb, 36 bytes, Stack size 8 bytes, stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage)) -

                                                                                                                                    [Stack]

                                                                                                                                    • Max Depth = 8
                                                                                                                                    • Call Chain = TIM_TI2_ConfigInputStage +

                                                                                                                                      UART_Receive_IT (Thumb, 194 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_Receive_IT)) +

                                                                                                                                      [Stack]

                                                                                                                                      • Max Depth = 8
                                                                                                                                      • Call Chain = UART_Receive_IT
                                                                                                                                      -
                                                                                                                                      [Called By]
                                                                                                                                      • >>   HAL_TIM_ConfigClockSource +
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_RxCpltCallback +
                                                                                                                                        • >>   HAL_UARTEx_RxEventCallback +
                                                                                                                                        +
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_IRQHandler +
                                                                                                                                        + +

                                                                                                                                        UART_SetConfig (Thumb, 178 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_SetConfig)) +

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 16
                                                                                                                                        • Call Chain = UART_SetConfig +
                                                                                                                                        +
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_RCC_GetPCLK2Freq +
                                                                                                                                        • >>   HAL_RCC_GetPCLK1Freq +
                                                                                                                                        +
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_Init +
                                                                                                                                        + +

                                                                                                                                        UART_WaitOnFlagUntilTimeout (Thumb, 114 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)) +

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 32
                                                                                                                                        • Call Chain = UART_WaitOnFlagUntilTimeout +
                                                                                                                                        +
                                                                                                                                        [Calls]
                                                                                                                                        • >>   UART_EndRxTransfer +
                                                                                                                                        • >>   HAL_GetTick +
                                                                                                                                        +
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_Transmit

                                                                                                                                        DMA_SetConfig (Thumb, 42 bytes, Stack size 12 bytes, stm32f1xx_hal_dma.o(i.DMA_SetConfig)) @@ -1021,86 +998,9 @@ Local Symbols
                                                                                                                                        [Called By]

                                                                                                                                        • >>   HAL_DMA_Start_IT
                                                                                                                                        -

                                                                                                                                        __NVIC_SetPriority (Thumb, 32 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority)) -

                                                                                                                                        [Called By]

                                                                                                                                        • >>   HAL_NVIC_SetPriority -
                                                                                                                                        • >>   HAL_SYSTICK_Config -
                                                                                                                                        - -

                                                                                                                                        UART_DMAAbortOnError (Thumb, 16 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 8
                                                                                                                                        • Call Chain = UART_DMAAbortOnError -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_ErrorCallback -
                                                                                                                                        -
                                                                                                                                        [Address Reference Count : 1]
                                                                                                                                        • stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) -
                                                                                                                                        -

                                                                                                                                        UART_DMAError (Thumb, 74 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_DMAError)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 16
                                                                                                                                        • Call Chain = UART_DMAError -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_ErrorCallback -
                                                                                                                                        • >>   UART_EndTxTransfer -
                                                                                                                                        • >>   UART_EndRxTransfer -
                                                                                                                                        -
                                                                                                                                        [Address Reference Count : 1]
                                                                                                                                        • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) -
                                                                                                                                        -

                                                                                                                                        UART_DMAReceiveCplt (Thumb, 134 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 8
                                                                                                                                        • Call Chain = UART_DMAReceiveCplt -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_RxCpltCallback -
                                                                                                                                        • >>   HAL_UARTEx_RxEventCallback -
                                                                                                                                        -
                                                                                                                                        [Address Reference Count : 1]
                                                                                                                                        • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) -
                                                                                                                                        -

                                                                                                                                        UART_DMARxHalfCplt (Thumb, 30 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 8
                                                                                                                                        • Call Chain = UART_DMARxHalfCplt -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_RxHalfCpltCallback -
                                                                                                                                        • >>   HAL_UARTEx_RxEventCallback -
                                                                                                                                        -
                                                                                                                                        [Address Reference Count : 1]
                                                                                                                                        • stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) -
                                                                                                                                        -

                                                                                                                                        UART_EndRxTransfer (Thumb, 78 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.UART_EndRxTransfer)) -

                                                                                                                                        [Calls]

                                                                                                                                        • >>   UART_EndRxTransfer -
                                                                                                                                        -
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_IRQHandler -
                                                                                                                                        • >>   HAL_UART_DMAStop -
                                                                                                                                        • >>   UART_WaitOnFlagUntilTimeout -
                                                                                                                                        • >>   UART_EndRxTransfer -
                                                                                                                                        • >>   UART_DMAError -
                                                                                                                                        - -

                                                                                                                                        UART_EndTxTransfer (Thumb, 28 bytes, Stack size 0 bytes, stm32f1xx_hal_uart.o(i.UART_EndTxTransfer)) -

                                                                                                                                        [Calls]

                                                                                                                                        • >>   UART_EndTxTransfer -
                                                                                                                                        -
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_DMAStop -
                                                                                                                                        • >>   UART_EndTxTransfer -
                                                                                                                                        • >>   UART_DMAError -
                                                                                                                                        - -

                                                                                                                                        UART_Receive_IT (Thumb, 194 bytes, Stack size 8 bytes, stm32f1xx_hal_uart.o(i.UART_Receive_IT)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 8
                                                                                                                                        • Call Chain = UART_Receive_IT -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_UART_RxCpltCallback -
                                                                                                                                        • >>   HAL_UARTEx_RxEventCallback -
                                                                                                                                        -
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_IRQHandler -
                                                                                                                                        - -

                                                                                                                                        UART_SetConfig (Thumb, 178 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(i.UART_SetConfig)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 16
                                                                                                                                        • Call Chain = UART_SetConfig -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_RCC_GetPCLK2Freq -
                                                                                                                                        • >>   HAL_RCC_GetPCLK1Freq -
                                                                                                                                        -
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_Init -
                                                                                                                                        - -

                                                                                                                                        UART_WaitOnFlagUntilTimeout (Thumb, 114 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout)) -

                                                                                                                                        [Stack]

                                                                                                                                        • Max Depth = 32
                                                                                                                                        • Call Chain = UART_WaitOnFlagUntilTimeout -
                                                                                                                                        -
                                                                                                                                        [Calls]
                                                                                                                                        • >>   HAL_GetTick -
                                                                                                                                        • >>   UART_EndRxTransfer -
                                                                                                                                        -
                                                                                                                                        [Called By]
                                                                                                                                        • >>   HAL_UART_Transmit +

                                                                                                                                          __NVIC_SetPriority (Thumb, 32 bytes, Stack size 0 bytes, stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority)) +

                                                                                                                                          [Called By]

                                                                                                                                          • >>   HAL_NVIC_SetPriority +
                                                                                                                                          • >>   HAL_SYSTICK_Config

                                                                                                                                          diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.lnp b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.lnp index 05a6735..c0c0c99 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.lnp +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.lnp @@ -3,13 +3,11 @@ "pressuresensorboardmaster\main.o" "pressuresensorboardmaster\gpio.o" "pressuresensorboardmaster\dma.o" -"pressuresensorboardmaster\tim.o" "pressuresensorboardmaster\usart.o" "pressuresensorboardmaster\stm32f1xx_it.o" "pressuresensorboardmaster\stm32f1xx_hal_msp.o" "pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o" -"pressuresensorboardmaster\stm32f1xx_hal_tim.o" -"pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o" +"pressuresensorboardmaster\stm32f1xx_hal_uart.o" "pressuresensorboardmaster\stm32f1xx_hal.o" "pressuresensorboardmaster\stm32f1xx_hal_rcc.o" "pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o" @@ -20,7 +18,6 @@ "pressuresensorboardmaster\stm32f1xx_hal_flash.o" "pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o" "pressuresensorboardmaster\stm32f1xx_hal_exti.o" -"pressuresensorboardmaster\stm32f1xx_hal_uart.o" "pressuresensorboardmaster\system_stm32f1xx.o" --strict --scatter "PressureSensorBoardMaster\PressureSensorBoardMaster.sct" --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.map b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.map index 5d2825c..e7a3f8f 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.map +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.map @@ -19,21 +19,19 @@ Section Cross References startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.PendSV_Handler) for PendSV_Handler startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.SysTick_Handler) for SysTick_Handler startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.DMA1_Channel5_IRQHandler) for DMA1_Channel5_IRQHandler - startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.TIM3_IRQHandler) for TIM3_IRQHandler startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.USART1_IRQHandler) for USART1_IRQHandler - startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.USART2_IRQHandler) for USART2_IRQHandler - startup_stm32f103xb.o(RESET) refers to stm32f1xx_it.o(i.USART3_IRQHandler) for USART3_IRQHandler startup_stm32f103xb.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory startup_stm32f103xb.o(.text) refers to system_stm32f1xx.o(i.SystemInit) for SystemInit startup_stm32f103xb.o(.text) refers to __main.o(!!!main) for __main startup_stm32f103xb.o(.text) refers to startup_stm32f103xb.o(HEAP) for Heap_Mem startup_stm32f103xb.o(.text) refers to startup_stm32f103xb.o(STACK) for Stack_Mem - main.o(i.HAL_TIM_PeriodElapsedCallback) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT - main.o(i.HAL_UART_TxCpltCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) for HAL_UART_DMAStop - main.o(i.HAL_UART_TxCpltCallback) refers to main.o(i.Process_Reply) for Process_Reply - main.o(i.HAL_UART_TxCpltCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) for HAL_UART_Receive_DMA - main.o(i.HAL_UART_TxCpltCallback) refers to usart.o(.bss) for huart1 - main.o(i.HAL_UART_TxCpltCallback) refers to main.o(.bss) for .bss + main.o(i.HAL_UART_IdleCallback) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin + main.o(i.HAL_UART_IdleCallback) refers to main.o(i.Process_Reply) for Process_Reply + main.o(i.HAL_UART_IdleCallback) refers to rt_memclr.o(.text) for __aeabi_memclr + main.o(i.HAL_UART_IdleCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) for HAL_UART_Receive_DMA + main.o(i.HAL_UART_IdleCallback) refers to usart.o(.bss) for huart1 + main.o(i.HAL_UART_IdleCallback) refers to main.o(.bss) for .bss + main.o(i.Process_Reply) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin main.o(i.Process_Reply) refers to rt_memclr.o(.text) for __aeabi_memclr main.o(i.Process_Reply) refers to main.o(.data) for .data main.o(i.Process_Reply) refers to main.o(.bss) for .bss @@ -61,6 +59,7 @@ Section Cross References main.o(i.Slave3_Matrix_Query) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) for HAL_UART_Transmit main.o(i.Slave3_Matrix_Query) refers to main.o(.bss) for .bss main.o(i.Slave3_Matrix_Query) refers to usart.o(.bss) for huart1 + main.o(i.Slave3_Sta_Query) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin main.o(i.Slave3_Sta_Query) refers to main.o(i.Calculate_CRC16) for Calculate_CRC16 main.o(i.Slave3_Sta_Query) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) for HAL_UART_Transmit main.o(i.Slave3_Sta_Query) refers to main.o(.bss) for .bss @@ -74,29 +73,25 @@ Section Cross References main.o(i.main) refers to gpio.o(i.MX_GPIO_Init) for MX_GPIO_Init main.o(i.main) refers to dma.o(i.MX_DMA_Init) for MX_DMA_Init main.o(i.main) refers to usart.o(i.MX_USART2_UART_Init) for MX_USART2_UART_Init - main.o(i.main) refers to tim.o(i.MX_TIM3_Init) for MX_TIM3_Init main.o(i.main) refers to usart.o(i.MX_USART1_UART_Init) for MX_USART1_UART_Init main.o(i.main) refers to usart.o(i.MX_USART3_UART_Init) for MX_USART3_UART_Init + main.o(i.main) refers to rt_memclr.o(.text) for __aeabi_memclr main.o(i.main) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) for HAL_UART_Receive_DMA main.o(i.main) refers to main.o(i.Slave1_Sta_Query) for Slave1_Sta_Query - main.o(i.main) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) for HAL_TIM_Base_Start_IT + main.o(i.main) refers to main.o(i.Slave1_Matrix_Query) for Slave1_Matrix_Query + main.o(i.main) refers to main.o(i.Slave2_Sta_Query) for Slave2_Sta_Query + main.o(i.main) refers to main.o(i.Slave2_Matrix_Query) for Slave2_Matrix_Query + main.o(i.main) refers to main.o(i.Slave3_Sta_Query) for Slave3_Sta_Query + main.o(i.main) refers to main.o(i.Slave3_Matrix_Query) for Slave3_Matrix_Query main.o(i.main) refers to main.o(i.RS485_Output) for RS485_Output - main.o(i.main) refers to main.o(.data) for .data + main.o(i.main) refers to stm32f1xx_hal.o(i.HAL_Delay) for HAL_Delay main.o(i.main) refers to main.o(.bss) for .bss main.o(i.main) refers to usart.o(.bss) for huart1 - main.o(i.main) refers to tim.o(.bss) for htim3 + main.o(i.main) refers to main.o(.data) for .data gpio.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin gpio.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init dma.o(i.MX_DMA_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority dma.o(i.MX_DMA_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ - tim.o(i.HAL_TIM_Base_MspDeInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_DisableIRQ) for HAL_NVIC_DisableIRQ - tim.o(i.HAL_TIM_Base_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority - tim.o(i.HAL_TIM_Base_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ - tim.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) for HAL_TIM_Base_Init - tim.o(i.MX_TIM3_Init) refers to main.o(i.Error_Handler) for Error_Handler - tim.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource - tim.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization - tim.o(i.MX_TIM3_Init) refers to tim.o(.bss) for .bss usart.o(i.HAL_UART_MspDeInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_DeInit) for HAL_GPIO_DeInit usart.o(i.HAL_UART_MspDeInit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_DeInit) for HAL_DMA_DeInit usart.o(i.HAL_UART_MspDeInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_DisableIRQ) for HAL_NVIC_DisableIRQ @@ -119,202 +114,81 @@ Section Cross References stm32f1xx_it.o(i.DMA1_Channel5_IRQHandler) refers to usart.o(.bss) for hdma_usart1_rx stm32f1xx_it.o(i.NMI_Handler) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) for HAL_RCC_NMI_IRQHandler stm32f1xx_it.o(i.SysTick_Handler) refers to stm32f1xx_hal.o(i.HAL_IncTick) for HAL_IncTick - stm32f1xx_it.o(i.TIM3_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) for HAL_TIM_IRQHandler - stm32f1xx_it.o(i.TIM3_IRQHandler) refers to tim.o(.bss) for htim3 stm32f1xx_it.o(i.USART1_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) for HAL_UART_IRQHandler stm32f1xx_it.o(i.USART1_IRQHandler) refers to usart.o(.bss) for huart1 - stm32f1xx_it.o(i.USART2_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) for HAL_UART_IRQHandler - stm32f1xx_it.o(i.USART2_IRQHandler) refers to usart.o(.bss) for huart2 - stm32f1xx_it.o(i.USART3_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) for HAL_UART_IRQHandler - stm32f1xx_it.o(i.USART3_IRQHandler) refers to usart.o(.bss) for huart3 - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_DeInit) refers to tim.o(i.HAL_TIM_Base_MspDeInit) for HAL_TIM_Base_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) refers to tim.o(i.HAL_TIM_Base_MspInit) for HAL_TIM_Base_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) for TIM_TI1_ConfigInputStage - stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) for TIM_TI2_ConfigInputStage - stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) for TIM_ITRx_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigOCrefClear) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) for TIM_DMATriggerCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) for TIM_DMATriggerHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) for TIM_DMATriggerCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) for TIM_DMATriggerHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStart) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) for HAL_TIM_DMABurst_MultiReadStart - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStart) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) for HAL_TIM_DMABurst_MultiWriteStart - stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspDeInit) for HAL_TIM_Encoder_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspInit) for HAL_TIM_Encoder_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig) for TIM_TI2_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspDeInit) for HAL_TIM_IC_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspInit) for HAL_TIM_IC_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) for HAL_TIM_IC_CaptureCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) for HAL_TIM_OC_DelayElapsedCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to main.o(i.HAL_TIM_PeriodElapsedCallback) for HAL_TIM_PeriodElapsedCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) for HAL_TIMEx_BreakCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) for HAL_TIM_TriggerCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) for HAL_TIMEx_CommutCallback - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) for TIM_OC3_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) for TIM_OC4_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspDeInit) for HAL_TIM_OC_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspInit) for HAL_TIM_OC_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig) for TIM_TI2_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspDeInit) for HAL_TIM_OnePulse_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspInit) for HAL_TIM_OnePulse_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) for TIM_OC3_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) for TIM_OC4_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspDeInit) for HAL_TIM_PWM_MspDeInit - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspInit) for HAL_TIM_PWM_MspInit - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro) refers to stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) for TIM_SlaveTimer_SetConfig - stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro_IT) refers to stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) for TIM_SlaveTimer_SetConfig - stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) for HAL_TIM_IC_CaptureCallback - stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureHalfCpltCallback) for HAL_TIM_IC_CaptureHalfCpltCallback - stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback - stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedHalfCpltCallback) for HAL_TIM_PWM_PulseFinishedHalfCpltCallback - stm32f1xx_hal_tim.o(i.TIM_DMAError) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback) for HAL_TIM_ErrorCallback - stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) refers to main.o(i.HAL_TIM_PeriodElapsedCallback) for HAL_TIM_PeriodElapsedCallback - stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedHalfCpltCallback) for HAL_TIM_PeriodElapsedHalfCpltCallback - stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) for HAL_TIM_TriggerCallback - stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerHalfCpltCallback) for HAL_TIM_TriggerHalfCpltCallback - stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig - stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) for TIM_TI1_ConfigInputStage - stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) for TIM_TI2_ConfigInputStage - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_DeInit) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspDeInit) for HAL_TIMEx_HallSensor_MspDeInit - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspInit) for HAL_TIMEx_HallSensor_MspInit - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) for TIM_DMADelayPulseNCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) for TIM_DMAErrorCCxN - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) for TIM_DMADelayPulseNCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) for TIM_DMAErrorCCxN - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd - stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) for HAL_TIMEx_CommutCallback - stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutHalfCpltCallback) for HAL_TIMEx_CommutHalfCpltCallback - stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback - stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback) for HAL_TIM_ErrorCallback + stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) for UART_DMARxOnlyAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) for UART_DMATxOnlyAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) for UART_DMATxAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) for UART_DMARxAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_DeInit) refers to usart.o(i.HAL_UART_MspDeInit) for HAL_UART_MspDeInit + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_Receive_IT) for UART_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) for UART_DMAAbortOnError + stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) for UART_DMATransmitCplt + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) for UART_DMATxHalfCplt + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) for HAL_UART_RxHalfCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback) for HAL_UART_TxHalfCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq + stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) for HAL_RCC_GetPCLK1Freq + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) for UART_DMAReceiveCplt + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) for UART_DMARxHalfCplt + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer stm32f1xx_hal.o(i.HAL_DeInit) refers to stm32f1xx_hal.o(i.HAL_MspDeInit) for HAL_MspDeInit stm32f1xx_hal.o(i.HAL_Delay) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick stm32f1xx_hal.o(i.HAL_Delay) refers to stm32f1xx_hal.o(.data) for .data @@ -408,79 +282,6 @@ Section Cross References stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig) for FLASH_OB_RDP_LevelConfig stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash.o(.bss) for pFlash - stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit - stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig - stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit - stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig - stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit - stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig - stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick - stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA - stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT - stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort - stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError - stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort - stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError - stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback - stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) for UART_DMARxOnlyAbortCallback - stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort - stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError - stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback - stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) for UART_DMATxOnlyAbortCallback - stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback - stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) for UART_DMATxAbortCallback - stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) for UART_DMARxAbortCallback - stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort - stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer - stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer - stm32f1xx_hal_uart.o(i.HAL_UART_DeInit) refers to usart.o(i.HAL_UART_MspDeInit) for HAL_UART_MspDeInit - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_Receive_IT) for UART_Receive_IT - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to main.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback - stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) for UART_DMAAbortOnError - stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to usart.o(i.HAL_UART_MspInit) for HAL_UART_MspInit - stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig - stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick - stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout - stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA - stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) for UART_DMATransmitCplt - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) for UART_DMATxHalfCplt - stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError - stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback - stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer - stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer - stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback - stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback - stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) for HAL_UART_RxHalfCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback - stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) refers to main.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback) for HAL_UART_TxHalfCpltCallback - stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback - stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback - stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback - stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq - stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) for HAL_RCC_GetPCLK1Freq - stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT - stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) for UART_DMAReceiveCplt - stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) for UART_DMARxHalfCplt - stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError - stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick - stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer system_stm32f1xx.o(i.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.data) for .data system_stm32f1xx.o(i.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.constdata) for .constdata rt_memclr.o(.text) refers to rt_memclr_w.o(.text) for _memset_w @@ -592,11 +393,8 @@ Removing Unused input sections from the image. Removing main.o(.rev16_text), (4 bytes). Removing main.o(.revsh_text), (4 bytes). Removing main.o(.rrx_text), (6 bytes). - Removing main.o(i.Slave1_Matrix_Query), (52 bytes). - Removing main.o(i.Slave2_Matrix_Query), (48 bytes). - Removing main.o(i.Slave2_Sta_Query), (48 bytes). - Removing main.o(i.Slave3_Matrix_Query), (48 bytes). - Removing main.o(i.Slave3_Sta_Query), (52 bytes). + Removing main.o(i.HAL_UART_IdleCallback), (104 bytes). + Removing main.o(i.Process_Reply), (220 bytes). Removing main.o(.data), (2 bytes). Removing gpio.o(.rev16_text), (4 bytes). Removing gpio.o(.revsh_text), (4 bytes). @@ -604,14 +402,10 @@ Removing Unused input sections from the image. Removing dma.o(.rev16_text), (4 bytes). Removing dma.o(.revsh_text), (4 bytes). Removing dma.o(.rrx_text), (6 bytes). - Removing tim.o(.rev16_text), (4 bytes). - Removing tim.o(.revsh_text), (4 bytes). - Removing tim.o(.rrx_text), (6 bytes). - Removing tim.o(i.HAL_TIM_Base_MspDeInit), (36 bytes). Removing usart.o(.rev16_text), (4 bytes). Removing usart.o(.revsh_text), (4 bytes). Removing usart.o(.rrx_text), (6 bytes). - Removing usart.o(i.HAL_UART_MspDeInit), (132 bytes). + Removing usart.o(i.HAL_UART_MspDeInit), (124 bytes). Removing stm32f1xx_it.o(.rev16_text), (4 bytes). Removing stm32f1xx_it.o(.revsh_text), (4 bytes). Removing stm32f1xx_it.o(.rrx_text), (6 bytes). @@ -624,154 +418,50 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_ConfigEventout), (20 bytes). Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_DisableEventout), (16 bytes). Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_EnableEventout), (16 bytes). - Removing stm32f1xx_hal_tim.o(.rev16_text), (4 bytes). - Removing stm32f1xx_hal_tim.o(.revsh_text), (4 bytes). - Removing stm32f1xx_hal_tim.o(.rrx_text), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_DeInit), (92 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start), (80 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA), (152 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop), (38 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_DMA), (58 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigOCrefClear), (216 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigTI1Input), (16 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurstState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart), (332 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart), (332 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStart), (18 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStop), (106 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStart), (18 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStop), (106 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_DeInit), (76 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init), (164 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start), (142 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA), (428 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_IT), (182 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop), (102 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA), (172 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_IT), (144 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GenerateEvent), (38 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GetActiveChannel), (4 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GetChannelState), (34 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel), (292 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_DeInit), (92 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init), (90 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start), (184 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA), (416 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_IT), (228 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop), (82 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA), (160 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_IT), (146 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel), (82 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DeInit), (92 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init), (90 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start), (156 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA), (404 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_IT), (200 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop), (112 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA), (196 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_IT), (176 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel), (230 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_DeInit), (76 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init), (86 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start), (104 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start_IT), (124 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop), (100 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop_IT), (120 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel), (204 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_DeInit), (92 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_GetState), (6 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init), (90 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start), (156 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA), (404 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_IT), (200 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop), (112 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA), (196 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_IT), (176 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ReadCapturedValue), (42 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro), (86 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro_IT), (86 bytes). - Removing stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd), (26 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt), (110 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt), (56 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt), (94 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt), (56 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMAError), (84 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt), (22 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt), (10 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt), (22 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt), (10 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig), (80 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig), (88 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig), (88 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig), (68 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig), (140 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig), (88 bytes). - Removing stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig), (54 bytes). - Removing stm32f1xx_hal_tim_ex.o(.rev16_text), (4 bytes). - Removing stm32f1xx_hal_tim_ex.o(.revsh_text), (4 bytes). - Removing stm32f1xx_hal_tim_ex.o(.rrx_text), (6 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigBreakDeadTime), (84 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent), (112 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA), (144 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_IT), (112 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_GetChannelNState), (34 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_DeInit), (76 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_GetState), (6 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init), (208 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspInit), (2 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start), (128 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA), (184 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_IT), (140 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop), (58 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA), (70 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_IT), (68 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start), (152 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA), (352 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_IT), (192 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop), (104 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA), (168 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_IT), (170 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start), (100 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT), (120 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop), (98 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT), (120 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start), (152 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA), (352 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_IT), (192 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop), (104 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA), (168 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_IT), (170 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_RemapConfig), (4 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt), (16 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt), (16 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd), (26 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt), (74 bytes). - Removing stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN), (62 bytes). + Removing stm32f1xx_hal_uart.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_uart.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_uart.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableReceiver), (50 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableTransmitter), (50 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init), (110 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_LIN_Init), (130 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_LIN_SendBreak), (60 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_EnterMuteMode), (62 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_ExitMuteMode), (62 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init), (144 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_GetRxEventType), (4 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle), (240 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA), (74 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT), (78 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort), (210 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive), (148 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT), (152 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit), (98 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT), (104 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT), (244 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAPause), (120 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAResume), (114 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop), (112 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DeInit), (54 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetError), (4 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetState), (10 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspInit), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive), (176 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT), (28 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA), (120 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_IT), (50 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback), (44 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback), (22 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt), (66 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback), (44 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt), (10 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback), (20 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT), (54 bytes). Removing stm32f1xx_hal.o(.rev16_text), (4 bytes). Removing stm32f1xx_hal.o(.revsh_text), (4 bytes). Removing stm32f1xx_hal.o(.rrx_text), (6 bytes). @@ -782,7 +472,6 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal.o(i.HAL_DBGMCU_EnableDBGStandbyMode), (16 bytes). Removing stm32f1xx_hal.o(i.HAL_DBGMCU_EnableDBGStopMode), (16 bytes). Removing stm32f1xx_hal.o(i.HAL_DeInit), (32 bytes). - Removing stm32f1xx_hal.o(i.HAL_Delay), (36 bytes). Removing stm32f1xx_hal.o(i.HAL_GetDEVID), (16 bytes). Removing stm32f1xx_hal.o(i.HAL_GetHalVersion), (8 bytes). Removing stm32f1xx_hal.o(i.HAL_GetREVID), (12 bytes). @@ -911,56 +600,12 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_IRQHandler), (36 bytes). Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_RegisterCallback), (14 bytes). Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_SetConfigLine), (164 bytes). - Removing stm32f1xx_hal_uart.o(.rev16_text), (4 bytes). - Removing stm32f1xx_hal_uart.o(.revsh_text), (4 bytes). - Removing stm32f1xx_hal_uart.o(.rrx_text), (6 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableReceiver), (50 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableTransmitter), (50 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init), (110 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_LIN_Init), (130 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_LIN_SendBreak), (60 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_EnterMuteMode), (62 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_ExitMuteMode), (62 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init), (144 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_GetRxEventType), (4 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle), (240 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA), (74 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT), (78 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort), (210 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive), (148 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT), (152 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit), (98 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT), (104 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT), (244 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAPause), (120 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAResume), (114 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_DeInit), (54 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetError), (4 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetState), (10 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspDeInit), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspInit), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive), (176 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT), (28 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA), (120 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_IT), (50 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback), (2 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback), (44 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback), (22 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt), (66 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback), (44 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt), (10 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback), (20 bytes). - Removing stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT), (54 bytes). Removing system_stm32f1xx.o(.rev16_text), (4 bytes). Removing system_stm32f1xx.o(.revsh_text), (4 bytes). Removing system_stm32f1xx.o(.rrx_text), (6 bytes). Removing system_stm32f1xx.o(i.SystemCoreClockUpdate), (104 bytes). -370 unused section(s) (total 24178 bytes) removed from the image. +214 unused section(s) (total 9794 bytes) removed from the image. ============================================================================== @@ -976,7 +621,6 @@ Image Symbol Table ../Core/Src/stm32f1xx_hal_msp.c 0x00000000 Number 0 stm32f1xx_hal_msp.o ABSOLUTE ../Core/Src/stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE ../Core/Src/system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE - ../Core/Src/tim.c 0x00000000 Number 0 tim.o ABSOLUTE ../Core/Src/usart.c 0x00000000 Number 0 usart.o ABSOLUTE ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE @@ -989,57 +633,55 @@ Image Symbol Table ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c 0x00000000 Number 0 stm32f1xx_hal_pwr.o ABSOLUTE ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c 0x00000000 Number 0 stm32f1xx_hal_rcc.o ABSOLUTE ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_copy.o ABSOLUTE ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE - ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE - ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE ../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE - ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE ../clib/longlong.s 0x00000000 Number 0 llushr.o ABSOLUTE ../clib/memcpset.s 0x00000000 Number 0 rt_memclr.o ABSOLUTE ../clib/memcpset.s 0x00000000 Number 0 rt_memclr_w.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE @@ -1049,7 +691,6 @@ Image Symbol Table ..\Core\Src\stm32f1xx_hal_msp.c 0x00000000 Number 0 stm32f1xx_hal_msp.o ABSOLUTE ..\Core\Src\stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE ..\Core\Src\system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE - ..\Core\Src\tim.c 0x00000000 Number 0 tim.o ABSOLUTE ..\Core\Src\usart.c 0x00000000 Number 0 usart.o ABSOLUTE ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE @@ -1062,8 +703,6 @@ Image Symbol Table ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c 0x00000000 Number 0 stm32f1xx_hal_pwr.o ABSOLUTE ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c 0x00000000 Number 0 stm32f1xx_hal_rcc.o ABSOLUTE ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE - ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE - ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE dc.s 0x00000000 Number 0 dc.o ABSOLUTE startup_stm32f103xb.s 0x00000000 Number 0 startup_stm32f103xb.o ABSOLUTE @@ -1136,119 +775,96 @@ Image Symbol Table i.HAL_DMA_IRQHandler 0x08000424 Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler) i.HAL_DMA_Init 0x08000578 Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_Init) i.HAL_DMA_Start_IT 0x080005d4 Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) - i.HAL_GPIO_Init 0x08000644 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) - i.HAL_GPIO_WritePin 0x08000824 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) - i.HAL_GetTick 0x08000830 Section 0 stm32f1xx_hal.o(i.HAL_GetTick) - i.HAL_IncTick 0x0800083c Section 0 stm32f1xx_hal.o(i.HAL_IncTick) - i.HAL_Init 0x0800084c Section 0 stm32f1xx_hal.o(i.HAL_Init) - i.HAL_InitTick 0x08000870 Section 0 stm32f1xx_hal.o(i.HAL_InitTick) - i.HAL_MspInit 0x080008b0 Section 0 stm32f1xx_hal_msp.o(i.HAL_MspInit) - i.HAL_NVIC_EnableIRQ 0x080008ec Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) - i.HAL_NVIC_SetPriority 0x08000908 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) - i.HAL_NVIC_SetPriorityGrouping 0x08000948 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) - i.HAL_RCC_CSSCallback 0x0800096c Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback) - i.HAL_RCC_ClockConfig 0x08000970 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) - i.HAL_RCC_EnableCSS 0x08000a9c Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS) - i.HAL_RCC_GetPCLK1Freq 0x08000aa8 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) - i.HAL_RCC_GetPCLK2Freq 0x08000ac8 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) - i.HAL_RCC_GetSysClockFreq 0x08000ae8 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) - i.HAL_RCC_NMI_IRQHandler 0x08000b34 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) - i.HAL_RCC_OscConfig 0x08000b4c Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) - i.HAL_SYSTICK_Config 0x08000e6c Section 0 stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) - i.HAL_TIMEx_BreakCallback 0x08000e94 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) - i.HAL_TIMEx_CommutCallback 0x08000e96 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) - i.HAL_TIMEx_MasterConfigSynchronization 0x08000e98 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) - i.HAL_TIM_Base_Init 0x08000f00 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) - i.HAL_TIM_Base_MspInit 0x08000f5c Section 0 tim.o(i.HAL_TIM_Base_MspInit) - i.HAL_TIM_Base_Start_IT 0x08000f98 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) - i.HAL_TIM_Base_Stop_IT 0x08000ff0 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_IT) - i.HAL_TIM_ConfigClockSource 0x08001020 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) - i.HAL_TIM_IC_CaptureCallback 0x080010fc Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) - i.HAL_TIM_IRQHandler 0x080010fe Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) - i.HAL_TIM_OC_DelayElapsedCallback 0x0800122e Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) - i.HAL_TIM_PWM_PulseFinishedCallback 0x08001230 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) - i.HAL_TIM_PeriodElapsedCallback 0x08001234 Section 0 main.o(i.HAL_TIM_PeriodElapsedCallback) - i.HAL_TIM_TriggerCallback 0x0800124c Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) - i.HAL_UARTEx_RxEventCallback 0x0800124e Section 0 stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) - i.HAL_UART_DMAStop 0x08001250 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) - i.HAL_UART_ErrorCallback 0x080012c0 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) - i.HAL_UART_IRQHandler 0x080012c4 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) - i.HAL_UART_Init 0x08001530 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Init) - i.HAL_UART_MspInit 0x08001594 Section 0 usart.o(i.HAL_UART_MspInit) - i.HAL_UART_Receive_DMA 0x080016fc Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) - i.HAL_UART_RxCpltCallback 0x08001718 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) - i.HAL_UART_RxHalfCpltCallback 0x0800171a Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) - i.HAL_UART_Transmit 0x0800171c Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) - i.HAL_UART_TxCpltCallback 0x080017bc Section 0 main.o(i.HAL_UART_TxCpltCallback) - i.HardFault_Handler 0x080017fc Section 0 stm32f1xx_it.o(i.HardFault_Handler) - i.MX_DMA_Init 0x08001800 Section 0 dma.o(i.MX_DMA_Init) - i.MX_GPIO_Init 0x0800182c Section 0 gpio.o(i.MX_GPIO_Init) - i.MX_TIM3_Init 0x0800189c Section 0 tim.o(i.MX_TIM3_Init) - i.MX_USART1_UART_Init 0x08001908 Section 0 usart.o(i.MX_USART1_UART_Init) - i.MX_USART2_UART_Init 0x08001940 Section 0 usart.o(i.MX_USART2_UART_Init) - i.MX_USART3_UART_Init 0x08001978 Section 0 usart.o(i.MX_USART3_UART_Init) - i.MemManage_Handler 0x080019b0 Section 0 stm32f1xx_it.o(i.MemManage_Handler) - i.NMI_Handler 0x080019b2 Section 0 stm32f1xx_it.o(i.NMI_Handler) - i.PendSV_Handler 0x080019b8 Section 0 stm32f1xx_it.o(i.PendSV_Handler) - i.Process_Reply 0x080019bc Section 0 main.o(i.Process_Reply) - i.RS485_Output 0x08001a88 Section 0 main.o(i.RS485_Output) - i.SVC_Handler 0x08001af8 Section 0 stm32f1xx_it.o(i.SVC_Handler) - i.Slave1_Sta_Query 0x08001afc Section 0 main.o(i.Slave1_Sta_Query) - i.SysTick_Handler 0x08001b2c Section 0 stm32f1xx_it.o(i.SysTick_Handler) - i.SystemClock_Config 0x08001b30 Section 0 main.o(i.SystemClock_Config) - i.SystemInit 0x08001b90 Section 0 system_stm32f1xx.o(i.SystemInit) - i.TIM3_IRQHandler 0x08001b94 Section 0 stm32f1xx_it.o(i.TIM3_IRQHandler) - i.TIM_Base_SetConfig 0x08001ba0 Section 0 stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) - i.TIM_ETR_SetConfig 0x08001c18 Section 0 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) - i.TIM_ITRx_SetConfig 0x08001c2c Section 0 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) - TIM_ITRx_SetConfig 0x08001c2d Thumb Code 16 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) - i.TIM_TI1_ConfigInputStage 0x08001c3c Section 0 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) - TIM_TI1_ConfigInputStage 0x08001c3d Thumb Code 34 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) - i.TIM_TI2_ConfigInputStage 0x08001c5e Section 0 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) - TIM_TI2_ConfigInputStage 0x08001c5f Thumb Code 36 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) - i.UART_DMAAbortOnError 0x08001c82 Section 0 stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) - UART_DMAAbortOnError 0x08001c83 Thumb Code 16 stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) - i.UART_DMAError 0x08001c92 Section 0 stm32f1xx_hal_uart.o(i.UART_DMAError) - UART_DMAError 0x08001c93 Thumb Code 74 stm32f1xx_hal_uart.o(i.UART_DMAError) - i.UART_DMAReceiveCplt 0x08001cdc Section 0 stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) - UART_DMAReceiveCplt 0x08001cdd Thumb Code 134 stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) - i.UART_DMARxHalfCplt 0x08001d62 Section 0 stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) - UART_DMARxHalfCplt 0x08001d63 Thumb Code 30 stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) - i.UART_EndRxTransfer 0x08001d80 Section 0 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) - UART_EndRxTransfer 0x08001d81 Thumb Code 78 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) - i.UART_EndTxTransfer 0x08001dce Section 0 stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) - UART_EndTxTransfer 0x08001dcf Thumb Code 28 stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) - i.UART_Receive_IT 0x08001dea Section 0 stm32f1xx_hal_uart.o(i.UART_Receive_IT) - UART_Receive_IT 0x08001deb Thumb Code 194 stm32f1xx_hal_uart.o(i.UART_Receive_IT) - i.UART_SetConfig 0x08001eac Section 0 stm32f1xx_hal_uart.o(i.UART_SetConfig) - UART_SetConfig 0x08001ead Thumb Code 178 stm32f1xx_hal_uart.o(i.UART_SetConfig) - i.UART_Start_Receive_DMA 0x08001f64 Section 0 stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) - i.UART_WaitOnFlagUntilTimeout 0x08001ff4 Section 0 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) - UART_WaitOnFlagUntilTimeout 0x08001ff5 Thumb Code 114 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) - i.USART1_IRQHandler 0x08002068 Section 0 stm32f1xx_it.o(i.USART1_IRQHandler) - i.USART2_IRQHandler 0x08002074 Section 0 stm32f1xx_it.o(i.USART2_IRQHandler) - i.USART3_IRQHandler 0x08002080 Section 0 stm32f1xx_it.o(i.USART3_IRQHandler) - i.UsageFault_Handler 0x0800208c Section 0 stm32f1xx_it.o(i.UsageFault_Handler) - i.__NVIC_SetPriority 0x0800208e Section 0 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) - __NVIC_SetPriority 0x0800208f Thumb Code 32 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) - i.main 0x080020b0 Section 0 main.o(i.main) - .constdata 0x080021b4 Section 18 stm32f1xx_hal_rcc.o(.constdata) - aPredivFactorTable 0x080021b4 Data 2 stm32f1xx_hal_rcc.o(.constdata) - aPLLMULFactorTable 0x080021b6 Data 16 stm32f1xx_hal_rcc.o(.constdata) - .constdata 0x080021c6 Section 16 system_stm32f1xx.o(.constdata) - .constdata 0x080021d6 Section 8 system_stm32f1xx.o(.constdata) + i.HAL_Delay 0x08000644 Section 0 stm32f1xx_hal.o(i.HAL_Delay) + i.HAL_GPIO_Init 0x08000668 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) + i.HAL_GPIO_WritePin 0x08000848 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) + i.HAL_GetTick 0x08000854 Section 0 stm32f1xx_hal.o(i.HAL_GetTick) + i.HAL_IncTick 0x08000860 Section 0 stm32f1xx_hal.o(i.HAL_IncTick) + i.HAL_Init 0x08000870 Section 0 stm32f1xx_hal.o(i.HAL_Init) + i.HAL_InitTick 0x08000894 Section 0 stm32f1xx_hal.o(i.HAL_InitTick) + i.HAL_MspInit 0x080008d4 Section 0 stm32f1xx_hal_msp.o(i.HAL_MspInit) + i.HAL_NVIC_EnableIRQ 0x08000910 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) + i.HAL_NVIC_SetPriority 0x0800092c Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) + i.HAL_NVIC_SetPriorityGrouping 0x0800096c Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) + i.HAL_RCC_CSSCallback 0x08000990 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback) + i.HAL_RCC_ClockConfig 0x08000994 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) + i.HAL_RCC_EnableCSS 0x08000ac0 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS) + i.HAL_RCC_GetPCLK1Freq 0x08000acc Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) + i.HAL_RCC_GetPCLK2Freq 0x08000aec Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) + i.HAL_RCC_GetSysClockFreq 0x08000b0c Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) + i.HAL_RCC_NMI_IRQHandler 0x08000b58 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) + i.HAL_RCC_OscConfig 0x08000b70 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) + i.HAL_SYSTICK_Config 0x08000e90 Section 0 stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) + i.HAL_UARTEx_RxEventCallback 0x08000eb8 Section 0 stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) + i.HAL_UART_ErrorCallback 0x08000eba Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) + i.HAL_UART_IRQHandler 0x08000ebc Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) + i.HAL_UART_Init 0x08001128 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Init) + i.HAL_UART_MspInit 0x0800118c Section 0 usart.o(i.HAL_UART_MspInit) + i.HAL_UART_Receive_DMA 0x080012dc Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) + i.HAL_UART_RxCpltCallback 0x080012f8 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) + i.HAL_UART_RxHalfCpltCallback 0x080012fa Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) + i.HAL_UART_Transmit 0x080012fc Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) + i.HAL_UART_TxCpltCallback 0x0800139c Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) + i.HardFault_Handler 0x0800139e Section 0 stm32f1xx_it.o(i.HardFault_Handler) + i.MX_DMA_Init 0x080013a0 Section 0 dma.o(i.MX_DMA_Init) + i.MX_GPIO_Init 0x080013cc Section 0 gpio.o(i.MX_GPIO_Init) + i.MX_USART1_UART_Init 0x0800143c Section 0 usart.o(i.MX_USART1_UART_Init) + i.MX_USART2_UART_Init 0x08001474 Section 0 usart.o(i.MX_USART2_UART_Init) + i.MX_USART3_UART_Init 0x080014ac Section 0 usart.o(i.MX_USART3_UART_Init) + i.MemManage_Handler 0x080014e4 Section 0 stm32f1xx_it.o(i.MemManage_Handler) + i.NMI_Handler 0x080014e6 Section 0 stm32f1xx_it.o(i.NMI_Handler) + i.PendSV_Handler 0x080014ec Section 0 stm32f1xx_it.o(i.PendSV_Handler) + i.RS485_Output 0x080014f0 Section 0 main.o(i.RS485_Output) + i.SVC_Handler 0x08001560 Section 0 stm32f1xx_it.o(i.SVC_Handler) + i.Slave1_Matrix_Query 0x08001564 Section 0 main.o(i.Slave1_Matrix_Query) + i.Slave1_Sta_Query 0x08001598 Section 0 main.o(i.Slave1_Sta_Query) + i.Slave2_Matrix_Query 0x080015c8 Section 0 main.o(i.Slave2_Matrix_Query) + i.Slave2_Sta_Query 0x080015f8 Section 0 main.o(i.Slave2_Sta_Query) + i.Slave3_Matrix_Query 0x08001628 Section 0 main.o(i.Slave3_Matrix_Query) + i.Slave3_Sta_Query 0x08001658 Section 0 main.o(i.Slave3_Sta_Query) + i.SysTick_Handler 0x08001698 Section 0 stm32f1xx_it.o(i.SysTick_Handler) + i.SystemClock_Config 0x0800169c Section 0 main.o(i.SystemClock_Config) + i.SystemInit 0x080016fc Section 0 system_stm32f1xx.o(i.SystemInit) + i.UART_DMAAbortOnError 0x080016fe Section 0 stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) + UART_DMAAbortOnError 0x080016ff Thumb Code 16 stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) + i.UART_DMAError 0x0800170e Section 0 stm32f1xx_hal_uart.o(i.UART_DMAError) + UART_DMAError 0x0800170f Thumb Code 74 stm32f1xx_hal_uart.o(i.UART_DMAError) + i.UART_DMAReceiveCplt 0x08001758 Section 0 stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) + UART_DMAReceiveCplt 0x08001759 Thumb Code 134 stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) + i.UART_DMARxHalfCplt 0x080017de Section 0 stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) + UART_DMARxHalfCplt 0x080017df Thumb Code 30 stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) + i.UART_EndRxTransfer 0x080017fc Section 0 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) + UART_EndRxTransfer 0x080017fd Thumb Code 78 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) + i.UART_EndTxTransfer 0x0800184a Section 0 stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) + UART_EndTxTransfer 0x0800184b Thumb Code 28 stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) + i.UART_Receive_IT 0x08001866 Section 0 stm32f1xx_hal_uart.o(i.UART_Receive_IT) + UART_Receive_IT 0x08001867 Thumb Code 194 stm32f1xx_hal_uart.o(i.UART_Receive_IT) + i.UART_SetConfig 0x08001928 Section 0 stm32f1xx_hal_uart.o(i.UART_SetConfig) + UART_SetConfig 0x08001929 Thumb Code 178 stm32f1xx_hal_uart.o(i.UART_SetConfig) + i.UART_Start_Receive_DMA 0x080019e0 Section 0 stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) + i.UART_WaitOnFlagUntilTimeout 0x08001a70 Section 0 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) + UART_WaitOnFlagUntilTimeout 0x08001a71 Thumb Code 114 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) + i.USART1_IRQHandler 0x08001ae4 Section 0 stm32f1xx_it.o(i.USART1_IRQHandler) + i.UsageFault_Handler 0x08001af0 Section 0 stm32f1xx_it.o(i.UsageFault_Handler) + i.__NVIC_SetPriority 0x08001af2 Section 0 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) + __NVIC_SetPriority 0x08001af3 Thumb Code 32 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) + i.main 0x08001b14 Section 0 main.o(i.main) + .constdata 0x08001bb0 Section 18 stm32f1xx_hal_rcc.o(.constdata) + aPredivFactorTable 0x08001bb0 Data 2 stm32f1xx_hal_rcc.o(.constdata) + aPLLMULFactorTable 0x08001bb2 Data 16 stm32f1xx_hal_rcc.o(.constdata) + .constdata 0x08001bc2 Section 16 system_stm32f1xx.o(.constdata) + .constdata 0x08001bd2 Section 8 system_stm32f1xx.o(.constdata) .data 0x20000000 Section 32 main.o(.data) .data 0x20000020 Section 12 stm32f1xx_hal.o(.data) .data 0x2000002c Section 4 system_stm32f1xx.o(.data) .bss 0x20000030 Section 268 main.o(.bss) - .bss 0x2000013c Section 72 tim.o(.bss) - .bss 0x20000184 Section 284 usart.o(.bss) - .bss 0x200002a0 Section 96 libspace.o(.bss) - HEAP 0x20000300 Section 512 startup_stm32f103xb.o(HEAP) - Heap_Mem 0x20000300 Data 512 startup_stm32f103xb.o(HEAP) - STACK 0x20000500 Section 1024 startup_stm32f103xb.o(STACK) - Stack_Mem 0x20000500 Data 1024 startup_stm32f103xb.o(STACK) - __initial_sp 0x20000900 Data 0 startup_stm32f103xb.o(STACK) + .bss 0x2000013c Section 284 usart.o(.bss) + .bss 0x20000258 Section 96 libspace.o(.bss) + HEAP 0x200002b8 Section 512 startup_stm32f103xb.o(HEAP) + Heap_Mem 0x200002b8 Data 512 startup_stm32f103xb.o(HEAP) + STACK 0x200004b8 Section 1024 startup_stm32f103xb.o(STACK) + Stack_Mem 0x200004b8 Data 1024 startup_stm32f103xb.o(STACK) + __initial_sp 0x200008b8 Data 0 startup_stm32f103xb.o(STACK) Global Symbols @@ -1371,7 +987,10 @@ Image Symbol Table TIM1_TRG_COM_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) TIM1_UP_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) TIM2_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) + TIM3_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) TIM4_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) + USART2_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) + USART3_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) USBWakeUp_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) USB_HP_CAN1_TX_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) USB_LP_CAN1_RX0_IRQHandler 0x080001a3 Thumb Code 0 startup_stm32f103xb.o(.text) @@ -1406,80 +1025,64 @@ Image Symbol Table HAL_DMA_IRQHandler 0x08000425 Thumb Code 316 stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler) HAL_DMA_Init 0x08000579 Thumb Code 84 stm32f1xx_hal_dma.o(i.HAL_DMA_Init) HAL_DMA_Start_IT 0x080005d5 Thumb Code 112 stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) - HAL_GPIO_Init 0x08000645 Thumb Code 446 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) - HAL_GPIO_WritePin 0x08000825 Thumb Code 10 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) - HAL_GetTick 0x08000831 Thumb Code 6 stm32f1xx_hal.o(i.HAL_GetTick) - HAL_IncTick 0x0800083d Thumb Code 12 stm32f1xx_hal.o(i.HAL_IncTick) - HAL_Init 0x0800084d Thumb Code 32 stm32f1xx_hal.o(i.HAL_Init) - HAL_InitTick 0x08000871 Thumb Code 54 stm32f1xx_hal.o(i.HAL_InitTick) - HAL_MspInit 0x080008b1 Thumb Code 52 stm32f1xx_hal_msp.o(i.HAL_MspInit) - HAL_NVIC_EnableIRQ 0x080008ed Thumb Code 26 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) - HAL_NVIC_SetPriority 0x08000909 Thumb Code 60 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) - HAL_NVIC_SetPriorityGrouping 0x08000949 Thumb Code 26 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) - HAL_RCC_CSSCallback 0x0800096d Thumb Code 2 stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback) - HAL_RCC_ClockConfig 0x08000971 Thumb Code 280 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) - HAL_RCC_EnableCSS 0x08000a9d Thumb Code 8 stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS) - HAL_RCC_GetPCLK1Freq 0x08000aa9 Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) - HAL_RCC_GetPCLK2Freq 0x08000ac9 Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) - HAL_RCC_GetSysClockFreq 0x08000ae9 Thumb Code 58 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) - HAL_RCC_NMI_IRQHandler 0x08000b35 Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) - HAL_RCC_OscConfig 0x08000b4d Thumb Code 778 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) - HAL_SYSTICK_Config 0x08000e6d Thumb Code 40 stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) - HAL_TIMEx_BreakCallback 0x08000e95 Thumb Code 2 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) - HAL_TIMEx_CommutCallback 0x08000e97 Thumb Code 2 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) - HAL_TIMEx_MasterConfigSynchronization 0x08000e99 Thumb Code 92 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) - HAL_TIM_Base_Init 0x08000f01 Thumb Code 90 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) - HAL_TIM_Base_MspInit 0x08000f5d Thumb Code 50 tim.o(i.HAL_TIM_Base_MspInit) - HAL_TIM_Base_Start_IT 0x08000f99 Thumb Code 76 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) - HAL_TIM_Base_Stop_IT 0x08000ff1 Thumb Code 48 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_IT) - HAL_TIM_ConfigClockSource 0x08001021 Thumb Code 220 stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) - HAL_TIM_IC_CaptureCallback 0x080010fd Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) - HAL_TIM_IRQHandler 0x080010ff Thumb Code 304 stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) - HAL_TIM_OC_DelayElapsedCallback 0x0800122f Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) - HAL_TIM_PWM_PulseFinishedCallback 0x08001231 Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) - HAL_TIM_PeriodElapsedCallback 0x08001235 Thumb Code 20 main.o(i.HAL_TIM_PeriodElapsedCallback) - HAL_TIM_TriggerCallback 0x0800124d Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) - HAL_UARTEx_RxEventCallback 0x0800124f Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) - HAL_UART_DMAStop 0x08001251 Thumb Code 112 stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) - HAL_UART_ErrorCallback 0x080012c1 Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) - HAL_UART_IRQHandler 0x080012c5 Thumb Code 616 stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) - HAL_UART_Init 0x08001531 Thumb Code 100 stm32f1xx_hal_uart.o(i.HAL_UART_Init) - HAL_UART_MspInit 0x08001595 Thumb Code 328 usart.o(i.HAL_UART_MspInit) - HAL_UART_Receive_DMA 0x080016fd Thumb Code 28 stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) - HAL_UART_RxCpltCallback 0x08001719 Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) - HAL_UART_RxHalfCpltCallback 0x0800171b Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) - HAL_UART_Transmit 0x0800171d Thumb Code 160 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) - HAL_UART_TxCpltCallback 0x080017bd Thumb Code 50 main.o(i.HAL_UART_TxCpltCallback) - HardFault_Handler 0x080017fd Thumb Code 2 stm32f1xx_it.o(i.HardFault_Handler) - MX_DMA_Init 0x08001801 Thumb Code 40 dma.o(i.MX_DMA_Init) - MX_GPIO_Init 0x0800182d Thumb Code 102 gpio.o(i.MX_GPIO_Init) - MX_TIM3_Init 0x0800189d Thumb Code 98 tim.o(i.MX_TIM3_Init) - MX_USART1_UART_Init 0x08001909 Thumb Code 48 usart.o(i.MX_USART1_UART_Init) - MX_USART2_UART_Init 0x08001941 Thumb Code 48 usart.o(i.MX_USART2_UART_Init) - MX_USART3_UART_Init 0x08001979 Thumb Code 48 usart.o(i.MX_USART3_UART_Init) - MemManage_Handler 0x080019b1 Thumb Code 2 stm32f1xx_it.o(i.MemManage_Handler) - NMI_Handler 0x080019b3 Thumb Code 6 stm32f1xx_it.o(i.NMI_Handler) - PendSV_Handler 0x080019b9 Thumb Code 2 stm32f1xx_it.o(i.PendSV_Handler) - Process_Reply 0x080019bd Thumb Code 196 main.o(i.Process_Reply) - RS485_Output 0x08001a89 Thumb Code 100 main.o(i.RS485_Output) - SVC_Handler 0x08001af9 Thumb Code 2 stm32f1xx_it.o(i.SVC_Handler) - Slave1_Sta_Query 0x08001afd Thumb Code 40 main.o(i.Slave1_Sta_Query) - SysTick_Handler 0x08001b2d Thumb Code 4 stm32f1xx_it.o(i.SysTick_Handler) - SystemClock_Config 0x08001b31 Thumb Code 96 main.o(i.SystemClock_Config) - SystemInit 0x08001b91 Thumb Code 2 system_stm32f1xx.o(i.SystemInit) - TIM3_IRQHandler 0x08001b95 Thumb Code 6 stm32f1xx_it.o(i.TIM3_IRQHandler) - TIM_Base_SetConfig 0x08001ba1 Thumb Code 108 stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) - TIM_ETR_SetConfig 0x08001c19 Thumb Code 20 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) - UART_Start_Receive_DMA 0x08001f65 Thumb Code 130 stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) - USART1_IRQHandler 0x08002069 Thumb Code 6 stm32f1xx_it.o(i.USART1_IRQHandler) - USART2_IRQHandler 0x08002075 Thumb Code 6 stm32f1xx_it.o(i.USART2_IRQHandler) - USART3_IRQHandler 0x08002081 Thumb Code 6 stm32f1xx_it.o(i.USART3_IRQHandler) - UsageFault_Handler 0x0800208d Thumb Code 2 stm32f1xx_it.o(i.UsageFault_Handler) - main 0x080020b1 Thumb Code 244 main.o(i.main) - AHBPrescTable 0x080021c6 Data 16 system_stm32f1xx.o(.constdata) - APBPrescTable 0x080021d6 Data 8 system_stm32f1xx.o(.constdata) - Region$$Table$$Base 0x080021e0 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08002200 Number 0 anon$$obj.o(Region$$Table) + HAL_Delay 0x08000645 Thumb Code 32 stm32f1xx_hal.o(i.HAL_Delay) + HAL_GPIO_Init 0x08000669 Thumb Code 446 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) + HAL_GPIO_WritePin 0x08000849 Thumb Code 10 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) + HAL_GetTick 0x08000855 Thumb Code 6 stm32f1xx_hal.o(i.HAL_GetTick) + HAL_IncTick 0x08000861 Thumb Code 12 stm32f1xx_hal.o(i.HAL_IncTick) + HAL_Init 0x08000871 Thumb Code 32 stm32f1xx_hal.o(i.HAL_Init) + HAL_InitTick 0x08000895 Thumb Code 54 stm32f1xx_hal.o(i.HAL_InitTick) + HAL_MspInit 0x080008d5 Thumb Code 52 stm32f1xx_hal_msp.o(i.HAL_MspInit) + HAL_NVIC_EnableIRQ 0x08000911 Thumb Code 26 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) + HAL_NVIC_SetPriority 0x0800092d Thumb Code 60 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) + HAL_NVIC_SetPriorityGrouping 0x0800096d Thumb Code 26 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) + HAL_RCC_CSSCallback 0x08000991 Thumb Code 2 stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback) + HAL_RCC_ClockConfig 0x08000995 Thumb Code 280 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) + HAL_RCC_EnableCSS 0x08000ac1 Thumb Code 8 stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS) + HAL_RCC_GetPCLK1Freq 0x08000acd Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) + HAL_RCC_GetPCLK2Freq 0x08000aed Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) + HAL_RCC_GetSysClockFreq 0x08000b0d Thumb Code 58 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) + HAL_RCC_NMI_IRQHandler 0x08000b59 Thumb Code 20 stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) + HAL_RCC_OscConfig 0x08000b71 Thumb Code 778 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) + HAL_SYSTICK_Config 0x08000e91 Thumb Code 40 stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) + HAL_UARTEx_RxEventCallback 0x08000eb9 Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) + HAL_UART_ErrorCallback 0x08000ebb Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) + HAL_UART_IRQHandler 0x08000ebd Thumb Code 616 stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) + HAL_UART_Init 0x08001129 Thumb Code 100 stm32f1xx_hal_uart.o(i.HAL_UART_Init) + HAL_UART_MspInit 0x0800118d Thumb Code 302 usart.o(i.HAL_UART_MspInit) + HAL_UART_Receive_DMA 0x080012dd Thumb Code 28 stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) + HAL_UART_RxCpltCallback 0x080012f9 Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) + HAL_UART_RxHalfCpltCallback 0x080012fb Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) + HAL_UART_Transmit 0x080012fd Thumb Code 160 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) + HAL_UART_TxCpltCallback 0x0800139d Thumb Code 2 stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) + HardFault_Handler 0x0800139f Thumb Code 2 stm32f1xx_it.o(i.HardFault_Handler) + MX_DMA_Init 0x080013a1 Thumb Code 40 dma.o(i.MX_DMA_Init) + MX_GPIO_Init 0x080013cd Thumb Code 102 gpio.o(i.MX_GPIO_Init) + MX_USART1_UART_Init 0x0800143d Thumb Code 48 usart.o(i.MX_USART1_UART_Init) + MX_USART2_UART_Init 0x08001475 Thumb Code 48 usart.o(i.MX_USART2_UART_Init) + MX_USART3_UART_Init 0x080014ad Thumb Code 48 usart.o(i.MX_USART3_UART_Init) + MemManage_Handler 0x080014e5 Thumb Code 2 stm32f1xx_it.o(i.MemManage_Handler) + NMI_Handler 0x080014e7 Thumb Code 6 stm32f1xx_it.o(i.NMI_Handler) + PendSV_Handler 0x080014ed Thumb Code 2 stm32f1xx_it.o(i.PendSV_Handler) + RS485_Output 0x080014f1 Thumb Code 100 main.o(i.RS485_Output) + SVC_Handler 0x08001561 Thumb Code 2 stm32f1xx_it.o(i.SVC_Handler) + Slave1_Matrix_Query 0x08001565 Thumb Code 42 main.o(i.Slave1_Matrix_Query) + Slave1_Sta_Query 0x08001599 Thumb Code 40 main.o(i.Slave1_Sta_Query) + Slave2_Matrix_Query 0x080015c9 Thumb Code 40 main.o(i.Slave2_Matrix_Query) + Slave2_Sta_Query 0x080015f9 Thumb Code 40 main.o(i.Slave2_Sta_Query) + Slave3_Matrix_Query 0x08001629 Thumb Code 40 main.o(i.Slave3_Matrix_Query) + Slave3_Sta_Query 0x08001659 Thumb Code 52 main.o(i.Slave3_Sta_Query) + SysTick_Handler 0x08001699 Thumb Code 4 stm32f1xx_it.o(i.SysTick_Handler) + SystemClock_Config 0x0800169d Thumb Code 96 main.o(i.SystemClock_Config) + SystemInit 0x080016fd Thumb Code 2 system_stm32f1xx.o(i.SystemInit) + UART_Start_Receive_DMA 0x080019e1 Thumb Code 130 stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) + USART1_IRQHandler 0x08001ae5 Thumb Code 6 stm32f1xx_it.o(i.USART1_IRQHandler) + UsageFault_Handler 0x08001af1 Thumb Code 2 stm32f1xx_it.o(i.UsageFault_Handler) + main 0x08001b15 Thumb Code 144 main.o(i.main) + AHBPrescTable 0x08001bc2 Data 16 system_stm32f1xx.o(.constdata) + APBPrescTable 0x08001bd2 Data 8 system_stm32f1xx.o(.constdata) + Region$$Table$$Base 0x08001bdc Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08001bfc Number 0 anon$$obj.o(Region$$Table) current_task_index 0x20000000 Data 1 main.o(.data) expecting_response_from 0x20000001 Data 1 main.o(.data) query_state 0x20000002 Data 3 main.o(.data) @@ -1492,13 +1095,12 @@ Image Symbol Table tx_buffer 0x2000008a Data 16 main.o(.bss) rx_buffer 0x2000009a Data 64 main.o(.bss) output_frame 0x200000da Data 98 main.o(.bss) - htim3 0x2000013c Data 72 tim.o(.bss) - huart1 0x20000184 Data 72 usart.o(.bss) - huart2 0x200001cc Data 72 usart.o(.bss) - huart3 0x20000214 Data 72 usart.o(.bss) - hdma_usart1_rx 0x2000025c Data 68 usart.o(.bss) - __libspace_start 0x200002a0 Data 96 libspace.o(.bss) - __temporary_stack_top$libspace 0x20000300 Data 0 libspace.o(.bss) + huart1 0x2000013c Data 72 usart.o(.bss) + huart2 0x20000184 Data 72 usart.o(.bss) + huart3 0x200001cc Data 72 usart.o(.bss) + hdma_usart1_rx 0x20000214 Data 68 usart.o(.bss) + __libspace_start 0x20000258 Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x200002b8 Data 0 libspace.o(.bss) @@ -1508,198 +1110,173 @@ Memory Map of the image Image Entry point : 0x080000ed - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002230, Max: 0x00010000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001c2c, Max: 0x00010000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002200, Max: 0x00010000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00001bfc, Max: 0x00010000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x08000000 0x08000000 0x000000ec Data RO 3 RESET startup_stm32f103xb.o - 0x080000ec 0x080000ec 0x00000008 Code RO 2897 * !!!main c_w.l(__main.o) - 0x080000f4 0x080000f4 0x00000034 Code RO 3056 !!!scatter c_w.l(__scatter.o) - 0x08000128 0x08000128 0x0000001a Code RO 3058 !!handler_copy c_w.l(__scatter_copy.o) + 0x080000ec 0x080000ec 0x00000008 Code RO 1848 * !!!main c_w.l(__main.o) + 0x080000f4 0x080000f4 0x00000034 Code RO 2007 !!!scatter c_w.l(__scatter.o) + 0x08000128 0x08000128 0x0000001a Code RO 2009 !!handler_copy c_w.l(__scatter_copy.o) 0x08000142 0x08000142 0x00000002 PAD - 0x08000144 0x08000144 0x0000001c Code RO 3060 !!handler_zi c_w.l(__scatter_zi.o) - 0x08000160 0x08000160 0x00000002 Code RO 2924 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) - 0x08000162 0x08000162 0x00000000 Code RO 2931 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2933 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2936 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2938 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2940 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2943 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2945 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2947 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2949 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2951 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2953 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2955 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2957 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2959 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2961 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2963 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2967 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2969 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2971 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 2973 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000002 Code RO 2974 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) - 0x08000164 0x08000164 0x00000002 Code RO 2994 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) - 0x08000166 0x08000166 0x00000000 Code RO 3007 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3009 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3011 .ARM.Collect$$libshutdown$$00000006 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3014 .ARM.Collect$$libshutdown$$00000009 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3017 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3019 .ARM.Collect$$libshutdown$$0000000E c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 3022 .ARM.Collect$$libshutdown$$00000011 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000002 Code RO 3023 .ARM.Collect$$libshutdown$$00000012 c_w.l(libshutdown2.o) - 0x08000168 0x08000168 0x00000000 Code RO 2899 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) - 0x08000168 0x08000168 0x00000000 Code RO 2901 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) - 0x08000168 0x08000168 0x00000006 Code RO 2913 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) - 0x0800016e 0x0800016e 0x00000000 Code RO 2903 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) - 0x0800016e 0x0800016e 0x00000004 Code RO 2904 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000000 Code RO 2906 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000008 Code RO 2907 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) - 0x0800017a 0x0800017a 0x00000002 Code RO 2928 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) - 0x0800017c 0x0800017c 0x00000000 Code RO 2976 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) - 0x0800017c 0x0800017c 0x00000004 Code RO 2977 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) - 0x08000180 0x08000180 0x00000006 Code RO 2978 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x08000144 0x08000144 0x0000001c Code RO 2011 !!handler_zi c_w.l(__scatter_zi.o) + 0x08000160 0x08000160 0x00000002 Code RO 1875 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x08000162 0x08000162 0x00000000 Code RO 1882 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1884 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1887 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1889 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1891 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1894 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1896 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1898 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1900 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1902 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1904 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1906 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1908 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1910 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1912 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1914 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1918 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1920 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1922 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1924 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000002 Code RO 1925 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x08000164 0x08000164 0x00000002 Code RO 1945 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x08000166 0x08000166 0x00000000 Code RO 1958 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1960 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1962 .ARM.Collect$$libshutdown$$00000006 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1965 .ARM.Collect$$libshutdown$$00000009 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1968 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1970 .ARM.Collect$$libshutdown$$0000000E c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1973 .ARM.Collect$$libshutdown$$00000011 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000002 Code RO 1974 .ARM.Collect$$libshutdown$$00000012 c_w.l(libshutdown2.o) + 0x08000168 0x08000168 0x00000000 Code RO 1850 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x08000168 0x08000168 0x00000000 Code RO 1852 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x08000168 0x08000168 0x00000006 Code RO 1864 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x0800016e 0x0800016e 0x00000000 Code RO 1854 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x0800016e 0x0800016e 0x00000004 Code RO 1855 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000000 Code RO 1857 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000008 Code RO 1858 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x0800017a 0x0800017a 0x00000002 Code RO 1879 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x0800017c 0x0800017c 0x00000000 Code RO 1927 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x0800017c 0x0800017c 0x00000004 Code RO 1928 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x08000180 0x08000180 0x00000006 Code RO 1929 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) 0x08000186 0x08000186 0x00000002 PAD 0x08000188 0x08000188 0x00000040 Code RO 4 .text startup_stm32f103xb.o - 0x080001c8 0x080001c8 0x00000044 Code RO 2891 .text c_w.l(rt_memclr.o) - 0x0800020c 0x0800020c 0x0000004e Code RO 2893 .text c_w.l(rt_memclr_w.o) - 0x0800025a 0x0800025a 0x00000006 Code RO 2895 .text c_w.l(heapauxi.o) - 0x08000260 0x08000260 0x0000004a Code RO 2915 .text c_w.l(sys_stackheap_outer.o) - 0x080002aa 0x080002aa 0x00000012 Code RO 2917 .text c_w.l(exit.o) - 0x080002bc 0x080002bc 0x00000008 Code RO 2925 .text c_w.l(libspace.o) - 0x080002c4 0x080002c4 0x0000000c Code RO 2986 .text c_w.l(sys_exit.o) - 0x080002d0 0x080002d0 0x00000002 Code RO 2997 .text c_w.l(use_no_semi.o) - 0x080002d2 0x080002d2 0x00000000 Code RO 2999 .text c_w.l(indicate_semi.o) - 0x080002d2 0x080002d2 0x00000002 Code RO 373 i.BusFault_Handler stm32f1xx_it.o + 0x080001c8 0x080001c8 0x00000044 Code RO 1842 .text c_w.l(rt_memclr.o) + 0x0800020c 0x0800020c 0x0000004e Code RO 1844 .text c_w.l(rt_memclr_w.o) + 0x0800025a 0x0800025a 0x00000006 Code RO 1846 .text c_w.l(heapauxi.o) + 0x08000260 0x08000260 0x0000004a Code RO 1866 .text c_w.l(sys_stackheap_outer.o) + 0x080002aa 0x080002aa 0x00000012 Code RO 1868 .text c_w.l(exit.o) + 0x080002bc 0x080002bc 0x00000008 Code RO 1876 .text c_w.l(libspace.o) + 0x080002c4 0x080002c4 0x0000000c Code RO 1937 .text c_w.l(sys_exit.o) + 0x080002d0 0x080002d0 0x00000002 Code RO 1948 .text c_w.l(use_no_semi.o) + 0x080002d2 0x080002d2 0x00000000 Code RO 1950 .text c_w.l(indicate_semi.o) + 0x080002d2 0x080002d2 0x00000002 Code RO 315 i.BusFault_Handler stm32f1xx_it.o 0x080002d4 0x080002d4 0x00000034 Code RO 13 i.Calculate_CRC16 main.o - 0x08000308 0x08000308 0x0000000c Code RO 374 i.DMA1_Channel5_IRQHandler stm32f1xx_it.o - 0x08000314 0x08000314 0x0000002a Code RO 1892 i.DMA_SetConfig stm32f1xx_hal_dma.o - 0x0800033e 0x0800033e 0x00000002 Code RO 375 i.DebugMon_Handler stm32f1xx_it.o + 0x08000308 0x08000308 0x0000000c Code RO 316 i.DMA1_Channel5_IRQHandler stm32f1xx_it.o + 0x08000314 0x08000314 0x0000002a Code RO 1206 i.DMA_SetConfig stm32f1xx_hal_dma.o + 0x0800033e 0x0800033e 0x00000002 Code RO 317 i.DebugMon_Handler stm32f1xx_it.o 0x08000340 0x08000340 0x00000004 Code RO 14 i.Error_Handler main.o - 0x08000344 0x08000344 0x00000046 Code RO 1893 i.HAL_DMA_Abort stm32f1xx_hal_dma.o + 0x08000344 0x08000344 0x00000046 Code RO 1207 i.HAL_DMA_Abort stm32f1xx_hal_dma.o 0x0800038a 0x0800038a 0x00000002 PAD - 0x0800038c 0x0800038c 0x00000098 Code RO 1894 i.HAL_DMA_Abort_IT stm32f1xx_hal_dma.o - 0x08000424 0x08000424 0x00000154 Code RO 1898 i.HAL_DMA_IRQHandler stm32f1xx_hal_dma.o - 0x08000578 0x08000578 0x0000005c Code RO 1899 i.HAL_DMA_Init stm32f1xx_hal_dma.o - 0x080005d4 0x080005d4 0x00000070 Code RO 1903 i.HAL_DMA_Start_IT stm32f1xx_hal_dma.o - 0x08000644 0x08000644 0x000001e0 Code RO 1829 i.HAL_GPIO_Init stm32f1xx_hal_gpio.o - 0x08000824 0x08000824 0x0000000a Code RO 1833 i.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o - 0x0800082e 0x0800082e 0x00000002 PAD - 0x08000830 0x08000830 0x0000000c Code RO 1523 i.HAL_GetTick stm32f1xx_hal.o - 0x0800083c 0x0800083c 0x00000010 Code RO 1529 i.HAL_IncTick stm32f1xx_hal.o - 0x0800084c 0x0800084c 0x00000024 Code RO 1530 i.HAL_Init stm32f1xx_hal.o - 0x08000870 0x08000870 0x00000040 Code RO 1531 i.HAL_InitTick stm32f1xx_hal.o - 0x080008b0 0x080008b0 0x0000003c Code RO 479 i.HAL_MspInit stm32f1xx_hal_msp.o - 0x080008ec 0x080008ec 0x0000001a Code RO 1989 i.HAL_NVIC_EnableIRQ stm32f1xx_hal_cortex.o - 0x08000906 0x08000906 0x00000002 PAD - 0x08000908 0x08000908 0x00000040 Code RO 1995 i.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o - 0x08000948 0x08000948 0x00000024 Code RO 1996 i.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o - 0x0800096c 0x0800096c 0x00000002 Code RO 1686 i.HAL_RCC_CSSCallback stm32f1xx_hal_rcc.o - 0x0800096e 0x0800096e 0x00000002 PAD - 0x08000970 0x08000970 0x0000012c Code RO 1687 i.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o - 0x08000a9c 0x08000a9c 0x0000000c Code RO 1690 i.HAL_RCC_EnableCSS stm32f1xx_hal_rcc.o - 0x08000aa8 0x08000aa8 0x00000020 Code RO 1694 i.HAL_RCC_GetPCLK1Freq stm32f1xx_hal_rcc.o - 0x08000ac8 0x08000ac8 0x00000020 Code RO 1695 i.HAL_RCC_GetPCLK2Freq stm32f1xx_hal_rcc.o - 0x08000ae8 0x08000ae8 0x0000004c Code RO 1696 i.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o - 0x08000b34 0x08000b34 0x00000018 Code RO 1698 i.HAL_RCC_NMI_IRQHandler stm32f1xx_hal_rcc.o - 0x08000b4c 0x08000b4c 0x00000320 Code RO 1699 i.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o - 0x08000e6c 0x08000e6c 0x00000028 Code RO 2000 i.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o - 0x08000e94 0x08000e94 0x00000002 Code RO 1245 i.HAL_TIMEx_BreakCallback stm32f1xx_hal_tim_ex.o - 0x08000e96 0x08000e96 0x00000002 Code RO 1246 i.HAL_TIMEx_CommutCallback stm32f1xx_hal_tim_ex.o - 0x08000e98 0x08000e98 0x00000068 Code RO 1264 i.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o - 0x08000f00 0x08000f00 0x0000005a Code RO 541 i.HAL_TIM_Base_Init stm32f1xx_hal_tim.o - 0x08000f5a 0x08000f5a 0x00000002 PAD - 0x08000f5c 0x08000f5c 0x0000003c Code RO 278 i.HAL_TIM_Base_MspInit tim.o - 0x08000f98 0x08000f98 0x00000058 Code RO 546 i.HAL_TIM_Base_Start_IT stm32f1xx_hal_tim.o - 0x08000ff0 0x08000ff0 0x00000030 Code RO 549 i.HAL_TIM_Base_Stop_IT stm32f1xx_hal_tim.o - 0x08001020 0x08001020 0x000000dc Code RO 550 i.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o - 0x080010fc 0x080010fc 0x00000002 Code RO 575 i.HAL_TIM_IC_CaptureCallback stm32f1xx_hal_tim.o - 0x080010fe 0x080010fe 0x00000130 Code RO 589 i.HAL_TIM_IRQHandler stm32f1xx_hal_tim.o - 0x0800122e 0x0800122e 0x00000002 Code RO 592 i.HAL_TIM_OC_DelayElapsedCallback stm32f1xx_hal_tim.o - 0x08001230 0x08001230 0x00000002 Code RO 619 i.HAL_TIM_PWM_PulseFinishedCallback stm32f1xx_hal_tim.o - 0x08001232 0x08001232 0x00000002 PAD - 0x08001234 0x08001234 0x00000018 Code RO 15 i.HAL_TIM_PeriodElapsedCallback main.o - 0x0800124c 0x0800124c 0x00000002 Code RO 632 i.HAL_TIM_TriggerCallback stm32f1xx_hal_tim.o - 0x0800124e 0x0800124e 0x00000002 Code RO 2501 i.HAL_UARTEx_RxEventCallback stm32f1xx_hal_uart.o - 0x08001250 0x08001250 0x00000070 Code RO 2513 i.HAL_UART_DMAStop stm32f1xx_hal_uart.o - 0x080012c0 0x080012c0 0x00000002 Code RO 2515 i.HAL_UART_ErrorCallback stm32f1xx_hal_uart.o - 0x080012c2 0x080012c2 0x00000002 PAD - 0x080012c4 0x080012c4 0x0000026c Code RO 2518 i.HAL_UART_IRQHandler stm32f1xx_hal_uart.o - 0x08001530 0x08001530 0x00000064 Code RO 2519 i.HAL_UART_Init stm32f1xx_hal_uart.o - 0x08001594 0x08001594 0x00000168 Code RO 320 i.HAL_UART_MspInit usart.o - 0x080016fc 0x080016fc 0x0000001c Code RO 2523 i.HAL_UART_Receive_DMA stm32f1xx_hal_uart.o - 0x08001718 0x08001718 0x00000002 Code RO 2525 i.HAL_UART_RxCpltCallback stm32f1xx_hal_uart.o - 0x0800171a 0x0800171a 0x00000002 Code RO 2526 i.HAL_UART_RxHalfCpltCallback stm32f1xx_hal_uart.o - 0x0800171c 0x0800171c 0x000000a0 Code RO 2527 i.HAL_UART_Transmit stm32f1xx_hal_uart.o - 0x080017bc 0x080017bc 0x00000040 Code RO 16 i.HAL_UART_TxCpltCallback main.o - 0x080017fc 0x080017fc 0x00000002 Code RO 376 i.HardFault_Handler stm32f1xx_it.o - 0x080017fe 0x080017fe 0x00000002 PAD - 0x08001800 0x08001800 0x0000002c Code RO 253 i.MX_DMA_Init dma.o - 0x0800182c 0x0800182c 0x00000070 Code RO 229 i.MX_GPIO_Init gpio.o - 0x0800189c 0x0800189c 0x0000006c Code RO 279 i.MX_TIM3_Init tim.o - 0x08001908 0x08001908 0x00000038 Code RO 321 i.MX_USART1_UART_Init usart.o - 0x08001940 0x08001940 0x00000038 Code RO 322 i.MX_USART2_UART_Init usart.o - 0x08001978 0x08001978 0x00000038 Code RO 323 i.MX_USART3_UART_Init usart.o - 0x080019b0 0x080019b0 0x00000002 Code RO 377 i.MemManage_Handler stm32f1xx_it.o - 0x080019b2 0x080019b2 0x00000006 Code RO 378 i.NMI_Handler stm32f1xx_it.o - 0x080019b8 0x080019b8 0x00000002 Code RO 379 i.PendSV_Handler stm32f1xx_it.o - 0x080019ba 0x080019ba 0x00000002 PAD - 0x080019bc 0x080019bc 0x000000cc Code RO 17 i.Process_Reply main.o - 0x08001a88 0x08001a88 0x00000070 Code RO 18 i.RS485_Output main.o - 0x08001af8 0x08001af8 0x00000002 Code RO 380 i.SVC_Handler stm32f1xx_it.o - 0x08001afa 0x08001afa 0x00000002 PAD - 0x08001afc 0x08001afc 0x00000030 Code RO 20 i.Slave1_Sta_Query main.o - 0x08001b2c 0x08001b2c 0x00000004 Code RO 381 i.SysTick_Handler stm32f1xx_it.o - 0x08001b30 0x08001b30 0x00000060 Code RO 25 i.SystemClock_Config main.o - 0x08001b90 0x08001b90 0x00000002 Code RO 2853 i.SystemInit system_stm32f1xx.o - 0x08001b92 0x08001b92 0x00000002 PAD - 0x08001b94 0x08001b94 0x0000000c Code RO 382 i.TIM3_IRQHandler stm32f1xx_it.o - 0x08001ba0 0x08001ba0 0x00000078 Code RO 634 i.TIM_Base_SetConfig stm32f1xx_hal_tim.o - 0x08001c18 0x08001c18 0x00000014 Code RO 645 i.TIM_ETR_SetConfig stm32f1xx_hal_tim.o - 0x08001c2c 0x08001c2c 0x00000010 Code RO 646 i.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o - 0x08001c3c 0x08001c3c 0x00000022 Code RO 652 i.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o - 0x08001c5e 0x08001c5e 0x00000024 Code RO 654 i.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o - 0x08001c82 0x08001c82 0x00000010 Code RO 2532 i.UART_DMAAbortOnError stm32f1xx_hal_uart.o - 0x08001c92 0x08001c92 0x0000004a Code RO 2533 i.UART_DMAError stm32f1xx_hal_uart.o - 0x08001cdc 0x08001cdc 0x00000086 Code RO 2534 i.UART_DMAReceiveCplt stm32f1xx_hal_uart.o - 0x08001d62 0x08001d62 0x0000001e Code RO 2536 i.UART_DMARxHalfCplt stm32f1xx_hal_uart.o - 0x08001d80 0x08001d80 0x0000004e Code RO 2542 i.UART_EndRxTransfer stm32f1xx_hal_uart.o - 0x08001dce 0x08001dce 0x0000001c Code RO 2543 i.UART_EndTxTransfer stm32f1xx_hal_uart.o - 0x08001dea 0x08001dea 0x000000c2 Code RO 2544 i.UART_Receive_IT stm32f1xx_hal_uart.o - 0x08001eac 0x08001eac 0x000000b8 Code RO 2545 i.UART_SetConfig stm32f1xx_hal_uart.o - 0x08001f64 0x08001f64 0x00000090 Code RO 2546 i.UART_Start_Receive_DMA stm32f1xx_hal_uart.o - 0x08001ff4 0x08001ff4 0x00000072 Code RO 2548 i.UART_WaitOnFlagUntilTimeout stm32f1xx_hal_uart.o - 0x08002066 0x08002066 0x00000002 PAD - 0x08002068 0x08002068 0x0000000c Code RO 383 i.USART1_IRQHandler stm32f1xx_it.o - 0x08002074 0x08002074 0x0000000c Code RO 384 i.USART2_IRQHandler stm32f1xx_it.o - 0x08002080 0x08002080 0x0000000c Code RO 385 i.USART3_IRQHandler stm32f1xx_it.o - 0x0800208c 0x0800208c 0x00000002 Code RO 386 i.UsageFault_Handler stm32f1xx_it.o - 0x0800208e 0x0800208e 0x00000020 Code RO 2002 i.__NVIC_SetPriority stm32f1xx_hal_cortex.o - 0x080020ae 0x080020ae 0x00000002 PAD - 0x080020b0 0x080020b0 0x00000104 Code RO 26 i.main main.o - 0x080021b4 0x080021b4 0x00000012 Data RO 1700 .constdata stm32f1xx_hal_rcc.o - 0x080021c6 0x080021c6 0x00000010 Data RO 2854 .constdata system_stm32f1xx.o - 0x080021d6 0x080021d6 0x00000008 Data RO 2855 .constdata system_stm32f1xx.o - 0x080021de 0x080021de 0x00000002 PAD - 0x080021e0 0x080021e0 0x00000020 Data RO 3054 Region$$Table anon$$obj.o + 0x0800038c 0x0800038c 0x00000098 Code RO 1208 i.HAL_DMA_Abort_IT stm32f1xx_hal_dma.o + 0x08000424 0x08000424 0x00000154 Code RO 1212 i.HAL_DMA_IRQHandler stm32f1xx_hal_dma.o + 0x08000578 0x08000578 0x0000005c Code RO 1213 i.HAL_DMA_Init stm32f1xx_hal_dma.o + 0x080005d4 0x080005d4 0x00000070 Code RO 1217 i.HAL_DMA_Start_IT stm32f1xx_hal_dma.o + 0x08000644 0x08000644 0x00000024 Code RO 833 i.HAL_Delay stm32f1xx_hal.o + 0x08000668 0x08000668 0x000001e0 Code RO 1143 i.HAL_GPIO_Init stm32f1xx_hal_gpio.o + 0x08000848 0x08000848 0x0000000a Code RO 1147 i.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o + 0x08000852 0x08000852 0x00000002 PAD + 0x08000854 0x08000854 0x0000000c Code RO 837 i.HAL_GetTick stm32f1xx_hal.o + 0x08000860 0x08000860 0x00000010 Code RO 843 i.HAL_IncTick stm32f1xx_hal.o + 0x08000870 0x08000870 0x00000024 Code RO 844 i.HAL_Init stm32f1xx_hal.o + 0x08000894 0x08000894 0x00000040 Code RO 845 i.HAL_InitTick stm32f1xx_hal.o + 0x080008d4 0x080008d4 0x0000003c Code RO 403 i.HAL_MspInit stm32f1xx_hal_msp.o + 0x08000910 0x08000910 0x0000001a Code RO 1303 i.HAL_NVIC_EnableIRQ stm32f1xx_hal_cortex.o + 0x0800092a 0x0800092a 0x00000002 PAD + 0x0800092c 0x0800092c 0x00000040 Code RO 1309 i.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x0800096c 0x0800096c 0x00000024 Code RO 1310 i.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o + 0x08000990 0x08000990 0x00000002 Code RO 1000 i.HAL_RCC_CSSCallback stm32f1xx_hal_rcc.o + 0x08000992 0x08000992 0x00000002 PAD + 0x08000994 0x08000994 0x0000012c Code RO 1001 i.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o + 0x08000ac0 0x08000ac0 0x0000000c Code RO 1004 i.HAL_RCC_EnableCSS stm32f1xx_hal_rcc.o + 0x08000acc 0x08000acc 0x00000020 Code RO 1008 i.HAL_RCC_GetPCLK1Freq stm32f1xx_hal_rcc.o + 0x08000aec 0x08000aec 0x00000020 Code RO 1009 i.HAL_RCC_GetPCLK2Freq stm32f1xx_hal_rcc.o + 0x08000b0c 0x08000b0c 0x0000004c Code RO 1010 i.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o + 0x08000b58 0x08000b58 0x00000018 Code RO 1012 i.HAL_RCC_NMI_IRQHandler stm32f1xx_hal_rcc.o + 0x08000b70 0x08000b70 0x00000320 Code RO 1013 i.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o + 0x08000e90 0x08000e90 0x00000028 Code RO 1314 i.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o + 0x08000eb8 0x08000eb8 0x00000002 Code RO 475 i.HAL_UARTEx_RxEventCallback stm32f1xx_hal_uart.o + 0x08000eba 0x08000eba 0x00000002 Code RO 489 i.HAL_UART_ErrorCallback stm32f1xx_hal_uart.o + 0x08000ebc 0x08000ebc 0x0000026c Code RO 492 i.HAL_UART_IRQHandler stm32f1xx_hal_uart.o + 0x08001128 0x08001128 0x00000064 Code RO 493 i.HAL_UART_Init stm32f1xx_hal_uart.o + 0x0800118c 0x0800118c 0x00000150 Code RO 262 i.HAL_UART_MspInit usart.o + 0x080012dc 0x080012dc 0x0000001c Code RO 497 i.HAL_UART_Receive_DMA stm32f1xx_hal_uart.o + 0x080012f8 0x080012f8 0x00000002 Code RO 499 i.HAL_UART_RxCpltCallback stm32f1xx_hal_uart.o + 0x080012fa 0x080012fa 0x00000002 Code RO 500 i.HAL_UART_RxHalfCpltCallback stm32f1xx_hal_uart.o + 0x080012fc 0x080012fc 0x000000a0 Code RO 501 i.HAL_UART_Transmit stm32f1xx_hal_uart.o + 0x0800139c 0x0800139c 0x00000002 Code RO 504 i.HAL_UART_TxCpltCallback stm32f1xx_hal_uart.o + 0x0800139e 0x0800139e 0x00000002 Code RO 318 i.HardFault_Handler stm32f1xx_it.o + 0x080013a0 0x080013a0 0x0000002c Code RO 237 i.MX_DMA_Init dma.o + 0x080013cc 0x080013cc 0x00000070 Code RO 213 i.MX_GPIO_Init gpio.o + 0x0800143c 0x0800143c 0x00000038 Code RO 263 i.MX_USART1_UART_Init usart.o + 0x08001474 0x08001474 0x00000038 Code RO 264 i.MX_USART2_UART_Init usart.o + 0x080014ac 0x080014ac 0x00000038 Code RO 265 i.MX_USART3_UART_Init usart.o + 0x080014e4 0x080014e4 0x00000002 Code RO 319 i.MemManage_Handler stm32f1xx_it.o + 0x080014e6 0x080014e6 0x00000006 Code RO 320 i.NMI_Handler stm32f1xx_it.o + 0x080014ec 0x080014ec 0x00000002 Code RO 321 i.PendSV_Handler stm32f1xx_it.o + 0x080014ee 0x080014ee 0x00000002 PAD + 0x080014f0 0x080014f0 0x00000070 Code RO 17 i.RS485_Output main.o + 0x08001560 0x08001560 0x00000002 Code RO 322 i.SVC_Handler stm32f1xx_it.o + 0x08001562 0x08001562 0x00000002 PAD + 0x08001564 0x08001564 0x00000034 Code RO 18 i.Slave1_Matrix_Query main.o + 0x08001598 0x08001598 0x00000030 Code RO 19 i.Slave1_Sta_Query main.o + 0x080015c8 0x080015c8 0x00000030 Code RO 20 i.Slave2_Matrix_Query main.o + 0x080015f8 0x080015f8 0x00000030 Code RO 21 i.Slave2_Sta_Query main.o + 0x08001628 0x08001628 0x00000030 Code RO 22 i.Slave3_Matrix_Query main.o + 0x08001658 0x08001658 0x00000040 Code RO 23 i.Slave3_Sta_Query main.o + 0x08001698 0x08001698 0x00000004 Code RO 323 i.SysTick_Handler stm32f1xx_it.o + 0x0800169c 0x0800169c 0x00000060 Code RO 24 i.SystemClock_Config main.o + 0x080016fc 0x080016fc 0x00000002 Code RO 1804 i.SystemInit system_stm32f1xx.o + 0x080016fe 0x080016fe 0x00000010 Code RO 506 i.UART_DMAAbortOnError stm32f1xx_hal_uart.o + 0x0800170e 0x0800170e 0x0000004a Code RO 507 i.UART_DMAError stm32f1xx_hal_uart.o + 0x08001758 0x08001758 0x00000086 Code RO 508 i.UART_DMAReceiveCplt stm32f1xx_hal_uart.o + 0x080017de 0x080017de 0x0000001e Code RO 510 i.UART_DMARxHalfCplt stm32f1xx_hal_uart.o + 0x080017fc 0x080017fc 0x0000004e Code RO 516 i.UART_EndRxTransfer stm32f1xx_hal_uart.o + 0x0800184a 0x0800184a 0x0000001c Code RO 517 i.UART_EndTxTransfer stm32f1xx_hal_uart.o + 0x08001866 0x08001866 0x000000c2 Code RO 518 i.UART_Receive_IT stm32f1xx_hal_uart.o + 0x08001928 0x08001928 0x000000b8 Code RO 519 i.UART_SetConfig stm32f1xx_hal_uart.o + 0x080019e0 0x080019e0 0x00000090 Code RO 520 i.UART_Start_Receive_DMA stm32f1xx_hal_uart.o + 0x08001a70 0x08001a70 0x00000072 Code RO 522 i.UART_WaitOnFlagUntilTimeout stm32f1xx_hal_uart.o + 0x08001ae2 0x08001ae2 0x00000002 PAD + 0x08001ae4 0x08001ae4 0x0000000c Code RO 324 i.USART1_IRQHandler stm32f1xx_it.o + 0x08001af0 0x08001af0 0x00000002 Code RO 325 i.UsageFault_Handler stm32f1xx_it.o + 0x08001af2 0x08001af2 0x00000020 Code RO 1316 i.__NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x08001b12 0x08001b12 0x00000002 PAD + 0x08001b14 0x08001b14 0x0000009c Code RO 25 i.main main.o + 0x08001bb0 0x08001bb0 0x00000012 Data RO 1014 .constdata stm32f1xx_hal_rcc.o + 0x08001bc2 0x08001bc2 0x00000010 Data RO 1805 .constdata system_stm32f1xx.o + 0x08001bd2 0x08001bd2 0x00000008 Data RO 1806 .constdata system_stm32f1xx.o + 0x08001bda 0x08001bda 0x00000002 PAD + 0x08001bdc 0x08001bdc 0x00000020 Data RO 2005 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002200, Size: 0x00000900, Max: 0x00005000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08001bfc, Size: 0x000008b8, Max: 0x00005000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x08002200 0x00000020 Data RW 28 .data main.o - 0x20000020 0x08002220 0x0000000c Data RW 1537 .data stm32f1xx_hal.o - 0x2000002c 0x0800222c 0x00000004 Data RW 2856 .data system_stm32f1xx.o - 0x20000030 - 0x0000010c Zero RW 27 .bss main.o - 0x2000013c - 0x00000048 Zero RW 280 .bss tim.o - 0x20000184 - 0x0000011c Zero RW 324 .bss usart.o - 0x200002a0 - 0x00000060 Zero RW 2926 .bss c_w.l(libspace.o) - 0x20000300 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o - 0x20000500 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o + 0x20000000 0x08001bfc 0x00000020 Data RW 27 .data main.o + 0x20000020 0x08001c1c 0x0000000c Data RW 851 .data stm32f1xx_hal.o + 0x2000002c 0x08001c28 0x00000004 Data RW 1807 .data system_stm32f1xx.o + 0x20000030 - 0x0000010c Zero RW 26 .bss main.o + 0x2000013c - 0x0000011c Zero RW 266 .bss usart.o + 0x20000258 - 0x00000060 Zero RW 1877 .bss c_w.l(libspace.o) + 0x200002b8 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o + 0x200004b8 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o ============================================================================== @@ -1711,26 +1288,23 @@ Image component sizes 44 4 0 0 0 822 dma.o 112 10 0 0 0 979 gpio.o - 864 70 0 32 268 433974 main.o + 728 86 0 32 268 402200 main.o 64 26 236 0 1536 844 startup_stm32f103xb.o - 128 24 0 12 0 5529 stm32f1xx_hal.o - 198 14 0 0 0 29143 stm32f1xx_hal_cortex.o + 164 28 0 12 0 6165 stm32f1xx_hal.o + 198 14 0 0 0 29139 stm32f1xx_hal_cortex.o 808 36 0 0 0 5218 stm32f1xx_hal_dma.o 490 34 0 0 0 2988 stm32f1xx_hal_gpio.o 60 8 0 0 0 942 stm32f1xx_hal_msp.o 1278 92 18 0 0 6947 stm32f1xx_hal_rcc.o - 984 24 0 0 0 10924 stm32f1xx_hal_tim.o - 108 12 0 0 0 2533 stm32f1xx_hal_tim_ex.o - 2024 24 0 0 0 15495 stm32f1xx_hal_uart.o - 84 30 0 0 0 6523 stm32f1xx_it.o + 1914 24 0 0 0 15270 stm32f1xx_hal_uart.o + 48 12 0 0 0 5125 stm32f1xx_it.o 2 0 24 4 0 1215 system_stm32f1xx.o - 168 20 0 0 72 1794 tim.o - 528 56 0 0 284 3319 usart.o + 504 58 0 0 284 3315 usart.o ---------------------------------------------------------------------- - 7970 484 312 48 2160 529189 Object Totals + 6430 432 312 48 2088 481169 Object Totals 0 0 32 0 0 0 (incl. Generated) - 26 0 2 0 0 0 (incl. Padding) + 16 0 2 0 0 0 (incl. Padding) ---------------------------------------------------------------------- @@ -1779,15 +1353,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 8392 500 312 48 2256 525029 Grand Totals - 8392 500 312 48 2256 525029 ELF Image Totals - 8392 500 312 48 0 0 ROM Totals + 6852 448 312 48 2184 477997 Grand Totals + 6852 448 312 48 2184 477997 ELF Image Totals + 6852 448 312 48 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 8704 ( 8.50kB) - Total RW Size (RW Data + ZI Data) 2304 ( 2.25kB) - Total ROM Size (Code + RO Data + RW Data) 8752 ( 8.55kB) + Total RO Size (Code + RO Data) 7164 ( 7.00kB) + Total RW Size (RW Data + ZI Data) 2232 ( 2.18kB) + Total ROM Size (Code + RO Data + RW Data) 7212 ( 7.04kB) ============================================================================== diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_PressureSensorBoardMaster.dep b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_PressureSensorBoardMaster.dep index 986909e..bf82bbe 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_PressureSensorBoardMaster.dep +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_PressureSensorBoardMaster.dep @@ -1,637 +1,512 @@ Dependencies for Project 'PressureSensorBoardMaster', Target 'PressureSensorBoardMaster': (DO NOT MODIFY !) CompilerVersion: 5060960::V5.06 update 7 (build 960)::.\ARMCC -F (startup_stm32f103xb.s)(0x692FD046)(--cpu Cortex-M3 -g --apcs=interwork -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include --pd "__UVISION_VERSION SETA 541" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --list startup_stm32f103xb.lst --xref -o pressuresensorboardmaster\startup_stm32f103xb.o --depend pressuresensorboardmaster\startup_stm32f103xb.d) -F (../Core/Src/main.c)(0x6932A1DF)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\main.o --omf_browse pressuresensorboardmaster\main.crf --depend pressuresensorboardmaster\main.d) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -I (../Core/Inc/dma.h)(0x6912E845) -I (../Core/Inc/tim.h)(0x6930E838) -I (../Core/Inc/usart.h)(0x6912E845) -I (../Core/Inc/gpio.h)(0x68FECD58) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374) -I (C:\app\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E) -F (../Core/Src/gpio.c)(0x69142865)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\gpio.o --omf_browse pressuresensorboardmaster\gpio.crf --depend pressuresensorboardmaster\gpio.d) -I (../Core/Inc/gpio.h)(0x68FECD58) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Core/Src/dma.c)(0x6912E845)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\dma.o --omf_browse pressuresensorboardmaster\dma.crf --depend pressuresensorboardmaster\dma.d) -I (../Core/Inc/dma.h)(0x6912E845) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Core/Src/tim.c)(0x6930E838)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\tim.o --omf_browse pressuresensorboardmaster\tim.crf --depend pressuresensorboardmaster\tim.d) -I (../Core/Inc/tim.h)(0x6930E838) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Core/Src/usart.c)(0x6930E838)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\usart.o --omf_browse pressuresensorboardmaster\usart.crf --depend pressuresensorboardmaster\usart.d) -I (../Core/Inc/usart.h)(0x6912E845) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Core/Src/stm32f1xx_it.c)(0x6930E838)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_it.o --omf_browse pressuresensorboardmaster\stm32f1xx_it.crf --depend pressuresensorboardmaster\stm32f1xx_it.d) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_it.h)(0x6930E838) -F (../Core/Src/stm32f1xx_hal_msp.c)(0x68FECD59)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_msp.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_msp.crf --depend pressuresensorboardmaster\stm32f1xx_hal_msp.d) -I (../Core/Inc/main.h)(0x68FECD59) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_tim.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_tim.crf --depend pressuresensorboardmaster\stm32f1xx_hal_tim.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_tim_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_tim_ex.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal.crf --depend pressuresensorboardmaster\stm32f1xx_hal.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_rcc.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_rcc.crf --depend pressuresensorboardmaster\stm32f1xx_hal_rcc.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_gpio.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_gpio.crf --depend pressuresensorboardmaster\stm32f1xx_hal_gpio.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_dma.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_dma.crf --depend pressuresensorboardmaster\stm32f1xx_hal_dma.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_cortex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_cortex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_cortex.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_pwr.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_pwr.crf --depend pressuresensorboardmaster\stm32f1xx_hal_pwr.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_flash.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_flash.crf --depend pressuresensorboardmaster\stm32f1xx_hal_flash.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_flash_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_flash_ex.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_exti.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_exti.crf --depend pressuresensorboardmaster\stm32f1xx_hal_exti.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c)(0x68E72B55)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_uart.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_uart.crf --depend pressuresensorboardmaster\stm32f1xx_hal_uart.d) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) -F (../Core/Src/system_stm32f1xx.c)(0x68FDC5F4)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\app\Keil_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="541" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\system_stm32f1xx.o --omf_browse pressuresensorboardmaster\system_stm32f1xx.crf --depend pressuresensorboardmaster\system_stm32f1xx.d) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68E72B55) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68E72B55) -I (../Drivers/CMSIS/Include/core_cm3.h)(0x68E72B29) -I (C:\app\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E) -I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68E72B29) -I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68E72B29) -I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68E72B55) -I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6912E845) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68E72B55) -I (C:\app\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h)(0x68E72B55) -I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68E72B55) +F (startup_stm32f103xb.s)(0x6933D92D)(--cpu Cortex-M3 -g --apcs=interwork -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include --pd "__UVISION_VERSION SETA 543" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --list startup_stm32f103xb.lst --xref -o pressuresensorboardmaster\startup_stm32f103xb.o --depend pressuresensorboardmaster\startup_stm32f103xb.d) +F (../Core/Src/main.c)(0x6933E503)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\main.o --omf_browse pressuresensorboardmaster\main.crf --depend pressuresensorboardmaster\main.d) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +I (../Core/Inc/dma.h)(0x6933CEF9) +I (../Core/Inc/usart.h)(0x6933CEFA) +I (../Core/Inc/gpio.h)(0x6933CEF9) +I (C:\keil\ARM\ARMCC\include\stdio.h)(0x5E8E3CC2) +I (C:\keil\ARM\ARMCC\include\string.h)(0x5E8E3CC2) +F (../Core/Src/gpio.c)(0x6933CEF9)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\gpio.o --omf_browse pressuresensorboardmaster\gpio.crf --depend pressuresensorboardmaster\gpio.d) +I (../Core/Inc/gpio.h)(0x6933CEF9) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Core/Src/dma.c)(0x6933D858)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\dma.o --omf_browse pressuresensorboardmaster\dma.crf --depend pressuresensorboardmaster\dma.d) +I (../Core/Inc/dma.h)(0x6933CEF9) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Core/Src/usart.c)(0x6933D92A)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\usart.o --omf_browse pressuresensorboardmaster\usart.crf --depend pressuresensorboardmaster\usart.d) +I (../Core/Inc/usart.h)(0x6933CEFA) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Core/Src/stm32f1xx_it.c)(0x6933D92A)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_it.o --omf_browse pressuresensorboardmaster\stm32f1xx_it.crf --depend pressuresensorboardmaster\stm32f1xx_it.d) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_it.h)(0x6933D92A) +F (../Core/Src/stm32f1xx_hal_msp.c)(0x6933CEFA)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_msp.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_msp.crf --depend pressuresensorboardmaster\stm32f1xx_hal_msp.d) +I (../Core/Inc/main.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_uart.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_uart.crf --depend pressuresensorboardmaster\stm32f1xx_hal_uart.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal.crf --depend pressuresensorboardmaster\stm32f1xx_hal.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_rcc.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_rcc.crf --depend pressuresensorboardmaster\stm32f1xx_hal_rcc.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_gpio.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_gpio.crf --depend pressuresensorboardmaster\stm32f1xx_hal_gpio.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_dma.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_dma.crf --depend pressuresensorboardmaster\stm32f1xx_hal_dma.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_cortex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_cortex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_cortex.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_pwr.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_pwr.crf --depend pressuresensorboardmaster\stm32f1xx_hal_pwr.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_flash.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_flash.crf --depend pressuresensorboardmaster\stm32f1xx_hal_flash.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_flash_ex.crf --depend pressuresensorboardmaster\stm32f1xx_hal_flash_ex.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\stm32f1xx_hal_exti.o --omf_browse pressuresensorboardmaster\stm32f1xx_hal_exti.crf --depend pressuresensorboardmaster\stm32f1xx_hal_exti.d) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) +F (../Core/Src/system_stm32f1xx.c)(0x68F635ED)(--c99 -c --cpu Cortex-M3 -g -O3 --apcs=interwork --split_sections -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I.\RTE\_PressureSensorBoardMaster -IC:\keil\ARM\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__UVISION_VERSION="543" -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o pressuresensorboardmaster\system_stm32f1xx.o --omf_browse pressuresensorboardmaster\system_stm32f1xx.crf --depend pressuresensorboardmaster\system_stm32f1xx.d) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h)(0x68F635ED) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h)(0x68F635ED) +I (../Drivers/CMSIS/Include/core_cm3.h)(0x68F635E6) +I (C:\keil\ARM\ARMCC\include\stdint.h)(0x5E8E3CC2) +I (../Drivers/CMSIS/Include/cmsis_version.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_compiler.h)(0x68F635E6) +I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x68F635E6) +I (../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h)(0x68F635ED) +I (../Core/Inc/stm32f1xx_hal_conf.h)(0x6933CEFA) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h)(0x68F635ED) +I (C:\keil\ARM\ARMCC\include\stddef.h)(0x5E8E3CC2) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h)(0x68F635ED) +I (../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h)(0x68F635ED) diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_sct.Bak b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_sct.Bak deleted file mode 100644 index 09aa1bd..0000000 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster_sct.Bak +++ /dev/null @@ -1,16 +0,0 @@ -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -LR_IROM1 0x08000000 0x00010000 { ; load region size_region - ER_IROM1 0x08000000 0x00010000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - RW_IRAM1 0x20000000 0x00005000 { ; RW data - .ANY (+RW +ZI) - } -} - diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.crf index 355b8de..b9f96d8 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.d index 7103fc3..aca8c18 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.d @@ -8,14 +8,14 @@ pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\dma.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\dma.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\dma.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\dma.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -26,6 +26,4 @@ pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.o index 2f42671..68ba049 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/dma.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.crf index 65e5557..9b9d48d 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.d index 830fc3a..68ddb01 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.d @@ -8,14 +8,14 @@ pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\gpio.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\gpio.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\gpio.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\gpio.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -26,6 +26,4 @@ pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.o index f05b500..b743057 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/gpio.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.crf index 9184ddf..abd715a 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.d index d2c72cd..e339dda 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.d @@ -7,14 +7,14 @@ pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\main.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\main.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\main.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\main.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\main.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -25,12 +25,9 @@ pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\main.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h pressuresensorboardmaster\main.o: ../Core/Inc/dma.h -pressuresensorboardmaster\main.o: ../Core/Inc/tim.h pressuresensorboardmaster\main.o: ../Core/Inc/usart.h pressuresensorboardmaster\main.o: ../Core/Inc/gpio.h -pressuresensorboardmaster\main.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h -pressuresensorboardmaster\main.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\string.h +pressuresensorboardmaster\main.o: C:\keil\ARM\ARMCC\Bin\..\include\stdio.h +pressuresensorboardmaster\main.o: C:\keil\ARM\ARMCC\Bin\..\include\string.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.o similarity index 85% rename from Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.o rename to Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.o index 846a86a..52ed03c 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/main.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/startup_stm32f103xb.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/startup_stm32f103xb.o index bc88fc3..190da11 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/startup_stm32f103xb.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/startup_stm32f103xb.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.crf index 9a382e8..c54e78b 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.d index 84a26e3..39b2d1f 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/s pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/s pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.o index ab04f99..0369889 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.crf index 122a438..6125846 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.d index 019980d..2750004 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Drive pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_cortex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_cortex.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_cortex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_cortex.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Drive pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_cortex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.o index 17cf640..30078b2 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_cortex.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.crf index d2b337a..f31ea63 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.d index f0ea9bf..c6ff4ce 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_dma.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_dma.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_dma.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_dma.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_dma.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.o index b296c73..e78950c 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_dma.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.crf index 536b4e9..ab9f184 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.d index d1dbcfc..a2a271c 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_exti.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_exti.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_exti.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_exti.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_exti.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.o index af4f22c..d100761 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_exti.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.crf index 488433c..c430afd 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.d index d9617dc..4498767 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_flash.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_flash.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_flash.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_flash.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.o index 70a4546..d2d652c 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.crf index a83c01e..257fde5 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.d index 2bb7981..d4d50bf 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Dri pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Dri pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_flash_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.o index 264a868..8740c92 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_flash_ex.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.crf index 591070b..e584688 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.d index eb5d4a0..99f8145 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_gpio.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_gpio.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_gpio.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_gpio.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.o index 398da3a..5709cb8 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.crf index de654ce..e966117 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.d index bae32f4..196bc37 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driv pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driv pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_gpio_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.o index fcec917..7ae6acd 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_gpio_ex.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.crf index 78c0f68..13b187b 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.d index abb6f71..6284f7f 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.d @@ -7,14 +7,14 @@ pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_msp.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_msp.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_msp.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_msp.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -25,6 +25,4 @@ pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_msp.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.o index 5dfae33..3810111 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_msp.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.crf index 6b3e773..d2112cc 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.d index 4241a2a..bd5b088 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_pwr.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_pwr.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_pwr.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_pwr.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_pwr.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.o index a57cf7e..42ec5ea 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_pwr.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.crf index d277ea0..20dd21b 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.d index 0c361b4..fec2a87 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_rcc.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_rcc.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_rcc.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_rcc.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/I pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.o index 1f436e3..abc712c 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.crf index 83e19cd..f65fef2 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.d index 8dfaae7..ed01db6 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Drive pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Drive pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_rcc_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.o index 98b0fa7..1f4640d 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_rcc_ex.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.crf deleted file mode 100644 index 4e358c1..0000000 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.crf and /dev/null differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.d deleted file mode 100644 index e0c726f..0000000 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.d +++ /dev/null @@ -1,29 +0,0 @@ -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Core/Inc/stm32f1xx_hal_conf.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Include/cmsis_version.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Include/cmsis_compiler.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Include/cmsis_armcc.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.o deleted file mode 100644 index e9fff1b..0000000 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim.o and /dev/null differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.crf deleted file mode 100644 index 7e1a6a3..0000000 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.crf and /dev/null differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.d deleted file mode 100644 index cf9b814..0000000 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.d +++ /dev/null @@ -1,29 +0,0 @@ -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Core/Inc/stm32f1xx_hal_conf.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Include/cmsis_version.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Include/cmsis_compiler.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Include/cmsis_armcc.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h -pressuresensorboardmaster\stm32f1xx_hal_tim_ex.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.o deleted file mode 100644 index d9a526c..0000000 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_tim_ex.o and /dev/null differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.crf index 6bb6fb4..0b3803a 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.d index 595ef0d..9da5fe0 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.d @@ -6,14 +6,14 @@ pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_hal_uart.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_hal_uart.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_hal_uart.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_hal_uart.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/ pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_hal_uart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.o index 1ef7c62..1d6218a 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_hal_uart.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.crf index b0e9d7a..99d8fca 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.d index d5e53d8..7976c06 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.d @@ -7,14 +7,14 @@ pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/st pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\stm32f1xx_it.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\stm32f1xx_it.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\stm32f1xx_it.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\stm32f1xx_it.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -25,7 +25,5 @@ pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/st pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\stm32f1xx_it.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h pressuresensorboardmaster\stm32f1xx_it.o: ../Core/Inc/stm32f1xx_it.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.o index 1eac8eb..d643ea9 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/stm32f1xx_it.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.crf index ed3c497..3da607b 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.d index 5d8c28c..75001ea 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.d @@ -2,7 +2,7 @@ pressuresensorboardmaster\system_stm32f1xx.o: ../Core/Src/system_stm32f1xx.c pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\system_stm32f1xx.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\system_stm32f1xx.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Include/cmsis_armcc.h @@ -13,7 +13,7 @@ pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/In pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\system_stm32f1xx.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\system_stm32f1xx.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -24,6 +24,4 @@ pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/In pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\system_stm32f1xx.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.o index 17974a4..b2d5f24 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/system_stm32f1xx.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.crf deleted file mode 100644 index d9ad1e9..0000000 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.crf and /dev/null differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.d deleted file mode 100644 index 9c93072..0000000 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/tim.d +++ /dev/null @@ -1,31 +0,0 @@ -pressuresensorboardmaster\tim.o: ../Core/Src/tim.c -pressuresensorboardmaster\tim.o: ../Core/Inc/tim.h -pressuresensorboardmaster\tim.o: ../Core/Inc/main.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\tim.o: ../Core/Inc/stm32f1xx_hal_conf.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\tim.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Include/cmsis_version.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Include/cmsis_compiler.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Include/cmsis_armcc.h -pressuresensorboardmaster\tim.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\tim.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h -pressuresensorboardmaster\tim.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.crf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.crf index 9de292c..c226b1a 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.crf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.crf differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.d b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.d index a24a0cb..6223c73 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.d +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.d @@ -8,14 +8,14 @@ pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Include/core_cm3.h -pressuresensorboardmaster\usart.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h +pressuresensorboardmaster\usart.o: C:\keil\ARM\ARMCC\Bin\..\include\stdint.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Include/cmsis_version.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Include/cmsis_compiler.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Include/cmsis_armcc.h pressuresensorboardmaster\usart.o: ../Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h -pressuresensorboardmaster\usart.o: C:\app\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h +pressuresensorboardmaster\usart.o: C:\keil\ARM\ARMCC\Bin\..\include\stddef.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h @@ -26,6 +26,4 @@ pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h -pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h -pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h pressuresensorboardmaster\usart.o: ../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.o b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.o index f383f3b..e66c915 100644 Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.o and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/usart.o differ diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/RTE/_PressureSensorBoardMaster/RTE_Components.h b/Software/master/PressureSensorBoardMaster/MDK-ARM/RTE/_PressureSensorBoardMaster/RTE_Components.h index 1cd8157..509ac80 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/RTE/_PressureSensorBoardMaster/RTE_Components.h +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/RTE/_PressureSensorBoardMaster/RTE_Components.h @@ -1,6 +1,6 @@ /* * UVISION generated file: DO NOT EDIT! - * Generated by: uVision version 5.41.0.0 + * Generated by: uVision version 5.43.1.0 * * Project: 'PressureSensorBoardMaster' * Target: 'PressureSensorBoardMaster' diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/startup_stm32f103xb.lst b/Software/master/PressureSensorBoardMaster/MDK-ARM/startup_stm32f103xb.lst index ed2e8c9..1b5683c 100644 --- a/Software/master/PressureSensorBoardMaster/MDK-ARM/startup_stm32f103xb.lst +++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/startup_stm32f103xb.lst @@ -473,11 +473,10 @@ ARM Macro Assembler Page 8 00000000 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw ork --depend=pressuresensorboardmaster\startup_stm32f103xb.d -opressuresensorbo -ardmaster\startup_stm32f103xb.o -I.\RTE\_PressureSensorBoardMaster -IC:\app\Kei -l_v5\ARM\Packs\ARM\CMSIS\6.1.0\CMSIS\Core\Include -IC:\app\Keil_v5\ARM\Packs\Ke -il\STM32F1xx_DFP\2.4.1\Device\Include --predefine="__UVISION_VERSION SETA 541" ---predefine="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --list=startup_stm -32f103xb.lst startup_stm32f103xb.s +ardmaster\startup_stm32f103xb.o -I.\RTE\_PressureSensorBoardMaster -IC:\keil\AR +M\CMSIS\6.2.0\CMSIS\Core\Include -IC:\keil\Keil\STM32F1xx_DFP\2.4.1\Device\Incl +ude --predefine="__UVISION_VERSION SETA 543" --predefine="STM32F10X_MD SETA 1" +--predefine="_RTE_ SETA 1" --list=startup_stm32f103xb.lst startup_stm32f103xb.s diff --git a/Software/master/PressureSensorBoardMaster/PressureSensorBoardMaster.ioc b/Software/master/PressureSensorBoardMaster/PressureSensorBoardMaster.ioc index 6f4dc18..dfe6a32 100644 --- a/Software/master/PressureSensorBoardMaster/PressureSensorBoardMaster.ioc +++ b/Software/master/PressureSensorBoardMaster/PressureSensorBoardMaster.ioc @@ -8,7 +8,7 @@ Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY Dma.USART1_RX.0.Instance=DMA1_Channel5 Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE -Dma.USART1_RX.0.Mode=DMA_NORMAL +Dma.USART1_RX.0.Mode=DMA_CIRCULAR Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE Dma.USART1_RX.0.Priority=DMA_PRIORITY_VERY_HIGH @@ -22,11 +22,10 @@ Mcu.IP0=DMA Mcu.IP1=NVIC Mcu.IP2=RCC Mcu.IP3=SYS -Mcu.IP4=TIM3 -Mcu.IP5=USART1 -Mcu.IP6=USART2 -Mcu.IP7=USART3 -Mcu.IPNb=8 +Mcu.IP4=USART1 +Mcu.IP5=USART2 +Mcu.IP6=USART3 +Mcu.IPNb=7 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PD0-OSC_IN @@ -36,7 +35,6 @@ Mcu.Pin11=PB5 Mcu.Pin12=PB6 Mcu.Pin13=PB7 Mcu.Pin14=VP_SYS_VS_Systick -Mcu.Pin15=VP_TIM3_VS_ClockSourceINT Mcu.Pin2=PA2 Mcu.Pin3=PA3 Mcu.Pin4=PB10 @@ -45,14 +43,14 @@ Mcu.Pin6=PA9 Mcu.Pin7=PA10 Mcu.Pin8=PA13 Mcu.Pin9=PA14 -Mcu.PinsNb=16 +Mcu.PinsNb=15 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx MxCube.Version=6.15.0 MxDb.Version=DB.6.0.150 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Channel5_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -62,10 +60,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false -NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true -NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true -NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA10.Mode=Asynchronous PA10.Signal=USART1_RX @@ -135,7 +130,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -158,10 +153,6 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.TimSysFreq_Value=72000000 RCC.USBFreq_Value=72000000 RCC.VCOOutput2Freq_Value=8000000 -TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE -TIM3.IPParameters=Prescaler,Period,AutoReloadPreload -TIM3.Period=4999 -TIM3.Prescaler=7199 USART1.BaudRate=9600 USART1.IPParameters=VirtualMode,BaudRate USART1.VirtualMode=VM_ASYNC @@ -173,6 +164,4 @@ USART3.IPParameters=VirtualMode,BaudRate USART3.VirtualMode=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick -VP_TIM3_VS_ClockSourceINT.Mode=Internal -VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT board=custom diff --git a/Software/slave/PressureSensorBoard-slave/MDK-ARM/PressureSensorBoard-slave.uvguix.kkkjt b/Software/slave/PressureSensorBoard-slave/MDK-ARM/PressureSensorBoard-slave.uvguix.kkkjt index 9752330..cc19a8f 100644 --- a/Software/slave/PressureSensorBoard-slave/MDK-ARM/PressureSensorBoard-slave.uvguix.kkkjt +++ b/Software/slave/PressureSensorBoard-slave/MDK-ARM/PressureSensorBoard-slave.uvguix.kkkjt @@ -101,10 +101,10 @@ -1 - 239 - 335 - 1775 - 998 + 402 + 314 + 1754 + 1161 @@ -1805,8 +1805,8 @@ 59392 File - 2827 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A426173655F5374617274960000000000000012000A426173655F53746172740A636F6E74726F6C6C6572067461726765741148414C5F4750494F5F577269746550696E155F5F48414C5F444D415F4745545F434F554E544552045F73696E05666C6F6174055F73717274056874696D32155F5F48414C5F54494D5F5345545F434F4D50415245057374617465134D61747269785F436F6D70726573735F526F770B6D61747269785F646174610C6465766963655F73746174650B63757272656E745F726F7714554152545F53656E645F4144435F56616C75657305637263313603637263000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2588 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001748414C5F554152545F547843706C7443616C6C6261636B960000000000000001001748414C5F554152545F547843706C7443616C6C6261636B00000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1866,7 +1866,7 @@ ../Core/Src/main.c 0 - 189 + 418 1 1