From c18f130d102c2589ef220adef9839c371abafec0 Mon Sep 17 00:00:00 2001 From: Thiemann96 Date: Sun, 22 Jul 2018 19:31:18 +0200 Subject: [PATCH] added form handling, deleting of data after request has been handled (non pm10) --- app.js | 4 ++-- getStatistics.py | 26 +++++++++++++++++++------- routes/getPM10.js | 4 ++-- routes/getStatistics.js | 4 ++-- test.png | Bin 39779 -> 0 bytes 5 files changed, 25 insertions(+), 13 deletions(-) delete mode 100644 test.png diff --git a/app.js b/app.js index fca1fd7..e55febd 100644 --- a/app.js +++ b/app.js @@ -20,8 +20,8 @@ app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); -app.use('/data/python', statisticsRouter); -app.use('/data/python/pm10', pm10Router); +app.use('/python', statisticsRouter); +app.use('/python/pm10', pm10Router); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/getStatistics.py b/getStatistics.py index d654901..138aa31 100644 --- a/getStatistics.py +++ b/getStatistics.py @@ -15,6 +15,7 @@ from io import BytesIO import datetime from math import sin, floor,cos, sqrt, atan2, radians +import glob # fig = plt.figure() # plt.plot(values) @@ -112,13 +113,16 @@ def converTime(date): month = date[5:7] day = date[8:10] clock = date[11:13] - result = year + month + day +clock + result = year + month + day +"00" return int(result) ####################### def __senseBox__(): boxId = sys.argv[1] phenomenon = sys.argv[2] - url = "https://api.opensensemap.org/statistics/descriptive?senseboxid="+boxId+"&phenomenon="+phenomenon+"&from-date="+subtractMonth(today)+"Z&to-date="+str(today)+"Z&operation=arithmeticMean&window=3600000&format=json" + start = sys.argv[5] + 'T00:00:00.000Z' + end = sys.argv[6] + 'T00:00:00.000Z' + window = sys.argv[7] + url = "https://api.opensensemap.org/statistics/descriptive?senseboxid="+boxId+"&phenomenon="+phenomenon+"&from-date="+start+"&to-date="+end+"&operation=arithmeticMean&window="+window+"&format=json" response = requests.get(url) res = json.loads(response.content) boxData=res[0] @@ -155,18 +159,22 @@ def __DWD__(): folder = 'pub/CDC/observations_germany/climate/hourly'+title+'/recent/' ftp.cwd(folder) filedata = open(filename, 'wb') + ftp.retrbinary('RETR '+filename, filedata.write) filedata.close() ftp.quit() #### Unzip the just downloaded file to ressources/ zip_ref = zipfile.ZipFile(filename, 'r') zip_ref.extractall(path) + os.remove('/home/eric/Documents/Bachelorarbeit/senseboard_backend/senseBoard/'+filename) zip_ref.close() #### fetch the correct file onlyfiles = [f for f in os.listdir(path) if isfile(join(path, f))] - for filename in onlyfiles: - if filename.startswith('produkt'): - file = filename + for filenames in onlyfiles: + if filenames.startswith('produkt'): + file = filenames + else: + os.remove(path+'/'+filenames) ##### Read csv and extract data for further plotting dates = [] values = [] @@ -176,11 +184,14 @@ def __DWD__(): value = row[3] date = row[1] if not date == 'MESS_DATUM': - if float(date)>converTime(subtractMonth(today)) and float(date)=converTime(sys.argv[5]) and float(date)<=converTime(sys.argv[6]): dates.append(date[6:8]) if not value == 'TT_TU': value_new = float(value.strip()) values.append(value_new) + # delete files that were downloaded + os.remove(path+'/'+file) + os.rmdir(path) return values def __main__(): @@ -199,13 +210,14 @@ def __main__(): plt.grid() plt.legend() plt.xlabel('Datum') + plt.ylabel(sys.argv[2]) plt.xticks(ticks,labels) plt.savefig(bytes,format='jpg') else: plt.plot(senseBoxData) - plt.title(sys.argv[2]) plt.grid() plt.xlabel('Datum') + plt.ylabel(sys.argv[2]) plt.xticks(ticks,labels) plt.savefig(bytes,format='jpg') bytes.seek(0) diff --git a/routes/getPM10.js b/routes/getPM10.js index 801edd3..d9cd46b 100644 --- a/routes/getPM10.js +++ b/routes/getPM10.js @@ -13,13 +13,13 @@ var PythonShell = require('python-shell'); // args: [req.params.title] // }; /* GET users listing. */ -router.get('/:id/:phenomenon/:lat/:lon', function(req, res, next) { +router.get('/:id/:phenomenon/:lat/:lon/:from/:to/:window', function(req, res, next) { // Comment out this line: PythonShell.run(myPythonScriptPath, options={ mode: 'text', pythonPath: 'python3', pythonOptions: ['-u'], // get print results in real-time - args: [req.params.id,req.params.phenomenon,req.params.lat,req.params.lon]}, + args: [req.params.id,req.params.phenomenon,req.params.lat,req.params.lon,req.params.from,req.params.to,req.params.window]}, function (err, results) { if (err) throw err; // results is an array consisting of messages collected during execution diff --git a/routes/getStatistics.js b/routes/getStatistics.js index 6bcd026..dfddbf2 100644 --- a/routes/getStatistics.js +++ b/routes/getStatistics.js @@ -6,13 +6,13 @@ var myPythonScriptPath = 'getStatistics.py'; var PythonShell = require('python-shell'); var pyshell = new PythonShell(myPythonScriptPath); /* GET users listing. */ -router.get('/:id/:phenomenon/:lat/:lon', function(req, res, next) { +router.get('/:id/:phenomenon/:lat/:lon/:from/:to/:window', function(req, res, next) { // Comment out this line: PythonShell.run(myPythonScriptPath, options={ mode: 'text', pythonPath: 'python3', pythonOptions: ['-u'], // get print results in real-time - args: [req.params.id,req.params.phenomenon,req.params.lat,req.params.lon]}, + args: [req.params.id,req.params.phenomenon,req.params.lat,req.params.lon,req.params.from,req.params.to,req.params.window]}, function (err, results) { if (err) throw err; // results is an array consisting of messages collected during execution diff --git a/test.png b/test.png deleted file mode 100644 index ec3922f4ad82c21cefe3762eb5b37e6a723e6e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39779 zcmeFZbySq$*Eaf05JL_jAT1!FNQp=@0!lYZcMAy8&7eq$gi_KVA|)w;QbU)3NcRBJ zEg}uyGx~eK_x zdU#v7*#OQK92+9 z0VVl+x<2Wf4gMa+OTK>sx84p$tFw2%E}=>qfWSK9D2c)n;!pvr*EAKiAN`>GYHu)q z`!~DN8@?5_AArMjT#$?QXc|h-j4Y>3DfP2@2uD73Ijr4_l8aH*sa-_6Yt=f#HZOj; zzDdS5Q;OY}qi^2#PnClE`REVB&&%0TKfY}`mYz12O$n$C!LNlPWeE%EjK7kj!57y; z$BFS+aqlU`$g!s=_x3@p{FD4R#AC9PWk&}b{wH0k!UANOmHZ+Y0oNe8p zBSPUUDvszmH16+{Te1O;zlJEl4g70D^8c!dyi~j98#Fl@s90fMkNy6n{=yn?(%$Y5!?LyXo){Kk~{zl ztKI8h*c&x+fdJA6g&Om3?J}FmgOB7kXXa)$HaB2@YfL|Uy3mFoAtCuzt7c`zURwXFN6ZBV#4Ey^ z&0RZaabAn4>>vgP@NGST0>%}USHams0QFdP2MNB)S{??-(Q=wgZet^}bQXEm*-x$t z$1y%*kHPzNbad#kjr%$}L(v;GH8ob|=Bz7$kvrhal|Tkyyuylro`KX)gqwN8x9a31Mg+YQNtY=K%((rOGZ?iBHRaqufl7~5Wp-Yo5h%&Ezlly2A?UMb!VL+atFCPIy>!Z(V$(f zuC8|Znk}5-UT$utKTYf9t8?nN+C2^c{|Yga;ZESv@f?X|z>ToW(_e_yws=CmrZYF)hY#mp(3+O>ZLF;|uMK^uc)Hk;USm@I_=>o= zxa~A29mxVXQTN#}(Ej3^=RO?yo_ukP$9fTknjG>%@$^e1CE!xBJ%xucG|Shp{(y|-#uDI?AI zm-~+X)HF#gO8fcwAqn9nm%-caS#sReEg9akk$Zbj>kk`t+P7!wv`kE#H>}t}vlEkF zRAOXMMqtFt7;@~Pm@j1J#dE}HXk5WNCwCwNa1RCj9(Bw71?%UF#ok>#|J@b6vNkz> zW;wM)2A3dTD#>kCz0ou~=+V2&eWFQ*0MXrJhUG5`+9Z;}$xq3_t2wU6mKE92#3cD# zpRMpz^VhO#aM9&XOAP+B*MV}0Oc^Ar)^CYqkHDG{6W`7KTIobsUfM`V72y`uAk zvSA<+$m10gPodPYeDgreTnwGDpUl+2Oq=?+7$_%?D+s~)am5LXRL=frH5d>>k}zP{ zAArXi*A2C%Ceec6E`hj8E6~om6&V57ykO{(z<{VQMaQl+H6N@td!`9{a1~EZR~Cmk z@-|nQ(kd^cC?buXWWS*}4!&u$p}FYE?{oer>>kyNzwVny!cW1DNLtI#Q%Iqb6TN>= z6m7Q#P~!dPm;KgaXjG4h#57A=-`oXDy_<*rkXD~Y{-w+OFaEeI_)-)Py;Squa&Whf zwpRpY`CPK{ZCvXyFP7#q_1ML%ATQ&UoW4kI$jWU13YzZY|J`=?bgUWz{ArMSCM9JD z0h&a`qU@&)=D)}LKsyK2p~bCH@=v&DY(k_}KToso!U@ReTa~A? znWUIXm$tx482=aH#Z}5C1WPbDYA$(M47C>u?Oyt~*17ggJ_0ah8nNt*D)tf`6NC^S zEeN!{XRA`4mEc~4(|@j29=IS->7-ONeOfVR5|hR!LGCF{t~w;IAa@7r$yF*U;6=>~o>q`tVJF?)({Nd%co_!kY>yr2WtOtsVYe-%Ia0LSvH$4q*u?(e02 zI<4_@kSZ#sF@+?n)ydoul$3`ka>)I)r4pnRdZzD=7=P1Iz3$rs*I;CRVX)ul@n8G^ zubPG^Iex2lY$WpE&mGt!*iM z=$RH*3&g4L<}}2~r7HoQ@qIv%hWtNGTJW-i2sAf;-Rgm;l830?r%H)#d(TW;==2v# zC6ILJKx?M+paBu)#e;eS{Vbhy*wdQp8u+gqljt%rf09Uxq&S9VDZ2h7xeUa2|9+!*f z7xcnPk`VkyQZ;EP(%@Tz;^4hau%nL4ET09$r|Rl?5IENUnRJ}@sv8^}6kHUq^V(`r zkU7yB9viq+8eG}Wa5n<6MgPKZ7d2pRqvAYUBS->MS+B>PNPF(6()<_itgLVI!p(We z%)b)2vN3jg2#3&@8TC}e_vG_3VkY2F2!L{Tckk~dXO@f@GxaC+1~2Jnht+li%(wwO zBj&@Hc+b3ukEbZ?1h3sZ5A~QlMoi)@PrMm*Q5P#6KSm6NBdPHoS@zt@J|EmXQzp0X)cXdiywV#*<0+~ zJ01vTHmZ5j-WYg_^~yR$+@y?TrR>(qnGgBZli5FYRB8z z0I_%VMPT>!Wb@WAQvE7h(m$IM&o|1NF48x4#w%clGu~!<1RCH}x#bZ)_aWEKS#Jjx z%K_^57gN;9vxJke0JQL4+|WCnbU5b^?qbT_8SlAQc3FWm{0+Y;lWrL$?TcUjak&gD zEabsK5xlv}^^xMi$;l|I&X}e801zO7znuXd!x4fA2~qdwmm1(rZ+mXq({6y=^BT zB=oGmzdt?sG(h?&pnd8H^uk1330ELG1%Pp`7C>fqAM>;7>l5j-k-{NQ0Y?7gT0%%q z8)O=cb~63ed2l!_sEGvzgMk5{&b{PnxgC-r*|N=)i#((bxEx<~;r(9dx0OTNO7vR2MP6avr;i|>!% zs*y`(z^>j0=0i9hYrH&&)o@W*2nrZ8@n#a2koZ`JLut25567)yEhZ{$#y>ge^q;P+ ztyOSF%sja}>$6B2uqwyWa=eliE3sV*OEwD8S!va4I(ZmyP;Az>5%l=+<6Ur369b&URT|cIf|F#AK^Vy* z2~&Qky}(xien9>%Jr46Mv9XyGWdQg>f&$`hfQ>jhm%vpBgfTx+xa+5FFkST!D7}#j z=RMi!$hTDF+%M+rmJLPSRiOY|#$7jOBlzpvVwQ&^TmfQQwAxxuy!;RO@3wo?DeC8v z^Rh|LvcOhX|FybKsbMa_6jY!4WtXyiU@>einNovYVUk9U3X0uZ)Slf~p1muotk^ zzg@J7#9=*@^G0;PXe}kV7unFT#v^dpQJ4F4j``jICiLKPj!YeknPR7pT{X^2Ko5xp zyc2l>>sAGNr)pE*!t-H@${%>WAXH!k(pwmhl>RetIxj?WRwh%6%tr(qaD~SUt8GpN zNlh{od9ttp=00rKCwrU;;rc@i zs`(67E8mKY;D+2)T)m_!hpSq*Pzr$KV?B-epxm%yIt!2OMR(d{-`c9oxSICE*ZwwA z4E>%EMZtROQPo5#l8a=4B6M&*6StG(BEkf-u!6 zq8pwuh5@Tg8Kb^FG`VLRo^{GM-aq=lVkR6f&*spwb>qo9#cS4#sAD|Ip2U4M}`zC&)vmi-do#1TkG%%@1HPXu()0T2L07l{%}tdj?|!(<`l1aS#ue|H`kK8rAC zV+@~LX>Ku}BH%AWuP6l)F z`@gnr2MG%1Am0+uDjN_uU^WT)qyiX{Ww$Y7{%Z$B<4&`VNu`hZ3BbMlN`4>Fofp}3 zGF!HHY~r#moe;G!{+%O+R4up18GF7l>1N7x8?nhq;9A)9`yC738;5Lzx6|S6TgWd56TJ) z?V*vM{Q0Zk#v7h;*81+0DG5a2a*~^-np0RzTWE>ok3giY$AZ7qey$eY1AQ^`kc2eBHyYle*mXa+(iz$KYz{ zdrP{oEBJl9DD4}6*CMb}p(I#?pORpASg}Vfiu3i+NTJ}_i7*qYZeq%v2H4HKqOzP( zbcGCiq^nxoD@;cM0|JHQU3EO0dFQVMu+_>w`YipwM|L(LaEQVRC=vNL>h%4U#G<2lG%XPfPKIV}mK{6pVzcROkh{R@_1z+9jf$BSH{2Jb?DVD01ykY87x? z4gQCgAnF=#3YN(XzVL0c6m**Wgvimf?>M;l#eYe8etteW_MBW=bmv_92>aY;H79(x zi#-+#Qc4BI#jVSIX%u7|{zL4Ez2myydd}oQ_~qbJ-t0 z5P($RW&C~+KE8J3(bm>&nAX(P)W=?1sz`ZcqNxdAq3_I4)l0_w|IVo5AtP|`p zeXPBO{KXt-JHvka{=KwNS2juoZps?@aFg@|MhI+t3Rds~;^BwT|3qqB{S{9}N*GPm zdhKkXjk~nTb$jc!Jh{z7Xd@V%?rl~LEWA%PZK<^BU2fP;)H6i@qF%h-Zy)?7A|oT~ zKf1tTvFU-KQ#CFMtjO|4Fd;-7NErI9+wvxa>owg)3c zr$eCeDyM&=gRAUj31w~-39kg4zTBHik^8mZ%;-&5_1o9YR~qhyS|Or87#VO1=Aua|+js-({QQu!2nL#HGxbP4c z-d9+(;%@|vel!X}yp|wq3a4q*v-X;L`0rziTa7axY zE#6J%0Zw5Psju zsrR_yiLkCeFTpOzuUSR=xiQ*Y16YENEI{(W*n7qk%szZ-4BCCp0s!@<{1>N9mkenl z&MhDf@;8}OGwnv4>AU>)>fzAPkd+z|hFOt56vIWewfp@NPus8P;X=wf@0|yp)m3R< zyBFjG+@2Ke87>vM-GVd)aUO{8=P?|uh{t=2JZjw%LaK2*^%8o$FRniSZCp5v>m7K1 z8BdR(KW^xZyl7~WdRbVouil}tE%5>*qd~|XD%0@zesj%OH7Q5D@W&*;;M#WpyFb1H zM6EoJnpNUD1Pqtv!XDFwg}e`9>31n305*fu__Bw%UtWuQ@fq&n?QOL)+kiJ0Ye83g zd2#ym^87H_BOtWPyn-YoTI2r5JEoUGV>>v+3))8F^YeF70Q2`|V7ww1P@g zg@y0{CwrkQkVP+pkYS;6cS89DbRr?D%-tVo2NeHo_$;o|oO!uYmNBzDop#Lo0cKy~ z;*?oat^BKy(Ne^w!2qV1`L9qi&z zf&Y!)C5U%(kK`VDNuYZu1>%kwBwmCtLU#{mN21nm(E2HS*h>qtT@gp%x^6l0=z%yE zeY~;3jEa}=c9?|DnUV3zwq)3L$ zyQc0Xq4Ko_UCdS{yPRQ+3!kjRQ%xNwgy^|wI2U`wgyv&vInABN#r!8JD{_Pw{T6xI z`L<)-$QB8fbtZ8_Hfi2(+e=r}kKJ8JGu;_-aX}j+iX*e!?@gtZdG21`k2i@<;K~S! zT#-wh!rV7GUa}S$5vzlrVPeVI>0+!}D<4b;9rU>K1rJ0GtGj(jtl_<;ZGE-!egDfF zHISiiBnbr^i)jDE=_YOn?D0EuAqs(YTi*Ni(c_{E)S}+0fG5OK}G5{?8RO@6#h>7jd{wY5Uy8VEgV* z?zN8_zrmE!Zw=9+Zj)NMcCwIKWBkdpKZzloRbCdwtf$8XZb)loRe*NF|1J4KW5!Q_ z^EGGK4;E^1TLh+K@`jUYxa<&~2N^D=KyNPX@g-Z>Bte$$5dP|T+k%e*vL~9Q(1Sid z+D_=X#SE5>}B%fV;1Su^1emci5?l0abUT!7>qZ%s%0f2p?`Okh>V>bs&olHi zCOsppnQ>MPh~b$h26CAhMAObMi24$V`pfJG7^iH*JfdJJ=jjv!?<~u2$4OQZX=MP^ z&slH0Gv~bW1VRz<%T00LzqPkBZ12y+@F>gR#h~DT2#cWn!Q$OhL1Bx_7zZI-8h{bS zm!lQ4fsGQ2e8~zj{M)sC_|3l)mRg_!TL77;96)4O@U`dR4-wKq8T(Fm&3b%r7DJYz zmf^61a)R$X*UjgD+8pu@ECEnVn2nmx;V;fMO3p^_Y`uf|csx*s(gq=%Pw0j4eqhE} zsxM5$`c8+LR>^jWR_)h`$pV@5Z+`@7<5yO#D!b=w-hgycDs3EombXESTY()k5`0Ho z$G&O3RzLivr!nAcpsYN`At!LQ1@G*FU;U<(bfv&wBSgg@x>ALv@LvZ~^0z^L*P7TX zlIx3pBp2`(_m@uHsJC}fRFnQAioyHz2S{F(9WflZS1oJxfaC|XX+yh96uoY$^Olb8 zKnL@N-W|xA_9n_l7<)Hs8#m-%xtvqrZ+}>vwinJIzS1y5Fj@^!yiY7P->Q8bOo&Cm z2$xqOC7&xGX803adoPsps~k$Hv;_LyfOcwE>DW%C=d252Iz|tf!2s}rbmZan#1h(; zb%?G$G&A~92lcMI%lpx<=MxWa0(qYUK@|IH^+{&%i>#)vJtvqkneFuPJY`%yhak?8 zFz@p>MvS)lf*KhUy!*iW?MqK4Szz58_=sGkWI~<7vnP@E&6bfN70Q@YFNned;y0f5 z!mYWCxe1RuBLHyXGQ2tOnqOt*$VRP z%CS5w)(61oq;Q0FCtM(o2U1Lp{_F&;U_?pnkOnSVq}Udzy?3&GGcy5221`FAP^YfF$X0}8j<7in(%yw8&ah&2;ZwbfA0i=Y!W~F zTnu;8Ac@YnZY~AY+^pX=)z%r_s-ri6dO<Q`JOr=2Sp+5z7#Xu@9I?Ym=&e-Im25@R|hh4 znQ+u6+=OjIPv^a^-d3ky8il1yEEygt)lcM{qG5QV=#hs{Hg-PLk!zB$4JSy#EeAM} zQ(-8{$10e}JckBTl?+TK`8>d>R=u?OWmQcA-JXor0mG<83ywE_GryE^bar3;?aUM5 z8GW5Q?{dCw`T;7Uk#|A1tDgswmj9LqvLXnFS|^5ZvG>H>WRb1(2doh9)pcy2N3Szu zej_7t$8`UcM=KMQi#Rsz%eP&OeS51l2-7!4)HdYM^T8rGU(=DT1%A{O!mZ8nsf@-} zTfolb=+(Khy?oQmrAJUcKKu?}GOVs}h|gq3mmMJ-eI-(`#1|3ZGy zOxr2&3~?gw>tHPPJ8Zs9$KGT}?k#T%>{{kdDYR!~cL=W=r*uu6viTUj!C-e)AD7{^ zw-%;u4{n?#0FLDS6!KB>t_c}1{bvAUT9gAzHZp>cF1ELPdi({r)f!MouRF4%oJg@^ zEKtoNFMo= z%XSA)nqur`${u8Q{7wGcjR8vW>a0Dz?S;K6#{sz}VF_~8;QjHjeYG;?t3R-0J?J~l z=QC3{6xzd`f_B!ytTCg&x#b>e+Z^jUqN>)PX(gaduFWB%i{bOu5v44$;6NX@lZW{A<#M7 zm~+K-1K-T#t0M&L`*bivTE4Pv^bfRuOHw!4WtY!+3La4h7gVxCAF#UNZ+QW?ucAGG zUK|rG{B(Di4!{Pk@K>h}RTWn7{CncX?=8*@ZRqDw%+e090reLr> z8)5dDeypJcy59TH@07ED646`CPzocI@-2vw6dFQ=G6AtoZsgcNG^jk=c+%tRD~3Q_ z<$5|ZMQUqh1JJMnModC*wqgQg*A2)`KW0M)YibPuwyuJajV?5XaTSbxBCqup-U39D zA3^hB1uVFMnx}G_?wFu}e3ND{IUm~Es%_KeGwd+yBF^9lIzgm;2o)n3#oelS#GV5O z6Sn2Kl;u9#yjs(j1mhGib`2l?P@e|X@gqM$wW^;|80a8ORPySrH0hQ02me=Op?-2~ zOw0mKdWA=8j809Z=QV3&3_j2cet}{Y*g2mKI^7Z=vFaEDQ<=IljIyp^Zq-Uh&}W9P zWaIZry}H-$h@m-F*ct*0djF(%IR(S|+_`Y$E@Z?igfS!PG1V3rkg_Q$bVwUksL4O% zFG8Z<%SZiuc^v>rL#NsDSE*-{B)yka&-FyYACPAvM z{j>8_IhbFRygb{FXtxAYfmE_NNFckcj2zTR9)$-V5ip8-5Nb&7!M%27UxDdBtLD?$ zN*m&n)62 zuR3vKQ-u`34hFOl|HpKFMbNq585joFc^;?UaoqI|KJ-2sk~!CDTYTyx=`N$1H4q*X zLuS*duE=LWp#8z*<(Ne;3nk|(U~Z9)^!~?8 zltjg6w9ky|7iDtx(&}H_BWEV^vBe}cZr4KXBd@D+yv|=jb+aWL)akuiRU@6`&iv&& zcLN?=O#q6MtSV)|<#h$@*p=)0`ug@wKjh?CnC=k(pg!*&NG0>tVxiL@i%fU*YP?@b z=uft}yFUW(?>)0PpSlgrjc$rd9%Sl>?U|P!jcVB9yUribf}|e_zFh!?Hus

