From 513d71c5441d8eeee80459f8d2add564ef206d46 Mon Sep 17 00:00:00 2001 From: Florian <1technophile@users.noreply.github.com> Date: Sat, 21 Apr 2018 19:22:36 +0200 Subject: [PATCH] A6 A7 gateway (GSM GPRS) (#195) * init 2G gateway with SMS sending and receiving * A6lib add * add 2Ggateway call from setup and loop * add schematic and image --- OpenMQTTGateway.ino | 33 ++ Zgateway2G.ino | 133 +++++ config_2G.h | 46 ++ img/OpenMQTTgateway_ESP8266_Addon_2G.fzz | Bin 0 -> 26881 bytes img/OpenMQTTgateway_ESP8266_Addon_2G.png | Bin 0 -> 130534 bytes lib/A6lib/.editorconfig | 21 + lib/A6lib/A6lib.cpp | 504 ++++++++++++++++++ lib/A6lib/A6lib.h | 111 ++++ lib/A6lib/LICENSE.md | 21 + lib/A6lib/README.md | 65 +++ lib/A6lib/examples/dial/dial.ino | 44 ++ .../examples/serial_relay/serial_relay.ino | 30 ++ lib/A6lib/examples/sms/sms.ino | 51 ++ lib/A6lib/keywords.txt | 35 ++ lib/A6lib/library.json | 14 + lib/A6lib/library.properties | 9 + lib/A6lib/sscanf.cpp | 262 +++++++++ tests/Test_config.h | 3 + 18 files changed, 1382 insertions(+) create mode 100644 Zgateway2G.ino create mode 100644 config_2G.h create mode 100644 img/OpenMQTTgateway_ESP8266_Addon_2G.fzz create mode 100644 img/OpenMQTTgateway_ESP8266_Addon_2G.png create mode 100644 lib/A6lib/.editorconfig create mode 100644 lib/A6lib/A6lib.cpp create mode 100644 lib/A6lib/A6lib.h create mode 100644 lib/A6lib/LICENSE.md create mode 100644 lib/A6lib/README.md create mode 100644 lib/A6lib/examples/dial/dial.ino create mode 100644 lib/A6lib/examples/serial_relay/serial_relay.ino create mode 100644 lib/A6lib/examples/sms/sms.ino create mode 100644 lib/A6lib/keywords.txt create mode 100644 lib/A6lib/library.json create mode 100644 lib/A6lib/library.properties create mode 100644 lib/A6lib/sscanf.cpp diff --git a/OpenMQTTGateway.ino b/OpenMQTTGateway.ino index bfefb01..c970e53 100644 --- a/OpenMQTTGateway.ino +++ b/OpenMQTTGateway.ino @@ -73,6 +73,9 @@ #ifdef ZgatewayIR #include "config_IR.h" #endif +#ifdef Zgateway2G + #include "config_2G.h" +#endif #ifdef ZactuatorONOFF #include "config_ONOFF.h" #endif @@ -329,6 +332,9 @@ void setup() #ifdef ZactuatorONOFF setupONOFF(); #endif + #ifdef Zgateway2G + setup2G(); + #endif #ifdef ZgatewayIR setupIR(); #endif @@ -625,6 +631,11 @@ void loop() trc(F("BTtoMQTT OK")); #endif #endif + #ifdef Zgateway2G + if(_2GtoMQTT()){ + trc(F("2GtoMQTT OK")); + } + #endif #ifdef ZgatewayRFM69 if(RFM69toMQTT()) trc(F("RFM69toMQTT OK")); @@ -705,6 +716,9 @@ digitalWrite(led_send, LOW); #ifdef ZgatewayRF2 MQTTtoRF2(topicOri, datacallback); #endif +#ifdef Zgateway2G + MQTTto2G(topicOri, datacallback); +#endif #ifdef ZgatewaySRFB MQTTtoSRFB(topicOri, datacallback); #endif @@ -761,3 +775,22 @@ void trc(String msg){ Serial.println(msg); } } + + +void trc(int msg){ + if (TRACE) { + Serial.println(msg); + } +} + +void trc(uint32_t msg){ + if (TRACE) { + Serial.println(msg); + } +} + +void trc(float msg){ + if (TRACE) { + Serial.println(msg); + } +} diff --git a/Zgateway2G.ino b/Zgateway2G.ino new file mode 100644 index 0000000..ff4de9f --- /dev/null +++ b/Zgateway2G.ino @@ -0,0 +1,133 @@ +/* + OpenMQTTGateway - ESP8266 or Arduino program for home automation + + Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker + Send and receiving command by MQTT + + This gateway enables to: + - receive MQTT data from a topic and send SMS corresponding to the received MQTT data + - publish MQTT data to a different topic related to received SMS + + Copyright: (c)Florian ROBERT + + This file is part of OpenMQTTGateway. + + OpenMQTTGateway is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenMQTTGateway is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#ifdef Zgateway2G + +#include // library for controling A6 or A7 module + +// Instantiate the library with TxPin, RxPin. +A6lib A6l(_2G_TX_PIN, _2G_RX_PIN); //D6 to A6 RX, D7 to A6 TX + +int unreadSMSLocs[50] = {0}; +int unreadSMSNum = 0; +SMSmessage sms; + +void setup2G(){ + + trc(F("_2G_TX_PIN ")); + trc(String(_2G_TX_PIN)); + trc(F("_2G_RX_PIN ")); + trc(String(_2G_RX_PIN)); + setupGSM(false); + trc(F("Zgateway2G setup done ")); +} + +void setupGSM(boolean deleteSMS){ + trc("Init 2G module: "); + trc(_2G_PWR_PIN); + delay(1000); + // Power-cycle the module to reset it. + A6l.powerCycle(_2G_PWR_PIN); + trc("waiting for network connection"); + A6l.blockUntilReady(_2G_MODULE_BAUDRATE); + trc("A6/A7 gsm ready"); + signalStrengthAnalysis(); + delay(1000); + // deleting all sms + if (deleteSMS){ + if (A6l.deleteSMS(1,4) == A6_OK ) { + trc("delete SMS OK"); + }else{ + trc("delete SMS KO"); + } + } +} + +void signalStrengthAnalysis(){ + int signalStrength = 0; + signalStrength = A6l.getSignalStrength(); + trc("Signal strength: "); + trc(signalStrength); + if (signalStrength < _2G_MIN_SIGNAL || signalStrength > _2G_MAX_SIGNAL ) { + trc("Signal too low restart the module"); + setupGSM(false); // if we are below or above a threshold signal we relaunch the setup of GSM module + } +} + +boolean _2GtoMQTT(){ + // Get the memory locations of unread SMS messages. + unreadSMSNum = A6l.getUnreadSMSLocs(unreadSMSLocs, 512); + for (int i = 0; i < unreadSMSNum; i++) { + trc("New message at index: "); + trc(unreadSMSNum); + sms = A6l.readSMS(unreadSMSLocs[i]); + trc(sms.number); + trc(sms.date); + trc(sms.message); + A6l.deleteSMS(unreadSMSLocs[i]); // we delete the SMS received + trc(F("data 2GtoMQTT")); + client.publish(subject2GtoMQTTphone,(char *)sms.number.c_str()); + client.publish(subject2GtoMQTTdate,(char *)sms.date.c_str()); + client.publish(subject2GtoMQTTmessage,(char *)sms.message.c_str()); + return true; + } + return false; +} + +void MQTTto2G(char * topicOri, char * datacallback) { + + String data = datacallback; // we will not be able to pass values > 4294967295 + + // 2G DATA ANALYSIS + //We look into the subject to see if a special RF protocol is defined + String topic = topicOri; + String phone_number = ""; + int pos0 = topic.lastIndexOf(_2GPhoneKey); + if (pos0 != -1) { + pos0 = pos0 + strlen(_2GPhoneKey); + phone_number = topic.substring(pos0); + trc(F("Phone number to send SMS:")); + trc(phone_number); + } + if((strstr(topicOri, subjectMQTTto2G) != NULL) && (pos0 != -1)){ + trc(F("MQTTto2G")); + trc(data); + if (A6l.sendSMS(phone_number,data) == A6_OK ) { + trc("SMS OK"); + }else{ + trc("SMS KO"); + } + // Acknowledgement to the GTW2G topic + boolean result = client.publish(subjectGTW2GtoMQTT, datacallback);// we acknowledge the sending by publishing the value to an acknowledgement topic, for the moment even if it is a signal repetition we acknowledge also + if (result){ + trc(F("MQTTto2G ack pub.")); + trc(String(data)); + } + } + +} +#endif diff --git a/config_2G.h b/config_2G.h new file mode 100644 index 0000000..f62aad6 --- /dev/null +++ b/config_2G.h @@ -0,0 +1,46 @@ +/* + OpenMQTTGateway - ESP8266 or Arduino program for home automation + + Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker + Send and receiving command by MQTT + + This gateway enables to set your parameters for the 2G gateway + + Copyright: (c)Florian ROBERT + + This file is part of OpenMQTTGateway. + + OpenMQTTGateway is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenMQTTGateway is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/*-------------------2G topics & parameters----------------------*/ +//433Mhz MQTT Subjects and keys +#define subjectMQTTto2G Base_Topic Gateway_Name "/commands/MQTTto2G" +#define subject2GtoMQTT Base_Topic Gateway_Name "/2GtoMQTT" +#define subjectGTW2GtoMQTT Base_Topic Gateway_Name "/2GtoMQTT" +#define subject2GtoMQTTphone Base_Topic Gateway_Name "/2GtoMQTT/phone" +#define subject2GtoMQTTdate Base_Topic Gateway_Name "/2GtoMQTT/date" +#define subject2GtoMQTTmessage Base_Topic Gateway_Name "/2GtoMQTT/message" +#define _2GPhoneKey "PHO_" // phone number define the phone number to send the SMS MQTT->2G + +#define _2G_MODULE_BAUDRATE 9600 +#define _2G_MIN_SIGNAL 30 +#define _2G_MAX_SIGNAL 1000 + +/*-------------------PIN DEFINITIONS----------------------*/ +#define _2G_TX_PIN D6 //D6 to A6 RX, +#define _2G_RX_PIN D7 //D7 to A6 TX +#define _2G_PWR_PIN D5 +#define _2G_RST_PIN D0 + diff --git a/img/OpenMQTTgateway_ESP8266_Addon_2G.fzz b/img/OpenMQTTgateway_ESP8266_Addon_2G.fzz new file mode 100644 index 0000000000000000000000000000000000000000..fbfd5fbb23dd0ac92c7d6fb130ebcd766f8f59e5 GIT binary patch literal 26881 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 literal 0 HcmV?d00001 diff --git a/img/OpenMQTTgateway_ESP8266_Addon_2G.png b/img/OpenMQTTgateway_ESP8266_Addon_2G.png new file mode 100644 index 0000000000000000000000000000000000000000..f3242093d21132f864267b4c3add293637be434e GIT binary patch literal 130534 zcmb@u2UJsA7w?M|m1d)e2#N~QMXAz6no3i8kbrcgBZOX51O!Ax1Ox=63xpPWXi@^w zr39omsiF7IoAI3Q-TTIS-x%-SaTz%rN%mfQ)w$-J|KE!L6D2u{GxTRjNJuCiJ(N}< zAvw-NLUMHH)Jb@U=97Cg{O`2wLxepE37Ze`zazow2csk;S4kd8OR72d%?-Y=ylfiF zz2mpb@;FJl;ghBRP(C7jOh{hjk?E>X;Dywp$Qk~@&Q8SKrRLOa+snm2E;YxjzTjTC zGIEu4)4=xCkp;;(ai&&b@5tKLp_t^(M+}SM#?L-+$qyOGC)9ed5}yE zNt-G^_WdZHRvJGpmwf)83OqHCVMQ>Sqh_~InR%1ij z`{NrbsD+Gq?C2|~yID*#{`Ze>>x~0HE1mx-WHYMbwMp-xvf^9*%tYd6-$$cpEw!O} z?dA#x{_o6h9ysoA$Z6BlN)s;GT)xJv1aHF6_jrD_)dvK1S{=22CqkxIUBO<>>Us8m z`Y~ZWTR)1{z574&B&_;Boi->_mhkmE#`lHpDT(r*8GmOF840tw^W_p7=5!HV=pWIa ze+TcW)U(wVGVYwe-EPKp!PC_aS2;yJD_yoi9MOgN6C~%Ja#_0WE+P8`*D3fS_UXN;wjq9-SD zDG^lmU4MHLM$g*0|J1*|@!uBk|8_H$bfoZc>89h7udbeAI7J+m^fY(z z%BtGEC5#{ZeYGNC+j?qdVV>sLqQ z&JP>U~delTxHSd~bEMaNEzOgtwVk@f(AgSj^;J&V10 znb;qPzB`lWj@Xv23VH6S)a;4EFKa2Gf9rtTi+cQFdj#L^`0)M?^o+Vh}NiR{|VbKKHT2jaV zmvQ|6J!iYmNuK@KHg)aP(Y)>_-L7hF*lv3bvBDZxQ#-Gp=+YSV#rYgve*9gF@`bor zVPAra2)ZX1GlUqRTom_IV{gAFbQNd7dn5Fb(Va^Qe2OF_zGG53y_UB3Vsf-I`J?aG zj@#Whf7&RoSH0~#fjw;EWy$kgE%Q%dO%rE>>q8V+c&(WtDk`q$N~LFnBXYIK)6~+9 z!kZ@E^piI{!@tsI>jfi5aizXB}KXYA8me7!(crzhkPGfv}mg{-K`64Nj>EN{*^Mc2fO$F&3 zp$!igBfjvTz4EHp(s$6>4<6gD6>Tp)<3PXc%rN7i?OJ&<;aH9qXUDEO0X>G*xXuyw z_z{ZQRG5KMh~Yz&F<$jfq%?ELefF?wnI0LEAI~kH2>71#jyFNT{gDbOf9Sf|<9Rp9AUqW~GTJkrY4`%g2NG)GOAPb^aX%4t)P5n{lo}c9_Lo0F zdt0MFbN^|pnaM@Q;MDX-&pBzNZk(@jn_mp`2$ERHMra5zggXvR3`CSuadC0+r)6}| zEi}$Qu(!`!;LL5f=r7IQUBFR92A^4&U@lVnoePrXor%?1Mr}?l%Gul7tE18y=-*NP zn0Q$=??`ApfBZp%X1LgSV<*tD2%kL<^rKO!#R8+(g z8mCs@Ni(Aw(o@~VgP+`bdw23KHNo84+P7&UeRluMN$+%wwzl?&!#&ONtg7EvqoSiT z8XG5Gp7MDhWFh=40vjG4e%s_qhL)zhynG7{B7-ZU=^7n*dV16NvRc7XgGt`0liot6 zB1K~an6*pJqUv1kT_*Dn=kCMx>WD~%lkrc!TO+ETKXGJ^AE0wB*TpqNmLJ|ud!e|t zTS>?^-=!BixS~i%@?zZT4=|iwcg?sb9IBLhj{Kyt;*yGQXw8yqxjO$y=L{dzWGQQL zka{Y<;OFCH6?m?SRL<9!w3xqF;6fX2Jc$38&KX>v$D(YT>ryp&BG=`$tF=kHqg+UQrYFlEHV$8^NS={f6aYNW~NBx4dhiE$ky?+pj8Wt8AS=fA&AQRcqbyt4ViB%WkC(=mbCl)n4bjM!5vRu(g<1VLo zAci20w!C~`)`{`4v4j-#V6`=$pdg{~%<-d`2K#c%&Q1*m)mLY z>tnYN%JiA^iQ=`ivclt!!`dM>Oo>IUk^VhJHDO&NY`w~tsRq`L;L3IoqnUZsEH-9=*FG(3^{7wJiSOXk-Zz<{f_v zyI__!ZS9+@&!M&Vu9rn2)(dlTuJU{3cO|1Fbq35jKCOQnmE_~+f6*8f7Z*WKtBuL$ zRv|=&wN2&b)m*!8NarvPz-&!%W~!LVQTs;u^XY;_Y&ijQlaoC7`vx4 z`{p(_J)dt1L=7!EGm+S48M`p)SaY+tO2tKcDcKXvw4Ohnw)yKB$t|C&cJg7iJZH%0BIW<>SF#k;Ie3z#Xsm`%@yr{hF?R zMRX4zc^&MARE`Ejo6D97=Cm8Azg zRMogmr`Bam)^EEyr>LNyFtRb<|NHsCD{J|pgscsP(%A-in3wHyPkUcWHe>B3PqMJE z+!hq{Q&MHcaw0Kk;Z=sdyxF{tnf$IQo@UH(E)^sh8Ces;#JJmcz&A?FCNW$k?cxWr zdTLZ8jbbse09Mv>r;h)!ny)+Ac@lvvQY^~7mR*r$bSKS>&mS>9KK|wF*V?f$W-QlD z%=@BtHiz`svd>L-IO%SSi+@NuJPN*O9rj+vIB!n;1V1Fgw;|O_pD@yyInCXk( z=bO!Bzm58nn(vskozFI7Z@uTVz>t!X^6JF%P>&0J6!QUSYbhrw@nhh6u+y8tJtfbC z-v1TU>+0%mi-}Pf{&=Tr%H#e<+-}GCWdrO zO!dvpv7>m?m@d9mv{JHu1b zJ?=_Qj^`9VuAnR$wRLpVbhbO;5?l6nt5a>`v-k|#y01$j`=|P=I|S%*PW)mhweRme z+%oB!Y6yI)U9hhIreZe_|anG7yAR3!5 z&V~n&PD3@}wEeh!vF+$l>!GsK%H7_KZo#5W7!u{`JQM5G41V#PP_rQa`f-fg(!QMp zT;uOFa;jhb`T`FS_-ocP4u)AI$8^FcMtTp zJIc-Y(syFF;rDk7M@O2)@=Zoq6Km_)6+3529p|ePgT>i1IL`ZjkNqr@__TMZjcL=+ z)s>#fed)-Z$oHIt*QAU;V#VBS@hJ7i0NKQJ*2nE;7ju5*aU-#BhxZqpFz7_N;IS%F zrrH`R3C^YfX=VzSLSFiyqZ%&AskXTKdL}PUx0THZJx~97MmKWeBhmI68WDZRZ20I; zSgxR961uN6um+%QymtHPu3QO=$po(=y-h%t`P>g~J*^mF`;&1V8(XvZrNN$lWVGD3FdK`*R9>4g=)kN%Tj?uM!Z{{S zGWc6DL~(0mlj*s^g9DvNVu$+B>b~;wF5}j0P9|uC;l<;h40QF;4ZSNGcDt;ZrStUt z=<8#oBYt{)w7L#RY1Ohv_%Pu}1zEcj+D_ju`wfe|@9jn4=)#)=(%RUq%~2;xmnKDQ z#`+2@Fg>oKj56Kem5W}~bTU@D7o)*fa4+KCvW?sUg`myQ=kjjCdU&&|Q2avUSBHC< zW_+mQ_m;Bd4ycQ)2S1e;W@b{5QZoD)^Oa$<7!dzpbF-p=h2}$r3)4aU=;7<_ZI>B~ zRHc||Uy94NBR`Hb7qmP=#pK1*#3o@m?9cnZO=!OuB)i=G%;wtJQ$I0SEOu!ukY~)1 zV8v$9e9u=-Wj3q%5xCoTxohiuqFinr*lj-^$qUbO=G*_CenH8H%9X~e`}ys6HGWjr z>Bt{vi@2=ZaCLRf@jCQ$pWoJYokuhwM8jPa@cxm`qFFz|y%Bo(=T!Bmh-TYYA-ki| zf;M&bZDM}WT!P6xvAl6rMR~&&tZ`md!H;ihd$$BuACu*zsTr;DGY%qa-`W!Tz$C$4 z`q>_av%yFOUwwZsHkp!+N_6SfnjY`6c zI@rJ*AZ8Jd(^TNI87O`oEWYz_ImGzQ)seh5@tU=@e00|8ht;1ZdFeEwJ{J_d28i}6 ztQoxUt+h^NUXjwhd&{Pmi-N()Hp#4_Ae zoU)u!Gd8|+sW*=tOg*<=#rrmiL!A%^`<6!im>ypsRCDq(ozvW6J8sZjTYLNiqgeV+ zD0FMYo62@~!wS*;1%)0J?=D&jJyMH>P3U3}nH~9%=dKla0u8f|SwhprKV+$ON8UAs zPnHX8D)$Azf#%HU632d4V^22w6Dwr*puPC4*THqU51fLj4qagiEYyhl4_8$AxNGAM zmqu%vDBdM-@_%Ybnv*Pr%@CG;a)RB{+2RxwIU%js6I!nq&`%D`zsIk7pb8x&K_G!`hQ*uBT-?EJJ1}c-}CJ= zK~N2~81>(D?uYxEaG9O;(nh~cqF{IbQolZ%+y{mbes1X^o8dZ<#j?cj@`S>tzn4Ve z0cg8xJ3EBzWf;a8MyX{~(Oi+nSHH%|gcI43sMgsb0ZcFFkSl=;G5+92tJIk(e!Qh0 z#4UbQOyN-A-Me?U{)8$!m=d!!PKw+SstVuQV#P|w#x}arR0F)rqHwl$8u75ymLv5yVzvlUuDt#@j|j3{DVqy;+bZy=`NK4w9zmf|1^Yh94y2M+skT(3$+?(a7R4j zg=l?bt~U=uv~1~@pW#B+VI5=(QNrf0%BO`hd>;<60}`{XD#Xi!7qYHp(bh*2y_i)w zum{wNvv#}1=_abnbOFN|Uu}iT+~vP~7=L63K45LKd_-e~I34-e%0v@(;}VXzprGfB z^(u>tzi+t}AaLt#EiGY|Ki`3SZMQy)_Z^}Qzbh!Hxv>a4CL4d+dWD{f_j5-_oM|1h z)KPJH(|p6n2Z5uS;zW(1mn>`!b`)oN>C9)(AD7Iv(!n}BGJg5X=Gz@32B=$Mg(pAXjMU})7KDYUczNwG7?UjrkG*g(6q5* z-cys47ZK*vCPzMI-Pa02yYkYJW3aH(JE*@3$98f1;=D`+qC+0uV2@pg5Tz&VX7^1K zoI!2?Su4aFFxtN0j|eej30=!lM?zdZR+%xmpT6mMtGggSU(Jr`$?Sf|UEkzZhX~io zLeoNdgr;`(_r^Q)LF%T8ZmH_?RDpS2qM{!9`jX+OUi%VjM1(eXW}xr{1df)J$&)U3 zVBV-S-F!h_WLlWPC?$r75Q|uBmg2v2NwH&DU9mggN!uRz`u=@;ByRNyKVpnE>qSgc zww(LqiFSH}qW<>54hoWYk%rT)jv3f``x;*g+kBqkxZargI^SB~fD1N$HLo`c9Z6pG zr|(~%Ez{-cv!9>NL8+BpY@c`;Uy9I;h;qADip4&+F&rdjJ9EBy0w2=#N?!jL+J!c-CXTbkgS7~({*eAM4o<9 z=OZ><&+MK~E<67kOlsDC@!D7*x_xkvtDKQU^r*7AER?3pMR4-E7*y ztO+ktl0mM)+w?&k+(PokCD#`M5Sf{o7G=D=60^oCz(?<`jI9LP0zvC4#Ijuc{wu5Vym;MZ7sd)K4Br8i4`xp zngSj~tYh$JeDs2P4E5c5hZd>97VG@}{@jL=Gy}taqdRP~Dy!~S;@U{vN|EUns_8Go zdo5+1N=4;cSoOBu#lQ5osC3u;spDUkJXTQ0!Sk;BqYCN7e1DOqj#&UHYe-Zc_nWJn zJa=TI`aHX1b(DMKO0?4AQY*bCl-VIpj&R%~Ju2Ca!{`mm5n)5we{JS@z3UbAvWe%O6L%r%ITcR~@ zX2b>%UY6)g&&}!Jt)!aGU%W`$BI(q&@`KT(W~xBU!-moPozI_peK&REi^})X($X<0 zs-9{`Egel88yg%)SfS1E2e#Fieqq_WiBW|v?NBU7toj0h5NaHhBN^#PAY%67B)A@#2LTN>- zPHM`&>geL=XP5M`Lj60D7wbFljqIoaja|=Nm-btvfslB79KImD?XGM0>vx`MTR`YE zt**0Vlku^xs%>Ub~hJ$!qk;Z zbd(%_eZ8ZsKV0EqoXyS~so;FDJ!Kp!!DXmr)+p*@8talWH}=Em&S=S0YzCrxwM|0L z(GJqoOLKW`?3gYE-A3cEXAF?No$D`B&K+qFJwXEAjC(Kc^`Lb8d2?`?CQGi#|T)d;CX##mT##oRO^0h z_`AE?*T#eJ42!AVly5%2Nj72mJLd?M_|~^9wCf@j83EHj|GUUWueWD&ZSA>(gBq`Z z>kvNIX1K?GIM=h=e0)g+XO*w`fr0m|vCalKmPgCX8de(1g`>;POTP_+!#ws! zM!p&FqKmlW+Wf@aHa_cpUmWls8XEEyXNj;M_Sg*DFZE+|Jq7C>llx?sAz*B0-&4YI z?)TG;b)Qu=uGL@FagQve&922ttM=bw%kr|dwZ)}WUr-i}7xGU*iRio#;ZPHD>Wacm z;@Elj9G6-tZNII(F*avz#&Zm=);1O5Vj@~hY6#htl$FETT623Nq!K@lQHg&0g0}E@ z@@cJ%EKF1H9qFY4GH(?W#PAHF&Szl(1^D2VJy$Le<1v;3bIftcCr12&g5$s9r2_H_ zDgBN~?Dn?ZzI{8#-ElO!2X<3_Hi+-5;-&m9YSt9%aPN)LR(@>Np*Gw>{lY`FM z*l;X6*dYYSM)l9vWqYo3tgWs6)Rp+kpyAIEL5MQ~w$ScE@=gubFHm ztE^#%92^{Uo(R*t7{r&|6WF8crpUY9AM!hX2W?`fVPnH{u)=ew5`u@Z^d_ZZXYqnq zNwfR2%Nbb5I3BNUd7K=JbSq8de^`LRqN4GUD({YZKN=JMsOpqdt)358M3(a6_7&Q% z&dttNS9y~ryA~*Q=k=l!&I#YS^M+}ES}p*+uwcz_&*7n6L3lWNjAcCwS-NEEwP70Y zYyhGZ+oci7nQ@AO3cci6*Xek_rSe4&<@Wb$yZb^8(;vqgZx83WT{;u?rh;^N1lL{26w#Wv_Fb_W+{TOnkaZrXShbV_~oSG>q-cZFr# ztX~&RTMzd$p7Dsvy_>#%eiMPFiRZwT&mT)_HZxJ%q|+_bt>efpOE43NQeY8XZN9q| zDzSY*rdzw0(qiZ?h$%UO|B5Lc5!%YJWvdSRgi7HY_7*Y_vkMBrDV!Y@b=r^Ue*UUy z;*)r~%0Q%5n`Qkvp~nvVCLsn&%l<+N$5P~un;og}*(*=VuhZrUc$y|U+^3_be`Bw) z{Wa*qvWW7w*LaZNuZVdmuOz+o4`n%7)p5dcZR0!ZgfG$2-kmeGg;xE~^Lj6$@azQ0 zKxt`dy@EF(NvU6;O^xsv6~~iOB(|T5X!3#ZH2@tMc?q)f#e>$CgV=&uwCkNn1zRD8 z0N&<_m&Gq9&VT^%tE1x$>^fD%{jZO)FAICbh>zZ`*B((=PHXBS$_O{2)boh3+LK#q z0v3FC10dyt?KKjJ=EaL96T`DFv9YqZF23m@;JP!P>GRPWXJ2|0e3da+GbXIT2=atM zpjZ?Z3e0pYna`%DzCBp1aa85yt02_Ed^#eOU}TWPb4+~)CVUg zK}ZZ-+-1!))Z*q~pfofwISEcOI4rf0R(Ncpj%BLcGJ3tm+cbd@uae2DZ?@9+JwylAG)QNCO~{EesI@BYO?Ru@dJyXadwR8{fFUe%+tR@Rbk*|^Rv z;K`leYpGjdxe#3{Y4U{EwqmAu)zJsi@<>-o ztj~pw#|WP`^Y#vOX+Ofe-iFHvubL(k9EDxuJ1MXDyGJU#b4E=efx{RiB+zd8kyst; zYF##q8)9#yncIIwJc`g>L$CAl(UF5*97X8pqeBbG%jYRIv!l*Gv_M+KyX0ycn(@(t z(#szl-)$1}1>e(?>cY6Q|9g|4pRgc{9BbgpL}(MVm5E>v|E=hj1c?rwQX}lZhpZgC zc++c~if<}kn24Ch1bis6?{=B${&eAo)AeC|7);n-Ofx*f*RoMa2$(^gRYbT(pLWH7 zgvRHtDHfw-cw6AR3;B9i*yCh1Q~#5O-dLK!G_^BQ%kfxK>JOdfd>1-q90oD7Y>^6$ z)?6y8ny`+0s1+f3s@e^9#!2H&Oqzw*Xc(>Zu$H{0 z?mGpR3v-U84k-zr+naB7%wPCK- z^8#%`q1E?GHAZ(3q1ah|-*uw`Z7^E|m54sHIql#{Z%Nn6+B|zF5ep&V_iF6wsJm4r zc~#~G8qJW}u`sVP%j*UIOJhL5{AmOz`xy41_}CMkX`IVvQeW1lxN*&a1xjeIgs*EjDt!=8(8Oy3mkGUKbZE|S+23cDU#{N02+NcOs= z0BE(h#Iv*dHZ8<%+c!MUcbs@BTx-Bml_0&;F$r$u%Db_*HF-J7T z^Wa&Hk2IOSuEm;zGYS_&dV4?I^NRvYulIP;{B70fO~`Fr4Q=?=Ho$7N>O<6>b1l&+ zi2WJQ7b2Vkvbf=F?cjK*8T3TqwhnhuSxb*Cd0sE)&ZovF?uyC68i#x3d!EUE z79+NHZys>>+_AVSMiSbPZ;p6#bs()t2b-n9;;ofch&V=Lj2v^MYpb)k;|tSy#sO;- zuB9nTTd#c`AI2@_3r}BmFJoEM1hj!YjD6SBA6SXTzVM-w@WlDVfV}f1(u#SUG=Y5C zkOAnh!*m;J>A)b}=Z*;VjIemxGnm6wtQciMY@g0`=z>V)ZX@yw{>KZG7s~Wx6Q4#& zL3by0zPRDjH*~bLZ}rJ?`n&nGj#Udga@B1$Ma+4)G_}bTcPH1a;sprd?e{DU(DlIz z=P#2HUXbH_f4aIq&M*G0XVWh$Mo8D}b{(X|DPKtMq3b4`Nn6+H(Z)8;=`z*0i|Z9} z99!LXAGD4^%OFEpS(|h{?25YF$a}_*-5>~8>So(-YmeXk7k4yA=fpqVdZoDR^V~4+!+KK4cAl5&(O%WUwXpSG*cCWDBy=9Ua z@-{dFMChU>AH58Fm`WEBt^rU-pl9-9 zD6E1&T%(C_Olwq-J`gp9HDs-19X(Dr93LVI(&d}e>*-QDU$AAUA-N;SSVCX4So!^f z?I3BBv#D79l417Z!vKm1#C=psr8btz zg^chMBw&B(YsNTJJ5T%7v25>pWC7lZ4G_)vq9Mgh0v*`$5zWx75~0X7RR z0nXZO?NK_)x|3j`lDAP@^-uPYu@1^v+B7hH4n1HQ-qwsxTuHxjUouo9syOv^$n>c) zT^l6J>%hQ3Gl;~^nXd%Np7WPp=<+#_N`AF#uo<76EaQY6d;O@9{a)eYz_&ISQO4kf zV}4gpsUSla8deaGMk>ruDEu=a2G9eZxsYG@vA?}L>R6iLT3J1MTj`QAm!4p8HQf+X zB~wdFi+Z^phBI|>L-*jONd*1)wOJserACFDWTWKmF;mF}t4T z;k+l10_tFGAcP)BPeK-c$PvOXB=`=pRYEbX{JB?5@({Dg&m zm%uHm_=Zbd5Dpiau=37MWDID&qG&n{`)*OcN9imYn?6efWqclR1nbk##WKkPlY^|Y z_4H&UVoITOfE+;677Hp)cODt?uN#sk++wrR{rbA8+L`B84;dtnp<=6Fnt)A|znqFVp=cH_jP$^Qs#;|qC{VXYzPWn!>?uy3GvDrT7Jt^L3$G9Vr3Q(Oi|YWI;QI zJIHEDf%HT^YO7@*Dt#|HjTbJQA>Mb-LO7!&tF-+-ht5bw8sYsmc|yAx5~CEYbe$$} z#{65Dxeod>s?qteJrazy<=yzM<)qv4%1D^CQN#gfW(*dbbG-FIKh4Ls#PALYH1B%I zLo;jhFbm?1oL=M*%-E}D3>>Xg(E!QsYqBZ1ch$En&PdMkJPU6zL0#d*aqljC-^nuuuZGq3L1E}d{r)?gfe^pT z8CaW+rB{f_4~VFYP(l6m%lFra;VF@;lkMJPYrZFJM_j>>#OW`zl9H1Hs0D_a@qIcJ zu9PZoBEx*{>le}2Pi`HD5SJLYPOY-#8SJz+XBNWtV8Q2)@_BHLA@1G>TOo3|qM||^ zCRgJu3{;@s_-tD^Ojg9ITr*IDTjnbq5Ld#(*Vfmo#+QF$U@eb4^S4Q>7#4t@&=b)6 z3?jta?34wg_07#hFy7&)J_mZYPi|^)RREY_CWF6FpE_>4*6|dkE*Q1vyBqWT4eXXb zKR40S(cOoY#7X$Pe39{ySjWee*eR6 z>!OT`JFFMau+h^(SLDgX0mTw5x3G|h?e zUOV5BrcZ@X&s#`4JHT$DJoj1daev+>t@OMwb#U(Yr9OX9;_F|J9LX;zNV9hKeQ>Rp znieVm&T?pI=$6^S^)D?ZYa1I0kmwiig+--LfdEvo5%wJZ3Nt>}De-C>N~NAGWDV%M z*F~<|f&fZRNjWx?8drzfM7>C*4X#(0aC+|S3=nTgTet4a5Ac_Mb#*1N13B|^;~_kY z*cG5B8zFZtuqr)=JR3;S#d9N<1955+S9t)*!VrlWDv7-(-8m4(9e14X^8p}6!Exjr zP&JE@!Lo^%U2njA00UUs9X{0U7KQ{bo#WzAkQ}3nbO`=kOW?yB%%wb?Oq=5aCH6$k z-&k{iLBf;4ZDXzqa(q=MYflHf4)+5% z3t9rr_|E*E2rLd|RfeQ}#SYTo-2?GX2cQc8zG_ZKh5(eeYO}b75^dos4TI2 z(X=f#tbF5lt|27KnILhN;#^s#o4tc(*{1VcTb2WoO!NIHP!54y&kBFG3f(gR4}(!X zv=11L?*u2NeM(wx9jN2s-s;lkPI8YDmUT3sM2$ZUM=DO+UBHGpz38#U2y@6Ndw(_~ zn@EFf32qysN(^RWYnY8o0x{ywR1w@rl`=gL9sDYv>1l`owkTs?Akr07G~`02nXMb9 zD+m}L5xq%{(0x-m$n)$SA1+F5eu|jkE$O44tFElvUo7_A$Icbh2Q$?Z@tgV>GEFNU`uh9rfT!Wi=lQ90 zRP2*RPZGELh_k-^a%R!cC*-{I#vH=I!C?gIUaiyrb*{EKaYjyka0iYbC5^d!4@WzT zR_whe<0sM%i)ZNRz!g$N_ykD;Mgj6KgSfkv8Tr~m3+-p zBkrxvn}bgBy1GIF0=|F)G-0^0-04{OOyla=AG?c{dMl4Z|HWlAHHh5HPwU}|AXpx;LUadXZHx=ildxy}eEP=ykXhwLY zym_YHrPCUzlxp0j2qv9~dA27)0vz0PCa=BR{O7mIJfvGPi96%QX=+&Ov^=_Mz^R~# z{9DJH_@#{y+1=^VYUP@<1p3RDi3kg?Gk|tyPaQWx!9J&My78$YDdC0t%AZFv;}4o$ zp;wY0m3>KeJg>X=h|NGXquB16wH#0~g$@?5l?B(MdWZ`Su4PyRGUZ`Wz(tcZ(C!yR z^H-wLL{ta37d^K>KhMp$SzM`cWj}}nj7NO?&jrMIf^F4HKwM^uzZYbU<-(4?HJum? zluPc+E>KsGb`hC~$siCBCXY?zTAeH8E5P0ZD#PXyJvlJI07y)EdS3o5 z(E~yQ*0?g+Oh|LrsMEap=^IKwXxZvtjjV9~SGF2}?+n?9iv3&Fj1fsElY z^B;goIJl3teHBjp^5i>$oKV8LOoU=i`}Cp5P6O_es;R>na}V`6>Z@in04r(Kc}ib} z;{Vbwdrk&O4ledJ6TIqj+jZ_g8ZXCc{R4*O6vKc2K?I>y`rVV!DqfZJV8ccLhY4tC zGJhWr43^7EQWm;2_ewzJ;kLUc4hyPh!i+G?Z*x7(GLq)0RUvp#!0zl_)7GvVkYXAo zQa1uyt+8SmKUMmrIhxN`_B@t&X4eg;P1IYe#?Wf)KDoKM)X}O$1lAa7t7}&5RvrlY z8mF(nzdt5B7-vxIyqu6wm7db8_7x&wd4VWtu)MHoVLgN4!sO(eIwdcY=Lj{UISJ>I z1v$>18UcpSSdWSPB(+3fH@X^!O7nex>+C7uTMFYheI}aQ+9LK#vnvm@pB4@AevOGi zF1tMM$=1{4^IJ1XdpeM$kvB|zT+$V}TqDeM%MPbA+C$t<;lx7Pfy)WWk1=H=uhP=e zsN*ytMlEnZkz6OtLyWUE;dlW^ti%^54g7{!MGef10WbVHGmP$L{Xonafln76)h|ST z(mR2Bc|`TY7UH*d9?30?#=Rebp)ESxq=C3Mz}{){%Zqxavu0S6QYJpNCvw>xZa2G= zCkvxh5Xr3{sg-}9(aRRd=-NerBS)<#At;#2AwMu_Q#kMzXYjh$GHa`}46yp2DtRO4 z>LDFZM-FEUI=60jZ+LI!yFPIkvN2QWzT|$I&G}&mUwh}A1`{%jq`)PUZHYh)Qjl$ z0;}&XS}42jux^g@+4FkYH!UErVL^m#lqO?R$~y@LN|)ediTy49qO0IJy;#g&+X2BV zeUpeZuZpUjJ>JXJG-0jBU3S#@PsDZb+&>$qxhQ?OdaAg?)p*<4vO`>s@}74`u8yL{ z=$B37T{SB|++t7pPDt8c3TDh!=oh}@1j)Oo#OX%IG^|rWUfzXk!z-y59E?jx0(aS! z%GN!V+)PbbImH7%;~8xuRF*BaWr= zCYkwP^0YIjXJC&q7%I#0mz_p4XeuNwDWcSP+*C2(5& z>U&aj8|CC=*j{)Ge}cO0r2{A}SOxi%fWXC|%Yp_Cg*S|i-NU??o@r}47+dw_pO$>~ zr19|FtfiFz5{^l+XEpt~o0iVecfp5B96CMxZg|clv~Wg09NEjg zmgL6nsT~5TR?Ub#p|r{Edk|VLZHY$Ztu1Z4+ivSbVIakib#Lld4J|mW&7?W}$NEj% zq*PIP=~$+NfyO9Zx=XmSo14gc@kBLEO-x3-gwKnDrAD#@{-mzAnc3OdV@E2s9yOV_ zDoqQQf|AW5wwJ}zuc@w)jD==jou9*T@?X#vGb{#QJFP0W58+v6-~Oi<$+9F*i#-`dkR%utt#zES9|(W1N?2`hu+6q))Nc zJ4hhSy1v&3P6AvIe$%wx$w05z?(XgYDr)?$Cv{~Cgc4&nv~4u(=3xp^M=vI0=&ii8 zblgV8-IK8?%}&;vbS>{^8~ZTE^0>V0{vw-*e~A_%LgRe0R09D4W=63sK3aW`o*#kh zkMG;eXs2FG>{=LiN^yMb6?;cnT~vvl{3LGKs^A0bKkyB{zzbBz>DKvXlzCJSY>$_u z0&zzxhlhXF8-aZG{SRgK*0<$M8xITIqc!l=lKLrY{fna9eAnkLQZWd9`*Qqy3GKbO zHjY_Wa9oLM-sktMqkT}u{6y@+G0snk2KoCIon7Oxu&u?=|Sn0?C?x<=c z28s+&Ech;U<>c8uBK?u^7)CeN>%gT~S`}~~on3$n+Qc?>07JnURDo}s@v|eZB@i(| zLkh{#kejF8%vvQ1SsWhh8`F|Plns_nmD9OvFE+f@jj$X?oTu|#Hf32F3>hE@9zIDu}>Xyn|7(J z-LHNe*jZI2iL4JDL#L#$i0-d-!acyyYrRTqVYj9%%+DWbV2$J4-5DL#mpP_kgB)8_ z76!+L2|x!vrc(N7%JYaY7wrXEV}%5 ztTwzGTPypPMyw<@z0TIm%nTQL#>XCwXC#uA-%|iiA!B_^O2w$=5H;^8;<;7BWB{RB z!09#fE6z>}18Ei*UGt-mx3-=Bbq#{NM%}5GB}*$!JcdwI$+P_y0?eZHp%B{O_@;?! zU{7*jec%kHcn-#RlJ1JSVgiU~7VC&mis`#SYe6C@a{gJNWqXWz8;f?@=@EcpvdofT zotJI&Sxhf1gqM2)i86clqR4p>qr<}T@+-v3xyNF+?m9R+&Nc#&9e~ct;wD}m(56c3 zb#ghKWqG}(K_8ERU%i!s`7bW$daSFcv>+ zvD0PXjt7{Y0t{$8OjEbYm|#4(sA<;?!Qk@VY8yus8f?TCj>j`z1f;ZEm{^y|OGL0E zfQ7KXIUKA97!VL7Nf!OLJY#-0d+f}lQX_z`y6U;p83%xu_2py?ktYFeEA}J51I5W> zjGkNidt3Dq;gkH@1Z@A`DFI9h#y1OKv+-bw4@8J1fTgkz8!*Km!5OhM&U8peCARjF zv&oEaEG;#*TArsoNkl#aLLEYDqtPAM+pg`e9iArna+!TUM~OsexrH^Onc_(FLEIq) z$&&XL6`#%O*k3e-2qnFL|1&50+2+6m&>u@OyvD^(lvM;BcbkE|u3~5p`K< z4GqdZoP334`cvd|ug2q8a@#8<#kY$JW?rr#8CvOSaE?-)s=0(vnSb)wSEbaor(t8Q zmTo2@L@=PFM3@Mw43%91TVeNWK6ou-sDzT7{Gpe|>bE4p@S$HZ#<%G}s7VT@;X)H& zhSq^64kwlcY=+1KaVqLau#!rt7a+{*-8^^vh@kbr{i|nzhpC2C6fnyF0aU!JUcuu2 zTJSZ@BhFo%#~7ekeV`F;M=Gd8*j2&{J}*SP_aKGYJ}^LDIjo1tnvb7PkG=!Nb4O(S zq0=pQrG_jaBs~F$0IoFvZB=EJ9&N@FdKv)WhC)eR3qUSLZRvoj6B82)K!>cIf>R)~ z*hXWJ86jcC%s@%Zn*nsHVnoCc0&(eC;9Bd$T_F#XOb|pdo5;6(=ZJ10(i?Cj6!P@H zi|rEgf3vw)8svVNy}Lbu0ll0^eLTDo9;exkPu9|U(Sm`4;q?LGO|#R}_f1Vr@t`%S z?;KAVLvv_mU5!*Q0EQSq6tz8TJUa*c31x#y6%!NlJ4fG}8K4zY94TgqYho4>j6^~Q zWMgb;>FDbAMHB_A9|U7+!SO97q2iB=mfUdTc92@T3N;+B3xe~y9FfTrj4q{v+#c14 z(M=HlzQn}H2t?yj6r+Fj^=Yr~s&m63y)nRs;55hd%nY3CRX2iz&A-+{q9!n)FabB_ z3j}#=EF&l_0SLE4eU(n^^rlx&wwuUh;-O}XWI^4n%WKBFXV3W9uFtB|1<3*__YG90 zSzd>GF&%P&w4T|J*n<-yRc3sU_oB5fDosb5PsMxZN-DOI+uw`Xs;um}&d+iZkfcby zFiYKL3a-QL5W(=fdS}X$*qSC@vQ4gd^oj$uM9fhFp$@c)F90L&oJhMn~6)X)&Q0VY7F{6Ywo@lE`AAUn-i3rqtZh8X_67pfq(SZGL+O?|y&osmo<7KQ;T_Ferr zg-2w5ED?Nwe@9*RhEFm=i0i;s$e~6#Z1jS3nnd!pLY+NA{FaG+RZ z6ecp7WJ<1S!I+-Po!I`)Ymrd1P8xn#xjx!K#alt=|IM)E(8r3Y;`L&EMYeF0(VePM zTQf$fOvRt;zC}T2GbJIm1qA?`lxI7pU6$C{U;HcawtQQH2p}yy1FT4GbP9Jl*&dwU zJ$P7|!pjgqH8bmAdgl_kH0fh*KJyrLWynQB*Q=w{JK=Z=&*|>afy z43Dkz>BF9>6py-ucaZ5E9H8U~(jV=?O$NtuM2#&M&xNz`BS3MrhZ9EF*^bVS=Z;Hi zLjS-Dw9JZkB)>c#$q_bb6gJzD_oHXmbEc)^E)_odrnP*u66fJz_@mIZIJ2gtN9H;t zf60{sD^SJZ>mqtZ^E>DQG|dN_oF`7S3wC#e(J}+-2J=0Jn#~yKAviYXlABo2zrV0o zip>iEuktrAALxf%@D&rrdA;l(^x4DGUC+UR1bz6cJK5=}ZPE8ki_9S4&tAi#Y7O{| zxm$1nzHDNa6Nrw|!3qP7asrV(nSK2nBx8+?0&Wz7lZII8Y!SX$MYRX;ugwQqQGS=m z;R_+sA+@Haj)HJ3Ei0@phX#d@ZZXLKgtL}1NhK{Eu!Qg}PXuQ;brHpKtqgylY5{T1 zCUwrF*XJzJoEJm!uY}Pqitom0?0Jqo`eZ)D1I>$WVL_It6F4*N+kr%b#jc^=^UNnw zoQZoNRdh1;)XC(N^-e6TnjYkGcM~6`c5cpPGGn&SN1&xGGyw<_Wvt)ma)dlIkQX!h zk6=E*3qTTX(=$8Q_xYRPixEJZnU-I#vJ|KREav&``)7|s9Ql_EaYQ87Jpm|Tbvx<< zm~UhS_6D9bv_b6-N0fh7$vkXDfU<^%C`*e89r;Na4N=U{(nnU%2tsj zYg9t0kX_c2Y=yCmJtbrx`%+}f7A0?l5MmfhmYK2dp$IYdC5?RzS+d;c^!|Q+_vib^ zeILhtA4i9nc`Y-q*Y&!t^E%Jx^Ktn@_@`P>9tFqocinlKsZUanY-=m5)#HA+8(f9z ze27zRmf6tl0(~fjDN3cZJhLVPm4rhfq;-`io`vhiVc z?qgDY(7|vsA6=AKp4w70Hf&Md`F#d1{9{H_RC?BQnXOohlkAWG2va_C=i;m%T3QAk zMbSZ@_%GyU`AKtEB_DAraAvByDMW4b|2K^X0CP5<74u#cGSFTnqSc;PjZ@P+uh&LVExyDc=dX$us>YK1seFpk_#RcSiSp$q4G7q{P&Ze9(_H= zzh|SLR`}CSPDrAD=ZyU5PmINXTFt*4E8ZL01AhMVxp9S)kL}Kq_S2Dt_Oo&LX=_Zu z1-X+lbF;%|eC!AX>uku>H!@y@&?BLbBqp3fcnVb6&QRPIh;rj`MfWZ**&;mfG*4eR z@Hl8Op(|;Y!mqvk;2;{!+Qt2t4?ju&;xgNL-fzcjjBEHiK2*xHCYl%;Ub<14_l;&x z?sOzs<)_^TD|-6VKI6V2kk0z|pFyv-Cs6AC=O5D5hC-zK#7W`*ybT-u?=9$?l0q6z z{m;&%L-dO>nEs#r>2I>he?(gGoI`tku~S#q)v=@a?_*_9#dMRW6Bz#cwf~3XGi)pt zX#D56-B0+cxK1?C7gqmH`n9qyx)Sq0pFfP&Jd>aFd)RNDRT+usAg&WY+!IfxIfrJ1 zSed#}oAUI@48Fh_iGf9T1Hp}VbE+W%3H9qT0K4K<1I<>^kUbQ4btNejY+mtFA#v2v zGu*2(g8BmX`T~oz$Mf|U@WPzIOr-16tvcY#(WXppFGr^qCt6!!Ah>#*Jj@+c|0r|# zS5y!7%Z!T?9tp+Z_AW|=y1hj~m%;pBpKghSVNz2UGP>1f<>l|U@%FUw!m#kw3JxBa zPTvrFA~;QXbls*p<-B*ca4)2SS7l1i7M;ldqoaUDTtm6YF#j?Ab!w4L%K_) z;ZO?}=hIsVoTQ4Eh zobSV)ufO}b9VBhK6EkhjS(#Su_BDjRgP_nSw#1iy6gq}*%ZJi)~l1?o)!0;K}I zwopR-^tyqO0a=&x?DA69T^`Yg_peYiTI7Wt+k1aqFud88V|}QnCrLQ8ZXGKlMwvQu znmTymwI+j3%#!Y@||J#`0>g0KUd&3Lff$nZpKM&A3d`1dyC*l ze#t}olKk$8Io*@7HgEWsk10=hkseumrQXc5)`e!+`EJ%3c%t>bqcq`oQi;lr0rKSa z=3lL3OobIEMc}HQo1T92EQpI=t!awEwDh0W{@FV*y4R_qr$k(OHBg0=rfGDsHVkkv z=*^JGib+b154@yCBhK~m0yLVg6-OyIfMCQ5USCFFV6iW%W4&A*L1gZ-vK z1SJGE!HVf~#UM}za#s@5O_5)=eEqC5WLCw`a?BS(Zl!W$%;0s*4auHGshZGlE?rqHJ4JNX@Xt40CGKEmf zfWNt8hl;&E1O+ zZ?M4qfqVDh-=5<|(jC#0Ar`M9TlJ*xd^Bg?t}=Do{C!_({g^@=uX08=@u{m92hqjL z`p-ySfzCRPjjWF7{-Al3OoTe<`J{#5m#@$kFPx4cEWa@-IC1;J?EG@}T^`#XZa5n> z@jOLnZ!YpC++bFYid3cr3Q|u1x32t5v@-q4P#ykr_0DYYJ^B7V%|-bn>u*lHjYmNZ9E?L5#4)xT^mGxzr4cR z6cr3XE@39~CD#`dX};Ae?&86vRkPMK*}px7ft$pa^g&LGKdi7+UNzgCb-%US(#3~oZ?uMJ(g;$;Wr3?1kY zp0!0V(XiK!A;KHT6llrcy?i+pZI|>E9q8%AF&C75% z$!_5gyx;*E9xu!f`0?A5o;pPsa}(*(TuVh}F#Me`=W9ssyKx zAw<|9n9iuH!!2F)tk%6^#}+*k+eLh1arjn>T~CKWA$fRI!VTq-smsT8I>ySg@fho} z2H(c-O^aVYRG?A8$Pt+SRG3Pz(2-m1%-!aUOGPEpY|N}I^~AX+U+!sMxR+UaB9ILH zRIkuRQ_37EdZWv)c%PV5DCIJ$(A&L%J_9~ORSs6kk?`a$pDNI(1V{04*YdPaxvdjAY34UuvvP8)k}fi4%gc| zuBA2Ae`G%>h+gG1d6yDB#cCkg^O?!bo$oiPql3OW+~#8baJTX~gbJjlK3E>f^$>2a zxWm}JnPcf0ITaO?nx|b>#XNROrk@BX(BI_XC}iR&L~MSGv|#ST+tvO07-4_us2Nw0 z|FG_c^Vz1M;E;a`3%lBXIMt0!FjtO7KTqe*%Rf&)|L%;N1HHF1Zd8LHQ4F0`&L67o zXWhlu@?J>oy>~J0H(12;y&gk3*+#V(X#IE0Mvs6#LTzWuiqKY`Pu*DesG@M;`Zp^O z!WNZXe?C@G_*>=O@BT}qaTosmU?n}O{|T(%8nFIXFcxMP*nPULDeBa}5zpVvn()uE zg~ze~>x}>JF(5$}Vn8#VbD1X%AOEl2$V`om?jP(k7Zes}zhC|L^Zfl8CPwpLXQWWb ze`2poNm2Y8(wrH54VJ}qmc`F3{y~{tQj3ETTUm#qQ3P0*PX!QV9gjYhl_3MUZpD3w z#{P7H1cE_9e>85$kHh`fyBROjovI-(4t>0oA;!IuziUS`Ep*8pRe~((uq}h*BAJMB z@@P#w8Q+X=> zS^V)0dgvm-Lcm0@qhBxqJO^Dfc50rN)#CDKCU>aFVh}Fv10wziT3m6zs^*=5zZ3 z=eU|cI(Dcsg9^M0XTAd7DstP|Kf4*Q%(zl=qiiwyW9sIZa& zH-L{bcfOkMCCE)Bp2!>aW>K(QoUmGKrKdioQ3>8O{&=J1f5crFpBoPtgRsbG%Ef%A zRvhPR!4yO8gmx3y^FPdM2a?WO&H8=|5kC+3Bed=I#WUf==;*T@hk9J0pN*L+ z0K$mLL&|jVB;FIMw0-!{1y?R;|9pG}ID^LVAU(EW?d+o&^OY;aera%K1Lcws0%`|@ z1rySnA6e&?T;e;d!60fv1o19Uy9>9|o+d(w?0jdksg0_1b5$yJ8my564 zh_00_X_8ZNNAJ`PGz{dKG+Uk~C7Yy;rxNR*5S}zMo(wknW&V8F^T;3vrgPyw(2|`u<_smLKf749%&KU) z>&cne>toikoI!N?00a8Ek-_dssVDN`@Dk`^8jpmq5X!Tjg1R%rB!dr5DT<0J;vp-t zB>>!WUQL~cKs8KdZ#)!YAoxh44uX+2&yiPlw|$R;EI!X9N=|@G!a+8geT|)T1nFq7 zFo2F^ZdKfs{S({5N4v+CmoLPISul0Mtjp-W6yYoKc4B6>30o^SN6dMbrMruYyl1ZU zo$gr6v%|C*-O@KG~H>B3#>VB*M@&iVB{>X8sGhy$7% z4)VjxF5nJ65opdo!hbFT67hHw7v_nrKmWe>M~go`knd$Sd5&WGGst11k?;i*??LGL zKsv;*WI(46?Zoq8*NS8pP!F-4qZ6R>Pr^%>R}>BFVlR5Uz(q0Xx3lhO zkA~c}zaL#}HbVW@T7yy(hjh63j!fH~QLI(srI6k;9X^J8!M8xee%nczFoWuMJ!kyG z7=-B>l@7K0?pZ042Tc+NMM>_nu{^im#z>L_=&M2Zj}!oj_*`|VgwC}*kMKu1RjeIF zpK+k(xHkS)E2p=8Cw-=d6+B1b%J-tS?`7Q=IP!{?0B}dJ4Roj`xU;g(K;Q$O%uj5{ znSR5e|7Zb_)rOyMMxJ(8-YLWfdBFFB>^dT-cxbcn8y&)5#5AY-S_5WpS$x*v1j4L| zIHBl>>-6rNhrcR+($<_#7z=UQq-p%P5c!819<1Et*Bl7q%EN?M7qz$-zz3S2C=?_7 z>D&U0GBv@X3|(@h|FiYRdR!yk$U+g_Vcm~vcLq=3kgfp&-8*WVz}C-#N-0fSBvr?f zPJWBTYYu4UyO~mBzaR+)Z^f3bdslbPtcRHVx^pIz7wf$;de;eLr<>FSLw zlA>HO-Mrnp6bU)nX3K7;XZkxS`KYKunHlS`*JDb#y4M$_1UbY>Kl<-=b)S9D4!5zM za$LTEO6aFZ&`O#G zM!G#tuK2qw?(nc%6P~sVrAMhMh~Y8p*3mx}6KXzCFj@)b&~Uv;Mgvm%N|PO>kat*1-K(lNgiv za|v*uBMvvAf*J{uhI?K)Z(N|WX?eOc>?U8&AAeWuub_2m@jT@A!7u=%z#AbUA)=V! z_1&}$hKOe36IwkCh-s_*mr*cKcvhQ6Mn_vZIcYzk_{^j3KC>x5cZK0(p0>LC*RHOq zw66UdP*Ma^QMtqD%Yy^|C_62SnB~i|!HNouqHP$c0Pn5uSSO6Hv;slo8~CbSQe56$ z|7mHc&-nQ>25OiS2{Qq?)K;A5&nszZ#k8Y({LgqWEPvboa5=4u;Pw@y{t0Jmbwl1d z0&pOEq4P%yKJ?tox|ek{D$CB+_GB$~^%RW0P$OJhBc7Iz$DA!ci$%L7EOTQ)Z7{{! zNoNIH6`FcNQsM|$5~ij)coO+dS_@i>E2Xezak^+v4Q+!@pTSv?q7n;FBE zhkoEa*Djdu%re5b@IsLrYys@)+INUjk0i@&3EB=PIQ=$Go8n3r!9qPy{`7oc{rh&* z8_AbG+dghF^bn#YO;}3EM*=NzVkW^q8mKx1kSKun4pj*}%1iek^d|8IajrAk{PA#I zNVpUmRr$|C)tTjBna<`BJVCCRDiaQ5(4Z-aW<9?ZoA?D#o|7n>64BtXAS3k}Q6NMB zTONyx9)YC%^xohTLSo5MXF$9jMmiv7rbK<^M6nU^hnJ~yct#jVVHU>R@%;c^F zcTCB*>!)f0Sjz>JJaK=leXk#=xuH;V{0TCB&LwvD8IgRMf~6j7M62txdsQDtvyPHRU@7%^+946#! zYTNYEw=~o~_3``1>7!Ipp=i>l7=3-$=}3NL$;au-epk%dX5~)tcJ4`DpNm{R?Fat3 z*KOacIBNeaSCYOZ0CxaAQEW#L>MOg0Im?4FI^qq0NhIi-K=eLPW|uH8E%5RJ_}`$& zO$xpK;YsU4*TnKHo*+?D5oUgReV!yRuDHWU7}y>tZXB=>Tev+oHb&lq)9zBx>%3$I zrOv#w&O8`se@VTv4bdbVohPt5bZN=}Tx1C{7ZRI?|DU#*b^MIajEiK{0)X;77YZtL zF`(Qv_w{81699se8R~D~iL33%b!V4!p{U*ME7WaGk@I7fc3-UX+ZxT`Pgv|3RtQ!f zJ$ zUUmY}IY}GEj}TAp>m$=e)-V#x-Rb53>~uK+F`}=SWLzLoV*LKNYv49S+kXb1Mw`eV z%*8mb{ZP@s0i86axcFMUKw8(rN#UQ(-zUtRX&xS1ZR9+pfAHWzyE6#in}9sK8m{F_ zPLfEyQSTBxr9dw_X&Zp&6yBe`2r`I|NYYu9=wx4LB#Y;!I(V;}n)E^%jUW>x9DjFv zh)|QA*9dp&N7T)+I>*D`j#j?D$aSv;s$8$X+c2Emo=4Q?>uv_~k3mrOJmNJlxr5Z5`s&Q@EWX46Cg-qO!fP1*e8h)g#76{ zA%svuFSav9I+V%GR|h3aGBf$_FPKdwK2Ft1afPquUmGx55TMYjdcu;1t5C|!D=4OQ ziUen}rERQ+!C}m6hP|)!#d^&;KE$TWdCenO>Lzu3D63@TqA>;b`+ z#DWqFMQZ~78@lj3mz4F?8%s%viS@~jHHN(?Fug#qr#RJfj!^U zra+s|PcZBha|UC zcsNx&L}!r>2%?Y_&tllG#P2_VMoQXO57Ue3#Uo+nJtgJ0TY3rmYNxNzKe(-p*kV9@ zLo2H!i1rYUZN$${C>{vaZ1x-9Z7p+23g$p;I^2K`4vwA;Cn1pJgff2lZgVX2X4RRW zNi&WyAFZ><&lsRq(LhhlkI2>S5xZCI?eYG!JH<-XdNiD>b_;x1c|CJ+Fn7{PKznb+ z!FwdfNM5hWoHtzCH)2#Us(h4lc)?D(I=Lr>_zSO*lz`VqOd;f=97P#?1=XAGCtAtq zMiP)M(IL}=U$J1SW~+LoFTc?R7fJHPtUv6rXD6@os99&%bJFoz1ln35OHDN^p`vE< zD!gKNe0*>ErWh){f);HO$2&=q%u+JNr(`<%PMuHslQGz(9>-e+3e&uaj1pJCOb3{p zb!SHDg`nkk+O%xt5+50!li%%*d1IG0xB^QE=`gHia_)beF8u(ND$c|0Rp#-bfa8a~Qj6!O0ZYk&E z(<6N~Y(f`c(1IrD(w3IsTM)}j1!gCE=D1Ywvz#qTa;6H@zG-9o^ZNbJ_$U%b^(M92 zc)+2b#_W?8J^pyx5Tm?Tr6KBC1G*+%pjMc~!BcsO9$X!WF#RQ%_<~JEx3TV{6g|<) z6oJbtJRh!{VZnaxBxMxZ8*NZc3Q_^6|6R65pMAmP==)tPJZS)e%Jm;FRb@{`X=rHy z0UW=)21~50r-&@zU5IzTzWPvt>?8J9$|-L;!?mO#(5rzu%jG=ks$>H7&8(jU=7L5| z{6jD=vSLO_Xee-WW9COh9tiO)X+sIrm{{I%@ny!esngHTu_1I5nkhXPs;nGZJCigz zPPviQGH{di`lhN9t{9&BR(d+{n_95}#bfi>i(Y2dp}m7{Sh+@#b|#8EACHxpc(d~!>cCtu%BWsiqA~Y<^%|&ZJp-dt_!%3)YI#irLwM=O* z=pAe&M&t?gOveKJ;f#WM-wZjy--kxPy3~rWhmE{;}W70FC@QMCMRo zOtfYAEXto?iXe)hWFsgD{0SV8UaLxtca@8^t9gAFbUoEys!+vwbta zFxYb?r!>p}JJLP1tTUwDzJ;Ue9qo0h#FVE~|0t3MX9!ATEtWU;qEL0Oz+>-66U{E{ z4uTF%!X>re^g{hB%yN|~nhVg#1RvpKAw)|;z3L+#WbkyagR+ipXM`T^ zZF}Fp$=3*x=^~k;32zcT$yR6fG=P0ecFm0XT9b%H@~wo5Q<^!SEFc0*Xd$+FC%M}P z)pJ>n5eY|bCFGm}^_#`zz9n}%p5?W=p z+9G9tbC^_`eU5nAPB<@Xw*wautK^VHTdDrF!@Agj{**^HQao9M_(KDaw>Q!7*aVqH zl2q@f&fdDZXY+sb?7m)*6_Sl`OmfzH-SLp#?7Ey~%d*q^04MFOz@Mlt&iS}AFXUi; z5+ZK@ZGU_fWWsX`pcOIrcOk|86>~^E%%O(o;}%9Oi)Zs1^`S39+d3;&3(3M@5xEF6MC@F4GBqJR z)>X+Jz6>^hEkdJ7c${OIq} zT`aq_yQoP~;ZT-``iL!IcGjl%a$(=Na5ZMW%Wk2+fX0Nn(Hy>7NTF6#bh6aV!Hvh& ziiPQ2c8|Ssmfh#SKdiCFPz@{h`jh}`6qM*1CO0DApi9_|3^C={JPuD5l%6Zh)5Lu> zxaeUJ*f7137h^X~N)&+JJ9i~vUN%%QWLHUvhlf<2=Y6U1M+x*q%BP@$-o7d=dx#rx zpitt5Dr}KP+~j=3!i%TmuwcezU=uHlxykR(X(cZ+e-_%wK&~81-#vUOzQHGNJ8&^! z0lcaOm6gu{q+t~!8$vbQl-GW-5>Sqatu_)v7VJa!a1;vPuyWv^AUrLShQ-B%WY>SH z=rjpAB(!gW?Z2Nramu}N4Uz##E`9t2nEmK_e9i@iDa8KyE=z(d-%Uc}?+sj9ZPW5E z!9cI^BR!PkKF-~_(rwfe-63a@Tn7tr7*)7JYJU~LtEKtKwB7GH^U+mMNZ1Ce!&r$6 zyM)vGWv6Xe&Io4Pg%^qB&$I$|dr|N>nqc7-F`*kNs)KrkJUzq15x_C%eS^l+vV_z> zmRnE6V<5vc;@ry4Px$@AU5S`S-OUlOw}!_+rfbA|p&%Q^c7Qi-1CP~UYa6U!7C`B} zI`?_dUYtZ5Ma7Jl*)jcI9L(G~|EQA&*tR4n@A6v3xPN7~LSY56Z(Jd!H7F;|AEE}* z6?b1Ad9sZ+UXTS`v+u!rTA|Ng_0|}A&R`y;$H{aucs03pCmD`f8&G?Rq0cz9L|tx1 zDV-kXpJrRzz|G}f;@A;W?NZu7fg2V~MP`jsZ*H?PquOR#mVY_0c|OW@FwkK~!Y^uG zWDiSeeS%Hd_6CCT-e+9T|41uD>%XYbZ2fzLnT4gB!X;j2Z?&;qQ$%$^TMtt!{n6G# zzg!kQoE}ft9qDgcttf0CkI}u$sIPnAW5HI$;-(h&L2?N!d=%Yd% zpRMI)NZ`zK9KxK?c6rd-q;Kgl&pvlWYY+&x?g(c4bkC_89D;r5m+&UXo>@(0$pw$n zLiZUSxytKods=A&8GoYo9CHrbiH@zdbeGkd5Fv;|VyFCvG12b(aG!g*Egtd3-~Bw} z0w4#CG>Im5XXR$TGjA#G|7Q5TGyt41jFGbp7za+7ZIi3szJ1LiS=)hG`mVIwQaks} zZ}Lul&)zdA6CUH8ex#hO>-)2^xS0PdZC-VIG-$wNjD`$b>r~54h_h0=f`}BNS>n>aYXVniN;sPV}`Vz!Y z1|@~q-9$M|@aL`jFcw=Pq!cPFzy#+=cED4?4O4_+3zw1gQ7C~|jg@e0 z+Nks9D=MZ$$kW`hIj!a^@2N%$WepR0<8G%O(DlZNy%JR%}UgQJ}`Vwz?f(f z+8nm5I{4n2{!}?7+=@%~XR%kD&XP=~q|=qTLM{pHTQ9)Ak$|QbUt*<+vIO$S>(}$~ z>#$lxG@ynpTjVosZxyzbU96%E3JQW`Y25Wukl-y2m7N0Wt!Q@D1O9|`sZv_Ydi=8& z7oWqw;#ub1KYzq9#tt}2E!oXCCD_N-xQ*yvpgqj<=>)bfq@A5$>e~#1of9OErnC-z zYKba&0S$FICkn{6#GxXKqa-8O!Jbz<$zixXC4XS0@ehJO{$8a6e(n;a4=49_*4zEs zY|BU;QA0xQp0!5ntwME7<6UT2r)fi-VPB#t$n#e}^TbTh9Zb-PvLEF^87vLqQ352~ zR+^dNZ2zNAlXcIJZjX-dn|wv0s)ckI#8B9$!{U(qh8YH*5J(na{U0`x!%Ix4S{kau zFFx4q`17T$`-m@-y4LUC-~6gB27opoib;GDWRY;;)iaCSmJv8f#=lIWEGv2JY%ZRx=aM`WGi)g27UAX}Z#3(~l4GUVl!GmgUdw=}U zj|5~%A|z1fU)J&Rvtm9*%Kyc+@dC?)0hZ!wA>Eh}NJg?EE_1I?io0R6ASJ9nw($bIV!SL?+|Dl6L${or9Wa(w1d5k|XB!gHU(_YM_ch zH_U~QC3BAtYP?7YH=&o98ZsO+bY1zadgNR11m#yrKD9GoW+Smf!B55n z~)ifc9cNmn8-uYckz%N*Atp1 zd+W$yfYZ?(qqw~TiDIwYF`93nlw@(C=+_n@qhmIz2;XbfRCckldG+g@HwqSr?Gvx} zHc=%nHKO@lHapb3q?oQf8`fd-tbE9&SkP`j58c}@IXV!*|z)=hW zMS;hci}Dmn<(gKVQaLY}uOCk}yw7n!R`=K??V5~RO)BY2+td z<#k2whl0L^CdTwFCwbeFb{3LxNgH<+KP2_0LvM7Nh(?y5!)+{H`ZQ!-RDx8!ef=Nj z0!GMVg^4kkerC6XG{A_2?WhdDwDi;>w%Ed3Ofh%`TbsFeug2^1g2iX1RULl@cxR6L z(XZE%l65xvLN_cL%3xaBiBC(gb^b1%fF82G#G6a#HWLu?GRQMTphB^+5X)b_i@2>> z*3dW0HqyLg)c4?(CZ1n<*Bkjr@yrcO3NZyFOW8;emqGQ&C2?+oa8g8SvgbViKQuyL z+`=|=WY0|~Z&qKx^3E@cShCCt? z(iK#UtYzsxMJ&WnHci&qy(UXN#-yu*fLN9>sZ6PYu{_;C5aX4w_e|UIqq&>zfGv6C zCL1z;cr`E(7T=^5{&^}E+>2rkXhRL9>QuCTgIs$I|H6~f2EEZ|PaflvaG?8Q&tfNi zcxlS`o60%8gRw4isIolLQ`BdW_sGXt`tJF+k52qY3y^jH_I#0^Q1aJfuxTk0s^_{v z{U7a&Es~cd5ACu@xgKDfKEZtvzn&Z%yOh^xr-Mi|k3QuF2G2{q;k=aJ4{JNmmwOSV z-gGtg`J1}1_bZuBS(f$Q+<1{+;G*M6QuL zuyA{TPi^a&&-Ze|%fBy0r5Zr3`lGl)MCh;Af*}@fcI_(ADJYvVqxkhzZ#TmNed69* z`9l55hgw;ndm?=%&7v_W`?3fSJED{v*z`8%v^L78wr=ncPqnJUm~RU*+Q*8p72oA?s_9vlVqwZifiMF?cW{nciCN$M$6L{0E zC{4W7j@yd2ES+TZ!W~)np1!%R1@C-Ff=Uh2W=SEeQvkMB_sCYZ~mhbvTs-Q};^j~%fMUqd?V3^&nQ3s`t`5Or8 zj~1S$;D|Wo8d5O<5x}VIe%@2#c}jO^#m&3!usBKi?;AYW%@H4xZQ>)o@^HluC|a<&gCt*TtA`qnEiL~ z{Z*-sB9RtkMiZBri@7*sVCqPa1@A^^54>*v1^bc~sYY4Yul<_#Dvt%%yO7o=zNd^8 zN-mhWnF}#KOZ9j{+BRX~8()=;QjJZk@1^%>+NyyF-(TFNqF8hnz*{Md{4P#*>SBkgyB~%ADVpCv z93fps2d8rhJ=@8LzfF8sZaea%31cd^#@Rn#ShUueF32`rDP3cZ6 zKt?H2N@7oV8LVdDIwFVbEx6*Eh|1XF1zV@nPE1^PrrU|`Z$+3jtS*g7)V&HiRg3;8 zEtuD`APASmfz|wTeek$m597r5h86xJ>AJmSO0+`0m^h4fR(6MpqI{3WQR-u7j$L?y zWxv=vp7^Yij7;NbBoRXKipD*;WreO1wBa+0;ycXLmnTctvrV{#efo%wtVn9rIHv*S zUd*Z<;uBe;ZLA1`T7#|F%FEqfWZy*Vij0)0RbCg>RS8UY9l6y@*7%6=8iQK?{Lm<| zi=6bg1JJPf5|*$lOPgIJl>!F89~EZ3QeQZ>?-`dA{fYC~M<*0h*8c zKr1~rzk!2^6m`@Y(UV>4^eV+XoWUpRm4k%IuY{hd<9_|lmy?Pw6P(nTW z{9RAD0Zn|mVzp)&jA7?0f?Caa!xN>_6|J3$jbt>)Bikn|H!*PGt{^pE*dAl=gO zM@K@~kXZJ2bMMt0Nv}E_r&B#7oFvCWR5xF@Y&r9_`5@EzUaF2EY>c!BabwyrxYH#r*Z!DMb$+9`nO9-WSRO-+;{XJ z^s0V%iE*#_`Hcc@&uOOw{`tUbVoyK(dfi5Nr&uDBm2v&v$NW<_Hjk4HW;{4+{{5s7 zZ#ZnAyyWtP)S5E%O=jheqvfXV)fZ5S@CQW@uU}0|4mr=RH{+0mf)lq-G%P;WTaZp{ z_Ypm!YVD-6?}v;MNZhjd+ZJ&``9+420Tp-OX^632OkIcIt9^o;Oahh=2-mr&(s>LK zYzMs=1#^6Tvn?k0;uvkt)2s)$e>VRf*>XorJS(!Lo%pPy=KAPExh1oNBdQm9f^_ym z59dBHv&@T)zJidE#Dk!Ho*mUD0`p2>YGsc*LMaGn%tT0hgOL8O)HvIY4ut*N`v-cJ z8*gFBmxifp0b`62Dj-K?QZ5qe85L5oU`*2|L}l1UoLg zZky#t@G%&b38ZM=yh@Oejy4y;@{=t5Fu|N>?TF!KqivjXD<2i>jOKw~C!PMGyYDLb z@Y7&4J_%I@o)VC9KY<|RC7K0|`WskT1QN#Of`tzU$1l7F=_3n%&rsRdzL7RKaWzB# znT}nPiaEG$C*1(VCOYsu86S3kXY9_Ib^g?=zo-w{=mQ+NAnhEyG7M2%QX zb&o@1QW0n*?IVS?vG&wqH;2l20kv@6(a8CUjCj&HA*ot=y$Wke9;y8;C}2G_tzp@? z^`3`jl;Fd~P4Clx#lcio41sA)O@(rXX6 z={rh15uS*hL$$7lOWG0aItPBzu9a8dO14_86>$?BIvgHwgK@Ocr^kog8Gu4;^{16E zvi-8z|n{C8gSQUSUp zIPl=~XE1cd-g!8Bj2U{?g_oSwdqM}ZW{2bS_ZCgT^(gXBBA$4^i=Vi&*rCL{>w>^2QinJn+;w+kcaY+wUj2KNnA8CnKW;Ur8 z3>3?LS;}AaN-0>NjmtZbMT2yiEicxccrX7ZxJ&Q59@C?FEn1Q39)%4`J1xd1dY;_J znO)n+c6o-HIgD9I2T~l0IRJq~-()bGx#093^NA;fUbrK$U4&ubC9DmK^y}I?P=%CA zRlPbI`EV?gO2~*Ec2&hs^iwbuz;uR;$JpsfV1#}s6X8PLsyA|Wj<#XNwXs3u^CuO- zmQQ!GU9u0eM;)5Y_U0Zt6H=Y`$JJ9?|JI9BL35cNJ!Okb*Z!>CT8tFp;fP6gVOjbD zx^Tg(V&m4KXDNI|D#OBeEDHYGt#O+5iw!tar#Bn#^Da{s6#DYJz`_PYg=mWn2+ykxqpoSf)AMw~+*eF)Y8 z&3eWoKd{(DfH=7AXMQouMXReec%;&t-%qAnU~MG z!WPnMoap7Zw*n|?hs%V&9LC~-^%^t zG(&sb{@lJ&;^oJ0S4VCJbZ=md*73ElbfsP3DM??FUJtA{Ne4957}8>uNfU~+oFp3I zSGKKo{Iwr(yi~$ftBPN9*}-}ZtP^GB<2?eK;Kx;e0R`=(jlCo@l* zKF!d^kjHWX^5Wy)BWe$lSJDlBNSQ8wu~`!KF~4w2$R#!c`SSuoooZ)kJ3`)vtvF2U ziQCJJ0XKfdP2Esk{@}KV$KQy>T!yo%I^S-x?Hrf)q0?d;2&zdfazFq(XJ>uWg9eIY zB&qf?ELcc;-jKFmIDSjW zY|$X`MkdR)$%T*$^AB${4>?(j_V$E4eIy$6-nj0TfvlipVueLHyHL!t=dXqsyM{%^ zk0AyG-V1+pze-#*un7|Q!T8OXX!Log==(9m_twnI?;W0XK3)u~sP7}rbQ2Mk(>?CI zLlg6~t6@9eF@vS-ZQ@w(K(>srJX)pp=WgebehRdcwulm0%mIDqtJ_OSni8>3g6z1y zaL?*jX8%}nrcsrkK-v->CLc*+7L;YPf!`c&#fqpHX$v<5F5TW&5wqOLBklBQhrxagLWrVz>8A3!8c8Mr1rNI~%jQ{MNQxZ{}5$(G`doy3sYAnjXp0A6HG@1vYS+v$TO%G2C4+*!WY%tX%k10he+L_YZC8brlVCSyY?w{vuy-~YwZam()Y%D(6c6k|l z2_?edVad15%Y^%^0^I;QOE4z-pWxurPJfmv(Ei{r#i%|;wfaI24D}aATCT;Upsx*c zyT*?D_ybXT1?`yoK%`agRpIwo87pv}W%1Hk0?4}EkU{NI`S3klUd$k{Y;8p&OcOZr zVupcWntoN0Dv%3+Dd4M5Iv`|O*-`~FHKCe2Y9)GBw_=Mp1J)jEx&N$|+21){^u$Wo zj}Q9aCe-t;*pSitEg)=mCYX5S`sZvtG2HZ~0X|Iax^!)(gZ=djft?pk0$>&Gt~pu; zHrnGgz_jd_J&2ZGt^=vS$g1Nk3ODKiOXC(TuYnMq4#WceMGhPN>98W_|Haf>Ktn;Qm4tRpX^7#rdWc#xZb%%9hyL zJadvLc-zvudf{Sf1s2hN`KI&h{f&N$5Ge-07AwmtSz$$v=tLY)OH$Wh}y z<8$ImVp0<5;V0qaBSNp{$z1oC#KYyS0wIbU2y3QBGbx6xw~G=ph94#$+dh9 z5XUGo_|i}y`yahR`9TR{bXGc`M=uoQv4jIMS9_umkk24DYm%^}L~_x8@mvw{{AZw6 z05F7zh-lg9md>?7n=tSkwjTyTbUuFtueI0L>ra;)UQZ_{<3JqSVb2PYF9J1@|R&vH#okrsz)Ij$IRu6oNfrZbMa|xKJB^0wZ9b;j-Z(mzich6#X-k*&zi#gB z_!Qad0U{S9(lNsyxDFs>cB}WG?fWz9^OMh66#7mSLS@B-8(FUyt;Q3HG9%Qoh7-`@ zYE){nt1((lngMo6mcItn)k!>{uAD=cGo`d>z`Oy(Lrc`H{OdghxWs_xeIruue-}nESBPQ@}B;yYm zK*kpoY4)v=E(aA1@5;D;<9Ox%DPF>MKg1|3f%)4N;dgs~&j zQCux}kt&9LZW0IF)0S%p&hNRjZbXqYA@kO}w25PSbR(JqT{r`3K2&&I?Y-OHZbQm{ zbH_&lW{5jY6Ux(1brmo)>Yfa9$I@^uKN*}`xLsefiXW~uVR~Q*UCGMmG7Z{F)aL4X zT^Z^Vh3dBE!}LgLVEbGlDHt0o$X;=Pz-7G-V+7^}=$m^;y0+}IK7YN%w44vxFz}G* zvAeOZJMdPzj$CuN>n~QmwVfLch-MtB<8R-={+}~hHVm35%METYb39OK05`n zhlOY?@WSmvb`>`d`rD1zzh%;G$(le4!c?8Pa|6%nkAN3Vix|a|zXI_}UHbO*RpSQ+ z3kh?a-Z#eiJUtzxxjK!j6ZVkW^}1YQ7#_Ef!F1ANQ=1@C$0|$vu?`$%$DWRfSkUCe zqML*O*+X{FLiU}XAInaA>MG>*`=~Uxt`|91uJXe$+JAG3>H0iKTdrCx1T4hD&Am^w zYG0nZYd#LW4T%iDp9VQs!4f$zA<&NKn2eQAMkvEep0b0eu&cUnx&LgJ?jc>f^VFnw zv{To3=UVu7yxs1^yWvjL`)*Ch%{%~k-9y8OeQnw9F%-u8$sKidPZ;TJAPDlBQVtd&EYiPf_-83frF z_joCf+)X$JxR1(A=H~~>W74s1qQz!$QSmc`Jij*P#qkrRV%>xlDy7BgKJKBnWNp-( zW4{hFVp2pj4YS&%rov+5m;M+YH(vH5`d^I)4%R!pJR=Fq3v0@c%?6n=dNMi26iNp# z8nH_lYN7%ti{6_zvRBtj#nSp5C-iN2Za8fw)`3iwf1mJMUd#w}?(Y*Eu%o3nS7%a3`a9 z+3Ui*8SrqT3M?^iPbCWL;0J&F{Y!Wk#>yN+eJO!Y`XVvn$JpPU2ylB@%Fra_ifCBSYuTYgOvxwvuDiN$JpUImVRSZ z$zT)MRz~F4@u#J)GCT#pUc&f#gjJCg-!`w;S%NjT_M1MVs##n)!Rn^T%zvcPtLc#8 zJ1ChLrFbn;W-=8^s=e=6`nDXc{_G7-#$Cl^+4MizkoU{K70a2XFSN+?EKXi&T}I++ zoT`_Fci2EXOydS+(wXLK+W+NjXWsd;{`yn#s?#$}mCC31b{1uO+(zba`=23MMaxLL znsY=dEY=p8uJ%86I*G8x4t;odH{c}sIedJ6Qx{+0@PD}g|L-qRjVtI1hFuiCM5c0ff*iQC%|?0`=3unH8vO&_Mbt` z5>QSc1UEp1C|cH2F=+hv-uUIPXm(eX7+S=_W8cvCnBuc)9UFrUE=I^(?IEOGG`Zz|zVQ-3=%0WRn&Kcf!!S%Ux%Au`+_<~JRBgny5? z-sqkO9L2QeUmQHxoXILjG_)6*jDKm(!NhK0F*7@1qn;)SP_dCQ3AwcRDUH@so=Ib2{Pzt8hE&n@2TX%En1t) z{l{iTzZ3bo?i0|_vc;<(MYU=R^{9|LmeSw-8q0U7!R&7~@E3B!bSF;uc8)fyJ;sS= z&i6Hb$A4wg+@L-iQNplCTo?}e2Cx;eG5(wD{!I|e>m5;ohg%D4qCtR*0PZ%?PCZyp z{omEWOYN)#xIq(?EChHcg3DoE&(8E){YHQ%9mztGU-9@y z{q#HKsZ*F-_UMU@5opT%An9Otcy%{64*&0^C}1*$^xwKC_y><5IS+=q3%fC8Sr8Nq zFM3#E>M18#^>jCMwr8SI|E>RHXV8T^-p-8ojgxT@9j)95A5VfILnIOvEEytPvDA8J z9AYrTe_xjj7J^HSew8sZ9~_40z(E!18C;@p##>iXT^RS71i8+F(Q9~UsVYE+`3tNq#YWU^@Lr2p%k`i&;5d)mtO*(<33BV4;9YARjZl zA6e}2{o``{5TH@!x5}XGo9A$E$SQM)7#D9-5YN(njzin-xQ0K&!eA_PK%wmaqL*%d zK-HEL>_@+<1jW@@3ObdBS)08LuwEi@>$~S@LfQ6J^Amj>%*_k27z%M8$9+}bRe0hg zf-%cvLZBUxu;5DFO9Cl^7C=H$kg{H5j0VX?$&v#*|9d+1rGG)n+zSRoN)*5U`;C)) zxT#Rd%bB#e?7xoR=`RA2mK_*S(4;m*nyQplwHTFiN$j_+Qq6H+CpmI8$q@$yhfmOB z)}Ikg|5ZYhQWI%1^NT5NU>-e^x7bBTlfo8hLZ@s<#!NO9>iW`Lm_FPdC`M+#J4pYR z{vC;+jL;#0iOj{7O5W7k<%8xw$bY+m``|~0Nfgw`Td_AH5jXHE{w(2`On`;hWZ*g> zIbSOWx{G?H+p62&E+i3Os5&QvpZMpG3lm4_xw2(Klo2`qKuc`3rW9SCi^TYDADq%%B-n|gdaG)ss|UMf0Zpha8_mN1St;$DQokLThVgpP;-!`$BRG%M4+B# zUq!D-TcY;V{5wn&7INN-D`irnu*-oQqt&k2rcuj_cfUaQC>&JKNghq2Z}7^988361 za2}8afp*W*vUEO8(kkIXZ)5o^{#qy4{mi!*uNgF8{!SkAf1|=_N$(_;aWU*W&XJb; zGVNzBmFwtu@&X>#??ms*(LYfqb2aqMfm^?kZBa_BhOR%E76hP?pLE_|>=ihPGoSU# zGe#e&x_kr(8X}yntu3P!U`zJ}eQl)kevcZlCfR@a5}-&;&%qEQ1s{*PR0w!zK(=V1 zDy}ncQF$a>50WW|-w>f_p4M?cRL`DQ7{m_9w@ASI!IOpoZe>|RfGDbGc>cb8 zU7%2aYztwvWvhM6JOb}8g0rPMwF5(utRL}RPM`35Q2f#9i75v+f29wN9ZLhP!oZ6R zD{N(T)$1}&y*Nmfwg$N#W@Tsh?oYpZgY{F576T>L$E+k+cDa-%Ryl z&~|DF7S_sC^ecmzdqVX$=%ywNV=va3zYz7e-Y^=sH@MNiJA_vp(*|I3EeK|3XTJ}W zw&}Fo+(K!8$fCGlEuDoh5f~Rds;qsPQbB~|;K*UJT;)KFtH(!@um zgaI-f!ew}#*T`m{KWlO@rt>NEbgaAT)-E?_U1B)=86FOn-O|~smd^9nq_3rGFR&o^ z^y!nl6<{z9srmi;x3tdl+M;>%`^qTjlTlDWi%Q-n=Yyw559pI)cR4t^oGG}WO&%s0HeDlE4LHMu|d2)!!FiDoZ?D=2131U;N?K2 z(;|MtgT%g5qezW4!hR6{3U1!JIBDW3Wom3iYNC`ldM>MOCD7A8R@$V<{1r0%bk%Wi zWqi6Ad8Os!T;rqKuTHi(c>y<+pe?A!sdRAUO9A9z{nqF(!LqK5CqfLyY3BkCx$&8b zLp}_m7A2#*qn>S%JkBLe&~E*jFKYJ*GFsqCM@eP2ws+CXIA+X@cXDwG$>5?9~c{NY2*~}H^N9qme{CHx&G@O)tAA3qXQ~NTi z4hA72T;#??bDbBNaH|39*a{fnDnTTMEEOF1hqXh_l{JN+q;O} z<#Wy*iKRvF`Y?}s&)hBmqZ(IQ~`#KoCkj0pUJuZa7Q=8#3b|W1PeM>=V)oo+wcSwV@)4zNc>C?`BH?ZgJPS46!>{Gy$bbwif;A~4ge)&FR zb68WHP8T3q{j|!15fEKYOIIL{Q zP;->cFPD_iqcW7LhXclrRX}?=y6Z%(l8@F2g|4oz8`tW%xNt5kEF6@*F)Y>9D#ZbW zrQPAUOhQW7BBG+NaBvXq?CioH06&0>#TdH{hqh?W*b1N*al85V4v_H`>FVj}sn;aR z=Id%rMWEJbMHXw6ukDVTZDjorq82B4m%p|)t`S#kcm@q;Dd^6uZTZ9O+J{u@&Sbr-_`{1uP;d#1+OUG8P-rd>n z?)}7CJeKKw6j`q|hJjq{t9I7E;y<~lZN|LbhzO)gAr%E@%5a!`t}J#vOu9 z4*w1q&W|S%1?3*mN(IsbH&j{TA6amG%IBhauk_ajV2Do-|D-GaV&`_g#A!{b?8)yb zNQ0g{Tz{34`{~>9**D+s2=1$&dU0^ZZxCe`CX?Ct02fof1K zc^OzA=#-l$Gxk)hPi(n-9m7ACXRIRih2(LPfcO^k;SJb?gz<91%FUXdq0e!xQ)xE*sKnxQ12af+d~aH5bW*u zpP+*gDPQ#;zTuYtu--!_T|mfbJqoUNqM4FR>#AMc9_7pyh-bnJv3>CAc#y2TcHa}y zX}pE>$}b8pD3JzbvPKDMaqD>tuT*xd-_oaZRi_mm|VN3z&e zZuUxxU{Q&Og)oxphb|&98eZNraJO!AEwtXjQoLsnPBPGco-027K*b{V(0fM=usN*v ztaa}wz^@>3Q1G#B8i&1L>@Qc2g9>W|JEwbzEo(3yT5sQ!>%E7A%vG0!6s?oL!a4{i zH7$k4yq>n+s}G0gZm=ucUAR1dY19?iUH?Rl!;n1LncYAEg9v9~fpz|9RNMCw|MsT$ zI#;Et8HwbZNZn%_cF|Gdk>q)HE;DXAs}dCF85vZHe;D+k-jo#m{rsckV`Dx$D0cpZiP2X@w&UM6I6*819TV z<`=yLr51)=bx;t>5Ytx znC(}DCJL3H^!6bA$z}3l)SP|PvIfVr2MCgwq$G>m1Mm;^9v8HT=mdek)QXcWHmC9` zBxMT5lf0>L!YfUO2&(9R0>*E0Dk?-!`X-Sl9rq87I-oM@uc?X}qrf+0@Oe?xKAT4})&l z;-3}>cT@2b0VJrHS^K?sTY?;zQUPn1Ex0>>ugqkLal`(QlnyPe@peuUj#PMzTXenq z9D6N*3UXPJ(D2aM-E=UxQ=13=Qf#j_uFT6}ga9Tnpx5B9J!damUPC;bZ2YDe_Oop2 zig4^aoOw|6y)IvEF)hJ>3o&}HYt3ip0(M68VN4%d@x!;G#2$F!?5{fLQnZ>db-Gdo zb0CoY1UcaVo;ZiYDHX6c(pzM^Mk`Sbm`Cvh>QRA7V4mFbyC$UKuKgX+@)@Crw*V^f zJg3uMBBNF-?z~Gz)vd1Pcyght0P-x#n|h*NTR*{JEwfu!^H9<$`XuuMOiolj+a*l7 z$FI#-%s6Qj1xc;ie0JFV3Fy@pde!E7sQMTOq0t_X2K{({NX^lR&snG*t6_C8<|m>K zJ%=gCn=xDt+X7jjg5m`(k@ok4aw&%d9Otiz_*^DG<0THWaSj}K4PquhgA1Avk5eY{`=EL_Tls~L zVLl6fs+^<0fR{ora|B|@X zKd%_G9jfcgNSuP>Ff@C`=?!imHS#^nBTjKJgCC7BTfS3h%%JL1;zKWvPMCWjn3m4o zd5UcvGr!(}g6?%}58auyoZ3jmA`xcVcubLl6l~BY{5MR!%NdP?ycR4Z@$})XY8jsL zuPp?FlEZ3;?Kga0@u83W$z*}uzXzJB&2^|_3GQ3n-mj^^XX-XbPxS;IFEoq~0s!Eb zn7Fv%zl}aq(;%(VT5xTl_&9s5-LkEz&IXs-b3HAMO1=;^cCrmr?<_l0T~#%9a+QT3 z5)pL$>WHOLS=rh$%{Pg5SE|rO41fVlp3aT(NPa@p0yMv^2WPyAe9*43Eo@O zM^EvZLJ+`g+Aetq^|e`doj1(Obk{?C-;b=lihq3&$Wa<5sc?p}kM{H%m9zYIi5!B* zTJd^{AuR&f9i6u(DiyZ7l=JfMQi4dSE}>knaX!f@3A(WpJb2Uw6E1ty81tL7XK#A4 zn9dZq)D&xPGh08o61do2^ zgUeCd&cF4R?G+O*j-7QQJ4s5X03I_ULtw&+z$~-#QI=T9@p%}1dK(7#V5wI`ZF)a^ zSicj-(mE?p70=_T+z~}_W0*Dv6#BKHu>M{EovEE1m|Fo229FOk$+H& zFkHtG$*Ryb-y00#t-m{Y^T=hx3^6#1V#Ap(P|oZ4bs@?8uUO&Rq+rICRS5Kb*(W^Q z2H`o(s;Q31k!~PuO3K=7u0F5>lM6Wg^ApLe-W*g>N0GPAv}9neA0)F&6WtRObF@CG z7AyDca?+>~$Uc~G#53R_k=nT~G~U5-9rM*`9v!RQonGLkb(r!BMy>_)mREjR7N<|< zMFHN#U9^}s+G;j691i1h01LEq`E{TOSJSXFB$2g@srHE%{jP3U?EIoPpNv-UsSzgQ z$|hRfuqGz1wCj?;r-<{XN;fjviGO*WXRBv{_jpIC7CX%RQ(EvQXt)>i6Ij=F*sTv= z@o^qGu{!(&-0tZ~5{yX*hSJSWk*$rtZg0XwWalP}J*CvVO1XM$lqp2_e z`gxm5bkA?9I1|!xa^lw3)-irvKoOOY5PC)%G6K?WDJg2NU`U>F80aCWZ4FINz(c56 zTU+~{nyQn%9qZd0@F((kG=nfY{3<9|jW%0b)A-s0+g8;bdEu?&I<9uHZou3Q&J^B( zNH7Hp9@@2gW557o%hk9S<96C{&RbF@uZcoNS_GulsynxBIr6Vd?(oVDhgsc-0Uc`s zE)TcPir7KyQOM&bdB9H#HCI9cL(c&M1}L@7i5H_36e__9 zm3`bkHv(YGMOrufnz&-Ky!zlZ)x=Py=M&M&PjS-CbtbpWpxH<`qED4P7^%Z;jpNn4 zz+&EY>~>1~V(dLm$MpPSwz|+)S~X-5k6<*rwQ*qbzEHpd|7{?Nl!IFK#YiyVnz@SxUsJZ8(n>e0Ej$Y8XtPxbc>w zk3$r073z@na$GXH^WQ8RuGgvzUrZ;HD%H6l)Pv|%({5tl^_=Gp>+Pj=y-{oQ}`Tt6M!#Zo*F}N960*SHM~5oR@(owZjAsfNV#ObY92s11@v@ zlO%XP;D}Re_mJu^&X-Jy2wSStg(F2TYjS+FKHae(G98}Z80BHxw&^TGA0KOTB~*E< z^?kj-&Oj)Grke+eV6xaBT`B15v?Zi+=b_trqD-mvd!}SGs>V@{(gSU%f-I9V9T^Rr zN`86gZ-n*H(kG|l3zTyY6f?#J;dR8xlLPVWNr419RnCBDfW#U1E}?1y1s)u6J8sDj z3ggjobH6ENrLsV`fv>~jZcVB}H3xLaAy2T3#&K_B-cOdJ6cWwqg>jmgg=skJ@33<< zS)T7X1rC1J1E zpb9QYmTU#47JG5j97jJnHVUW|L;*o2 zh}T(<%NuXdmRpIUlO#|i>ys%Ic)HeQ6milF)xen@;))T;dI>AMRGqDm&PP+}5++7o z_0_SOyO=HY`oXNaM0YXE8KZYWq%LFogHPE>{mwiO(PAe-mTkA=2^LD$)b7iSc)u!F zQlp`m@lb^kdY5^iyFfU@N#AIMX6pioQAEzb!VIl0yJuk0c&migeugU zICw9MtnhKtt)Q;kh;=OQlc<GkrP<`^>4Qj{1l}NIkZywJW=0|EP1@YIzBnYyXUSH z6xf|03hPVCS2fZm;`d%;KNreU4d`XMWk7&KQ+d^PO5q6%5cEpt=}-49j%~A|4{Po@ z-&1L88zXC9T^taw!a{cOl}qOAu_avw{mSc_KE;SvQW6^HGj{(He?9tTlwRfZqsHmL zLSzsIVN4%3x7Qj0;djuvanJp0OmLyyzdgFS^R+%Gv$$EHi| z3LFA{0sj}*LT4k{tHvreB&4Z*l_q3=>X$Dt1A6bfc?VI%aDu=QDEuf>VK&a>c20?L zMf$0=&w9BL=4i$}{f&uywUzGj`DOE4b~)TnXz@d)Ste(5E@rtKNhmp|ljbri0F26( z8)%%VJocZw&|tj90W#yar8V{j(32;}f*+mP$}i5FRnP&8CJ^eIZ%>>v$Gr&HerT zV6}fhfQ=;rJiMm)tg#q(j+!;wpg~3bdsck3@$X8at?N(&=JwCncClVyFIO1fiWS?< z(!t+SWZTN!Uw>kf)vb9EenmnPuil*rQANS%n&ri0koB)fR&%f)zFPS`JF0>Wj%cTq z8Z>O#M~6CysR$lGQUY-x_Dj8;F;Iozn}CuX;0 z@u`{y}-dGDGZo@n1}&>00asERNabn&>xMi z=#pMWJS4cR)qdSZv#GNkx|BlEWel?UBIULWW4T$IaLYS}8Aj`uDlSN8Q-xX$Xvv(v z5Q}7^lzu+;0E|tx$}sWhg)9|S zXOB(6%Y^U2FLFFmT0PG<&?g8OBzzudYTq~xz3KVQfi%`At~*g?G1$E7IJ+}l#Q_|4 zOtxwA=1&Y&S;Ti3`oaa5kxJz*?+PMMFl-3O-^uyUO%ANfdC_WdS_jK6{9i6Wx%gKI zajrqKQ;p@M^;Eg}Ty;^m_e?rkjK3C# ziMyhzQL8P|#NUpuZQDW-LWVlC$3#!$>Y}>;qW)uf>{*EBXsctxL%Y8jGO(YuF5&k; z%vL~x7H_{yZM#B#697A!Bd(HQ5w>uh$YuQ&vNG@U7&QMrK+$%Enljfc8yuZ(0@_zQ zhhad`txeqTO3hXhSW!iaZRevKWTJDw^oG-as6>;Kcv_jLMc^ZmAIgY2(VEO0SDCS2 z;|qRlAWHk17+@T{G<0h+F`&hcX57xkM-*wFWlHBQG+33FVnA=6C)$a>tI{DTo`pe#hp1-06 z%qP*Ch5WbgW#{WrrTK%NU@4ztMo6J^-Wa+(oZVxor_&9xM2mzijWvN%8;FAX3K4j1 z$Pn<5rkJ!SK?L-K>+@gCK5$oibDn#^!QS(+d>+jBFh8EslUTm!hE|NDz+B2@B&9J? zqK9FXAm3TaJ90=%F1bsy<5*XBgC~EG6yEn7Pwb!gA66U*l0Tg$6Fhn9JAU!*CT185#zx_gcL@_JXSa7GxhakeEhHevn z)_OeUP^b2YFZ`9h3(Mpc#J91AcFkw}A1ix*(5>-oa)9{WpG{gmkAH}guETy3#ge`m z@2M2@(IKPz|86aTDYvuqZm?Q!ndDU{a(Mt1dNCOp3tULFepRvVz%+4ZN8u;)`CkHP zhy*}$v9`o89%$~JW9PCW1V?Iz;xA)%{($KN!p_`uj0`fozz#Zo ze=cesD(GU98ui-DHu?9ra~>4h8l1b@L3oIpJ4z*RiBoKT^lxYa?TlfQ5}Aw5qSu?3 zXxjZp-%PY%fLCK6@Y-;%Udqk0AxC!~afj=3lx}aiiKY$O-ZTk8DM@;|2;ZMRG2j&T zDEt%%$S6nB;w+E!gPtj8&WlgCbH?cVkQfo*B>bSQ{m|u~Z$W?K&8|G2`(f*w!ygs(S}Z7{ zs{{b;Dveg_>H)4cHvNy42WN;l3}rJyCHn<}*FwEMR4o~{9&6BFOI-Av*x`zl7o2Ri zN8wGh0jHJVNQ7&=62Z5``WHX1Stbsjj=mHms>^{K`Mmm;J%}>vz)gfk$cg6jVB(#h14tsWZ5JDH<}0pr`s}Fx z-FTr9^I(JKLN$$EO)iIuRi<(Y<{*U^4WAXBPQ9d}(F?FBDCSAODX6CY#ybA*Fxsv(F!!N~sLmiUia_W%*$d=;BzEJFZ$5gJ3!Q$)hY_`7O4ebZTzbJ;!N{$1SoSdk13AT}^#r zQ4p|E&i17fRGhfk_!o_8Uty%6Gw~Mq)F2_+6sQsMP#-gB)<{g2FrLxtEB>r#NO|C` za~BjQgEq$`bod>?=WJG`5tTdcm0&xfF%ipxxm*#K%sgXwhMkZxx^xCA3-H3 z#Q^U2fkzXxFA0Xi^$vuPW2I{>%!L(w>u8umBV{V_=2kXo{8hIW0>pgVaGUwh{%%$C zwCoj)h`8JfW@uo#kBS0@xz*xT{psK>=!=z<9|aEyleJ~> zjF`M55Agf83EQz+5%Yt}kAC1SNqnI_(!Rf6z_*y|Ttt z+=vs5t`wsdzGRBb3RStx^2Gn9M=(zY;Dv8O!Kh_vi2sIQ!RsGvvOxk5Ui_>3hZuR% z0l@LCI+LZ|pkSXF`Ml8G`myqk!T6{loo}Td!JX-n@jR!b&!R>vra@6U#*S9k*E#vDqWdx=NP_gD|e2 za0up8d?z~*UEP!UD99(U#4$*CaT*}?{R#*4Fq`L49ROhMiqJZoq-EoT(_k~7IP&=w ztCbZa2$S36;_t)bnG=*7{VWw=-s;t*^i?k6WJvHqejU&u6y)f);y9xo{R)heFvF?_ zxpLCCsJ-P~8xDw(=Y114@HM=^15M2oJp#rp20%P+8&z5i~;(3Yl0wg3*A;Pe857_ zK4jmyeKywO>3V)RKW!})o})Eoit@qdkq^+=SSPQFy?vPp+E#`}L{t~%fX)U7v|^w? z_>ies-{xQv+YD&sXG`lhft5--xjYWnhC%FWs2hQAwI7w%J&pR$)Ol~Tg7I0ScY8*2 z-y^0D83{L=5icOv7XI7hF7B}ZS}T|0`)H%RQY;v6_z?C*zNVn0jcKixvA1&Hb#${} zS@yx*XldlSP)T=irUI^t>zI{6FjH5?`oV(F)NUyVpU{Once2=o?I7s`!k5~Ep7V?O z$Po=&FFw7dmsyXk*PrKfh#KNGGF>{j0$6B%6E-S55hIl^Rm-dcfwaCoa+mm+kx14P zV^vpq^^YU9;i26^rH^1bepq~bFYa)zjTGs;(@qr0VD$)^SZx#l)f(ZV_X}x9e}fq5 zC;jsZ*0=}Po8^nWKH8lX!W0QV9OU^?Q}4Zb)Jb^4V!}0^%#NB;sJtRg)#&DQ7}@xV zlkhJwueMHasP!we2QGhp1~Kqs1bUIU!dP2T#V6GwFXPG9T1G||3jXk|h)~O7HSG6CSD7bO=N zyQ|}U$*iAdrHh>vb6MT9rVH7GT_4XrXmCBT&|B_c$c?)Y;!Yhg+<-)Cwa-H__g5dy z{`f>Dhp~0Q{%oiHO z_jXI7q2*kr-m{pHlN0A=D1qNnx;<_^8Rxs9!Fu2xu2g(dv~o7xT5qMB9&58fWiM9h zwm2ha5se5bUmt6*fE&EdW@6-b^G|0;S<8_CReD90K%rD^TE((W$%iR?xz}^w?RZT+ zK@f2~`Q`<_QM0ssch^$J+lggdSN)cbv3=JPs}G8a>@&TZSHcAa_7|sY*8E>ygc#Y9 zku6>XTTZeHgJd7GV*z$v1verLAf7+TeSgp>Td&K48*P>V8aYa@Dbj(z$pGqV%wgxd*gd`dh^6xuk$;!Tb*#8RFFz^9)0alktEY9molVQo&4#yehK~rkN*xgR#*vZA2lWU_5VscNcT1th_r7Kvc@>$pQ__8XzsJ{&#;UMid zp3y{8(g`MpQ~7Dnc$fMH_BK2O0BGe;I=1m~J=>0>WnXQ;!mh6p-bH4bAVrJjjAto` z;gRo6iHR*HYhtY2jwd`XwQ~EC?id;xG8JC**Sa(n+2G=HoZl=|cbHQfZKr-=in$vNY?kL| z!fW}AZp+6ur8?(MMzBneWpp$Rx4LeNCVkxM5zx`b6!cg44A?PW25F+wdYLp-e&{wA ziAC$S1)SIw7@il9=E!&dmU<;q`R{~=XoxG2BH_<0>L^1AOZs~%-n@(6C^$E)gix46 z?JP(8w|bO$21~WxIO2ShTEv~LY5&apCgfE=51gViE(Pl~sYVejv?Kptk9%bNtWPdF0vI$<@EBbtMk6?-Q% zB_A9KfC~8D|K^YKuhglJKmTM-?J3q7eL<m^ycVklrk1T+UB-=*i$J>ShXd+jplA zeyHi(ay;El()@ZNR#}aq*J7c89`0Gbw6avpC2ygK2*U{KrNUoyY8MlA1UuP>84I^h_*`HA%XrmJ|`nH8$)vrkt?Map?Nw1&r ztLF{_gZ(|BL3A+fC5m3cP9FV6bK3v^StuCWbplyb`D8B}#OXnz0hrWt5ARA@RL^Q) z5Q!^|HdK5!EPL^TH-fUQ^1F5&H14op@N@TA#4FF8tF|E13se-NOpC5J6x2g)X@nzs z*=lJ7*RFf!DFbz2MSUwTgR0!Z1Fx4gGFGFBkq%ge0YLVM$AZi|EV(}S6Bok*uvwAl zyIMqt4R8U-3Jn6Imwvq&E;Ts&n~=uHqB3fKGep7RW>rO2uksbx8N#3Una^#Aga7$G z;w@CxsBCo)ZI_Q$dzh4@pGPiw*F1f*Lb<_pc>wrVb*VmK%qv5wpZ&5yN-w&a|M$$i zeffM7^5&z1cX;H-H5&?~TjPxNh>)rq!hG@r=&DCgrk#=wrS*YWW5Q zKp#CT`+*7Y45Z>TnZBmPTIe-5>{mDJj8@23?hzv|UgM2F81scjRu%7<0d!C{>K@xw zui0g$xe$-Y_gO}s?S{LUr~-2z)40(mBJVEh&2!}Ya~Gd`RO0)Q)5X0ZbDf$WGy&a8 zwdoD;J_`F)vI1dT<=X!qk{P%i4{M>lgCsx-^RSl${FyS`8OtuR;2!H2ecy*3pNRXv zf)%8hwsiuBMdYcLq2l(BMfkBtjdie`U_`+846gBhza7HR)Ry)vE%XL!0q<8S3i{Pn zpZLXBuOpinE!O{?LM!?7Uk&}B+&W%f3j3P(g;m$lDv`Ut`wq}-m^oe$n{TeTN|einaa|^x&}+$=OSkUum^0kt>!G zVTBf2taq&2+k=nei;@vLRv#MUZ+;Q%ysLOH_Y%H$mt+Y(@|U`kIdPFrn7AiK+nLSl zf9^YfOUQ1kEu(A=Bgq`s;h0T-rZ(NZ^kme9whl}aC2Pei-h$-YlMbj+m13QQdC`7r zsGOfp78&ugt^rdbDC3)e^n>*sjx!TDJLn`K0f*aV2JLp?!sG1fq=0tqX;2(INg6BD zuLN|zoYx;rKbw$=#_N`FMrqb#J&_2SeQEe64C7Y&)uFPQAo6y}$mNyQ^Byb}jC3`h zUxcQt>@yw`Yi-L}HmYoi2MPI{H0Xp(^{E$qPb72Ew7ST(J8{25u0M_Nuq?$0F}5`v z$-^UxXbp4vgwvq-EXjmtCvd#z4a-mJ}SG189>4$s8~;!rTXi}%s%nw92_&mm7>6O;bD+Ut$;LnO`SD`ZN?-U8f3r#;xexvVJz zk-JN?yJtqz5q;0wQgr{I6)ymYc%rGjnL-kPFaN=oCTerQ1-5c0boz8-jS>WJ{%5|y zH#~QOj6lXA0`g{c4lzLwM1Z8~hkShoyNS1RUZwmn)tXw2#AHlCPZHUURW}N*S3CoV zN1-zhaCFTz^Ri{;sN(3D4QD-?5Vd_ zFm@Y^?|t98^hkmWQW>#gJTPV*yny2FTm4>G^zj;3}^&+6Sl} zrH)NF&n=L*F|BV0H0WcBwMcKmKrr=t*N?p=)BfH%?~~l))Zkvw#f>CwaS+w?hh(eY zDBj<@lQw^p>rI!Lt^i(xj{EgQS&{h*JEZ4~*8e^5fmo}GgA9Yqt)$Br$9^NcVi1Uv z2TD#tNoC?cwm-e7U=uVk={fHTfB?SnWx~TL09*}N@!aB4ztPZf87{}|cYCap>>Y>W z62@~kFO3Q&81E;^V3dx7Q|Tg`u~VV`V3)sElm=CGWFxcGpbm$!)P2*b1+!Ui&8hrO zIpH!6q!9GQWUTeV@RO~aeou;v)aN{C{{<~LAV^lhW0zYW9+(F6%#mNd9L4jdKRF@- z7$62l84ApmBkzG|u6XK4FA;D=na*gX#AOERInWiiQZpiPhtBQa&a1!5%9*OP9qVT+ z$E2aZCX2J&-B95}0>8tFKd)COFR9OL2KE_nw_^NUjg6;3kY(B!L}qK%&?w>YLIDl@M@@RK_D~@8 z|8|mOq9}l;4fffyxd`@-u!7R_;WD*Zc=7So-Ri*ycR@~!E8}%$V<^T1E$O$`Qs}E$ z9yDj#*zS`uVvw5+3ZkBCT^Gg35{yU6((0Wa`OpxQy8%flrO}IYes6y$5=N%O&-@)O z`?p?R-hF-){|Pw;kZKNmDll6N{;Ym~n=pG5CD z{>i8^5yB?tS6=Sm-#33HRPHJpz?K@0Z5RBvFVc2(VJ}&?6*$Y?^*IC3W+&m`oh&qKeSqXDrc@*F8PAI8MHyV6>4znQbfk0B&gxpVH_IU|8vqJxuVps%{_V)Yn%c~TeM)i3mY8MTc|Eqk z9vCe2JZ)*@0!Qfaj5^4bGp$7lwoCOm{ddX}$1I6B;PyzU)wPs1Qca<7%T5%M`7!oM9Y zk$5w{4aQ!%?#1qs9^Eqze`m%CistkO?+7(;MuZ3ECLOG9j@^h7LV+>(N6j)8^IUSs z(PV{&eVF9zVQUST5<^2bzOT=?ocsEI*6e{Ks6002jJu9|F6E~ zd*5f$g@#J|i3GgqDpY`>=@sM~@BNaS@n*^IGW&6Y^J1*ZgzenwbyPILBnLhYjS-ED zZu7S^FjceSL2n0ubpGv(_bl7b2-JrBkJ7fw0Xj?Pc1_i>%P9zKjByr0quDy>Xr%+c zis8ULKyTMVIJCdT5wq1wnhid9ycM(c0x1j6zz-cpny!_-}?+p|_Ac%r=cL^fhNOww0cXvytAdP^Clypf;NtZMVNOyO~p__LdKfmuC z@BRDk;c@60u=iSPuQlVD&zv(3MN&oUd`NZR?p)K;>vmetpu8YUc{AUX`-dT}L53J0 z0iaX2?MnTh*<%M>SQ6ypQ(`g_wBBraM9Uhmgn$hUI3o8$FLlb^SpI61ljM6of^yMdj|yq)lnT@A*t1Z*h^ zpjXE%mDb`v5#r(JK$qQ``{lpk%f8+|>m*S_doEGJ$EDmeh2$W>%wD}-e|?AhL&#sl zF5bAW*B)j;K?D#Sl5fvN7|8_lWIj4yb`wbaH4t$KhMC9@J|u#^&#a5AyJthivVZ+J zm}9eBr%UYzFi?ffJtjm%!jtsH_84C8(0tb}sx)*^GxIYVC2R+@KV?rDpb{Cg;tY?8 z=>ctxv&VLnzsnQ;v>JhbczCerH@CF>IJ7mVpVaZqIa{Ly)=Z_@6AF(bner0^=NW&3 zypdl&b9>+v#x%krLE>6`B4C|ZS<&g#+C3*HKgFj7NgwXEa24Nba+K*XNJ*o6V-4$@ zhhWIQ8$)8Xtu_zylzF3=PBXlY)GP$uaz9&H_=JK|41 z2PV#naD+x~dlB|4y{a->&GH<}OqnZOPnjyIhGEE^fExuMIsb~D8~SCz)^5VFR0REw z&~f|ev$Xgxn%=?_J%U4yoiyp^j}eNb(#^jP4CuPWAQm z{eqF-6B0mu3DD^>%Vwh3;s9iiIeB>073FJ`Fzp8CegAH9Fk1sM-K4mekc?3DXB|;X z)FgoDc)LLY-R13q8hvtkAY@dh>fU;vWCT#Et9n^K-^m{|H?_}uf2UqzxLvSc=(mP4 z=KrCw=l8h8>|xRm3p~)J1e+0NtH|$EGs5qC^KKL82`!BEBY(KmhE(&1OPCf|4BqlD8eR7^)?H9{ zHF}CA*D77l;XY-!;`z6dP1iW{%}R3q`s;@;TY&M5nc`Qx6k>qMQ>;ayp)V;iI2^wN zohTn0gA%G6ePmLO-Il$}L?{0YztU<_g|V)61R)45vvWOnn& znF^d5or9k+{&0$OToeHR)YNdk%clT!Vf2qboUGyQ?jCVIcUi*IIk(Wd!bjP ze7Y5`p;^3@r>JBMET?JjO)Ou*d6-6jGF#KttFQ}G0m`=0%T5DK66r0$)Kd=P`Ob?Y zU;p50H9is~9twv7*W#*F|LqH_DXb@RbsfJh$|(LOn!*kx_<58|GJY<-jZ-vCiy6`j zioajhl2GSJCtW7gYJx{4b4NaOZs?@frVMRSQ_%IDJr10?nl*Ta69GHwQPx1fZ*%mZ z#n-{d2c4`%s_Ae^G@Dh(H$P8yxb@cK_*^)M^ymM$02d-I#mTP7|4evE#7M-TbdXfl z?0sI`x8b0C)s&TPsh7WrJ^Sa{^NF2!>l} zZX`IRGs8E5-BrQz>h0=ynNN2yA@CGJ8&rJQcx+g9)##$&c%SwF8;P~q7U^Xa&9t)+ zk%}er+Uyv<`&5UOW*c|w;pk$vpI7|1!>=HzTsZs8yQC+C3lxga<`BaKCce{$pJ$v& z4lII#oty05kwFH={&2Q6-X?ng=`SRzxIRXj209K({1kZ$K63AG+k{C!k6t`Yy@NY-#pFjj)SX;^*}<*GvI4Byg-MZWaJ+;dH%% zt;U4?NeJ_wn+wQtHBiUJrD@;U%2Hi&56t3_r@HrtMrWubjo#QW)C=Yhe>Y%);k9c% zZjyu9*ifLBDa+a}NhMXk9}xQa6XNW+8cL3rS%da%2C7}E^PU%9=3gvPfy89KGV`Y@ zPATkonLB6R1qIQtgY|hyX1LLvqDsTINee5pxBKi!NP7H7wde5_7leZK7x9wc9R8G} za3@G~lIaD@(BTvFA@^gs3?kmgKoNB5AUYyFZheYlMAz|K-m~Ct&a7s~Mb=m|LUdI` zBy{YB^u_OWbv#J)q)?ii(ntpVwJ#;vDb$GNiqAwjhRHo`{@%F?^eEU$!^VwV3kmt)wjo)zqI0 zOm4coyYb)s+0&t7nBzPlhgK$TLF{#VeC2EQ+boOj&%VFiAg5Z1ni0RJAS`jXA}Cd4 zdGz4<{onxNRo~RyllBw^5&doayw8CgP&NilC@dRcK>n`t}{T zf$AlA2=JnD?;7yOtLlzDM9aL-cLRIZMBfE*XuRntSy!v~JMpSS=Aa)ZYFhkz>s_C# z7*f?eYnW~j+f=^zra436hm$8M%oR?guA#xPS@Xi!-Lf5P1_6L$jAuX?;O`M+v|aXX zvV(e$gSKikJR=?uVBDL1FQDdS!^}4CRbQH?;L&&TqIgM(@D$hQ@wj$C>zf^i>W z^S;W1?1a|qUF;Wx)0iMv`Xm3P!IvV{f3|Q1oTQ3{Y1xb&cPKh}jPT>#Sh4JIt-Wsb zj1)v`U{{5}yJgXiNQ5jlY^5{IbfqIiBk5?mlDb&4{O~It_*EVF_Q#o~qbu6oNA%_L z{X8FZoeR(<8W9PZT>_&!(1(Fum`71FXp&U#w;(Na;F0k zAuLp^OhX(LkH$bq9<;#0#S_z2Lx_$=7b|xDj!DZ>*lx2_NzMI3SJQsZb}Cyu-&_I` z2-kYG(!Yg)vmVAz+ZMf_CWe4`({8sJ-Y+2`fm^A?2oQTTzd}IEkDW3MAdSLf60@<9 zZSyxYH2g%wg^W!r@3iY^?_NDuSkl!A8rfy57FBpcP4Wr~=1ikW`SI3zqTe^P9g-!f z7P(GO5j!?xg1miDt4~}?>gk6sh626O#9{o0^|^ADYV--6Rl1HXxUH?NTCKjkSW%^J zH$-f@rO!~D%5A?$X|tEt@{|empzTMm50H>VD3y+^J-;~Z9{xe<#7RjQL8#4T5HJ^; z27$;oow^S!{Y2G9+!(@v?kT*d?g&%tOmx z;}b##T(_VmFR`A(e+yD;Da=7DG`Iamt6;*NYZ?hnsGIy=XYD=ZF?U5&5US6!JgU`^> zJ*@PV`6yQ$P!Lscj5&$YP0n}5kbwS?0`(C<8zzvIOxjrGN!)M8%};~-^aa6(hx^+p z8ODtb;>*#96w!}QSFVqemg@r0re^l2OR}CZ5leO~Nk1uDREB!ACx3woHSb(hY^LvM z9dEe{oOEAuc?*CaF&^X}gRbviU-_>++B83)^}aH>gpLu+Hwf1HpWqo>IbhcIraRGL zlM#IIIBY|?j3$7OQvcN~T0 zd8ynM^(3*PV9;&wfKWEMnZo6x1bsK@T90u%y87dA!_H(J$ahRgd^4k8t&mPbOG~R^4@d)oXsK9}ltGI=vnpG>xAX~(pEmwp zrp)gDn(_Q;hZFHiY9UxjGvTrGvmR|{`p385zm@GwV!K7qMFJL0-Sp)-()N7w^IAW? zC)$W1G6Q`xC-nv*<-? z@I?~Hwp>FW-1?)wUZ|Tvod8rA^y` zf>;jdHrm{YQoxh^(upgI0l=4eqQdIpN;_`iGw+t(O1V0EXC4jx%I)&>`rFVz&&PII zFzTN2rU$oTa^Ywqa$y%1@1G7a!9V5qg|UZteyDz7uO2!5tqHxxzBFAOeh7btEFqzs zC7yyUo5bq3sA?y)eDAT1J9oK!kMzp;&vE-3cS^!)O~;@Hc@L%r`B2NA`ADBI^w4&* zp4pa1C<2!gY}%kB-tjTE(&}lfu$0S}E$z$UVO9YSd!2+-Nk3p=5b#x?G@|-{c@+{K z-iIoci>Xn9OP}y(1IJI(VU!6EWx%3Z^LOy5EMkZlT)wKdb!qY6SpXJMfEE%OCFwnT zg@3hj=w@R}_TNys%@~Ho7j5i$Gij`*0+uB&mK(|~=am33C2;&ZajuI$UB;gQ;7xvfiSIS#!^_x`q4^i5@ z$(5eCLcUh)LSC-O83b1* zrg!4SA{iQC!WUEX1a#z&Re0XH&&h=Z2$^!IN2q46eOxL>f;Bf;Iz5OVR-aSSvV@Nl zp=S6V@{$NSLH4G8Nb1HIID?WtBSs-P#72{N#G1t?|qIyOC=+bF9SX98&> zCX4?i!|x_b`e?B}IW3r@K#`h*n$-IvoJ~IRN?e@PSS^!It%JTp{K%g!Ql($hK108(??^{zfUj zWDG*RMW@j_t(W9`!jK6YWd{8)?%IrFfQ!z<^Z_-@qG*PW4bhDn-V43?`4&l@V05TN z%bu90Ltp%+Nx#)Eo*;vw*dw_)%X`QQBGO=zA4K_F8v6DMpo5Y-WZEqFQq=GjNSnkNv6r%1dnSvuh1A&?nFNis)%N~W>g zB17r(gNVdvDlgSS1LKpR@IoTDooNz|rEign2dSd;OphoQqSWb-YZcD#+o_SgA{7w3*m|pmpUV1(=H+cdsWFFklmq{r&xw z=}X9zFc5I?@j*Jqbo}#t)1nERtLtmgY-P26XX_dr5JE0k`y!Wru~rb?@f;wFrD@hey;rGdVHd zpLIkwFHs4JAJ;d9l}>-(K0`q*{b{G1MNZ~(%x$)TGkN9Okn4D`<-Q6JF(C@cb}V;y zc*T<8YsN_=8J45sO4lBvb zz2B>zpar5DAt50fJye$xVF+uTVXxNOQ^VjOG5Rt+KO3Sd&n7IPv+K^=lU0OYs$E#K z#ED(4M{r(!VO|-KRMeO2T1NyTWE`AQpVigAN`$;T^CVsOt_rf@!UUi^-bcS;!HFz! zJfC|If^TUL-tNOV+g;o|Y3-q=Vd^#5RJGyOaGc(oti8YEB=FmtXzx8F6aM-eg{oKu zjQjff+97Fb#}%{`1zsK5()QlDHx3R?y}m)oM2Ag{H*QINJpmZJLjtZOCZJgO>t&3B zk}>r3tKDjnD}iut>a4i$IBjt7_Mn>`hR63kkL~o&>MwK4E1@4X*{YO0e6Bl81T!+L zF}P_zg~LvBV+QB9k~UiAhwA{X>dHHWU#(1rRNqwyIBhQd1JBOY*HWa9L{4c{ARnm8 z$d*{{p5T8O6`buQBxe?t(?N4+s4Nilf{s-&X+3VW8IYcm)?K`R6Y7wzo1?$i<4`wC zL3I+`Z33lpR^eNL^;p{4+PdJgsGd166H_-$k*6&;**W(Hty8aVZW>!+My$+MbG{XR zMZU5gzp_3>YpyjytU~^g(U~r-lr#8o$ar-a&WeOAGWbm1?(PzU*88W@Fz zbYU)%l9Ir11bWV4ykNWPZHPg6Z-$@`201x;$wVYTYF?1M!HA2CF+~B55o1jg)b;f2 zV$G{(Fo=nxfSpV!ATYmEKWW7X6H<4j+~o*72;ps=~oGqH5&U zi_XQwBXZKeEb>e3*`6&zgc$W6=ED9V7Ie?%eky%l@&$vk16hFXidG3SJ$0D`!Qbyn0c6IgRRIAO1)WA1#KrJI zv_ZB^&E)U<*yU?p6zFB;yM)9f+5BYhepH#k!OqM_QYf8Pm;yq;8c<#+D@q4^lM z=wiyEfuZum0z1&RrDMfV9SdJX)+20GLZz#`?P0fSB52T})3NP-^Gs*P-V@7q<4*!w zL=*!k1`M!^G#yUhAb|$iTbTjwGJ0QQ&ih%~vg+%nU%y_lFU4ihcw-+sZ;FfH>ad8w zFC2hWviL33B5ngcW})2AcK`80d>{bo43Io8lD+K^v!DLQyuKB89>CJ?%_MJ)i6(E3 zao ztn9{;mQERH&Hj0e-NRyvj+g-inO?tsy^+Y1Iv5@m^?o*#rxIY4pX1_G9K7Ox2b=cB zsJ|`k>XKMrUq4SAb&KS;cI*rs#p9?J!{o-&%m6ImsYB`->7y$NK0w>*X$3Kb^1`UX60E!%Wd6(sFabBXP6lxvuCRhc-6&?{64um zIJ}VlhdioxcmCT1^cSULI~YVnyUwKmeG4=D6@r4_97z*tl3yKz@boEP7oW$WUNotu zQI;uw7ufwL9mP5EvPn+2#N@^jv45}bptsP?77vqMCZ6R9@+4}o2pr$#KeWX@b$%}E z>Hk-3zc@5lOwOH|?8*$SRlklfRoMGU?1B(Hq{4NNS>SXK9%lztfK81Bre@Wo*Eew~ zd4^6^I(Zxg!{aPu<-Xqa7HOJU5?@{@md8^ z5djH_|AibOHuk$6K4W9!XDBG|8=>W;31Z61pL;8To8JMc}dZ=g#I+1kSGDm1MM&hY}Bj$DOA?v0fE;*pT_aCb5s{MM_W`<5)3!F zEeJfMiM@Pj0Ts*ASsPDTx0%xz>%k-#u6qJ8x)grp^!nU}qg^53KFq_g3H`xeDEW;8 zoyCxTe|ra*8)#|}7A&?mS%yhMqPGIn^zDV4Cv#+u?gGP~MC+*^r10?Y^l2tP4cq(` zZ}$`#QwKLcD{qe%Vf*^}W=-ua2r;Lo9#xy0y6sJ(f>I_2P~Jil_97g(RwB9$O~=Z} zv!`b3_`f!LYL;U}(`Q%Wr3+wwT15m^t8N>jBa3zjS((oAUO~ZX3lc3b@jIa>=x?EO zhXD(XPa}Zc`qV$ywf4{4_FVOA5cSo06&oJ}?bBRBTkgZo zdyiNVSF>kN(YJ%sePSv{!wdfahYA=MAN~JqxClVIu#>rL6Z=yyF{!1p#KX`O=bU&F zo5xWLRg1bzV+BKpgdgWO2ABKds7H#`8N$qiQa?^5M1%Mh6m)|!xv-mhXB-P4Fu=n; zr%$AKhE@rd;P|)`-Slr7Z}YEW5&Afz(F(Za>tQp_*hrDU9|U8Y%%Q53y`NrVSFGG? zR%|S*$fq_vD`5HVjSF&|5#DD8;N;$(BS7q8`2+D=b%TL%2nPuu<%?vFZTYm-yA(?J zj@D>GcdX*}%KB3Z^!bS!$>)UPSfd)Ml7V^wjVMHK6;~b5@efn=djbK>mvB|+GiR44 z;YWacHq7cYh zJ7F}yL(6(cHE36}I;Or?={x7(d$Nr)&+p4h_3fUr z@T4$D&OvT2zCXChWIA2dzfFfbDUH3QWA zB1v@H8AUYog(5~qMjCOaruVqjgPQzx@%TA(9RSN)*akgTNEezsq*YWffoDJFiJKpf zz>VHG&=3h~f3ckH&tL<4=RccNJq8R*o;LnnssH^=Hi%{=b2}1h90>NI3@TKvWMA#A z@xVd&R~1)78ls%`gG_k_$I}GnPgm^jDxd*Z7c*hdyZSk&V>|dn`?&)Z#`N}Z%>cca zat+6zqJdI2^ZboX(?7jSMvLUSD!;6qiiko&!>Bn0?i#x-fnOCq&+Q`Nc)JFA87Jx< zZY{azoPOH;+;2`Glt-*lw$S~Dx>yuB<#ezlR!(G0`QB}=KqMMbNUrzr#q$~ezDfF) z#qSd~A>Ag<+d?jqA|fLHfpaf127iHN0p&+qBF))T1Y&67f0H!2LTH|FB&Jj5(V8YG z*eGvcaa0|Hvs`I$6o4DU0y96hAG#h_evk0vR!pC^^_PXkn(nQvk(E_Py~|e>1dt0R zW`jb0;|>I)cxQC*OC0CXUhe; zLTAd`A^~kR7FL)RiZ(1Px56S01of_xbTx|9^bEFcjy%SC;?QotWu$}wz&=Bns(1nj zuKx!Nx__z%0Med1r!atTkNWF`SmxGL4oV-U$>*sO>!uQZD=bF_dIar@Ms3jQzDqhnRrDko3lVJ&R%a zH8wfpW6P)u%sfGIAo~+9agGd=MH4TtRq_0FY7x;D8oJ9)ysmY8IUMy5ZjCzO%j*WnkjQ(u*FO^w}hK~nP`}h0_^$MPih*3?IrF) zI7xUjlvggQt58@E7d=3k#n^y{HLEQNE(P1KYunu)bZV5m<4>pLtAADE7CzLE>W`b? zVq|J~YeZp=mUs5y15pQR;ltj&J8`9A7(#M+H z7J4?`C#QJ!C!T`wzk{N6=l2SH_RXkRo`R@D9kMG;M4$%S;UN6z%bYy*+{LIF;h0wj z!8119!_1_^FR5POSG)XSnxo>wO8>?qW#La*g%ahNQ@Ch!lL~`t!u!O%;|Y_h-j7i6 zjbLW?lJCFGwas$s7xl7*=ZFxa! zbU{1FQxAvOpYy(5G%vkykIoSpoZgoIAeha6@|Wd-h@tkVedevTO#h&`ywZiiqW z2NDE*n>YUd;{uQ;AX_(FCpVaIDPc`8kemW32Ac~?<`13NTd5cAWi3rBKu;XEpDbY} zeGXn9unWGr%{I@alW#F6I3#96fE+(mEm3&#(%7q7aEB@dpffC`g#s_Y^Q?A-xj$V_ zu|4=wNE#U1V2?1s_6Y3qqI}IkjJd7K@Ne4n?+*^8dO@E}o4m;JGh(ux2u zuGo$oll}SkII2YmPj1~Ml41r|j*gx{=olG$z}a=C)@y9aTP%{1Qi8mj9R*sqtGIjc_#CwoS zDQ9K&PZ_3jKQC{shU`7w)y><_yNY{&hh*MgL*GSASKWVp*B~{Lt#xwm3c_dW8@842 zhu946B-Zg#2cJgG3`EwGxeW!4uM*dC?%Ivg6?jrd=pnZ)zqiaC=2i_a}y6 zlC->;_4$!+^LRJDE+$e;TIT`JQoWA`k59*pZgfxeX-R){eUW*2<<)Mh$Rz*cvuwWS zMo5G*{l=Be;WwAH1+QKT--mWnTz?9HctQtXDT$Y97*Bj_Ti{bdUjT1xT~gk)P*B4z zmle#1t5mt%Nhk4Jc~9%r@LsLb$^$LJwH8TYx(sTet6;lHpb7}jwvh3#YA`Sa7Q(To z%CqjCAET5mm|_7FcXfW{{YCHVekmw21=Xud`TBOC?|A%w2|uR0H#$2`av~cB+`Xjg z_{eGvfUV2l?9+CCc`lV&&QLo#;VF}N7ssWg5KIrZhF~}=?UL6Mf4wR~0OghchT`r; z6S(_aGl_xdviGG`RGndZ(6CX!JeLKl`w@SPTk1p6RrHO^>gsj`is$3lhK%fBpc-xW zG3CPX&D;2F6$ZA0BItC}<4d%!-Ym@N&#u=Oq$%QLC?ctZQtlbJ?H=$oY=5)ZA%~Ed zIvmAXD@BLN({~T>kax8qDJIQvegEm-GMjCB`~8gUWb~9G}a8q(DcoeCv#!Fy~v$ zUGAC4;k8~HlP=yEu|Y(NzUBsGUO14ScD{4i=vIKKmMLMFl|*Wmq$^AC={s_Nf`3c% zAr|iSTKWAO{7mF5vk$-V26JrH1=Eydz(mL(S=MWPa{c9t75GY^r|!lTdDA1Walrh~ zh&}rdgxfjtqj~*@Y3%&EiBj2(TigK30~gXuX-|Rzp_f1&Gm`9 z$>+Iewudh!e;Vyr_?}&e1N*w(an#9|&60~n2qtriG3~&d&PO-PkeqJjX&}Eysc&=D zqolaVsy$-43C7E*zsh;#KMGKekB%%&+091UEulu5gJ-NU`xTHgo)o&pS1fsn-OwtGewT~TO3K4UVvbb;;v4^Gs)wH>I69_bT<*PLm7!E-^K4!&a$qwh{ng6S@i})Wbg%upuJzP=wgY^vj9U z?THptAgM9Q0~$ul+^VWjDsD5e3Fh0dZ_XWJaZwDqPt@nK8MqA;F(9CpPVZRkB3xFU zd0!9H?ZT{k(`0m|LpT4G`-690-i8Q$LRP@h1#C&-AQsiQZDmUbE(;5fX(H~5ltB1E z_t#7@2nj!x@yAZ4_$K2I>3F)YbZ=VBtqe{o3<4I38qzO*K8o*$X2% z);KIeIkt@BLtZ55c$nS-UZ$gN3k8sx3FDcY+_>rY++SaP3jZ&Bv3mWgM~t3nhrY_@ zfVpmJtT17FJev@brCGXL_8G zXp&&_Ec)F07fh9Dz{LtZ;{JV=*Qh7VVi@(x;Et$&vjsj{CnCZ$%xHC*lDQvjM}gZv z9>Y5?$Ve}P@>55ub!{QP#(f;yZw4Qa;a@g}jw5d|TLluKG;%YSs^1dg8g2fjD(>Pp z4HaiLed6U}SX)a_{a9DNNdD^IA*it;GC!hn7NW#Wts`^tS(q|Rdr?zt#u%|EIBRrP zc3)w9+U8J}np)lsqQl)uPcT)^Io+P z3Y#1~#N#@wEyukl;Mvgkz5PA5p-Ailj%xGSCOQzaGix`CRR@Fj8^f(^T#6f@( zxh5$iA+a999G#m*SFrawj-lvU5_R=W3hZF)T)*m_(bXS#@V9UHsGZ1Vr>r?I>=oQu zg>EU|-A=tVACsP{8H|*1hjTE;ExLynO_5-5fBur1fxK6V#(TU9WXG(Qq2rq#c0|L% z5aaYTz}T_zMvKXmck!8>7_($q-E=O`2GS!uvYGEg(I73=wJNP*np}`NMsu-a35C%} zx-|4( zih!vp@T_p-1usf0eevsV7aT$oBm!pc{?F=pjSjas#CA?ZQMuDy-;cqnk;2RogE*O& zp64O57aE9$j}>@9gPW6$K(0AtGN1L*1ei?j8&+D(yl_1nCV6t>?&QOds&1^p=C5Ck za;Ze7vNkq~6_;z81P={Jg14OzQaDVF%sy}-Ni@eR0)d_IKA2^%lFqrC*b0L?*IjxI zp;R3~!;R)Ifc(TK<~j24N!7%{w_JO7yu;H5Tkvbmw%+fCOJO?s!Sa6$UoccVUE>uv z@ci?4)VsmT>2uIl=dTCEcbB>vLh|89n2M3F3>@P*Hv76Ib?8j?*-Qx)}-3y7W2v;(Kf}bE&n-z36a$XSk&S z-7v5pG#Zsa3*Ku)zT49yJUb^H$C=^-pjohQF6dJ(epVFL_w4NgeO>ACC<{zR=T%qL zGTyMLfCuu~8f(3keFpHzPlx(CGnrH0*HK^&(S!n6z!9#~{v&=U_%JXfeM|fZy=>7m zPI25U>*P6|RQJlnisu-%KaR&u#FWI0RZ8_!*ek9mB)AkfaW3Nz>s6#(y@+sB*RlY| zD`E0A?5=UIrUUoq z(^CWS0GEgH4GLpWPC2OOms}SvJLzRU>yq?gi%Cdq$o+v9{rsdx`%yLD#9SYVJ>^q^ z$T&tkJTl@}dR)*z=wMMPgZ`iTChN^dljm)|-#}27SP5--N<{dgfDtxP-(xe1Y6Ql?s%ePBbhY z`R^*8_@5*A|LN=XQh0E?oJNJ$*y)MZU*S!}UrZgn{jMfanEBgSyH+DQs(~nj6*zr& z??co@U?Z#xK}t?btcjXj864TNnehLj1hpM-qpwHm?P&!n*$(XFqI32wIm=rZAjc%LE4GWMvOp5}I!(%@SOGT7I! zm5OR2c$PlG#$Z+TM>$IqU_Fs9SXW1~@ktYLQ_Tgm!839H+atU6Vl5~9 zyeLGCk_oc6fLBW!KOw_dJ+tqm$A!BmM{2;!OqDbH4Nbf*gn;rQ_;{ET zI{*3FD(N{>dn#I5+b4jHQ9bi%eqPUtlL!G3QIslf+>?=#{NQ8)3@ug4{ zaHL>oa2ElriOT9KG6+)Uvm z%MmVyd&6`=zfo)|{@c4bI!ZW_NfA*&LGb(2l~1;YG68-mDlh-yDLUCFP>7B1D+4og zXn8ryy31wjLt|t@W@hZcTphKL5Lplf1!#^T9{NHQ@UBV!?6~q>U0v1VmNc*Z>F=-Z z1vI3}%1Qzdd-%p_y~>`*|HLa1pW)RjB!2gO5j|fb2qFtNRdK@qhB0Kv-Dv`X^!*@D z2~ZP2pYenKzZrs2)s{o6pewn^ziI6= z)s}1y^KZ@$7v{2kot-N|!2KVf56Z?Fw+A7jJ+aE*b3-mr%Ipb#jy;?!jUE;(@!yZ> zk!qTlP~kD@fCYU~&4=)r1IU4z_^z&j4yqi! zkH1lJ_?XMJBAQKT7{E^5i{NUl7TH{=4IX6l}v6PBP3bKQFp;4J$VgC&DMobTqt(88jcG<1N4JtwRgUH&3YmC9qfua6gelI#y^Ob_z0k znvPmgz`CmW-(5i!$MPHLw-gy0^kOVCyqvgN;C%cY zES5PoKml<&YPsaANyeCOc79F#woGHKs34;QltJ5^)S{43aDwji~KwJ0S$>JpFN7Hn2F^{-FW^%NBlVTM+a5?*grY&|H&`J5-yGpgI zE9_?2Nre4Lz>pQbakeM3nX=kVvliHYC9SB+N%d91A?+yzj=Uk;1BOlM!M8`3;`=0dl)?*RGLKwM3h?H%6a?WP8%>n zQRfM_{p@nO$6`^O7N9K~dxfEq9zWb3b^dgsNj#YDjfyTr(}p^dlui|HsL5E-iP3M1 zX^y?w{HJdwo@KmhkYjoc{p$q@AWHRV`s^Hy zrx{&9Ie~PK4KyLmblCmm@?8k#avM$ccZ5`DoWbqXvv^jII3iGYlY!SlRg5Sh^SMB? znhJys&8lYrADtpWjxzo?44VR})us~9Cf>MZQ9J|ndK4=Gi<#ot1QCct!J=gJ3A2wA zYNb`ZG@PGz@FI3UD)jy}sIFwTLHWNo^tbU#sZnWh@2YE&gxg0+jEWtiK~~k&iUsEX z)HWd8Z27VyqxL-YnEy{uf$t|U`4tVVKKBm(PrIv-em1oGHS%@`^<)}0;(u516ZiDD z!3sFU>ypHoIcwN-#{N=8@&(_|r?wN_P|z{phXw;+EgP|Zqlgr# zYgalkgZ=i1TRbSOC}M&k z8o47v^S-T-$je&~pAW1fj&M~y4iknUbU%rA6mwO3)_Ui_b>Vpb4HwK|9TA4+cEguU zAVUCaPMHn|{LO{;_WzH23*wH{m4HeX+|R_3ulo9{oOv{9(u`dwXc>w)Arb+ZBozwD zeIiHuxW>lyat z9kHw5|E;833<&>%hMMh0PS=f~@IYoJ`M8Z+f~htm9^mN_MEBU@^_#KtF1*l>*f=^u zPmohTCuXT8xij1C_SqfywHULf;&nn2x>Fe(=8Qr={(AuD3mh1g9G*qt2n64O> zmPP^w>{4gSof?;#3apYK`tDJinhUM*ii4;&Er->dv*??;xre|>E0YlYi@A2}4O-?O ztlDK)C*^_|cD3}q{0ZL>KQU z4y|*0NVnIkwXK4~McSqa*VmwNxP-6G)5*v8!?_3JQlJu#dx@TZCEQ+YT2IS;6W7%x zWo~z5!XxSX5<4*svWp(WuFu?q#fi-_{Wizvf5CbCaQ2gvQU412ZzjLyVN#Mf658@` z;1eqx?5NuUMalljvJ#rwL0Xf)vBaKOK!MU510H~!o}Mvxs*0Lg@ULGYv0unCUNXxa zH%Sgr)n5pr4 zIdfAtU8n~Gibf?ciACw-K$iyZw0iTCpuQ))F(mEi@7q4ktQ&CD{~X8hJz0^L&tOOF z42^Z-SIjL`{%MW7cJqsuqBw338_f9F?by(v%GZ_TM_;Y zkc)xPE*>k2f5oF*0go!KR#W4x17=mrlg}NO#Z>u}urMcH1B$FrZXd3- zwRN&^Kx=0`>htH%Wn^T29n>ww0JbkL4ePwM-@k-9{YKa4D0qw?ipFC}p-^aeY-}$u zKZeT|Ve^)v9;O?u2{;eulKKuRu>Md8|Q;H!o>YT_qM47L4bl zRi>deLHVKifriDq#(L-2ckSU%lPn0L4WwRphD1b-N?q*4B+-8A>1``5d*_C|Uji*{ zjtzB`g20bw+@~X4tJ$+Ior&3(5ju96R4$vCPywYHTh0RNYpf$90&j7E7W=29Bpqm- zLP(1G_~C<1G*De!TC+J+1Gf$_z2FInOa`AenRF;=xqHe^0OLIfuoFx-cp!tRQle!V z26b0#(H#{h1yd@eJSG>Hw)<@eJLj}{-?xqtFjdmuxf{s>*#OMc1pejq?+U5I-xY{~ z1bk!Hxv(y24I+%d3joyGQEt2G55TN>^GO(HPAJlSrF{mkQKqxuvWc#OQ|W%7^V4Br zcIAz{LoJybE{u<>81e0fmi@{`f9Hi%ntY?$4qx5*P7IPG*``*21qu)&7+degFiEjK zu|4soAyj|cX^IvW;)XByP5i4G@ z|8W7@a;Kvn^3lj|G#E6>jM#&0GE*J510ezA@_sk(VF4CcC<*q#V_bL<|GNVjI0?O~ z76O5vKD{urNL+d}z>x%nD|i=5=jONhwu&bt6&0@|3;~A`2gae9@T;&Z&C7eazLgX} z{rVYv44I(L3io_8E;;$p1PG%lNDNP`cLVlLf_vsy09I~2G=cb|l7jS9uVGIfdTUoI zNb4j2dZ0U{oCf7~M@ zBpx*sN^n?s>#{UR>PDy~2FZ$NGPv9NKTjM>_1Gmv=?-}>Os^dRWj)7q?1LePA>dk+J}W!?_euw=4Yux9w1 zxu)<~a%5x(^=A8YZ|mL~J3T6TUdEey?g!4X`daaTzTS3AxM3`<_oS2T3eEso$?)8E z|J0bz;_EjKOTqy;J1g7Idw2S%sDq$AZ{tTQ_20?l)0n=)!ND^Hc(d`!Nn2X&9$HAw z`hg(GhQ6+tN!zROo1=vx!+_AAp zPNa)W=s^K=Ur+y=vz@2TOi~E?_HgkBJIeVYI z&$1MMj`lwTlatGnZgUgfRyV(g4hyH;%6v!VB92l&ziJ`ZZ++R9_>N>qO`$DGR|lUJ z4M-Fe275oxxQ@ZuXn8-Cf|DIH9mGjZTbXt7SbB>Ty^Kvnz)f%nx%BH5f&pm8bmwM8 zm*nA17XD}Q2UhI;st=r^uA@EX<#MMY(+bCz{OOEx=m4ROzr=om%WT^MdX~%O^Lx4sZ{d~8oUpz4nront*JboTY6!2|9MsD=JOP(gRsfqu9Lo^ab-&WhS%Qoil z-eff%^t*|)LklH$0sxPU=c!7VYeZ@uwv?{N@tNeIf=;4~R~5T!CAfhG53~r^C*dkb zS?39$gYGM`h9zzV$rJ8wCwb4$i3yC5kdUh&4vsXh#rXJmcRf0G_Q{%X$wfU-VoIxh z4ax>MW2B%PgN!_*O7HlMRY#0A`G_K#HKUh>>GX59cU1p{jDhD?H&<<{0fIFHw?bl4so}NPwwNE zGB|c%p=@Rp9&VSFgt`CVIjnm$F*KTfUAzu>Zmw%M>DKh#`{~2lbz{#ChNR&tDZqQP z>4Y+ts)$;u-dW`>Oic8MW+(;!kMgN6R*JyRTXzA*;&h`Ied0ZDwn5Dupu$g=0%}Nq za_-T$^)@ZW!JZJ4 zK8x$d(_+!or~u|9BlB|mdqvda!v&tLvDu(hgEdo5YSk(!&>$N8v6k9n7DVEcWj@U4 zbY)auFQI_TUhL&qRdGy`$2j+cOglbIFKGV2+CWrrA?6Fx zSbOkIWquhmKkX$LQ`#OycRd}9U1u=={Q0AEaCPo>!N@ZG#fMth_gTKtVXb^E2r82m z!}zm~kEm&h>DSFw{jm@J3@D&=lx(wIZeHi~`a;4|nmvm*(OIANNs=fp?}-J%9XE7! znO|U1=jpxuD6tCW_gTs3X++sJ7PAgEVttuhc1ZdQaHVej80U0LlzPZ69#WtakO zGDzrGZa1MFfDbm5L>7**=8wse&G)6-^KPXCh<~R~>@2#jm_gdfsAflif zMMg&pt9y1JRA|NS{3`o-b7tUGvpa{4bomlPw( zh9*$)7&+O0S2Cs1GMuKt^qXL^l40m_H(K3jxe%n)w5%(bX; zL4g`!p6P|em9~MlAo(`$hF?KTMDnqqq=WX6LhGb_36C#J+SbE2JPO{tf8xY^zI5XB z*#6pVp@3Db0_Uir5b7pK>80C0#E@r$>l+dYTQJg$xBG+nxub8 z?23|q1mhkfx0kK^q&kvqf>)0@aXx9v($j}5uFUneRMO{Oo1e@~{>igy9LHoMSNT4<5LpnA~QPk;s*$2!RrfLlMTE6AY z$UNtXIt5j$Go0O&XB(yy^VMSvp&f45JIsCez;$eQ@y_gLn}T$P1XXL*xVjHES(|{y zdK?g?<0+Orf5v{>_R7SmVR_{FtJm75x|TgbP)keds`3dY5~i=ZZ-zNER&6X*Y-j=# zOmm!3M|xEe)q;d{kK}9hJ#F8*!Z+bKzYeYh+qvAHk@UZ0JA7$hM0+F9y|X!WI6f}4 zqam1ZQT0)9MeA|IMu(>ftO z$&R0K`y+A0_{<@}Nv)aANr7xQ=U9ZSa)A=7n{A4^4!yr{4TuaUdIEDfHuIn-_v3fx z%U*+4yl}K2a%6eGurRys!I*?suo+`6j34wf-kCP5c^|EkpY3HFoQ=RzpDjogpHB0! zSsaYN&b;J0o#=dyidF)O?gOV#R>e&3oPG^+CO2fr{h{er%JVRplx}QHMHv)CK(=(!H7D7~i z@1xY6#VCrZ(BrY5FYQ%sx7Nuw&8?hb(^|Z=4=HIIy4pw&>ltI9tfhwz0 zp17LEb?0b2qGrPICk-8A;b0a%A2GI%giV_J-W)0MT+PMu-8WAsZ?&}+FFF6`K@!97 zBmHeC0(v(;$(xXsn{iZfz6a~P8;CtImQasDeve&LpmE^L@JM7{l)K*X>^I~s?7W^3 zYNw8cEMG#^ak+`?u;!Kd8tR94ASL6hudt98))VB>IdHU zqmv+$Ti$qCF6+k~V$cZB<6x}E5FOscRz_3vvyTH+c7QC;V=)KcipY&CI}_MNR+*t9S?KZWl;?@OwC() z9FM2N6He58b&Zv+*6sv{o_qq?|W&480S7;e9-*{=ye(r+mna=6%0R z#Ya~*b%2b9CIjjiM25#Ri%O_n7cv9}A%2jGxowlA&ZyzC_z+35@b$Tq!7Q|UcBkX8 zrXO(~p`4bMc>GVIo}8q_Pom-5WnBJq@AUBuyz+XU`fbs}$~9_+Ehbodq*5Z=a-prB zH&Jff#;}m!{WDo`+?LpGM#r5 ztg9a_$W?N>wi+Gu+Yq*CyCXhv4N;0V+r_qo$+2!lX&bn(bpP0SJRSQcLQl^){P`@5 z5*zt+evW$K>odvIgGXRbqDU5WwWo$&yz@m{gk4pWJbf&T@-!xLgd>UpCn{`gk#H^I z)CV1p+&FPNAWN}ubmhAYEZZG;v)3EZ)Oi!8!E)*{`32D_V$`OfZBm{dsOf zFpS3hcY3Nosobjf4V=4W!P`?VJ69zj+&B4c)0sc>rYB7AW^_2gc)s&BU0XnpGnp1g zO$)XBnc4n}dN`GdZ;n8`G`41oYwchc5Cf zQic95Dci*E*x1mgcW=I7Iv7Lt)wCO z#yHDEEHPhUc*6er1NvETNPy6G`^3BLjVYAR6F>-1ImBvFR*urU_|IPB=bvw@mcq>- z5+iDDI#D~_cUWwJEik#*TbLzC5kFOm3yQE82d&6H;nf;`(+OTQVWXp?rle5w%yRGZ zkndHItg=2&m7Bb8UiQCx@7jLl?fbX8_skj6px*B%L9wx|;Y$W(db4qSv%TX5=(*ZI z0<9&hc2A__*vyw}4X$ejg1f+-dkmc^>cK1^AZ$9Er&+JZ;I0&N&0kdXSt}tR>X-AT zE9;&(43Mu};dbyOvK8=I@DN11A2*TIQLj)Pf)BwwwMe7=E5q~VJan>h^UT}(@A}tz zm;RH5W-Bf|jCFogB4Id9GCx#F3>0tZU}-8zus=}8HX?#l`yO9MZj3IXB*!~mzc4M3~RHn{-a^D0ZhVNa0ye($HW);bC^PSj!G{OFD|`8?caJd2}Io9 zL5e$_H2sm~Ob2B;JvGhmLlfsN*z2UGoGLm;avJC3QX&i89-2R#Y)r$g2#T_2hi+d% zBVn=+4J?h!U_FEd6Dd48K34J`odN09t4p6pMD(&vlWX*$-eUaIpTD{#Op?wsh1{@3 zFWeer|MvmmByo#ES+Bc%edP z^q(CFo*XY%>0iGZ`{I3a(kahGUvc4AoYvPz8fDrv-C9NL^T{Y-(0aJTV_B_ecK$Y? zZ7sTm@3`+iMYh<_zi~ovpraMK0ysf%V+Htm4Q#1C8F^q~pJHLZktq4LZ=MlILq2WI zN|6gfke7GH6i0AB4u;Mhh3cTq9xrLbbj$0JUZVK6AV;% z+8kv{65U1rn@Q+C#}+BTY%*_{dF)}sq@brq!hXArf(Bri-OD@LX+Wr{htxPW0W)Vx zyg1?-8Fd^W*CrKLMDJ?a#QFVF7R+r@hAJB?T`mH}*T%jo$*jG>KcdfC0S-{dZ66c!l<(k{Sp13PtiI13r5h5%Sif+bA>K1O=$D~P|r4}+Je zIbLYffg~1Za6Nt-p9=UUMYtlY$?${s#IE)eJ$A0p9p^+@f2EN60#0&JQ;4Jhd28yr3PYH_-SEEX&G60-zf^5S;p?@|)?-88NuJNIK{c4Ja z7aJd0Q3TRu;tJD-3B8L+ie93GoHm7X8c6+j5Dgrb|6AwcHh4DNS&)2fEiKcX@!VF| zKga;2+uGWCp})8vuPoXM6i*=ma$!ipX6!Tbm}J%L++9a?HL8%;@c?K9H)~nOA}3EW z>yIqdEK^Y#BSb|2^`WF#`)|{X3=F;Fxk5lP8$QwusNf_4NdgKQnv!u(pGs|AWFpl5_pcu@`-->qa1#CfWDS-k(9Yg6C|zY93oW7tjtu`lD-RE| z20aokCoN4iwP5nVo8F36E1+QmK%)pi12exl-E2a*b8TCptFfQ2HCy~*rNZU<`|n>W zK0f^G6*mmP=rdFtOOa37|Cf{njq^P(VFLY+3Ayaw zmPo|x?8vo7VQOzAE!`W}|BZGq{hy05+<kjcxKp@)2%KP~-MJUH!F}krUkYemmKqLLy=f zsX{H-GuaFi<$-G^9SI)Xn#Rhu#Pl}pq%eh(#a8ez&^GO>b$9>Q-fHE%b-Z$uNLw8r zM~0G@w>f=k5_5BNv*`zlNu%(Kj#Gt^zCPN#W&NUqM{^Zr@f$$f+dBc;MXsh;c35Rd z5;;`i?&0{({3MNNx&<|gzhk?jb;H-dsT9?Jw(tSW#Hm{r*8eq9YY_(3B4M(VAt)x+ z+TL|gx~1mlU)bYPr2-}!6)8GEqa&;v6fe%+GSSnIFklb72EyPA5C}q8p@fAjZHj=c z&#x$!keLDg#<&DW>>3b27&5WY(J}Yd4KPW$bQSzAb&67Z6RJ`LFQbk*_c}z~C{Auy zBE-^(0w`SncTB@(JyZL}Dmr^Q{KVXQPJzMhUAG`l5AyZRR zj>RIahK@C%xobAF+&Dl0C;s&G6vD$zf^p(6ihxd{XHS|Zo!V;W0VF1nBZ_p;64Hkn zIr=%A&ckV^vf6AIx|SPLa_Zrpv+!dLir3@;Crt|%m!6ScTvFrXw8xiHm%_^O;6Vpj zORZFs%eTEMFq?R$y?&~j3&(?rL2h}uyZ;_nE$+73=!QY*rtBT^(_&-KS$5d6s9b&2 zY;?PaV_eO_+Hk{a+}Zv27Lxpvrwa?=$D37cjEJ{W-tX45hP|9R{;?+>KEMonvJIWr znS=_@v~Nj(5QVAxKFNakgkTQkId5~Nw1N8GbU%#x@mJZ!U(x8NmNFQqKAc{?FE+K? z?d09QSZ1-6d^)5{!F1auMFmNF0b>u$FCLd zmzokhmc(Y|2PBzq&CwH&jN^;j@jxTwjqD!iD&^)2= zDUy@!b9;Nw;h@G>Hc`4F*5{H(y4*=n)pcEyYZ7>#Q~bUbl$~JPpC1TbhHgH8+-^n` z1^wgJgvpLjliNseZQ@BW6|Ua>G;yN6*3XMR{6J&QiMIz;@DsBH!mg)l2h${ve4dv1 zvbH~cJd0B1n%BkLkw?2hDU)YJns%s@ghM}n{_H!yi9Sz+Elh?1_|Tq0A{&ji({?2;-j#nK zQK1t%+qXOUUP2`Y|MsTsOM<*17kwTAg=*12u4}E>R_7I5-_K&B&*$k2=%V>ay9;`1 zI!vy$#xnZ042?u+O0=*436g51rHzb@N?6IjTS`bEY2WZAL>g8g)xd}*MdblTwNyL5 zbodx09tuEf)C+%63Y8JiO<4AsmpCq6!MPJH|G!*-gzm3mcZvRMXDy?LhG-9qbjK3r z{%_K2SCC^XeNPEEJ|oV(UrExo_tX`6!+{z<6j_zv#!uoe9E5+vr)Bay7D*T*^ciV|Ow#B6=H>9VKBltV!K3Eai}e^=clMue2oNq6 z;U*#vXux|tj5ctd-@>P0zgysV<91=jY}9}Y15MtK;NkXJ;oL{q|KS+*$FmJ?mjOSb z>iE+NUBbMvKhiyV{_qEAqqDuO%S1QX3Z&i-(5v;k?FsDJHM?_dKQ9seM6JcRpuN_f z5t#9iF;@6+l0>+XFT^0)bt+L;X9W(P@m(j{!|#0i6AWhyC|2Jyt;_- z>~oKp)BXVsD)C~~;9DuJ1S8h$H`-_!Nq_Dj!M|O1Ea}Wyaro;uUF!GMigwuUzOTsw z{-y{n3pkC3y^NBLP?%HtBU(+Zi}rB7e;{SJWLN)TmViahcKa0dU4i`$uU?ZcpLtR0 z!tKPKtS!xu+(uA--O#q?&_@46V1L9|TO!}``6NXLmlNaPt}D{DpbM9d`?E?}+snhO z_#cOo0JIK(>Uq#D1Ik}l^vspM7f<6I6)#1xmy*}B&ko{(!xe3(Tm(Z{@)9NbR5CIg zVodKJS5t0?x=x{twdbpI6sD{n9nJ|PHtSs?c+7giAo|+|8x7zH+Z~8Nf=jBERg~z2P`>6Zlc8r!)PlMt{!vk%1AgGn^fBp)P zrW3&Z&5jy&b+l{&kdf$n73-q?ARYas;L{JE0adV`v{ZuQBf5*S7=JVWyk=XdsWt3tla1JqlkqYuFppTOQU>|IE1**tkKSNB|QXIea+ z-SO+2g`O&blC{IK2ljXf(-jhNem^!4R)?fPPKGfL5ET_OAPkW=^$MFwIeE3w^8$}cHY47+KTrN zrSD4Uhr7xJ>IpatmV^9>R=#J-ZBX1}GaC_ZmdVjOCWlC$Vbz4f+RGAf|YHfem~ z31rtI5|O6bX$k(C--%(udi%QMkKMu{_hDeBT~g5@dsZdFN|2+#*3Cm+!{di+-Pj=X zJjAgtqG) z58P$X{Gr*Lo;etO6Ry-F1hWIS{?_ZCTrXbFc3o};|W&KRs{z)8bl zM~i9>NW?dOUbEe>CN1fHurk-MHbw1gF`H!+ zD3b2$;S`m$o*QzF|FHk>_NY^6>t9%JW!uu(&Ac_(rZHbnw`@G>l<{)0kykGL# zo#q;3gACFz3Sa;BURi4gqJO;^2QCbq`z#xo$(;?Zm$kArK{Kbude8IFEwER(-N!xn z&)IvQr4|nXl!H)Ty+gSH<;*~hL8^&ezqPE}!;Y#`yB5)jI4;l?v}@9Tc04RrT;Ga~ zp+XWn(Y>bTVVwWHNABc@xP-dE3{jYBGM1;`>_4C)3ZG?t`n$26WIh#ye*9G7552c> z0-$qVM92T06YSR{F{j}WYJ4at>Zq%M$Zm{2hcgqc<>Hi+o{>Urr(7v1%aNZ|ocb0; zshG&OFC`+dt{;moFP2tEnCOS6J^cBsf4|SX-P)pU6N@KYB(4g29%lPnKnG$qr7kB5 z+Jpm?pSN&ykAO6AEE6AHQ-(fV zjXqq9)*f2~K8n55S^I1eTh$Nwz44V?bPdQ<6au<*+&MxaLmyWm^ zJtjX+%2h&)($qF7$cj~9Nv~P@dn42&RWxnj;sh{YYMV%j>)KJ3ur_gLzdCgGPc<(O zJ}tP9*lzIeEZ$=hlSW#ZbOlQdv+^jsyYBi5mJ59BB!#pbL&Iq{+Q@f?N={w{ZL(SU zQ)|Wwa!xb6+K*4^iQY^d?yhADa)$g5+J!fBkhjhc#TY z339qKNl)*k)MLIoA(%=1+n>X8>fnD>NVz6Ar;Y=kZpGng$+p7Lh$#B}SM{Oc)<(Q} z+O8?oO26fjZl4pOgNM~IUFXuYN0a62V#`7JpgHu|7vpT2ngp8?k`x48LOiMV5?%tB zpppWDy<3^j+ejfCZ01z;xBjwK$FLgpDU;^Wv0A39v3$fu^*xcDHOo><4?VHZFVu^-V0pNdQ*I?|+C5h7DCY;j!6oozPw3 zt$3xJEiaj9qq6|N&mA(rE<-inagj3MSffPz6iPI^n`uyXJ$$}#n{7BbFT26%uk!An{ z0i6@XxR0{xIH0Y#b4vH=7iiu>YmO_mjnc7Drbrq6t*xbB<(;P$ZvOX%W8r>Jh#vAN z(iIqp5b1Gpc;!CZE!hQgY3faChUS#858sH&DP zlfzDrO*&jxIoGmf>gF!0n+SD^m1%zCx*Oem6yFV#CFB-Tao!ZHNo%tfIV(9GPI46H1sRYV5&t`?nlt2 zI!;Hx>t7^JFlq}{ubpCaJ)5ITN?CgQf47l~4Xz7kkRlmY^ai(p zHU3sRIUg*P=%cGhmoYmEV*=TG>|*DQ5%|>9+jq#q^AL>g+Vwb)^GnFrPYs;nz73ktZXrR5k&!u|j>4<7`^$DMvq#{S!WslJo>K*#p|>*Cz;12KTx z$5+8??=-dj^?47Uq07_5Merl@>Xbgdv)HaQ{ugJ{{82ThpQl6>m*7u;7~5vJzJQQj zPwsf1v9VsF$rmU-|N7IKsU#?@lzG-ZUqFG+-0N6&wy1m1a8n#4#fZBJj&ql@^Ck#< zOy@M$wwN0klv{wa_pu}|;NC$)-B>TuK3p!hk96w5#7KvOq_s6Cc_+gn2rPTRr--df ze*nj!3mCE=V1}Ok`~>?_DKnj~q4JBTpv2#?7aL?WCk7s_c8Yi&RxtA0fgtGT7v-D3 zU-hG7)l8TAi%-{+g3j!TMnAhevR}k-1nT4WvjgGy4QKw=ckXQRG?E?H70()J`$PjE zlLxo7Tq4idm&C2Sr%*G3Or=uVDc5<{NHdb>hYBD=3V?2qlNr<`V=-V1e(nu8>#2t( zSSv)iT*s<@++iQz`OTxB#Zl-{oceZ(*Dxdp*`w+Rb`5kK@65OK>=4(k zc$+3x+*5Xck z#h;eC0t*Gn;(tG^FE06HYY%n`o$_%G*Yf9XwmcpA0TqL@f&d|m5PZ#_kEv-?hC=Mc zJsn>uC{!`trl(f8{IR3_hrso#?su5Ao*pv}DgqbCgMYE^`2JIK`!`?($P+n&ZtyfE zc7~&ja8NmK$7ChU1Z=V-mP!l_J96T3>}fV!`J)qFg+VNOcGex7e}D2*G!7)ZB3Ehe zLfe}p{sE%dp1{s}GaVHU@GjdLvScbbzyK<$g5ARmOw4t2asA>U2nS>X&ES!d$DpB> zJ##~)slpc>YJ7zP{}oNVuPp75M9EGVx>Xbae2nUp821ND1XNj+@lvb8Mx|{W$O#K` zzhupnR2iQ{8DHUNtq8zx5WK5w)rxps#-(OlC;>h&tI6oKL9$wdUi4S|FUh$E{*Q$j zy>mu%Jzto|O@2r?8du19=&n#=#T9%&1h2CBuT3dO&<_`3JAp3_F$suYIt)&|&QOQc zx_tiY-9Pxx{)H$qdq{0Ux!WimwiiQ1?P&8Wng0ZP|HZv0D9x-k{)Mg~6*r zdm++|a^>OrYgSy2u+hWzxa7=0A-%qnZQ*1$mD{>4V-Np9Hh)^c}g{$QuB0Ff-q0`(!5^HQr|uB;b|L-W?1}gAN6lxRiIC>UxGD9iguIJh8D%YQ_~2t2)}@ zKI?_thl^fw92A0Hl*Hh0G5p>dS+u19{y_*zNOL^+6tA0?Ke=K0v+MwOjEaG>V?WPz z(T%#oLV@}2@`_bE(u`n|`-mMIMj+E626A}0)$TX_%Z0KIvnC{Z5>ttk2aa6q5~<5K z5Mk*0B&>NV*^!zV@bNar*x&X$lcQlGzslw$0n>iSdiY3rI3a6&;T> zc%3hjKp{4V?83($xE;3cyrq;bH@5CK|K9s)w0#8q+pCVRcWl+7&K-lzY{J|GuMsZ? z!}<}-r6*X?N_mV}7<<13$h{m9Ib&U(iqd)=e(UuARASM7v>}`NE#U%(Ote8Fk#K*q zC7DPw!z7hm0#X$fOg=SFBH{_dzR?^QEux+|B-Vm40IXkyp}Y4#X8b)EMy&*fn{pOQxW^hTl6i)8+-3vUyU<=cL*gf>%r9 z{tD^8d{pq(pAF% z@3-rmozS&yU=tyJeed2|4C@;*K~3}8-nHa2O#TUfv}Dux-o*+s&z0eLU!z2)i_?Tw z_g=}6v^XtxpG^tGD(E$!_Edl3yO!u4ub#x@A|s5U9(U}bo z{?J+684#rAHqa2FHUB-Cr(8)$P8`|$IJ&a--+-+NbGxXeWIaQjjyy`q55IO4Fuw7G z7ZesHu4B2!E#q>7Se^YeNy>GzH=Ox>or3>CA0mOCb>RPXC(~fNh*t3`H~72FdG>Mi z%x|6Lofm$N1EJ8D3FRqLAntZW+V%VT(p7*tbU?>>V^ui?-n2ftr{0jQG4lX&YCOh> z(C_`ENR}bBbO`le|$69pCpWW;Gu~7>~2?8iEQHCUcmJml2}$ zdkhuLaF>~?4*C9-H|l4}lO{dq0=~FTLEnJcB7O9Dod(?_>~lhSI34mUe0&79d$oZw zN<44!@wZ$g1l4O1rzp3c@^HN5cOMYLWOiqrr2T~k00UGQe9txpo?F`g|Cz-gA+FOv%`Okz#8(Te@n^9yvcMuydL3_K{0aBhmAHadMg_3``+IMP24?->2!* zUys}M*6U`~YkmY}oL>#nLL|6Qn@fz&s>${7mVa?3W6SKDr0${eryuDvfsz0J}ksj zC9D+p^5x4>%hrZS+g!g@r2SGLO?^GmgL!T%J=P?O*1^In8ajZZ&_qerq&QNBMOqml zy&Hx{6Rag)sDyu*oGx!FrxiU;$5LekMQ9~eG53}6JYnj~LiqeL?(ee#Av^R zPuSwjm_>aXpVFmmq`d2)H42j;l30wFoES~?(%}RF_8HnpBI^iEQ(P>cqC+`Hb~W3T zQlTXC2#8W<*sgQPj6PDN#X5c$ao;#1ePL_4uIabo-A}Vxd>`q}x?(7^p_>j&h3{77x8Mrz{^yM7>j_^d8gLt2(I$gSdUmGdQ8lGTt~>J-qX%Mb+Ddz)$tb%kjrSl8cIS zU?bTj8M71tzpI6bc_I3gA`Ee!bNSN#)5#Gs1}6pc$ZiN;gm(!-!rPo^R1R@UE+6M{ z&1g-Vj>PJ!w_4?7t`$LRUsmTX{zj0j&wV9D3NIb9E^9a%&=J+A7MQ~Dn#AjtOi2l0H*3&Wi`U4K`l==P8u@xyFvGRTwG}O;}<16AL-ADD@ z<@VgU78)rkHZay#qb_{fVjQ9*J8VYnH1R09u>D4GvS}`bcBwAv(>>9;&K(A~9e#KwszAPW1v!F+9H+I9!vc}ro zauH-!>&UsN_>XLz)=Wtk5v766tS|)p@IweXzs$Y{d^Im| zUGC$F z2?*wYejFkokQ7Dfe3A{vNE()Mc4i0Ka>dH1K=1<$WL(K{mN=+#!$4#38f@3W0wpNH zTy!8WMn;T8g%`90rFVyJ3`@E`}4NDY;CFZys zN8WNI14@}MWz2qR#6pv@RB$OA{=$N7cONL)$?M7E!arSJ3tMnL<>yAQ_<9W65S+BU zJg_aVlP5QZu{RlsDh>5Ujy|~nRi>-bj5-e1R88UIdW)H4-FVG-2Zb$l_+OtwTok9u zF0}>zbvDeQh^i3vT*<8@t>j45`29%_vX<{}&dOXi?M$^W_+iWpTeFaJh#*hAtaf&T z-w0+(s0Buc7`+D?0xn&@PLSIYdWJu`6}E+U0FJM%?u9y`^!W0me%<}Y?%CV zh*R8X39@0|zbnW|hp+($KP@e-Rvy;iN*e$}&+m!?q8vRNo0mPUmc1=EQMp#7FAA@3 zk+!<}R6#l*`=!2c>Gs^q!5==DA_!1fx;NDOXr&KCP_%S(nqzHHROxjp8g`RdcAp=J zZN!dzI@Vvr+M$j>+|KmDs;rhLuw;IP{A zUKpVa^P(tApcrv3cCI2WCg2-|faIRnV_po0JaP(%%EVh|3(K?btqVAu;$dtJ!E&61 zHG3=GREdfToiEX$@kg^)$q5Y=Ite}VWxQ9);jvmh;bRyEzBhrJieP&yG9BIpdDVkO zTRi?{oZ}@?peF)5J>@peEvwK_lPR3R>{U?UA&j?{%TiYTLjLUH(%%EL0S7SEw)+-) z*b!!0oq5>7Tl1sFZ!p4Ae;AVCNv0IcM?-DT_NR_5Qq$Mpo8B;}n}4AIa%VR4ab6pg zO$*2*a=(Z{Sy`2+!Uh0^leBa|SX3xE*B>)w_wMLebZ|^fpIYdkMu2&%qs}0D;{p3k z^b*@w_ySqf_=4{IyPYZ)2;kEOb3d%-p->Soo_HNG5VPy&wk;7dQe1Tn}G2ai)gIMB41r#IRvj*`-EcFc%0}|5=}`-Pm1P4}5jV zt-zU`0<_8)82g~aEcY|6vbVEFoec`u&MZR%AXyny78@Zfzg^pOA;$cp+q-@hGNn8_ z!Bh>Lwu_)-X`6O62hs#xq@O;00`#)z#Ka-s zU`~mlXrtxl@ofoXx1^+Gp}_)?lZ)$xn)&*5SfNx@kz5j46T%Varys>zS;tGjcrYHw zo>4F{p?J2F0&zS7UI&72Kr%z|g+2zJg4#c`Slibp`66k!xVQ-TXn^uXz+n!jp{bdh z&P9}fgp3R`5$2w=KZB!tesR&@wxg0muLdp503mXtT}z-lCYdVtU`K@&`q?9?&YzJR z7nrMIr`)!*qCWD*`%i6Q{S-GN8ZFYTF#YF`Is#P@d~fKb&ejH|>K6{xvVVXi6X|`C zMcCM;>3*>BjrUkr_8P{2d`@<5v}Ad>T5=7z7!W`5&Sbnc_+L%K-C@14&_^c@9v)t% z)mtF{kmA2&PBC7GasV5ThK5G3J5VGxE)HlMwnAXdRezww7MXf|a{N+I00nxOJt|Ao zz@WUS5K?uih8_HNIT*KV)?;pJJU>4N?pI>`xLM4MjD7pFRqDpZiJ)O~)-Hn%sCRLd z%)9}{cw-rCUQ3Zc1oGj0jP1omDiVYIxUmC>o9X`_5~%Z?u$UM*&^sJxb=hXOnJj=n z@}x~NfBuEoN&uNcy(T+cf=Fm4o#qh>QCg)CveCD{e_vxlCq?b5aaKjQM8o?Jtb_*= z&xm4;VkuZ=RAo5`YZ*h3V~Z#-k+BGI;gj{^i$Y-t?4^ey|94|Wg~@EN>j>Dl+tlFSS&>{jnV03uHXf)~A5h*K2#M@d3@KkdXk{UW*ZJ#Pp z#2*+K;QnUBt!(i^8vT)C=Xtmg0vN#5fd1$NIgTxJT5b1isB&$ujyVT*8 zU-(rK{V#K!cXMLmmt`re^&tZ>-HI}86wsyAKIA7wkH}{#(}v4Q2M=#+;|j7eg-KI| zNbh&sumW__QNM@^7cC3_E9e{Kb$9JSAC>-1m{l#W=SI6ka?r-&h=9y?x# z(fkdE)LimCW~rdPdWMub2~-V#8`^`)I3!)MkRB~Ky}Al-Q(_#Wc__|R3r?J=H5)-ucT&S8!GP@C)ag3>~3uGJEf|A`r+32ddwjLV>ze+4- z&$&wB;_7`9G5d&1E$R`ODk^cvX6NjOSGi5!RioggnJSZz%|k8<%6?l;+v4UU#p}3} z<4UtaWT1b=ws(4lEQW4B&AXEQb2DvHr1-mDzT^D&2O-@BI2|XsS4|m151`r`8*#u^ z_h1`4mzYA6a|>rU2=v*sBf-JLD=I2_;vRR~85j73&#fHhp?Oj)TJ!MW4|v|bcd3J* z2%JkLVv~i?&+ai-S+2??B-Fk}RX7Xbp%z*B#E52V)ajdsbNmJq0@ZN-fp&_6FaaC@ zuim~z*DNY8fWo!1icURyvnFgL`c8^vqSR`0H)d=%$j>gt zA!*eyYEInjIr$&$0c=~UtXAg5GE>@*M5=_I6UcW8p+3V#MoUi|d)VR<=PAatU-YxD zU?!tH-?Z7_#@cG_J_g-t&J?Dx6{_2!f~jfNsm+Z14uX$9=TD?A$nRiBSU(r?z>702 zBxb6;V^J6px4-Jvk*+6Ir(_*U{}9r<{~XgwCFKx}4E^w!!3FIEZMYhRZVB;J zD&n7WCN+`4JQUFbxvP15r5PU)UB+C59mcf#dMnsJ`p{$Se90NWK2Zg7tb{%9*TM#p zH4Lx+hqbqkit78q#!*0#l8{a*Y3c56rD14rkS>uH1nHEPR9a#{V1`CON#DYrSjDV!?3low?_pv(Mhoe)h9RdIz0_OyCWi^6Fv{Hb6?uWu&*K$M!(* zA440emiF_f(lZz^4)Dm=y-=fb^U1Aa_1xraGf;6;U|Bugx^bL^9r0z!ob<#eoROdi z%BWSmSY*kxj=r2yV3P6aLF(mZ6#vvk-wo3=b!g$?`2gQk1~W9D=~1$-bIDPA*?(8L z-YSh088^E}T6=4FOiYN{dS*G0PokjoQ)M71%1tUqwd-z8Cu+4hc2J1EFo5R4?Fc|e z$Wjx)ByQW1FVHI19#fW)33>s^R;y-B?8(Fq0Yu~Xh&~cnij=hlH;CAK+W7;Q!VW*$ zKONY%kF;-=;f&ijPvYa8Mh`Yh23R1!!THLsOLm7jzdBndzj~;Uk4V_=KUFbs40j!& zshzkWARzYkDi&%OM=fHK8W9(#czw2K&ryU3y+^GE|CEFmxcRezp3nHSh}Vp+}DLP0AtSJ}2*G za%i8S21*@}*6JTIeM$}mTelH0XX*#h&@%^@`pJb`{8Zkf`wbj+G5As67w@GoUV|_X z4}$|$l>U7eLBvBEKRhZCcbC5d-Q<{n7+h`Lk8G8>%A2Q-8zufT?-Zx0`9n9vn3Lqq z`mew-b%|3X=T!dn#Z0*!M}(?@J3ml-RdjcEZ&nB_f`DKMd6)rvxs^j}8}Fdlhl2x` z&ogTc>f>OjX;i@nOX;Rtm^ziOnt2`n$ti{0@H?T>)XszNXGJGOe|nDF0e+Cg^)7FjQ7tZz48A9? zsidLN_3nH=3}_x)B9J40aWeX%(rI2KQ!;@1iF}SpqsJ#9SGoqzebWup??vk&_V~kN zV>-wVzV;JkZJkjhz(*PW{?1n|QwSd%{Ps$`uZp@BlpRPj5D42M>ES>atre6ny!@1c z{xL!k11*Tc%TGd%vx_yZ8?^%0N}m=_iunlv0Car-z3&B}D}w~gt#@RIJkiCZ)&6pK zg{fTCLj;eQd>*gG-)?)?OO-Zt+m?kNs5@F*qd-JbPWAPA+j=gv>HxJ6`gWKH?W@TH zEE2|Yh@MmHS!!uYJZ5xCIWEVW_i(tigcoON&D8z80`5b*5PHaN;HX0)ZoG z-T{uhO%z+Qi*M6eh+TJc8DX}V8%TFh)}xOpfsYgW>Qx^ql^PF*Ev)#tpxH6?U^b)3 ze2*f&Pvc{hxF0Zs3v$!dFXkSBDpw%fNU7$O1d^Y+eErUXII_Yu6e{3bh>CXGd_jVH3zgnEs8DiL; zG1~yUJKm&?%ta>h^4C^M3yeM{8?7Xtefdr`TyNFX4M7nT-~x5nlh!i)Ku8!=OEEtY z5W=xVq|`D+l%^Ez0XzsOSWDR7qkZrIBpX0+#gemxzvlxci6hQvra@{9fqkLaJzour zkvi!*Uo|uA?MZZ*oa^>13xiCF&ml0;SgXE2yj*Ez`J<1JX`$_}tS_6nU&+v?|Ip@75m$@HU_WPioqmFc(SFk=FbpDrFljJiU@DzMPD z+bt%?he{>~&rhO7gX14i>o!+@6fRrJSwb(`q`c?)+FWO{)ul)tSRiBpOjEwqwHLA! z!RxHElUg190SeF&Kv0}p?RDLL?CAjQV%S9Bak4tW_bn^&og3jo8sQ^@Otj#amT z$u_Eg0NqSUFoL-K{v4A^mbC$HU1nigYzS0%2@j@V$KMmJ$6pp4u0JTGfaNN)W0YK;@F94=Km5D^}sMay7t-$e+F2{Xqe?W!F<=j$g| zl*K<+T@TOL&gpsR#;&h%+glw3KC~~t?^_cgnk?h2+p6`YY!{+qz3`K$GcLE9(M>ND z_ZK)sOE09_TRHT)H(oLw28L)j6a!iP0)PoA-K(FOulL(Y7XL1vI>#tr)d0ziy~Y;{ zCmv5q)&Oq%lwbhgGUx0_{+R-)pYbjtoYpvk9F<+!v)4 zFpzsmRtmrGn7_qg`89^1gN<*=4Yi_xUj?sp46VroQjPW?inP*Ay)}j}Mj10t*UNf5jhFG#}vA8EaHKqV~JQS7^1` zVP$$MO<(>j)e*WC1dxez!F@eZn#*L&mma3AaCQL+OdS;iN8P=u;lMG1FH*YmoQ%8o z#(1=4o_t;V_EPtqO%bZ6t$<+&vksei{X!TYp%6!&Zm`T-W_E#lN4mZ5`?2q#JSZiV zCl~&egaR(h<*+nUP#dn9j~kdqKxfAIkg(Nb>zCz|Qdx`qU}l}3wr_!>Bk3K?A>SMN8L>PimjEjRRWJ3J9^)RgnyYQ(WPG#=gCnRz%ZM! ziF^#Jn@Nr?#hPyByrOAl!^GzPDOLkMLP}3H&~+P;e=fyDM2MP4y&7cgg$t7+18{T5 z?G?(@z`@4~t)Sf73SCEIoyYI@_#R&-_r513CCoa5S~&RXi=-&}RBS5Ul`CeeGT}0(G55ZWceOZ~U)j6G1R9SEFkdF1&t3gJpY!zC8 z9bAY-Eu|8A4r9bF9|?G548g@ue_tw=+HpayVbw9~bS+vD$TW)o2#@ytCtvMb)GGwI z2-?S%u31bv_RM0nzOWX__#H_qM*IZHwDt4c+OI z-?J+0-Hp^Qxk)Ksv11w&lfW9o>|h)7SAFVQr2Fny$0av^VQ(EqG10AgZZH@N{ED#) z*h1(Gvve9~M?W`Vq)^C&^A;;>-jlV4rJ3$%-Dny9hpw0$H@dU!;{YXezLfOcr&{as zF1(ab3Wb^IGm%t2K9@N{I%34&%&XhgBXh5^yXw{cT=TMV|H7M%KjPJ%PM>IJ z?R}fA;$Dj-I4I{cM+l6rDhGuxWB1%MHg?uL zhq}q^o$hJ#U@D~)sSS=?sdcIv8A)hiIsBuw`j88bn6znK<=iF#6*B=eOy1=kA#Qw2q!w$ z{OgLmzIGYahn$97NL8SwEzh$TL@Z-b67#KJ=jvR{xprl9Oo4!;0_<1tO~WWYhQ4%P zM0|L~mlQEb5j|;fnrn^?G_Ax|K0$j_P-Q%eMLS0;QEs-bPSdlbNcU&mPi`(cCioTG z^LC@@I)fJLd*82$e80JCvhkZ^$I;*$}9?<({n7CI3B8v*$?ypFM}2@ox%JWAq)zq<`*6 zrSRiFzhHk4Dkd(7j`BmzBY=V9V*|Oj!d|vDJOS@*J?KJU7C}0AJ7c2eM4pt{G{
    eV5K+Wkbgn-lCaH4yAxf0wh;NfW>&B9pICh$2e62Rvqm(^|F{m#?HTye9eRHyZM|rnaA)(lXE{%t#iO+WwROe_==}xW3o)zXCuxAx6M@UMI zW91+gGja$`5_*2CU*A%ucK%#qRDz!SWeklp;6QNEP$0vkr7}U;(*3vHG!XA0g6&0_S8fI{SZh6sjya_m zs`^skh+n3c;SY1aZKQCQ%O!^sGzp;GFIW8OuZ9s zBH}g<Et&UZH-TZi37az0P-fRc(mzW2`~ZZT@S>#7UhU zjIq1(SWJycTZ3$3+ozJ915FtZEsX?CIw@@v=yxzAD!Vr}7D@0~*rhy_JYDqh7jH6s zUZ!WS3kS_TIK4RMhJGZ)Dsx#-)q-lq3d{C}SK{!)OS9pF|SBH16q9cH&HMl~i#_N6rm<3Iy&bn|=ZM||RBowQ?%_xo6;n2yD zY=H4)wK^=RCDqZm&|7V=n0jqL@UvvD*$oLBc$4$omU`6psRzCEg}a~$cdqrXSX+8+ zoKsLk@n+zS@Mp8P>aew;w1!IBt)mXNvGH+0;v}0$&&=%bp7b_>__xq#6jiT7*b>-Y z>g&HYh*}j2Znx;?$t2_!4>4()l&pgvf{s!^SawHwJ`< zqrU6Mlmyxb>GtN@X$RtE7q4DgmK;QYpJY(mm*oW`Lsjmy$fV`oF%`7?_u3(8Y7gR- zUUk8LEFa)}$Pb?=IblVmMaX?rS#zqmsI6!U`A{^VmG_Z$ zomA3yC2Fd{{b?ErSg)^4Hx=>FqT}M&B9iAmja&MldPaGxPB$Bf4T8ovxehQ`3JjXT zsDP+3tW9<_ccBaeHHlS-Kk#|On&MVhN+u?zqz;w16wT^jsG*vMhDOYL6qmw3U3#|9 zO}rn+aZcsl-0=_dqr7j<^VKvnGph-V@3+Rs4BHrJtv((Gv4lJTonO|vsSdzQ?g z;Y>C$IhpFn`a9#14^S^A?-d{db4DiTrJ*ZKsa)#ayLZzNFqqFS2um31bc|zSVxSqA zU~%kY?xz$W=<4s|;NU>*855P8o_*J^(X+C$nttR;7vHM9^~w;!rp-1yG{j{EL7w)k zc#V{V2LzM2Uon9pSSBYI7%Ft8MCAe^+%SOU~rm1;9JbppS-@5p@D`VU_IytRTN?C zhw7)m_}{^$gdyu6$<)==8}>K0T-9HwsoK76Y^-E$Dk*!V5sO9r6%LxWFh`=VR)xZ# zj0Tk5Psw9aVB>p#y0#DO_yhz}px6p|nyp3#s{Wk6?G4)}suF~~x25YL8zvi-OihIj z9Mg5oI)a$CJ+8@C*u=nJKoqtgi-EBSYBM*qHhH?5o1`a1$*Ibgr9r~Sc~p_AmxYOT zADZ?yBpM44{NKuA+FsuNt%75cksMu-Lm+Oqu+mbtK2r94M%^k;E@?cukV`yZwz=E$ zwOKlHH4nt%&b+TYMSEWH2w6!cj(*Kb{S54ppCrzg?lDSJ> z&1$UebkMZnDBIG!Y372JI!dz8h%H{}w+)rA>!UK+Z6EdkkKIm+2VL=@^cQ&-G+Rz` z&j=zY^NM-LBOC;xYGYeMva_jy{T9m7Kz3X*s&(r879jL2?G01m#MzLn7`47_!Km%c z*@g4)>?~FablF{`(y|lNVZMP#_N}Ziq`YGcg71SUeDUTZV!>+z=j8M>a8(Fgtqg*| zG^%lE`{Mj^SY$&itiPup5bqn{mX)7W*wWNiP9>XSqez|ytqRr6J0TCw5OnT(?n}s@oJ7g(E@M@58E)ml!p&GMPfqNypYvd7B0ZCUv?M>bMt*;Ky|zZi`l| z9If>&c~euzJp{Tkom8H4f%e((G*1f)h+-66e?L}qS?eV_5PMuP83po? z7VWfMetQ4m0)*mhdY*6CIQDJ+bNTnS9}-_Bo~_lIb%7#mpzsXfq$M&Z+4;dK#`MetV3b1iM;^`G#wni8+g5DPvGVRVFu)r<< z8dfP9b!nV$P;ew-Z4V5*M=9)vmipW*lsVGI$qAVk1bM?NN|+8SdhIN%Z}WNn_~K%m zzFAhuaRNgQ0zq`X;QM@{+@#b;5sbBoLQB*4mlFEr#%;rSiiZm>Prm7Wr+y@jm-M*P zira-f>g;lSc6;^+pv;mcyYE|W$74u*-j#Y(@d%3*-`xIQ?Q@U1)16#g6!QFVrpm_W zZPiv(H0hsccVDwHgFTDWx2_PoyDB_bhLnm-TIk9BjQ$_1r$2PNbYgAzBDr@AVqIOq zV7b42%M#@gkt@Xiq`BxJmA-inMYDbX z2pczgs2A`H357dG)jYM1n;%lyZZth&PE)?d;b7`r0)o_?OG~tJnmX{%urO|L94xA4 z-EJ!yn0P2=SQ#{G>R`8e(9*_6X&Cs?va+(IR8*ZQAx3ysPBxdL{wATof$x2SYuG1d z+f_X%5fvYgFAp3&Y+PJRKR-$%VkhaO2v$g-yHqOi;Bm?Dqryjo+3(H_qhn*&ZE&!$ z&E4DxGS;1YBiKGZ+T?jI6x)97C8?-NNpv{(X3zq3R8iak8U;W#YDy@;O2fEK?PV%p zMX_>N$h9Irt*1x1pj$MfKNpMvumKbz0>AB`9~zFrczC-XK$Dl37YV$k zA0b#IAJv$UCTU!}L=k+;@y+1BfBkQk9!j=OO&P@Md3p*0uOWp)yO!wG2FgP=?t2AH z#l`aD008Abl1G}Nx%xMFX!pRp(acheV@U*S7Leg2cJ}r<;{tA0Gk22Jm|V|x4L_+d zu|wd@8(xV$`N%D)6yDI-c$oP41}*0$bN9jC_I6Oeb$bvxmJY-R`-={12Ffnb(0con*_L44qjfYG?s>S%?l;$LuGK$ zEiL?DZqTclfl}cvnXS(6kdEmYlQ~G_%q+w*_NC_K6c?Ah>B-}K1$Se+9A7WqnHChh7Uh@5b0hBGReOuP>pG9U^z}n9 z$iQInJ|P)A7LKy^C=_u8d2sBAnCWF{~WZNvsMWG(25t zIUW#24;y>@_;DWC-xYV7cAA`ETfq3c0`g3d>~@7oV<^~^*KM-iWNZJ*a6|atT`!XG z`GGEhkwDC9!zSx(CV$!KdWLgJf@m6`qU2OmJXhR_zKymNBOPWvq1@ct(-lu`{KRP@ zyN7`LA7?B+X)+u5EExx;lCBI)kxf!Knc>l(6IEs*kutL?A>Q*&Bz* zcgor;zF(Et#gyOJm+OPsD|UBt%x3~R;#pmOq@^W~Seh9xt(%(+>p66tB7Fec+cSW> zvyk`w4Exzc8*WFhtkkheN>19^nN1xX6Wt2>_PuRZtbygBnxf9Ktv_Q0{^H5m8S(7^ z*tC+mBIlxtp4pCx6edk1v*{-(IKvRXEm}qqCk$>1a8A>vuY9=nRQk@&6(vu>Qrftj zL%+2Y@$EQ@9i^Cb=YVa|LDVGwlGtXwNY5(*U~(7{M>u-)P|~<=-5w_v z7`1a;dEHT5T4pA@&F@~nlVQb@>yDqd{30TepnFE{;w9h*>4t_;SF@Peo14?Veif7r z;(RXTMrSs3kknUNTB`b%D%!^6yI=igP(FABK;j(=NZ>Hwo(FZ&0$1>9LIhgq!-uYw zwIq3yi_ib;KAxMBrd)A3q4OWIxbcQ4{eGHmyb{2$LcX?{s^># zpE|nqKH@^~cvrWOp?owausIXhvBMV4(tz$oSUdCH6p!qX16OTb${Uiv(6;BXVRM;K zFiHMxcFzWP-7a}M0(6?Cj(euhwl=Cu++S`C(-PMd8_X*&$7Kmn89riazJkxK*;cYg zU0wO)i?J|l6B_*D3>7SRQ7XZuOH8e}1^T{;&TqDe@CRQPuA@Vc{zDVG~;~uywg=QW>uIHfwQ33ONnA!JOcby zlKyfE2+lxg0=>Y<7F?w-&3${+?ZvytC^rHDJ^6HrJzwFJJtMOH?<8o_O$6ah2PtYv zaQH6rt)1;{H~3srKtS$iqr*;MIk- z2VQk4c&+&{Q!14FnomP667qQEBBIqF`{(U@rzy>+W^EM1cDn1GJbDjst5HF$El;5e zI(~v6=O>T0_51eS_a@&``5waIAOsmU6^`l*>grNpNXyS%!=nsEL^>+7Ilm@>=ITbU z5kx%Ue{kb3$&}VpwPH!Cpj~PZwB*saeCpFSMasUGdLQ@wa$15iUprUtikrgrEZs5P z`!takEQ!59*LwmKW%qiX+Vnu{$V-Rq_d-T@fhH<*`UP+wf!s1P6cz_3mA>O4PDSH>ku&+V4?rXvO8zu<4mCBfgG-Kqkr%uY!^* z828P!cYVi45g*z` z!_A2az3~~U2)W#Rfd)|B~L;2a6hb#be*q-(5Z*Fqs7reeU0GL%}3WIWk z8Y{gkKAJT16?Ehg zo7;weB1Nyb4zwl9=UeF=9s%Y|?=R-HPv1*Cw6)rMb(K_hEQM6HNoFObPHK}P zCyNwL4q=d>t!|FB)a^*sopXnUrut1!_}_V(`LD?-e$mFUAS~0LA3DxZwN2|^PjI!J z4^V&u#7e+v&Oobla>l48#aQqa2Y^;UU)fZ4S$fE&YrQci2wF;B&3`IK#2UR;>f1QB zxI9{ec7nf(u1&Kww6zIATV?GNQQ&-6Y>SY37r}ui9@FO_V0HdyJ`{cwx3#;g!(p6O z0cd&jw(2NgG!934@V-SnLA2prg-r0l zjE5BM=6>!^NPK-=_qKKAeprMPt;+%+LXHUZ{C4pbvvG9pUV-)vP0e8|Cvb^~MfdEK zW_DX~%SM?hCj{$m%{@20y+7@v#iJka+dyT~;4g@#5L619Z`?c=VA=$?uAVPdGtOZQV zjw9Di9=b5?3~DX!by{wIqv2uRxz{!sq6& z8_Q|1$@km|dX70AJk&TL^|!hJOk<>{h+fOR(CGOb+@&r=fxsE%qD%0*CRh2O-#V{B zlb7rCpcm{yor&=KWxq4=9M9$P=ewruh0)Sv$&#P1c$Q}u|9Z4JMz5kCk86D=Z1p~5y_DLe9`et z2NJ0Eg$_1v@6o<-%p#kxv$Nw0X7B1M&7DxWP{nT>bl$cqh20Y&p99Ie<(B&%_r76$ zW%~v*=j&z30zKA85QeNfsUCZ3{TQfIyWDBgx3faJ{=dUj;L!O@7_-&#B78ULe7%H%8pKAbJLr z1i%*tF#?~Upw(bD&`DVi(}nzno1I4)6m-f}zHZN^gaP}yJ6rqs`h34a326y_c*wGK zb$r{8eFxMEKt3Q6Ib|!I7bQ-nudr>wDiwfR%n6j+bndzCHd@hu97;kD1Nb>JJA1hF z;qeMs656)tBLHrO)#!Des1;}d=F8^hW-DM*M+2@`F??I=ZG-R8F=EESaSCor_`dip zz~`~n2S3LtQhTF;Huo>#+nraDh?%`T{&yY5w0NyZ4dZ@mA{f8@#1h5g#RJe3 zweafuf{6}*82hdJh7%Tb0oDtAM?kGXB0PdEm+A%n>!~@^a++xET*62kck27Q>oJcS zLQOgO?OBHK`p|foR=+hb=y9SW@%tR~SAD-xM{$YQ4HUVV^J+_1vXmIJOQ=4J=if9t z~?e0_~kMPK)ay!n)So!yilp{&yW5(ax@Yb>y)skj;^_}7!{_Jf&j9Q+(IitPuMk0 zjY%kLfGh$CN`w3ai_zRf1NOX=ph$y<@gTMV9IlZ@qPDK!Ot$mW{MCgIszBG${+}C8 ziIf{stzsQR2*9^I#g3g(3JZhb?4R7mO>!v2tBaT9qm9!b&pJi;9^dt8>xpIi_;vNV zsC&d%x@?ZSHO_BZHdrGjwtv~pM`X^qfE5^u(1Nn_87mu?j+FM!41Y6CKr2iv1u_8S*cWLJ#&l~ZswJfq zaWb#?eo04$yJZw-B1eN$fpbo1f2qN6aDu;k{s=NfM1li zy8~t5q=(w@aSErgDV7=^zi!Zrt5t+*jq#Mb;i2WQqpAbl1JE6$3K5;O>@d0FZF-Io zXJ9RDea3+>OAX{EHk_NYcv849rkdlrnn#|D_Q@&;Zmx4An$#HWP#x>Nn>8{nOzyUNp zp>);9l`K%m_zb#cL&nWn_)Nt<%YL}iJ$Ve0Wf-Hw1hwg>%-$&K9m;uL4)#N(f*5;% zoRrD$t+Li)>mxV96(J|PeiG#tJrQmHAI$a~F&w&TU(&++mR&Z<11n8xdOw~~iD>*Xz)WI&7zyJ_$_SMut z3(^98Ny+7PAzWnv+pqCypM^MA?J5{4NE_f)J=;kZk2ru9)9(_UPzMX-&}ctm$|zA% zefs--v#VX(K-rFh;k33BEyGuwILvP*ruUuA?Z!-+F3XPUJ>B^oQXO@NK{y6%Nnib% zIjO?d_~3KddTPC(OuULEeb5eoxXBbGf^`5iWGQSUQqGrJ{?$n>4iILE#w-nqZNKw? z=sg~QPC;zt$^F*xE84m&?OG7_KDzz_wh`86<$PxK0GeVgL5NgCiYdm!fqz~);qu9J zfW42Lr|6i_GkXKrSHB50lUi3B+UkHEGXGPV27zB9;x~t;eGa3tmNbVn-bXw_ zUH(isoIzP@rG)4#$+v4e-_!lA`rz|(I!=MbuVDygS?{OK4g#em$3e6@CaP@Z5L;-q zA&~WA++q}tA|FTs&b>BdQbxEchRX4K52gIsCh1t=suTZjdH6~Ds6N!WWZ!!Tc zeWYc74Fw&{$S7)C%$7){3QhV`Ji~8~@%vJceBE!3I|9g74Ar3OR z|K9_C*@4LMzyHOs)RSFDGD!aOswQV6y7!+y#`DEDyRSlyhc=JtHs8``516wP$nGDI z4m`%zzK0(Sd^Fxa27EMGF{d^s-sZK2-1w^IeB|vt-%G<8wBMA7{qK`0qfei`WH4kquMiv?miyLcK!W09-XsBMV|F=}@ea6((vMW9Srg{(C8n z4@8tB46wxp+q<|9yqW<~M2G7Q2x~rS6ns=-pgj=t%6^Dqz)lRBIe0ah*3JDfJT$sH zAM`I<3Es*c?>l(0_?J%NIN%P$Hl+Yl>X-0LkpIn5qnZ4NL8}W&;>1UH?Sa>{hm`*B zs&;DFpZ#lQ<%T}``Ev+wrIHj(Vq{ZpVl42BSF9{kmI6C@=hROO$jr>r>E+jCRoa6%893`Z&ELej zpE6>E2e*IY#ui!c{}5y0G~;}`lAWcyvt=UQf^&Cy9Jd-lbLXbFW2$-S3CN&=vK+flPW=H#ZL-=mY&A zY*ZQDGXumCA61xit;fN)2N_Dp>}=cA-jXnG9z8us*97+M=@A&LoXJ0t$38i4e#xrxCHA?!pUQ#ORE~x-XVs=w(?FDY$wuA{LvD2yVCE3S;q7zH4>&ISO&5w(D z@ZN+z!`ZxtX7wsoV&-ZTVV|$Be-&Qcw+co>3F1^m8K#J3z!H1WLR>q*Xcs%g8J9bIl(>L-#1DG?N}d-SzY&Lr&fgRi#3o$CtvAD z)Jyvg#SP9?!*btrSaAbX6%1A{U;Bg456$WVHXQX$|79uUVm>k`pF@bPqZnT|pm5hN zl@A`*&b}exfE%!Xn{hC=rFt)X{Oe_-)fKNHCW?fR0{E7Df zn0P42II_$8q%$htx50TY95}y>f)X7UL)5$u+Ou0aV1si9b{5l=&m0YOSC1Fo zIx90WJQSwXcm@nFL4@4EhG`M%YzjvcthaQ9+fcm7C#mJ3|6h!8DWvVI)37(9C_g=4 z)iR?2&lqt0)vS4cF@X>OE#RF9O1JC5!w+!t4N5CF%lnChgeYIi3|kNVV&mK1P@-jr z^=r&34WNT5ln#M#3Gf7Y@nNR+p|iC!kMaWkRky2Bkrtq!>>aPS`4Rf)c~%&jjvntD zRH6w)p=Z**ETDBVNlR2;J!xEpvTW=eLwr*le3gD-W2LeO z(qiCw`ELiH-%DU9E{p-wM974*&PHb-vyBD=U~FpQf&`E9wOF7kX`sp(u+b#(q_P$R zMm@;WCh^L)F82i3$ak7ZG3CF?;MH=BH^hO(KO-XYF}xE=u~K75s!_-qcQ;BVgN4fe zGl@H_t8>2R+&jg=(WX%%kWQ~E3gMRIj3)z)S}n)ywYlZE+>t$UyO>|>^+-AhR6gPksbEnG5obScXNm| zlFJBv#&kJ|qnwbmFrL=o_HNqH4maM0lx1M7M_=TJH4A$mUa6YPKCm=@L3#i4o& zF8ek@(GiEP7(swLh!!>)v7SOa?ur~wZYuAF@JH`Q*MeqOHK`Ic3b=+AKBTp6 z(X$WIr>o=*td$iH7$nuiGC4VS(T$g`iVe~eV1hJ10Ld>8nf zZx|l2yf&zv-6;qW-9SlTu<&z-cOQ&j{D%urwm*h`zob(vV)k+N27Y>`94)EbJ1crH z1+;n?m_WY&^au)n>)y(bm5tx+%W2{5tJ*&haCO9=Zy3vp=4v$h_ASbx`vcS0&{?W( zI(!g1gDKm(><)@cfn`N5sSSl^JzyWrtpV+10d@!KxVL;{Yf0glx4R##4AG9T8KcHA z<0ebhc%M225F82tP1G0*+6X!on4e|s>^+|6>u8lW?j=vH5gHs_1}k21lUN_UU1t;f zU(qTPY*SDq^K;HoKQ?v}Q~)_(@JJ`l&N9Bkj&^9WyFV}Z>f;Os#ImBg&bDLGEr`9j z_pqj{Vp9whIc>SIMBM;}*;VKRY#iK`i%x&!X84t(?aGH?#T7hoI2^$us~BPQaI3*E zK5p9KL0^@Q)SKY-3B41u=13_nP^$D9GZ=*nabc;giUmG=cy0#s8QGBBUs1Uyfwoxg zzzqb~XtP6Df^9O0_SdEe$z|qlW6;7fH@l-_$yNO*dl<>0xO(#YPlPusp3hhXp8tj= z6Us~mZJ=>uRT{9{*gGrIQ7hWGC1Cz0rcKtcI+)>)j*T|A^rK`_ z!@27Z+Yp+uwZvU^5gDEu3m#rxt||<|ua*4XAaZfzk8RrcAQoHQa)uWbC7~yOy+x3Z zAGym|(bI!%S#ZxYG9kF-@-#j@^SY(^P=LwuQ3-ZO=F(V!|4m_OWA2-&JªWe_a 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 faQ3#wHjYo;!n=1nzFGPW4!k7A +#include +#include "A6lib.h" + + +///////////////////////////////////////////// +// Public methods. +// + +A6lib::A6lib(int transmitPin, int receivePin) { +#ifdef ESP8266 + A6conn = new SoftwareSerial(receivePin, transmitPin, false, 1024); +#else + A6conn = new SoftwareSerial(receivePin, transmitPin, false); +#endif +A6conn->setTimeout(100); +} + + +A6lib::~A6lib() { + delete A6conn; +} + + +// Block until the module is ready. +byte A6lib::blockUntilReady(long baudRate) { + + byte response = A6_NOTOK; + while (A6_OK != response) { + response = begin(baudRate); + // This means the modem has failed to initialize and we need to reboot + // it. + if (A6_FAILURE == response) { + return A6_FAILURE; + } + delay(1000); + logln("Waiting for module to be ready..."); + } + return A6_OK; +} + + +// Initialize the software serial connection and change the baud rate from the +// default (autodetected) to the desired speed. +byte A6lib::begin(long baudRate) { + + A6conn->flush(); + + if (A6_OK != setRate(baudRate)) { + return A6_NOTOK; + } + + // Factory reset. + A6command("AT&F", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); + + // Echo off. + A6command("ATE0", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); + + // Switch audio to headset. + enableSpeaker(0); + + // Set caller ID on. + A6command("AT+CLIP=1", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); + + // Set SMS to text mode. + A6command("AT+CMGF=1", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); + + // Turn SMS indicators off. + A6command("AT+CNMI=1,0", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); + + // Set SMS storage to the GSM modem. + if (A6_OK != A6command("AT+CPMS=SM,ME,SM", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL)) + // This may sometimes fail, in which case the modem needs to be + // rebooted. + { + return A6_FAILURE; + } + + // Set SMS character set. + setSMScharset("UCS2"); + + return A6_OK; +} + + +// Reboot the module by setting the specified pin HIGH, then LOW. The pin should +// be connected to a P-MOSFET, not the A6's POWER pin. +void A6lib::powerCycle(int pin) { + logln("Power-cycling module..."); + + powerOff(pin); + delay(2000); + + powerOn(pin); + delay(4000); + + powerOff(pin); + // Give the module some time to settle. + logln("Done, waiting for the module to initialize..."); + delay(20000); + logln("Done."); + + A6conn->flush(); +} + + +// Turn the modem power completely off. +void A6lib::powerOff(int pin) { + pinMode(pin, OUTPUT); + digitalWrite(pin, LOW); +} + + +// Turn the modem power on. +void A6lib::powerOn(int pin) { + pinMode(pin, OUTPUT); + digitalWrite(pin, HIGH); +} + + +// Dial a number. +void A6lib::dial(String number) { + char buffer[50]; + + logln("Dialing number..."); + + sprintf(buffer, "ATD%s;", number.c_str()); + A6command(buffer, "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Redial the last number. +void A6lib::redial() { + logln("Redialing last number..."); + A6command("AT+DLST", "OK", "CONNECT", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Answer a call. +void A6lib::answer() { + A6command("ATA", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Hang up the phone. +void A6lib::hangUp() { + A6command("ATH", "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Check whether there is an active call. +callInfo A6lib::checkCallStatus() { + char number[50]; + String response = ""; + uint32_t respStart = 0, matched = 0; + callInfo cinfo = (const struct callInfo) { + 0 + }; + + // Issue the command and wait for the response. + A6command("AT+CLCC", "OK", "+CLCC", A6_CMD_TIMEOUT, 2, &response); + + // Parse the response if it contains a valid +CLCC. + respStart = response.indexOf("+CLCC"); + if (respStart >= 0) { + matched = sscanf(response.substring(respStart).c_str(), "+CLCC: %d,%d,%d,%d,%d,\"%s\",%d", &cinfo.index, &cinfo.direction, &cinfo.state, &cinfo.mode, &cinfo.multiparty, number, &cinfo.type); + cinfo.number = String(number); + } + + uint8_t comma_index = cinfo.number.indexOf('"'); + if (comma_index != -1) { + logln("Extra comma found."); + cinfo.number = cinfo.number.substring(0, comma_index); + } + + return cinfo; +} + + +// Get the strength of the GSM signal. +int A6lib::getSignalStrength() { + String response = ""; + uint32_t respStart = 0; + int strength, error = 0; + + // Issue the command and wait for the response. + A6command("AT+CSQ", "OK", "+CSQ", A6_CMD_TIMEOUT, 2, &response); + + respStart = response.indexOf("+CSQ"); + if (respStart < 0) { + return 0; + } + + sscanf(response.substring(respStart).c_str(), "+CSQ: %d,%d", + &strength, &error); + + // Bring value range 0..31 to 0..100%, don't mind rounding.. + strength = (strength * 100) / 31; + return strength; +} + + +// Get the real time from the modem. Time will be returned as yy/MM/dd,hh:mm:ss+XX +String A6lib::getRealTimeClock() { + String response = ""; + + // Issue the command and wait for the response. + A6command("AT+CCLK?", "OK", "yy", A6_CMD_TIMEOUT, 1, &response); + int respStart = response.indexOf("+CCLK: \"") + 8; + response.setCharAt(respStart - 1, '-'); + + return response.substring(respStart, response.indexOf("\"")); +} + + +// Send an SMS. +byte A6lib::sendSMS(String number, String text) { + char ctrlZ[2] = { 0x1a, 0x00 }; + char buffer[100]; + + if (text.length() > 159) { + // We can't send messages longer than 160 characters. + return A6_NOTOK; + } + + log("Sending SMS to "); + log(number); + logln("..."); + + sprintf(buffer, "AT+CMGS=\"%s\"", number.c_str()); + A6command(buffer, ">", "yy", A6_CMD_TIMEOUT, 2, NULL); + delay(100); + A6conn->println(text.c_str()); + A6conn->println(ctrlZ); + A6conn->println(); + + return A6_OK; +} + + +// Retrieve the number and locations of unread SMS messages. +int A6lib::getUnreadSMSLocs(int* buf, int maxItems) { + return getSMSLocsOfType(buf, maxItems, "REC UNREAD"); +} + +// Retrieve the number and locations of all SMS messages. +int A6lib::getSMSLocs(int* buf, int maxItems) { + return getSMSLocsOfType(buf, maxItems, "ALL"); +} + +// Retrieve the number and locations of all SMS messages. +int A6lib::getSMSLocsOfType(int* buf, int maxItems, String type) { + String seqStart = "+CMGL: "; + String response = ""; + + String command = "AT+CMGL=\""; + command += type; + command += "\""; + + // Issue the command and wait for the response. + byte status = A6command(command.c_str(), "\xff\r\nOK\r\n", "\r\nOK\r\n", A6_CMD_TIMEOUT, 2, &response); + + int seqStartLen = seqStart.length(); + int responseLen = response.length(); + int index, occurrences = 0; + + // Start looking for the +CMGL string. + for (int i = 0; i < (responseLen - seqStartLen); i++) { + // If we found a response and it's less than occurrences, add it. + if (response.substring(i, i + seqStartLen) == seqStart && occurrences < maxItems) { + // Parse the position out of the reply. + sscanf(response.substring(i, i + 12).c_str(), "+CMGL: %u,%*s", &index); + + buf[occurrences] = index; + occurrences++; + } + } + return occurrences; +} + +// Return the SMS at index. +SMSmessage A6lib::readSMS(int index) { + String response = ""; + char buffer[30]; + + // Issue the command and wait for the response. + sprintf(buffer, "AT+CMGR=%d", index); + A6command(buffer, "\xff\r\nOK\r\n", "\r\nOK\r\n", A6_CMD_TIMEOUT, 2, &response); + + char message[200]; + char number[50]; + char date[50]; + char type[10]; + int respStart = 0, matched = 0; + SMSmessage sms = (const struct SMSmessage) { + "", "", "" + }; + + // Parse the response if it contains a valid +CLCC. + respStart = response.indexOf("+CMGR"); + if (respStart >= 0) { + // Parse the message header. + matched = sscanf(response.substring(respStart).c_str(), "+CMGR: \"REC %s\",\"%s\",,\"%s\"\r\n", type, number, date); + sms.number = String(number); + sms.date = String(date); + // The rest is the message, extract it. + sms.message = response.substring(strlen(type) + strlen(number) + strlen(date) + 24, response.length() - 8); + } + return sms; +} + +// Delete the SMS at index. +byte A6lib::deleteSMS(int index) { + char buffer[20]; + sprintf(buffer, "AT+CMGD=%d", index); + return A6command(buffer, "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + +// Delete SMS with special flags +byte A6lib::deleteSMS(int index, int flag) { + char buffer[20]; + String command = "AT+CMGD="; + command += String(index); + command += ","; + command += String(flag); + return A6command(command.c_str(), "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} // AT+CMGD=1,4 delete all SMS from the storage area + + +// Set the SMS charset. +byte A6lib::setSMScharset(String charset) { + char buffer[30]; + + sprintf(buffer, "AT+CSCS=\"%s\"", charset.c_str()); + return A6command(buffer, "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Set the volume for the speaker. level should be a number between 5 and +// 8 inclusive. +void A6lib::setVol(byte level) { + char buffer[30]; + + // level should be between 5 and 8. + level = _min(_max(level, 5), 8); + sprintf(buffer, "AT+CLVL=%d", level); + A6command(buffer, "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + +// Enable the speaker, rather than the headphones. Pass 0 to route audio through +// headphones, 1 through speaker. +void A6lib::enableSpeaker(byte enable) { + char buffer[30]; + + // enable should be between 0 and 1. + enable = _min(_max(enable, 0), 1); + sprintf(buffer, "AT+SNFS=%d", enable); + A6command(buffer, "OK", "yy", A6_CMD_TIMEOUT, 2, NULL); +} + + + +///////////////////////////////////////////// +// Private methods. +// + + +// Autodetect the connection rate. + +long A6lib::detectRate() { + unsigned long rate = 0; + unsigned long rates[] = {9600, 115200}; + + // Try to autodetect the rate. + logln("Autodetecting connection rate..."); + for (int i = 0; i < countof(rates); i++) { + rate = rates[i]; + A6conn->begin(rate); + log("Trying rate "); + log(rate); + logln("..."); + + delay(100); + if (A6command("\rAT", "OK", "+CME", 2000, 2, NULL) == A6_OK) { + return rate; + } + } + + logln("Couldn't detect the rate."); + + return A6_NOTOK; +} + + +// Set the A6 baud rate. +char A6lib::setRate(long baudRate) { + int rate = 0; + + rate = detectRate(); + if (rate == A6_NOTOK) { + return A6_NOTOK; + } + + // The rate is already the desired rate, return. + //if (rate == baudRate) return OK; + + logln("Setting baud rate on the module..."); + + // Change the rate to the requested. + char buffer[30]; + sprintf(buffer, "AT+IPR=%d", baudRate); + A6command(buffer, "OK", "+IPR=", A6_CMD_TIMEOUT, 3, NULL); + + logln("Switching to the new rate..."); + // Begin the connection again at the requested rate. + A6conn->begin(baudRate); + logln("Rate set."); + + return A6_OK; +} + + +// Read some data from the A6 in a non-blocking manner. +String A6lib::read() { + String reply = ""; + if (A6conn->available()) { + reply = A6conn->readString(); + } + + // XXX: Replace NULs with \xff so we can match on them. + for (int x = 0; x < reply.length(); x++) { + if (reply.charAt(x) == 0) { + reply.setCharAt(x, 255); + } + } + return reply; +} + + +// Issue a command. +byte A6lib::A6command(const char *command, const char *resp1, const char *resp2, int timeout, int repetitions, String *response) { + byte returnValue = A6_NOTOK; + byte count = 0; + + // Get rid of any buffered output. + A6conn->flush(); + + while (count < repetitions && returnValue != A6_OK) { + log("Issuing command: "); + logln(command); + + A6conn->write(command); + A6conn->write('\r'); + + if (A6waitFor(resp1, resp2, timeout, response) == A6_OK) { + returnValue = A6_OK; + } else { + returnValue = A6_NOTOK; + } + count++; + } + return returnValue; +} + + +// Wait for responses. +byte A6lib::A6waitFor(const char *resp1, const char *resp2, int timeout, String *response) { + unsigned long entry = millis(); + int count = 0; + String reply = ""; + byte retVal = 99; + do { + reply += read(); + #ifdef ESP8266 + yield(); + #endif + } while (((reply.indexOf(resp1) + reply.indexOf(resp2)) == -2) && ((millis() - entry) < timeout)); + + if (reply != "") { + log("Reply in "); + log((millis() - entry)); + log(" ms: "); + logln(reply); + } + + if (response != NULL) { + *response = reply; + } + + if ((millis() - entry) >= timeout) { + retVal = A6_TIMEOUT; + logln("Timed out."); + } else { + if (reply.indexOf(resp1) + reply.indexOf(resp2) > -2) { + logln("Reply OK."); + retVal = A6_OK; + } else { + logln("Reply NOT OK."); + retVal = A6_NOTOK; + } + } + return retVal; +} diff --git a/lib/A6lib/A6lib.h b/lib/A6lib/A6lib.h new file mode 100644 index 0000000..b4a6cfe --- /dev/null +++ b/lib/A6lib/A6lib.h @@ -0,0 +1,111 @@ +#ifndef A6lib_h +#define A6lib_h + +#include +#include "SoftwareSerial.h" + +#ifdef DEBUG +#define log(msg) Serial.print(msg) +#define logln(msg) Serial.println(msg) +#else +#define log(msg) +#define logln(msg) +#endif + +#define countof(a) (sizeof(a) / sizeof(a[0])) + +#define A6_OK 0 +#define A6_NOTOK 1 +#define A6_TIMEOUT 2 +#define A6_FAILURE 3 + +#define A6_CMD_TIMEOUT 5000 + + +enum call_direction { + DIR_OUTGOING = 0, + DIR_INCOMING = 1 +}; + +enum call_state { + CALL_ACTIVE = 0, + CALL_HELD = 1, + CALL_DIALING = 2, + CALL_ALERTING = 3, + CALL_INCOMING = 4, + CALL_WAITING = 5, + CALL_RELEASE = 7 +}; + +enum call_mode { + MODE_VOICE = 0, + MODE_DATA = 1, + MODE_FAX = 2, + MODE_VOICE_THEN_DATA_VMODE = 3, + MODE_VOICE_AND_DATA_VMODE = 4, + MODE_VOICE_AND_FAX_VMODE = 5, + MODE_VOICE_THEN_DATA_DMODE = 6, + MODE_VOICE_AND_DATA_DMODE = 7, + MODE_VOICE_AND_FAX_FMODE = 8, + MODE_UNKNOWN = 9 +}; + +struct SMSmessage { + String number; + String date; + String message; +}; + +struct callInfo { + int index; + call_direction direction; + call_state state; + call_mode mode; + int multiparty; + String number; + int type; +}; + + +class A6lib { +public: + A6lib(int transmitPin, int receivePin); + ~A6lib(); + + byte begin(long baudRate); + byte blockUntilReady(long baudRate); + + void powerCycle(int pin); + void powerOn(int pin); + void powerOff(int pin); + + void dial(String number); + void redial(); + void answer(); + void hangUp(); + callInfo checkCallStatus(); + int getSignalStrength(); + + byte sendSMS(String number, String text); + int getUnreadSMSLocs(int* buf, int maxItems); + int getSMSLocs(int* buf, int maxItems); + int getSMSLocsOfType(int* buf, int maxItems, String type); + SMSmessage readSMS(int index); + byte deleteSMS(int index); + byte deleteSMS(int index, int flag); + byte setSMScharset(String charset); + + void setVol(byte level); + void enableSpeaker(byte enable); + + String getRealTimeClock(); + + SoftwareSerial *A6conn; +private: + String read(); + byte A6command(const char *command, const char *resp1, const char *resp2, int timeout, int repetitions, String *response); + byte A6waitFor(const char *resp1, const char *resp2, int timeout, String *response); + long detectRate(); + char setRate(long baudRate); +}; +#endif diff --git a/lib/A6lib/LICENSE.md b/lib/A6lib/LICENSE.md new file mode 100644 index 0000000..87c0133 --- /dev/null +++ b/lib/A6lib/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Stavros Korokithakis + +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. diff --git a/lib/A6lib/README.md b/lib/A6lib/README.md new file mode 100644 index 0000000..83a00fc --- /dev/null +++ b/lib/A6lib/README.md @@ -0,0 +1,65 @@ +# A6lib + +An ESP8266/Arduino library for communicating with the AI-Thinker A6 GSM module. +It will probably also work with other GSM modules that use the AT command set, +like the SIM900. + +## Details + +This library is an adaptation of +[this sample module](https://github.com/SensorsIot/A6-GSM-Module). It is still +very incomplete, but at least it works somewhat. Please feel free to issue pull +requests to improve it. + +## Usage + +If you have the A6 breakout board, connect the Tx and Rx pins to your ESP8266. +The example assumes the TX pin is connected to D5 and the RX to D6. A6lib can +power-cycle the module if you connect a MOSFET to a pin and control the A6's +power supply with it. + +For a sample circuit that uses this library, have a look at [the A6/ESP8266 +breakout board](https://gitlab.com/stavros/A6-ESP8266-breakout/) I designed. + +The A6's PWR pin should be permanently connected to Vcc (if you think that's +wrong or know a better way, please open an issue). + +The code looks something like this: + +~~~ +// Instantiate the class with Tx, Rx (remember to swap them when connecting to +the A6, i.e. connect the A6's Rx pin to D6). +A6lib A6c(D6, D5); + +// Initialize the modem, rebooting it if it fails to become ready. +do { + // Power-cycle the module to reset it. + A6c.powerCycle(D0); +} while (A6c.blockUntilReady(9600) != A6_OK); + +// Start and place a call. +A6c.dial("1234567890"); +delay(8000); + +A6c.hangUp(); +delay(8000); + +A6c.redial(); +delay(8000); + +// Send a message. +A6c.sendSMS("+1234567890", "Hello there!"); + +// Get an SMS message from memory. +SMSmessage sms = A6c.readSMS(3); + +// Delete an SMS message. +A6c.deleteSMS(3); + +callInfo cinfo = A6c.checkCallStatus(); +// This will be the calling number, "1234567890". +cinfo.number; +~~~ + +This library doesn't currently include any code to connect to the internet, but +a PR adding that would be very welcome. diff --git a/lib/A6lib/examples/dial/dial.ino b/lib/A6lib/examples/dial/dial.ino new file mode 100644 index 0000000..0a96541 --- /dev/null +++ b/lib/A6lib/examples/dial/dial.ino @@ -0,0 +1,44 @@ +#include + +#ifndef ESP8266 +#define D0 0 +#define D5 8 +#define D6 7 +#endif + +// Instantiate the library with TxPin, RxPin. +A6lib A6l(D6, D5); + +void setup() { + Serial.begin(115200); + + delay(1000); + + // Power-cycle the module to reset it. + A6l.powerCycle(D0); + A6l.blockUntilReady(9600); +} + +void loop() { + Serial.println("Checking call status..."); + callInfo cinfo = A6l.checkCallStatus(); + Serial.println("Call status checked."); + + int sigStrength = A6l.getSignalStrength(); + Serial.print("Signal strength percentage: "); + Serial.println(sigStrength); + + delay(5000); + + if (cinfo.number != NULL) { + if (cinfo.direction == DIR_INCOMING && cinfo.number == "919999999999") { + A6l.answer(); + } else { + A6l.hangUp(); + } + delay(1000); + } else { + Serial.println("No number yet."); + delay(1000); + } +} diff --git a/lib/A6lib/examples/serial_relay/serial_relay.ino b/lib/A6lib/examples/serial_relay/serial_relay.ino new file mode 100644 index 0000000..535aa34 --- /dev/null +++ b/lib/A6lib/examples/serial_relay/serial_relay.ino @@ -0,0 +1,30 @@ +#include + +#ifndef ESP8266 +#define D0 0 +#define D5 8 +#define D6 7 +#endif + +// Instantiate the library with TxPin, RxPin. +A6lib A6l(D6, D5); + +void setup() { + Serial.begin(115200); + + delay(1000); + + // Power-cycle the module to reset it. + A6l.powerCycle(D0); + A6l.blockUntilReady(9600); +} + +void loop() { + // Relay things between Serial and the module's SoftSerial. + while (A6l.A6conn->available() > 0) { + Serial.write(A6l.A6conn->read()); + } + while (Serial.available() > 0) { + A6l.A6conn->write(Serial.read()); + } +} diff --git a/lib/A6lib/examples/sms/sms.ino b/lib/A6lib/examples/sms/sms.ino new file mode 100644 index 0000000..cd483de --- /dev/null +++ b/lib/A6lib/examples/sms/sms.ino @@ -0,0 +1,51 @@ +#include + +#ifdef ESP8266 +#define D0 0 +#define D5 8 +#define D6 7 +#endif + +// Instantiate the library with TxPin, RxPin. +A6lib A6l(D6, D5); + +int unreadSMSLocs[30] = {0}; +int unreadSMSNum = 0; +SMSmessage sms; + +void setup() { + Serial.begin(115200); + + delay(1000); + + // Power-cycle the module to reset it. + A6l.powerCycle(D0); + A6l.blockUntilReady(9600); +} + +void loop() { + String myNumber = "+1132352890"; + + callInfo cinfo = A6l.checkCallStatus(); + if (cinfo.direction == DIR_INCOMING) { + if (myNumber.endsWith(cinfo.number)) { + // If the number that sent the SMS is ours, reply. + A6l.sendSMS(myNumber, "I can't come to the phone right now, I'm a machine."); + A6l.hangUp(); + } + + // Get the memory locations of unread SMS messages. + unreadSMSNum = A6l.getUnreadSMSLocs(unreadSMSLocs, 30); + + for (int i = 0; i < unreadSMSNum; i++) { + Serial.print("New message at index: "); + Serial.println(unreadSMSLocs[i], DEC); + + sms = A6l.readSMS(unreadSMSLocs[i]); + Serial.println(sms.number); + Serial.println(sms.date); + Serial.println(sms.message); + } + delay(1000); + } +} diff --git a/lib/A6lib/keywords.txt b/lib/A6lib/keywords.txt new file mode 100644 index 0000000..1076a88 --- /dev/null +++ b/lib/A6lib/keywords.txt @@ -0,0 +1,35 @@ +####################################### +# A6 GSM communication module +# (esp8266) +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +A6lib KEYWORD1 +callInfo KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +powerCycle KEYWORD2 + +dial KEYWORD2 +redial KEYWORD2 +hangUp KEYWORD2 +checkCallStatus KEYWORD2 +getSignalStrength KEYWORD2 + +sendSMS KEYWORD2 + +setVol KEYWORD2 +enableSpeaker KEYWORD2 + +A6conn KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/lib/A6lib/library.json b/lib/A6lib/library.json new file mode 100644 index 0000000..9023366 --- /dev/null +++ b/lib/A6lib/library.json @@ -0,0 +1,14 @@ +{ + "name": "A6lib", + "keywords": [ + "A6", "GSM", "mobile" + ], + "description": "An ESP8266/Arduino library for communicating with the A6 GSM module.", + "repository": + { + "type": "git", + "url": "https://github.com/skorokithakis/A6lib" + }, + "frameworks": "arduino", + "platforms": "*" +} diff --git a/lib/A6lib/library.properties b/lib/A6lib/library.properties new file mode 100644 index 0000000..e7b6598 --- /dev/null +++ b/lib/A6lib/library.properties @@ -0,0 +1,9 @@ +name=A6lib +version=0.1.3 +author=Stavros Korokithakis +maintainer=Stavros Korokithakis (hi@stavros.io) +sentence=An ESP8266/Arduino library for communicating with the A6 GSM module. +paragraph= +category=Communication +url=https://github.com/skorokithakis/A6lib +architectures=* diff --git a/lib/A6lib/sscanf.cpp b/lib/A6lib/sscanf.cpp new file mode 100644 index 0000000..bafaeea --- /dev/null +++ b/lib/A6lib/sscanf.cpp @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Opsycon AB. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include + +#define MAXLN 200 +#define ISSPACE " \t\n\r\f\v\"" + +size_t strcspn(const char *p, const char *s) { + int i, j; + + for (i = 0; p[i]; i++) { + for (j = 0; s[j]; j++) { + if (s[j] == p[i]) { + break; + } + } + if (s[j]) { + break; + } + } + return (i); +} + +char * _getbase(char *p, int *basep) { + if (p[0] == '0') { + switch (p[1]) { + case 'x': + *basep = 16; + break; + case 't': + case 'n': + *basep = 10; + break; + case 'o': + *basep = 8; + break; + default: + *basep = 10; + return (p); + } + return (p + 2); + } + *basep = 10; + return (p); +} + +/* + * _atob(vp,p,base) + */ +int _atob(uint32_t *vp, char *p, int base) { + uint32_t value, v1, v2; + char *q, tmp[20]; + int digit; + + if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { + base = 16; + p += 2; + } + + if (base == 16 && (q = strchr(p, '.')) != 0) { + if (q - p > sizeof(tmp) - 1) { + return (0); + } + + strncpy(tmp, p, q - p); + tmp[q - p] = '\0'; + if (!_atob(&v1, tmp, 16)) { + return (0); + } + + q++; + if (strchr(q, '.')) { + return (0); + } + + if (!_atob(&v2, q, 16)) { + return (0); + } + *vp = (v1 << 16) + v2; + return (1); + } + + value = *vp = 0; + for (; *p; p++) { + if (*p >= '0' && *p <= '9') { + digit = *p - '0'; + } else if (*p >= 'a' && *p <= 'f') { + digit = *p - 'a' + 10; + } else if (*p >= 'A' && *p <= 'F') { + digit = *p - 'A' + 10; + } else { + return (0); + } + + if (digit >= base) { + return (0); + } + value *= base; + value += digit; + } + *vp = value; + return (1); +} + +/* + * atob(vp,p,base) + * converts p to binary result in vp, rtn 1 on success + */ +int atob(uint32_t *vp, char *p, int base) { + uint32_t v; + if (base == 0) { + p = _getbase(p, &base); + } + if (_atob(&v, p, base)) { + *vp = v; + return (1); + } + return (0); +} + +/* + * vsscanf(buf,fmt,ap) + */ + +int vsscanf(const char *buf, const char *s, va_list ap) { + uint32_t count, noassign, width, base, lflag; + const char *tc; + char *t, tmp[MAXLN]; + + count = noassign = width = lflag = 0; + while (*s && *buf) { + while (isspace(*s)) { + s++; + } + if (*s == '%') { + s++; + for (; *s; s++) { + if (strchr("dibouxcsefg%", *s)) { + break; + } + if (*s == '*') { + noassign = 1; + } else if (*s == 'l' || *s == 'L') { + lflag = 1; + } else if (*s >= '1' && *s <= '9') { + for (tc = s; isdigit(*s); s++); + strncpy(tmp, tc, s - tc); + tmp[s - tc] = '\0'; + atob(&width, tmp, 10); + s--; + } + } + if (*s == 's') { + while (isspace(*buf)) { + buf++; + } + if (!width) { + width = strcspn(buf, ISSPACE); + } + if (!noassign) { + strncpy(t = va_arg(ap, char *), buf, width); + t[width] = '\0'; + } + buf += width; + } else if (*s == 'c') { + if (!width) { + width = 1; + } + if (!noassign) { + strncpy(t = va_arg(ap, char *), buf, width); + t[width] = '\0'; + } + buf += width; + } else if (strchr("dobxu", *s)) { + while (isspace(*buf)) { + buf++; + } + if (*s == 'd' || *s == 'u') { + base = 10; + } else if (*s == 'x') { + base = 16; + } else if (*s == 'o') { + base = 8; + } else if (*s == 'b') { + base = 2; + } + if (!width) { + if (isspace(*(s + 1)) || *(s + 1) == 0) { + width = strcspn(buf, ISSPACE); + } else { + width = strchr(buf, *(s + 1)) - buf; + } + } + strncpy(tmp, buf, width); + tmp[width] = '\0'; + buf += width; + if (!noassign) { + atob(va_arg(ap, uint32_t *), tmp, base); + } + } + if (!noassign) { + count++; + } + width = noassign = lflag = 0; + s++; + } else { + while (isspace(*buf)) { + buf++; + } + if (*s != *buf) { + break; + } else { + s++, buf++; + } + } + } + return (count); +} + + +int __attribute__((used)) sscanf(const char *buf, const char *fmt, ...) { + int count; + va_list ap; + + va_start(ap, fmt); + count = vsscanf(buf, fmt, ap); + va_end(ap); + return (count); +} diff --git a/tests/Test_config.h b/tests/Test_config.h index df1d4f5..07477f3 100644 --- a/tests/Test_config.h +++ b/tests/Test_config.h @@ -90,6 +90,7 @@ const byte subnet[] = { 255, 255, 255, 0 }; //ip adress #define ZgatewayRF2 #define ZgatewayIR #define ZgatewayBT + #define Zgateway2G #define ZactuatorONOFF #define ZsensorINA226 #define ZsensorHCSR501 @@ -102,6 +103,7 @@ const byte subnet[] = { 255, 255, 255, 0 }; //ip adress #elif ESP32 #define ZgatewayRF #define ZgatewayRF2 + //#define Zgateway2G (not tested yet) //#define ZgatewayIR #define ZgatewayBT #define ZactuatorONOFF @@ -114,6 +116,7 @@ const byte subnet[] = { 255, 255, 255, 0 }; //ip adress //#define ZgatewayRFM69 // If you uncomment this you can't use RF and BT due to the fact that RF use also D8 and BT use also D6/D7 #else // for arduino mega + W5100 #define ZgatewayRF + //#define Zgateway2G (not tested yet) //#define ZgatewayRF2 // too big for UNO //#define ZgatewayRFM69 not tested //#define ZgatewayIR