From aa060ce1b10af5451c6a4e0b884f518ff9a10cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Thu, 16 Apr 2026 12:36:52 +0200 Subject: [PATCH 1/5] Create Changelog for milesight-iot-em400-tld --- milesight-iot-em400-tld/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 milesight-iot-em400-tld/CHANGELOG.md diff --git a/milesight-iot-em400-tld/CHANGELOG.md b/milesight-iot-em400-tld/CHANGELOG.md new file mode 100644 index 000000000..57140b7b5 --- /dev/null +++ b/milesight-iot-em400-tld/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 1.0.0 - 2026-04-16 + +- First version of plugin \ No newline at end of file From 099063f2b76b98ed2d9b26f2f57e28dd91811af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Thu, 16 Apr 2026 12:36:53 +0200 Subject: [PATCH 2/5] Create LICENSE for milesight-iot-em400-tld --- milesight-iot-em400-tld/LICENSE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 milesight-iot-em400-tld/LICENSE.md diff --git a/milesight-iot-em400-tld/LICENSE.md b/milesight-iot-em400-tld/LICENSE.md new file mode 100644 index 000000000..bffeef341 --- /dev/null +++ b/milesight-iot-em400-tld/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2026 Thinger.io + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file From b7c0960572cd120b31ed6b7040f0f7973b43b61e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Thu, 16 Apr 2026 12:37:16 +0200 Subject: [PATCH 3/5] Upload image milesight-iot-em400-tld --- milesight-iot-em400-tld/assets/em400-tld.png | Bin 0 -> 69249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 milesight-iot-em400-tld/assets/em400-tld.png diff --git a/milesight-iot-em400-tld/assets/em400-tld.png b/milesight-iot-em400-tld/assets/em400-tld.png new file mode 100644 index 0000000000000000000000000000000000000000..10f60641821b02c9b4cb925ad2091b7027c0e57f GIT binary patch literal 69249 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
  • -l zgPWUQ?q_p081p6h1hXZzopHlM!$wwK803xOxDmCLQEYKM%%6$A*qz=oB*-fx_diNI zw!7QqKb7(`Q6Ll5Z$E@bI23 zatOV!SBz$hM{Eh)OyW~%*k%$W9IS%JZc+*ydLe)d)MwqjoQfV}n7X03Od- z8JbvJL%HZAmO1hbS*;KGR1j?@4wh7p6zUk+?AN;S=hZVTsvzq4ymYyqw8>(Ci8PTk zxQL8IITB;(zafV+G%|t%2(aB7bl>G{O=cqpsG75QXfGKBMfO}xh;>hQk1F%rvP0lm zceiv~XP(*h@v;A)=~JdLeva?z=GK+td)94sELpKY>;T{g-{rNN8zN51P~!|c9S8OPy@(BpTmuV(`MPQ02?; z7lU*!+R#Mda)KG)nJ1oiz5UcWxVBw0mTp%`anCrrLJ9sX@S!&@$D?an20Ig69f`O$ zru{i(3;!51H8@Mj(F40{7QIVa(I1CDGHlvF&@M)Pd=vik<%V} zEm>_q%XrS1?u~Nlb8xluS=T)yr0cg6&7En$@Oz+`)e}o0Rj045-Fo|B4{Y>nZS>@` z^)>$!mGA&i32FTTHry%Gvz2XYfb&jBcp)e(yt=c4mfXk6E*J=q5@h=nvRSbPx2se3 z?(Xy{FJB5Ga&_xi;^@DB-?7n^%llS3RECw0kD zTn^XbW7=|(PPUC5fOn;dGKdK22ws6FC#Q}Ni`?1`_b&KnOSpl*e>l4U6WrX~EN`fK z<6}@Z<>2nFeJu5x|GQ!i6GkgP72Nyv_jt&m^A72(Y!W8jTh>d-q1RD5n<7=AuXI#! ze&OIBNS-XqZ9!R0lQ3rRB+P!!?hKpZig3trF7GfRqD`ETy&5wEiv@UMT=18)$rd1z zmCFa9*MMZT&?9zIHXLUXYtSRO2$GFDoIXWkD3~mIEj#Yk<2?V_uC8tW8>C#sskny+T4}p;Z2{NPDZGK<|9DGqOQ01Zyd!WY{UNd>-hqW$xwfUXIu7 z2a1-KP^SVwmN5_kp35XoJSF26_NZHgTc@@u(ZuzX9#24WQ!jseOO-xhm6<>tMkce5<2&JSkcCDPTZKVhO8=~=H$uXN3T zVC-}60}#VkJ1Ty!>nDH=3*b=`@jJr9(SQ!5we2feS{^P@cP)&P$sYiU?E)geDs}hr zGT3a(tfHwZ+Oa;0Q>mi4Hl}Kf!#y3VikN~TETCf3zO-S|%4Pp>U-zCZLbYhh-pOh0 z4?O^`0H$C8)}WqXX=8(R1S<{-3xGM0tsNd>`%erOP5iJ(1e#HRBz3#Da*MZeM4LIm z0f1g7^?Rgy-#1);)oRP`6^1m-2>{_btBrDSWXQy70Qnp!=UUc8+~50nv3wq5t)U3K z5m|aCcFI0{vrd#LJi>0Tejs#=F*&|vnIVF$!S{~ZRlVe4e8EDw|20xirsTKrjI07X z^{TaXIK4Y^7d8eR>7GFN-}-ryXKx8hGde3Mtc1yVY# z`W&X-hA$fKPxU9n;r>UJRrTcDUN2?Rnfu~5Waqw(;j=itPuGj>tj;Olw^lbm=F(_; zy)|Z)GM9C1!wMA0uEwm8>g9q!$I$0j(WK9Gd#LBWRC;<8X%_R`6_quMYgeW~n)G|F zuj^S`3kw-A0V-*KUvXHYXe!5EW;|N8Xu{sljm3xyU_q18zI8o32+JFxsgY#?bSFTT z$i>OJD&ruAkR1ZTaXVTJmy+aYoUjB67JbXt$16eFjDuL_6FJu*9@GxTO_MsWi3Ov0 zXb{GAYk`7aNY@VP7~nct*)M;nzwW3LT22<#_{|-h^%%X*o7hujC`T;uVbIb> zh36?XF|uZ@N9MF0lFMZ9k3iR1L1gA-Sw0_LWF_Mla4wOC_oIYw{W%!iPA+Z|`fL^g@b zA$Jq$efR(e>QAW5A!2WBoUvHl-IeEtCnbH^0U+8-7z`;BATSq?nh4)m0(l`V$M*pM zfDMj}U=(yYL|G0Y=W-}O9UXB2v~!uHXZvGnx7NUWfbr|Q#HV1JPM$%n0JXJMUR8=8 z-%SCI0O)7{NEaaWs9ok-)30wW8e|I3$0P&)(dm^c&z!ntb_`aJ_RYvB^5Lmp_h-d= zU^J8pjYkMMibX|y%r2GOpwy*v0M706{k{%2KA9(L*p6qZZhy~RfUC?*wv7?_lwg;eyo_46&? zK8PHaf5+4bfPTJ)x>A2{$$xFnfhmP?U5=+hh)O#!>Y2cO9nDr*pV*1kUeO`07BOF) zOQ39qE>ad_u+nY(UB zN_g5SXuT_rD1TXE=If0;YG#DdYB@wq&&;alj5^OAPNe_6u9LM3HuRgRl_|=zC3!LY z%aS{#X_u+=F531ciZH;=Sx%5BE316!MEkW+8ZAaf(mAt}EHqqo!CqHeyX?iyVFBPu z7z_qPz+g7ydxZO>^yKb`FrNWoJkmI4cXw1G*;EKo@Xwz=aY8%ANdoMOh)c>!)_`mm z0PCyt-M}f(cGEFd4c-Ma!p|oh(1!^$9s#M!vIlu-X(@UQyhZ)? zeQ`lpWH3BofA>k|R#c~gdDn^N?^O|r+v0a?-TI=RM?v(~ANu?9E+kTBNY1Nc@?+!s zg*Z>n9<}EKf+WSQ1qmO-nPRu7MJv?nCLhqTiFm8NF@8*nU>AAfNhdU<-10F5WL zho;!I7t$X@sUk{VZSL&I4Q>GZ-Qdvhiyzn}TvPV;_WqnoAAXq-$xdVeEf*zkX@c_S z4kBu=j<5XbBUrh)Lji^XZh yuO|xGc_5r=uOeb@3MbhzIj3F{%G_VWGz!!Ul9&O zZlDsH1AVPre0JufbDZp?9P3x3n}7sIPVKyXf9Ul^o;yC`hJof;s00)%Qj>>{j~$%$g?6H&b7{%Nt*AK&Lguy4>A41eI|QUWoS8RM z!!w_0ctjyriIY)qX>RQQ&O>l3Ujt{M@L*csd^795d-pB&yUC9}#dt#hb*#; zrXZ30Oy-GTdaMFrQ0h*$L<+Ub*w1pTd+el8*`6=hyHhuLg4umJEv9TiCK-3hm2euo z@zkGX*LVxxyim4)NIvzaF{(B1a4sX>aY2espOcid*H5{|H7 z^>7}w5-S^D0C1G=Ynf`CG67mCU*x_}+p=ilE!xY7H6ot`VW95uk+@WYKbu~>VWE3^ zI%#}=uoBaVL9%L;vC;hDjTTrBvwAUZ8X&xc8RnASk*ozSkj}#R=G<0kwpyo_d-@bh z!iyEH;`}+j(qMkfovozWGjws#*XVJ)31HFxP$|v8Tpakz%Y~btI*#+X7X2_i5<4_8 zpLLV}72Jn++Qyls?%!VE#kIlXS4)o4JJAL2FWBhi;i1qB%?3L4zG3%MvQ1Ds>1rJV}4{4ew#L0`k|rlhs=}4CKC5kEnfvp-N$Hp# zAE>|PbIvZsrvg&d?$iFti@~o7?b13U>=9Ih!-D{+z9q_pS}|EYSgFaJHDUQg*HYLC zuU=jf_%54RxT988RmF)64`wzs3F(Y)5pJphfYiYufU!#I^S5Z)+S)o(LHl7x!FZ+0 zxEC+qQRC*8Q%Cam6k;RfP-J~NIZK{(YiC8{1|i=4j05o@sOt!;%h98#Df1r){{He( zG^;-x8QhHM;B4Ae>A+v3QWnZD894Q)IIK8X-*!|wp#1_GSmjykp3MO}<-%LP?$dMAjfhn-PFZ1@VR&) zII=1E&gv~&N5cYhXy`#GwAce0)dqx1fX4ik2hI92J9L4y+G~qi*H~$d;oQ18WoK)< z3RFkc@Uuu~n3!qlXdRrLsm*q}yO9BU;q*m*WD`G+Rkd56bcxxmaU0$Y2Fpm7$h%}UK=9dTns z55MznW3ndQ3p<5GmvySknd=ooMB6q}^f3Mg>Tc93A8fwqQY#ex6xa2&z2K2zy*@4- zl2S5b+%n6uWrPV?Zd1?47NzpR0Y5chr2>BFJ^Y2MDqnVA`}T=mb+ZGaM*(pJrh49=E6-Yvhlgr6!-a-xgjF;7{`o z1_T5I=DR~6QmYt%lXaq2Dm0LjzOgp;iadiH&g7-w6KYpiTdtimoVc{je=~RLIFb#P-{xNQGb((~}W>Rq{U-NanxS;dvS%(uH=%)FC8DVQCqQ)DUNQ;;Dn4e<6Aovu{ zDlZfffA}|Jm}6%`U?xww8ipdFAJ!=~qik*Lwt5FZbL_S^uFOuyfrM>pz5J&vnIzBv z&P#YTN}kDcP3%*>B)p7)GtEQJRE{uzW5G2LuQ^kth{~pD<5wTJPvN57du=Z)h8079 zyGb#(vsS~>#Y*M0igFPS5OJ_b?TcrocaKh+y*SqwnK0JVHe0NG;$hv4uMWU#4dxy- zPXI-?jH}8FC^a7g>5Q%l_n4VIYuT6ds#4p!$cqb?@b|zgC`rk+?@gT=&_`h9KYxA% zvR0tiVwyEi7waqGSD@PfYHT75^iKgDAx(`(W(%8z8X_Nn`VG*94!nNzsguC)UE;gr z!vz7LqL!1a)CBYqe4!#7(?}G`Aj^;yncQ=M(}sslOuW#wX{dVTmSSo%1h5wXI;uZ7 zh+zuE1&meW#$FV9tiD#@3_DK*S-1p__GbL6n zUkwZQ>V3q02h#^CXA8HZJFfo~jAJ77Tln2d-*%)2~+tZHa;2n7jGL=%V2044ZLMb(aEwzIQbv z0MaOc4NKpWW8h*R&}x9dSX+Ko&q&HeorF6?#l){q)dHgv8A)9#%7H=b_!) z+?F>sGQN!?>UMT^4(5$`F7+Jn{y_V$y|=S7p#a{I1NyiNG+!5-zb){KUE`=7K~I9F40k(3Q7h&2 zJL5~KcQY!l2BO`ntLcG^AI?**3-W=>Lk9Xt)cn(F}Z~HwNCgXeV5wW z3$YIfg{+d9^sYs#aEJyBX^9*%GqKWaT=#=f3gatcrk48{-OiWn)`h$|H`*{4qG_xO z=W@2FdxLMf^XpNOsrrJ!&vU}vTdx~e3j*ULmlb)K9S6T{CV^j#zfHU1;ftMRi&Kvt zhHVi6flaF@+)NJH{q}_5S?q8jyO5BLo95t1L-QdwnnE1n8O9mVwgvzlby#FeK;gR15&NRc0-qvJcGGXm`Jls6g3v9~9jAe}36O~9T+B#6EgB*L%clx;BlqoBC z@pyoEc=?4ZM<{eJ8!v1XS}SL)zmM%?jt#q|kk!1MOa7V;A)ZX(t_nxuuO_xt)YpMR zke*-w(7?vDrvKjU7OwC>v~m!->KQeV)Tf#2_f}!@Ob`sLH>6SGGy2o%ahwYuxmA1qLN&;#7bmrnF<#Ks zGnHoeQ(ok|aZ#7;gw9e=X7>!AP9*;uib(2hr9MdwZd(pMhPY+E62RKeKGAPpjuo#q zOtRI(=g8L@E#ZMYC7RJ|_|CSdJJ!3+k(R@1fDW{&imIw0^+IYL5ekvn_MZ;;CicCX zN@M$GgX<3u%}ngiy8w-=IXiL$bp2u{J z%gK6=@PD%gbm89T9WG5un94coh3kX8<8W|~5E+C|jL*a6Oqry)`U;dRd&0~-9BtQ9$vNpz)kR00 zCp`;TRo^0l#<{1_=2X3{+i&OqmrYC+iBBsLdtrsr}W9U|{@id+8 zB%_J{Vt4n4h5xzklF0OZQ`MktJ*yBGQw%0Z+p2UX(;1=g3wCQB{HADSVbE~ z8A%7~S-?GU0?il@zwgpxlWUkkIKUf5k&%%WLN)ehC&YG0|lTuLhtgq+1$9G~-+WXXGqVrxdRRaJ6++{7+L&vO` zCD27Xr86MRB_}5*m{swe$}L}q&TSzMF758^6*&vkk|@S$b3|7}>ZHiIScTVQqX=Z^ z=@KH6X;)AumhMZa=w=0fbBICg*1^fnU z4JXFt{Wd&Ook*8wnY$_uFqo75T|KVA&VODaY05)2P%XwOG^5 zO$|>keyvhV`}wsX#d((<(#ITM9=tCy^86%fzXUs|ZLAO1Et=&|W+cpi1Ez5Z1j-3f zQBl46+j7=$3B?r?w&7DZhl`$@x37KTNR_+a0W~ad=P2HYT+D^mWq+=(P6Tz$&9;%~ zx6NNlUun};ESOuExgrA%yX~{2SVc}|g$X|hHVJ{w3lA4G^WQPqp-m8pHc?Oogmo&h)L7%QYq-A?cs6ybw9; z`es+;!`(_oN_tBPVu_%7?yOT1?D-)j&!Xl%Jf}a#*h)Wj`iG#vH7d-GK&@Q5TJEi` zYMNtDX0lMRMY$AN`Z!JD{th8jPkz-@Ww0d|NihW6T9T)}ukC@EOKY|~&1x7FfTri! z!2+^9W7y}J*u<>4krAl=Nnb84qcI-yLij9F-%@eSg+ zVrXD5mVM29!y>rjr(eYrA1Sie6+zpgF9~|D6^$JabZG6}$yy_i?C%$AF3bHv{6@+x z73a^zVWm)Ap{a|5Xu)m6<>EO5M2YpIVt-C{>$bR&&gd>fYZ3^6d$o!}!fsKL2DOLS z%PfY4|1X-(GAygE>)LdefP{26QqnD*5;s!PNOw1abayur(jeX4EhXLE-QVJQkMFlX zIK1}WYt1?4ImR^SAmHW^e0S_)U?57!Pe^m^zHFZ8#`$jHvb!4^9CP4|`u_cRWzY9p zGCuE?TV{McxTQeP+=b_FUmR{;t2uvJq*l9l;oSTUU=^TdFfetM8k#V(|4b9}RQ~%I zH$9X`8mSv&^t(!*R4iKo0=1c%%BL8#?o;maJcBi38bxDhq=uW6`73=B*sRY=j`PITr?cM=YAZSRu_pe7=<6E@v$6tgID5{e{jWPaeSVd!ctrTUKruRM9CPdkGci0v zK*r{GRISL@sMQ>$_%?z5`3<`825M{UlM9phU;{_5C8uUMCHjN9&>3I=BhIVr=n^TA z^{g8~0j=j~ggy6l?#%O4@=i|uMuYjH-{+}+HEQ#&Y=Zusitz z7Hzv>L2{@2qj!>{j77%g72G08ABeviXG~NGO#Qw5a}vZa_iL_YZhQTXOW$08I>)rQ z57q&fgRqa_cZVG>!q3+4W{}zY8h@vJliO^cX*=89OtCarKZiRC$tnm9|K5&dyb-`< zgUgf^VkiFV@;ThA6q(6Xe&NEltg?<7FnG zKjd;(H?FHp2ZZj}thB^Do5gZ;K0WcveFsSd5YTCY^F>T z^zjHg1_whJZA;Oxf6iKb`&O0v@|Lhl~*hT99-Iw(jns zErv#t1NOfx1uhRQ8k%b#Pi+sw2M49kv)Px=*Vcqbc0jKUMwplES~WGG+?}l4KE})V zpVMO+t5{BmhiCtH=k8Af2g7Ne?F$#O^Oir%7jCq|L$}9ncPqDTL8OjbKMk2tJ_Cb- zzdtk>k-yEby%O5E+8>+SAGO*!grA{~Yan*k*4BKMt?RvJ4>xy|9qA#g$pK=oHmv6V zPDFiQ{a;Hiu0|oZy@Bno+``0g3B@l=yoYC`P%JwP7gpY{DK>@+Sjq;P0V$MKk?a2yeJ1pRyr zbOWoku8UVz+o|8d0?AaxZ<5C7b8a@JjvHOVUTesJ5;e+>5_Oht8}(%MuCx{dM8O-O z3TSm2iNfU{tZ?1k-PKjOP=WS=WZpFiow3qn-1EWOe;orB;1 z`qbCgLlqFW_GH$}ass1@OHh^ZY3}zZL zg0*Pw(0O>-^D*cRp8+|yevx4whb)+J9Xv@&NMKL20TJzBTvhsI}P!^ z`*I)}Yqha~0hHmUAvZUF^!d&A%LwkGEACkhp{sAvVx~by!mkiOv8ON$yo^*(U%joW ztqoX60pmr&p=3flyt~5H*O%KQU5OlB;eqo!p^Sjrt{MRAvVLQU6L8*Y#hKpp@KmHu^@lu!%BG>K=uu^qAlSJ(50eWUhSB1P0Ts%IJu z_~ruv9S_VRDZ@Yl_zW0`SEjb@n=+^!l9zQ7>wL3^aU?r0p1T13y>vca4r+K3q>0pp zJzHF;V1!rN1F9+enzR*V1^Uq*qbS1pLuzSqhDb8k)cO$<4lYx)v6XSwN}ZycCRkFaA57LNGg-v_WVyzgD~(nDhisO zqowM6%F^I8u{RB(5)%B!&U({-95n*dq?AVbz;bW_6n$0Xht=$ub<6>8`WjY8bqcjIkO z7sI1jkh1N{kDQRxphW><02}lucl1J>ybPXTwbm$Q9~J zsYZD!Sdd~0xb5WbfnuPj8PTP#RSo_7uer2!8sc15DbN->VPQ2iQP$ZjgWOt^+R(2lbTn9s5wHca_LGxV_6EvwysNiLWolH;mD9(1 z`YR_1-7@=tthCdg{0^5O8{6q%XQ#gzw2823_&-k{aDMTd)R^54L0$-ql>7(GGH2&I zd0R5$V_BTSoOFHkXdL(E+ClD_*S>e_>Jw34ljj&=F4gZqRz^YkFM0ofWY81+= z1@`?u*T1$;9Zxkvk2SB=)5lNI3|grT_PV~X#lS}?rgXKjX(w)0t964XOs&#+H6ni} zn)2wmaaE0!n%_#*j_~2Bob%H3!EO;TWnLx@`mFQ{JLNa_S-`ISa`C5~_nMR+e2LGs zV<(V9I6a)0xg37o;}4shHx5)fZPu_Fg(#$RI3&d3DRoR>x%URd+^GG$&6v|(Examm zA9RN##~Q63k!EPD`7BES*Jm|V&{EvWnz$kI^%NT(l6z5nk7w z9V3%L;HlKEArmx8RGC&mc!B`t88+vV8G7f{Q<*QVoZU4e#~k->v-5=NwmNI%cf04~ zOZ*YYqK(SH=N9YB!tRfEIrwx7KCyJdtl;!Nb#*)R)BW!f6O+!a?tU&VE<&mNo%Q?v z^1u&j%K#UN3t{_9E}u&-)4xn5oFA0d&x~D7?}CKxI?-S7R+S&sATH5g*3czDkkQu+ z=l*E}n+k;)p@~ybuM4$gJ)Vx`)m7Xpj%xl)1_Y={gvMsV3Q6iIt@D0=8o637$Dn?x zCIfFB>vMWm|Hgg-;w3l(o|3qK-Wm@m9Dh#9a?}pd_Qm4u82?Np(G+(*kI(!k9|vRSYJnn6YFf!{5$Q2ZtJ4#$9CT z?x1J%w;K?c$TiCn4YPG7n+{G-Z-GbTwcm!}+l3b7NMmE8&w_caIRsLivWF^9Wl&%s zkg|yoc2>;Iy?mJpXHNe7s)59wf-&>1@{6ftDDu*e?-t_|%-<{9^^K#hIx;GzE^?-Z z>}_>Eir{g`?C2g;#Kb^w_pyFAD^43ztD#!<2HOD_@thd75Vds6(-Yz+kN$^`}!15YS$t8xno zB|U0tX~m_+N?TsHa7P+zt-N6<Co+Mj#0RqFywkl@3TqUlqiy=1N<4D&Xcz8JE57daEbp`4kdR|sU2{Pi8)J!pUD9>9o zLhp9p$BA*Ali4A4L2P1e&VZSz&;4k&MwQp5?|q@qL!r$EjG8iGR)!mJp@}Y=A z;_+4>%tQUl{LOsIGfN|f#2hE_ASR7=c2*ir^hp-(nr-Q4N3S4`iJD+^!}0I(Pz6a9 zyuj*iif#Dk$h(?yOjz3QXt&LY>>E91>M*hyM3l|^x!}CG&3{y$Qi3e@DSj>QPWqWM zjUx9A?i~Tw<%O3nCys2a7?K%i^~}r68J_Pr>#B5Wc$PSnXs8+0Gt<+hUY{N+UU}>4 zE(J#TW-XT8&EH%EW~sSTUpqmN0ID+K95!R3Orp_v(?OTA0Oy(`80EjkO^r2{EMd_ERDJUroAO((6M zB6_X#5}(`GXQJ6ui@QNZZ*oH|8~1?;VGSdJ)wk*ZxBWh?{XXI=+d~25^x^60>m2Yh zKIhiZDVBVPaG$!qy_L1L>=aX5=LeMVjCtd!`xvWOKf<`=M0~8Z%;U!N+Vsj>JMr|y@m-{i!r9nL&ecx4C)+5c_Y z@b$EAaz}pq=G&tC)M2bOSsnfO6-6bTLf^>Px?AYxc}GGsQ4)a&dt& zneNwL>OyK(j?$L(zHH61jkj`@v7>IWXy&NTU}?F^C!0hzOpPYLZn=od*4;joaTFXW zR!ZpO^*;_O!~Ov`bzOZO@-<_HP5GpGZL~4IgoFeOFK6g&^XYa52((xzDI#!U1x{L! zLID2SzbkMrF-_uV_A9k2_4nSx@*bn*4kYFfeE1MMI_3Jalr{DAt8BlEI=VrOcz`tRJxsOBG z7WsfUJpva9uRP!TU7wd-pQU5xR|nza;TT024aE2mw1yD%{Sxe@9xfT+?Vitu@(?}3&omNtP(Rj&FEXtb{+=v5sNiJnS z+Sm5J{1>IS#))xxJm&M)=aU7Ep7a;~*Uj>n;u0EqIrcfCd+S(Ay8;1K7=Qb^3A%nf zNoM8;oh?2j6c5AiZiG(y`bj@NvZe;?9=hqYIb_InJVsA>9uQi#*_1#tF)>R!%f`;r z3xcv1AiplMMlm740&RCDCnuM!O&?}LkZJ6|7(03FT-DSR+8-o2xe5;l2O8KtW!y`> zTVPX`mQmMM|9Se@&{S8I0*EbuW^{H!g8YJiR%!T-4i5f>{YwObY~f(WKuAQKqs_dy zbS8oINOC0j8Tdu5o!`9B5C8f!5{EfoGa~bV=@-Ch=~+DNo(2Y8-|2{m5X}IuKfka7 zsb{DLAf#Mt%CuHc$mxL=fS&W(JXzEJd@ZMal^S)=%0aw){PlUU{aLFN9QX_o z6}{3y1Sl+=f;W$=f1vjWphs38TUQA#_)m46c!{F?<1_v?H$nHZkl|_d$>7ewrgJ6b zeAZs(xvMQ^;59>YePCx@&EfCo=)9z^C1w9gr(J{X9z9LTBzGeU`InFoA(kIkz%_k> zH$AxH>6QIP-QX9s<&dt!aFkkimQW6}tRe7RJ{&iQp zs(X~R-V_fzmb~oAWBgaoHqP^S)arA1TV~^RsMU1VjqNY!nDnlhZLn6nIyxUZ2|GL2 zVN-atQ|nTE$*Xq`NtoO;G)MGG=g1re8PQ*-?ZrOA^)p+QboEXxi90j-HnfkRjdBZ_ zbl|%bYsca8yXLdQI|q)beMer}@pwpxej1~xVY=VWTL9xUKs&nMGF@3*3FogT9^=FE&{RAeu|d%gGaDau&>U zmCK}>^H|{k1^$vLdHQLOt z=*P~@qc@p|Zr$0Qi0m)KBt;-izO&fJCRZ)V65yhl9{Dn`K;hj0Ooj%n=rl&kn5V38e zn~Z0LmoPs5^l+J2=y1`Td@t+=G(mnN`Dmj*8jX&I_iq zAe{t^S7JIwXKZ(5O)P4_cbpUR{un1PsEBR+I6}Lpsa_OKs$~-R!9#15nbW$juKqa6 zrA(~#jS_4G{dP)1u~#mR58hcQ`Qc_#P}}x$T>*OkK#t-ZC_R>HXM9$R?V!XyR1}o> z$H&Ll$5ZB1uglFUm=Tiu7!rJ_vmXkDadKYrgbkRU$r4Dx{?N@ijudjo=*7EB17imL zoA!+i5)>S)4lGC^;y=ih;+3_F(A0T*cjlyibcNzpTgS=e`yM#lxtq39JNSo;M+hoL zQ6^%q)Ddq$)|R!Wt2my0N_dAi3ANd-RVjASDWW}aPa6L>ZB?s5f$BW=5huq*qJYo{ z%U!ycCJaVy*>I;2f8Sgofyg3X3d0zkv2bd)dsUu~;oJqtLfnc;W$z)Fw@>`e!U z4UV1vj-8c<^1k4mhWhO^X_0>V_sMQ;>o@Z-bx+G@jU?9GzgryeO6$|AL7~Q4m>q7! zh#04T!fA=p`VtPZb0(SFBPV0EO&Hq7gtd)g95sK5@kYyj(i**3_rZ;~+!!NPaQf3v zm6gY8j;ZI!61zQj=@E<%m!)zg6v51GHAnX$&t9TKB$)$UpLnLKm@o8{#0RG^DD}4) z2f-P1YNtvnt-h6&JbmxwCC5mK-7-*-`oP5SLck55$zpMItd8kEb{)}pl+nTAE}vV+%S^g$vQLez85 zD2;)?;W)0%D7cqd$(iL7Z69x}@IJSEFVn>0x&x9waE4u7U46-+)#Ms+u!mDCQ?qlk z3pqTrNRHl80xHeCdeo=PFyt@;-2QPYq1^`!V!{vkSA41T9TFSq`%FwsIjZ#fHZ~t2 zRb6X#cV%Wj8lbBpt1S&7`>(XE!~ht{MaUpIul5mdrMuedvHhfc#5@Haf;IDfMkXSb zNP?0kbJFL+WwMh|C(Ij#(&bA}MQ$ePncUa!AwMLr3Gr$PMG7lYgRseY+!cwU@2+|A zAf$pvu`>8XXfH<=l0{th5#|<-M~HuQh2t%hNphyJps7P(a`-#rOwlp;D0=%Sn7OG$ z%Tvi@(dK#MT{}~JdTGSCP&l$56Y=6)CrG9n2NRLF zZ-hl1?5wOJ4r3H6%{mp+j{T;Q?-f(G^ad|m=jP^mYg+-gdbfvHMt!ewb0dLcWpT&` z=l_nBF?+cn)Ca)p=Yv()X$6IabPa`Of%jccQ1~?UQb&SpY<`xUVIVRnC)IVS!s?wt zT4qY(JKSUEwC{Q2BYGYlT1I9yPUfvw{OD!Q4BiSDHag*?kM56{DoA&yIf#>{9JWsK zu;HPLz7j_swahySLy{s0 zBcWDeHb>_dP}`F#`w#b^fArgEnNLAC6ipFoZ+55lp|_6qXXtm`5p%8Iyxi6!9Z)&8 zBt*a)Ja;p$nefdUb^fRX=3r(5Vb$^V6l(@DtE!+{3?4Hl@^M-G~ z*X}?4m1?HRB(~InW-@1#GDRd8H7T$!O(vBEDmU)neF#uV`ISd!j^&pl!#v) zSa*;BW9V_BJ%a{_MMs^Lh+_F+F272oyud#zkSn(V)Ui}vxCeL^4i3t$V-|#7)D^q~ zo-Dxs_8+c+WWdPd;KR2JC9@1Z9sW)>(MC{tfPx^O3f5}l^75|)qAz$N@pfKL5r=)B z{8)r@zI05SVVp28Cz#~wR2YIY_Wk!(G$2J{Qqbjxkh&|ldw9SiRAL8Lj05E)6k7cJ z@$a%zYSR?{J0TT9+D{SN^JvP&e{WZsoGfnmLd;eVT(^8R7;$uW-7>qMND3oHX!d>Y zCc2b}12lEw6ygjy7GuqR;1IX|e-^-tG-?#q0B`Im$Eu&*E4eu~tO$zWv+GWmE7_1M zEY&k)Y%e9Lg!5G|scF1_%$Ikr4OG!2gbF;ct>#xn^v$WW6KSC^EeJmldnZ1P2YHO{ ztIAu}4e!3U;%q`yRo0$iAA8=hFT-QfG%D@5t$XyYK1=11{_b0m*P-bzX=SjjPu$xp#@|WKU>GKrGmk^WORjQr&_)Ts>wP# zbbeii7eP;*5upQlaccK!2oi~Z#Geel*DT>q&mHI$A**VZ#|s}QnUC@(F3GAPz`t@Z4Uf@S&fL}awkAfuF%%jG;`Y|1+XoE-t114~#cD=-_Ebjc z^X^LlqZ$n$T1nqx3_Edhat6nS^j&DyiEo@2MXNC<+3k)IspAOPI9&6Xxm*d5eD?ng zLWR3``l!ta^o#r@5)^Qu7_wnVU4rsHbwA(=7Kc0{B5x$xnyO ztgQZj4fMm0_wl>#rNk>IoT%4-LD!TWt0F`Yh56jETgE{sqs@!j4 zu5K)y_^OXLl&`+Ssxe0=PepC*zq1=NC)Ye3Ir%FT))NNOE=8yRvyIIug<_KDmM=a` zC)UOHx({Q&UgU8NuezrA+R@x&WBGnZC67`kAE6trphz|G9>!~j;(fa@d|($3g+`zm zYEC+A!hBkg5_MJYWq^wIgZb#$Hi)U32kd$z+44UZF`XDv+H}%&AfolipqF!RZM7x8 zq-X!xb0F-0XBG`}WI8?3{rm2pKs;NCdBcur?;Mt$`^OnGg-J+O$=QehUZ$NlV)`td zmyVNr<`VspZ2rW$OFD)#)9%mh?M9&!J5^RTknXcZm5u^)Ba_5jlUj+snVWP2_!$Ea zODx#-uc7IG$IGZ|YUV01U>WFplUcV~Djyp2X7o*xxmgq}Vbjl;!l5IN9d7wLIyq6D z2=^LT=C6AQS~IRh>z#UREevj)lV-oewG=BI^|=MHOE8cT3A9szm0mtts;HJ?mRfb( zoEhoqYj<0CnWs5lX!SfT)5C>w4~Gf-SS7-Py;l2IR&=_kbo-%JZ)2oQ0A^$4V3av^ z>t&|1zOY|CY1hdnQ`M|u>xOpB9TqnZhQ<4G4>4L)%QmkJs}Bf%dUBVBmg)?;m9ou+ zDvU2YAB7j|s9g8162c$}F)VwEB0lEs;6V0xQscts3cn*iA&%*i>X|cpiIijsj#U0{ z%W63BbV#!P6FvsKb=oZzbn%tL*#BXt+*;aYN-s=;e=hzR$F83mnc=^;H z+~4$>r6yQ$J5>)D(=<8SrG76m4jcR-{Kn^%bnOay*kc< z5|H=T9+U2hj9I%elA$wAMYS~;WRx0My<5DkH?~7ZLnTieor-2ruN2{xC7zxz$I5cC z^Zo(y%YH&S)q^WZ3d3;B-oirGPo!AY&sb{;R1(ayb5dywCx4VmW^KXDpNRhr;>HQX z%nm1`*l2b+l|kYIsT%+Y1DFQHmI;qiDh6}BM|VAE{gyibJSh@nCilXnc)k>?isAHp zlL0ood^b*E#d3J?m9WK9pbXY#xG7k-a`XlJSW(Bl)4&#Dur*+g`|*=_|A<@l$X**h zLV_X(O`m?O&N2m~gRqrWRt{lU9ihy1Al0H7ijZ;mg9o>tmrFkd#Rv7KXxzD**2r+C)gX?93XrLTZYsf?m zu|BKUd-@Ai;;BOskL0jUjqYQ!Iw-}hR*G?$Z{7mL6bJMMB_nQMu|4e zdHIoAlSmr7hOOfq7JfymJSCrd&d7*-!+qqSmc7~TKk?-gM)ig{1wV+-~- zqzsIHy#E@<#IQpW5fbD9X~&B$T-sx~C}A3a?n2Jmivi;&+${N(i@=a832vfxLm>?a4$#BGMc#D^&#H03O2^Ko{TfX!r)NF2UR zT%V_G(bd+DAM(Tt1nK8LjWyUV2kZ#t6y@WFJ-=2O4KX1Ul?0b;Rxe20247c%i@sCF z*vcLXq-`P#K)(@Vzejso>tI@*3vY>B#`dKWh=_En)W3#q~)#7qqUL2;h* zI;?d(TlDV9&B!Wh)t772k|b@qtgm>jw$t zh)+uY<{DL+I5uSi)JUhs??Dl^jGfah?#N`$yB}FnX}@eSpFb+iR~a}C5TQL`_1qD~SFIX428)DNG%|`L`bRZeRiuhQ+?=CK#p@--GWNG#|4z@y;}Bf-hzLaX zbiskWO%5*j9hJdun?X-a5HWjy&+}mp6+&3oCM%nHIG41wp)xpP6!jl0e z7L2jj$)eN8!i(tGnXhq{{KVeI1|5WJaP#x` zq^(?0e|Yy!z(Vd5V3~7a`ubx=jeimJ+Ytfo6Y;~btC7ygrSE)|nWJO;go#)T6C)$S zb;l+r;bJGqVll>w3@3)|0Rl>xJ5-JnORI=1aG$poht^6p2>H@K7&nA7KVc&V zEALx`dy|Urw1)uj7H{re4;PnUyki(GY|1E_| z!X!~gOPhcP*=9LgQ>(G06%r;|OHVcogm*l=Eo8TNY8iDMokTfnkl1WdV!;ylkG_z) z5CR%0v5z!^yt$!S)&)crE_X(xah-hxE6&(zWT*MsPP^rM!SGuso00bSd<`TD?xym7 z{MkI?oMF-pZ!R)p}^gY6ZzU3|MQjOZ~3?IG_zeXRf+!#qE>!G*h)QT~^= zX!UgPWo@1;k9GF^)2K&~V4@_`$1L7{Z~iYZ6Y`%0RR0=tBsu8cN# z$`*$}rVD2U@rx9r`dcQAbqZ?c#|i}3?nFQ=6>b*avvW1Y0}8@?Q#nlQddv_aB`T67flypxikz7f%w*O;G)bd2T8bRC z(%O12sadwP+D!hJyinwjT!amxfLAoiFsPQee|4xo&lUP-OuunY1uNqca=XsgF`8{gergU}T{dY16ABE($bla-mQinx%@6AgjSX3;`OCW{-iLYD5jx zykz@ExyT)*4`V8L#?}qEQKj2Z|Muo-e0GjPfe#rV#XmM4O}4eG z;WTTXyw$o^o{U1q`vqu@`WiT(st>5x$#%E5_fw^Ri|%jg&k^wz?$Dx7z^uHc?KhMj zY&6YP>I8N=@FwXmasrVF%Ru>?7%SN^*y=%3XCKy3dLm5A2SXA4<<~m>v&jY5F{a3f z)JS#FUVenjr>sI1yY-3O?9SCV=v-{)aA|J;W;$HxXK2^UwAJv!On0P2V|@@q+78C0 z@(P?v57sH%>fm#D>iYNuWxd=4J4{|Y==0G1`t#%KW|HAaL>TVmFI!7V;yMhwRYr`j zXOKM(R&wDT0mKM#QZX)uq$jP4s`>8|I_Zjcuyj%I?N}wUvf5S%muj^`8)ttmR95|z zs3anwqe)ofaGTzw;2`_&g~BQ`b7e5dkgsTT*4E~pc=UtKWONP4XDOb-aYx4cK!|y% zjgxF+^%hqTVoE?r2v}1^@2&m^(e_8saySU^;YqFMGdP%>Ta+Z?g8&J7gIl*$gnf9H z*474gcJBaCZ-m=#=#~*|uCAbrii?ZeV66@9JCLU~SG1e%&v#qQl_nn!`YR4H1vIJ4 zl+zp~Yytv~+m=lymajB!f3L5vKhxtYv8g*BX$Nkx_m0;W5#-K+L@`*5F z7J6z*O$L9Aw?S`JTO0GH5<>!#_Xdr(C`LvmQRb-eIdDpR^)oJ+>3Sn9HpY(mAbjgz z=C#f*g3KIr5=DeTh&Z?7IkHq_L%_HL;vr;71;8mzk0yvOvK9f9PfWle#PcKJ| zyQELsCedj}^U5`|nSTFLNt_r&i)cF4Zs@q{d3H zhs8l~(nt&dyQVbDB=*J%t5?6&>ngHl6m}M-NX&xt2e& zEsP~lex%u`>uZoH0lrIXJkSsZdD!dm6sc0GpQNl^A->RJ1It37LLoTH{eQL>u>K)- z^^ZW|oB-Z!wGwe!)q8|9hs&aV3iuK06+2KeEug^4SUUji2hZ?j^7i=_Wa+e57QSJE8s8!@30b-6vhNh=k2r0Y4@84qq~|BoW1K&FMCmE zO>?aZ<%0}5=SXhz;5U9VlwV$6;#JYjK=6s5yV=o%qY;jL{P1~fwY9bNZ!IP@jqt^4 zv)eD4EKg-5=~6rFHjFK(tF1UiklThNJVHW^1ON5&HQIZ-BJZ`Z&BjFcbC;QML?QGM z)WhDKexiX-Uy!Sn%Y%{K3qN~Jr@zNHe9OzPs!ATe^hB>UkNCY#jh$J!Y%P1$Trbzcf2R zS!I^w1Usd=K#G#BWzxn`G0Z zXj^nqJn|@(02fZ_yt?H0Hfw(R;O=Fml@|TW?~+3u44C#=Qw|*;C#UP~(eIaDEUqhJ zVY7JEe};|N3<~?lPd_&uB-!#el}a6lrgp%Ko#Hz3W}pk+E;+QrcYOW${0K}pFE8`+ z^RM3*Z^i@lO+yOC+#5*qc;rbX`ocmytvsB(#6j^Gg3u-O?HJhNdP=bn$lslKG9GAv%O7U2jQ* zcCvxcz3aj~yL~;o-4Gfgz|zH9EKpOvx4tJX#;h?F%#cAwx`M{ED4gDkXVOj(g>2E6 z`Vp}ogMo0&O(lyx#VGqvU*qUw=Q4k|Tr$ayc-N}r>q@J~Em*k{q*h3!W?n|U&}65z zF?4{W9ppZ?yR$PO1#Kk7&m&D?u|Nx84r$ob>3^UD=C8{EPuB1nd@gX4vl1vO{TsyGoTt8Q=iR#or-&@0!fJ z0fjCb`xd=iU($Dhh8=SH?VGH&%?hns&2gJaQ5-UQdm? znU7IYaIz2`$BXq9V6T8TD}vuR*VEN7O1=v}SQlFkL?)lAYKUfReVQtH3s3H(P0RaLm z;{hse2UzL^2M1SlXQ-6r$QhTAn_;yG5DV9ZVckGL)Z|Z_0re5YYpIwF$l-(A-Ovyk z7{pu`us(h+Q~Ru_76vD=RLa$3$m|5#ohS-8=MJGspH-md8N#R19ZG8Avo_4s9>AYNBgQH$fBqtlJ0sROCG0V00!{fR{H=;1h`@^Zv>!Uu( zXzL4Lc4->#6@{KTyzhd1@H{*?JPOpx^errqNnY>zCoMTyK|=X$+imN>?xnIgSfbFG z<$a;Z`h~Eg;%TU2ZIk4c`;CpsQ)k=|ICVp(f1er)T9z;{!36FkU{({nsfxjhqL6oCTbRv+}BBo7lo8?&FnCh)%sP8V}Xt5|aV zfYOLAJr(lpA>SY!42$Gq^%{3G+zKr%PzFhgIxiPV$Ojkv=m9HGaAE%B^EUz{AARnJ zVVNF@$xO#@gU8v8#MQwV>2cLscHOj2kfHoIb5|);lUC2eL<@-+un9&T1i#v%@{oJ$ z%pChb>d*uN=xsq{L5PV7n7@J+4B#)pJ~u`FLAy7$1Ry%=&m=+W9`7f4_K|NiY~1Ce z8*7lYj@1i5DM{kzD{IJsapmT;bxM1UsDaC9z0VMD#ok z)bm#+UvEgOVCd=s1f7HP0Z5g#ir?`i9M3{RuTPgWt0w}PJ}>t^-p_}+?IwB!9KRt{ zg(bobc(|pFm!L45|I^J-Hyofuj`83xpx=T#m_FIeW)cI(lOyYKh`0$~)UCjfYcrhB?N z$$|g>SL?BrjR%3wA%GMgVi)T_$nQbWbKbWLL z?pZUv5bm@(u5IOUYQ@FWww>nHC+&EEk{xkeEvv*346yFjltaS7*aQtMhs|cLGqtEo zO)eQ%stlJIn!XWYbmuvcQ4*7qdbJ$h5_+5ekU6%X1;Pb^N=`}|!-I_@ZQWd45^!11RiSyWC=4vY;n z^4l)g!v;KBv;qGSDR*yuV!-t^G_-Uu=-$hKUTN*^aogItLHdS%etpt?!3Pwidb2k3 zCb;doYhK4|x`qW@g_-$*wDkNs>2DecE>XI4g1s8qS;MXc$-OG@t#;q#|`!z z4E456a?;nN)ph0jo&J9Zsp^^k{r-D0 zuw(#k4-g$+38ujopp!$hIQ)AuZ^;>uG}CGC>B%3WZi1-6=1$CrmJ8yLZtIJKw;QgO z078{C-;;laH#j$s9Ct{Z&SdT(3>$hA!@~Tu6J)H>-1LFj|55Md^#{xSkH1C2=izay z>x=V=#t|0sMlPWj6CO2IUOlH8)H@3J*V0bf*D=+2iB1Nk3-Q)4PH|3=z^|wpPR^aMy0RkCJS_pRDnP9m z&*M%g%nNmm3#Yk;J_U6w)Nt%5+wJ4wNdvc5O3`XDFVnl4FQq;C}?OK7P^nA zFuJ~$Q+F-aD=mnIQdk2IlKxwA#LPSAo8y}%JVpEAqP+R@|CkWosoQ zNS#}@^(v{|w}kbrvVGKxp}&4LS~ovt^w&Nr|gXPKW3M#`Pw(T~PtP1i8JdwE<#atph?O?rktMKfmOQ zh%R**TxBa}L!RwI|6mD+~8``P+T=Q9Ng%>KYHztGp z-?z1$T~0+_QO~I2CFUsK4{P3(`0Z^fo%^A$;JQ9KI_crBH3T8?A;Ex0+x)+kv3}(F zyjBK_{IgxvO6;ZT!4(We|JKweSm7jdX{A zhm`IXkbVgf?&6N|{Q!@8_StLA`Q%+j3@=cR@;Pq|b?^HR?5f49(aK6)8qD8coq5@1ocU}XQh z@9c>d2yUYKBmSQbdf$ec(V#ShgnwW1e|V(*1|j}vkg-qzITXA9xIz7S-0J!5YAe}4 zcsifoR0j0R2{fvb#&+av#3nwI`myHDxc5U}=De`Ab)LO1qoo@)SB<}JLH3$EW^Bi# z#XoIGU~Zj1|2conQRwdrjj%|WB!G&pehuP(dLn&0`gX_bRk#T~>`Dqio9#$`LOYH& zcob|<*#qPkl7y*&E+8uvEY&-ryZq=`gcU?e8P-@R>r0d#8s!;nRTE4*XvS`N<~jA# z$?JJFu&6+h@MS^) zF$tN$zuh|t=6$CM%!5u7-IJZE^Ck_VvL!00l?2$BtE;cX;N0V1i|tS0Jts|`%xo+) zNU$IvqhW@F(9-s&Iw5tQ!bC3BsO$8lV7u!s0{N*}AIK>*+B!Y~LrSf1((55_Or@2Y zxG3@62wydSkq&j8qNmPaWwfU);9UQiK!Z~i>{=ITYN8J;Y?=*vPdpQikG_wzZI*84 z$FA>xP^f)2!jlZ&0Kdg zYzPv}F9xx~Lzw;6-S~x+w1h!g_xR~T z#btdxHVxVRS{P;D(580`zeoj+(H9t*Z^<2w?yi-iNi+L?T|t zai5DVXprB2`2Yzb2O|6XQyVd*F`3efQ%pJu8+R?Aec;)DJ<{9#?^t{OYpLs3`HsAt z{7XX-HpD>KTz;bvxtx~CE5>5ac{yY0{E`|+bj~j`;~1aiuu%XM)x_y|0?iy~`P8h) z&ZXr&1~mufm_UDG(JC4z)OH>%1O%p`NLAo}dU3(-_C0sO7b z38*0HqplYNq#MkZ-M>4zxWCWjS1Ra;iHwRI4w?(Tp99%mEBqpEWLE)hAH7L`r*Hpx z`=>7l)KY;^f_p1;G_=CEi(xfWEc#M>PHTOjJIOBZo*dvYd&{spXevTqIG|>7C|}y* zwYTF#^1~>|fU!*s+&vFUAW5v}_v7Oqp^eK#3_?rMz8myTF93&n2>#QPKIz+K$CM3_ z$jrGER%??Hs6BbEbM~9d31mbHRYQ=tNT5U_9d&im&$tD-E+uZUdPyVGWcb)|a>e2Y zy-@I*#p$UvXR8v1v;63PEMUwfm(0UC*ZDu;`19{qjlao;MZf@op7yJ}U_x{S!Qmi) zW_x`J+Ta9wkUgIR2LU)-@kL)AAg|vMC^-Y$vbAS~Y(r?ziH+Euesx{lpr&I_o?Yl*6bA=h+`j(=FkA;c2fYZq4*1})7A-iX z5DIX@rqnVs$zFAxb9kn-kE%bpv?*aHjYJ=mUB5F|RZ55rq8if@YPYm zVq)d3L-MKGjGyIO=XoS|J4GBlKI>-TbT!OU_*sP46Do>6(Z zLYw)?ZG?ODoKe*F9`D>K)S#EQKgaDe&u`kDLWrm!T)XdkH2h*&cLD&2Ow$(z9~6Oxck{J zJ#dg~b`Y2m@c=)*1#HSL|DH%M1%-u#2E!0B%;NjOstVp40ORhY{Af5Y-R8mQ+xhmX zb3G&8!OsuK>!6Y$he=|WF>0v2dvWoj;q0DUu3D_%d;|c7E0|{ikO|7a-;9_u8xLEh zW-!NUDbDdW* z9cHrv63U0OYb-NJ#&eh&uhMOViWUmc zNC{wZ(6`nPewpCkei2spAhFir`KI^fZ*PHo@zQ4_L?%meUf)*cH&g?eYVXHV`QW^Q zEy7vD4hfA7E-e7@J$xL$5y2Ei#~sr1GxV87=yD@q{^T~?dKDlO$gOI&I;!+}{Z@9G zFfo}gf6nKG|6|9b*~wccEA#`ctupHXd7w)MxV?hm&d@y^NVhD35fKw(8#^l{9h4e; zhmQM7ZGdw^pJGyK5c7)|5CZ}qcQCh~gPNlM>X1#Q~6{MS9U zQl7L)ZP%OvFAlZ$Vk)^#$UEvsNgsFhY{sKx1(cy(#8ZRGN-smDiS$G9ZKLzPslw`Px-K&g4??tovh7$kOTN@!> z>(}n0*i8OL$bh43chqJ-BBwm$PsIG!h*jxtT7&hwk$F~KRds~Ho-lIEiYqfKKjref z(bE=puE0coK6#^N9RDx-8b*<$8hrg;V-w?45)JtfDb{^(6AFF-IcLo4#;H0QcD=VCu<-n>6rEhw2efb<5s6(` z&(e~70fK9+z7xVimEebGvG?h5v69U2%B7lw#N?8ItOE{Z0KGLXSHtZBvn6{IXv)r;ZiiZ2A)h>JRl0IUJ;hDJ7XKSlsUVEwyKASh`X-P;&6+Q69` zp@Ahj!(WJxPfk!tkCX2Sust9ayPo+CQ0AkmHHk+IeG$3j#7Y9e{cDCjcgBUv6O9)@ z=!0FViCpDS6*}O&)=qVlC3BpAh-JXV&DZsw5t(hnsm*nF1kLf|M}>N;<7t3rH)rcq zX=l&@g71s5^0XlH>wv7dYU6U}Yo>IqN@HizK5(SFFb*(XyQx5=V&$q2k?pg~wyBOYE-mGIcV)ATt6ydw` z%`bm->J}~YtgTG?xh4gYf&Pe^Bn%!U!@=P~kX(3ku&VcE0pu}ny8a#$E^6-$t9{sk zA+iJVK~Op>ODz0@Ds3EK0fOZA_?`@Br>A4{BVY$&uyAdqsrka&V)E;Q!>fr@L_`J? zL33zjZADqQSX}r?xsid1H};o9ND~YK?GsmEMqHSTa=hA@yH4eMz~tfsXbAG{O0c0Z zf~!tWgnS~?czvMEJ4hB`@~l*o0qjfzcL5C2P~(4y^^YEDiWVJa+;;A&??vD$U2H;j zX|2^}96m1MBNj;;RQBKm10{6a>WGvk#NqEw2$m_uS(l^wsjk3ICNyDD&QW>qU`6i+2<%*ITzRL>9u@}EPqm3) zf+Io`;+L-p7OoOPm6~Lme8cJJy#mSs+q=4Gy(y*sh`;`F_4OryM){;|xub$uxM1X8 z<2IW(ndv5@h+3(p4>;CbfDS3!pL|9E+>I9a*l^IGK^ZWRAa}-Wm3K6c!&aAEL@Vq@S%J;HbLYN^XHF0=ReJ#_iH1YpGq_t)&h3uH-KgD>w8A30tii> zD%d&zjR%gCSNs;u*#|a1U?GiPP%u@(oX=^a?>BMb8hZ&=C+J}Y>{~svW+6CsV%6xy z(Xcy(I+1^-rqGEQIua0oLTwh#+xD(@T=y*SGQ}q(q@*a}wu4z@e*?(5Af4(Wg(*&y zo7Xrh@4A*xnAJ%&_r5RKB5jJSU~akyscCbz^y% zj?=`?`iLc07AxzgoBFMl43P)j2{xBh-V}I;i4N+}}c!qMzT%hDeD0z|UM=xRcvhOvEa8 z88HIc+&>?LS`1hKNH=ky&YE_DdF>0x$))AQwH{as@LmAh5>86bF26y&-M^E956w7d86_DwWqu8b6l6e8E%SC~a*|Fy z&ve7`*`o~d^NO8_Qv&#CqyWL_lBN@2L3NlY4<3mYey8U^vKGZhPsUbu4$*^A_h2nx z?GdDT9V^M8Fqg40pl&`9ul!dry6eJZ->Zi?kI{1BNBSQ35jr(L>d6oItcM~_+6PV= zOiNWuTS}s|uq5h@c+hu>u+LpOGHKqd#lk`tVB|4l^N~e==YDhJ!eL+?n%he=hn!uN z<`8mET;EKuff-v%KqL1n<%(w~FQ=4m5+@c`D_!%r$6k~zaEYJtvKvJ*`wLAYgB~^d zq5srScZR{`hmy*)A%xib!$)_VyS$WWNmOR_HnJVhWlRGxSn4bksqIdp^^>jf0#6Xp zB78YNpY9TuFK21dcAi#aLKq3m>@q#cqrd*KeE$!S!xMM%bK~&&I&mvxt7p96Yyp^; zat7)kCP;?UGc}dNM6l&CB%~mT+7(RKgq>Yv6E=^U&b8JDll07-)PIh^UbB}){AqJ| zSjJUlXND;Ma2%DqGLnr28LhEh{@?iu#O-Sk6j0*1I3i|w$UbfwFD9e_%oTLwnd##L zsU3$#b|0{aYF6TY7hX8r`)eB;E`ddJ34S9m?ma)JWYbV}LVXhPDXzS6?n;~k&#s6V7Yjdsw;ruX zN{Kq@2(7Tfa%Zd!lkSC$5EnM5_rw*GhUmL-L#LD@)R~c$d2U+4RkOt1JFxR!}%V>-xwW& z4o#39At48f@5c7sI1dr<wQ-&}x_YgWQ7 zdS05ngiKR{@fYNR`ey>e-}pE(&}al~e(@TusbR62rA;xvCzAhQb8vxf(H%1Eaa&vJttNhhWWo%OWJa++dtphZTG9KE*445+AJ}}nnyB+ zXcYs4Bpx*C4-#Tk__#k0EGEivoctY^7wLDXyisw^&CNLeT5vKBI%3QoHX0p8JBa`I zl0QEFO+Ft_TP&8c4Rj5e&IKk49>dK1{E^{(_?X#G#EyKTqO5~+Pkp0L1HyltH=`)- zZQE9Nj62%e-fo)LioP`#19m@y${zvelqHnH?Cg}S?xgp$eSY~KIIiW!YHAoDa4G!D ztq4VnK?3Qc5E+1jfQRa4&kyiWG+ASyZ(e_KxpisU*u-S#Dwgqi*)ap|N@KPB(AR>U z+UQ7Km`78LYmH^!UvzoMvw{(#2ucE+~rq(%CDAK;0{IlizOECH+pz?c=FXVJ(mZG!XY*6#DgR0JgnBf zY?i^!Gdu#0XA3YHSQBOB-YQc_1Rqi#=Xb=h08mREWg!ac-3#ZAG1Zn<-wG;?dZ`!G z?EcIX!j`vhdcP$gBoan3t+%0B8Sc+?2baY%$rkNV0iu`#0!Ukdzk8DA%d?QTZM7R1 zCmcWG19FyIuz1(}Yf$i7DRuV;!boi9kE?)L#1~Uaxxcx!aC1vt;UP0jz5r-#N&j%a z1u1i}*?Uk%;~eo0q@U0fdHkt5KRX#78iLdLQ!_>nI<(#hqJ=_%a9r*PO``vP_Z=ek z#Lpf0iUXW@u8iAw&f5>i#=a~EVdrqH_1Hgl7te-xhHH6l?%H{iIq_5Z=&pDs+t_&4 zQnapEZdd&+6#r-RX)9PD<5F4|C}; zd%SudXgBe#JhWh3F3n0G!BX_2YP|g^_~_C8t8@DxrJfH4($12zxmWG5fohAMIAfgs z7&PeiZesIc8S<`@X;v|7KtO+de6`gOX^Lf6V>uKL%~Yn|svbiUY$u^f4W4 z$NJ{Src9EiCzzq@Yab&spJIqR(=JhTSpP_=5{$A08hCne{mR z+Ls+;v0Mw)#T)d70A5UlFgV1L$BQ>BJ1V=)kA9o$K#4m7aoa+iEgjqhAxW|1OPJTq3Q%%CqyR(29`l)K{Mdx=ISj>cX;) ziHwX)wr)<-L#^51CqP}fM78^EJ4?g5lckjpTs`FocH-HXBZxY8XdwnldqC(!0M5$U zlr46cniteUtkI#hv2e^@2ixn4iU&kJR>RpW@o%*sldbZ;ei|iStY@#ljH zIyG|^%Iql6!|rcu@1Hf z8Glg5ljT6kkD?Y!su~hKxF)-5;cfu~NwYOD0Z2R!h)`!e%Lga@44HYS6a+OURa=0Z zfygmT-M?CauX_78yV=Gh3s%eqrS)SRZj7&HSZ32cH7LXbOw`U!kw;s&L^QY~tT>5Y zqs2q37VJ4}mhH`3d6~`<9piX8IjP-2`IY3S)>KK-v@&p~4vZibP+&eA!z;M;V|Qq)FZQD|*?OW0->^rC0@AQD*%E zVTd<9S&p*Y$;y8(49s0{?zv~bz`jLvfCW$-orAd23h64A2a{$45`XEOogTgldoa9R z>?;Hn@W%lnd_DQw8+)#2;gbI#HAkoEwtUUCNFlJh*t_^`U^36B4XVBh9tu3@V`Tgp zC%4DWcm`)dI|eO{&lB%Kz&^VV|ML)Gs6$%e(os7rG4M;T%?}j?!3tQEa-A+BTLO2{ za!Shiiq-$_)lBA}TrQl(B~0F-4n=D^qh|BrSq&e>^5Mz`$^YKsZ+BJSb>F$k`ffBO zXD4aeTes%j5^{OF4ZhlxIfov|lgMx|Z4vFw$h$kCl^gz#1RhS5_K|;Vu)f~7gXEd^ zX3#kb$cfWGXFvW~h_Z2q2ZG8sZW4H}@n26&rh z5CJyBFC0HA2H+G6Gczdg#k!##930vvwo9#9fS#<*xeNiR?~be~8;Dd?6JY!Ukq^t5 zZXyDWWpVjciY?TFGr;t&*n;hS5zcMr=HtWfbPPv?;9TvDgeU;y_@E)Mvr~yA;p8i~ zMyxhXN=VcBU*tM{FCvsDD3j6Re&0M`=i%J7GveE6NoYTjbD#4&yAZtTY8PTff&p7} zc;Nl`{kZS(=q^$w(1=1-YW^#9ikLSQXKQqd8fhj)iEbSF1|wJG@0xCS1P!Fwn_i`ld(L95c2O_WS^0zO=a1T+>lw;O1z8 zHZ;Rh$Zg{>|FU~FLS$TC*(iJt_Vk{Mhc0=kqS#@M#k{lklPLJ#-phw3WXRh*YXDLJ zkOIUEd#bC#$Xk)E?W38U$;lI({YG5*$u0 ze1aZJ`?~8{qW(jIHBU8718GMke=+*c9`=OvP&(0^|KyaavN9~ zfAXc-32GA8mRZ%5?e-GRMAZ@Qj1ChDdOMC=P1w@3A|C3Ip6EUb-y3NMogka#yzi6< zR}hn#Z-#^R@8A6zi(X75)V8X5%uRe<-a#F|%wp5T?I-KBn7lKx<)PoVg1*{i)Uz}gJF=% z?UET2Son4hUXd?%&7 z>5t3SvL}<~8KqmNj`rq6pYF)q^A!H>OFF$YnelPT$2+}QaL0s)@c{ZGGJ|IL(|tz_ zmV`&`tRImlk%IXkl4oY9muR-Dvs zlGWB^mx^GQ{rTjFeigu)>PDsdy#!10_{1Y3UrSi*f^N*-_z*xjHC}O~|G0=8&mAWY zU%|{;ESS?~hTHCrjsc*Pb&P@;Us}>zTi=;Ob#K*lXfYrpAxVS5pm|Y@fQhj-JZi3l zdDV1-gopc(q!8)^j-H^Go`Ca+2>3O_?{dT0Vff=Kt zqkO%O3w6)un~Ywc_(m5 zznO4p1TNac8-4sRyz4B~O`arbc*>!(v|L%+6{u)q)%$=45#Pe!+xAda=Fz1@7I26B z=$;fVRMg+Fn{Y&e^5M8wv4yxr<NEq6FG zA0Hodoa5}s+Yw+OLq|v7;qeJ_q`1l#G}f;NiU+S8=P}VEccZv9 z7fEm*f{Uo%F`Pr=?c|ye>}!lbP|ci`naQ4~dblZeJ;}8$HD_{lxdcNG74QH=2p+)T zlF^Hr-0Xz2(_8h{_w>c#T*c3Ex$(N5Eql&tbK^9}{mRPw0ci{h%};!SvY*1t_JjXH zR%9cz-4+M5-3Qok=tiq0ap>@OFxkoBP_b~#{ejHM)oxkL3!R_-o0{r@fSh}2M+~n3 zhdQ#XFN~?@*3ce*qN2L^&h4nZPP_jz*nIreM*kKBJI8=DcsX%aG%6{?@c_m;327^( zoP-gD=wEvXK%!Mhk5<_Smr`|=0zrAAjXUheH!rB2o+0N+sF_Zd%o)BxMG+J7_Mj!~ zg;DVT8jgGaz}=orK0KtFVFN=kU14Wg=enV2gvI(HUud9By#s2z+JQYEnb(9M=z~7} zqLVtI)vg{ot_7yBo&+OmXFE9|@3nz#xJUrO9}xTa>tzJ8416OtEsc#9+Czg-7#J9! z3A(+rckpbAr6Xqe8b~loaiK0AkIAvNB9S|Ip?#FRt{FctATR7I$)dl@B@N6q*yx>zobw&d~ zRv@9tP)*z5g$At5(9{%KBlqC+*E5(O@dAg|Hmm>Tsm$5iMd!twUqLvWoBX+CN5FJ+I$u_`OShPtdSTjLP}yjjYc4Y}8oMev z^gPAw$3XiYy>|>5IWD~D;9yi?Z}M@%HFry!QgzCR$=;#74_mFslx9@%mH+mD;q$0t zDXY+4K>7OnXH~`oB%5~|Wo9$qtFSE#NPfkhOy}^wg(>%}B(b-9#5>fs{1V(9bcGK# z2n$P%>|zcha9|Cr*IYvpMb35VgNixe2wXohUKLJgCT4urf{sDF{&9r@_OcWY>`H-i zU>WT15Am^l4YI!5xS~p&na+3Cz@fGL|3?yX9AW#eBRtxB5PnCsl zE2Nr%pak#;fpR|CAuBt(vFpdc2{`pE#g97WQ_?I!V_4bR!-?T=q*AJQ5HyM5s@;alOSB^^_pH3;Z-ML49q>M2owt zyqWixNkLCjgZ~C!9L?fK7-0Dg;#6S(jJgG??EXs+;S#?(v~XV&TYJ+7F^|Whvgk44 z>zg(2C5-u+-Zjq2feE*3JqXXpfEBS()=aQf3mdFOSzgG(%ikc{6M5wz2wl?D+mT@u zAJD+wj5x8~k9l#<6HD_Yd^~TP0J3`TRsZerhL#S)QxY4zOc~w2XhNEO5+k#4T zv`1KAZ4{H@fwQfXx}~a|8im%a4%m8)W=$ujtda*x9tab;fOh)5#ZU{ zf|d~Ai9q+g+U1oa`pI7>knGrK-#_5xcpD z-6n+a?1EcQc76oiW_H#_;wT+mi8P6p%NNxWruMAc2mc{}_g}uVa@xMNt!+52^f#u+ zX(dCPzGgIkq9rpgzVYIi7ve;Xb#89HUPDX~3mZw?B@t^K^X~53oR&XcovjdcK0Klh z;Nz^UWC&QPFIZLS)H7yM6vU}o7T^#F$p=8%CsFLWAaiqx`sor&he2m&r|w8=04NR& zqrxazT3j(4(`IJo26K$~K}K5JGjs9=M=>b&*$oT~ur2M}!nO;|nMl#zHdGLyYqB7$ z4%O5_yuwSawKfVC6c<`Wb%rrl+!xL~fL)&tRG$51>#-_$X5AIy$UNWZ?)3HXxwo+^ z!xo3`NmxLb`a8dM(Am=ySc0VhNwet7C&0UhA(U)D{+yaHAj^Y4maK#tr?J2_ zVr|c}m`s>5GF!Cd%Ev=Ls&Zl;9m18rGH9)L!a{j#oYX}>414R+-^U`ntp$^qqxaM) z|FhvINm80ehqo3coC&8&y(E9YmuhG-&YAm}oN4lJ|9yy%#J?BG_Q~XU81ba?JkY3Q zJdODpf8}6~tC+e2(nh`8ekG%#VJt^luNsP*;TSqN=*ZJdaCxkd<)9(D+$^Jb$!O3f zOrkorcQtlcXs=RKH;|H%d?r6Yl`))P=?c2ru-7i*Wk|OXU}beYwgyLenN3+lYq~X& zN!@Cs_01&U?KSEa8hYE<+`B+5Ktlhscx@bcDVzKAlwubBgG(ApSy}Zp zX|;)~X`|PDx}9DjH0r-FS~mV>Lp3(pMQ<+Qg|`?9$24r;kp6O;rc$Yf7pG38ZKzYw>=J$KZ z5lb9Sw7G56_XFYBpkmk6z}8G>>6dC()2oXvTC54??RZ8J*~@8dY8F&Uxo*wg-8{1|7{D{yY{|>u}d*nlh&4&-kIcvWn2?}2TCb-e-pTyp% ze*(G{Ny%|F?R{q&TZ8)k`@!&w#^L8N&rfB@7U;(W7rA^BE?_Ugn{a>e99I2W`se6q z0AB)1+kgQW*bBg~AcbZ0BTL(Bd$6y`l&n^EW4|8nkE5ds6&SqqJaE5&Rv;yq5B4jJ zOl0H+&mU?&3|;`2#aC>@kd)Gl&v9vtr9~{~K#kw4i);yxNo6aV$c{9#x)=u#9ADMP zdO0ZbL?ctviNHBY9#_&PoCAtat1;vvJzQbPeQWFM|I)Zsgxnf&)3mD$x+lP&ab2~$ zxfxSo{V0Kko3D}F!9$dnqvg-ejy?xx)F{(s!oMp;V_T?mC$Mo+q}QcFZ`pi@{Em&y z9jc{lVR~!!ue2HR?t1fy^`>vZ4qcTxz6+ytu+p#eOM{(2%{cT!mbrR)3py9H5$?#6 zG;QUIOQGG^Gkb+D#ruLE^>aA2I^UAwGY~H9!f%_BLqqx9#yLD)uIkf{sMM*c3uy%0 z^^ak7ed0j3NWZ&xlrUuYWMzFBPeJh8eX_a;4-Y&XW?hv|&GOHLRl`(aBSYiC!(s^F zws>8+ZE=KAJ&&O^pZLHfuBKMJ?zDTggS}o7m+yxGvJzy-q9uue8C~)+3&^HTO$(yU z-tV9s93GS!%YYJOZj$z%p4L1LEhZ^GP-JOR%b^nxwqcj?p>@v6zEaB9Nub%?ofkD} zN1ph5UcMet2e%SXa5~mmdyl^PKJhmUqJ9M{^PZQRd+#nYbWU=s=bKJdMsvYm^FWYd zmXmW5@OX1qHU@u%=wkjEv z+N;7zpbCbR8B=Kaw%UI0m6htjs!!`KA-;8IJX8KpUX$8Qa%4|omZUU=s_ZRBE)^pT zB--sFJ2UU_+?Lz+U5k%&b}4o1kNQkpvb+8ZVfi!H%b?4#&)c(fxlc``R^hHvqx_U! zRU-2JrVAlO+V=vw|IxrA*F5|M=f!!kD$SOQ;n|G+?oYI_R0TidwaWUmmRB#g%b`$s?oc82HUbJ+8^Jt zMDrZll-q!bS{lSNf~Kma`^-`jyr@&q`vX32xbNrG6jdxWlXUJfO8)RjQL$htQHE{? zT?{;wWwE7X*IO19^uy^E;~8^a3`JQWpcEk_BfHJTttDFab`5u$Z3#HFfXsD*HiH*2 z;O#i?{zs%dx9Jy9j(`L8dhDqQjct@+6S-N3UYs)$E6^~A#N0)SwPoiDB=QNAvG@PGladFea9}tFQMm0A+ngM{b^h` z3v~rMHZfOtLh(|k7dh^u(L&s8VBSBqyT1oWTRpm3e6(G#G@sHqR0`&t<`N3>*LjEZK}UEd|s))nJ-do^!=v6Zs3aRZ<_!0NXC`%hBQ9=Ct{fja7NQ68rbh9+Z0@0QK z@bX&E5Iq1=2=c`)p=`=*E{=;&+*ON52LCPGGcn;e22r{|KzY5@v``-UtJ%WaJIbr` z%sd0MCi(PscE$;})lh*qZsyoST3*U#@cRZRC%bsKXu{*yVPOSX(IwKK&qDW?Ne)Sq zlbSal}?+zK`)SkR>{qc`=4kBrccABr)74Joi~&q z^aae3Nrl@~Z4BG&(utt7p1_YIUMDg+4ZRQfcSb5@=r$fgsL5wlmuVMh%-spNP+Hpf zA6HuS#q1t8wMFl+8F&?Vp)_e!MCq$6xeIWEx42Ok=!_VMvpG@9YuiUhHYNx;FFU`6WA?7p>jY2T>Z;gkOXV_l*Z9{M36fz;( z5C_%nbf2rgT2qz8U68)JcP}kD-d`vI+#}||`TouDmua1)r8}&CMvN+bJRUjkNObxN zU_@#98NSn(-v=I1U_V(bw=YsQ-kchlr{3V!BkI+9UR|tKkDM4}w?~SKCTw3R|p#-5> zK)~7wJLV|rM z_v3|4D(z9T5R?(Uu74CYqd~4ZcRTf>EGoNqs{2~}4L99)O&@kiHI3jV-k%o9+8IJ; z25jt!7EIT&{iu1<=3|*8Gr8&NEn`>y|DxX?Nvg%lMi&yQ*+0`dr$k}9Quc@<<)wB% zmG>alBa>#C(z*4+Pu=|v3kh4QJCqnSdDB#fP&*K1f`DU2Ou%9@f83Ar7q`b`OAn12 zN>f5PbqmKZ< zkkl2sc^mafKUBMIi!xhx_k}icmMSU6{e1e0wnp-` zRX)vfnO<60>ZPM25|&tzRNof94PO*Za~Y(rz2l4yEhMJ%l|j||oPdqr&~}K9X@`Zn z;5@cRKHu+|gU~fH~A(Sd8y-*0`$qMwpbBNyY zz}Xqnh`O`%tI`?YI;L`8e`9S;o^V5}EtH@rEei}|KmpdOp{Jn&7C{#umv@L(mJK0E z1)@K;2O5X|M)@NTj*g6!Xh(94@EC;^lMq?HcAX2iwVyt%b=}xOu1OtET8CxIKME88 z&-)R@5rHZrRKFVZ{l9>#P#aP?lRx4`!aP2vG&HSpent!%1j7|N-$HNi{<|pxMRb~# zUo~sG9$qsy2*jEs9);pE{MKpSo0I^!#)2`3s7zfIi=)b8=M~hsu23khXTg5Lh^<7Fr}{e3v+%kcn$)Q z&z^nasNZ>;*PV1}S8U}8N3c)J+T;a9zTIA|_`IxOBF{rb2Rr36$WTSV!~Tq(J8}=3 z_Q3)djCz-xB?E-Z4qeDJ@!QqW!#;m#qY!8g&0l6*9HX!qkW5+Kpv~!NOaOox zADcR9`}6WKFE-?Oa0odtIM4D4w~9<|_V_#adwL7%nKZCC%+;RBaS3xf(yhe)hhdJn z;x_7C8{h)k!1BE0Y?XnvHZw1;MbFlZDG{Xm@U+V)tpL<~@B6JAnq#x%)K7K~m7hSY z=a{p)W(NE{yLBUUVdzi}Ck{(%E7BR(wrw8^3QKa9{83LuSXr4B8!L0XIC|NWfMa(2 zJ}Dug5KttmhO2J%ENpD6GIR7uvMfRUn>vHajy*Y2Us=sJB#0rF(9>TruesPI ztFWrIwx_(l!6Jw7==`S33Ei53-logQTw+APp>Y#uJWUxV6o68UArCQ+|4j#P3Kc1~ z9JRX3i(eY@eVju`=#6DOi#IBBep|aOlh3!$jI)!G6LJMfv~v?~qrk&-xwQCev4puH z$DltBY%-V3AcCZ>V}5@A>Q#%hsC7D36^myDCoO_I{Jdb8 z54vgNRtnm^bVRtmxjuez4+<&(`8?x}<2!8jVNGi=r@@>4hV{vz%Eo0wE=`zq)EAID z#n$w8^NbjmaL0}{>jh~3-8}N5bz9EuXD6ncrG)P8y-^&nVwpneJjcyz}Wb`7U zFb@g(($Xo2p#$HZ^QdTfe~i%Bzg1{dG;a;p&JV?1@~5AuZosBPX|2)f?d=@};?*nRQLx7X zXj%lm@V3PhSjDK7SPaeV-B4UfS6d0PJmCl*flLiJ@dCXPS91)ld_$noG4wyvwzli( zH{9;m3xon;O^JSN+AfYj7Y}QW^{-t~fd;xfKwi|*n<#wNG-^08v$mEAj|Trl;y5(0 zPj3IdQp_*kqiDzfyrh(2#0o2Z4IDa_J4zE3t zg1`HCoFSAlc|+Q9J*Tu)O(^CLbWsA~AZYwjWKnS{q433BM$ZL;cd#O*lfoe$O8Y-z zZ^Qi&aK~_G0eD6S2wuCn`43z?U+da1ZvDu*MY@m9Pvkn+Hy$2O>YSeqcCT3yZMZUr zeI^hkA6PlEY3msWk#>LAw|qh5-|bVO;`|t^o=+R|=C9ky<;5*_ql2}NVB-h_+KklB z2P+mYzGKCARo&*lSRIn4ujSuBw2n9#bN4(QWP`^_@nT3dQ^H}=_f7aAzKk{<59GvX z>&=OaKmMBO8KC*kxT0pEQ*Q!#;%RRtsf>Q%)2JL z4c>&K-P|b*C?^2N)M0?WD+fsKt#s>d~P9NspkZw7sv3?Uf4fKWe8s(is-!Kc9M zV;$)ga~6Dles-%!7z)JA(;Cme(|=aP6}%q6mjS3&YzA&(9SA2<^@l@HIr+-OBBAu>&p;w3TPbRRM9d-$+T(hpo4r2 zI$zd5K1(ZO_@(nP$a!NBtouMy-_X)c2TycTw^)3ec%sev|LT!N(WX zob#Gc52oJ@tDdiT@yC%7;p;Pw=Kv!K7Z;$b=4%$U?kJOe`xPYqfns@9%_J=qco1AdHOdw-({b z)qP8D?wUu9FM&bG`tWrdCXIyBW1F$z{pFD4AyMjFC4&YzD>9Nz+DNPzL(;Ica)x#O zVKs;Dhec}+f+*xm1wRHqq-*h8HDspRDFhgYYCWaX&!Y_IS)VyhUo?L@USo=*_kX;l z8uDjlMNuv}9*itzRzQRTyNk4`GexQsH4HmIOxQ={2}Up|M58qQeWU)V^#T(uvdBpF z6~PEwv|;n^3#9MuO(T<_fs;#wpS_X?VOEF@omEl8x?AyMPhH{VukBV?D{W=yqz;i>*LWG;@XPq-Y+*osR68+Knz{U2y)^8 zYw>s%aSV-ew##DTNEfi{U~j8lp3m65p@;Te58-@e{$Ln!8FB$fmD-YiPR{no11R9kVC>19gcO}95TMJ5viAtOf%Fq^kpdT@K>x`AkXq{KU2G?clS4LQO@(;Mo7Yv_$Mmqy7pdfX&2~ z7qg{VC&L!RuDZZHUdxU_1v*(y@r|+~3>-Zo5t287;BV98FS6yrJv>&SS-ryRV%Z3SY# z5~eOMrYyPlE*;KV45Gy|dI_3be^`fE^_b+w7bYXGQOeH zVnfC2=02yb)yGAuME8O)WG;bsOd%Zb%9R7KnfIRZ4BKJjfp#R#>{9?ZF132l&E0}r z5nX+~2+e_kfiS#75;j&2qRkkTQ4s+P0->pyirK$lk4b`?@r`f8bBeOgKsyOI2|*x< zA=v;;+=SfdE-0&3E9US_y*xYn9Z|aWVJyKrp_MHm#Cw$0oVvxJsl@PeSAvenvh?19 z$*k|?dP|~6>_>_Rtw)24N z$k12XUT4uVe;zHGkav!1*jm{31 z_|EcjP@ui~SwFk*-neJ^V^y9_;5;iiCJCu>Xx^In%SW@?c-;1vQ#Hsv=|h3VP$BvI zP_q)&2vF0UJwed_?;k7WJZ>W)Cwy#Sl112kO;BoHq4vR(0&LsHgi=x!oISv+FqZP$ zHyN+{Zc(VJs@l=*P-fSq&ZW`f)2dk=8ZJQ=K{X?2JE~|juk8bL=J7~|19Coy%4_7m z8}h6W?-qa3WF5qCc4)L8B^BKfvRQyG1;eOXVfQWs;Wpu~S|^4M0MHZ!3H|F+D_*yr zdb?(ZR`L!@KVJmSfC(7XQUjon9{Lqr4|34?#hP$BlSG9sQ<}aCL!wT)X-XqiBFT6O zmko@`R2M~ePh_}Y_8&v%xO_TyD&djE>I`DtZip7dbJ9h{nakOwP8k_>^fwW1G?{LX zH=TuMYckrIEOy~DsnCWE%ApXo%}67{w~D2lluD3rw_dcWy1p*CBBO1KQX~n&^!k1^ zdNtT0pAnKSx&&O^?O?JxFLby&D7#XB?3rFr6%opUBLe%oQ8?@4w||z!*{`CSP``5G zO|ZkN%!&mB>rST-S*4@$t&O0z|Cx6SHhxPo)(yM=GM;6jf zDh;5x^Y3ezubogpHN;moWtsJZC1*SjW*ujQkN;)ntBPUf?JuAaizrCmj_H z6+G$GWS*{eYC*3+PU_Rnw6wIgb%WY6I1W;kHLCUJf}p0Z-0e5L)in(bX6NMZ?10pO zE`n}>r9^Xbq==DUKmcV~PfxG6cQcsYy|2HIi=W>dB?jw&g$B{n7<66_oRYuXZlp71 zs6uZXNEije(Q^N(1`1YbDJg(h6k+p5R5mi|;F6gL&wTk2{o}{G&p-60{_+9MVZ;$y zc@Dpbolv?%Koo5Xbwv-6Mz~b({ZyyZV!`4pfQc>`%m{M4g!Tlu7Zf<+WhEEUzseE2 z7dv9KG$Ey!F^ZIw3W)AlzCP35oqpj`D3H9}!kp($fFJbWM(TEgv1Oqrox0d8rRZ@` zrWtX&(mflZ%cNVsjVjp9oY96J?OL5F1TRXLK7cY9>>Oi;@?vLZsvGHkR?l+z1xH(v z`G@(E*p}0I@U>mk8x5gPFrh@hbwozE1PQn2=EUn}{73=XBb>}oOXu|iIoH6cnn1?R z)0^M~)hPS1ydEc|&jFxXe1zqHcifBQC~Q&i_q7heLCpRpSZ82 zD^%}?fo24*&ia>0cJpoX;BSt+oLn0iZZ-|6nkZ-Fotbc5wY`l z>&mx&iJpT9qKhU-2P?@W^yrl<4buEN}I)}MU}5DGP>@B^%y z{TmyFpFAg6d-rA=jkKB;B-4vhGgAqRJ|~i?vZ&Q3+u~AASOEdv=tnsH83idRNQSF9 z7m2hLT)0OKC_+*AD4#!huyS{|D2CG}oSF_?wT|jXJ4-us1&xKLM;#aYG{@O$@1aaD z4zExC;v+sAyz;v_gU*bB%ia-M$J$-4Q7vQVTR4q2alhC zab(#IJ26BKpS;(P7hm@-sd-Iof6>9bh^JS(fyCdt7_za5*gs|B{nxX8mOh6-@CCa0 z$$$2REb<-lywQBe%Il6wjNDzEgd7o+1@xAfhe`?BL%CS?)={$JN ziaU{5KkZ+9Hj532YZl=px{iXoEl6<|J*HuOG8hHlNU(X+Gfl2vCq=zxsz6YCp?u=& z`c6atUE4m)C_5|be15*FQitf69x5SI0J1K;ZW|q%t5&zX0R97l{sM-}y3&=Zz8_QTE*MthG^4Mxv`;y|h%+rZV=(mTQ9g;3~Ey=SWgWwG~HkB}Wh- z13nCdX>^Wn)9oGzav9xvQIS(3p#C>gM(d$osaka3y{{0UwFP!rK-r(|Lce1GezT^n zExIrx7jSiV(}Li#?U(Kk>l(Ni($eh#J{o%Y^k~Ky#hBx<#(RG$X(=EbV5ML|Le>Nn zP=72{CE9NV}>sv9?!=I;W8o?;x5NDp<%!r0`x|cP8X6}R9t;JXUXsA;Tk?X zEN5EE)<(}R_g{d%z5PF<_gqF^seTW4bE`ury1n#N6eNEeWRFADaj~9pU=E-BGHKdD zI)Bq&M<$n?6i@O=)kKbZj=06e-)a@!L4{BsU`5T#(wGiSOoQkq72a zbzxPj-G<1=ntMAqwl{S0%Zb;h+Y%=zvL8Bqjvx4ev%5=B?yB^)t7#SYG95vIIk{AM z_zLY*1#D8tw$PIaUi5?B$&yrkiDkL}8eBHGn7K_O+sw1cEqt99NM;;LDS6g7DjZhk z-^N+91qcK-kEjB&n35Tmz`htC&b9Dhah73yY-^6y%)>ePFE<(_ByUs-;HM|{oi<_QVhi(DG%@JG_- zF%2dIdLtE~mtu_m99ObqBJeCRWs;3qJKtgGDqkan=OQfTf1e|VtXmAOBN0QiI zF*L@r|IB19MR|x3Y-~X)Y-PU3I7kjJ*8nn$Z!r-@c-q%6+Rumd6s*5=BH+EfDDw8h z7l773wpvfD7uK?7Gx8etOok?eH8N(D^b+Y9UxDec}=U(NLb-r7+zKGB); z@Ml!d5`Ua_5_M8YXKYw^SSaeHu(MBae0~jbxAszjY9pj%px`jHPs60(<~u{Vt~c8D zn_=#12KJ~xs6>dID6zIyR!tCnf7EbLq!9gs9iEl%owretKG>8pgr^o}7~UoIvX-6^1R-j(C51s%Seufayu2bq(H0(B0J$q$ z?{kF!u?ftJ5P>(&i2;9)~*~9t!rtqO4PK9n0uoW`FMS5(Rl-Y5O_B|VIi(d^lc;!8}@&F z%$wJ*F>}l#g|@F+)NYR8Z}+r6ip448A)3m-E{<_qt zPv9Lh&pF%>`q1E_V5+q>J~b4$?{X^CU+zSf&rL?z&y}n*OgY-p+8PCdx=U|JNGW0Z zvn8=&`NaqH!36+ce$iixuHWMnB~=jM=CGWnUw2>mG^C7 z@f?2J>dep!By)3f@Na-_Vb6qvf)4MiBgB@$UdO}zgVohlMDVcuhqkx8F4*^f5M$Rl^+(36Wt;pMznes#x^dKABLMVd}|2DkUmSb!6IPD8GMsUxRlTv*9 z7Y_-eiHe>}_wF4*%;HPGYAea_dm%3q%Knw88x(U*G9@fgp9MjRC&Z^AujFbhRj;Xs z)X-ZQJ8#68c0QO;hhsEH)k0unYKRzm%x-JFt*F_VZ@CI_c!W7Tok+=woXi-7VvH4; zR4o!w+}Ol4oZs}Oc9MMO-Wm*y6fD=}$n=a4dPHx%HKuviE{&D?Em2^8n8O4%FXO!K zSmjDZ8yy;c>A>2^@B)b%t%S9g)~L%|2U`gzD(r0HhfPBSdz4!fCnvvz4_^S_8eg(E z*`5?+e2L#o8_@w0NV)<#{j6JzNIZ75&2nJ(qRf874o$!*UtW_W={^mdZ_?DcZQS?!^bXU zURFR8)z2yfY=Yd-)$ybDXIoQ5@424Me6IE*;B!z)P$fvF9 z`X80i1e`ZJC6wfQ1il?B!hm^h&9fB=ik{rEF?D`7rIV6cJ`T}*Sn2maVp;~Us3a~4 z>ZZ8V{GT6{x)6K1r}CI}bP-0wb{(~ZI8`!#%Bsl-&E#+6id&^cij`(x%D`uM)`FQB z_4T1cAK&AS$Q6k)v?mZ!d(IUiCTXFk)8;2S-OO1os*@>^YI9=>Zr_kH$WeWa_DVxQ zpiG5Ih^it}c4k#4#fhBd==iTF$z*SOngQ<9S2 z61WgI=lss6HH?KoM99R0)2gaC_spn@xLweZM=Rib`FjglIl3V;7rRA z@xd1*dEVJKtvx=9za71wTFTywq}?qFvv_tjHpUaZ-ODLQiT8;8fj>M@fQjpE80hz|WF#hn=W3kg)(oknIO<&5r-3q8z-R<$+GYg>uG!cU5_TutlUpt(&(%i;o z_~P$D{S$eSu}3x-f{Ts)`(xt5Ok80a!478&+aKU^h~pF*<_6oKgz(M?&?v0``;{REq6{*#*gtL1E;F~azSxcS;IpkJP!8`*xA7n%`*1A}h}D3FExE*t~38ldm; zeNFUy+4O4=)-N%`24?)GWGaH$NQS#o8sbXIpm`n=2L4Kl+#mP(Hs-Ss&{f9J+V zTfqiI@fDC9BjJzr2Re(mxcw|9w=&vJiy<`Viz0U!r|wsVE<4rO(NAM85LkkApUtFr zkS~wMeb+`Jq)A?lU_4U&H;piTOQWWh0`Y8j%bJf3%ssvM>zuM=_+gR_$8&V(5FP<5 z_vp>fvq5;vR4Px~Ct*RilWR=RssHNX9`1P2U)t6H=OF^a6N{{bp#tt($9JHFim zAhoXClZ0(PZTvj#KbW56llI30tSOGytE-(Ms~$0+cLD4_m^cHFz;n=5w74iSp-@;@ zr(OwNV~((8S&XF;iD;Ir8}GU9eFGFLPaE+5e(&$*eIxyFmI=>PB4MC-(Z;2sddL2X zC~ocdmp)szrW(JRL#r%n!5*x^g0WieDCG@-s&=A0HYrQfAxDL$%XKV5=uT8A6cX_l z16lWxgd||NtXGM38tIPQ^9_tfJk-uvd`|)=nt_ViDU1LfcN$GHrawiiY7TZ8R+oUG~g%LV3wR2ZmVtnx6(lkcGw!w55D)=%tLbi zp79Sd_&)vtVR2)1g~kMl3ZTCWs1&nlUlN4Cl20~B1Causa2jMq!g)_; znxdD+G@^JiD7XtJ_V)Hbzq(^)WrYEfj=;;V%x*0|Zk+G0i;!etXsXOy>ZKIbRZ<$< zaj9DN@$Y_1e_f;lXSrq{;bwjKot$ylH;b0pt(k)J|2W%!!3p7$&7_w1_iuH_2x*h` zzPzRI;1J+U6zy^ix@Gl2|3ok9LfbtS{$*!EdK7?8YkXdWbnDtWmUOS@E}kJx=Lv56 z57OtMk+cgVJhL&prpQE!&>a)UbI@yxJ^K2A>642=YY039uE}YvS&;FW0P)7dA)%C` zRpNxt!|vt{<{YKSb=u|R{+AaT#%E_|xgbLp!SRbHqqi98O3_vV(QaGgU@VYa*B)~L zan6t%D+fp9-%mgO^nsRw={li0?*ZoeeX7sZ$4^^RW+pWh|MMjK(_=E`aEqu`#(!qV z)=&dTbO<{E7trpa7vMb|OPzHMY`isKGJ0~3(A9%jaMf}(7KpCy@Xemb5GaluV_ubcrHrzooB_x>DPQZr8fh-o5 zuEKY&vI>${uYR@eV*fX=OqO!I87>8{imI-?#1ar#k%~B@gb+%!M|Se*0YwqSGS!bBf8;aq)Ty_~kOOd75P>gd zefcrxaY>4zg(yw%eN&tB+pL&x&+NVDt!3h zyrdKAUnyu56+hY~Qy|`;-EfJB#Ee8MfC*`Xv7f{H91CQU$6MNh=?L(?;KD`@82L4s zOKRc>B=i8W)0yya3#ErTx_AY`bKZAD0zo>qQ8edk0_l!szW)0>I(*6+QdIm0M+|Ad zs^dFIao0z<|CA*7-eH#F+#Lt7_^cW`CW@`=kVc#Ax|_i0onXOP~IMs zD!=DjjG|g~MvGQF9>;o2<9zQO){LnTf6lXPAX%5-Wxn_&XkDdy|@u z#$K!0&MmCE%@r-`glp#b-8w5ly!zU#TGkgz_UmPnZC-`ocjrN}IrVwEC0R5UZe>ZBBt-Wr& z)}ld`E*<(aU|<;duB)jD1|kKOUA`qNx1iHEf}G4n$wm<4mWC)rD!bwz3;V{PB?HRT zxjXj?_N%eWOoe|C)?}+i8-3K%6LjvZ_z`8h0Gp!jGP)NP2z%^6%X$CG3blT8dl$&w z!qXK0W6OKIdXEMzgB6}$4K&=^@shdUj;g({tf*MoIFqnG1~aSTX%6kv1Cng_M_EvVWtc-(@la+hL-6^I3^hSC2S?#^3&4hB+N(N{dw|X9BN5 zND=#JG#ib*l2=u<42jNp0=YlE|5>=^VvtXpvhs_ezUp-oO*khkek4jPN~5#2hfi12B6! zLPp1qe==wxNtYzZTXm|hT!y>ZI9nm*ce{v$GDnb`mm6jSPHwi^K}j3k zXWg3*F#~l*%Eqb1ufT~BY(HhC1IPD21cir}mh=H@A{PW}wBMX@*8~n7 zD2R2019Bt^Y-#~?hK3%=Ug~fd5a@!`d)|hk6m);>2F4{Gx*G5!uHS5F%f5B6w?6_6 zhniFWfD&kYdHHacRz@}7kVY?{KXAODg@~7)RM|7T*VjkA{JKJqu8#FbK4Vee7JVHB z*)g@N1Ib!yQu9}#PqZ&3qq&ntPK8oNIu&{q&^yc)Fw0_X$7sKqU}5X06!VPzhKkWR zZ)SWOR!r!@dK_-X!6BeQQJ_c&&c(qHS4he$=_C&4G2d?xW!+NLAOP7RpH*~j$$E)1 z3WLaKQ7gN8#Vm&gS|yIF{Jbu7ip>eKvANg>W9fm zi`<~@&Sj&8Sj_T^ki0R?E8UQg&_XlY1o|sb*z5ufgC=12QBhH89R1->o2<=$C;#IW zkV!pX15$#`pCG%|_hvFDU%i}WSG)5M0L*}GynCbZa0ECvR=zUUek;5@wB>J|JTSDM z`QkPevGr7lx2x#)1g`;XLOt28+No-KyjDpS~Vg-hf)FZ<#Negk|by1E!K@RlkLv5X$B6Gn{j^jqkK+E>nRRc z%`Ms(<2U0Ta1eN)8fVs6sxhI^^J&*K_2DC*QTWlrA1}q7#=Bq5&(F702yh-tXDzo^7Q7X&58v-? zi=0#5>yaWoD*Cux*M(&PXUJ6rW;5TgE=qyaKH-j|FeY6^MU|na^?bpo(=u2;yzkFv zAOAdc$lbFDO}eY&)-CM&+BPk~;sr7OJsKOnyTZT_b_@qO1jdO3G^WNaB)xKy$782o zPcER)VJtG?`k}2|o4MxZPM3mXmls&{$RGIfjjnN$rF2SLF8NL-f zkzrD<&rW;{=>|1s#}qB-C}^*nig3Kw2ZPIT*j9!Z5M?fsvITI_5fZ}U15wJp2ssvo zB^2Ri^CJ}A>>#NK$**I3UE^)kG4e-{>lcdQMxGJ}OSWHjHJ@G@%Oe7R(`t&}bxQ4z zAA9N9d7poO!xn4dT($5RQBhiNI?g`)>*AN}#R^vf_1QoKRX0bN{*Ao}MYji85a%~F z7G7W8ZzQSbN|rkNK$wsVbhVZS2tDeb+1~*&hKf?}pPOLzv>_#^@GR6W*OyY_{UyS? z$crjv`d>aZED1G@pn3!*k5BIJ*M*_S;OMUF{~>JTOo~r9AaQgoa@A@=p%unr&cKlO zNmoD^x*9H(=Wh0$iww~r#9 zbrb+O;=Sl}snM_rj3m8+I*?(|Fbb^T*DjSz^iIW=3QE1BOu^jT>#)@|Bjmij`~0KV zAsCsjWqZL~<{x%q*pcc7bbxoyAlmO|eDa=Vt{@bh}m zz~=MM&EpExQvkAM?e6YA0y(My86?ysO_%Wyn3?Db=zzr#F_PqgdpEa@BgUCq%7wmV zwO&IOVIEnEGQF5<4Dzj8VV@0^@kofbjTuEpoVrgl#poG3wD4sqeS?^VMA*9Wzd#y} zHjzI_S<}KjhhYCmk~2CG(?SupTzu&-eX-4GJea|*MEG16(Q4qX>++KzT!~QYzF(|4 zjpm1lZWxMy}20lsUmu)F@3om}dWt+%q^KmFnHL;FYO0bxsT zHEfv`W+&dAo_^P1LNNp(nR>dTDeakje4)7E*?j2A=BG4tltV>0#&XFlMRkT$&TI!Q zD&@)BRazyoyPC{HxWe;|52)>r_&F%JcFt-o*V@HbDc@pe*&N{V#s+hItAU6J&McmCKo78D%9)bVSG=>h6-vWoqBPHq8W{b$#@7 z4CpqYmk)6wgsiLBr~3lUw$8vM=K zxF&Ntx+eRN1l3cMm-NgQ0GOFaOPL#0i=3Ej=C3pXRUJu*!IIs4j7ans?Rn&yO}*H+ zvB0Tw8;;;pQITSDYa{AqmS#I6(?t3g-5&xun!j*a;1`$wJm@-uR8!plW?h#Qp^%;M-+hqNpb#=PQEHS{x@Lk1VXjrDWA6W?NMz9Pq0pM%#Od7^g7w zNgA8(S>Dee^xjDBV(OZgm-wW9r{lM|(v^ztd8|a)#Awk`rt#|?I(JTdjb;f$W8oV5 zvNGdzoSY{PZ%Ocafj&o^)g3^73z^$PnOd$Vhb*nZKsK1Fur^o{Z;8c z>p0eN-$Qw*rt>L#GvIRK5Z{>Mr ziBoD`;Iz>Xf9=PR_o>PsZLvxLMbB%5t9sIfpRH2qcUi=0oIbD8T^~uo3>BH zM?5PNf-IlJh?tN1yHutq3w_(46Qp(+rj}AQ_uV1~zWS)wcKoav`T0waWF22}vvEuG z@bHPryp#eQk(H>1zVLmpuv^H0lb#4I*uw)32JFOL&b z*K4z(ch<7OhqC9!g*US>4a3{v+N-@j*)^dTD}boDEC)9a^h42hlBZ^&@ZbpQ^` zOSqp7n4s9^_9K!?L0|y~MlDXA_4P7RPhhnl1PkxOE_ik5a+Z#;!7Bxlww`X{i&@|O zSzm#wzDGOqeo;cLq-^Vk2=K+$BM(t5T)-v;&{5z-YE>ceZ>r(lDt@`~QaZemE~muz z5OJ9Sd+Qaao+Iq;IAq-|0=?=x?)~@ni}dNeAQMc#fcJd$O>DDW)kX<dp_Kyy=l+&(?YcBZ5@2W zA{%5w-xDgolWM=)CcoQd5iYvr>#LT5ABY{Dot^JLPM(D-5zcY8YS;F`v?UeWq+1p6 zv%`lGtmBFGb1uEELR7r4m&ADOxxC2agnv6rP2b*e_-}u0FMT9A;o_ZLW=m0l>~QzT z=CCXkb0<3s8*s{)ailX8-=uH0p~mvRGbo9+_2BU$D?1}UJIwyhG-Ao@XMXKC6;5=m zOC&NRJl1iO@$2-P@PCpcg;Ckyzr-ujO2hA3 z12D*vB9m7wB){Aam;L}f-a`Seg5OY(Vv%<3dzK3e-Q!Nn2|ED66JW&(a3g3OzYr2R zZ=KZlEq&Z+Z@jxU!%fC*vn{;#Ro3a@6mDov(u7e?a47{p&W9yGvMxgd^>ib5q&+Ww zb>b`udCwUo-JTOaygb;8JcJJu5{mmLAV~ISLpL)6EqhSn8pbRJa zPD?2Oxke*9`ogg_PLkvAM1%WfX>{#{a&-GxTijoa!xmfWp-Z)&>etU*;hynceIKc0 zt&iXH_21kMg{WieDOgA3ZYVNFU#y)d(w!_@lp1Ib1DuTv`y|ZR|7f+MG?o zDT@I%SOt~Sl*dDZhvQiTzkA&F$NR%WKc}zRMnZlnQ4_xx7QA*qti!AmdCu(K`J=I; zWlagbM#UE+huAT6^dT>-Pc2v8f=i|5KMiF(zFOfDiYRGxNs{Jp1baHR*263`FXVRu zEJeuPM_%UPq*o2BZhH_iAukDAuUG1C=s8@&m-fy=xDOhP<05c0pGyyu9m_4BPAw0I zqHW8N#7n1te@s_e9mhC)j}3<9NJ- zKiv7<1irrt^gCe!A8xVi4{81IKOnDjb=BzM;LnfuWaQ*`6bR5FWvlbcOWdhF*B&R< zzwFt^SlRlz2RVV#kp|74*1uiuueKw7T zRBmfPLsLa`;05}5XZc|)Wu*vn_S=p6JT`drN9v@U0?ONQ{@1&fx$PSEbtA zBue^@9bU)ZcXRuB&gA+>i@jjsU+m|e9-sC4+%vmQ=I`)7=ax@@POB6_zEYWi-TZ>h zGLNCGVA!WbU#h&AD)1{Y3Z68YPI6tM>5=t_FNe|gL~endR6>S{_#H)lcsf1r{dC91>>zy1%) C3B&mS literal 0 HcmV?d00001 From f76824e5d4146e8e1b0be018ca2ecc326309a3db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Thu, 16 Apr 2026 12:38:45 +0200 Subject: [PATCH 4/5] Create README for milesight-iot-em400-tld --- milesight-iot-em400-tld/README.md | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 milesight-iot-em400-tld/README.md diff --git a/milesight-iot-em400-tld/README.md b/milesight-iot-em400-tld/README.md new file mode 100644 index 000000000..3a0d5bdd5 --- /dev/null +++ b/milesight-iot-em400-tld/README.md @@ -0,0 +1,86 @@ +# EM400-TLD - ToF Laser Distance Sensor + +The EM400-TLD is a distance sensor based on ToF (Time of Flight) technology, designed for detecting fill level and position status. With a detection range of 2 to 350 cm and minimal blind zone, it is particularly suitable for monitoring waste bins, containers, and various distance measurement applications. The device features dual 9000 mAh replaceable batteries providing up to 10 years of operation, IP67 protection rating, and NFC configuration capabilities. + +## Thinger.io Integration + +## Requirements + +A LoRaWAN server is required to communicate the Milesight EM400-TLD into Thinger.io, some options are: + +- [The Things Stack](https://www.thethingsindustries.com/stack/) +- [LORIOT](https://loriot.io/) +- [ChirpStack](https://www.chirpstack.io/) + +Alongside, the corresponding plugin for the selected LoRaWAN server needs to be installed in your Thinger.io instance. + +## Get Started + +### Installation + +Look for the plugin in the [Thinger.io Plugin Store](https://marketplace.thinger.io/) and install it in your Thinger.io instance. Once the plugin is installed a new Product will be created for this device. + +### Configuration + +The Product is already preconfigured, check that the auto provision prefix matches the one selected in your LoRaWAN server plugin in Thinger.io, or change it to your desire. + +### Usage + +Start sending uplinks for autoprovisioning devices and buckets. +This product also provides a predefined dashboard and downlinks. + +## Features + +- **ToF Distance Measurement**: 2-350 cm detection range with 27° field of view +- **High Accuracy**: ±2 cm detection accuracy across -20°C to 70°C +- **Temperature Monitoring**: Built-in sensor with -40°C to 125°C range +- **Position Detection**: Normal/Tilt status monitoring with accelerometer +- **Long Battery Life**: Dual 9000 mAh replaceable batteries, up to 10 years operation +- **NFC Configuration**: One-touch configuration and card emulation mode +- **LoRaWAN Connectivity**: Class A, OTAA/ABP modes +- **Wide Frequency Support**: CN470/IN865/RU864/EU868/US915/AU915/KR920/AS923 +- **Rugged Design**: IP67 rated, ABS + PC housing +- **Operating Modes**: Standard mode and Bin mode +- **Advanced Features**: Threshold alarms, cumulative reporting, tilt & distance switch + +## Technical Specifications + +| Parameter | Specification | +|-----------|---------------| +| **Detection Range** | 2 - 350 cm | +| **Detection Accuracy** | ±2 cm (-20°C ~ 70°C) | +| **Detection Resolution** | 1 mm | +| **Field of View** | 27° | +| **Temperature Range** | -40°C ~ 125°C | +| **Temperature Resolution** | 0.1°C | +| **LoRaWAN Frequency** | CN470/IN865/RU864/EU868/US915/AU915/KR920/AS923-1&2&3&4 | +| **Tx Power** | 16 dBm (868 MHz) / 20 dBm (915 MHz) / 19 dBm (470 MHz) | +| **Sensitivity** | -137 dBm @300 bps | +| **Class** | A | +| **Activation** | OTAA/ABP | +| **Power Supply** | 2 × 9000 mAh ER26500 Li-SOCL2 Batteries | +| **Battery Life** | Up to 10 years (standard mode: 10 min interval, 25°C) | +| **Operating Temperature** | -30°C ~ 70°C | +| **Humidity** | ≤95% (non-condensing) | +| **Ingress Protection** | IP67 | +| **Dimensions** | 118 × 65 × 30 mm | +| **Weight** | 208.3 g | +| **Housing Material** | ABS + PC (UL94 V0) | + +## Use Cases + +- Waste bin fill level monitoring +- Container level detection +- Parking space occupancy detection +- Position and tilt status monitoring +- Distance measurement applications +- Smart city waste management +- Industrial level monitoring + +## Additional Resources + +Milesight resources can be found at: + +- [Datasheet](https://resource.milesight.com/milesight/iot/document/em400-tld-datasheet-en.pdf) +- [User Guide](https://resource.milesight.com/milesight/iot/document/em400-tld-user-guide-en.pdf) +- [Thinger docs](https://docs.thinger.io) \ No newline at end of file From 2067c249f5b607c2140d43c1086d474c7cb359fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Penas=20D=C3=ADaz?= Date: Thu, 16 Apr 2026 12:41:37 +0200 Subject: [PATCH 5/5] Create plugin.json for milesight-iot-em400-tld --- milesight-iot-em400-tld/plugin.json | 422 ++++++++++++++++++++++++++++ 1 file changed, 422 insertions(+) create mode 100644 milesight-iot-em400-tld/plugin.json diff --git a/milesight-iot-em400-tld/plugin.json b/milesight-iot-em400-tld/plugin.json new file mode 100644 index 000000000..ce5581b4a --- /dev/null +++ b/milesight-iot-em400-tld/plugin.json @@ -0,0 +1,422 @@ +{ + "name": "milesight_iot_em400_tld", + "version": "1.0.0", + "description": "EM400-TLD is a distance sensor based on ToF (timeof flight), whichis mainly used for detecting the fill level and positionstatus.", + "author": "Thinger.io", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/thinger-io/plugins.git", + "directory": "milesight-iot-em400-tld" + }, + "metadata": { + "name": "Milesight-Iot EM400-TLD", + "description": "EM400-TLD is a distance sensor based on ToF (timeof flight), whichis mainly used for detecting the fill level and positionstatus.", + "image": "assets/em400-tld.png", + "category": "devices", + "vendor": "milesight-iot" + }, + "resources": { + "products": [ + { + "description": "EM400-TLD is a distance sensor based on ToF (timeof flight), whichis mainly used for detecting the fill level and positionstatus.", + "enabled": true, + "name": "Milesight-Iot EM400-TLD", + "product": "milesight_iot_em400_tld", + "profile": { + "api": { + "downlink": { + "enabled": true, + "handle_connectivity": false, + "request": { + "data": { + "path": "/downlink", + "payload": "{\n \"data\" : \"{{payload.data=\"\"}}\",\n \"port\" : {{payload.port=2}},\n \"priority\": {{payload.priority=3}},\n \"confirmed\" : {{payload.confirmed=false}},\n \"uplink\" : {{property.uplink}} \n}", + "payload_function": "", + "payload_type": "", + "plugin": "{{property.uplink.source}}", + "target": "plugin_endpoint" + } + }, + "response": { + "data": { + "source": "request_response" + } + } + }, + "uplink": { + "enabled": true, + "handle_connectivity": true, + "request": { + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink", + "target": "resource_stream" + } + }, + "response": { + "data": { + "source": "request_response" + } + } + } + }, + "autoprovisions": { + "device_autoprovisioning": { + "config": { + "mode": "pattern", + "pattern": "em400_tld_.*" + }, + "enabled": true + } + }, + "buckets": { + "milesight_em400_tld_data": { + "backend": "mongodb", + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink_decoded", + "source": "resource_stream" + }, + "enabled": true, + "retention": { + "period": 3, + "unit": "months" + }, + "tags": [] + } + }, + "code": { + "code": "function decodeThingerUplink(thingerData) {\n // 0. If data has already been decoded, we will return it\n if (thingerData.decodedPayload) return thingerData.decodedPayload;\n \n // 1. Extract and Validate Input\n // We need 'payload' (hex string) and 'fPort' (integer)\n const hexPayload = thingerData.payload || \"\";\n const port = thingerData.fPort || 1;\n\n // 2. Convert Hex String to Byte Array\n const bytes = [];\n for (let i = 0; i < hexPayload.length; i += 2) {\n bytes.push(parseInt(hexPayload.substr(i, 2), 16));\n }\n\n // 3. Dynamic Function Detection and Execution\n \n // CASE A: (The Things Stack v3)\n if (typeof decodeUplink === 'function') {\n try {\n const input = {\n bytes: bytes,\n fPort: port\n };\n var result = decodeUplink(input);\n \n if (result.data) return result.data;\n\n return result; \n } catch (e) {\n console.error(\"Error inside decodeUplink:\", e);\n throw e;\n }\n }\n\n // CASE B: Legacy TTN (v2)\n else if (typeof Decoder === 'function') {\n try {\n return Decoder(bytes, port);\n } catch (e) {\n console.error(\"Error inside Decoder:\", e);\n throw e;\n }\n }\n\n // CASE C: No decoder found\n else {\n throw new Error(\"No compatible TTN decoder function (decodeUplink or Decoder) found in scope.\");\n }\n}\n\n\n// TTN decoder\nfunction decodeUplink(input) {\n var res = Decoder(input.bytes, input.fPort);\n if (res.error) {\n return {\n errors: [res.error],\n };\n }\n return {\n data: res,\n };\n}\n/**\n * Payload Decoder for The Things Network\n *\n * Copyright 2023 Milesight IoT\n *\n * @product EM400-TLD\n */\nfunction Decoder(bytes, port) {\n return milesight(bytes);\n}\n\nfunction milesight(bytes) {\n var decoded = {};\n\n for (var i = 0; i < bytes.length; ) {\n var channel_id = bytes[i++];\n var channel_type = bytes[i++];\n // BATTERY\n if (channel_id === 0x01 && channel_type === 0x75) {\n decoded.battery = bytes[i];\n i += 1;\n }\n // TEMPERATURE\n else if (channel_id === 0x03 && channel_type === 0x67) {\n decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;\n i += 2;\n }\n // DISTANCE\n else if (channel_id === 0x04 && channel_type === 0x82) {\n decoded.distance = readUInt16LE(bytes.slice(i, i + 2));\n i += 2;\n }\n // POSITION\n else if (channel_id === 0x05 && channel_type === 0x00) {\n decoded.position = bytes[i] === 0 ? \"normal\" : \"tilt\";\n i += 1;\n }\n // TEMPERATURE WITH ABNORMAL\n else if (channel_id === 0x83 && channel_type === 0x67) {\n decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;\n decoded.temperature_abnormal = bytes[i + 2] == 0 ? false : true;\n i += 3;\n }\n // DISTANCE WITH ALARMING\n else if (channel_id === 0x84 && channel_type === 0x82) {\n decoded.distance = readUInt16LE(bytes.slice(i, i + 2));\n decoded.distance_alarming = bytes[i + 2] == 0 ? false : true;\n i += 3;\n } else {\n break;\n }\n }\n\n return decoded;\n}\n\n/* ******************************************\n * bytes to number\n ********************************************/\nfunction readUInt16LE(bytes) {\n var value = (bytes[1] << 8) + bytes[0];\n return value & 0xffff;\n}\n\nfunction readInt16LE(bytes) {\n var ref = readUInt16LE(bytes);\n return ref > 0x7fff ? ref - 0x10000 : ref;\n}\n", + "environment": "javascript", + "storage": "", + "version": "1.0" + }, + "flows": { + "milesight_em400_tld_decoder": { + "data": { + "payload": "{{payload}}", + "payload_function": "decodeThingerUplink", + "payload_type": "source_payload", + "resource": "uplink", + "source": "resource", + "update": "events" + }, + "enabled": true, + "sink": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource_stream": "uplink_decoded", + "target": "resource_stream" + }, + "split_data": false + } + }, + "properties": { + "uplink": { + "data": { + "payload": "{{payload}}", + "payload_function": "", + "payload_type": "source_payload", + "resource": "uplink", + "source": "resource", + "update": "events" + }, + "default": { + "source": "value" + }, + "enabled": true + } + } + }, + "_resources": { + "properties": [ + { + "property": "dashboard", + "value": { + "tabs": [ + { + "name": "Overview", + "widgets": [ + { + "layout": { + "col": 0, + "row": 0, + "sizeX": 2, + "sizeY": 5 + }, + "panel": { + "color": "#ffffff", + "currentColor": "#ffffff", + "showOffline": { + "type": "none" + }, + "title": "Distance" + }, + "properties": { + "decimalPlaces": 0, + "enableExtraTextColor": false, + "enableIconColor": false, + "enableIconSize": false, + "extraText": "", + "extraTextColor": "#1E313E", + "extraTextColorConditions": [], + "extraTextConditions": [], + "extraTextPosition": "above-value", + "extraTextSize": "20px", + "extraTextWeight": "font-light", + "icon": "", + "iconColor": "#1E313E", + "iconColorConditions": [], + "iconConditions": [], + "iconGap": "8px", + "iconPosition": "before-value", + "iconSize": "75px", + "iconVerticalOffset": "0px", + "link": "", + "textAlign": "center", + "textColor": "#1E313E", + "textColorConditions": [], + "textSize": "75px", + "textWeight": "font-light", + "unit": "mm", + "unitSize": "20px" + }, + "sources": [ + { + "bucket": { + "backend": "mongodb", + "id": "milesight_em400_tld_data", + "mapping": "distance", + "tags": { + "device": [], + "group": [] + } + }, + "color": "#1abc9c", + "name": "Source 1", + "source": "bucket", + "timespan": { + "mode": "latest" + } + } + ], + "type": "text" + }, + { + "layout": { + "col": 0, + "row": 5, + "sizeX": 2, + "sizeY": 5 + }, + "panel": { + "color": "#ffffff", + "currentColor": "#ffffff", + "showOffline": { + "type": "none" + }, + "title": "Temperature" + }, + "properties": { + "decimalPlaces": 1, + "enableExtraTextColor": false, + "enableIconColor": false, + "enableIconSize": false, + "extraText": "", + "extraTextColor": "#1E313E", + "extraTextColorConditions": [], + "extraTextConditions": [], + "extraTextPosition": "above-value", + "extraTextSize": "20px", + "extraTextWeight": "font-light", + "icon": "", + "iconColor": "#1E313E", + "iconColorConditions": [], + "iconConditions": [], + "iconGap": "8px", + "iconPosition": "before-value", + "iconSize": "75px", + "iconVerticalOffset": "0px", + "link": "", + "textAlign": "center", + "textColor": "#1E313E", + "textColorConditions": [], + "textSize": "75px", + "textWeight": "font-light", + "unit": "ºC", + "unitSize": "20px" + }, + "sources": [ + { + "bucket": { + "backend": "mongodb", + "id": "milesight_em400_tld_data", + "mapping": "temperature", + "tags": { + "device": [], + "group": [] + } + }, + "color": "#1abc9c", + "name": "Source 1", + "source": "bucket", + "timespan": { + "mode": "latest" + } + } + ], + "type": "text" + }, + { + "layout": { + "col": 2, + "row": 0, + "sizeX": 4, + "sizeY": 10 + }, + "panel": { + "color": "#ffffff", + "currentColor": "#ffffff", + "showOffline": { + "type": "none" + }, + "title": "Distance (24h)" + }, + "properties": { + "alignTimeSeries": false, + "dataAppend": false, + "options": "var options = {\n chart: {\n type: 'area',\n stacked: false\n },\n dataLabels: {\n enabled: false\n },\n stroke: {\n curve: 'smooth'\n },\n xaxis: {\n type: 'datetime',\n labels: {\n datetimeUTC: false\n },\n tooltip: {\n enabled: false\n }\n },\n yaxis: {\n \"labels\": {\n \"formatter\": function (val) {\n if ( val !== null && typeof val !== 'undefined' )\n return val.toFixed(0) + ' mm';\n }\n }\n },\n tooltip: {\n x: {\n format: 'dd/MM/yyyy HH:mm:ss'\n }\n }\n};\n", + "realTimeUpdate": true + }, + "sources": [ + { + "aggregation": {}, + "bucket": { + "backend": "mongodb", + "id": "milesight_em400_tld_data", + "mapping": "distance", + "tags": { + "device": [], + "group": [] + } + }, + "color": "#3498db", + "name": "Distance", + "source": "bucket", + "timespan": { + "magnitude": "hour", + "mode": "relative", + "period": "latest", + "value": 24 + } + } + ], + "type": "apex_charts" + }, + { + "layout": { + "col": 0, + "row": 10, + "sizeX": 2, + "sizeY": 5 + }, + "panel": { + "color": "#ffffff", + "currentColor": "#ffffff", + "showOffline": { + "type": "none" + }, + "title": "Battery" + }, + "properties": { + "color": "#2ebd59", + "gradient": false, + "max": 100, + "min": 0, + "size": "75px", + "unit": "%" + }, + "sources": [ + { + "bucket": { + "backend": "mongodb", + "id": "milesight_em400_tld_data", + "mapping": "battery", + "tags": { + "device": [], + "group": [] + } + }, + "color": "#1abc9c", + "name": "Source 1", + "source": "bucket", + "timespan": { + "mode": "latest" + } + } + ], + "type": "gauge" + }, + { + "layout": { + "col": 2, + "row": 10, + "sizeX": 4, + "sizeY": 5 + }, + "panel": { + "color": "#ffffff", + "currentColor": "#ffffff", + "showOffline": { + "type": "none" + }, + "title": "Temperature (24h)" + }, + "properties": { + "alignTimeSeries": false, + "dataAppend": false, + "options": "var options = {\n chart: {\n type: 'area',\n stacked: false\n },\n dataLabels: {\n enabled: false\n },\n stroke: {\n curve: 'smooth'\n },\n xaxis: {\n type: 'datetime',\n labels: {\n datetimeUTC: false\n },\n tooltip: {\n enabled: false\n }\n },\n yaxis: {\n \"labels\": {\n \"formatter\": function (val) {\n if ( val !== null && typeof val !== 'undefined' )\n return val.toFixed(1) + ' ºC';\n }\n }\n },\n tooltip: {\n x: {\n format: 'dd/MM/yyyy HH:mm:ss'\n }\n }\n};\n", + "realTimeUpdate": true + }, + "sources": [ + { + "aggregation": {}, + "bucket": { + "backend": "mongodb", + "id": "milesight_em400_tld_data", + "mapping": "temperature", + "tags": { + "device": [], + "group": [] + } + }, + "color": "#e74c3c", + "name": "Temperature", + "source": "bucket", + "timespan": { + "magnitude": "hour", + "mode": "relative", + "period": "latest", + "value": 24 + } + } + ], + "type": "apex_charts" + } + ] + } + ] + } + } + ] + } + } + ] + } +} \ No newline at end of file