JG~&9FZo)Mo6eSe{~xIdlsYxK;zL+L4Hqb=E6=sL zc(DHBB%skBEBu;sw|L0vM{E^RNC!h1hGJa6hrjdyK62Bkkzo@&2sF2l5lFPq$rW1J z-x+xMR?5a7;@XZfK&Ku&Ug?O=wKIo;f%wH^@<-LfN?!)T9@`z9Kccr;0%k#m(dW;E z-QEuseq1tr#aLQUFyxleXUxtaj#(=xy0Q7n|6qN@-r2dm!m88F6jWV!fqc$JF{p+u z=)8A>VgACz&2;gZgl#(@TPmHU$q|!v{-@-?B_mqJ{%4IJkRgO;+{TGyy-D<7NFCmRuG2fvek1QVWk=^?TMjnbqcqX-gzfWFe9jMk_ZB&4me#hfUb5N>#yyPq~a=fTT%v48XB>8?rnP2 zfhu$tti;?g8K@^792t3`mL@VELcpBetB@dsR7E`h6ZQfRYpg{M>K^%-u2x>S97=zm zh`75e%cf(i^WoZ<6JKa;&?TNTUfE~Ikxf8dWg3?LHLLwL9!Y^`>IaU??Ui>uTe2Br zuQY{2Fdif->%-34i2DnoUS5=dYoRX0J~)B2TN7kVb0S`X+G)Nry6DXfoVxzYO6JYu zaYCMikl(-dVi3zEA)XdY9OMPf0rNH{t>1>pM^f*`U56~|wJgR$*T1{W7wutU+bc?W# z&B^;9Uwi};sv+S%A|x)$obD!IdPo(G4mSRK)_gw!YW`(B1aN zMl|L)nuUURE4jC$2NKQsX_=mxAr&)aCkMvqK9_hZ#ElK2#~bvv-3ixh4uGNzC|RfW z08wd{8D29u5xc3IQfH{bRRwQ8cVM z!N1lskO0)Vw}kU;wP=u&VuW?L>?OS7`X2=N-Hnc}(8dvwxH$n~%vCn0}jKTYx!2 zpPv^(WyyZNcG2`la$1IUKkVi#y4~8rUEFm-fJ8-fZ9OB6+s&%O$(T>B&WD~T?CEL- ztMP;UdQ(QMFkIzjh2nSd?dAEMb^IVRcMr5(7$DLd6-Mxa;4#}Dna9t1A${jjx=N09 zUAayaKG*W%Z=9meK<8D$X>lLrr^vjsS=Blw)WhrMy}s3jXT;-rP@1wmZJD2aoc>qR zw*!~Kni$q=B0|V687O|r7lgGCrGoGl_nk3YV$5))PO?2E?1oT}+(Bylrv9W7kIjb) zFl&}*w3$|Y=t8N%@zhcj4(Lxk;$M=kBB0N|PCTj47U^TCo8*rWrLORX(v@og`DTli zOsKt@i0i73ana)hxc)3bS=TK<$E6m$6we*Ji}HJ<-hI<86GQp3@s{1ISKpV$?tuy) z?G|+_*2UC`Th{)a`4nm#S|&>^zONZkS)F(l6`Ecw=AW}mK091VucUNUwL*-SUPB`I zf<+EYV-Kb+X|m5j+-u1WGO$@-3P(ymKIl1hzxsX&MsG&Kvp(wQaB4`}igHd&RWcvEToD3XLPDn6bBp@S4S$g>2Y^?Z z=GCkl1C-^xHrcbi_mDW04faN?*hrS$Yop(?KHPN%)jUN;z`ap5X*{52v1w7Za74F< z2CDf83|1Z^IqEJ41ctXOuMFSxYp_(ucdcXMhH<8Qs^Q2p8TSg@OG=gL0Eww zZ8?YqS@#>81?*43fU6A`67{Q7F9XoGvtQq=QM&drLS40|sLLZlcrJOc6&^g!N|D#i ziwV9j3)nv-Gk5l5h}fhoua%Lw&C>4fB%TyUKlJVn{)1!c^3-cc^JNZ!3R*B4aIyq5 z1$l^ClLz-G*cWsTyFCy-f6%fSI$@|hb%-M+`kL5vbHQ&yHj9g3F;{2rC%97?@a>HE zEi_PBjzm?*Fz!VzqK(>Cy=W2+Er*xj7&RwZ67;9jKv&xD+5FO;FL|&@Clh4m;`k4S z7z!dH;>6&&y?xYV=H1uLN!6FX%fqSSMUC;xE2|%^2NqA_Q&RY&ovG2%u~U=7*Y|rR9%H(~dbyn&2g15<-t8I-L9@Ae%P;@1j|DyWjCCY?YdI$eXj8;QJ)p(gmUKNv*26kPysQV*Ehu zO7vfPB@KCQ^FlqvwrP*P>_Bo^4;VD9O3dEcK0Q7#a3zo^XGu-Tv-$e3fMi>hmPXm=6>yurwFYvv|p4+<#EG` ze3x~uj<6`&!gt9GW!IpqFDXMt3hQbT#hDULi>lH=VOv9r*N%BRA zQfe4FleFPT_6kUa)#%F8E5_SJr9CC3sZtPL&58+D79k_l&vZtT*6$+2Y|5Ayf9#iY zN0+Z59s9CxKne;71kz3M>}r7DDlrUEZEr?}>q{xi*LlpZ7=Z`Hoj9BL-(p~V9^sn{ zg6?JLa1)ft+WL)}4sz7NNvsdkCXD*~Hz7#^cC0#gjdz65a?AhPCVi5tupFl*m;7suCWSG9){%|3y4)bg8 zA60E7eO$0FI+&~X*!}$<@RbnKwUc2zc&~YW@1lq9P1Ymi-IR>#w*#2R#B@%ID#B3t z@07RAoS<5F;80*jMSCKVpM~MkpW9tua0dnUUOgr1?%Wqfl*t}Xr3wb!=;>;8AK!C@ z&4_SZ5MjKTxfY;x$KHAiI!X;=-w?~c3EutnV76XKe&JV^V^KH?z-pAP;scV$>q;s4 z4MUfSBshy^^#jsgP7C@^btKmMsS(e52O0JEdPZ_;RmOwkC~$e4^>R-$U)AhJn1#M2 zCZ;L!F~Ro@t=sl_5(Ju~a}UNqI^kfF%H;Zu9?T>1Y*~Wc)*XW|!!ibiaL&E;JqjC{ z@NYQsoPoQ#X*1tDD?B6EcO)IET?gZ?kWnNQ&=RQuYrY(uU&LJlLP~g1?G4fM`Yqyn z#Ze)UN_;Mkq-9WbpjM2vMxfM;P+)POP{~- znkzzFs_r>;F6y?via$A`UY9UMP}%9IC4S<(5O-vVm~2uCespOjNVR;-<}W@atQM$) zF_2XYbCkX^qzAra;^HMM!wJn0!R zaRK3@Zorjf^g|a2g}#lB(sisoo5L5C5fKSHW^c||od>@o`Y8pnHGvx`zp}^$+pJd{ zn_lw}Lu$QuOr54alb#;#bnXwx#Om`B%ifCmFD*bA7-wChCNda19{wQx!YF{ zyaN0TSd2XnmaS$U2C)R}-jn?OUC!rcyn-vJZW$gKu>fOZ!tk4VM{QI}jO)Z~@xoxq zgYw}#FTHLu+EWxgG#L8uh=+Y$u`kn0e(Fk7U|4AozpB0ID7b_hFM#Kv+mLmYb z?sc+sg8G|?^V7q{qT*8V6=_g!c(>_TEnuG53~dV?dks0i~;V5w_eduXj6*Tt!3Iu46v|pXx3(zU#9~+b3N3g!UFsK@yl? zR&}tH3qV8`Voz+t1=Re9-#VSUY}}IZ|L@|IvaQbSR3}_Dfmj3;h}O6r^OJmqdXp{i zV63Qok~GECQR>{s^4&`LDB9;@MW7}H8R15tsfDQhsyyJJnC~dE6-P(6MwZP9>AHsW z=e`N?0aaa#6LwkcD*O$hV0Dzi+|KGMN|?U==;$bVgPe>k_uV^oTs`(cCUxeH2w1yK zN=kaWk%qypV-@J>pcg18)TSA_=1086n`TIbdCi1bzftp$=F`Sr!q*~xTCd*#=Nry` z^}KZbB^}Ibf>$l6LI9q&3MSRcJT-wBm8Ohofu!dFpPqvpbH2mEcHK@#sY%`L!b^Tj zkb=4mmO%gN)q404v}>Q{6H^Tha`i0fSFafEF4qr$Wj8tR-dS}xKWkXmbwDhe*NxoC_}?r-y{06Mi~w9&?rI2!ebqg*N`|47Vz%a9KrwB;W- zf*e#*ThO73t*=Qlr~u0Aq^7!3XtKzVtI2%8eR5VNOuHgT+~d@Qgoz;gZh!&5;4 z0W_%NRMq$}UGzVzsFO|o5TKd2WnCU;S%C%hw>i;c|0N>ZTCe}V7m!lXK507l0x)+Q z_eg7v`KH}^Z$-$n;r>5^#`7(gf!d(IoD>O=bvnI*BzobxlHqL`5Wt9|@hkifpXllp z-+C{a=*kUR2gShylv;9BubBrvZEs5AUB`ZH7r`qrA3F>fK9wwRV*o>Hu#9!} zaZ$z6%A*_Lg|q(_UQ$}xQPX&ED`3NDuIDretT8x0oQpl(X=?guWlZwBZ?dV286{?Y z(mUK3DKhf#Jv{s88;o(Zs_it_gz$tuRGm|8qpi@ANPlTVQ55YQbj%hYQk0K2fbucz z`9*fTA?&35Vf?Tz97WQKa?hZB-b{#>O^Rco#^rX#c_Cet<WRb{`8P7L3?%h1{-uiDKEn*w{Wme$k; zio&6B`Vo*gVhNo+kxIY7P20IWijvEzmEGOU#joUesAW&KZhmVfiDa)W-`VYZScRmuj;qq zb{ldh@PCo@)=^RZQTOOG!vI4{H#l^6BhoG1-5@315`%tc#OqS zhU<0?1fOHbqES}WQlzUAZy5hPtgVIN0!cp>6S=_RMP5$gk`t=-i2f%9wd21__;Sp3y=?!iPO(i*+za&hM9J?YKKOE2q;r?)+G4 zWXN-oj&PYl2+eCi9~1;ZQn3WkbxjOQ_sUk905GO_WD*q9fo?6C))Mv-Zv@O0f1%NV zG=iFi6f99eFk_17scEzg&Vd8c+C{)X;+y;y#&*@JnpCwZo~^_5v(PzS{T=zM<#pj z2(R6PuaW>1Q7eD|S*72chp{8GbfF8+C0>2_3Y!9%v4)A|?BQ+vxgdB3NevPtdk5b! zg_7Z~KR4t7oo584-ue>v$-$~-Z^A{kov<)bLQh78M=|F?BAwDy4INBJ9H!gg30JTO zcv|Vf0c#dOZ0gbIK(qK@rGjV#sa6v6?=bLH22Nw&vLwFH0UZkFz6Y+}e1?q#b8jSgT!1nh!2SZLq?MswFs?4)O(jBFXb2n6 z8a|LYM8sNv=+J_M*g)xLj(iS^0)m#x0Ne*v(aG3y(=ZUM|E#Ns)o%GZBh0XmV0a`8 zv}Q?*u>O1@{0m9cnAlXUSBV^uK>aY58#&bwL*kJj6Ugr8M-Ux6QVd7)|1@U=%sfUG zCJ7ri&q1J5gLE>eBGq+IuDHOCA#H~s6)`j0klPOx5CBED+M5HlW21>y(D z10v6#13a1sJ1oGzS?2ZAJeS4=2);F{k{bc7t+oJBvGzP3M&Z@E_&+UW^ueq8h=Q?Q zQ(oM@)UZ2ngf(X8h|rqfzoi4$tlYGMY6Iu&*umtvI0D|0d1UX3ZQP6oALByHR;z@$ zc|1S>z9N-Ub7v{F&wqh{W4e+$WN{)7n#KR?DS298@74D5ynYhtc(wN{Hk^F~hzmXe z;-4XYs<9HAq^L$a5w(~=wF`0hToh4n{{DLt9}(A|k##y(=SlQj#63IWNtQ4auso#Y zy$UOMFKwiTW$g0+k@^+RxFxTrJxjuu>aqbj>kcpixlb^eN|^bC9x5^-Q~M~$9JDtv zWmO_HDMjN)cN-#rr?%oL*kFnAJ)4Y^%|setqsHj04I&o63)&qw@zNTM$v!Tw5ua78 zY5+*9YzDy21T+Q#m6T~>wsG6g#fc>1O*dF6txPi7o2S?mDxpZsiE%$>@9DclW>XN2 z1xrOFyyv)(;kp<3Aj?Nn4|Qn&DjctGn2U6gf*ItjE&HUuXT)9d7A7sGP!M;u7bxXg z)Rue-M$q?R!Q01gEgzWk`0=>$tQC?WE5wit5(5r^f&23m>HLF5hj$Lv$Hu-7A^;O+ zYb^W{kX?Nmg$Bk5x@-Vvrsy}U^>FDsvyi_(+JJ3uV6*|VQQ8$sG29;v8b&Ns`F6hh z2s5`+#`;2s*;uiLnVp6mMXNK18|LVS4K#AC@*t=U;!v~4DW1HSkG*6xZm6it! z6O*9a`eNMM=UOUdhv$1daibupF{OHz1I1qw`m*Uy>7=UM^Ck}_C72aF;mcdC<9$~X z44jL6Uo839^HO1^|8=*F&c#ONcaoAbHVW2lO6^H;Ydk ztBwF0g{>&22Tl-pThBKC@xG#^fUQ1~i0-@b*-MGb_#5;i zhc{KB?Z;+!cEZ0WD@83P_9rBA_wh+c@#JSZ6%qHcL7s!JFk}bgJ8oJ?3rp`v>@^C=#67J)6Tt^^4>S|EEq}4lpd3tg zBnzQ@_cX!e&c@mlrPyx)gH>;fxv4wVP{0;q^K<%FNp-nw5~Mt_QOPB=G#l)o#jDo`5_Mr<9@#KZmJ^Zz85f`y)t z?%La&N!!JdH3bAY;>du^yd8fNjqy$UGGhAQ$Q2JbND~bG)cF;Zj1#C;qwJr#|f+72&OdfHON*d%tkhzcv6G4Wa`V(2TL$z7b{u-zQW zk;On8@v;Pkl+Rw&F1COtA~#qu{w%!D!SBPfS%PpvxO&z^y^o9V zEjO%9GIMlfToQ=q9?yvO8Wha>GJy-BNZ#`W6u;%g-`2{BHzU!$xDEu3N#>eCwfjT} zT%qlQYZ)y+X@_O0``#{RN+4Z8YB@&};0MOo)?1)&59+o}85{qnzb=+BXt5RNsk1Co zz~mTl&{Mq`JsY<%_wQHDf&}}JKJE%eDcwzjRB1HoY>engA0Kl0h*Ouj2vjkCeeNm# zef&3M?A=4%%u~nWF+VVRe+poOnK|_nR4L}sfr3IXqV7_A`YjvG)Y<`}#EgxK4a4*d zHA1_Vdce}_bzSN4JFwDROjW3LE(oOXrwZvs%0_RNTY$>who0L$p!>08HIw2u&5LSbS{SWX-i*{}I|N`b^8-eR8{zx{>kFt%j+PMD-5Wkf7n z?RcJH=;VlF%Ulp)PVxq7xy=7zsiJ`ML=Kb=PjNC%Y?u^+28{op%lgoSW8}{SR@TRpb`5#4ijKrw~c(OG3y(J=0p)A{Cag#ppj@q4v3MXHxK?%ak99uRcD01a5)h=mM+5_&;zpm~(;>+53hR@WeJLj(Lj z&3k-I9B*r&o3)H-Kaf#i#8y|B_SIcgmg`(EUkdw|;coZee(s zd?4WY$C0A5Uzr74sR%frE>@a>fvRu=0lnyWKTlaqb!RAwc~2NRET;6AK?)^4AWR&J zj1IFF(3tfWEF^Hj%anq7`!l=%b?-d#A0KrSfCqz0*!P>u9M*gD8Bm0`*VT28_1xW^ zO5YJ5hTr{r7kvIR=x}lCxWH#w4MCE`*eSrKStpgUUm)2sP9CuST>5YT6ya>%K6u;4 zJ;6jh{cZ89aZ(Y*rP%jBO zN?70RHMET+Hhr#(XuflJ55``PBZPX^@`V@cWihq`}DfHz8Or5h%3En z-ep+kH>CCDgsn&Qx5k6PAqEnEV+vMjljpeh=?Uuq3doI!{Q8iKoFSd`{qM{n-Jb-* zaT}Tc0@l*00)=0i6&r0viR3@|0vi!lJ@neQSK7Q-#?_a6@14?pb?Ci?U=T}#`{~bNE`9s~BLsmQf?rrbB*T&LmHWa`wn3~0O z8t~()9taYj*%;Uv&6?ZwMVQX;tQQqEfBCoE3`U&o?X?i#$h1KM3^!U1-0D=lOWyz9)GONzDLzj`bo-5S>fyv!7*K6RCgnlx37mzzmNyATDjZE5GX{wx|EopVIK~ zRE6+wRTeOp15r76%@qus?tm7TN+8sFuO1}{S+1;PDG0y)E9QUjrC{;+-pF!JByl-{ zO{2qNFcDZZXSN2iZt9-^j+lQ~W=WH}kNJWzSdPZ_Lob7tatmq;Sl4i^v^qnhS-rq{f0EzdC@Af2Ks4^a3gN_$|yjPH$PqQy}q2eC67!u%t@2K`bf1-d{MVU-{~PJs$Cx zFlFc&Y@$j67|Q+_t)fYy*EK+*h97%}{1e)Ic)Rhi(S22-rKP3(#x!Lp67;DB-8HwZ zC%0cbLhg^+mX!<6H`Y19tDbaXbae=AC;mPj(i0}Xdfa~4cDRw-Ho5ijcOy_x?fTe* zvDev5KdHj6g00bP{SUgQEO+n%Rgp`;P7o2CfXqo!qTJz5^7iZJs>^lfCCCjv+wOrC`$1(t>uT003G5fIvIrU<<#5M7)tzDCxZuE$zi)5%-l?uvn&a zeSOsTVC!h34>VmHOk-4T1TEQ&-x|7o>wesZ$q12*7ksKV;#*1LsZmY*Y5+fq!t?#p zU8>LK1n`*t7c}({eOEuFkam&HzJe3E>zBO3TOP~V>(u+ZgP|!-5MzS_RC))|mpZcP z-pxpwIY^A0y7`;)Sb!t`MLdmA4;dj!GJYxM1ZtewxTTB3sB(d#kmGWjcr)&WLm~4| zgs&|94A}N$^$Zq9+H5c-ctK-b#JwNi=)dPmQ`a<5b!1-;(<(<-uUBRwx?)_c^2fM8 zhCqI%?XRU)0J+*3UYeWo-Frk@ z&cJ{)nf6gkUS8e`T_WsgZhPhA3-6^myS1W@0@dYg(RF2nmKB{6U%$2~LAUYZhl1EY zL6Ya^^Iw|%&~JVIZBmx$PD77&6%BgXW&}jjF&3z_^lNE97UZp5msS9YIWi{!>i)Hg z<==T+Q!#eW!xLPdc&|Y*rn(7*Qkc{-px|K4MQ2#`&i#P4&LIjrOuo8Mig&fnmxz9( zX88@cbMZ#$HQ6z=C?}f@Gr4_fq<8-L6eJ#l7GjHu%blH_c41*ZDzaO?2+Q}*2Kv>% z$dN$F{TqAua_8LPa_g^b!H2AG@OA2k=K!#jz1U-`v)*E?qqnJ0yqw}um!DupZp0dz z63+$+Oprj)0SjZ3g}`>W-OKUPWyShZF)jk3B;e;11_qp3R_Y<$(9UbGI*d~9V4DynxTqxD@NBLb6Y+8p;w+BAo4zp7a5*&t_m)b*AdvY7FEPVp)MU79uRl{q zoG1ciNjB9CX7aB1T960j?7-g+;a2y&oWfKw+55GkQyP*tN6x)S zzHncjq^r2xc7rQ=@!JQi9mQ&H-L3^M%^;gZ9ea00dY31K@F)t)$FH9~dHA>r>FG@b znWIO?RY*jbw!9!@U(dUS%iPjZ7vtJ8q=wn8Rew*5(Sm^w5X7q6oko-<7&ntxyW3vE zwqeLutvQ{lGYn13|KzKOlEPwaR`^}g>?T(_8#qmf%2h`Ijc?vlh$KMUc#*Zv?b}To zc*0i~JIumZ7u=MiKSz%eo-eG2U(a{s00M9o5%SwJ{B z#mpd=f6u)x(dfnMvM8xvx+ayfz43`2Xs?87r;{|6vN7Nl#1jWHP(bhU#F>ey(u6!+ z?074Z0B>TIJodXM>);pupB@3${3J3>TlC&&STe){R0cz&p@i&-g4jG%MHo`c`Og`L zcV6=s?4P0>b&g&+_=*1uuOma(3Jn!LFhut#`Y~`PE}D9+$c~yl2%d0xtIrGlz!$OI z*+%c7>gD$(dpbmK;_vOz)3y&C6z?UIe-mk%;K52Poi7#21@ZdHg{6(&51S-#0JAB; z2y;##UdhlymD+CcnG&;l@R1_TzezFhDkNm&P@$Ntu9W=Db&D~`-`Ss4->gxM;CRz1 zn&}$FKR4@JnE7`5?n%Z4%_|1zn`hJ%gQdaLyCxxXugFmDc#jsE33UoX|GEOS8ih`; zN-bd8SxQqf<>b~JgqlT;`XsS)?Ob()P(Dd|HcEz9+&bKh1UwJc!dofjsOF z-JuE-xwtXwh4ApteJrVSx+p-wZe!mr1FN_Sy>u~GP+HDzh#Q3L*Q+2p|n^?IMhne8#c2^D=)xm-0D#Ee=I2h3rf&<`_D61#&zhq}Y_9Dlv9g|8kR% z7@~esu@`z#@0zKr4omUgZl3rtNw!!5E+Y4EApCN+wQlW6j0m4*zCp`h)wYMmlKuQY zm?YZ?x7DbcP0J{Y;qh?uZdO_an65vRj{w(3UE>i*o+N~d{@vqB7kQ;;e{`k2#wSVG z)PaPQNJQ$S{?Au_`qf^YlqI(u`SLU!6h3A4+3Ga<`Jn;pDSOR6X#2tf&p1q#o~=qG zEGhZXc~&y~Os5j(;%t0f%Jyjp#fS_oyR9?D3%Y*COw*)oQP8oqLY}(p92~iXkbISk zYMOvzlpS>)m(&S`nNB zB5|kDdFrI&&(<^V8Jo27*9lRRFNYKr+*lZ%>1{vCQrAUY2ePBP;cx$&BNC6EjNTzk z^)*LTpo%m=BZyr#z#Y^ z*eS9(s#0L3kB11x?Fjh7Wh)^sqC^mm*erP!r(1<5;^(FE$0S4C1tTh2Pce-)QPF%$ zkiPkKMNN)6LcvxA$irRhjjr;URfU*wsg>jN4LMuupylj&8KL`gE{rz-0L@3foayK4 zO7qUD#E`iX@{+Y(G)rYsDN2%O{xh$i^A$kdYdB_nKj~IjMjG;&ONuiKYO}?sdnYwo z*>1sJDnl}`W#Z8Fn9vKlu@rWFT8y;I{YdzQ)ld6HItx{~qlwL&m0UsbZxO9wTW_Nz>=y zqcp->a7LAM37Jp*Ng1^QYBK7$ejk9_tVbfmN7tkK$INiKm_(Gq7%q;fIto;E>NxR?%0A zgqOf(HK+vC%TCDnzy-+9!1>LIAFrSH-THd?;s(WN^L=QU%6mK{zmJr)O|$hVpF5!C33EtpUCc?jp-3C#^lo>s#v77e!&ibI8ROGRGtXCfLe z9de;ig#sj9IAVWy^}4yt6xKB8t`B4VNSkfn+qw{t!P2%RTcGKSGTFsVcW8~TPC&X>klE4ho1D>PZc&>3O$I?E}HkHpT3 zLLV-7!f`&Xe=AnEIEzt%uvS0t-xu0pwb(U?@gU=|O0hztSglc8$aI$Qt6~u5{lLfC zBLCm8%CCX83>%BPQs`hHlUbyZS({MUXhIT2F;zUsr6Ggg<|foy^ZoN+$oiij#aWoW z#nLZ1!e-)1@oM%`tNPDh-=RF(Js%U_1yn{r1dh0bR&40b8%?P{X%K=&4`+W zaPwAr%6G<=m#~t!^=isBDg^N*gS3DYd$5voQjtc9I9URb^KzQw$6PRB0^YFWJyaGU zlu5hwTM|g7bB!ovbJm)(PPCCBH4kn@ZXD$|s4JgR(nG)hK_^lge@xW=SW^g9`>9+JLP>P!m>=u=0i_GQToLmo4`w4XfW5%nAs>8-ABuwsW50_lnOej6d+U>TVoY3G}&X zbMjfk?RM0>3n3)a8XI24qru9@8_MQwtg}58aK~8oSAZ0G@(0pl!d-empN8^#a%Q3y zHBf5p{&&m|Y3WtQF?1nGx8t0te#wUJCb4a%7+c_Fp$_@%-cvJtENN}>yKa9}zz6!^ z&AFp6^VLGWm&<6AXvFZ`QYF2HjZ_Jh%vtg+M296c(G{47my|nq#4~NJvp`?R=Bm7y z)D_sRabD+?pWO!(E9EvxJbgbaG#TQiWAn`|_)Xx3R=|XGm3(Q^J#h zn@``WQOg(u34ju;WMwGLWxS4%rG;Qg4mzc9)Oq4&j*>Z1lrob9<5!O;1Tir@<(Bjd zH(OSDR!kN0x!}QLOob}sdCF3`8QL%&`8<&V&@2+6KH>_6q(8+B^!@b3W`15hlVb%d zM0`T5JrX(2H1|jf8L=*M>n=mSG-?C!Np#kE zQ%5yO{sVc?KWs4}D~k+lHxw|q=eE{G2`1&lDdbim{2R}^K?dZPkIzNvo*(cRNcdrM zb93KI@2{?|TGm3HDMq~U`B=X)6mz?)E-5H1PVi;rdHxJIb;`K?p`>XLM@)tee-}%k zmOV^DaKpQDUc-0j^N&DHc1pz{EV_5Y`~B%I?B1=M)36S8 z-&LlxlmYbZ{4^bWQ4yha_=aubH^ap8uszj)N(@)4@QUQdgD741pjqBr(B`*}Ofj}t zJqeK}!gpnL0OrKnB-R4Mx_NJU@W>4W6oC0q&wtPyb)Q~b0#Zn(kVbah;PkKTtz902 zKs@WiH&$?_WF1{pbzUX7AEX?|bESO06S%m#-eWS7M<_H38k&OR4`7e2dw;*B<>i4x zE;1bOr`Or{X-ca-kjE(@L3PT9{hDC5`~d>_X4*D4ADf6i0jC}1PWs~{leVe`l|BIU zeqMkx3@)n@Kw8YWd#BRWr~;>Ii-@rlKGaU(TV7>-#>+f-E8%E{-QM&if}u4ldopA9 zh@^2WsU+fz5t#`UdC)8exPvo$@63)5y82fY1!KQ_@Nf_`bRfVT^av3L>7>?tv0$^O zoNtTs^RKI_o(|safqth^qdP=yy7~L%sUQ)`Y-!YF#$B;8 zT@Z|sk#W=O?}>xPH|gx71dVrn98{5xYVuTQgMzY^2?`(cFf?~dwvOP|N%n*?bm%Hi z!`y|+h*~2cGp^{2E&#I=8k+qguEZuZ>y*Kw$lkDB-LX`k@U3;FScJn5!&F>L0Ydn@ zsMacbDE~un)HEG7dZXWf#LvH{dt2@e_4P6HE{dR0|JdR4=g)PltfaU8Nfc^kzIrtv znb_->go}{rr{Ui&%rPV{L#I>KMaf*v$}nh@oTrE=W<0|-em`eXqq(jfYonq886|+g z7?>$2v1C4LAi6L-17nn?+~bz8DzJ;OB|o2Rl1mG)MNv;ACfMR4t6_DFv-DOgQZCTwwS_rSAc<{UfvEomG%VyVlH9?Szt~VGGjVU5C30~d@GeJEkMs=%3Ga|JhCH)IeurCM zLHS5*OL>~>w38DoLgOD(1uat>y?(qugZXxyecjirhi|a_lZsKcn9e~XLq8G+ZOwVv z!TC57KjiIx!c`r*yt?{z+J=%aWtvxN9K-#Np*{)sh7^c-K|$$!=Vj2v?^OVKZ?t^R zRtLKj#O@V`)AjZBfz8kQX#-XwKK<+b6gf-z0UqG*Z)4+`4hXnt z`S$o;Tml*}H+>cELs`@%)s%eBx}u?!Rk$f;l8dCatjAA@t2&kA8eSmN76rIE@%Z88ei;7%;gplHyEAW>>j1t^a z+lRs;gd}gZ9c^W1$oORJi=p&ce{lCE!X5y>q#l`~(BCdUBp}}k#8qBaWgWgq+!vL41w5ofSP#HEbblTJp#G_Zh2mG!9#vY@Updi&{oLD&*&0 zf;nn80#>5hE>Y)&Z9MjQ{yoOjz7b9>Ga*uD+as$EpN|NVsqCiE{H78H9GNscdb=1} zf{n`hz%zcqPW^Kvy(%K;S1qm&QhZwTtM57?RqpI388LL+sDZ(`ud_;t090n2ggAN; zVYey3uM8GOFxj$tpS`H1g{J(l zcA5d%tMEE(AyEJ`N3X12HA6OL-z(482MvxmEO3^4zHOx%TYkNDoFH~>BCQk(x&ARS z-12Kt;i?VsIzgD$MXjLm%~mu<*ODS+Xif?_fFHy|Q2qWz8rUyK!KGR1m+E6^;MK|b zkt_9Rd4i-Dt0%ZBeg|i=bC`W^jF+h0U%Mn0+}sdV!KR3ScP`>vt$LT z3+pJTBL-vbCEUpL-#oV7I)`qbhvVn3oL5A>r`R`BQQ!J`Bo_AmuI^HNEju448zbAF zM>Bt(Axg6$M$4py<#i z!DpTS4Fr}WrFuViCROQ#;xRuK;YCm$Uy8lJ*n_liW_ri%u~r?L%W`tVgcswY3uv+5 zzGo=c?`FDEqsN^==O(bYz*V9Jxk$V^nyiufTCB~sBh9tP>TobTUO`96**qI9#V|C93JXs%8~OeN1yCbxsS+NiA2+*f0FE< z233TSKAhM(PHnaV!=5`=6i6qqZALsmwP(yQ#CJorQN@m^RJeT=m6JxE?2iVBtQx=M zUDZZMgu%4;*%1W=3P2FHap|M!JR(*w&+Q=~4);lsMl$YU4*2lkCD{lJYdf`-$~O7h z32_F}T4O_x+_c1kw>VnLRQ>!$`d8u^Brme}wN0)2J|`?5lYf#Tvs2mpy)J<@IfU10 z0|}I31h-3o9Seyfp%Q<$RQo*3p_12x5@YGpE)4CaIK^tdbBfXpA7nLV$p-|)NjqkU z<*0ME7^K~_2s68#mw;*u zM^GT3aD@d-x?EwG2QnZp|M(J(A|I}B4iQSWCQ`~0Ba|tE`lkazq=Uw)vCduIn*t#j z^jx*P16R9h(bOV2*TE`^&T=;HC#nkm5k*r4 zK-sqHDTNM@CH9O#VnOsLIpYRyE;N}Of(xFPiBn%i5U&aP?j-#Q0ncyT8rmf2t%5>V zG$)#ZS|xI<@YBQYx2#`OsbErH#KS&o_HU%_Y)^>5WCBTA=V zH?kI}mwN=IkMa2!SEi*T&H|KT_}?i%-aP%rSdB&j&nC?z{X$@CL;Qq;;unL3sDpWV zngwb@Sj4uJ4{UG66M>}wqE#Fp>Ah3<4T%_HwCa;KPo~7;X$@Ce9r2O5)S)L=pYn*R zc3b6fYT~EXIZ*bg8~p?H8f&wR8%zWUqF*p%_@@rYuhD%#fkCq?Cp>MNP)1RwQC|Zs zfJIf>^1Em+o@6rkQX*vl+9@cr(lLWX43SW&G;7}k!2wlxcM2cyC z(Wsvs%u!@CVi3e$-|S|RZw?MN<;3c-^(#Djz!+PxTjR-@^E=`lWw9V3d}C8Pu#+&k zdf28fJ9`cQ{?wLAZjLP6HaDPOALgmY`Xt&zA*C9&dU~kA1OPgHiY#M5Dyczg{~hMz z#*v5&d6baJNBQ5+p|bwFfdO(>%cLO#dcY?G!_~}~v{~!x=Bq|RA+QI`SL8C8(blK6 z4>a+m>k9+(ASf~|__Ocswj2{I{DFrJdQE$JF1pKuj^D7>{MATHm^^NUW44nOOu-WQaYkLHV(%ZyGGcU*wgz-fHiS2n$%KZSXiqIfh zutxaw`Ks8ry}{wY%TuxEuo8YooCVPObupLRc`kR{uNG-W$Q^t6?Dv)b-;+a;mbDfv}@K&NM@L zrFZ}eGBb{zy1P7_+IZI}*1+by9a;>(;Tu$wgD3mq1Au8hr%mCEN4-c5sruoY2X~VX zCjfwMt%c;2!)I~$f-LDL@Bz|qBRJT2xtu-UOW0bh^r4YkJ72=;VSfLx@%5XxX*8(m zqu4Xoss<=r`L%tL^+YvW)U0EV0)na1fvHy|1JvBR=tMb5gxL^ue_ zheBG${5HDH^1M5=u1oWu(XM}q3el4x(%Ed;ct4OP)CC?NV2DL^-t6tg7Dh7F2=%nN z3^^h(Dzq0wmc272;nHWUd-^S9%SW>v%%~9@prn z*((T+HeFqoAsSNB03k*ufO+>my0{&zV(ahdn}-BuWleWwt^o3(hh^3& zdN#foTJpekiFH4TiZ%)Bi37EH)FtBjco}W>_H4)@3 zXws|*>2(5m_A|IwM^9}a?Q%&nl&{Rl47Seid^z907uxjb_KsZZ%n%u+?t>nMSh+D? z%JO2#2-+6B>bIv6mqv!))dsw~_@#M0eiu%a$WJ4&{POrSqUK3~v99P%?^qe_LvzZ( z^LMKHBwweO%yUme-*R)JO7m>_FlahcgJ=;C8<@<%r)}YFkdIh>Vf%7k+cpl2oFzE( zz%txMK5maqtF>kH3e<%o8lQ7vjF((`R1BRdFMrl^ntB|J>~3#YQu`RSl`4A-Vy&K8 zB^|%NlgV%8@{^;=UL~y+i3S3FZ|`V^(C7A;L!{o za5>oV!D~M+5SDszd3{Ri7gVdWk!-(K#z)M+ZJp>7QOo7OK7SX8W4YqjOnwXYLkFl* zRTX6QUo&KD%nMS>UPgnH_r+6KQ^qYw;bT9$H9}V^P3^1zN2V-C1{q77BRJo#v`wz4 z(=Wb`HycSGV`ET~0SJ)~ny9Krjh7<&kqzNCJl!AMd4Tn}yK^jXbM%%1;q&hizxQ3L z%nwAAD_DIr%JDrBTNg)EeCW79?QTb7uzS!6tC~WoAz!wEJT!%f3ePef7+wbRA~RDY zwaXLT_@YzCkKi^GQ71%>;ub-R@DyOy?f9O7ZgMcZ5xk|+m&3S3NTQ~#ESBr70JGz7 zpFU7^-n!8P>sz%Oy!*7AKkasBl!#ZqH}^Z|FR=1uAL%bV{YZBo;g{;668Y%?PB6gw!8f61Yuo+YRS;Mo928jT;(J$ZmwUC- z{d~Nj;BZktus_XeSSd6k@N)ja(W&UfrX2RE=0^;g277(A0ulY}Hy|K21``Q}5dgm} zA7M(bb*V4WA*Wj^DISZKVlj1Kq{2#QxT-m$6|t0WuU2kjf$}TqSy|{55aM7$Yq{np z820=dd4}cG?eF?mfjiRgUxzAM6#e0WHlT%EtN;{tf&XTu)G_)7m>2b&9&8ozIpUS* zIP1=$x^{4s6#(XdsR=TU1X?*7W&s__X_&5cTWJ?t!5<4tt@CgJZSXIXaUjI|8Hs!d zHXKW4)&|_K+bukGa?h~Iw?}L-7xrGCKaq5|G>((&B+ZT)^gQS#_*3f>3$dOfS2-Ht zlY|<}LHT&=^k>TsixTFF_y@t1Vu7-wIqj88`1=H`UBQ32PEZJvo3qbvRFt=1t*dD2 zWkn6er>Vn%R0;I*cv#5~1VqJ22_*Pf{gV?rzm{J6L9%)WK^4XW`m7Nol=eii(;v15 zJu@%I1wX=JebdZs(g>C&^=BKh+sQ7i{sAarX(Cd37A9UILAeCwIK(rb>w^EKjt5gNG@!pPobxK^q7<^ObQKJA> z;unWlj*BGXN{y0kUy**%R&YP)>M7&xqI2aSu93k^+=1>=ye6AfSI~ko5XT1b_p5E5 z2T#w;ya2mvX)cS1h{WhsX>Lp_KOCsmt2&yzyPgz#{)emkYQBLb^xM7RJ*O zV_j5Kh(cS$|9tc-f6$NhOOwNsm1jKJIGFe}v42+uCnY1#_ZPQjDxTy>hu;KL zRwGsbr7NIEAHzfV*QTF-UF$!1*%r~^9f}+6(#c1J-0dSEMEO!uQi8QOHeM~s!i|*= zKKJljZ#2$-9=RWO$&0cLg}IOr3)k><$+j1ScjBSFUr>A#<~8bP9T=Bx3Q zfST4;QqT~i@Al^3ednb6_VaD4{?se(7l{qW|86K~X_JBoX2Hw&dbgW*v+dDhUqv#R z+Gm&?`+64$C}F4F?&hwkVCT@Ff}$_%X-=*Pb;s$Z6@r0@4(9wR$URXrCwv8DW2Bh0 z=BaCHZkm0&A_F%o=-Wyx6#$O@C0N*qo3Ayp10htfb@457W5cHFWQ0?&d-wl~)`!BI z@ul*Tmr%o_+1XL(>uD3RXH+5Bu{zb-I7jlh6m-RO+!vUMqUcen)N44Y^3bV}vAp@H zgii_Nyqlm$C{|hcF&i)MP&)Gy&)e%UyHUEJZNkLF#Mq&o(d_2cUnW}4kQ9JL6M`wP z-X4?i27|BR2xIM`C8g}s@b(9VX;nxHLJ%-3-I4c7L~OaZ7KJ1SFgc2Lk>V2EUhDkh zKIP|xA;`n`CJOt&e!p=wHD}bx!61qZ_ND_ZhzIw?{x75++YbWyO(aKO6zm@<0;i+@ zZTszEEiGM01At4-+tR2xq_S2GkvAqU*Q+5aDs&dA8P92D)2AZFEE zFTVXz4EhI8&(1~`7161yE0E2A&K{e&Pm2hpr9n=ySjZ(`M`x$k_AueScaLE$DcA#R z^55~e<48Mj#+nSATuCR$IrBWuS?YM{0-QcLM5maI6 zYJrsAWsgr5*Y`j-fC4$XN0(bETUK}HRuI5-p)M|H75sM+9<>N?-_MGlkAO1BZ)b!Q zq%hNhVE>!y>Ylf4Yxli^UxRG;A!R!r2KM!SLezIS=4#w-@q0ysz#liBs*!yzuY(b^ z1aGZ3%aPSmSyNz93Nlf0a}aovkGn(P1nLvRR(iRqDrK*8vbj3KL<^aO?spe!v=NIWm{C*CZPlKL5dKa zS=`EAJ(PZI-Gf#KbYp$uWVrT~(Zd=wusHbxEWOB9Q8USLf?$M>O#Ed&F%eQhlilCA z2a}x18>$D>4tF=v$3x;Gf^{qeP9?3c!U#SfVI?14&qocj$CsA$JNLceMe0}qt%4L) zL3q}L!VwEehiglT^$_0f*@g0p`kZuyt@UAa_3am*x`H4vgDgjfhSMtgf^xN3X+CN= z2NdUEX&!j2zg7N7V}9Ur=#%^Wb5Zq#H;_a-Xk0t;$3I!8p|=UOUi+Ia9|Iz%u+$*L z;;gSMk$rYHUdB51lcQ3EQEo>ho-6PY6^LFEmn^}O3^a9E934%8UQtS3Qml)D z@e`9JFq9(E^h|qFadHswxAb5mVHzGlnYaQuAFC{`2w)Kl>Ty!oK8pdIJgt41F&93y1CR$K0yO7T~rT2-zAd=nmmv73q(r<43XxO zt_Xn9p^hJQ1rkfJ4@?1dpsAt}7{f3*f++t~u(`CRNjiLe_>zeN=dQB=Jo)2t^(^5) zyMPc+*q+WOQU6+KRZ^DQ{o5H5Gwd-vf%u@QRL^2`zLH9h3UaQ;pLG01brkWN48z_L&Z2rKP>qR@jq+NmbJE`jIx+j4*M}*@ya8g^ zYg#5CuAom3MI1qJ9kJf>tIuu@8iNqiaG`29dy7`i?+KILhTe};oTkNq;0xTKARG#C z%KuMs*BRARwuNsXKqwjzFcE_^B@B!N1gW7&wG4ueA|O2|DhOhbPJ$U!1Oyoi2-55` zgA`GUfE4LcM0|8Y8;bOR6s5g=dGpr$`F_0j)?+OeEV#M%oPF-uXYX^q{e6|J-(>+2 zDGiqT0kza-d*D>qzIc$|a2F;cO-$tgj(lmUpBOeKrowLsm;3@vCdfj7rh7F@5OYw( zkQL#_#jVa8BOL)q&D*tt)VKcQgA3=o!vzyAApBewu>Y>YTb*zTbB8}%8n+i6<7>h1 zwD8Dm-^P;r*bYvWr)Vhh1J6&w38!qaru@$td?liHx#V%OWEhsY3MY0k;xTgX{SdzY zc~2}7gS`lj2%B+E)-CuP;h)(7?=v8F$wmzJ8(~gqZ^5A!=~>M!|a|r39*|RH%cMjXb>_IIdd+e<7X-M(+QNy)Er(qn1S-ao@DdB98BV88k@GCh0GE2X zv&yuG{@T~p9UGL=K745(g|SOgve7r+qB+yxba=2=BA#%IDHl-yRXC7*Rjl;3*I|AV z4j&=vb0t`&gv=cR1}RR0rgsXv$nD(0RS^@{0+AJfc=4ZoIz=6}eT#@?ru5aJ;Sdju&}&lw4n5@45@_ zROmW1XE(VPMd>f?eRF)qK?dh~-zB1$RWno$Sc0l%Ahd@9C&M#m_KY;A#-d910U$=3 z9l&u_*VG(>h~AV&lS4reoJ0srP$gaTfEGbO7O@&)h)b;&nl5YK7nZ9i3=AN6fQoNq zZ5hXs9!ysdn6~dtTk;adstT%xBUGP3EK0Y-H&rn^ ztKwC%V2yIs^YFyIKIHCB=H=zBY(_cxK|do0<`0aVb7SIu5cAzor{N9=LkBB8ja{Nu zOZ+QdM90Kb3}1F}a|{1e4*$Tq2#+;o3{(E`wuQlV(U7)Efa@ZT8DL9US`p4(0;1|;c6I`$$J9e-;5H3On)rB%lbNmUgJ&}q=eU#Q zzNORMgvO|K&7QjE(W(W#Ug{be6|So8`$?wo2-h6v>7GLEH3Jy`vsLjIHH=50h?um4 zTgP%vEvYHaR*p%c*E?=n1Sbk%0@_Gig`15O6Y|9cHovSs#F$X18P;g_AjmeIzT3bz zCK{7WhR3QGNsIo&=HYedf`oSB-6Q4`y{4`&4_S%r z8OibN+?UfkIzLd(CuIV)V}}nPo?XadO2Qn`na>7HZB1FdCc1S`rO>*kfox&Yc)f4qb>~>eocN18nfPA z{vH5oQ*BPC-#v}a*APyWlgat>KLAh))pZ@3?95edK6K_*k?)snApCJuOk6xYFK;`F z9udZ2=K>W>cyA+jqvM?zJJ6S(7ORIQz3ES%@_@HBa&koD~9D(0Bk7x`IGLFmFE zXUcnH(VGJlhP$%feOKHnr5_D0au6g$5@Uirwt^-p>Wu+pSJ2H|%uO8t<&Hfdf1^z@ zV34Y+s!)hqh<<87Q^^uL3fSt1kn5IBWR=GFvjh2H!qm6RGz9&cEQbJN9lgPSqKe=Y z-Fb9WA)lllLd5GYOQUso+!N>TPli zT{y`p0#`=6}R3Ccz^VT{jy*I5U(o#d_ z__@p2%#BdaL*`08lNR|XyV+oa%GCAV_AEuNn%JE~<0}G`&e@PH$&XiC+uLi9?DseD zYSqV253SGMFi?rAst5`Ss-&lcF4|gKTUW0#m<)W_LBUAmFxsu7Db$@;qa3X4{qRBT(AQcx4AJwryJj}0y(#XLfIiTs8MUo1XkfP*+vB8#41o;hb0_~=u3NiYdEXL5m zK@vLV+oeQr?dpmQU0HP5SYJc)Zd3`Q+pA~`cnm!~y-QjoXise5mSjrk0CUBp?=d8g zpWE81J@Y#~Uu0xFp~sUoyxGyf7>Pl77*W{}Fdz+5cc_&|#z@0SRtn*$vtRxc|1SKV z(kU*(!yfjQmXU2&`x4E7R3~YO%0*1ZROW0iqYH8a+82ZGOs|d3rS% z2r6w#g7$CUYZne`G%mpPs5AXQJ8-s~kAv<8eby4q-3g;&a^=eY4C@K?8z;TJDL{#P zrAtXR5vJ*nwy&_G&8g@H25ZW#VxSs(?myPIjdc)$0 zwt~Doja4*U5}ANWY-nq{!#cwzE|ptmpRqSVK;#3Y!IiLRLvAm%0+X!+_&;p|0|TSq zN7hQAJiMLon%MyL!3r#wwGax~f;}fDCTP*BizPFmv5lz)sU^^?$;z9e882VndIP;I zZqJpW-2cNo53pz zknDPL2CEuI=Wi~hftTGC(2p6pT-X7PN6Tv~X`Y@xQOTVW1RS=b{+?1NK-S82baXmk zAIsLlVoNa43ZpJ)3wn$J_)8@X=6cA;C9Mw7Wa|NKy!-l4bD z^S&w7fRYy*8=H%AVq`pe#1a=5&jFNf4yfFGDX1CgpUUq$i#*eV;{9@>U_LAGYm2!p z%rv@AvM0Q-lc?jLQPt9_1%3J^SbuC_c)APeWO`Ar4ykc+cZ)Vi)YDK8`p0j-x%d?& z@3qMe>t$}NwR-t}Ar0RT80AA&U^*zJ+^Lsn@9k~O^X#k;5EMiQX=MP