From 25f5136013662692e922898080030516f4bb690e Mon Sep 17 00:00:00 2001 From: Julian Metzler Date: Tue, 13 Feb 2018 20:27:10 +0100 Subject: [PATCH] Added support for GSP, DS003a, DS003c and added printIPAddress functionality --- WiFi_Shield.ino | 31 ++++++++++++++++++++-- firmware.bin | Bin 344192 -> 345168 bytes firmware.version | 2 +- ibis.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) diff --git a/WiFi_Shield.ino b/WiFi_Shield.ino index 778eaa9..d1bb26a 100644 --- a/WiFi_Shield.ino +++ b/WiFi_Shield.ino @@ -61,7 +61,7 @@ enum UpdateStatus { */ unsigned long HW_GROUP = 1; // Changes with hardware changes that require software changes -unsigned long FW_VERSION = 1802120001; // Changes with each release; must always increase +unsigned long FW_VERSION = 1802130009; // Changes with each release; must always increase unsigned long SP_VERSION = 0; // Loaded from SPIFFS; changed with each SPIFFS build; must always increase (uses timestamp as version) // HTTPS update settings @@ -357,7 +357,7 @@ void ISR_config() { } /* - MAIN PROGRAM ROUTINES + PROGRAM ROUTINES */ void doWiFiConfigViaWPS() { @@ -384,6 +384,24 @@ void doWiFiConfigViaAP() { setLED(1); } +void printIPAddress() { + // TODO: Stops working after the first time + IPAddress addr = WiFi.localIP(); + String addrStr; + addrStr += String(addr[0]); + addrStr += "."; + addrStr += String(addr[1]); + addrStr += "."; + addrStr += String(addr[2]); + addrStr += "."; + addrStr += String(addr[3]); + IBIS_DS009(addrStr); +} + +/* + FIRMWARE & SPIFFS UPDATE +*/ + UpdateStatus checkForFWUpdate() { /*WiFiClientSecure httpsClient; if (!httpsClient.connect(UPDATE_HOST.c_str(), UPDATE_PORT)) { @@ -451,6 +469,10 @@ void doSPUpdate() { t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(url); } +/* + MAIN PROGRAM +*/ + void setup() { pinMode(PIN_STATUS, OUTPUT); pinMode(PIN_CONFIG, INPUT_PULLUP); @@ -567,6 +589,11 @@ void loop() { doWiFiConfigViaAP(); break; } + case 3: { + // AP mode + printIPAddress(); + break; + } default: { break; } diff --git a/firmware.bin b/firmware.bin index 17fd249dd04c52646ca368d0001d5c4ef28bb7bd..eb757eb1415b290e4e46b96dbe891a8580f2ba1a 100644 GIT binary patch delta 39222 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 delta 37827 zcmZsD30M?I)BjfQ&MxS19|EH6EQpJ;!Y&@DAPYK*2S$l8-VtLw67Sa-lc?aaY7`Z1 zwJ{#SBT=JKJl7;1EIOW`XpBdq5$_`!@ra5d^RHesZ@%yQ^E|(u>7MGI?&|8Q>gpcK zW(Va=4Js6UL*rNIH2$s%PpjO>+r#Sb^7X3Fl!2O3LL2xdkUK#8__m9Xyp{Uixs#;( zDpaUN8jXkbsC2=vhFGIHyJMg4DQ##KmYVIOv2Q?NjUqWFd0H>}Ifl}21E)jIj+mei z0h;cZ7uezJzlMDPTEVXYg(*R_OSq9Zigt_&pP(f-0_d#>Q$1l@l=NIZENJjgE{u}?Ru2uIZDQA8-91Bclo91V>QNwd_Xkxv?B348gbhi?8TAMQ9X%!j}p zdg|lQpv5n$Q#Q=3PU(Tyop{apx;jNeUw<5#Ehq+Sg=%s|$@dM`hpMk+bo^pS2Fy_I z8Z4k}Gg$ArAKx>$?y9NR)m~NBt7`4{x;3RpBiuDuZ}7*CI|hrWEc8q!HC0_L=efz= z!fk`-)jkNjVZEfDkmUV_3@?)_Bv};NXl<^L69XjSZ-e!`DnG{uuSv3quT0b?gT=@3 z#E|T*{B3a8C|t$12pbJp)Um;ELaKXN-e4#z8($P_bjk50Jiv zpLord@#Y@S*lDodT@XDGIf&Va5=8h{)hPoJBfhGRNg0nfn-Tu5BC8AKC4^-8$TN8B_&9H> zk-QLL6P-QQlr66}w8!~iy~ZC38w@Cgc!RlCE@~mlcLwVfcMjfMcISL+K$+vjc=J2I zajY{~e{<*H%>{SPS}uIN_!^Wd6i8u?0jGe?CCYcy)HAAdxVk^s3XTecv$YnGha!@ika?sHrd1L~XhbGlE3D zFdn2IR58GorV;&xi|W6nU?SF2IK4V$59bYD7Znub`4w4TW~&w;Sq+P`qJWP?S2Uk=?i?v4D8e!_Aghn-?CpGX0R^9m({ReS;E;bEUIC@V+i&{mhnfZ z)FJPX{qjdO>~~bSx!jgNyZUeTD<%Aaa)-~cx9k^E|6#vuce7u~zRKC}NclhP_n3p~ z0+EjBhUkH?BYGjmBhDh8@-+4+aBg)D5mP?2K9 z8vz+!%5xk;4XMrejV(&!7-cAL!=K7S4AwlJiBdI^&&*^m;UmM4a6ju$JXan}znKu; zdXT}ohbM(WNFwri-tp}`U$3T~td@#j*Ua-sE)&sQW}@BGynzADb#Qi}n^|u8c6{xY zZ~0VZjeLJp&E;FiMK{f0)#5c#>p;FdQL(Gsc!_c;#;wnn;5LkdA*hdgKO#Qw{k5olxv|bmQ%tE)&bQh*GgkU>Y~?g zBJ_w<7|7Q(}a*5vltX@cwyZIHxS>#L>7>kV;Or1@rpf1wzi5JQCzv%Oc(L^~& zBR+3MO1L$pZ+zO>-u@mBZJDmTCNFsJ7Ck+MhK9^T(}_ff&{@;v;v7Kq!kK-PPR@?g3LYxmnr+KICZOG0 z?(u*GU(?$PkW)z(udoDBEY3=HRH#VxXkrz*W<^QHia4VJh72NwRV9mcOB@qDii*aY zeNG2gm5dX`N57~u4H}I(u3^%dnXgpzXMB`ueFm|W7%g5%{b>z#u8mWaqeswOCmmI7 zV!?&51XEUX)4@Qc8y%4oo*jbCG$LXVdFW(t$#~_KjAN^X6?)e@uTG>|AX#+y5vfa+ zuhpn*LU9tl(xX_+)>|K;w2O{q`WhnHhe#XLWN>Um8f7NZIA-dlRcBSB@P>G6Ixv3dqd&K)85a1jI$2WXd zOlpe1$ZSCi(ibZBPFRH*@|Swax5`!kXgD2c;|nG$Ppk3Q;r}kAkTQ@@g0N*y*%CAX_jCr zxZrEbk$ZbwCM7n}Yi1v8?}advqbJITX`SY_?ViP3sM4ceEVz&?W_X90gnZPZzA=8L zf}=5#bfjAJjsYowzB6Ncw&B%XBDHuW`uO@89mDhwe5BuACi8?6?U77Y_)GDx>Z<(N z6unqK`V?vZT$L79TPt5aE-*Si(u;z066rIu>`ElkXG-=JCh4o{x~k(#y{TZJ7}PLA zJM)>Uk?OxHzv+7|O*2!YiT}kYEmKWdn%pEykSN^MOH-TYHJUv=s~#&T1cZt42q@rHAsHD*gG=L^Q!Ry({*W7=Yg8P>uEW z%hb-*iCR%e*Nqg!Iw)?-G!XX^Yp|YGuU@jI#+E@w`N@cvDfs{k5c%HLlZ4 zZ8n!9<-2OW3ZN)R=W#0Wm*9#>sg@3_f(;}^b(L0LRn*f8%6|-s?Op3d$uW(~?QMhP zQmtdrVR)ObwBjzqErYaIweD5_n=iNI^fwIB9@X0G)j#>!lG1_~xNeYksOaSV^FWfD z^8!~5(pJ^F^|`OsN7O46x^GZ3e3AuGj}u}MHc>td$^tIf@-qIb zpm3p(=T}SlZXQlUuTi1ZdL5lP%ak30qbJR;ME&5o?bzyz3-3;KWD_fQ7e$?5#p&yK zY;ZkSb2IUUpy;rA$0NffA|0zlRvC@sgQpn|`)ly;blA(odJWbs=iUg|#`y8* zvw9WjG$K*vV6LN3^T4a;n%6V68clf0hxV^H- zs7ch~sM*%ufv49oFKzWxF`!{n5Vi4?L-~_FxMRM*E6M06pw6+op zVTPH&ZC*0kUmtA}_4r=L92GSP{>k5>?b8~SQ*_(xfb1gF^U_Z$`rsr>>nPP&t5m7A zY8#}H+EzLS5ozX2!JwDgymaXG(z@3&{wBXv1iiHAr9*hTTpN#)y$-Pl@l^l{^4yoG zbZe?SCOHE2uIfrD{$;YL1n4FDI$4zQ+UO;>^#lC%(#V(S)yjC&u(F?49syEa6<1&a zfV5Z@Zn?t{|6ZaCf1~GLlOYXwS@Rafsv(jVGjn(kHO9s6)sfVbuKvp6>1Z8+YS~|D zLeGB{oi6WbWGtO-T2m(c&TmA2o6BfQHR6im98U|j2>ivBjHv(|l5~C%(O**&t>-Dx zm#gXZEnxYX(~I=JMbFG>*Pz3#B8>(GcsP1kBT)N7!+V&~v$&Sc zHNtcdmq$j3yhmHlt)Hz#M-1_g(tB#qh`UAz%Z*&QyGA&c8%s$n0X-kOp1H4Q9#S=q zx)G>^(EIRB$iYU|mV(bbv`Nh^V$UZ!*A~>~Ps2=T&sw7Tz0dEIM8Ucdvu~g-77_)M zWVaPOO)I#cS#TpPA*@~4d-5ffUYHvn9gZVE_&>fF#VI;=H9V@6h`9Rq#kC}iyn(N` zxlE$J!!yg*^qSYE)QP+GybN6Sw<-beF>O+6Z7-}Z}w1>;$#u-a(W!M;?!9yR;9UyivFh5Bgynso=5Ch zH!;^U*HVw*R7i=yC7)|39Jqr;dYWn>waI0)9Wuhtcc^w@Tz1C@l(LQy*bv9mh?xWn z;w{>Bd0GTcgs-n+F}!x=?J`NtgEKYU=5OQAD1T;?n%0gK4>n9dL2oKAHA>%cQ`Xa@ zQ4ZHPNzEL$)Yrrv8^i+1yb`HpwVU8Y`Y9rmC>f)?bX=!p{8J4wS)@nOH=Tg*UG1+;I!8< zAUC5~iy8(*zer4-n=0>ASEQNIj`W%)9iz(^h1S}PLl~ZCw3jcT`xiyaLRVYKAgtd{ zgMae&xXUE?aW(2dQ-CIToThGC+PfN4e_ymH=-MU4VbrP2Vss?Mb-#ngIm6rH<=7FY zm}v|RCyp4}f#L*;qoZh(pg*5sk7JU|Vxq|+7HKu-*Yt#2bQ>K?WQm3?jw5m??Yy`_ zD7tG|u=1IAOOrkN@U-qU|iz7W8Vw@=!gjuxVk`}FnI#@8-OMY_+cBkB#j(6g4 z8l%523S-^%q$lO}Fn387(Wr92cgaQni>8aVi)j}# zFAh4BW<*!b+i|Ih#T#v1c@rE-wE6Pq2zI)7O`D5IN~HES$*a$fZNci`(Nb2p4+8F-tnW$7*xN0qAB zsrYrhY{yEj40BC0(f%XXYz3-geG}s~W63mhnMmAB9f})DlWC;jIMxJPhC^|riO1NZ zSr@wBN%eObu`S(n5_Y`eE=%>Na)hl5F4n|= zyImano1iil9d(PFSU=;kD&Wn8w>O`nrWT6n!LNse$VGatwH>GUa($z!$7Y(=-VwIb z)a7-ckoI2QnB2*88yn#(x@!6Qpw>cW0bH{2{%ADzC?ie?xe@KNBDPLLY>^mfY)a#e zIz@*F zM?@jw5s8R)h%Sf`=oCL^L=Iv$q5!c0aR^a@xPiEj&@HG=X(r-NETSo*3!(>N zAYvF|A|eNohggi*fY^yRN|&rOLNwjI(ij#cJV0Mq_(|9EkJnZV-GgvKhjD)|Ig(ba ztOpYHUR4hwXe|ELqn+@#E*-Y2Uf)o6F?lP7Qmx;qJy(TTzvVnX;4UkK)I9xxKP^yu z?hnRae7djZX|VgLV-tV6T^e|3wYTt@V%ba&w0&-H8p$IJYB_~j>q>J@E4zMsd;LsdG8ATbTqzKu#V#I{h{W) z0xkQ-2wM8+n{WW?UGQCmc_Fu*WigOcT;tJKj(woJEVT6V-1b^8C(vICS_aB_dQ+FC z<}SI!JR;`48CTHCP-;b%{eHd)oaEQ*^7={8%ShNI&1B+>~3?S>`913 zL_8u2p+mg*D$0HbaRG4%QHa=pSb@kzvNtA=sVIq}+yx)Wfx4^7xbjK%R=Uvk z8wNlk{dU7Ao>-k7msoi16dyoA>8tboO~VW8Jn-bM$0-!M|%k2$uIG0Hw6 zeQL5-rptFEHcWWt79URM*i66wUh)@y61bx3k83_hB|da)q?f-BB?_Z2zR!hR>e%!j zFwx3QZH0Vfz-F4dIlQgoSHX74!}MW1&bjkKO{DUg*4nNL1^24?&D;;_ZKDY$8 zrc`l#AEPrqHul_J{U&Lq1)KX4VH|zExj{ok5zH%kEga@=o|+*bbM%@_$l)z2gIYWJh~Tw|4*#KVbhM6Z1Nmod?kFCF@=~5?)9?4PSO7g^ zIT2&&@yQ@OqW6A?K+RBVOHrFj02V30o39Q=Z1)eny}$nmV`Gh%k}< zxh0awL#Xf8K}5))F*s=oBg!p1}y zOg9up27L3TYWM%MQD3I(MiF zXsaFliBgL$+tH9Xj?>~D2?W=9&v&%;a~#x8oH~zW7%X0~AAYsaQB2$JY)Kp^>6D$J zL@1@pb~;1TQT_Bo3`TJC!ROEzyw9P-cOfTl($ZaX1HRVcfcXeEZSbnTrc>!jzsPIp zC%YTeR|>QlBs0#>tcu>o0n=@#k}N($bYU6ZnTqPzM7Qh?X(@cKP4+RJ3UOp;F*@2v z8yjgll_amw_9y59`d|rRgPS19(HRLGX04T}NUlty>h5Wwv$e_iV%z9QIYMiTiws_? zO`xzsqY@CR#&a*RJ`p}y3mET-qXsvk2cv`?pH&h4Bat(&p`rh zc69i;FOI_(TI;IHNsrGb7|JYpWhTGQCV2vN?#(CiXxe>Wyr<`zitErh`)u{bBReJ` zW*}xG@(^6jti$VOdU4;_0J(v-?zR3TR-55%at+MPG71vyzdt5YXo5NYeN3)&n`@wK z(LUN=WpX7Y`#28ZRzbS0AjJ_uH|}ppa9w$3e^d*t_F4hyIY^69B$KO$Otj*F`_rsH z@Pq@j;;2j8t($m4(P+gsCD*JQctX%n%Yg$8o{|To=NbO`q_uJ_?MO0&koGM!{q@LZ zT+0j`lx1=RQNN;?Xh(uJF)JPS%mg3R+Ws|$1r&^gpAoESuTdMWBguf96ffz(q6q&N zSSjk41tfUXlcZm8p9JW_qUg}uBzU_9W5_nGDXad>{i?>=7F!ac+@xhi>BMq@hPf=n zbb)qs^(5j2y4n@k>^$i?4cACXwt{G353zY;Fz<>n!MES`h8UvA(pbE01XJW_FvW#*$8A;M4V>HR^k5S^9p2>gG?ZqwN5WQFY zQJA3n+a?(g55Z=AgMr#4c{wsW2{rH6bojwcgTq6M%2%Mp2bTl~{n@H%d{Syl3?gv9 z(3U2m?-)Wy9;(yQ@siX;0WhZ~1Yj&ShEMaf;--rHj9eyi)7Ku>i(<_gf|@lh-_+kp z_Z`|#*hZ8(wD9o6 zPJ*v4H`5%Bu61i2_dMU8s6kfnqcf#M@YbO>g4;&_J<|{}H_9#|bcm^zISa+Lf3jzv7ckgSX>G4)#ZxgX0lRx{7Nv@F;^a6?rD=`qvyi8INH@$q(^!Wpd@a{ZOl^y=}1 zkA&A+vYLrWOUxL_+C`4>Pj7RWO zJpJ(M?S$0?gwSOOjDng~(do5|lC>w!JB;nm-}g3*%8j@S7I^y<5_uN!c5X%N@H5cz*-& z0^#qTlQath0pTKY)#laIKm$4c0NpPQc zazwdRo3I!A9JSdyR-0Dfsl<@}1jiYfu~Ht=bs1q&M0hSCpd> zQgU6-=Ol*z-I;O>>9wtH8s?y)Y=&Hu-y`u>g?n#DIA<{+AK-qevJ-MgAx&SbJ=D6N z6DV&8{OCI;LvTSd?4%JFBww9u47KU5lkxR*BzTe5?AmNIUtRIox|kntP=0jxB;KK? zCeyxUQKZLNI<>4TQ9h-o%WT9kjtZyS5XUGgpN_8WFcLGm zBp7uWMJJs8SgV9RrPog<3yB!P9!MLU`I1!3rEAV~sP#1tda{?ePNDS4nWe;$PUrs8 zmnZ_g^GghIw4niK8;NqV_MfFM?RYkk$S>&hvoUa%{&02~QLfSSUnSxwr=R>9)9Pq$ zlzk_n05Kae2GI}E4$%}5iwH*qB6UhneL&lvtMC6IJYx6IgUQe&6LB4ia$h>( zT>YehsNRLPZ}OC0z|Vx8NOe~#a(xzydopq?Sbyek>yN}r!W&|tCoMY{0exu2xh7HX zgL`EwypOHn$6-VP!++M*yoUF{y{whrqiN@(p$#2=9^+-+bk_NX(2{OF-yWLMXXhJu zHM$qyG}RHQG1`n$Lu$V8KKRj`3wB7Rt_yKQ*+?H>_`T7RTYM8(hbE2NG>p?YCWH$6 z;D3d?F^oH%KEG&z6|})`YjHtw?6=*)hyFyFDKb8V5WYQ!c4JK|@WlAk?`GIV_x~OY zm9*Zay0qf=ppdnkG})W$Vz|mThia&ABS8cBjkdj%MU)}{K~?OlJ#LKKCbyM)f` z9I9ffg7Vl&1IMU0?fSO?HfLg^bEhd4FEGf~4=vpA%f>+YuNNh07>DF>m{@_YA!44= zm6wes$Dc1QWzN)UB(E|aoBaxztM|Z7FEUflDIMmg^vdO?TBYGr8vI8@pm3vxeA1Ja zBlLpC+|Lp9ly>~1TSKAC)5I<<7U?EEmODH(_sdO#V`bPaQ><=~q``A5=;PsOzo)e5 zj}XIRenxP_4SMB|Xfo&qHC%}!jvr~_l^A3Gy&69Q`;)rlUQ7RuJZPrTl++w5wC2&N zSIlJTDZ1%O26?)IzPwVO82+ST<=tU69Z^1=C^q`2yc2Q6)8wm-`O5#}tK-P3Qu@c$ zg`v%PfZiQ4wYfv4=Q2TQ1rUFo&b~Gs)>84h1#qEoJ(6Hd@q_DeUP_7PGI~9@Qy(Z) z(&g8?kob)y}TA5p{2#?X@{+-#m8#F-HU4;v{WRqw_6bvcQAHOIzSL>`ZaZ%b*?pWnb{dg;$- zYP%m2Bv(In`z0?`k4JCznKT+2cfW3utbO8s^8DXV_^jixNbW#g)~-mfXsv%AcRYp+ z!p~qTH&m{Og)?;b{S2R9)!^dlMA01EC^Fdxu2BC6>ClVzebC;Z+<9yPkm-g8F$Tv| ze&3Q_c+f0*`EjwH@;j`!b|?1UHS7ZqcpOxN&%EZfq|)QOBF80~@K;=d6E`DqXH2T` zTQNj@EX#9jDd8<@3E*=Zd!2}_Le+RvElIE*vti2XFJ|8NM2 zK22vnZ0)TadyXMm+`%a>!H^0)_3+z>dwi0J0mg&V@zBh_-iJ)U^GI9h)(RsAqsl5e zfSHCo`iS^EqS=pn5+#qGe`F$#)%4Y)9zM~fSjmgnmyZ*@EIx3a4tQ+wufy|ZONru~ zLFus;Jp`1}m5=KO9H_wT$z+(dXXY!59+~!82|f8Z9A)m$$90K3mU=vSAFk1XPudY} z3H|O#o1pZ^J=4_M>dR`*_s6GHlaI#HfmS|=AUjKF*wgsz$&cTfrW$<-qfg*F{#V|| z|DU`e|DU|9f9EYmQ4Lv&yV%ugYBk?=PHO9ERSF+hVZK!PCNI0+LFCld$E77DXvT6< zVzB^jd|o__u8hv}(Xp#{U6tD&=w54KJl|HbK2u?Y`{r*I#_<~%>HbaQZ!RUlgD}#g zOn9Clp6HIDFCV4r;}h0KvGNCx-QmGLXc-}qlk)Jk{2^HUKuA~JAqRAyFxa5e-Y-1HGb7lXJ&5~yU%Poc-!}LZ*4{=uAr&FFa7_{i^m|z|J zD75s)F;6R$@v|r^Owio@=3RKYk{=-1OB^^g|FuTZt*TBbUx`6#tZ(FqX`b=!t>g-H zerj6om{>>XN`>bM?Kj{NvUb?X5!l)pPmJ~pEj9Kkq%QN)yy>W;cStgko~hx7;40^u zZOv}+&7l~fp4sy2COk8W!fAi(yf92QzZ@yCWul$gk^vf5Cu!!z_(YUGo zc`jND`3ds#ttP5<~->f>!?iwD!YeId4g_Efbm`0 zt=ss_E?rhMNDMcXm@>S21FWMtmEl4OayOB#t_<}V_!t{&Dh{b>Zw@_HDMj{wZ1&I4 zW6UM!$N=amAi2T+ZjQ!IAG{0=?80gAy&3qtrk&-ChP|2(>2%{O zV@L|V_Qa*m$R|hhC%J2I(@7h92$mnES6>B0^r(4r4ckqNbe`6dHPS~l9U36FrU6w6 zWa?3xUS&kDYKXc^CwU&@6;qFPYaK+_sZqFe>eViKW{Wjpgv(1gu;d(chkneA zJ`?O=D993YV_yPTgLXVa3Q@SD;$-m>hCJqKurqT3G=_of0e~qG{swQZb);}41)i(dCkt8R}w*cxf_74$fLQ;nGgx{AMwgoVta zg*sTbtOX^j+nyqu~_{PGL*s&seq&Qhc{Qk_H`i)K?|{E4b&RjAAEs zP~ZD0D$5GQ9mM?r_EHCFp7I1uvJbAOCOBmQ&I>H5HcWAztPKwEy;6)X&6ghVXp1LY zE@mHkK~r+7m@V^ycK-YL)AZE-{Hd^)Aw#DqY53G@9qkH}$R85(PE6K%(qlhZR49t(BxZGv)e4#BFagd$yMG?wj zQGPHH2Cyhtu$!Ezgl0sx3mB7NN_G5Wvi4_(P)I z<1u=(Xrqee;f5Dt53bTR^Ks`4k<;I8VvqTG0$RPl)%%kmy@=QIL=C56pcn*gi&&LE zG;i75oqbis@R>W``X()uXb$572#frNZE$B^P;CXFX$62g)L<@Rp9H{IeIho%IG4S zN#T6fDin?c?&5X-&&KDlpfLD=6wPN7!r&vR%YLLlCYQw)wKDN@k6-X2q7IE!5UP^4 z`&m^OgpfaqSa4lvU#lEn))WW0Y(5)O7aD{XaqjR=eXm<#lP*?UFIK0m=?Fg+v2}G} zFWhHY;aK|SKK5le?20&4$9<*&Px_K95b|`v{veI2wvNIwd!Snpd#4_JgeqxQJva{< zHm^RkZZQ}~qUKy1vZ3ofe47WoI1$vEVbmG4C0B>kmIy?F^#evszq& z$`Qr|Y+4j_AY=DCPej3G;+3-+7l=2jQ&b;~n#XoEgrneKQ_K(v%h(z-}N!aeKz~or)oM5q{-qj3KYRBkFLPp81ivVxcR_zOMy7B;Wq%{L})kz;AOs z$vy^qTG&9c_X?NnP1)2q*wyxzM_5{dDl49p(?P`^p8DpM6+gYwZF~P!_Y*37^>e21 z@#gn=yZX&=Pi3FS!)Tb`#6|BlAl~O#sSO-;PX2^cD1WJ^)M5TM z|JuWXJ0+ynxyOblKnmosjS29HFzDxP1AlggHifzZW;JUG??VBb*AiOj#~=p=E?~!7 z!Vi$eCbojaT1(gP;~+Sr7C3)u1*s%-`|W836-7qPxJXCdXTCX~8TtK(j;#AE5I5u- z6z#?a)HVGhl=%%bnnKhB1t)R*PT`s#uQ{wT8QQ>yEU^u&5+?25_T_Hp?`Ub z`k7UbNuj%b3g~MX}t&jf&9k|%_S70a<-}yzNtC8-wE!PAzZHw11&$ z%8~pI;=%&^hhiSx^$Ch@7 z7J8pXl zt*p~~&?is8~Hv&!}o0Q`_L!Tz{}yMPXfPU;j~!)UR_MF z0cGzM^)cB^MPU7JWk~jF3zE$=Xe=I3$!{_1dCk>UFx)-pkD0v}1d_Zw*0UG1A%!?@ zyJ8zwH@Y9>sIYzu8`~Qil9gN7*S+D3@G)qg(F#gi zUZc?<1sampRC>j~7J<*Uu=qX@R%bLX`c^G#cu2Aw2hxjW^}!eS-NIJ)fws_|-RuK# z-kOC`b|cn!6LIT0GxdehBw`Drec=+(7P7JZ;2zoh1MA-(e$JTu1J?V7S<;eHdadVrNgu z-ea(2FJk*XgajgNW{*FF-mU-IgcV6gs;uYu?Ecf8@>Z?C@YHR0>f_he(>!&=7ntO z5VX#9oy<7|wnGE<@la?*%CEEUhJxK^B@YB2^?RdHbJ*WQQSaY#el!dMAao#FKhfV> zjZH~wJ0-2{G*jEje879Lg~K6^RD8sWhr_|pDV#BSy~g0*q+xSk@m?js z$MF+b2Y<1)BOo7+IxmfYJrFYt&Fl!Yz4vdR|BFpsiHha^9W=dY%{7HO&3%0KbUODf z_l<%-NzgI&{b=Y;G{@NM(Xb=r+y-n{*1iXW^gV|}*OlX5uE-Sq#Q>Qd9fNDNV)k?l z%p~hJut{T4Og6KXV^I;#=Vhcs)fVfSR-oZN@azrj&RA&W<%o`v-hY_5qNN1iZ)9=f z;3KahZ2AgpLq1{;TRjdP2;}~MAc+JWb#C|%Isp2rk@!W`C+xTJFxIDVJ=SgUs?qtI z*0VmJLKIoEp5=TBmLMU|C~7^zGl++;r+#s@$s!p zbxpR_iLiYG^O^wf6ZA`lOaNS5UUtrz2)}{9qn$Cvy1CfwpBSDNUOO=WmmU+ozzzzG zeE~6~={Q#W1@whPR{u)~Z`AZVtlJFu@qBtJ#MLBh>&x7Wgjjbnb;RG3Zj7C`kq!P5 zhWU*^AM6UwhFge29G*SS%U{9{Evc)pMcJ?#9)yq91%%X!G zoCy!GQQKyrJ1MMXFK59g=u8Zm4MX$=^CWxJeCL_j@I62jn>+{2a4)uP4rF^Q|8|J4 zV9o!QCC-I@ki?eEg;9{obh$8})Z5Dz=fVQ0WKr|bqq@!}&BKD{SRub0V>jkOFHbXy z*=tp!iDL46TyY&=$3B}6(d587_RW0wEljiVtA+0eL|VjD$2!M1s)ygDK^8GlN}axr z(FO1wTBufe&;*Rm;dwaz#JI?Lcp^q9 z2Idf#t1%E$_tf>NdrSgA-j4%kLBMU?Jy7jQc&fEf$|!3Y>{?0kyVYnf}o6~(_HIEesZ!$qGo=OIuG8OxR;b(SzJzSScxz}$ynec|{ zI8WYj)s*6N3cI}lPQya><3{8`_R{Zh6vwfI@1a}R08VQP$5rHSrlWorYPOFGakxU9 zE5C<85ai_x<>k)Zn{aWX&qo#h^ro}c51`Y+E9O&({^VWuej)UNUz~-7Xw+a4+r155 z3jI*hd$3*G(WV=nU+#bbpnH`+^_BDTPM8M5vizyb@|}Zs!xZq)JFx-Q7WwR+6HFv7 z-|4*vZU9VUPkw~U(AjzVC(wh?noVuZ*rlIg7@8P)FC0Xl-E$v&i0i$P`*8Ltz+Ue| zp_G}lAHJ+LY&HMdjHK?*XW#8dTUv&)w;$R>CS6BmZZo12k(mX>Sz1rYHRD1@INAmI zIU>qbk`7H++XE19j9!ARLht@AxA78BxD^Ti{~t%KP=5)d2f$TJJcMCQ)OuA1*?=Nw z*-{sLimVZf;ec;9{uI47ty>RvSF;HN7?5JwD9kNj1mVYb01H7 ztzz6_0V`I}ZTi${J`6g5L(Fmnz6ti>6&%)S(gilScH%B~<7!cM?Fcj{-6#t?3LpE= zNBOIZ7>N9xjMs`q&ZS3jg^2M=-Ej=#`o?d^N;=2dBtM*331DHJPQYW5L!E6(;0rCx zWSy0|?4^%N}kD!^Lu5F@dH-Pq(ZxLa#u9+pQhe|;Vsa~j5rb9lP*CH&HDRvxQ3 z4WWM7ZVIor253?q3p)cXB0u5l2J7Z$oh`9C7|IjjnO5g78D6%?skV$LF#uk&@n@i8 z?H;^5o-~KnzODl7ZLR((@2o-+uvbnEVoDTnAn}@!#-9 ztp%+7JlMOwn$Kx0H8jt7;=eRccycCwN1h<+ z=pJ{Ty#V7#qxAWPpM~Or!Nu=-7ng=$VM`5tnk6dfU|OKJ7-UayVKve7onwB-SX%u( z^W5*Z-g|+$J8BYdxm`HV+37OWBBc5e>v;vX)XK-9+k?>j!Mw|%H@Th5hL^)~j9m&> zp^NXFC;q)4{|X3TZYxsEEA9JN~iQ*zDYP7e3TMzBA}Am<1$cBU|+lLv&-6cv7bP_Q><4@_`D7$?#PXr6WRwf@1SDu`z&4^+LkhP#x0vzhA&#&c)j zTJ|Y)i@r4rAEWAVa@wmr(YX|5%YBF07)?h-J&WZ(1&N%U#eRMY@qtG;*-R}jmNmyM z5C>;570*eLy|Y;8-?-huoZtKno}eFtJu6(ywmgGik~xbVeg>lgYK&A@OL1o zFp+mERC|CUCP?)@Oa^MHd;sC4=v@cxws3QM@3??kH>#FkkcJBsq5#mD?0qnp^&j? zf$S%hx7aO#G=+)Ix_Yvdz%OjO2Z{4LvIa}Pl`J$Qj6L=sJ7Ec1?@3z2Om^Lq*dr!z zB8*dOEZXAoO_!v`nHJ$*CwAPg!8f{mod>L z&afQ}fsmTCxhCxkfjr$_izL2@t~4nCeAlr3waItnkOvzgl2ODrpPds)Ay`9XP`~alfm$mmLA7gZM8*Yw5 zCl=sGp1@>g@F$lrXmi7#B;wMqUI3X-0t?s=0c48L({Hdgn-pwv1;^^(k+W4G2?5y3 z-VGv!Foo%Yv9n`Yi(q2*AIeGhEX@5mxwfe!Rh)sZ85@k${n?yg(jGdq)4`-!Vlt;P z*Neq%{wTqqCa&gRt3V>p#a@T&Y?r}ya4$6F8Oc6rQjn?S!|FJ8hgXboj zvO@0oi-XZZ`f#cXk3MN)lj?|rZ3h#e7SF-|BPfMft*Wi7X!f_pw~{vxy68-oK&*FWgrBK+GraFyU7x&%+W;$_FCvhYgw%K1B%;?5dp>K` zfJDGX)~5lAU%bf~7EMfAjKn6#kVrBxpACv3pTSq`w;0kVXx!IW`6u(|l-#lAp2AI0 zF~bW+Iy*K(fklsZN@Eg)AC0rc7Sh;n!7@%NVc-8iw%K7WE3=RWUekDXhS#65iK&py zNE7lQ3}Hi>ka%>dSrhCg4t5i=HmM$`6K5n&HFxiu(ANZ^Je@vvSa*A`)Xet%6T7Fi z9boRB>}4wc0Q~v0#D(VWvAW+);IoV!j3Z;on0#mRcp?FIt(TQFC1)+p`Bst!^*ZMx zIf^>|cOw*q4mByWt;CF}cI<(T93X-D&MgUKJNT?;NZYrKxw|+68-c6oW~3fkf_crz zNXT)%YDTJ%sf<;&Ad26qrS5ut6Q`oA9Bhhy$*DwAhc81C$p)Y0{OLb6yI#SpHt&yt8Fj6sz+ z(77^+;O@Seg|;C*!UuCY=_@r><2mh(sVS_ePT7qpVqdi(?|66Q6p4NkdiaBp)wkM^ zi4e;^NWp;!U&0ookO_6F-JbKd%26=`OedqSNq!k#xI^}Wh1`i>HO`F4Efm=5DDt*edVD|B8X$Z(5Y8xPc89VSn)l z;hCASQKB}pLH%@Vrl8Mk*BEz0`gS89>y`EXJce_k8?gi*?PRh~#P-bYXtLkH`*s;7 z`{HEg-5pixa<-^DNhL}t`?WiY*e5JAlccoh%PY6|B#S8Iz4*QPYBKH!2^r|lCj(|? zx(UQ&pY7fTaYo_3`0ZT{kl{RfM#y2H(_yNbx#_lcrVvNOSY49J4 z2)teykodf(=FL+y@>HCt#wNgjBbHF~DweCwK zQgM?F=u6^B^HD6XFR_sJquGJJqy(c=x&6pM^2;dpS3mqeAwP^{A^k}`^4&<*qCb&_ z_r4~@*m4#at0K7!30NIvne9Eog5_QEp-rs67N+%#P5X|sqW zK;BZm#!D03rw)c)*C9u9U<+%TMQr54NcLG4nLwgPvxiyeui(z>ATr#jbh~@icQcxu zK_jq2i}&e}AH+acXBD@s!ULh-2)1mH+mE?5hz!x^V;jHze{FpSSX9Rs@6ODQ1;hAYp1Y224CAfT6TbEi zMlucO&D@Q$Xdx#3ChY$QjHkDT^RL_=$lT2to(PO*_cYT8o}!`%Q^s)6zgDzs3=eEo zg4~VRQM)1!L2L^|*O)BhW|}P*N183g+XF2=Z<{SQ$w0HM!+osKY^uD<|yM~-l$+wFA;h znF0HJG(7+8=jtM8?s)z`znn28aILadW{={_e>A% zet*Y9dSM06xoQHp7^dJQmvLrGL@x9?=+6nDx9vt#oryfgJ3@ZRR0fHIn}c379Zf?f z;`B~7UdaV2J%_uPwoL?^bdUOG@?fuPqwoe6wsI2?;^WJsC?}IQs;lm;hhuR6$Ruj& z4uX-%Q}}?f)G&*G&by4KV_Cdu_y;lzQ}RWaenMsEI($7ZLO9{bakliou6+3h3Yf$r zy~Zv?VB|MjV?=Q6m}s_cG^J0%yq`{=OagUF&!w*>@osDsvB|tWgtnH+e42MQs+$kc z?u`V0SxTuzUq z(rFx8BvwsK=gG{i9BrF~oU`+2@C@D$Jcu@f&*H5{Qp=gVZ9op9EB8Zd`X<_RO|e{=XZUaIEt&z_eL`hF#Smd)F8@Y=s-^Ul0*7d4#A zo9PR;dr1B3qbR)}^`Fbz@sbflb9r}uXarrK%XhlPY{bX{wAe_i=kZwI5t6zu*=V|N zXVr2c(#aE(K}<#ucl6)=dAvU4(k}1w_ar@dpD*H(Bgkt$?+&TsTl0Ak`;+F)2NLN< z(694(LZffqM-EViK4nZ)*jLhHK9vDR?;;zj-!`;Ideo8al7F=EUaq;2LTv@?q)%)- zDRe;;Q@8A_G!=Sh|+@${1k zRHM#TSGVAQcHJaew;1ianQkxU@jP@Gg)QN0xEMx7OMo5)RI!8;4nHkh%IAB|&X9SZ z+#H-Bg#w#3&CTK4Fkv=b#?w4DWaFJElc%{@_R$*3 zSq8MHCT!1 zxp4-?t>lsH7EOfLyHjm?hI4C69807<5R30!$z3>0*1r9eH(=at4*g0X z5_}FlBmSg*7f957Yw2_i0VY5q{7Ha5q<+SqdSuT=_Ay?;h92(0-dF^>tp-JjpsuS? zqMRYLay6db!WeaS2{_He+wYNFhu_K4UlL$HCWI6!@}Yn+LOnPPMN@j91PGr43wetGLKie$In8JV@**I1`cQK$!QZ0 zHbl!XEPR?_;S)h^H}N6-jajsI6YqdJT-?Nsb+hF;7i8uG{%T=IFidc-Y$Wf^ysyWf zGx2uRsdVg}U`<*^(>C+dY?s#gbAFET@q@^;1x!=MAT4PN&*vs1-i!ex0Y(Al19AZ+ zfV%*l7P+0{4DU($WhYPf-!~nZLv80x-+zdY=O)k(K>0>W*~POUhda6p>&9%YY8QXT z-7JX82BdGI>OK6YfTh!r1N2Fwin9{*d)cBI?}(^k*~~V&xt9kto!3vMxd;q9#OBE7 z!x!1%;_IN2Go|lek?OnsC}JP4<38y>FHG!5z4!6{URS`T`$54t7!U!7q3`$cH7rEy zzaORKC4H&*0Qm8ai1OTPwsZmL51K7|wwW!7a0l%&TUzX*(1SdsZthfk6`GQMXXV-Y z%!I_SpJ48SmLKFjtc&|1F4zRa-t5EG5Ok04jKXqEFHanN%?Em3NRxTg2o-Th!~y#9Yu?H!9RxRb6aDoy z@8*8ck)npAdZ}<#;WfT4I4WGnyo3*HKvCOF#E1-q6#7~Gc=*} z@4#XXr@7zp{3Z|HK^iP<3+A9Hx|@BY*{W>Quus$xFU%C94uP(f(t$(Vj1A!5 z4uLd%P5$5W54!y%i(=$C($2A4F*_l>(B0d_3guI1vBUoHk($u7eU+Us0$`N@@!!iZ zxlO0vWDLw_-=xv~?|I$Y2V}7Ixjh7@p`;EN+nq-Be!yh7Ax%sD0c6ymp8mz?5+82h zi8|XUTJ|GvX11OD#TXoKPK4#F!lGaFI&-44%sKp@R$M}5Kk{XKdw-ge&zrK}C^w%+ zv|I&*+6=f0*aXl;gaE zv+raS+@&3rALqf8f1HPKbu!&K&eNP9Op-B!YGN`^K%R4+R-fQ~osT#o!em5!_u}YT zkI+x%!+uz|X6QTGNxfwkyNV@z4BCp8&Z6gDOf5ZWuR%liEz5!pZ`_IgviD zLg!r87M$g?-FW(Da{7bct;@&bjnY#u4i~?8w)QWnR)w)!MJ`wPAa;XBT;Y2>zIE{b z#ePwz}1xvAx$~t-o#*Z3dF7- z)TJOpKE)43;rtd1M69W0dI8r;@7}~hrD_EY_s0NTI(sq|57xh^}WTDI7_9i zfAI=lZwzg^!%cOpX|>K=tH!~2Lt$#I9v!14QjIkRNo}lIAx-9b2e+=n#5_w9%zdK5ym$*)*6S3$tthk zpVl-NOV|?%ju2*cSL+@jrZXqKkG;dr&2%yndXf;9Mv38GBP6|*=I6W}rss5?+Vm)~ zg|&VINh^TQK5%t_;afobV`N`K+Y)x7yl=<5W}Q#2h_o&J`yLNo4r7BM&V^xG-xeZ) z1r^?O3N}C~95$Y6JHIw=_Z)gf(!8BcR|!RnSo*%D@OLS6cMe{=B*m&-Z7Eg@{=Bv} zJ63$kz{=HWE5`7KY1j=HeYtBIU1%$&qEl1aiFes4DrzUHG0B{W6T=V~)?N&RZ()1U z*;Ae5WDanKzKc67Gld&$^hbM<<`tESdIpEbge^8Nj@EYsht{csXye`R{|WX@rR5#O zMl}dkHfpgJVTXRI7Mmc3Gv2eMw&6|j3u7+yj#a#kZG%fz5zS_5UY*2D*k)^ht9EEv zXEC)-RSG^9?&0Kwy5h7_xZbZLd#?F+L0{GVHX3muK;L7|m|)Do5cjf!(ZsrmxBdO_ zRSXu~%u!`O?*%Qc(oJ@i--UdIt%xRDHxc=UdK;Q%Ffdrdt|Bp>k+qf&w1Udp;8OG()vWQo;M=>TFvb zpLaM`p>z^D$4xP|F9gnC%8wfyA2;YHn{ykmzOv%S6rKFK)PvqEzv>RBlQdu~4Z*zn zYAm!UVYjX#tBOmzb*B`H?I8@Fwp_9Hkl7=>cwdwstVyes)h4@8CYID=qdbat2PnY4zcQd z0aM**(~c?y^b+H|th2=0b!L5f@$x8t1?W1C*7OpsYFSP4bB3<0@ETo20PwqZk}#>) z`vh77C^ku?cw5H_oYz1lWR$7-NhP$a6FdlZ^;jfh}G7Nh_C3a%%x)!jCrYDOW zj1spLV6Bzfr--)j%}5brdEs>JW{SATZ~*maAF<6%4G<7D#Ca43(9~4XULJKx6^)Vl zQmUBcWBXnJ>qdD^V@`^0Xa<{<0TI{uG||GSs!Bq5ZT*|Z@+qB#U+{ZoZ{=bFIISLC zdKiElH>n^^bjR2>^c4$mN_%Br(UCc|Lu;-|q|5z8Cp2)Q{vxOi>?Gl~4m4RA*Sl93 zu8yyx_YP@T4#KIjbFUamKrdn5-NlF!?_nB!Q2kK|@k>HYp_y;0q$6!`?I z-C+AG@~2AdS-97o;DpydbiD3v1?vo}O?K!!)E^+4*0PmwaD`Gk?hN%BAXPPX1* z3zx-t^kCUZkHg(6uQ!TZ;58S z(1~`vC3c~k2M!hod#VrAx+x;qKgMLcuh!iMZB(fsZ+i|~jQC_j$0tkg2Yac-uo?m* zdztu_dJnoF>QAt9i7O8#Dj*K{$RXMEGgymh=e=$- zX}0tpx6z9s!WX?-H(i*U7RD)(a==`aZL|WD7YyUqocn(dOi(mf@EA{X(nTF7hsUPP zP6xum_Jg)RL*%l0)}0JGoQeOpP1f`+G-jAc@r1RSV858e_}lixmg5bD1}YvVy71M_ zD0GtW<+Yp9nGvF%)@`_`%RCBq)}+mLq_xq+5u!cc-IR8Z5JtWuTqgb4qi}6aB8yDq zjzl9x9bO$?li$>E+B8xWd8$il5>-_@zFJDN-WG8@>{V95j;tEcv$xR}HmW^Jv~w|q z0dXRWqNwjE%z|$?d_P9ftWlz~OHP*sSR(I?qMt^IrghW+bOFvNTARa07W$?cyf&&e zTKKDjFsw&u;iH8U*2G$iv7$mQ^P7zq$-dURx-&Z-0wbVCT6h*i12p*08i!Vocg&>T z6U1N^OIZ^{UzDn7g78O2-JBp=`l?mlc5QaLZAy&+L9?o@{6I4mdEUoLm^q>_r|uX z|4n5L0j0Ki<9ZQ;ex+|T%BbH2#|IltR=RyNta$hBHUcT&?<>2IS z7Vpe_J6Q6fj1vZ!Gd5@FF5WG?&O;1qCq@23Wz$4x?Me0sbFRe46ZeB1HeXB=DPXz? zHLP;fq@*Yh>YN#rI$gAE*jdVOKvkOrmZCQ&D6m%&0&;RJSeJnd`Hs@I>0+p zf^n>9#|+?SE}fqt{Mbf%Iz!BZZ~9EM`v5vR6F2lVAwEm2fEe)8S)vIxHGh}|dQwP_ zW{D20HbuQBZeSSHpDof5m^oYcV3A{+Et>LCTWH^G@fNF3o^wPWrqGBvVko;qC+3I< z_J>w62VY`&G;6LXgxDxy9=yG%aGrP!YfIn0FIw|!P3iCVMH7CmDf!J8!G5Qk7DtEc zk3nHa=;|ie&Hl=9@B85*3JNXDDSf^$vaK|CK4zb0q|F!as1m<6Q>0C#V1+W@Cf>oy z@P!R^7)Y=$Jpdcm?=1jlx`D1P5Q!dMa`ktLFDZ>PfZvRyxDUjNZu#Hn#<76DM7lvEBLW+ zU3@h)ScpXm_=bfd8Pq0cp)fJ_H|<-5*8hX9ECSzumI6N%A?&Eu<3pimI6p98vG@or zbbB$D6tT2yiD-tkPyP}S&*~9hDw@~#eux7;U3jqQX0E%@9wLCCqrlfq`+&MF6^&}o zo#3ca+B_Fib@^NR7;dVjc}qo8pGmJGHY%ovO>xnSgxoz6 zzXr-6T+C$}Om#j2$8mxNd;}t~o~C~!zQV!Bh>t~Q4BTlSgDDw8_K#7#Sc=aPZP*Vq zD@V-1xv|O|af)ryPA(JK3@0eNuMqRN!2)?H7FoAx&`JdN*DkFTpD;dcEqSaLb!gG2 zA{4nE_*ArGN9p0Gpt)^nG>J^^(Vc!Lw3831tH365_6n`x+@SOH|t*9@LCA+W3^la5E z>qR|Go2#h*2GQJsOFL=l2GJ15T6b*_WBoT{0B>CzXaP@yi8hA2Mqb<>+2?MIDDEAZ zL@jegkZaew!P4}l$x1_Wg}K!@Y<{Ny1uNhqJuP~`l@Xqn1ArhWUHVq!W?CE$U)a4JB=mGR|YHJiC61PHh#d{lAbw{n#U` z3T3(|v+j|ZMUB(Jcs2wDPig)(5eA&uyG>lf4#y|kMMB4J@&$QWK(R3)*NJs{Nr}x8>GtS|`Rz>54T%2kp-yK-(@1aXOL^)LPPVWT$an~B{ z5m8XeDnKnw zWY|`!e?W|3t+e?EgcEoaZSg_j0edU7<|~orTp0VOzBgEq=U<5l5Zu3weL9T8 zGEGdzL66k0MXbB6>zyWk4NvIP+Etr$`)KXgBG~B=h+}+xI{CF|=5u>*7ya5Gvl8n( z)L<&duIe$!PxRja0lo$%v1D8$iv6hea3EyUh^{v~%>{5zz?Uv+0Ov z0q5Ki(VZ9OQ=_9Iuzm?};w<0_;56Vm-~^zUGLDM7yzqVMRVY3LmRu+l4c*nPFZ(fL zqkQwAHdxS*^D$6Sbp!ogC<5Hob^ndiv}2f@@!qrJVjG)Gc_%RIS*hp*mc#0&MGl^- zdl6=1mA));6zf`%c+1=N{mYn!=Gw|ybMpM^V0FnPFlr}(=Qdh!QuHubzpg9|Gp3!= znTAwb>B>pb6)~YdVIs3p;!gsH5Wc1lenOqCbn++QhK*iIpGxhEu?U_;?-hf3sz!H;#2enjCeL)xUuVD~5vkr0d^UWsNA5$O>yz4=u0Jq>n_?V_>&6Pwsx z@+d*&H&dq)VQFA3ehIV3kA5}{dz=w_C76e}oBce^gFQ{@lv^VDH&-83noqa0;;Pz! zfbQ+B7hakN2lxe|(ci4Z@^Z;?EFV44=L!uu`jEM1MFrzX+?dI{yU( z5H`B_i-_cfN#yaX@UIn74ok-z;f1xR^{=9Ji-zTAX1vtvi@={Bo~S$St=Oi&DDt;u zpM7ecq34C8Uo7y`T{X!|E0Wr0$6tAreC3gqHvTFmvH4n^-$Z}_C2Da21dx5H75px+ zIhL!9xGbCn_uNVo%EX6rAnrUL>FQNvx*dN?Ei1P#`MGgzmyv-kWe@D&iOcTW&)m1C zo4rDVu9&@;;|A|!$1%A3b_{BEPyUB6X|)qOD~;ia!dR;(^OLSQk;!D||4H_S3`Hsr>9X35ac*DKbzApGpyegt z`zv(%s_5jJIq;q+$f}COw#+rr8;nHOH8Bdj?1gKhabU}VE{3vJRoobZs|+E}FmR)! zgJvf0kog62nE0s_cpYnRy>|3Ecy9L#R|72zGW0r^6rC<_7`^xtEYo6YcSAI&t5lnr zrLvL>HcKyxBPBiX@NbPMKFfG|d_u*7-Y?7HN*EZ(dsd@nmWU~k8N4V(p zBN3sm_n+`-1N5l~PkSA%Phl$@J7@**O^TAgu}3Z@pPRy@*xKL%f!Ld3pzBtcZ~+67 z{DRiq6oZGXslu&7+z8HqGM)7as=*mj2el~+iN{>6WUQ!~gwro?M4n4dzG#mUEaem3 zB4)cNB~K*Qc#*qQ}p@-y|9^_3;Qdbn9gic3e9Ze?&_={8gNU54J=9pr@U`m z_K6Ia98;ysJNHw%c3AD)ZfFn1$$i2x!-!4f$V9yvO z%Yl!h2(C;mwc{{LeppT$vz5wjVW9m)RkwuS8@=ab8M;fE2+qQvH{FgrlhwWK?#qJP z6nPtr%^6C)4LUuAX5I#sN~1Nm!M1Fm6SqM*&r$hp@L-=)pT8i+d#TO*OK|4;U8UdR zqWkT0MhVq3}bVnG2)c@hq#&P;U6f~8!?ypZnKh#4%6vd-|k}ss` zCl$0N!(Fg+aWwEQ#FN&sDyu_t?}CDSMLX_-VBV*{?g|TrbklnxGUf}k$zu=5mQ^{Z zOcn9BBa6Js;wrH(BIw(6LDoL zjt2rt0NH?D>N*Ig_Jo{qO|Dp0lo9*z_T2MXUGvV=={N52J?F?ew6I+4z`=h~}1U z^zGkbFSFCQ$6^XjUY9)e@dWeNdCGhu5{%b+CuDe)9Z$RDoZ{}{_gk@Tm59yA z$x+iPjPZMVM;_5ip9p7G%T~MEw9^hL6lTHePenT9qt<6wAYlvp8CIulw4a{|m7zn< zKNllvAI(L1LXuUD&R<}-X}O( z*D=pxHikq?F-6s!D*L=Ib(8WEB7dXn6{1~(6Dem}bVjG~uzp>W>s<*77wov)XklBZ z%?oe@yUF%KSe!ScAWfEyieHGPY$`o}A^d#vfqNZsrc0+&bdbJaP?l!6++OCI0fBe( zm!e*yVIVWy7@_w@egzGx&3+)V2MVuM;Q^J_``CI5NE61s6wz<)dycUR;~tUSQ?tWa z%8DiOqC4?IifEsvAd01Ef^&eH!e?|NOO2XsRAT&Vy-JweWMZ{>s@iyWZo>pY(GzIF^3oW(P0To!Z(lpgPb5yXeZ*x9JtyP zx?^sjBBi^toqn|Y4KulZvRkR&>6VNP_0V6-Hp=SfN9V(sIE;4T7<-wFVwv{POWBv? zcRHQ5f3?=dG!WnJwBRc{GSaJ^w%B#LyHClTDFYj;FL>yEC&{?>E&SRxsP($vk0OA;Irg_J6kASfx%5U6QSS|gM&HkeKbCAD_fB;ayXlYaB^a_e1d zZp;bFyFn3((#L!YJ^C1Jeio4R+nYl-0MH4V+Lcgu#SZAC2{uIlBg#G(rqxhi4q zyJX4>Jnu)l+xqxF=!mP*UGm>Q)to*Buf%C9zUF--rWWR}?Kp$W)mgOb8 zSVBxqGCd+UBx4vx9T|(6Jh3X+6d(8|N}Uk2w%+g%FmW(b`=;HR0udHOA;+!5bfy)_ zE?l!Kt1F#!Q#!Mze=)smg zaXbZ^SiTH<_?11zgMDwOv$b%O)E)BHqiymiUa!w~Y_)u3pUMA6rrM$H zotSj>5KnrU7TaC)rGArLbQdm%Uc#k_NVtHO>6P~&*YPkYbqu2&`3#o%jI>jvL1|^} zD}x;6G1im^!uH;dWL;&lB>7nLf9#p2@9ZaWW{Yl|8uy-7_fJ&>)=Pu1I;$Mt5Z`gKV;cr!oQ9 z`lYAxWy97O4+*=omwoaa9G|?2IKC+Pd`89G+gT5YPF?I-2cM-hkDTPJ>(5etVWYi9n?^_aP6byx^hjMR*?pA$ zIKAJ$jxry|2QJr9KIE`tGx`msEraIG=k=8xI1ZTHK$!^HazO)ST98^@HMh(@&t>|O zQF?C6tVY{|fyt~+RQ1k!Cw+arTYNow%U6lOYV0FlV7QIG^;N9Q_Nku|tlk3dZKiNP zWdSejPY3;!=myq3m8QYvdL`;`@4`k^J-F#wMZ!4mHBp5@#Ql|x5D$Ouuk`hfL36YL zv;*KPPIK35?g7eb&hI_dwi^`#1FQA5N!iPuYGcd_q>EqD{6M7(4(*=`RNiG_TE`$I zleO1f474P60dLd^SD{&Oc>9+?i}75brNka+@zdc75I}i{AWQnCK+EPkftIa+zwk*N zCi=ghYL6Nz^SOsDv$6*_j|bL1LpdjsEm+x#>NX2e>UrDJDs|ev8K#Q2QER$p20<)%!+Xc%*wUvUx2wOiK?{)-l(_$2yCb#S)2anJ~r7qA4Uy z`Pp=;W~{oJSQV~MGh3?6I$^6{^_uqRlF1(?XK|9PeK=@nD7_c1IM)5)pzBBJPPj4{ z*x#+0(w^UcMjtiqQ(GmFgS3u`Q=-(cHbIu3wY)f`H*>!$TW5Qa{scvn7u&H@y|-7 z_tmj7%&Eq(ctiQ~XS6X11FSZ6NLCWrMQsTjuAV?iinL3;l>?01Z__a*|K(V8$rw1xF=#FTqgOt{s>9nPTF{offu4;(Vkn4780qM$9g?sMQ z>W)wbxbuje+N8-!JB0~t_f+L9V;^brrz_r!b=7EwqH+{<-7NI$_!8~XEM*0AyD}%p zQe@ESw$9dO%vKJ-=&aWKeMKnDtVMsIc)4jw%ao2T&Ic-?++AhT)_kTEx*KvKbleJ9 z1=y*L->L*U2lN{N?J)q;NhY)g;OMRlgwDet`f|5&fi2V)?NKIj*VpO>^EI|#`OcH2 zYu_IMzBtubhtyUVDxFjop_QFfjx&~{Z7WvxGk0knG7~n6bZ(D2tc}vfoK_w&p7b#d zF2TcmE%}T>9EorLtc+D~$~^U)GRz<|yalk^%k4U?@SM_w<5<(Z3(5yjKzrwRrHNrH z>;cNc+U+mx7H!+_$`EG^e%EVC2fpxQt=lzawt^j$qMJ(hI@w4H+u&ey_1<5-k3D*@ z@p~xbmg4Iu_}$N_+b!i&u4}4Yy``jh^YV|W)k|eP_sr3LeW{G(Y!$^-D^sx#aIjig z;Zy<*E8S|Xr(IdkxN*QI_tnb**HOoOsY9gm)P)70|=#_eSsP*`sjWp6jy#b>y zJv`M1Tt8TA@1=goo#auTN+&v9TOArD@oKZgEkF*$;1bv5UZKRhDHLcq`+lHh8g_QB zEC{rWS{`UgTA>Z~Q4^Tcly?Fxx7N`1I%+5%b%1`A?)3@8>#EJ17LE_J9Ezq^b=6R( z`52R1e}-{ebvD2IjBeCbXW%4aMm;sqRV~3i%Eh$Es7_QX@u<_PjOsI3o~9>ebr?S| zf(8U4*FHmOL7-aAuhgamLFxdIhq55GIb(-3uf{6zk-9Cws~o12O!n&`apI}T@?V(s z%w%~D;LaWCu*Sp>9{f^u9K(8s+2?wor5GgcZo1A=0tl)XWI4Kn+(XpWhWMsq z#>!VDl+eKt$bT$U7NYi^v$J!cw zvL5gd@Eu?uARVv*kOolZ87*JTt%1+rN>~qYc>marV7#dD?6vKD?H__P0z7YdjxYdDM6SHcNXu#^JBmuy!YQ6BM_IUm}j(|Q$(GM^P zkPdkL_N>p0mYsk^z-uiFu3%@X04gqwCm+yDkZp8aErnP#(J+T1!0>%N( zDq2d6x{(d&rvjw_s{kc{7UzwY=WtJqsj1rQ4<}tPS~8u{3~+V78!Z>%h5=qTfgaC3 zGVayy*6-A_jas*pY+CuAbpH#l-+P_j<%-d=1aJar6X6;GXYpK;IGfb^Oj}=qtdWr$$RI;2gjc{w{!p&rvzJEfDr9{T$uGCq~Nw zKz;>U05U2SXm0q8)d0BZFOU(^roTk%!0iWkomRSuDBMcGph|QrT*dX@ zu9oqG5S9-pM?qYk1mWfXCqW-Xo&)%xwB>LsU9`*X)n;m<-vS^A;L2k36FPkBuSUz) n=(m0sfiO2vHI#4);_o8<9Kt&yOb=`QQpwLT+se<^{5Jd_O>awy diff --git a/firmware.version b/firmware.version index 6cbc7f9..23df24b 100644 --- a/firmware.version +++ b/firmware.version @@ -1 +1 @@ -1802120001 \ No newline at end of file +1802130009 \ No newline at end of file diff --git a/ibis.h b/ibis.h index fec5e95..b8a9831 100644 --- a/ibis.h +++ b/ibis.h @@ -12,6 +12,18 @@ void IBIS_processSpecialCharacters(String* telegram) { telegram->replace("Ü", "]"); } +String IBIS_vdvHex(byte value) { + String vdvHexCharacters = "0123456789:;<=>?"; + String vdvHexValue; + byte highNibble = value >> 4; + byte lowNibble = value & 15; + if (highNibble > 0) { + vdvHexValue += vdvHexCharacters.charAt(highNibble); + } + vdvHexValue += vdvHexCharacters.charAt(lowNibble); + return vdvHexValue; +} + String IBIS_wrapTelegram(String telegram) { telegram += '\x0d'; unsigned char checksum = 0x7F; @@ -30,8 +42,61 @@ void IBIS_sendTelegram(String telegram) { Serial.print(telegram); } +void IBIS_DS003a(String text) { + String telegram; + byte numBlocks = ceil(text.length() / 16.0); + telegram = "zA"; + telegram += IBIS_vdvHex(numBlocks); + telegram += text; + byte remainder = text.length() % 16; + if (remainder > 0) { + for (byte i = 16; i > remainder; i--) { + telegram += " "; + } + } + IBIS_sendTelegram(telegram); +} + +void IBIS_DS003c(String text) { + String telegram; + byte numBlocks = ceil(text.length() / 4.0); + telegram = "zI"; + telegram += IBIS_vdvHex(numBlocks); + telegram += text; + byte remainder = text.length() % 4; + if (remainder > 0) { + for (byte i = 4; i > remainder; i--) { + telegram += " "; + } + } + IBIS_sendTelegram(telegram); +} + void IBIS_DS009(String text) { String telegram = "v" + text; IBIS_sendTelegram(telegram); } +void IBIS_GSP(byte address, String line1, String line2) { + String telegram; + String lines; + lines += line1; + if (line2.length() > 0) { + lines += "\x0a"; + } + lines += line2; + lines += "\x0a\x0a"; + byte numBlocks = ceil(lines.length() / 16.0); + byte remainder = lines.length() % 16; + if (remainder > 0) { + for (byte i = 16; i > remainder; i--) { + lines += " "; + } + } + telegram = "aA"; + telegram += IBIS_vdvHex(address); + telegram += IBIS_vdvHex(numBlocks); + telegram += lines; + IBIS_sendTelegram(telegram); +} +