From 3bc660cbb1e68f3c15ae386d0fe307c1964889e4 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Wed, 5 Feb 2025 17:20:18 +0800 Subject: [PATCH] change to transmit/receive IT mode --- Core/Src/main.c | 4 ++++ Core/Src/sts_aq_o3.c | 21 ++++++++++++++------- STM32CubeIDE/Release/WL55JC_AS923.elf | Bin 76508 -> 76832 bytes 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 79998a7..313cc53 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -104,6 +104,8 @@ int main(void) MX_USART1_UART_Init(); + + /* USER CODE END 2 */ sts_sensor_o3_t o3_data; @@ -116,6 +118,8 @@ int main(void) sts_aq_o3_query(&o3_data); printf("\r\n cycle %d: o3 =%4d %s : %.2f mg/m3 \r\n", i, o3_data.o3_ppb, (o3_data.o3_unit==0x04)?"ppb":"non", o3_data.o3_mg_per_m3); HAL_Delay(4000); + HAL_Delay(4000); + HAL_Delay(4000); } while (i++ <20); } diff --git a/Core/Src/sts_aq_o3.c b/Core/Src/sts_aq_o3.c index b55ae22..c27fe52 100644 --- a/Core/Src/sts_aq_o3.c +++ b/Core/Src/sts_aq_o3.c @@ -39,7 +39,7 @@ void sts_aq_o3_init(void) int sts_aq_o3_start_autony_mode(void) { printf("change to autony mode\r\n"); - if (HAL_UART_Transmit(&huart1, (uint8_t *)autonymode, 9, 5000) != HAL_OK) + if (HAL_UART_Transmit_IT(&huart1, (uint8_t *)autonymode, 9) != HAL_OK) { printf("\r\n Transmit anony mode failure \r\n"); return -1; @@ -50,7 +50,7 @@ int sts_aq_o3_start_autony_mode(void) int sts_aq_o3_start_pooling_mode(void) { printf("change to querymode\r\n"); - if (HAL_UART_Transmit(&huart1, (uint8_t *)querymode, 9, 5000) != HAL_OK) + if (HAL_UART_Transmit_IT(&huart1, (uint8_t *)querymode, 9) != HAL_OK) { printf("\r\n Transmit pooling mode failure \r\n"); return -1; @@ -61,7 +61,7 @@ int sts_aq_o3_start_pooling_mode(void) void sts_aq_o3_autony_run_mode(sts_sensor_o3_t *sts_sensor_data) { /*##-1- Put UART peripheral in reception process ###########################*/ - if (HAL_UART_Receive(&huart1, (uint8_t *)aRxBuffer, 9, 0x5000) != HAL_OK) + if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 9) != HAL_OK) { printf("\r\n Transmit receiving data failure \r\n"); } @@ -81,19 +81,26 @@ void sts_aq_o3_autony_run_mode(sts_sensor_o3_t *sts_sensor_data) int sts_aq_o3_query(sts_sensor_o3_t *sts_sensor_data) { - if (HAL_UART_Transmit(&huart1, (uint8_t *)queryonce, 9, 5000) != HAL_OK) + uint8_t i=0; + if (HAL_UART_Transmit_IT(&huart1, (uint8_t *)queryonce, 9) != HAL_OK) { printf("\r\n Transmit query once failure \r\n"); return -1; + } else { + printf("\r\n Query cmd sent out = "); + for (i=0; i< sizeof(queryonce); i++) + printf("%02x ",*(queryonce+i)); } - if (HAL_UART_Receive(&huart1, (uint8_t *)aRxBuffer, 9, 0x5000) != HAL_OK) + if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 9) != HAL_OK) { - printf("\r\n Transmit receiving data failure \r\n"); + printf("\r\n UART Receiving data failure \r\n"); return -2; + } else { + printf("\r\n UART Receiving data \r\n"); } - printf("\n Sensor data = "); + printf("\n Received data = "); for (uint8_t j=0; j-vs3VAq8XB4lDi)dxuA!j=E@@?Ded=n< z?P{92q(Z1^iCWpccE4J1)2@2;UTs6~Z5dOWVV&RWedZkJ&HV1~`^Rs19OgXV@Av2Z zd4Kk^&ee*fb;dF9xz$T^^6`PS})a@79IwldLcJVI~{O_DMesJOW!rgm73U z`YFj^=6{hHnf-6ybCGVjU)m?YC4MrWk3QZKyzu`t@Rib+NcIa)j(&BGuvm_mGCP!+ zGEC`*?ucSb1=Ux*BCM~jDPI%*ezQRzd74{=^Oi@%h1*+T?*kA0zoBs$_V#(`|7DHC zvG2R~(z=++tIl0{f}+)>z5u(!&sIQPhxtRo%ub(XRvM;oiN;*nu0f)D{) zg0`rzQk!7lsR7$6+@a&lT_aD~?St(e*TtIN_GA=WBr37?j_GFS7mZnW zSLF)l##-<9x>}`=cW+H?tCTBpQEaQp5Bgl?lB+EHNVwWlqx69zWq`e>J;`o%zSTG< zrMgNu?>5v|i-arH;?!yMjT6|;VEYLh6;~X2p)^IS472lpzg^}VX(?4%cZ++gQr&~^r7fi5GJdz{H-Aw9NQRH8df1ri6mhw7%7D1h;SZgFlQ>(&)l0t#Z3!(&&A`=n?;UrzE?r| zT@54`&IpbEppgn$<)Ct&l3loG! zYu*@`5tQx-j#HhV*ICN~APQ*Aa(YrN6$uV)(z24%hp}%tLJ59vpaf)pK)3(7!D~Mi zHZ3s^lKo`v+#{v`#!D{eYV z#3`C7VmAC|{IO`oR*JkS|5uU!aco~u9JZHi6i2U&K*Z4t)nKbjE$fLminYkeOZW7y zW4dRVoh=%I6IvmV{&vMa(CoA{L^?g@->bT0B%~*e4vsT9mAU|XQduGr&uUoYRK)e_ zg!F&8x1bFX`a&nQc^Y)I(r_}tS@ggxlxQ@y&5YK{%vf3#YRO7DHfKl*r-?|@J&SvJsfl-U{t_|OU*?TxMujY-7;rKuH^Aj?^r z7IsAD$KMshWUk5iL_=7nk`PrOoc-M<=U?lZp(StBHOtJpE7ID}RIMiGb+pcOOdm_2 zPpOZ!Tai<`_FZu^%w}@7PdRZG(SP2GA{IF&=eQFhmJ(V|$UcduTb4AmjyL6cdy(ac z*}1Yo26oO-M>oja&Nii$+|jvAEv}c@N!^uK<+`LNm0bC2(unBH8U+Oy=rQB}LmpFy z=hMX3G+bTPCg(#ZEDEMhK{XAYH_ooD*t@8tZ~IdQu}-of+lnRMWPM#;wQo zt32POXYWH=y07cJ>8zUNIX&G&8hx&%yW=*}Rmh&n9XhY8>yH^JWRKaormk!Lq){?$ zag`b$B186MXNF?Bxl>CKyd{?=FK98Ru3vgstZ>HHlWe;DHMwhx^txnC7O2UF$}U~| zDv5GN*J|~cN2aG()fFB&FQt9xK~G?YIbFdhjPl4WDN#xbc_3wcn;w|$J+4P;129L} z?-wakw(2&%W9dn4DjP0rr!g~}#pZD(o}fxMId95!-Fmj}Ty7nAIY^MTr2eJ`~(R^RJc`)#0C+pBh`zSp5PSKo8j#0Cal zjJ#XCxa}z=mVDf+c_+YYFKTC-y?Y&MWpu_X4mE$mO)(_iS!_zXDSE2;qRYK1k_>a& zG>Pcqswx;+>E2|GO*YxXt4iIItgn0!avUqhDRqI8-_or-uxVENIpvTm177)HC%%35 z5zPLtr`j(N`Mum~hfnTUloD?mN7F>9v0cNCbU>nc)=$fjRhTLN*$;LcH{G_V2&zZi zU7=!M*lvng(dACnBao#zZR#+MT~%Qfm*)lthFnw@gu9i@w`RdZsxn7;_{|Tt(;mY6 zx*A1cxj6p+vk65uJ>6>NnL8Hqf6J<>S_sO_iXsiK5?zK@isZCP1Y+Ip&bFp4ROX2I z(+>BR)DLcp8ClL)(`gv1`RnrARh8c>o)KAPp4%p~O@>IZoO-~%?g{m_#f0(>8Fp8g zuupZ+lj=ZN!z!9({!&e8S|CkmX6XGi-iGuxEj8rLYIEkDYSsEfwPO9Q`iTL;5_%s0 zOxSv3lcgCpb!)BsEu&w^+=0SUhOJ_t>@{k*I?gQ%N2Rvz-?%gXF?6oDZssZxzui4O z)#J)&EI&CaNl_0s$eWqTs;5Rqj{ZoUUn46=zoPzDA@j!A`W;c zYvk}p9*?Yb2VF0}XIpd)$27wB!1YF#sX?B6q+e=vZLm7@-(fSKvCU^ExGlsHyh=- zM-$XkkNoY?WVO9VM(0Fzn&XbkPl!K*UJ;QW?^H|?xwQ1W-Jm43uG~2=($!i0bVcwZvB3n<%Yn6tjcTJkfE?&W5oFd}1b*%iQ zDL0hBU6`Tnjgc#+zR~)2omxukkH@v?RHa2&D>3EmDwc`UcB`Qd`Q@}xYEg-7KfOTd zC7+*uqjerqs#vAl=c<_<^4pGV8!W7a#d7V82`aw6nQ@T5p2>X%U**kbhAQS-SC*$d zdRBKOWHUlLhE0~pNwX&@L*#+k9o1d6^4#qH>c(0bnD@S7mgRXvV$y00KE8G#o{BP5zWn&tEw91r4QxMPyM^uNlJXT# z1S(2q`Re@Vl}VpJCM=h+P4wITt86NU2R4b#u&>kiNp8sAoLWA8Ub>i{?cf+r`ns@YhBIVb9C)ew`zX? z$1z>(HLee#CvCer5f@|^@g%KvU8uE{^@sK@PTsnLKdlwVl_9NrOt>^H)AXOenCM9L z+O1Hf)^(~@BxO`8LqvQF`Qg&1%{8u;eK5Kc#XeE*^~FtK|`>N;V0 zVXbVx+@@}K%c;xTMoIViTdIh$Nfy#kFLSY!AFGhSj?AYGmFDd#4(g%Tw!mx~3TJr^CG&?$0zDwPv}U zigKFeS1a1Y)Yg;MTZaQQhi+tP*6T4?20Ya}dSj!~Pl?Y9v-BNOttO^b2fbz9IulbL zRfA=nob*(ZqsH}uht4=_T<_JNzZIrTvQt#GE=x@SWdG43CrOQKYkg{8qa1;5<*{qG z!s2UPN8KW6b`>n*r(_6gjcYx^BKbbZZO)CwyVHi;9d-yZcVM@fSMi`&FDU3ZVjO==uS{R*ducuhNu|9*mMj(c;_+DBJ{g`eF z)}_Lz=*tb1%ZcjHs?G?58o9>xRRe`x>l*Kt9~9=b-PS;J232T{tJWiuhTJ`I@b-_X z>&m;YJgq8Q%YS`(r=ol=FQ8k6uPr~h`WL0y(PQG&)DSu;^tj68afc(2I^f%D z<>2DM#_rnUXS6hsHZM7;@0S0qWUOL{6W8qvaU-3c_R6}y8CD;xpLE}<`7`^B1Sg+~ zQkuzsJd@d}vG&P@mxBT>?0@!+0QJJ21&uCe{r+b=1SuE0&VBQE7YxEiSES6`*ipGG z=Wbl7M9c3szNCIrCzoxqs-M@%KWv)buBsu(UKsUFmA|JT+3eX4t;f5+uXdx$G-6ZN z3ro#JVaY5kAN*{4rQMvG!#MR3UGG%RT38umzVJF?*p3*o<>Kc$VDP-~+~1W^a?bOy z%3!(i`53GU?>#>)Bp7E}R(Oh7FPm>pRPM>Xo0qCD*UNpIm$b>M9~PxnbssGV7w{ z%dCT}0*Z-4CuCbE$e}N`b=;>pv**lRF?Zn;*1Va^W?HSyM2K~QCYzJz6(MP-yrrE| zd*=U+dx2Pat zS&f~!+yiYlv0-L>maZ14VB;T>Z3ZR%l7XMRwHM~DetxqIF02lOe(u0WaR;~-14qj zt(+nM@NS~|+YEW~-Ng3ESPB#1UC&v|CDJ6s*j(B8ZnQcnS4Qt1tX{~K(|0Ea6wfrA zZQtEi-7-^tw7Yx2HVCb9=I$67`kqZaHdBs$FIl}xUx{-2d*%Q!3pqd^A3P4%oD)Ey za_H_h!3CgHP`V616eEjwn`PTQk!s;A*?rGob=54n5MM>JY7>d%RR~Jmf5m) zPnv37BnR*9rygD;SM2Q`cV>~W4A%+}w%)wK^bD#`JNHWn62ek|Mpop>U5T21=U#Iw z%VJ+`E`v!VF~uXT`^*EZpkhB~)Lgq@xg9$HjHnq&_x)lyeP7yuf+fN-7$Rya5+4Ll z!G5I9mZidyf_`Z@=F!u%HkZPgHcwcJj{qJ=N{2 zWa5G7fbBTs8HWamkW&vNsLrS5+5>Uwz#_T(z$*1{5w%<3xd()}gx!P50q!EBd8q?! zKWJ9lu9mwGCaQf_%P$WORtr|k=7;R+w$*YHzD}%`Z{zFIYWd@#0ipF6WX%yL%DYac z9&9Uzmkv}z*2uM`Y3kH9^3SDX1LosWDD{qr;8$U}1!P8VZBstFY>zsj6o}-)gg^R> z!{HHqn{c_3K0ZcY!iNr>=-VU$>5DNc8K2w@(th~lw9<}VGa*!MAf9Dxh1sW!yMeDT z?g{>e@gVSzj5FloGZEn;+Lyzlu(&BV9Enk1T_blN8QU^fj}rY;ya6Sm3OqWtr4hUk zLE;;Tb2iAwj}BJHZIHW|dCjD7C=XejtIVL5mO2%6Bj7k5KA3OcH(T~G$Ck4syQ3d%6#ayc)8tRH7 zWcktXW-Xb`FS6`tgxvK}>X`OSN;yaQakL*>{Wy-Zyzx;?0Og-513r%FHh}9OwfS)x zXF2}kA)P4gR4xVQ`tjrP$j48{QmmVqhEl%DxPeOO*v2H3;w{FM;sj&TpJPn=pBR%K z^GuU^-o%*ndl)0VDhlM06FnTe=%S|fQAGq!U*82=!K&U|rHap4KiBP$@Jv!E@O&C;DCz0C)N32kNI>1aoipE#W{B^$?>l1*hy`dr4OpU;@|1&m35j4|{MaheIp;3vl9z{!~O zZpNgqXH0steiW)#3=Tbg6-D}V#_dpVVq6n}5Uc#Sm@zqcOHTZxN5{Nk!>vi1Fbf%f zMZL$d-7j4|V+!2d-tgd^a&sAzKA$n=d%c6tp7dB3@Am-GPi@Mw_ow3rnF)@r7eEwq$F0%J-)oH6M~GbVj5 zW76j{CjBAwJ$_yX(i1C9>a{?zoWl z?wPLP``&`#by6EQT0OJFgTF-4fqm^{p9O!`83?@SLzk)QM}#*}J1V@g%enDpit zqafbi6UCVHR>qXx#yHs|92o!1NRf%|Ya&km*N5zY;uJ*OSj2dxyTOhOg|8IuPa zW73aiO!{$*Nxz;k>9;T@{b|Mr^v-jZ$v#2n_ySBPRYvEz!1NcOzv!pG&h*vL-vHyr z{{8g7F}(>h%$=s`9YS>WRZD9aDBuga0}A>W(^H`?Fed%3Bwu>cmog^(ImV=~Wc(-= zF5&Ll)PXt0$K;^Cn~%wXxx0@^|5Fbilitmk^pUAe^=%nHYK1``E&vCIXv)`jt`*tQFi%X0t$E%D8%cq#w?h^yz*)swp=YIZSX$3n`yTzClaQ z1@q(0LZ+uIiWuL4{c1n^%}h`BTNqQwPR7tXgqsP-VCsWS%bdrU^xGLz274Hj{wibA zU-#p2{keZkFh^y;`54F8hkW9AT$0EF^EGch)AxgZ12_lnX+%)AmzbWiy~;QP_Se9P zx_z!6YxSTG@C8r^1G<@PoSKotUQE9Udb-if1ALt6Ux%LVNXKC%6Kft~2?|XX)D^e{qlt zz@>itksqJ%WAh+iK#j;S0Bm$+%CIfd6Gt(2P>IYop93<8WE>GFL@V$)$c;9?%JgJ^ zopC(uZ-CD*`|U%U`rqYahvK^^y88$}TYyn8a*3 z{%b5%h6ya5MwuT14`-FSjOky4p6=Asp}c~{ZU=ZiV``)#W>37vkBgh~bg{OnKr|n1 zgy^l40e-y7k3V932mu)%v$*X!DQ{FpIO>@N)rxsc(;O^}Ngu{o>!*xKAH|sTR>q_s z$Qb%GVPgU^7|oa*jAKmt9LA)dD&PIO$ASVs=`zNYs)#YADrQXj&3=3ir;rfi6Dq#+ ztGMfO{NEzxZeb~YfyK*Uy5?_;pIuB(IqqRhIi6!&hxGK2hQOkRlU5Omlh}LEZzF&5 z=L>DpzGv3t?IvUL=44FzyNpR+JXR)tovg&lnU^CSV|`6bx^0ZRA?Kg)$Or<_A{hj} z$(Vd^XZDo-EMwB2V@&$Hj7i_p%>-nSk|lpfaHD0}MU1&DUvxRh-S|+K%>zf`=@cWn z`QRktg+v7y z?8i37RGuQnWM9mf^!ejt;>G8bLsZ_5o5uOdOUg>dr!_vG$Hx@YRmLsk%adJK1zDs# z=40|OpE2prFeZK8G@pHvtiniRg8p#506ZUt#vE~m>B%A8=EWC2subn`;goX?sRV*P%M<`^^FaEsjQ^yCIf+RQXklJp5(=|urq4%(mWFP5LxGPf z&TDD5FbSo3mGKSDg6@cGN%YD-%=oruag0gG$0f#!TzoB}<5eahi+aXkng!ig=ebxJ zTQv*1*Ul|c822Cxx$J6KvwS8UByU`gjAa6<$W?xfoARx%CM%ib!Lf!ZCkNwP42&m^ zP;&2J-ZHys4729=n4CY(n96B;ys5s3G3iV5o9G9NvrIq+o98t#5Zf7(zU?BPK3A(I zE0bthFkYlpQ^G&Pnw@4+2T9ZD$pbjVM-^L8^v}V=HS&%zbAeA!Mb(~0AamGLKIX;p z&)1TbKa#U%^jw0bBc&|+XGBMOGU2`iJ5h|^r!)?FT7g?^V@w&+6AN5_l`-kRXG{U* zFY(!vo*ri~(i79;42&Iuo@X!waw?^u>bcHVg8PJ0g_`=8A`$jX?O88V$eF0n2dPc+R!CMELSNZrm^4M)VlTc7^J?*m~ z5A-~T;o%OY=;&k;t=@`!7G`<-MnuQMOhP^{FpktLE-?vN+-2NJv!EwKjC{!=a~fiOvSwGnB=a=MHYO?3Bqx~UMUr&9#3ba`&G=7R8hZZ3i0~ju zx`nLqNvLL~GA1ASj8AGQ=m8bO2U%=pOdjZw6+{1(78kt*YDl#9Vf>9|v5iT{Vi)6U zGWNR|M>(YI;Dv@?H0dE%8jw)D4E~AQ2DtJu?z09&ExvVpJ0j)TSJI z0nr~tokCB16KrIik8|9-HVgNMbxk9N?xFW1t!G3O#b-t5Qp064eTp2yY% z-WbCD#@O3U85j517^4;lUfcswy@=fQw3WAI}OwI0pF}Fra4)Y4B5ma&R!t(P)|?J`cVY;(g4krK*an z;L8{&l%DiIf_FeqcOyuD4}1&fDu%ycIBLcGb#g#Jk78;G;GjRa9Ri?JC30w^1UMAh zr*k^^VuG;T)Hw%yEm&Aq=^4%hFF*;63`@YrXL=t3B!AC=V^Kp?1H_IuA=rzE=sF<@ z4uPr7$pO{Kr{FOig@vAlBmEU{Nef}Qs&h4%2kTkVCYGU@|W7(!B*r&<(r*9T_Kt8n0@N1Lo;I?hAb<1eB!fhk|Q*_?lo6n78p< z@D9{So^HPe+%DCy$3-m(L023p8X3L`-hd2K^#nV?k3wIh^8qluJ8x9sDKNe3nhSk6 zPK>?;x5CR?EfgeM!57GH3xG!pO zpw4H&@C2}fe#yhAqGb@^W2Jv#==D#7c@sPj z?h-02A0a}@U>mrn>T8nS;2O3X9t6+Ds4!~e&tQ7mKNbEdpue}o`0LoqSLMIL;P!BI zLdpOJc+^x}W2;wS1SS?-l}ync-~m$c0$XlT7_mG|ST^hWf#4d{NE$H$9tCa)5|&CD z72roBF#ZOi1S|9s;d#&dj~&y@w-EdSGBjqkBJf_UUfH_+v*0;wxqcbk6Ej`99>7lU zJrr=X&PTwQQ|`|zryLOQD!v4!A4`FMtp;v`>9iyXOr1tSBn{|fn6ET_5SX`lD=@tm zk*(_!!3z+eP3IJF20AtQr(x(A1wpG7-UraB%EyE0%?qPX%mecP({T^~HFQFx*8*4x zJ-wk}jG`^z&rxEdjo$?j>IQ04aeLDD^>w-j!4p|09|xwNz@bqUC$Rochu{{j%wlrTN;D6= zc!~E>f2xsX;MEw0%XIw)a4-TKON;47M{^-@TIz9+Kg1dBQ z_4JQ`2cZDehp0e!y7qpJJE#+^gy1qdRf2ASg`vr)coAHJsnsaaelVZg%fY+}zwqO4 z!O!Aiz+v70&){YVa1Z7mEh1AJWQbukj|@E<1kc5=LSNMMF7Ov@ z;t53CWw1^b1Lgszf-?(!HTq#* zVYb#Op^pMzi}i6bn0{)?=ww5{uQMJC=1q|2$4kL|9ZNA+(`tka)$IL zu-w)4`@ySGVq=(|1@jDUfEPc7AHUEGP)+t2B@`g_8KnaX6yr?Z&BQD)4`?~1&-KlGC19KzcmtxDvjfK8OjMb14EPQV z3UQoIH9(#0JuqLdOTi_qL|=hddqE+Dt@NG<`n{<0TI4$O&QyTX9;NZo+VY~v&1A3P1k-n{-euo1B zdP#kpF4zw~#1@mkfEQzGHs)@;{Mf|d4e&J9%L6*13E9lo8C-%UHUjJprXPJXI<3P7 z!3|8chQVa867CxX)4`dTT8#saC1833(+H>typm=3CYXLX&dA_Ba2EQ2MK2)U&f*1d zh%X>`83zn~bb}jUzW)D0`q{#=1(#B2l>813rfcu|sKBHm=#@`&c1_;`%q}p94q*D} zIU}Gx;Gy>!>;DJ{YEZ)Yx`Ri-8+vQ2ljbmw5`c&6`sHAgK9f;E#bDmXFM;_Lk*(nI z{k>0Gk^KQMKHg(MhX@hJAlR|SH`kvUYrfp1Ns@f0c*oD zo!wvsO=8RwN=(xL+cVbI|6~a04cv6yL4RgI6GuAuHu{K7*UtdYWK;2cFrNojfyd(} z?G@erSulq5{Zp^kzXb48T>Ju%140rcJvLy9559a{olJd%!lAMCL*JRE5V{zARAh*6;YxmFzmO0 zOE5DU7oq+LreAeTdjHwY1@Uyeq z5b+&&3@fn`2ZwkVhmLrt313EJzE0Reo6~udwt;<5c39pM`~&@L+m1v~<-!ezQXcHL?QZT=8-XFh4Pg0+*x;{Kke? z-w)i8Ep7wBj)7q^-GQ0!PgqMR?Vptg^+yp+0CV+pf30?xz<#+`GI$7Nc zeh3+2jnY=nKZ5!Czds)1k6%td3Inl4Sn(g7uDLh^ZUqNsFqQZMmq

C2S1?x31>jtEow39LK?BCAQGz$Y?FM-xrm6QR_<0;rxXObA9~m~mwUi-+1zhUM6btUX4Nyq3oc?4I{AF9Q-;tBEv%0@nu{qA zVC>&N&VLd-4OL|H>P_JBm=}zxb{FZ__;??9BAOsj&#(;4YxJ++A8<^#S=Zz37O?|7 zoVYEj@E;Id#vzwc<+s4&j|3=_1030f8IMeu(LXICyL-XRCCj>}3i<_(8D4SEe*axg z=Kq%+7m&dW{GwCVh_PI(`D-HoaC(3;vc-o-Bb6&*&Ad4;nYnQ3g1O5++|)@4RkzB{ z%AhW|zkB~fl|-Lz*r)<&yY!>){{v}>#gr6DWQS%Hhu1EA42ev5*#)L!y67eZ!JkyIs{ZAhnlTBl9l*? PFFGsY$E~qRO2q#G1j*%M delta 22045 zcmai+3tUv?_V=H?8DK;}5L6U|;UWUwQ1Oz1j<*r>0+u(t1*L|aGQ6f9b>pS7($XGH zGwW!Xp_xIbX?d%x?4*UIrKabo$3)Bek7W(RZT`Qt+1pvnd*1gQKAYL!wbrwq^<4L} zZ?pBB<>Fb(+NhwX+6rri5aO}+>k<-TOIHX%n?EEXObCU(x6(ghD_v3c&>PJ(O3)-i zSes%C!PX30I5ypg{fmICg&}W+@7CDPA}wug**Ku-})t+#h zU+Ls3%P+!tKt2-JUUA45SDZg%Kiv@)uQ-3IR@&v<2^uJpPTf>` zC_B}}bjPWiegkuyepbb~-<@;E(n{G$si1$xZ-e684VnD`WhdDwJz$%yINxyF6P2Ce z*?t=!>!mn1yAvGojsQf{-b4S#dJlAwerw^ha6^$Yxi5V%@KCE zqea-nzE?}L6GXhV#Ns^ViNT(Ny%QeA`I3CmHe}lM8f)3?{q>bOiO4V=K?wh~fooM* zDbCsT4Z3Kmgqlt_odcgK70yTMJ+5+($JNUtoL%dMvs0~bPR7>5Eu1-Si$kOgI{oje z)oZa8Cywwd5zhDJy7(47zH{G;f(oS@;!SZ_oGt2=jGQ}*@`ZC|b&HNyPYY+L`|`nm zR}DhSLB-AWl=o1|fqUFa2Bqxd=&Gl5)=leJ3HxhxwUr|2LZvvGkLI6*Z7R0a*r-He z-(apC^5cYvdta-w3{z~MR;?0;Z&=a(pB)rOg++`P&W(qy`_PB# zNG_ayIz6qE5-)6uGha4KY^yyE`voc(l3oW@{LeU8G=%;zA7l&Xwxi@vu@5_NO0-qvt3+_77v9npi=wzgEU)|GR1x!p*5|?@)R)#QG~@9U|k~wby>|MChSDf>0xB z>Rnen0Y<192sNmtG+)?0M5m-#$PBlMQB_3J5VlViCf*SPWxk*DtJ<((N>WUbaQ3e9b9Sx?$@X&&t_c~Ib4LtlQ=r=XoP$v7 zb1{x*L%+5r-eGh2Id|*dhi`=0A^YeA0)M4NbE;@D-p{%BBN0ytSAHb(laDq3skUXJ zUw%W6vhK4uFV)I!?Z>O7wQ_ZPyV60PYG0;atC7Viot5qKy_CNxMKU^duu>okQlr(^ zK9WmQv%5PyG(ua{Hq93Ce$M^+cnz%$)ae_Y0&6XZ{Mo9gG8$+emq)r&yLOM%)BUHW zA>B&d@?uRxy4Q3%TSMu_-A#8&PELz%Us>H7Gel5{#d)>5L*dx_~NqD%HL9 za&AXk%7yyG!V5D_`_-PgFynr;_Uz_DYxaOU#p>pK)!Ez=Fw~N*B&g2fdU>d0jM7e? z?>MT}`a1IeaJ4_C0EgQw=S11R)2OzQN5T$c!Wks&$1w0uVDq?=4^f@_Ifu*lI(2RN zJUZo@Zp?ngnETP`s&D`-T_OMKl%}jIkMF#(Nl-0%$0SWybC<|ZdRG+-A|cO{@TEy{!?eV-wagGrZ^Pm6YhLtZ@oL-*xTT~8qlD9 z+5M)mr@8Zuy-Du)fPk}+cZz349aZAVN1po){|5W1?uRW6dzxF`H}oZWZJ1qswMHfn z?-|sikFYMm_G}+HefS`Cv|H{Tp58Lk^Jd{h_)F+yIV}>mR!vFwxJG!&e;=Nrs0Zq0 z%*Zs=uSRB%{7@~bmX@5C)CouArW||E!=9|l5H;XzuCSc7IWP8!1>aKn!)4$tS{x*7*+O1kH7&ASx-W_N)ovt+FBBC=6K8x^=1J}b%D3&Unj(tduR3T;JdPB8 zrKs!`i3i)w*l^I3(9-d1W%=#m2b&o{L|s!9|ObBF|6Jk4=c^_vbR7EXM$yM4&Pc2(-V$R=I6_tp0iK>BBufmO=Ae^#ot zFDez=XO(`oPb=r_!&)R6f#=t{dU|B%yd?FDdO12TO)aaJ#d$I9ggc=y2{Eopk0?xZ zDt;09lueI1C8cG>n~z465oOAc^HSxlysFSy{jkjLFRWLxgcZ&B`-J5IhcJrvYI4!U zsV)9h_k?rl06&L#Dd$eHf{>ARLHQpOuP6bxFy7V;mlq~)Zn>sbMQwy(+FEtA!YXVP z7{Ird%IBu+P>4UPr)Ag`nlj~e3j3BC|I%7xRk2$t?ZYrruU1xQ(g4YrJF&@E5k60bgOZFU7h}sNDzs3$52O&>#&?ReS~tP z{L|@O73B~4=Of=WZwIfb*g9eBimgX+`Gvv&MX4*lGUIt=Y{3L9@Uh*_YrOqe*+gOe z2W-3G+qBxANs^*ef_BS{zD+;{3LLTVWHhT4BS4^i}(b3&rP}pGjYt_2f45Y-`c=u7=Y5he9re8gn-EUzA$<45))A^;Ey`JBQtb+^lFs=lic7YBvV;0SwRAk0FzFi)SzEU#J=0Ny zDV|F=)kL@JxF-j_-t7vi_jhc&ojYH2v^zH!L#N!Q%WLbX*hra}=ID+>Wmbz6yYq$R zWRd0wxGe@&yCSRQ@h2Vas$FkaRl7P=7sGuh+*{y&uE(r3>+N)l+qGAAShNbbIjlmK7NZ^y%4rL_$M*6lJ(a|%Vb&h~D%Ioxm4RC<8w)VKQ#Ir+llvE>Xw|N) zs_u?7WH+wv)Xgwutb?Meb{)Vf)9re-p0Xy1+cl&vy@y$jfGTC;rJG@>rRm7};nT24 zoG?__+^!6SMe+%HNY51S7|`#|!1o|i9?@q^w)$@~&j9{_2^M$Ln3c)xPs=bf9v!!;DuCreYA*yPC^)R<%`rkYBD^h`D;;voESo*UB@` z+SGZq@~>y7wEm_p(6J!q`_sOj{N>}%MYqhUx>jjlF02l0_hH*G8q?SO^4FhhqqKh5 zy%%eH(czDZhh|m;TF$(J7`7sY`{n89qm{w(*XMswuF20<$1CS#NybdQVa*)1L!AtIVRoyVwF6_+(;W)^$`bQ?WA!*5mFsq0l=6jzE&jk_ z{tC9wu>FMXV{HC1{>6&IAln1eX3lwHwry&`+yYycO|+Xjr(JsYseOcK7lj1adSE+^ zZ3DJT*s$CbgYjM0N?5GIX)2&!JE9=B(!u=_ka`Q)K;HvFh(rWbBTaoXV-<>_x(KF@z zot+b=&J@-`dI7>#TAuQI8r3Ik;G{qyN}v;pJhDAm_wU?kX;Jcow>Ia(WG^wrBW=4Z zeU5>OeVkEqZHJ}3=>N=!nvrxXi{zAD1Nwx`64t&DQB#q4BzOY$BMmMAcf`KY%!2mG z?#wKCVOMAWlsQ=Op)Fel*$lZq1c5- z&6odt=Y93qe7SUYtorkO`TFjj0bx(#++Ib;Y%TxT-Bq4UITl}&7R%T1wP3Nl{$8KpEf{2>h!f>qA=CFn$w8%=>aN9ddFcSP zcCq}tbfkYU#vS#Jh$ib{nGUj`x3(%DURI*sp9@5C;fFu^Y{L46zWs1fj6Po0uX+nw z`;gpE1ke{_R5Cs#E2LxZ5p8AL1~Va4eIRaOY=ha$j5~q%FzyQ8#W)N6A>*OoGmKmN z@Hoo!kbG)ioSLyj?$|f7d5ICUKv0`ujUWT|k8Ez1MTkK0J;YmA$m#q0s+(5G9s4`0 zTUV5Szdux=@9Q7LD&dF1y+xudPs$bttQ{<05W^Woop*n$i2NQRFp$lvZICi{sCijd{|!$Sg?&2O^cgGjoxuct9W z5Axw)9}e~5FduHtSlU0#2#H~Waq{C2?o#js-#&zn+bR_NV!Bx31W3t`LnDoaPll}%{(pNDieQ{*t>f6c~dR64g zeTTYe3tD*1B5>BQ5Ntzo)o7~qOi$TtV%!b(uYl8;{c)xz`xA^QteBSG{Q9XvK72TQ zR0@+(nvOo4;lsTdlg~knDSfv5>~NR1qnVVfE;F7gPald1xxpl}NiymdlaME;4+|_e zAjYR*I0gG~iVt^|(~iW2WHRXz$|u~;Boteb{OL%)@M0h7D%s;`oVJ=tDW9xW$CC!I zVob@>8I#)##-z71CjB7Bq+iV#dQGfn0x~$pm>e8uO!||INngR3^ye6p{vu=2$F%01 zqdOKPjRaU6`0!}Pib}hkOiY`r*)z01r3x;fq@QH-=1Ka+jG>B*Wtf!MSf9@LaoPVsgqF)BlwxaA;}j)~Nx!OHWBpnm-t5C$7*qOE#>*S3 zJ!>zMkNpE9J`Xt7rAJ3TdQyG(fJ>z%L z59FW&VcHfZ{20R5z;sGwcAgTZKLhqCwSGV`p5|yfiG3ghiG}fiDgAcF<8Z7JCp$EDaE>uKsOaRQXH5EI zT^j38GA8{E#uUIU#^Y=dU=??FX+sIjGclUaddm2N5gINd-L)8jItl^Pxt`fbZJ0hE z`e-nDHuZg&ej)Vtg4;0tXr`wKZgutMx85RT;=ypu$z)`c-_2{I_cq3)U(cBIn;4V+ zIAhYEU`+b3?v4D<6p>6o2BR61gYk?>U(1;EBBPN*5yhD7AM4@Om*~|#mr2NCH)HZx z%9!+b7?Zx1G3ldvdUGIsj1R{)=1|d*36AO^WirY4Xvr)vUt$htddeb~@gJ}s`^NFE}>!$?2HAN4@@vx5x5 zEEqfs&Ni4FW-tfDi+p&o4?pe0t9-bEvF49y>of#r%Tor|m;vz(##Ew;EN_WOf0^-m z6oBrAo`l@2p_0Ch?RPWYt|7s@5FBR-9_!aQK@sD9u&3LuCAgYqW)R%Jv3(Tdldz{- zwA-0|=>V_2MkP4J1bSB*Ap1`85A5U62N;I zQx!xpd*U`e9MhPmh}gygvCD_Q_u-bqya7=LV;QF-AoF7pw>|yjw$l;XCT2mEvXwD; z*v^>ryBU+dlriZKFed#W#-u;T7FEZ#3`{44YryNE-(>is^b43h(hn5HOh5)J8B+$U8Iyi3W75Zrkk`LU zQ{Iqe6%qYYMtCcjlo^coAeviv{sO`2(H#NbU`)<4<-BjZB&=nrNV=Xec|9>g?mv^J zoT4nXGfa6NF3k^hg&QR_6^IB>nlQ^!LKce|kCdmskI+^!30Z7mOaW|VO!_m7Nq>$p>1!F2UgS28F_JO# zBSjPwkb{+s$-!#Iqz@j|*daZF12I0qVv=6yNFR&g4|r3|A&U`oN3tPJ!Te`%&5ixYWXCJ(r!)kvSunDkxEhH-1U{byqWGRU4RKR@3G_u5fCA#@KHGJI6= z2PBa^Ia%*!27a>txrk1sOhN(BZC-L<23W{ATy8rTnaKo{-~}J1`@nj7#6bF=8QUn! zkl&f4GfCPOJ?KqCVMgV9xv!okhDk>1X*x0qrAcS}kZzH|BxI4xc(!gann}oFF5~68 z#R4WFi%pEz=@wg)RsPs z+uPq?Ov6(asLhx*OnCu*qrrIc2EK7)r1)Z_rcU*`CvO3aDZtB&Ngp%KYft*zN4!k> zLdK-;IHR%N&KUYoao};U!Ig$OViG+Iy5X*WRN>SuMl%Un!=XxDbhV*=a>5%vqW3so-Z>$evO!@;pOaV0b zqpRO>=z5I=IOs4QK&>$17;}+_GJFh9gAeKj6w=R3PfU+CG-T1x3py_J@>KHJ$<8Dc zWac8T1$m&yAWRQ)DMj10OhOhH89$|4jK;$dW*YK2m+=O&XYoM963Di(WvT+q{mG088wq&Jh)>5@rI(oD{}647=6laSv{jBR8Q zLQim*(RLw8r(H}!l~l`^d{~!wQ}okQ&?6qE53=aUm^{!!AErK6#$SyK*PDk)$LZ1b zW)iX(#CVFl@}D?mrc|zVQI^WC*W#3wkVMF-*J3n@Ya-k4K4cLnwu8M-R|JRyjW|$z z)rbT113ta})evLD{T$<^CWsoCURdIKdIQJcK;1#nQW@}5U-gZp((zNQM(4!boX(j! zANOJXfot8MA-i_PjqQ8+aGnoeZ_JvY2LySBqkNbiiR1c-K1`3znffcJFM8{eF3~r~ zaQzFM_W+)gGq@H^Z(-u@GoIO0MMzT(qY)*vK@g4#jK*z{&xg5{Nh2 zRgng!H_jS3Sfqm&w)GBMJNVX8?7lNGDUI%Nz+aiVa z9Q0Iztzdc<*{s5kz&HB{YZdB{^xuF}tb!d(8Eha2s8SSAub~pKyJG==J8X?FBxI8q75GgTZ+EPG38c|FK|NZJvOh3ivR1oi@}vRXzy;{Rje;m=Zh( z-j*Y*y$#+B?usTbt9(0{cf$9<`_KfjWRDs;3hsnqN4=K(odWN~g1)1{-+?vy6$P`3 z{)7M@8~qCtL82DSn;;lNA~jf8KSYF-L2GbVR2aFr37#tpePDmNR0JD==$c|pmfM;OhFiY?%cnv$;?gGyX!>jQ|28Y3J z)W`rMz^}k{fx=orqXGe+YmV`kg%Zp+N`xML_fcM&`Thr-iVV$}tq!~sN3YR_J)Zp( z_n;4$O@e1R#VG`wZ3K`6{t~xthZ~H?HwEUDyYq@&gMe3Y9+-Zp0{-H1Y*-sUfZ>3xIIhW>4Ee*|bZ_+4;YbZYWX!%+K*9N;9Yr(y6dm|kcw z`@}C`9^eJ6cYB}{!dwra8hU#10i#Rja8%VRD6!ebDd2S|P==u&1dhPLhYElIH1Plg zJcFs=JdE?#DFNE32u!bQm^HEtJP*Tas^M@0_*dMU`qtnb;6hC0Ky>0@v7791tJ&;? zUxMk^KN<>%TdPA@`dO7*~61;4%cNP2-*`t8er}X3hUl8ynXo@A*LUghu zBf|(VA0;+$TTHcPiL$_at{+T{fXo`0=)-ftsdMm#0UiJKaSp-xLAU{GWVivGg<G)4IaLUKv zI=IPXZ$NJFGQ~UW1Ud)3PBk7g4|Up5Fz@wkz#rq1*m}c%0+<(|E4UpxrDit_?uTF> zD?x!zf`wq@qkm`-x(ZCcOF4Zi4OUjqJ>o#}i5z6UeyBKV*tJp;zu37X!fw4}P` z0*^w8&0#u$(ldW^z~Sg*rAGRN;MN!= z<|vY2?N8?5Z3uec=w&k!l!9BK4ebVh4d!dS3t)P|&763ygT0+FMBE{J7EoX`o^yE6 znE6n^h-i%epKyAtM?_O6491|!%r#*KcmX;Y)c|#}d%*noJpkO6m8bwb6vu+?M!<8x zJb-7wS#15VB^u+8AJ5-{0ljRUU^sXeOt1KvGu`Ll^Kf8R;Sb<7I2Noj?0*B_gHCDM zSA%!r%*vcs=%B&_iq;@d-~gRnZ}aY8dXqcXU`#UN@9bcb2M)*7OmjE&k%z(D;T*7= z4ZDrtR&3@w2yTleHUrd-K|sI2MI|DK--7pHsx=LM0b{9bJ!$Bj;JBXN1&F0Bu8^P) zm;r@?Td)i}f$3MgO#khbWp&n zz&q)}yfG?X0@G`i=zF?;8<<^i5buKNXTTZ)!twue2zuNVsNx6kDU|Rr!@*5(UU%=o z=`U~#@E}7Ui1jwo+$|v8}crd?0k_v9u8?WqAdOH61g8-kqi^BWB{g-&>`Uwe* zuYlx2kFjsvWR$o7Oz)?folFDAvPkJt_UZEz3tdW*sJU_K87$KhBo92t0elOl_jJuFyaH~ACDd>ufLlKH9v_afHM}xx4(pEKeK^(> zX@-Lzu^#3b4uAo@Uu+JmG2lxW*XFRC3qH?Q!K=VsF_oM8x4=Eg zAHYk{X*FXUik~6i0n~%nVIne1*fd@UQ7j;(WwjzAz}!9o+;*h*qEr_!{TiP+mD|A! z+4>>}+!5_>qh3pWU>pROFtysj6!9bA$vBrYXU3Ue@7ZpUmrirUCu}A*L(c==3HDFM@!zbnPa!C~M_5-H0h|ZZYu(f-DWJc=8(4rL7?xOCTk{Ql z4A`H|Blt}=K|c#f1*G(S!So{@==nMi0l%f;x?KhyWg~+;2>7!5A#nJUIF(Wx^iP2C zp%z1pDPl4BFxu1xru46Xf5oX>lG4E2!2HBy4|q(vz^_m==ud#P+w5rdH3XSL*r?5^ zNqz+LD*Mfc0~687Fs#fHwgI0&6TrVdisHd^d0v5lhIJ}91T~67h`wm;lIU~%&w>HJ zyq*mfYlRK}(dk0PSny3Y(M$*P0G|Xa$iNI}2{;nNdMeV>`e8Ykeri$$Q;o?)j6eGM zMl-=%$Jd(rj!TdVkbuhmY`Wu*jf51F_ z_h=C0vkQ+ANjQCG$L~(ypV;v~8=Q)3zxhT$W5K)zW`NhA1}uhtC753USqr8Yw>m;k zO`>gsU@8k>FPJ<0oEW{{VmLet=Ii)>f$3Kjs7n?80^pHdR+GvV=yz?4E;gyDs<|{ z^iCKgz65*wlol#}fFK$NgGY@7H^7roBW5r5PsUu2qoLX6@!&cf3rubgPDPcQGhJse zufZYUr;5BMr=!6A!GkEjC{!8VOrdLYcdK|hc<{c@lsx|rUJFo$Gz-h_Km5Tl{qGm*S8C~GtDmPw$EP!78E|DLoY08I6YA$M)DnHr}560n} g%1OsX;N1@$0p@S~se_Uj^>nf#uHRK){2BZI3no!llK=n!