From 069d0f20194d4b7a98059b894fe7454ef07e4d8f Mon Sep 17 00:00:00 2001 From: Andi Kanzler Date: Wed, 8 Mar 2023 12:43:14 -0300 Subject: [PATCH] SITL integration --- _locales/en/messages.json | 120 +- gulpfile.js | 6 +- images/icons/cf_icon_setup_white.svg | 18 +- images/icons/cf_icon_sitl_grey.svg | 16 + images/icons/cf_icon_sitl_white.svg | 16 + images/inav.ico | Bin 45997 -> 45188 bytes js/fc.js | 3 +- js/gui.js | 1 + js/port_handler.js | 4 +- js/serial_backend.js | 23 +- js/sitl.js | 270 + main.css | 12 + main.html | 3 + main.js | 6 + package-lock.json | 11029 ++++++++-------- package.json | 6 +- resources/sitl/linux/Ser2TCP | Bin 0 -> 23071872 bytes resources/sitl/linux/inav_SITL | Bin 0 -> 686104 bytes .../sitl/linux/libSystem.IO.Ports.Native.so | Bin 0 -> 24120 bytes resources/sitl/windows/Ser2TCP.exe | Bin 0 -> 5344256 bytes resources/sitl/windows/cygwin1.dll | Bin 0 -> 2951221 bytes resources/sitl/windows/inav_SITL.exe | Bin 0 -> 1029956 bytes src/css/tabs/sitl.css | 86 + tabs/options.html | 10 + tabs/sitl.html | 157 + tabs/sitl.js | 521 + 26 files changed, 6597 insertions(+), 5710 deletions(-) create mode 100644 images/icons/cf_icon_sitl_grey.svg create mode 100644 images/icons/cf_icon_sitl_white.svg create mode 100644 js/sitl.js create mode 100644 resources/sitl/linux/Ser2TCP create mode 100644 resources/sitl/linux/inav_SITL create mode 100644 resources/sitl/linux/libSystem.IO.Ports.Native.so create mode 100644 resources/sitl/windows/Ser2TCP.exe create mode 100644 resources/sitl/windows/cygwin1.dll create mode 100644 resources/sitl/windows/inav_SITL.exe create mode 100644 src/css/tabs/sitl.css create mode 100644 tabs/sitl.html create mode 100644 tabs/sitl.js diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 20c10653..14d554e8 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -139,8 +139,124 @@ "tabAuxiliary": { "message": "Modes" }, - - "serialPortOpened": { + "tabSitl": { + "message" : "SITL" + }, + "sitlDemoMode": { + "message": "Demo Mode" + }, + "sitlResetDemoModeData": { + "message": "Reset Demo Mode" + }, + "sitlOSNotSupported": { + "message": "SITL is not supported on this operating system." + }, + "sitlOptions": { + "message": "SITL Options" + }, + "sitlEnableSim": { + "message": "Enable simulator" + }, + "sitlSimulator": { + "message": "Simulator" + }, + "sitlUseImu": { + "message": "Use IMU" + }, + "sitlSimIP": { + "message" : "Simulator IP" + }, + "sitlPort": { + "message" : "Simulator Port" + }, + "sitlChannelMap": { + "message": "Channel Mapping" + }, + "sitlSimInput": { + "message": "Simulator Input" + }, + "sitlInavOutput": { + "message": "INAV Output" + }, + "sitlLog": { + "message": "Log" + }, + "sitlStart": { + "message": "Start" + }, + "sitlStop": { + "message": "Stop" + }, + "sitlStopped": { + "message": "SITL stopped\n" + }, + "sitlProfiles": { + "message": "SITL Profiles" + }, + "sitlNew": { + "message": "New" + }, + "sitlSave": { + "message": "Save" + }, + "sitlDelete": { + "message": "Delete" + }, + "sitlNewProfile": { + "message": "New SITL Profile" + }, + "sitlEnterName": { + "message": "(Profile name)" + }, + "sitlProfileExists": { + "message": "A profile with this name already exists." + }, + "sitlStdProfileCantDeleted": { + "message": "SITL standard profile can't be deleted." + }, + "sitlSerialToTCP": { + "message": "Serial to TCP (UART)" + }, + "sitlSerialProtocoll": { + "message": "Preset for RX Protocoll" + }, + "sitlSerialStopbits": { + "message": "Stopbits" + }, + "sitlSerialPort": { + "message": "Serial port" + }, + "sitlSerialTCPPort": { + "message": "TCP port" + }, + "sitlSerialParity": { + "message": "Parity" + }, + "sitlSerialTcpEnable": { + "message": "Enable" + }, + "sitlHelp": { + "message": "SITL (Software in the loop) allows to run INAV completely in software on the PC without using a flight controller and simulate complete FPV flights. For this, INAV is compiled with a normal PC compiler. The sensors are replaced by data provided by a simulator.
Currently supported are:
" + }, + "sitlProfilesHelp": { + "message": "Profiles are saved locally. The profiles contain not only all data of this tab, but also the configuration file (\"EEPROM\") of INAV itself." + }, + "sitlEnableSimulatorHelp": { + "message": "If this option is deactivated, only the Configurator can be used. Useful to configure INAV without having to start the simulator." + }, + "sitlUseImuHelp": { + "message": "Use IMU sensor data from the simulator instead of using attitude data from the simulator directly (Experimental, not recommended)." + }, + "sitlIpHelp": { + "message": "IP address of the computer on which the simulator is running. If the simulator is running on the same computer, leave it at \"127.0.0.1" + }, + "sitlPortHelp": { + "message": "Port number of the interface of the simulator. Note: The RealFlight port is fixed and cannot be changed." + }, + "sitlSer2TcpHelp": { + "message": "Devices with a UART interface can be used with SITL via a serial to USB interface. Especially intended for serial receivers to use the full number of channels. " + }, + "serialPortOpened": { "message": "MSP connection successfully opened with ID: $1" }, "serialPortOpenFail": { diff --git a/gulpfile.js b/gulpfile.js index 473a4d26..1f6e807d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -136,6 +136,7 @@ sources.js = [ './js/waypoint.js', './node_modules/openlayers/dist/ol.js', './js/libraries/plotly-latest.min.js', + './js/sitl.js', ]; sources.receiverCss = [ @@ -252,6 +253,8 @@ gulp.task('dist-build', gulp.series('build', function() { './resources/models/*', './resources/osd/analogue/*.mcm', './resources/motor_order/*.svg', + './resources/sitl/windows/*', + './resources/sitl/linux/*' ]; return gulp.src(distSources, { base: '.' }) .pipe(gulp.dest(distDir)); @@ -268,7 +271,8 @@ gulp.task('apps', gulp.series('dist', function(done) { flavor: 'normal', macIcns: './images/inav.icns', winIco: './images/inav.ico', - version: get_nw_version() + version: get_nw_version(), + zip: false }); builder.on('log', console.log); builder.build(function (err) { diff --git a/images/icons/cf_icon_setup_white.svg b/images/icons/cf_icon_setup_white.svg index d79669da..7501a9f0 100644 --- a/images/icons/cf_icon_setup_white.svg +++ b/images/icons/cf_icon_setup_white.svg @@ -1,12 +1,16 @@ - + + + width="283.46px" height="141.73px" viewBox="0 0 283.46 141.73" enable-background="new 0 0 283.46 141.73" xml:space="preserve"> - + + + diff --git a/images/icons/cf_icon_sitl_grey.svg b/images/icons/cf_icon_sitl_grey.svg new file mode 100644 index 00000000..94072aca --- /dev/null +++ b/images/icons/cf_icon_sitl_grey.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/images/icons/cf_icon_sitl_white.svg b/images/icons/cf_icon_sitl_white.svg new file mode 100644 index 00000000..018a59f7 --- /dev/null +++ b/images/icons/cf_icon_sitl_white.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/images/inav.ico b/images/inav.ico index e180941b54868f816279ed2e267ebeb64f826485..24501afed45bdbe4001ac6b8a899545b5269abc5 100644 GIT binary patch delta 28305 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 delta 29141 zcmb4qbx>TcYl*#y?y(~ z)>iFKP0crV?!D*q?K!7U_t$*_*5S%`;i6UG2<>9jNMRAGt<4Z%QEUGq1fvpQ!TcYu zk#HJ_!y9+_zbS0B$8TWY!Y>x_L(a+F|ARIZ39xh!Ujzd9v#HMza?0|z!O#X?o_zn) z%yc>jWS+7aX}MGorVQ^{-)e0C_NfFRRQ{F@4b#B;R6Pp7d% z!0(`#&JMxn{D&NnX(-NQyo1DZK{4|k1kBwIKbyq~!RLWuHWy_2zcHS-9eyr{8v^Eo zVlFoXpT8Y`K92`7{ofcb06oss&3iWDzW2yCN?o zq3O18{Or19qXj;V>fE(#J$=6N@EDdq6=cT3k?=*A(~!C<)!EwJAKO;G#U2``?$og!8r47r5_4H}&M;8a& z>^I<<)I7_#HcX@n{toU8Y>3yx>h~Va(D!T=c;f~4SX!BG_2!>Yan)w<0EP(sdYn%s zToFnq+!N0kVONUd@&*!#xgoI%3?=Ldd|8%4mj*1`-9;zmoo?2%USo|f5{Z4^yR+1; zMCv)EE-Izwh)t zeTLu!Xg}F$KOKGa*E<_nTK)F&ny}j55f|LC9jw$zVW}LRy);_1;f(k(%=r zOeXn103Uecw{grAH$4M7!#0*zMSN%dMe~;@r$a{m zwCU2$QVTsQiSo>lgsP1C>|9MZ5~rjx8aF2xyBp|B z)+&1$zO76*GEQOXJB3r8@u3B$Do>QwGNeRro@6_rf=H`TS||Rm{DGx;ha76HNmxfR zPOHpi+q)#AUAc^PJ!0lx=kqp$hc_$Cqk%s7S}?4maaG%%`HggYXx26%XF&h7{FhmX zp|gT)rTPbaSPRMRP=a{Y&pBbgbe$;v$p5b}+Uu5H-^r5{)tm@h# zA)4OONpgMDv)+snJ&xK#9|c2~5CE1>&s<1bFF%}QWw}#{bM6Iry-gKyUCR|N(rGoI zjnGNXe>buJ^a~mL-Samww@dUy9*Kv=F*Etr^3#Q+bw>WY{qW3XJ5@!^ZASjNq33R+ zDX-%-ghEpVrs2AB+|`80>UTyWa^h@Cq;-J*)_Jfb$8UN7xj}b!&aJb?66EOM%}n3I z(&Pz_HE796jsTQn99z==63^bnv+6dL3y*akQEbk?=qL@ZIA|09rhhGGu=9zFpPwcd zMHO>1LDy=K8sEn#q%XPfEmyWa3_Y*(>~}x?y*6gpJ3Q?DIF3opO3XpYB}n8LU+*H5PFXz?BJ9gN;kob6|n{E@{RM>`HKt(1ROlBR~ zJs7Y8&TiMYk78?KwQ=}(iJxY!kF5{GkqO4;{RY=#*o0M7t8492a&vWp3d2V5hVX`Q zYQNd2<4fe_AP8w-^VRh=7x4G-wp+|J_W#^}Q4EjEK7&4C6}!z@^D%9F@j>&Bo|{;u z!okynv&~XHi@e(7mkQ(WPCNrvg@tqO9x1;7S{^EyV% znZ~~67RJ8%b_>3SK6$C9d$K9KmB!|fdJF&Y4xy3kkPXCv-Otr!&5cjHus*z9koeax zJXLghvlQF6c1MPaj&$!m2CFB?q9};AtKoBxNRz(OX!XP4fhDHFn)=e}-~bk^4^;Vp z)MuRGx_62Urt?zOY$>@UT274aQzlSh^W#^Ps*2BU*2!Kkx4*s#CuC3RwveBjBwN3= zv)*mFNwV``UcWNVpd=^S4t|uKUlt$LZZLjSEaHm-D@#w{1(dMuI?ng9&3mcHYBspg zH9yvT^0roFJ^XCsYl?*2kNz~C7(54vrF9zKk-;$f%)&E%xtj+?q8=2&Sn8)#zGFk> zckaLQPZicqE;ux6b-yHs^%VKQl zCstG}VKa3R+0AekYoPyo5>9wgBt=x#0H&s-V9S}me+hm`Bb z-O*XuP!qIj%$bSBEdPuQd6Aani!xG+P{d0b6Gs2^?k8PeO&j+ zBKiAdRuCa^K#}9Lr2*pf*ORxwm2EszjQ@A`;1JLB_}*#%t>q(#DwCg=)XPhkF|kof zbV_A=*voT(>hay-GoTu3S6yb!8-_0_%1$|vEbr` zw8d>TLbQ&~X*?%V75{$g(*LN)g+UGe^#CpPjR9hnb@t!Kl~tJEFqCCauI}Amh3NMj zE9-dCUW3BB+o4J<9()d?qi^&29xMKG0^9MRAU-7>rmYxjY!)QP;7c-L9p(ihXGI7t z_|{8HR7`|RKd6B$Gq(!x_w_d*98+*ZZj$;RoB|SqYm^AfxvlkvR5>~-*Rr4jG4h-= z=R>R(+RS)8AI$Ey{E_b)cU3u4SaIzXqW4CyY!q^2>JMDR5{{HuO8hAJe-?Zj(LNi= z=5!&;G*osBw~gA?(vUJybc`eaCD?zl6L<`vPC^iStCaEbunGt=pjN`LQ^{G_J$h~J zys_Q0r;MZ5xVY9rzJr`n7>;+bO=!j$YvE25AcTJUs-7Mw%LFHCn?;{PMlpK%x8v)= zh7jq(MupW(MxKg>)OMdQnY3aCe<>*B*!Omkzs|wTZjv|MLcXKZEI_>F6^0`-O)5(3 zZYfP_Vj5pZ3=NRZ>T|j>j?;i3QmhJFd!oBAsOyWJ+i*r?wGtHr)Kq4)P*fV zd%6IZx7kQ8I9qQkFuY#Io?W%i7RM z+~JyDCSMXr_lRsTleR*r4)!j2IOQ%Gq+BsnYOL_G*#}H{?PUML7>kpu%a?O9R?GEh z8Y;}{1>mm4M%aIu~l*JG(R=DYd%~nc^W+5xb6k!^IgSg@=ZA| zzxmh=JHUWw%^*`)deEr?tbsr|w=i-|&Z!sMbRmjjVDdYYdHo@h2>Ppa=1-^hgK=Ij z^N^=;*~oYL33;ulA&vRR&K>BP&;6MO22G;e8%PSeDX)(UOu*|M>IMB&H5+W3r$*51 zHAD5*#zouR!R=Di$-5JsuMgvx9T~(DNgZ|FfC}))%l`8lib5%UHf#2|q81uNeV_O-(K;)~?bqhCE%S(yr^$E_ z)YoGp>~j` zd*#d>PKJK3mu0Or$_HqjPSV`^s5TSXDITLJPYb6El3(w3f?EO*&{>OYBi>F9N+e~Y zxXt!sXt`>_R0sV^<;>jnkHhh{8?vX)Y-4++=_doVW|0DOQQZ_19w)&nd3gIEkZQ^jcBkMkZMlA*B z>2U?M<9Z>B^;xS<#(lRR1I144;kX?6p~S;zbxmEX5#qqY88 zQb~<4Q}nv2Ho8(Jly@=xGseB1X%}2#uTb)|83sQ>kTzQk^}FqK5``FBVc{MRJE=F> z{?bOLZiyM88L-6clT zsR;$3eqf9D^IOdEi+sXIwGE_+odDqZ`tzRFuR^q;lzy$ZDqQct_FkRrHuj!cWL6g0 z)3#H0`H+U3_IAc@A;QX`mtr^rw-cU%0&E+3Ay4NFkdb0ngQD`buB@4WNQ$G<3h``{ z6}Tt8Qz8OeqJiaL8BmG(?mrH5U>f9n=Soh(?z>Yo1a+xrZw&ww9}Nv@oN@~w@r(Gd zX*6ux)hhT1lNs)f8HhqiXgf&>+y1r$0TqloAj7}X%DgwkjY{Vf*!qcHU*Dv&)$!*K z$=cq}rgA(nE?#Dl46Ni1AxtVZ&MU6A#I zWXTCXfKg@qtiYLhfT?e`UiSW=TYd=Eo#1JC!%Q7)uOG~vsaUXu>=|55(;_+?`(+!+ zs*#>Pv}zNzLY}lv`WQvg$Q^<^MUPaQFNAnkxBre_WSW1tm7gEm)t;ucK~&}=xzQ(f zUK@mTK#NoLZM>MCJE61`6?3+5_V}Y6N8kE7pmT$164H=&@SR2FTc$fOTY$0Hf>Sq8 z@1D(;LI6L{rJ9+sy%@|WD5O(1{1pdrjyJ{3uwiR%EMinWg_np+i=ED&TtV4Lvfupy z@Squp?6An$Px|5A`AJOCv-C2ZlzV9+HH)?4tEM$Sy&_i{=<=zHZB>Y8u;cuL{z5ql zARwT=HK!TF`ZGx|gHACZJrjJmZ`%U@&(8GmsqgR zNU#+b?5jiFFH)b%it}MWuv?AZNvyQZAO6}%UBX@JBLE78Pty`sDCY?X0e`;BL!v&bwDtAwxY60t*$|DK_snlIbooh}BR z1=EOt7~#E$4Gfq_Lvp*665((%C^t7KuBz6Kq?#uwSXDP|fy&3#X6Q_qzfKqpc>P!= zPwaKI^9I@@FVMt<^13vM2MTL98Y_e`3K}}di^OPBCm(sJ5_wLETemcupXU!Owz`>E zVWF;mJQ|oSxZ4{gkL>Bh(?^Y1ZO%@21;6n|)W>f@Z>u zIY~m@Dy>QjBaPZ)h0h?>E`o4ch_nLxhYprv|9UsWhjV^8gOPl#s?HV_rW69?;MyWi zTCB`vZx_vMlui$2Qe{{;&oSx>R;d33(p#kXRpS@I*r<$zMV89Wr3<(aT!5L$zv_VP z6q+KcEeC*TFWaJJ+^WyK1aUnu?=&S^hwGeZw7${lehAZC2Q~V16tTFiCNRwIR}y|I zbb=Z_{~f}H<$+HOSQw_mBXMcSrm`Poi+6_cqB%<7$k~rG2U9Ud@FsTkN=wtkEYaFr zHTuC5ZqQixyaS{x1=PdbAXEN&lAAFe>O*W5&CUfM;_R8d6&;>}1H^qiyi5Ff#I{rw zeinsVjohDGhm@g)mV8oP)zhv{Z7FfJfEs=YSG`8@KVPoh|Iqss`wd!8==@I2AsJf2 zFhqP%#qDu^v=cHgEiuftT==$*rrv2Hq55GrGUK4p((WL<7VsW3;WroOaA)+Hj~xsM zgOiix#jv3EzYs77g7?Bw4$Iei#L=m`)dCK;DY)GsI6VytTKa*;R*G>uSQ?Z0dq0cI zRGBC|uVJaO3>8fEO<^1)B_Q9W#}MVb?(~>6{NB3|+zQc=a$_%8HSv`(=hV;_&ur0B z`Q#90I^)~e0x#aan>|`Eb9^w3q+aMIxWzwHD&}xdT5#(FD<;8#E|_`X_H&dhYxz)i zlf6*C8oxq6JZgJx0B?w(00nS<_~=Ammtt!~04LD)@7F-FKeh`*gV+x@z3Du&7y*Y2xg+P+;f<1ym=~Bv?%Iyu<-73#XG3uL)Tjy0G$heLT=A8;_#cW9VqnX%sxT?ncJLK zfR>uN1eJ?DBOl7l__@C<4XdHEyCG8fv@sLACg<=EICEjwGaNpqk)FT@Gwj$EVunS= zbq}mGBo8laf@R}l?Su+^E`plTN5KD7j=7oZv2QAxze7bq&Lkp&kyQl{RFnMtmA3jB#A%YYY%KRR=p7HO#v9&Cr|w|Y>xE{+v6dGjHxnaQUk zM8tHvb*s0q$|lp3@3zBQ{y~3Zrw_o4pHBWwqh&1KG1gsoLB;)KzfWpC=|emsy+@Yvarr zO%cfJ65_~QlQT$DdQ5CMkIaeLSZ5s_w{QX$&dm_GhnX?`|MxC9Z6LPpRWAy^CM>>JO`}d{P9zO%3S+eG%-+ z1EpBCz*5|?NlsqE-s=_JR*}Hfh)f)!G?ud{Rf=8O)w$u25V(*Vyig#!Int=J8na>X z7Hl)-HAbNP26LQU=nU^lk;0|S^9R+lSfqr5dM~^hR$3Z6R~$(A%j*w!*|dzN{_`}j z;~I*xR&vO|-I3!DFSA{$%GJ4%>C(wMh9i&Q0(5KWGCfm4ciNu4=sbJ^4J2<@76vm# z`F~e8vv!IaqALbmvjbn7RKvITGMTgM`?UVP%>o)m_LE~bCDJj=IcM@QU6kX0NSf>7 z%zy)4J)**NhZD9AE3azp41*3oXsTY2xGP6Nfw5VE+VJ z81%GEZ+}egE`}QzxHM1Rl3qu)S7(BuHsmp@0ovAzV1zUpD1p~%+9_V)5*YKKpoQt) z>JXiq&OcEPN6b#rRKDNlbByIvaFC#UL@obq)0ZoEN!c{dM(2y-T_i!i?Q#UXqe}#4 z!r`k(4GpD4`azbN4&QqWB|>GFsIBJ7?XoBG(%7SU?#Nk+`L;8=!>hLX`8vAS`yPvz z-Cx1UEGc^>etEp$u;moz%_m6S`!5n_{ zUu_oFGHlY9=JsFe`9On-1_zrQl!8j1KA3`8&oc<59C4B(jq38`u6ZCjQz|uu%_==_ znf13%rpFS?gk3>hY5m(~8bNf{HEb?rSMlA8?5Dc&n) zs&2qL2O=@5Z+K)h$V6?`6#DLu(BZxMWKoy?67NDqD3fnBxHM6?OPrN)Gk@KyDc(Jw zAcJzki|TG#Ze|J+RaSHZ#rxZ>uy0RDHcp{3er;Hj3#R|7EPZEpf&Eh1_IJQQ#ObFF zdhGHjv_B874^FU|w4n1KyQc{U6(s`Bjru?l;Y>A85tvTyF|%_m z9uS3~nDmMX|JqDOz>n2dUGoh5yW-FfoW#3!8K=8el~0)J+<^JkWr!qQ)sMx4+-~GY5=&z^2=SSk9 z1bG+U^k&oc*p(XV^-fn^!bUfgPI~&=_Q~s*LPi(NqB+lcB`Ajn*3M-UW0`O-4B zY+yLZy=ZmmN~*cSL2D=9Sps(xzT@6u7bJTdamIK{X=vY|R8xyei!Tg8Zao4sr;9Jm z41$(ddS2@j2~l2qI6AF>TomyYvPoT>mJOlT>rm4ic7s|Yz&4y>_R`#$o+iB$*(Ui}C1`=hX`S8;l)h{2{7%g>@$L1( z-J}mLlDa+`i=mC&cUYCjZ%twO2e5`+BdnXT0Fv4A^#)AECF_w%?T>k767sgx@LfK#G_* zChk#YiQki(e&Wqd;X;J6lU@$DOtVh?g92o1@_T5MEfo>n^Ee!sJ6>i^*IR)(%v(4P zFBi#Tc+`N~taEyW!rILW0#H>BQ56@L%k;-lbBZ^1#YI^}?v8cw`FpsK1Lb{F7CmsB zdat{BK< zvC$Jv+{^J1Ce!1L3L-6E(~1hhcIIUT!&iD000F7OMqYa@d^qg8tPGCyFQ-$CN!3)4 zNPQ(r04Bjb!m0Cd7M80Enf0}OEel2B)jFguT5lHOqy*v8WVef`G2$R zb&?DSbgW)2R?4xw7XIDVAu(w-PqQs}qOpPak_48{VE3pOU8#z62V)#0N32 zm&`Chm-4=a@Yc88gqh-_T3=2WXA&A3U)kA|;4+aJ9y{*^2N0<7x+YN_>T#XL1@`C8 zAod|^f6OCGQ)r!9^-QKorkZL%{oM}0;}A$!8=;%wN`fJ&hdy0O9WOLx2t9bfJd8mn%<^XxSg($V?A6QUkghqa8num5P3T)f{Ra_A2Z?E zNI|~vSM=9IEqeXoSe%Y_BOg`oQy5(7Fk>xlkMG%Mj}aiV3?%ZfgaBwd=xG8d*SEHC zAUya-phBOKuGF%3aY`}r^&uk0(!zgA{tp zxmoN24g2HLh%&Zsz|1(a%c>(tD{tS! zC>Yu-7&VD$BN=skposv-lqj`RyymGoiNqI{AnzTpo@!{^3YnBTSkbVa#$Q6 z$7y?gnDBGJYrWt)KOsuzA`x6?$D0L89O0h>ho9)1cW2o7c$?8*|2X-IcL3s#LA7+k z+(k0cSyf+b?5$L_5!6{OuQ`%npW2Nq-eiUjt%T~GHEtpu^t2Fc=>T!k9&wE6Q=syG zXHRvZ+19o860|SrOy|vosxj9n-1X2@Dr2MTxnp7@)@&U8q8%(!THM&N{)edCOrMh2 zuz|a|3pRnce$* z6k(?(!qgMMCR+UQ1c2>F--+eu9LQLCa(JJ4UTrS|+JCF4u#wU;uD{ZgxwO*PQukOV zuFG?Olq>6gvnOz#K=+yLdx1BH(9%|yB0GxONsR-ZS_Pc-C`Tr2+wfOZwL>L3CcgyI zEhBaJ!Xh+e8OPsVF{Gag_22IF@&u-~Y?O^l35aSy8HN6m2B7%c;HsF=zhPH0bQvtW zA6{&|uPuh__HagY>+Q%<*#F)9oN3m%|9*3^RbRC{9n*=ysp9x&HPF`ezG1|AaAO)5 zQWjQPW}(xT&)|#f^5&v&b$ML7gXXE2zK(-j*SV@`^m-k?T;2Pz|IJEceR7^`Q&p_R z`9DA0AX5+sNeIQZ8g7z((Log~a{gYGWM*axv-&*)RxeJb%j6Hw7h%zeFMQ1{{M#i6 zn$&ZD@YbD6WAiWqq4o?SJ^WQi4H#keC43VxNvt*B_8wKl(JkDwvp#Bb)14+6LF=aA z?(TTm+E(mVrZ}OfAK!-4<;^b9=zQaTo11-rGDscxq!s6b(9!A`E&gN82lSM#yjOfc z`-ezCr1|6oI1bZAv>~%z5?C}>ZG*<*Q z7?xXpw~$LP%|GnA(WG6=;(|Ln(FSh8xq_WS%mY9o<~O5IsbR zdc2jxYR7jLNl+w~b|RU2I(F+9zw5 z7kI81pwn9+*@gyVkNp==HX7gr^AMi97caX-jx$SU^IO=1J>zVaQK5Aj6J(gCcW8+@buF=G_hZa9m-&;2k6gR-@J__}W4Bb0uMq9ocz zAJ5p@#)TM%75wlLEXgG%2`!*u@l_hB3DjXTB2bVD+-d<^c%L^+|Es5v>w5TZ5~eC9 z+~tq|Rz)y)}6U_&xhgv#mQQSck;ul&UkE5rzFNRqMp zXa*k2V$GiKcuU>?E2NqXxc>bWI&H8p(xuF%LQy-RG2Y~@uUXQ{eyJMFYl}84!oopE z7gau;xY+Ox)6Xt_nGE&9unwaH2}hTK$68b?g#5Ds&q z`}j1u*ItFQQ-S|H=}pA;eY&hF=R4ho#4mkZpXTe{-mn#!QA5~Jb#-Z;&X1S%Rt{D= z-g(_f&I7R`-iC3V_v_d$85uotQX#I!YP9vsu=}Wtw7WwjbG!ImrR->30Abg7=y863 z+9cT1r^~Sw*Y%Y=nCAn^RZ+Lv%GN}>f4IuF&ME;TZfV6OqT}t(J%6!ig@e0Q_%f}a zOieu13cLS%CI$N6g=^1={FgJB$?w^Oxnj37?0}O^VPT{yr+6vZAZ=YV5QT(#V%d4( zRiYX~NjA28e{@jy4Fqx|D%cIJ#7TkIi(Vj^N@7cb1`)OQIm}G9>$L&x>Fzp;0a2?f zqxd!}Lm-UIcKdH^1G^N$Lk6#FD2xmjy(y4}Gfza#>xJyI#gtppL={YD1>BB_OFkc8 zpi8F9Ro_eIJ-<0NxyG#9_8fxh5qW=XEO?Z2qkl-~uTwAYKR3&hZrpt3>S(rkv##@p zk!%+4@gQ^zoJIT)adr#WW>CrbUe=JJ$cCpZttunPsbhQ^f@-S+IS0qWnMWOpI9mn{ z`fUsQww2NM4A`D-l#rajqlCsJ)7%2>OXGzduF;f7@JYp>m?bIMlwDv>NWS_UkxCba?0Sxo2h#) z;QY_m3{ftXHhSr{+QH{TQmhXs-;_~ZjOl^?{0k>E;$_^v~4Mxfheq&cVW zn#fkvP=2uZoGcUAp`(22dGm7R`%FeOhGU};`*}JvCZzI-;?zAH-8(av0_y{`=EIOa z_b4-ITjMR|`f7$~UwW$UU3IyQ-aI6SKD#wz0Ud2B7DJVA-rF+vUoiGGXkohPfS2f8 zh!7jpqi^-m*A%#IUmEZST7!S`(f_Q^KO~{ziT!zTXCG5}O0<#KaD8`%d-5fH>qQbW zl8}D-r?%3m_HMQE&E--z_K9BlM$0tuf<{njri_~QM=n0yZ?3C6Q74q^A@I3ml%rp1 ze$wUkrpE3$Y{n8i3G(1|!7-&Mq>Qbf(C*frV+}3f*{9MXlHq zr2r*O#u8ShPrWv;aP~eqR=v6!y(u_x-=!l*w&pvHem;KLXUr~z z*6s*>M6!|h-)WMd$@ylE2IqNb1I3%bA>H6aob3Ts))Jo%`t2yI~63|amNJPnc zom4^e7O`o`yBN-o$>GzIn4%ACBqmBbediz?a1WuerQ<--a(=rAfolc2XR|J*xaCruH@5r+0vmv3DQY?xE-{!wH7;hKpL0YpADqXOYese^QC5we?hviVt?Ha5B-XBdTrt`A!zjqVYI;5fXA*K?!DW{)p$qIa zEw>s{v6JJfc%?ip#@>)$+i|?dnXpE__iGAJ{(us|5dG0N(A7uaD4s)9{cwi8vH{U|(e3-@_2fCZOvTeeb(IRg z`&G|HRu)A#>ZOW@lT^L)U*QO?mXu56;gcAH*pQN5=RW?|m>4!owhfCVH14(MNd;y> zJ{>18o8wPX77Jzj5<|u^nLWJ$F!@kPJfJ!qw@y!3A4e(ml4d{n2%FXz?Q-_<*Y1|u zU=2|^sJsll6u$q0!6Z|iU;=L=w0+59?MX@!Hf`V?-uj|M0X?(4@P{)U?o||F`=EW= zxlpV_}vQ$K$3W8+n(bl|H-&kA?9i;9-2v5a-00wo&1|N``qO) zSMOuThsFI>+wEYB;HlL+k+;?oF6Lp2+=Kz0G$z$gWc7BcI6*XR=jn%$vJJhlLG>2NCS{V%f702=GV2cM%GDLMnU zAM&B9J|tFL*x50yXRAc-Tr$Ueu*KGi6{QtK6AOCp!@BUT&CwAu?1s_7P+E|IrQl(4mW@8nHB=LH<=KM(QQ&uX>m z>>ah1T>hZ;5LWWB%UdZ7j_Nyj-&`cT=V!iE-Vqc?la4w-$1_Kv@I3!r`P%*<>(Ta$ zwsKbcJa_u7_a^rd2f{%uCQ*T}M3SdiS6D%o)9f5OwV{A6V0vrMuJ&-#)PK4(Iasj6 zWJ)z~Yj~CXv8GsX=yYXL-cuy$@OLBx5^g+P)N(RD;9*2R0OmEBQ8zq{=x6V8kIXSS zKiW?=gu~REC)hMGeiV}iY*8qrau#klC(Q! zNK(0(ypw$e!e6-z-|##2-H(uZxc@r%`^3BP^{c!m(nZiTv)FUc7u&s1pE*NXID$X^fvO3VAJ>2`D@CRzoPZ`r7jDmJ1=9V{ZJI$DvWSm;*#ZdtZCMSC5nF7pD`53EIbYJGY zzlTCObsP&7tv=GqEARWIyVkQGMD**y9^nA1xQ8WZ_3dYH^Faib^A`+m1>&nZEkw8^ zmL#v!KM4FTeWj79l(YB^byAY5`~E$3bgL^X<8`RXbIqwQp69Ol;sn_iqQlo9>0e0D zktAKoijpBB`0HijskvYU{}IX5&FK^+#t9=k<5#wGMg9StUnAq%Q)fGt@h=g%7fZks z6z&?SkwP`Tv;scF!|uTR(4|%}0*^ePbv0CDNlovy8SfqR-Grt%i#wbu!`Q9O;Ij%= z6qVOXFgflQ8>j)6`@y<6D`vSc>O2yqwts2I!4P;(RB~g-G0Q6c;NRqR@9yDNKk(cP zLm?*A=Nn@fDPe~Dh*aRdRxc5*Sq6Nk%uXCojCK)5{T}V@v-X3ufU?A400O&L95j|i zA^k#G6n$Bjh5sqFbH>9@7Xk!VbV)vc)*R zCQ^JEN_7cJY|95lrCdPp|9LfhV8E;o@ZsFaY5_QS-9kDj;n7^4HPe5R%55?+r4%{hH z&|TVb)R3YzVInH=>lI@b)U5-Kl2DtuXq&l=nz?G}b=6U*lUl?25-YtQds*w>o*;L6 z9AxS0HNw)X{R*VbI4*W=X7z36aMjb&f$%kzi1tq(bMiGv?J4Z#VaEStP$P#kQm_tl z>tIV}i`&m+b}%gK8p~#DmA$x9CLBy9fWzK198F^zt+wH@JI_z2)ms557(f0>&=*x> z()EIt?qci?^c9gmJ}w; z1kK@MjKuw$g}e5V`o9EKl<)@=l(fXg51BH_{qv8tixv;)8C6>PD>GP}j=0=};6U^& zMH{-syrwo@1xHPEx-!RYt57Nnl-M8%yP>s$ z6NDZ7QK$)o&c5^B5Q{H+sV0UEbtB-}kkv2-)6g~9LQ}VmJp}QN{Cox58Dv#5qV4Qu zNhxkrJjqKkaYgrXls)CWrAf#drqxHiX^LD>g&+%m-~DTIRWUO#9`f$gKM7{0Sd#5dH3k=QKe zo3AO2c4PLlDLl*aqE&y8eOVCFQPal)#z<%L@5j1P#h#VK=VS4QsHI?P37!_MXqWy# z@_6?FU`@dgfQAC%;tpwLczIkWW{67h92bknfTL}d%V>$S+AkGNkPmIkr;8>`2 z5f|d@gGXkZ7f#8wZf5oStX7_uCYt*CJ#DuUzEZ?^`<0Jh)@>CZ^wj%McUsZ`BTnMYgVl?cc+UUV3G zC2y!+v=~2I9s5t}x+e{1JfBcQZ@*9?4I2OQ&!#Wy3f*7nw?miH_PltX z$6ecfmn^3{&vnnnwl7%JQ^=t4T%{13EziS#j81P2FmBGF`~!J__(sj2@cXqjKR4FE~!39f&)yZr{g zlY^(|R)E$G`61X*@0gU?S=_1;e$~%!u)n*m|4S+r$6Wna@~Wd&_oiL>Os-I{qy0EM z^8JV~pCi~VCD|*vV^Cy3_In!9FsA_6kV{MGmzh2_`P81AwDvNNk&RXON&!)E5y76N zwK8_wSLIMlWo)tA3jpgac}8zs{E7Vn+AYbY?Tl&Vlj78GmX$#H&Hi8$RgrR2#}$I< z&uR&CiihRyKV(wkuqF`10WfQ)mp&;o?OcnqQ^W7l0Y>+OKTMSrnH#;@3B`ILIXd?^ zV7|0nz7o1DxsYr$F3t#N8;6P$<;$K4RF@lNTsviK3x$PVAs{IlTG^zu*XC-)y(%s; z7!%Ty?0HA#_URMe%XK|=#i7b~@aa%l{%%#FUCQfou2CFsye30+Kmm6|HQQiN0gByx z()!_JKXDp}<6RqQpUHyNSJHiuas`McZN>dp8B-m@hC7c#KULE?`Jv12xJyv%u!M?y zT6+p-^MRKb_|n)Me>iJuu6)OOJ8j`F-jbVo5->*S8u5`yH=e2gyThwMw&|fhJp`{q z-VaX$Ghy26TKpJ68(u``{_tN5yJ+_yJ@5*nyhDBhM1hneCt1Su%aQV8gsV zXP$7{!Pn(494zooK(fIcx)tiPlw`zSQBY7$DN6o#Kydd7QvheUCfWq@y;@1opoc91 zD}inyjcy^<>E(j9DlZRI;V^!@{L~wS!ErTu5yGhI=vAYQO|^TIT+o+(j0C(G@WqCd zkAT;q+*jxAw7!?!?YrU=f;y?*>QyBRWW4*$+1u}ms(!(dN*Bpy55$8D3SBl_%swAG zq+ARExKceCZl1cIkvJ1-Jeb++yR~&}W&h}74fZ*&NVK`7n6+{(=d%W@R_$4m+jM+9 z@Dgj$Q)pk6OY95$&{4{j@)MM=&1eRMu|>bq|IG$bEF;pI=X z0tvL_hhh6@oi0Ym;;!J*)BJ>Ihw*ozT6%3PQ9^|6KZTMWMY z%6=PR_c=P?X0|u#_9O4vd%IrsxNH!fFL2#p-88+Af2KhT~f->A>ExDX;46F z=!T&ihVD{o2~Au z*tfTpZbFDd>8Sq{1lNUcnmm?|jzObb{b8B9kLi#^>>`WSDUHtogmxKFNUchFXvQwXjy|v9MG|I<{ zYRTKh?{BsgJt3G-rWs3>{P_k$gJFc$i6-zvfgHop`~Ndku>K zaK#J9-AsI&ST-RqW%xA021&-AtktyBaqd(L`FvB2ei^H#0p^sXyD~s&(Cl&)_?#?l zF`JJ=tEdzNq<44KC)pEzjEEbGXGO+*^qPWoD=+JDY90e#nf}DI~CV-Bo$9b~0 zp-)XEaJm2T6~VMvVyz8|%f{-rKKf%11IO)0z+S=LmZ+VZst<3cxZR7>YULBZ3*L!9 zju^Mvx*et9puVVgXe^-z?ar%{NbJvyhRSDq_fon*Xi(?VBtxfo2zVwhhw#Cf-4MRb z_Tl3PB`lnm3QlvoM2aW3Y-mc68}(anyac%QsApyZjm!rUP6&hu$ujDz6XrD8#dE0r zz+_%yj8HkM3d)6_3Q-L>z5L=9P+P5B2v8U#YN+B@obP$e!RpXB;QH*u==IsLBScs9 z-VxZt)knj7bY1qmx4#j#Cd&Y~N^lpZ>)JQMp&o(xVj?^PA#GJZ0pEK8L1r0OUcw{u zj}c@Ob)3{gP&9Vc_^A2W4VHVSKSM-s5jIy1arrF%5AR7bd{*hJU8czfNfaM%SGqtU zpj0!jOE8nXMZ4|KDVI$Yud5BZI+sxb4WP25`u$>HHlCFdEri?K@a`Qrgcryu9dWD3 z#`iZ?;fLL)@|ym?cFs<={LiLvGkYmes|VDU5Dd`zUW{AYpK2=_Au8$^$s(&4J-4rIo5sWM5)fyj+pt?rSe(yo$J|YnC$A1 ztdZ0BTs4yXM<;dABV3Bn7IH2QG`b~vwN)mx7NUISCi`>pnM^1Hun7#g!qHM(qiYJe z0jNa7O}8Z>YOPj|QtclWSCuJ+I&&y5u#oNM{&gQM%_=&b@3SD&pjN_Ay-xkbuZNK@ zJ>6CHre1G>BXh&3b#6V|I+>Ya&NHTYuj>00PkyhH_kGIUv_pUT?B_XP4Bm6YW}tK} z?g-(xTiR#8k2-j>l5V%Zacuv13A zyqLm{z#m$Uq7v#iz7zS5g0k4!5Vq8Iu+NI@C&S(UBfFD{Qe?1@>k32usIepo;u+)8 zV7lYo?U9d^3e_+?L)-vYX0*crt}vBNPD+vPYU$oEIAd7-;Q)F*|F*FFM>X)DvOQQm zNJ$a7N&#wsK(E%yK8);q#d zx{tFedxv$dV${D;FwB(;yaavW#QBcw%neS8;WjO@Q`}E$4Qk$IcSxTZm2w4Zt@Xuz zMIa9B@&O0|H}T5TU-qH&&Zp}is*lHeUIK!KFWOo^Tr*s<<-aeiZe^}guqPQS+GQzM zfZhy9M{&iU0sL5?9{fHE9ryG+iz}O*xyE_E@&Ounp@=UOBjn`T7G%Nm$@pt+eEZs+ zwCz7H@QvByTrMgr{~?bhr39hOhw!+otlBGaW80(G$=F9~;PR!S&) zS}XA;BEiqNyHuZ)xjJ;X?SRbmj(LkPESSX|F}c~lBk_$_H{BUEQ@lV&@NwS#=v{b% znazswvsjf$em0br6P>^8zF?r~e+%1QO1?J>W( z)Ww=hf4b>!vfnFH)C4_UyQfRu`CGKrG|g4fr(s5T9c{0a)iT>c;@89B{fh0B-Xy94 zPt&5kfCw`BM-0w=U91rsYAN5#>-vO=%_0PxFB_%{ZReoE z`Occ^T%#jPDh%yqGnk7y$DawNi)@O#2(`qr)63{6Fbgd>L)uEiuh1R@8nPDm9o_Wc z=BIgE%F(3$GK}*Np0y)!k#Fx0;T((AwKHlm8G<~$RNgkYeZ8mjv*QDS`bICFs1`@N zQYJZD-Ht##jB_`SeoG-nM~UIFIHh>)pN~(|t@w}oj}HnY>~qNd_E*$#1VRKtZY6r& zyT^)q<7e-YnYh7m^9}ltfP+D8*1>-n5$lqKHa`#2 zQFd2PU(}lu`E{p1x;56fwR&6olSV4xS;^53clMSs&=9L$r`hN>UpWFRPuo6CfOPg}P*zS)j4<}{N$QuRgbWZS*e8XB*roFC7lbG(6zo^kL0Ui&FtuM(LF zj?7QfUW3YHMd?)Dq>UY4qff#AH82I=#g7onI+I=!9ef|sJ8wbcpV2t4iBecyfJ!8F z+;1Ow@a$XPRhn$t8)4(f%ZwMqhcVPX={GI7YGrCV5v8TWeWK{FQxPX~Y`Sj^ zHC1x3p;22|72^65!G4P3Se+TleBSRzgt%q{&3uWb@>X$fx|=BdN-hd#@A86J0xa2sbFn=-5pW&K4kc82q7vjO&A$!k9H z`hD{I8PT|n9gv1YhA{qnZ03+U$L!u}2SBrC2-5y;RR1lt;nH>vS^>?rcOU%wzu|eD ze$4bjF7i2=XwUqGaXSC8iqUu^$v*w@NQk#*2NXt`z5lau)0Nu9mv_MQs9$cemIg^S zSKb~tZL@KTHEwuu(i!a_cB=uoUORYw&gj+@*!_4*PRVI+(%kN%JAh{Iq82!u2=uT2 z>Y2wWV9H>?&}A5laa0uMq;~R##vJAj7uCGaz{MGMG^hVLnR>ZdjVhY$)QEKDeTA3d zd-ok~V}CjOkEp|o6O_1bLHNF32U*E^Z?&U7Js(ojN)=Szc5-XFH z*wE#Ru|bUhl~y+Nq~={qinWF?CV-Kh$$|66uLhCQr(^rqW8<1$N(w}zXnp6H)pGg4 za9}{1(db3o=IA3#fzyf0x7L#Qv^we_=D1{wgM%QjLl~$BF1chRH0%`qEi*K$n@~_U zv-#3jm1`$lWMJ2Gg*?eCMQ%ooRGyY-GKs>QjlNn&F&(-d?S$-VFfu=9S0jKTKsWBiG4=)iuzp-Us_I zy5&(D*f6eoQzQrK`ltbTqo1TOC+UQka(hLus7}>U(oHbkACifv8cI`O1=@GEwSf;g zf>Sv|dnvS`@#|;bx}~y^oTWx$9n+yo8~v%te{!TQlK+)-Uurg4>0U_i>x=PqNFU7& zJ!XAdwb@bW#P#zdjFqZl*y@;y}m2L;m3k@E3gR07=t zeT+r0qcRs}aJp^SEHA|KA6H|5>B66RjXmF$sv>naWc5R{EgVwaGHzb0mSV(WEYf@6 z(r3=1D?2G0NdCA0sl)rEhW5A)xtr!!$vZY4n2;&!{x#5Ut-Q;ckCZE^mN~=#?{sb* z{9}#j!lA7qvkl;<<-q!xsDwI4)U#L!G-%wnOckB!?|o?JXE9u{+fKZb!kXV_KvspG z*Dfg9x3)uAEYswNLaOv6G-X2z{Bu`I1{kXtP6>!6Oo4Yu570QBQA%SUr#MUe(fv^P z=;ZqA72Ln1$ly-odpJoN&Mh7B=tyoZIdlp6Ru(0g7SQ=rsJzi{q8OIV;wtzt&^E); zTr!zX^4xyv7kf7tUrFGXewE6ss=-X0e8v#_*ZcL?)*6M+>ey^p$bATIvHIsOal@v8 z9+U)&X2_O3-|VTN(@>*2cc8k5+jQST*PLn>&4Ry9GPGb~4sQ&6XzeABj@Nq7Kow-+ z>-VPNz%G_HuRhH0euPM(yC;kV!lo9J`t3<;{OC(ngQ!wt@ZJn`9H!OD`y*LlwgqNaps6D}(u^ zYLl;~-jk__<VYLRht|_p%n4s}ODwAEINFzAwvn$Urev@te`CFjcTre2P0W=n%anPU8o8Y`_OY)LVW z6hs=O1?XrUo&KCYTbD=FM0Z0$^Sf?$Z@iY9Y$Ecq$?!Fjgq5hu7Wdvy_k&_R-7f>roM&!Jg0^_k&Yr>ix`YhGtoL!D^6q6&B>jD=U0s=fgVZ|N4 zC~z!t0|U$IXMGr*OhI`-ksV55Li0a~9i3@kBw`|kpIIemS~<*RWa+S9zZ#5z6RFt4{33QCzm~%k9$Zz*ldX&Jt+`u%C^0UI2Tk;g-(%bi8K` z)*T6Mk@oX+U&`ME!?5lLV*8jedRp5ms(oe9tK?1?{8g>3GKkptMSNXMm1bbgSYHJ?<8M+z za8Fh%F=>+mbFz3U@W0L;w#p{tO@eN;?|)7M$aFs?D?sBZpm*t5nb4WwDS`^UHV+{N z^4FXKy|!9`%e#m4a(-QJd=EaW*4r%!0JrVPN>O(}RwOn8I1K><2@iAV@5UVd$yG#9 zH#>Od7yGjc8%4TogfoUnf8Sao_hfHKcrr0aj#MK0)3hI@zmO(LihMh;)u4j9B+fU~ zvb2c6k78}!wD%N2WO!RqJ)P{!{*y#y$A3Af#-vw(r89x=bl;f*T^|`?GiUjN$|)|h zAaS#HZdca^JS?n|WCr>|q0X<1;s0^}P?4 zvfGh+I-`drNMKHYoN6HJ^ICk=agt~5+K+LDD3*|ZK({cKFGE>@aG*P@vN;Fk>jcrp?6AO+xLEZ))?pBYaA4b> zku4_N$&n9{PbD@8rpSK1v~ds`!w@=Zy3Qx(GfIFN?7L|o_V#wIPZbv}@OL%2+a|5iP~B(%nGz`?6-8Cd!+ z)80Irv2k0rQ3ekS?OoV=57HxFw7xp?AeHT@%zoZAE~rG6(aRD+msjefq1z+VHyXoL z^VP&7$@kvT-L3#j94>Z17QPomw?>3VZx!mk-e*>U=x>|nA6VEM8>re%?tH_~d$Rp^ zW~29ys`HzRHzHx$!?Ro(W(M2s7gAU~h0ulp! zB3-)K7}~Ko$z&24FDsdX@Q0pqt+`wfn(zyvCAj3uBL-QW=`y|~)-wYPH!eGOUNfFD zD&lCK&Q0dd{NwIl9QA&Wzk~h18=U4^Mb*XTLJO%~lJF0s8bqI@xoR4*o^<9GEAx_E6GHoh zm6Yra-u}e@SyF$DxRKlk$Q&b6=c0MsLl7HG8lNzTY&Nd3k2fO}OI$EHs@s6zDJ4bY z?yf!&0euJ1no489rUg>RV#|(}oIGAwag%E5xXH`G;XT)!@d5!#M{RY+zsXlibZj{M zl4AbSg)r&XX)eL@l1gnVU+jKfXefVbs^e?wzwByy{+ct{btD#ek#CXy)t5iB`zkJb z?v6}pZt?(DDIKXWcC=bjUCGdo(3uHmY2GQj*vzZAKf8Th)QQj^|Ex78innEa7d%R+ z8c4hAYn-yC>Wmsim9cu9cxGM9T6lIgRWsCNpaoHGS?PJE(GIrK-%Db)roSYaj;{Yk zGD2$0j8gA>>JuQ=3GXXTv&C>F7g+Yg>^hD&@S|Nm{`w;XSFwK6<7k83daw4#OP^Va z7z)_F%Uh2CZ_f$iozv2UyX_Q?ET(LYGaj}Fl!?{h;Y@1t5|oCp)Hn9&dC!lLDFUJLy%0)U_2G2fx9bxvLV8a*P=EE0sB zyqRm<7DSZ0SLK>G$;aU?%m*<#D3hP{BmA`q}g6Q|NHSz5&8@qwSSK8jF z9>{!kpKsFU8Z9C%w(_dt2?&Ba?dHdNUM?I)C%2y7Ghe@L4ua=+p68k6S@K(g?e5_c=AGPycU3v3XF<-BX+HQU|C0 z(&4TSZyM*Bo4A1Fl5@1oc*E^&IUC@wk3(iM=pMn@=D_q!ybK*`~5$*r;{&j zd-xLtuwyIGi&M-$v$ucK@mjOZV~45S`9=CSXfAX1>B?N=P0!vuy6H^Z{kXBT$Kmm- z(aqeJ%d6M}>f7;BMKKF?spC`o^ry3Z3pv;s4Goz1T6H<_zJ}W-)3QKgNdOFPy-uY; zas$~pv6Etcm(#2iVT!cgc1?n($3aZW8Bs}|*ow50&Jmr6)|Wz?{>i$; znb3QyeCTb%xboZzslZ5T?caK_^rD>r%j-F8CXs7;s#6y`+s2%YeLhvc)ib9seNs#3CngXM;wDg zRY&=DXk{lL=lA!q{P@^dDaIF@&9sF~o8Q~tKxn+#B**Yq^O z1<~WDPw&0gi<{gJ&WTRo*xK2*0|vv-6jt9qJJv$V+6vgBBGSmRn>0aGa@p#n!5CIJ zM7VTUdJpN{fD%Rg2~@gjQ&>17l;IiY%T($-Q8bMp10Scrj5c`MQd>^QRJmf49-J#= z>c75n9+_w@@l?XGJy|F#CaVX{q~2-AS&NJGPb|m^iN<}9RI7)*A5OCx&!r`!13ii! zgyS)nW0}GBUQRx>V7JG$;HS}37sqRFl64-KHvxNhb7+*WDJjT}V498T{6mjes4tJ2 zzhUt+?XkPrFGjM$6A3ekFx$1nF%ka0FTpGPuJ6`jA!3Xg*-VfvjX-x>)SX< z<+`iB`FcQbshXWAlH3LOwV7!k@I;P8h4q0!%{X?yG8PbgsG!b3p&GVlxlQ+{8ZGt- zOuhhje`tbXKP6LQC6m=?uF0MCvnOx7CvJR*{Q}Oabw*O-ojieWvI3*6$4Qj$6ThHk zJa%yDf#EZ|$Lr7V%iL$xTKKlvxa5NENvzcPFxsQ(fpcE9o@3MFe|)GMTnq z(T8mTw)G?`<+MdB{D|h5WxEWqo?<4(n}dw$KQ2}&DkxZqc&^@$;0`)HxCE~2bqBj{ zlEyh(pm>POqXs7RDoaC`@ip#e+ul*Ab1JW#q1$~@ob!{oG)x#4ZX#MywsKw?pt;e7S9_HF{Z_UcdU94* zy24bpn|Z+Y76lVqVg2SX61nw!9`iCi{kbAdjBIxP8Y{ucrcQPot4ea>N)-%4+-r|z z(ba}uR}mPkHZrG5;y6AoqiMa~$AnX5v=e|ypdX`g9|~5Wex!Jt2}tO`-t#`xMXV3E zZ~ZFD>?BsMEM8cm;eL5ay=b+L&PbLrIn!Ch-=dguIa||mt!Nefku{-(_k!W)vw(4t z8mHe!wp0dB?L3VBGTh;daoE5*&%XK)f_DU0A|LQo8jVo=*{Mz<7;CI1A6KV4*OOAd zV53OQ?0|YWzM~(<>u&F#;EmmxDQ)Mn(*tj*Vib zPXqjetbI(c(mAM!K*nt?Cr%jIKwUb=m#?O=tLo5Gg~-W*{tGMa`G(qvlu7>TGIj|e z7#f^-P~tzuod8$zTKpPchQ5%{aJva5Gtnh6^vKOi{+ybjPU(GkEe$i3ozfP zu-T8TxFIN(ys_MljsE<*fLM$vEu<5L=M&v*>PLCW1J1{0x{ij;_HV1zFajG{nsEnM zHJY!zdkoe78yZ5@Z{q}J@^wR7wWZ+3RTY%LC1z!7L8VOPW5BjIc#WoAguGUj0zCFJ^7;M-xHlg`dVfaxy;an zpx{5oc}5#Y>5mQbw@Bg`AWd79PAD4tD=dsHZZ76%L%jVk>6?I8T>7T5x z8pB6;h;*e2c6(M0z5p0MjJ96|M@B1Av%e^|Hj3|$lV?;j9p60j2in~}z6}ixCes?> znZOw;v%o0r+&X)5ZF0gv*t7@XsW@Gin*E`!ruNcF z#TV_MPy42g;P_kMq~QIZZ_J2;Z_`_bdj&x_Z9KIj`U6dw4-7v2UuDd`&KB9oze*0M z$(gnQuqGO_JmrtMv@Y0TDlUFNBI0#ktPt|`ngJJvBk)_?Tvq!r|p%48*IcC`%M+Nz@JbUP<6Zh=}b? z^H@_fwKo)q(K`>yb9>$9e@uf~o;tgBH(&aaMgdvr;PQYf#LV!{Yg9NRjbSMVYfRY3 zzknA3@ox(O7D7uFqUg@+u9!7Tk!e#4Uy3aY>Wk32eP4Z^Uillm$}is` z@&P}B+R*Zg!w}0^;@?aXeX1|dZ>^tcuA!0e0Hus&o=Ja-Y#`IF8H%x+GpmZCv#N@Z z?-mo~$4dk6Y^Pl(2;_=eeIT{?@7})A>U7jO_)-YmggO^gcraElkfiJ zwQ7_0UeFd(9>bBZ3x_SAJxmpETyP*>*6M8&)ZBa4a&G6-Y!ekj7cjwuU}h7o1h7*C z1tju0E*2>YuH12E)6p=<@#xj1%m$>Ft$pBHjpRgVH+*eW4;MngWN@lop9Sx)kCUDep0zk?hQOSzw5O#LYLVGu=ElV8vaVfU z^x1?2Y|>G4cB)nz(QUbl>4Z|JcaI?tgvR!3#P9tu1q(Mx)NdLiv#v^bAkP#Rx%A*d z(jh`9F!3W5gqRrV+J+A6B^m?Pita8qTIM#3j6$_Fv2Gn5%hOA;?=`7 zWu}-Wu1ssCEB9JZh{F>j8Grd}C7U)Ojn*p_0fJC14Tqve82i0PG$sAQSYztx#7AkB z+s?5aO}(!|c?eE((Fyoc1c~?J%?XV{lfRf#4&Ao9j+`6sgX%$jaY8ejQhw2@dXXSB zs@G+Te1OO=o26uNEPaY@*Y-yZ331~uae0h0FDkx;&htn&)`8jW;}S&J5%OuE2WfBy zpyWdl9Besz)Jv!=Bs%tdG7H%P^Ha!?JN9p}5{0SGBkgrLe>QhZlH0>X>1rPg{`5#sezZ&dil7(9NR=c0iGwJ^O1y)>aE^!f7ENC?;-WEvb4 z+8&(4ofuwTNY|3rnm+A=SBI_opzs8;w7e(0u%Qr z6WC0ysrI)vKEXMp#kQI6F$`{!guR3(&gaZDk{oaAbly}2-juy`+0IpYrWkCze=qJm ztHw?-0o{{Mm}_)nrg}I<2MACbu9bIUzl)`*0rFc{1HNM+xX29d(WTSHRJp=0CAM+9 zwRT3@3cQ>N@Chz+i;Z$3zFg^ z(bRk0mea{EOLEZHl9=v!FJs##;i#qhx6Qb*Wn_(=aT+flCXSnfD}n53{l|QQq;046 zuIZ}148%cC>Zbdl86O22rHn~7XFg;N*Rs(QrJ{(b7A$jCK*y%2rJM^MWaJ)A@Iy}r zp5`KdJWWxd)C=3(opv-hPhob<4KP?~xE56~XRzxTCTqSKb0blGW`ajRaq7;i`rP{v zT9(Y`9>11+Zi2UhI~Wm8fb1U!6v|qFjeH>wDz_*ZHsLG{bFO)grM#KxX zj;ve=S}YUzAu$sfvV_0Il!^U07%Z>$|Gg~} cbUvY{rybAHx7%j^SKm)oN=dTpqk;eb0J7MNYXATM diff --git a/js/fc.js b/js/fc.js index be888d28..0deb5e8f 100644 --- a/js/fc.js +++ b/js/fc.js @@ -596,7 +596,8 @@ var FC = { 'NMEA', 'UBLOX', 'UBLOX7', - 'MSP' + 'MSP', + 'FAKE' ]; }, getGpsBaudRates: function () { diff --git a/js/gui.js b/js/gui.js index 94cbabe6..a2b8fa99 100644 --- a/js/gui.js +++ b/js/gui.js @@ -14,6 +14,7 @@ var GUI_control = function () { 'landing', 'firmware_flasher', 'mission_control', + 'sitl', 'help' ]; this.defaultAllowedTabsWhenConnected = [ diff --git a/js/port_handler.js b/js/port_handler.js index 58e464fd..26dd20d6 100755 --- a/js/port_handler.js +++ b/js/port_handler.js @@ -66,7 +66,7 @@ PortHandler.check = function () { chrome.storage.local.get('last_used_port', function (result) { // if last_used_port was set, we try to select it if (result.last_used_port) { - if (result.last_used_port == "ble" || result.last_used_port == "tcp" || result.last_used_port == "udp") { + if (result.last_used_port == "ble" || result.last_used_port == "tcp" || result.last_used_port == "udp" || result.last_used_port == "sitl" || result.last_used_port == "sitl-demo") { $('#port').val(result.last_used_port); } else { current_ports.forEach(function(port) { @@ -181,6 +181,8 @@ PortHandler.update_port_select = function (ports) { $('div#port-picker #port').append($("