From fff2c051b3d6c4bf441f694e7a3f0c5ed5ae2c23 Mon Sep 17 00:00:00 2001 From: Florencia Caro <154555752+florenciacaromartinez@users.noreply.github.com> Date: Fri, 16 Feb 2024 20:17:13 -0300 Subject: [PATCH] Add files via upload Bio2Py test notebook and BioWin file for test --- Bio2Py Test/Bio2Py Test.ipynb | 474 +++++++++++++++++++++++++ Bio2Py Test/Bio2Py test BioWin 6.2.bwc | Bin 0 -> 59903 bytes 2 files changed, 474 insertions(+) create mode 100644 Bio2Py Test/Bio2Py Test.ipynb create mode 100644 Bio2Py Test/Bio2Py test BioWin 6.2.bwc diff --git a/Bio2Py Test/Bio2Py Test.ipynb b/Bio2Py Test/Bio2Py Test.ipynb new file mode 100644 index 0000000..b835265 --- /dev/null +++ b/Bio2Py Test/Bio2Py Test.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bio2Py test" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import Bio2Py\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1. Loading influent data**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1.1 Constant influent" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#Multiple scenarios\n", + "column_names_c = ['Flow','COD (mg-COD/L)','TKN (mg-N/L)','TP (mg-P/L)','TS (mg-S/L)','Nitrate (mg-N/L)','pH','Alkalinity (mmol/L)','ISS total (mg-ISS/L)','Metal soluble - Ca (mg/L)','Metal soluble - Mg (mg/L)', 'Gas - Dissolved O2 (mg/L)']\n", + "inf_c = [[600,500,30,6.5,10,0,7.3,6,45,80,15,0],[700,400,30,5.3,10.2,0,7.2,6,45,80,15,0]]\n", + "inf_c= pd.DataFrame(inf_c, columns=column_names_c)\n", + "inf_c.head()\n", + "\n", + "#Single scenario\n", + "inf_c1 = [[500,500,30,6.5,10,0,7.3,6,45,80,15,0]]\n", + "inf_c1=pd.DataFrame(inf_c1, columns=column_names_c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1.2 Variable influent" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "column_names_v = ['Time','Flow','COD (mg-COD/L)','TKN (mg-N/L)','TP (mg-P/L)','TS (mg-S/L)','Nitrate (mg-N/L)','pH','Alkalinity (mmol/L)','ISS total (mg-ISS/L)','Metal soluble - Ca (mg/L)','Metal soluble - Mg (mg/L)', 'Gas - Dissolved O2 (mg/L)']\n", + "\n", + "inf_v0 = [[0,900,500,30,7.2,10,0,7,6,45,80,15,0],[4,1000,400,30,7,10,0,7,6,45,80,15,0],[6,1040,600,30,7,10,0,7,6,45,80,15,0],[10,1200,800,40,7,10,0,7,6,45,80,15,0]]\n", + "inf_v1 = [[0,800,500,30,7.6,10,0,7,6,45,80,15,0],[1,1020,500,30,7,10,0,7,6,45,80,15,0],[3,1100,500,30,7,11,0,7,6,45,80,15,0],[9,1088,500,40,7,10,0,7,6,45,80,15,0]]\n", + "inf_v0= pd.DataFrame(inf_v0, columns=column_names_v)\n", + "inf_v1= pd.DataFrame(inf_v1, columns=column_names_v)\n", + "inf_v= {'inf_v0': inf_v0, 'inf_v1': inf_v1} #each dicctionary key corresponds to a variable influent scenario" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**2. Getting ready**\n", + "\n", + "Bio2Py automatices the process of loading influent data, changing parameters and running simulations in BioWin. It is necessary to set the system configuration layout, project options, unit system, report options, etc before using Bio2Py. \n", + "\n", + "In order to use Bio2Py, **BioWin simulation window must be fully visible**, placing BioWin window on the left side of the screen is recomended. \n", + "\n", + "**Before using Bio2Py**:\n", + "- Open BioWin simulation file.\n", + "- Set the zoom to 100% on BioWin window.\n", + "- Manually run a single flow balance and steady state/dynamic simulation. Check for any warning messages that could interrupt Bio2Py process. If necessary, the user may consider disabling BioWin alarms to prevent Bio2Py interruption. \n", + "- Choose locations (if applicable): \n", + " - For saving BioWin generated reports with simulation results (File -> Report to Excel (TM) -> Choose directory).\n", + " - From where variable influent data will be loaded (Influent icon -> Open file -> Choose directory)(***). Only necessary if running simulations with variable influent. Choose the same filepath arg .\n", + "- Place BioWin simulation window on the left side of the screen. \n", + "- Make sure influent icon is visible. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "filepath=r\"C:\\Users\\Usuario\\OneDrive - Facultad de IngenierÃa\\MaestrÃa\\Biowin - python\\bio2py test\\Bio2Py Test\" #replace with chosen filepath (***)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "simulation_window,influent_window=Bio2Py.setting_the_environment() \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3. Steady state simulations**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3.1 Steady state simulation with constant influent" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "17:49:12.402: Flow balance\n", + "17:49:25.351: Steady State\n", + "17:50:01.048: Flow balance\n", + "17:50:13.688: Steady State\n" + ] + } + ], + "source": [ + "Bio2Py.steady_state_simulations('constant',inf_c,'seed','current',600,'table',filepath)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " | Elements | \n", + "BOD - Total Carbonaceous [mg/L] | \n", + "COD - Total [mg/L] | \n", + "N - Total Kjeldahl Nitrogen [mgN/L] | \n", + "N - Total N [mgN/L] | \n", + "P - Soluble PO4-P [mgP/L] | \n", + "P - Total P [mgP/L] | \n", + "pH [] | \n", + "Total suspended solids [mg/L] | \n", + "
---|---|---|---|---|---|---|---|---|---|
0 | \n", + "Influent | \n", + "245.21 | \n", + "500.00 | \n", + "30.00 | \n", + "30.00 | \n", + "3.25 | \n", + "6.50 | \n", + "7.30 | \n", + "242.71 | \n", + "
1 | \n", + "Effluent | \n", + "2.68 | \n", + "35.66 | \n", + "1.88 | \n", + "16.38 | \n", + "3.76 | \n", + "3.91 | \n", + "6.94 | \n", + "8.82 | \n", + "
2 | \n", + "Sludge | \n", + "359.59 | \n", + "2264.44 | \n", + "125.05 | \n", + "139.55 | \n", + "3.76 | \n", + "42.69 | \n", + "6.94 | \n", + "2261.12 | \n", + "
\n", + " | Elements | \n", + "BOD - Total Carbonaceous [mg/L] | \n", + "COD - Total [mg/L] | \n", + "N - Total Kjeldahl Nitrogen [mgN/L] | \n", + "N - Total N [mgN/L] | \n", + "P - Soluble PO4-P [mgP/L] | \n", + "P - Total P [mgP/L] | \n", + "pH [] | \n", + "Total suspended solids [mg/L] | \n", + "
---|---|---|---|---|---|---|---|---|---|
0 | \n", + "Influent | \n", + "196.16 | \n", + "400.00 | \n", + "30.00 | \n", + "30.00 | \n", + "2.65 | \n", + "5.30 | \n", + "7.20 | \n", + "203.17 | \n", + "
1 | \n", + "Effluent | \n", + "2.46 | \n", + "28.97 | \n", + "1.82 | \n", + "18.96 | \n", + "3.07 | \n", + "3.19 | \n", + "6.92 | \n", + "7.57 | \n", + "
2 | \n", + "Sludge | \n", + "356.71 | \n", + "2144.61 | \n", + "119.25 | \n", + "136.39 | \n", + "3.07 | \n", + "40.15 | \n", + "6.92 | \n", + "2286.49 | \n", + "
6$FoaNx?vZ++szqaI7ov5X0dfnryKXf_q( z*-A?+G^Y7;Udb4z&Fb*Dyde!BjSx!3TJ$JywP;SIN3lAT6%cC&B-6a$3}M&@4GAfE zE-$8vMi02KT1y+f#f=SBV!$9IkMM{MqBj(@m0D5@Fk$4oYiskx+Mv}6e1{lt`)Xu~ zwkAkyPw@E~WFVR}gNn`bHF`sVsd>H{(QKG7K@jwU>0T!BHo`kukxfmgve53W@i^U= zhz4UCJ=y{R-xT(ok*+-3ymcN3FZ;GhFJGTL`@rySl;d#wMTh7ekmvLG0!ij-Pp+p? z)a8tG*M#Z~1}m`L&d^kkXh@_ooTA4O;%}L%J*8qz27oqCNDO!(odRd6g#cx)x&og! zt%O0(z$%5ngVs#`3Ox|%#z2y_+A}17w7af8q(P2&dyLl| z3R;fD+XcQrwFsJl5QuU-B3j__O$pYEVyFm`O-dGP8!C%^fd-eShc=V&8A3O))(Z?g zI($J}m2a|0tQR<`F1*f3Bq>+*Bo)qNlVYw7=K4G}0*Q#@6BV<`7I3>fDv-5JYBEFO z1TEE`ac*yoZwd!8sT=*hQW%O|BncSTBvEFO+pBgROiufTGpMUcg$e=&xCOXQughO< zNS2f14aw=HXr2-O9^ecG++K`WvoU)>w$Kgzs+x&Q&9D+o3 <@p*K zeBM!*U_ znzU}c|BX>+%t1}ewo$=i`%o-QOc5hJOx9?Sn_(--t<0V35BO>tt3%Fla^A{Bv@-vp zM02JNjTI)5gRZ2(OC!8|5zED>V19{7SQD<=5iwS#gk&!+8Eg_-3Xd*)==J-5*3mNB zav}QOj}(4=NsmYLqEAAWt;yz%A#*FZnB?Z9B{g!FmNfLF;*wlNeil4P64c13jg@;9 z_@#WvkQj|x9~1IpvT9|SoiIz(C%KF5LzHf&D#EO>Q*B r(R!^lU{0QbWJIzd*o^IFITR#<-S}TiH+34|%_S|}tu>6==KVGo>PRdf{VnUXUMj|tHw&;5;%S4}TUwqWS zFZ#^ZXIgpHAQHJLSJBW?Nn3gC7y=hjSOu-Df(2qg)q3?aW0HN8G$?W|`Szn5U;6la zy|gp9v>kcs$ly#lFxT=aa1O~-<;et|C{t-NP11}^x0<<4KcQIdBWN0T5rWi-^;2{b zFM6y@v0X2XM3k)LZ8Pdx8hLIxuX#nXF3%#Bi~Oj?T6nP~$d6fL%8XfKH8Vzy38Ay1 z?Rg4yefK6|Q>JDyQn)b7@+1Vsa#jeT`={FZdS=gKE1JXs^+AOQ)|DdB=TTapJ+T4D zx-?t;@1tf=7Z?5ljXFY+DCtK_W>MEhm6^(>fhDm|-9hbX$vl_OH 85wVd_<8Ls&{#Pbx?6sRxL%0 z(@L8%IQ6{B`Izf8T9aC)xky(P=KfOUpH8{ MUt;*Qi~_S)%JQ?fR0ErEF)TM`?T#lG+f7&XQ3 ~#oL|z1OU0%a98k%xd4y@onwmq6Qp9q)f?Rpl?grIOJ zwCmSt_PUP2d-M!)1kNAt9;@{;3!_i$*~vyI{5q07zMSj&kIFxZh$BEmnu%P+paQV$ zDyF7>Oc8&iQz;T|o)f0w^4FPwqgH?f4Ejn7g_&Kfc&eYqu2z^s_xIaJdh6X)Zt~(L zn5}q(3O8!BPj2w$gd7EGcgxULLykEaxHOlAAuC`#Hc^JjsX=a&C=*o0T_jParB;JX zY!GDzR ssiU(qu3I0DFaXq{T94oAwsS&>Jm^-n}D_k4JH(3_Bwzn=6s2!JsKu} zI!wWAwK*NmDeh2peS$f|IS#xBd^UHW#9LBZt4#mD4>zYd$2n{zYL2qlVA2{#{) KAC6z4e1Imj99n<6*9M2*8Gu2tT^ zHSy-I*5~XSZtli&ic5yTFw*DlW&GK^O)%x8932m^Z7WB+8{E)nB={~aA5zG|a(2T| zLrK*#n2UfK4q|hR@rUFLMGIybg#n+Op#+7f`gtXTWw
VcX(*-;5cEJP@cB16og767I3QJK{X8D;?3AgXjJJ@-M(CsGfWY+;)8KcnXy>1JV=(A F|GVpdVHta(Kc3um0m>bgV>azK?@w!BsL^3s~y6La8hp?)n3%L4Drc(>?5#71qz zWB?1u6)-}p;F!suRG_%0lqUEMs~_cDQl%4<1k*{%On4+bsr4XD2CAN{kqm}4hL^%1 z(h`FXZsp^pBmg7I<1l@B1Pd#VKw;%^2Z~%G_mxOx+MoVq|A$SRQDzz&*$j+vXA(A% zM*8FR0w#5q6V8tU)p2CuxO$!>U>H}a+yfx9WwuK!ZCZ2ux;>XK!*pY^kFU3(bEu<< zAdWy7#8z!rIuNF>WczsgU^`+gcEzWHPGionk9P#fVPOklhSKL{s(JE@igV7KWFL=_ zO?-sIh!f=pZo@^yAUg3R+QXVFi2#_*;Fk2Th%mK2hhdB}NnHFqW_Y})6CZ4F$cD|H zCLxCfb+3lRP V;BFgvQ>=XfDiE`e-h zx%$m`MYj1X3mV8h%zxwyOSRV)yF=J)A!069nhx{0l;PHA?1RfWop%jKp4>Ssyj0c0 zLnWrzAvjiFjbn$^$>vqSk`Pc_ik(cFBA-W8$*ec$Q2UYyR6h$yCo7~?2MQ=#0hW=a zP6@)v3SouDHqe!LR(&*jo;9u+Ezbmw# TG|?ajZPjanWdm@ zrmm);fEgfN_2-1QZi?J8l`4m5dwNA_oUknE6*z}ty%L^ Ed4Ob&%?{RWFok^4$2|R}C1@=R z2azjFvPJ<+auoQXcMOtEq%A58lbJOCph-=R@s9djncPNTnH=HuHaiN$V4ZHwVn{kU z03!Oal1sytk*3#_{)4#(g#4u<2K#h@u+5*=aFQKDnKAB0=k&Y5itqo~fIOeu^m z7HbtkbDAU11%NV;Fh?t%8C7tu@qYb`Z+5salVi$P+nqp|qm^oq8sTt73WPx5Qlr`c zOWz6LlF?U9Fn8DbVPwWEMXW{1(;)GI9+55sE13^Pn 8p(Yjm(MI?iG`)7tv T%WFX3n1geJi0W6W$yn3-A&le0Kl%AZICv{N_ zQpr1k5to^l2Yn~tuFk8+ejs;^qMqM`@sS~C!pl_4BJNy^cpI(Pjpz9qgX)`H1Axm# zCW~C )pH}9c==TD#^@y0I~uki;@-9_Jjo0%W`iT#Fj$EAg&U`Hqita zarr7S;cHaNQjo8s)&3a=>PR)eZUHH4kt-N13%I<*X;IlIkE(~akiSl{r>WOau4Ybe zC6{|xHj86(NuePkve5>zAe;4Xv!d0I>o$EZE1K!5674A2svAxSD>|7NcjS%q)?gJ^ zei6($@)TtedZ9Mk$_bQ=9U0?=W}Qt U*41O2(&RCb )Bv;sVj95~g0b$&QbCSaGj#Jr3eQEn z!ySx)VgX99l97;>XWCoBf7C2gK!NC#L2O@%IuTI;$ki4=`!#g~8Yn1%(FpIaG<&cT zf}sE_p}FzOua48bP9-2$Ey4fR zXaTnio4IK9`)&3O%}v+0utCH!nedkPU$ 9fm0of5!kAsG%%^0oBwHOfT?2S<_yi{Tzf_HYm-S6zXzh8k_6-GBB zM)1K7+T^(O$ {y7`u*T~CLAXd_TO#Yhz^@^C!t1J?+-`X)+oJ{H-*FAS42#`@g znYq}mU*pJk2jz)^`o1}n-z-;hBOtwLrvZ!EQ_5rP5I@p6LmWHkW1!mwBP#j+Y1v zkvN7U$%B*tDM=F0Q9_d_i-8tPOG#-qrcS7o(lnH4L5)f%MPW%*$YRrBE3b6&Wt)y| zg^pG~($~z2qPW16v7#>hBpyh-(w3_eqcmK$>dFeog8-u9p>;L%sDAO$82eGtSgBQR zANDNEwNPZOX&Q_Iba+qR2uGRJH@Z=pIwn2C?z1U}NW$jo3>k4$P=|)Nl%@cfVG=!T z=JgXnO{OLZV~+4_o-URP#IBSJw9d 4~I7b8FW5rwCJr1)ytK^76j;WEMugqQNYQN;c#H8_92)Y42r=~2#E3@1!s{* zluCV#b@g7HX@S ~hOkGu)-x5xek0~lKZS1jj} `0@c8XUF;!0 G ziy=p-(B<|PD;cB^9|4aIoic0;x+jOG%A!pwBp6xeYg|`$o3iS`4Z8J@XOnq8?Dh8Z zPr81FKHI|HW~P5;OVWr(+h*(Y`RlYC*59^gQ=f#lHtMKLuagU9O}A^hP5w6Qb)L^W zFp2`EsT2I0#5{8kwEEv2GV+Vhb+e$9&(_(FwY@*@X@6gzZ)NXuFUtD5akF+C-dwL^ zP(eTqgez(v8gS3AF%X78LKzR9K5O-7It0P|k0P<53d2~0_?cs>slZho@&)7ufPUIg z$TL)T3ma$3kRu&d#!($gVK~tKWgONX%G+9jX$Wa_Fmh`t=w!kugfz~rm`LFcvZ$1_ zp01dbwECPL3A(z>lh)@ICIUScH5vPLiiLKIh6SxV7Y=n%ZKhmDftwDi!msL(-&v0V zmzGP5RmeFtNXv+vLn~`~E_1f#xyTrF!?P~=c`+U0CEW_bSzyz&Hb=jLXmi3=5DbGx zoMD#xR8qd9sH`#%t|{qE2a1$nkjhFNqq0r>7Hfi;;lV%D((_X~@dA()Zr0jbKC6_c z_kaA3t@l$zgP>S~ydl-L!YrGTkM+}bfuCMcYHon9B_9W>!r 8+2g>fDb*Q* zQo*_kt6+U?GifbwRf||9 )H7$-BjW7{2CYhJzZY zTW|Fa0iu!*x1yfP-jr}EML3yF^RG<2RbNg9sGu)niS&7Ci$B&Se%>$4yv!}Y>HpE_ z{4$*|I~M#x=w ^vy12)vg#RD-{ z6eRMI@*k`31h20uE>`9Qm)8{)PtO{P^hY74M@k1$G{z#ZTn$~JRUaQKb%Gc{Y2puQ zIzgnB2P0X}xn18=fm9tqN!Y7D`2{3j1X4Jq)N*%RoV0SB_YLn2;e^u4eclKpYF}+D z11Yj{;YjJ=J3cAGicbry$0r4(_>|I}{`$xc8ZHHxh5bDdQg3$6Jwn&WgjOFR_z1Lg zIOifIA0aPt;l&j_(TZQoOlR~l9i>eB;P_?MU}BGpl>rU0e{o#2v|?W{E>Z@Tm@d%D zz{cCIp>>I~n&SAf$Z(Vl?eB *XgOHmm}yBjwLu=jldciiM3#f9xJmPQ4u)#!{?odRfyq@j*E8$r$_$! zcqBRM=&qo0E=%H)?8Zxv&!&XfrFz@CC?DX(FBp|3dR?hBNA0S7K($NqDFR;nwn;6j zix77B y59$h1 zmncOFDtr{CjmeLk=);kqa7EEbc(k1O7g#70YNg*53`8&=POV#TG8D_MBGyMm4AVgo z$&8#bi7%}V(+x ?)Le+5U))1Tt(ch>ejVTOP4d(p0k}HWEtmlU!qCq{s$GrzqUo=oE#U8nIEV z+|G!NkSrM)ono-=#xNx3DtRtd@q-3abYs)7a@!&{Lb7C7bcVrAfle{viCwlQViQS` zjfvPO;FZnIonpk}M7AMf6G4PZG9Ws~;nqWJoD|t~U??rdXLfs+y`XPELQ%&?%R8PU z7JHVF16*xmLQ(59KRD{u^b^0)Q%O@T23C|51dO1=%>{;{@%3wpl5GWsqH*`DD5;8} zz;HA!e-$TLvJx0ZPQ&88H=qB!o|ja`L|{0Yz<^36Rk05kPFvG+8=qdeieeW!9LYF{ zjgu@{1`I zPKs; N$s`?)fiRrenkt9PxQf%Yl$y#k}JkA+g(_$mR5+ds*4r>w?Q}$!i zLV>cT9}g)`c@Tw0$B#{n<8?_CvUVSv7%Hi#_OY?7T(4&cIdk%VzI^lRVI5df>N~-Z zG i48 mUQz@FeJsCVQ50hD#uo? zl`{lQC|N~FkyUbrq6sFeD9MsO&WWr#=7npXepNpLtXvsq2%3PtLIQD3(!?Fk$~>P~ zTZ fgp-QIBHcVb7OCfPuvjD@4i1k5#7Baj9v=y+dK@Gc35bKkBLQ)dNN10a)P;88 zntL2lQY0V_7LNqPN9qDsT#JuGN{$3{0gZI|IA~HNARH^q9w)3Q11t(wlv;*iDUpEq zWs+(i4~uK}aj@h_KpZq435bIvM*`xa@kl^?G^XswK}%!$ejFq@5)cQCM*`v@F~vU~ z64U)vq-ZzNnKLByUqwTQz%OhPlp_Ig(4 8Sc0>`1JjRbTFl`Fz= zP&t<{3*z9Zk$|ot!Z?V7C~5Uw#OsoL6e}T4(b`Br98}I_m*gXv3vmdtNI*CaI;?hK z=aGPTNX%}Cj}(8FW08P3grrD794sCQh=U|W0^(r7HIGO@e5Cl*10~oK;grHA2p$QD zgCs=);$SI}fH-(+B%mvZ%)E$$n9ePXaICQ2rA7kcAS#i7aJ(?tNs)j!SUeIC4~ZEZ z;YeW>V3B}0I8r1a4i=9D#6e<_fX;ESBU*byzquQIKZ(8>LDv^J>3bW7bo!u6X4yz@ zEq0%KL(+#*gfzP=$PattI~_rbX$1SYghfWfU6dp94MI|Zb42(TJCga=Lm0Tb_B$Q? z8x)C7QS@4^^tGnZK74k>awOkPh3{HmL)uvE0d!S)#GpC3uMEJRHzUj@Q#-_sUo&<* znt80kl=CV7t`GK10>!0$P9(cW3o!GjgBFB${MzS4GQGn9u7)r`y$)cQplqT8Z)PJR z0Ve6nl$WsE5zp8l*v#%`I*5Z2cvf~p6274vcc&SU5`;C_C1`{PU;pgGp11aSgQoO9 z?jW|Y8L{C9$Gu*=(SG;B?RZWkjb5Iii5>yu4Ut5YC=$ZS^i_pTi~`-kI*fft=>}{- zO(gAGOTolE<|aY<02A(_BS^h+`6DZZyy2$8+t^19K1H<>NmDj`FCA4daDa{vGxuw2 zOTtU)u4qP )#;_Gz5-1BYecBX5KKgebWfV&?LOecPC;it`Rz*sr`{vpS>~T(}y7d6I1tOnp7DR z+vA~yB$6jL3@}m$FmpGj7KekBlR`w<%CX>q)gp2z=~h}Oe_h!oO0OqLzEmxm1XFe! z6CPeAy+w=0LE+3u+Km 9CVd{zYWdmJ9$bY!S0Zl b_E-uU&zmZ z(zDW-^lY% ?he{3c1B zIMceP*!KgjhJ?)A@22B{ylh&45k58DGseC4+2E9q+mq-Z6a=ib`9}D{w9f|mI*0PZ z1(R4%WWddISIB7hzXxEe?EupYm!ItKGiA?LkDq5wq*-6a!mtuduG<=OpI=z}9k$PY zRXgFttcAnx*gd=lRu%reE`0XN>!p)7K5tTTZLnJUwox|~p}^fF){HK-goDa*wV;vS zQu;uXrMvp#NN=t$gezt&nJTORXa1{0hVjPff}zxKi6uW5-+pSurfY*GDYc9pxMBdW zIT1Jggz(wB6nus7fI%=HCohay$jIuSRp!H;3t4%tK$Xvnz4N$O$B `dsy%EV@aME<}&USgU$2{|_c(G3E<73`T=FLP8FOF-J5; z)~g%5|6npYBS!45M?2xuh^+q{s|bkqoM2-R=K$$Dib0>pT@%)O)_gGTzHU$Kpx$#x z$rvn+1xqG$YR=N}3QHKqI8oyfv%137>nc}&Fd3aIt^=UKjsaf>G1SyfO?`=fLCK|W zvSD0bAQ$%`C8Kk~<~T!=!6`A4rU-~8KRpM0X2kVS^03k*52{c#**r(N&xVo`2SRG? zxN&sml3o03P9NtA;@f@lGp+)fGNrb%pbDyqbOr@i@Nt+6v$dp-0cK%%?CM_58J&IN zh@{u3XImv0CTZn5ed* Jw^eNcUA>` z0XB$#8)5GIDoXG@)&LGyV>-uSF`T?|)nwI(StGsll@u}X>cg&zA{V|8!&2-Mu@!D_ z?ErUejX|)$3DHCGUc~vBGj6t%+0m#uOtIjn%SjKFCb?EM@TsXqyNd9ns+wpt0$3M^ z_L`>G$VA&(q-5}g_5o^He&~2fms%^b&&BFIf w>8fGotlRwcjISH=pLh@+ zKmf4HUbt~xYSu~5(G9QwV1Zp*H~Q%I@pG0y?;vO0bITuXo}O^wGBC!Rb(=3*zVo%j z!u!dyK+d{;=8Ea(f8Oyt^TuH%9{Be5-&(dF@xk=-n6qwR|MOn&ZF%cg=G%j_PWKF7 zTqxnr+5dcDVw>Wu`@HS0Z|1%K19Tb5S+~uxweOSfeSQPXVeYI`0nAyq`SE+^9$VLA z4tEFoO#|OudP8wm*+a}#LC(6lcb*j3+j#Zc&`%_1-P|khdgZ<;S8c_;SCX@Cvti>i zH+|bM1D}W>-(0n6)+TTAxtHy`2UNMU?&U}Oj~%+9`+AZ-F#M*_zfWE=;JPn%{D_0< zlCy5@9Y=rox8T%kQFrdFD>!LS{qV)Ruf%1yiOg9Sx?sBF*i$B~z)f9}v#$FW?rATb zJN`~`q>!_&;KB1BPb_L`fj}f@-GzTYNv4V~Uy`%#Ibr$z$NufQIcPIL$XPeAblnAo z-9NsCsF1U6^V^r@Tw0U52i^|ZS=anb&YJ^Xd>;HWXWiyS=WhP^EtBG`yYQ!HkDUC{ zcdKM)o#mrJ{hR9+t)kQ1+*zmPgFEXq5bmtg1K_OF0Jv+-9tj$)1! =B(3{Le4tPBX`!_b#HOM_bxe4an>!VE?qLgy>>Ah z0pzUf^V-CRZa-nbGt@iCS*M|Z=fPpmLrhD~KK8rrk6*TZ_IZRqRQt@GbzfaJee>}2 z0dKIGhdb+Tecy5SOG|EQLH|*lbwiJQsn_wFe%(q|7CG?9S-0hm%^!V#&eKb2Mq vG=3rJSm>j;kx|mb^%3-P51UnEXWL z@{L&MmgRQ) K8t`a3&=)FW$Li!P+Zv z$7^(_CG!;~E55>k(Rk{z+t7Z^OP&ddTS<}ffBs|26(fJ9Wc!YZmwa>lFO(eSs`~mu z<4#I0efp`6i!a(k$?TMi+6QI*Zi>kxxeZekw_#Md#q=QBPrv@RGuHl0nqv0FPaXf+ zWj|4}wc^C1u6$%GCD(_VEB%|cGgY$ReG8sCW+x@*4=j6P{DEC?lSh>s^B|@w9>jk} z6I)lDiIyR6+~|F76E$UhpPSErBH;&0w% j{rn5_g|dd(BlKAFCQ zlKqw$0@H0f6<1YQPcxD;F->tM_K(J07yXJ8Kg-zg{<6EM(A^hr`|9Si@1bO7O6CKf zw%td`ma5ZMo!w(8C3|0W#?1?tE~8}gbFKULE`2B#gWQ{!u6Xl$N8>PtV=w1>DuDeo z$%(AvGpIH>Te(JJB9gLW&r~}GbB|0!`+ZTxKBS9o3=}J1KiG{)wfrI&i!P|2ppWsV zv+0W)!mhwn#V|K_V;S(_`u(1%S-9~{jAo`|3xy$p8Sw^##gLHHy=-im!{rXdv8;(j znNxj|n=akUa@{@{BXkv4=LSso5ltcP`NqBexI7=BA8x-G{!;rz=y%+g3*US0HjVuv z>~6_D=J{h^lI<5Ed*g?;i9>gi2F*4b2=y=8-yU@5O-zemH>+S0n)cq*1;5@Z+b=?I zOP`-EdTs|kX2I 02rZ8tXRZHrjbgtD?T_5L zXx`8T8x{LS$XVg|#qkzCy)JDwu-toocAv625Qx0lVB$epqLTe0G|j*5Lw~;x)qW9j zmTZ6b)EBqQ_KVP(o*S5U#7>R {qu2=*_so-20F*4i&Z_WZPM_aF5G z`nF=f2x}(Pe0|Qr#WcW~{US7fvHF9==5H}YDfWv{KX}ZVz9n~Q>=z+B{Z!kIkAGC` z7Y$Q ph}%>HsGGM1vJ}g)cC0OOEZ1xBGP_o+_X&` za-i=9T44**zAmfy8Z*v+d9#7hnP6O!a47Z*?%9oJzofx_!G)%zX+YP? Ey;A}pgW+wEe;=?NTwSHb !Hq?~m5)>-=a&KN8-N)R%Ywhnr78>?s^ zpe2)dDsF6$nGYJDF?C}*2MgSY8{p^_HiZPO8FIe I1hpMiPS~1NXrLWBbdu#+s5>P-}36At2<6vL$}Xunsj_%QtuY(ZA~w{ zldyI4b(FM^y 9s7Cs_JL@!!(FjxRr*YT&x6jIpSy3`kJEQK=S;Gv5BQZndb8=9 z`*W_Hc^yGBFRk?Nbze)#w)38Hj9zskB^MoAcK_U$7wjJ%izjly8hRLxmqZqeC)&6J zGeSQA{L5P3{Nav+6aeXMw2i&a4UGoL+T)j&-Te?H9SwC^C!YKSC0C{flXurWNy&-l zzR)=HrKe&UyIj#S9BDYN3q0W~A$p!HlPXSIed;{=_ ciXn4vQ98Szvm|NdlkKop^$JYHuA*C#7E7nbWV8q`E=euP!Y!tLpW7Sy z6HUlwe9lc~otcozFjH;VG@U&Eyu#a;W`q?E4g`U~YT+iE$6xRI^9mKP!9`zVRw#kh zLKAawFY2FCCKu-~;bkgdwagUSrb&0gHwOMp9|0zUXw@Z)CrNTI{I{GG)> sd;jIDQgckUHG|*&;jY?d+-BM)d@(%f_-o#zDNgzQsY&iL=~*_i zMs(pbi*zqC_Cdt)n<#i#%GirTxZlM1m- S;}gE@{W7e3 z7We)8Yv1-eXZ(t*m=A @RRkmJ5@oM~OR=jBsAh0}w@eVwM>iyvM& zioRsY{U$QeoeY4uuO0xui41_PPkxif7pL~T{{7Qdl3h=SGzRZnQuNbJsn_x6YSX`N z*}Qn~6-#d>dmN4qO?$Gq@2B^y=-oWl&`ORRI;5d{hTr7rEsHl4j4j+q4AUWv)}57G z<_j0K;92sUC|!jCpzta`qUbffILi0Ul^gSaghK<*e$zSUbv$%?zYPl@HhxH>+Gz{i zz2UlB$;-eGX)L|C;EFzHeS8-rDaCzd2w7z;?kg1nx1QuTS sHYNT>tw3?# o_Epki>k7YSNtZo^mM-`ILCZM z4Mm4EESb{|?*HCGXI%~-(tra<`O!HNIqs_f1?kv_ZgaotH&O7+yb;dbU>u@4fP!>8#fQ!vx@u!YxeF5j`{9NQaK#6r*ApG=kEmVcgN+) zMc416 nHA#!MB2NI5s!XbGmBl%%{EvH2>(f(*M zx*eJhUA-DdcLQRBZ?el{IGS}lvPe&i!WsO5gq#H_XUT8qjwZET{aN9{<~J!S-nx16 zj-OjuvV7y*4_{iulDp3wH0jG*Skk}y^4YiYWZT_s*(clzXmlox&e5fYzq25JEY9Fn z!%3GckIz*D=VKI$IcJ@ ;U5Tgax1=H6q!k1K*_?_ESMWJ3U7|FZv5uZ z0L?y-o{^Ek+ d4yxw!5sXe2&W=^XWUOY<^FO5`e3isUVDuGHCN%44 z*Hkfp15rMVqbO(hg^s5t%-Qnu4;r&jnE!FcW7AHa4-1Z&g+lu&r-h1tUCsjE>>N(- zpUc-=^VHX5m`G>$1^aT}6<@!ynZE-Ys^ir?!+Q37hQh>bJFu|n&IR9Iv+YrQHc$$u z_r85-_lu3UasUgbpPu*Cw}sbilfvn{7i11Tf7vW<_JQL3M>m%HPI#2e7#2=%>wDm< zMX|%__V-qNG D#W`Jh?o3rfe1p&3FIYQaR^YGFy2#z3to!zH2|@ z!MVzIU=_g3LZSZo*_Vj#yvrD(v-`U%5|*9(`*dc%v9tS*RcCH4+k7WJq$`<)!g5!0 z`u?*YkOJ& h_pFW(vyQJvm z<1hG9*$ynM`P-JAb)ARPn>Sg$s?vnho8~?8-YL3px}{2{Du>gTk7!)152w$+?2Kps zt_i0vTD;3SRToZQIbpNuN=-O@*g2oystu>NT-}ntKod^iHrzGfjnZ4u?y^~^;X?|i zs}L!it^-gwT?HuN^l%U&*eXaHP7jCj2(}7U!s#kV4W~!I5Ia|4N;o|n6wZtiPFE4N zW}yn@6k!&sAk{2XVJw{9TO4ZBhSTS-dZ_2UnsB;`&co^IGYhAyk5V|je)X-3wBhuo z>Ca^8!s%_cneS=C=_&;tPS-snoZfNt8Pb**wjEgWEQQm1pR?;Y-z&FbDw5Cc3(E`N z{qCtHZ)4ypW}&e3jz=0kzOhY)ky$9L`EBGKTQA&BGZGJ{w{1Hq%@h_+FYlH1bU%GK zy=_C`7U7%6@M$r=9azH@52tIGX5n N5+cuWZ{1%P>5gF3i=P z-QRGKekIpNH48s|`NdK8{VbfGmC^Ls;t3Q^k2d%ByL962KKVatw^C(y+@2_2G@oya zq63qQ#{b%X80-g3+idR7+ILN_iIxo*p32 t>;L%q1vf zuO4>)lhu#1lNWSv%gV61zy6l*roG#7?+ktvM6l0&>E7PoFK0Wk=-w9XGtK?}Vb2`6 zY~oC|Hqch8j(Ib`YFzy+Dj?1Mi(Y!*!^M|Byg-@zRREv+Gkr;G?Y-V(4AI;_aary^ zzBpwD+zHaXEgf?+Ke_jW#aP|sxqqdp*S~sQ@&LN7 )a)%GR5b9&GRA6{i@VEnfuA) z&>RI>Ze-g17EC^oF2N@&g0pJ({{A&=*m;W{TA%;)bC~;i*ebn@86k1bDOwp4KJYq} zN2wD3(kPX1cuC?{i5*^&4lha4hFVoW UUNh<+tF2G@yrnw{qT|`pH3A1M=nX+ z3l-yZV(Aw}7Z!4JB=fT!Yq&Xb2vI8SQABpTSXr(X)XC|@$g9MRbqU6K3C5cQ;|s$7 z<@rQj_gHbN=;sp+Q6m?}C}*DV5mtB~X%Wt%fQ3GI!hL%))nLUROh%6b@Zia@U?GVG zPrB<_$m-_|i{bEkYp#9xgUP6lb?QQjXO;Z$yt4mK9Jq?@Qx+h)|8YKL^ynx)Wnz`9 zlgVYduAsZx;r5F$E~Pb5-f3KoG#!E(8GVkh;<~|-#*n`;q&agu!drtI36m_y8|g*X z5$fH6xUDu2; VHz I0$n{R?p!e42yjo4#Lm{%7=q6bb+#JH2>#< zFr8kY+`KZWqJUdH&z|`38;5N5Xm3lFtR5}s4_%;a+-NYS7-?@_I^D@q5~>#i?D7Fi z%9yb@WrfT8aLuwMxxnqA14KCCZ%JlIdA?vMXvt9F>@DnQ8$&;A=}lA7Yz??QLAp|O z_wY;&Vd*8wa1e5$ZtT c+xQNh|k#>$@YEkyjO7&+cq^nbmOf4r{gpvHg6?VPF rYa|zns``vGExcLT3uD@bKx2NYX zpyb5$uLrC_B%?PE+w$2*+46a;B9`cT74=Q!-*D@ep@j#im_Ko&r*yWkuX46f6;8|( zh5mcCJyrMxuB*VHyK~TXch(GccJPIZi@y4DE+u!rlOlH9!A=ymJiGjj;zV|$u=jD3 ze!BK(B%=$5Z|*mosGKO&a}xC&q2u>st@WW-sY?ny7o2~=)$=InFM43t91*wJfs j~IsX^z28_uG4jvdz!cdZKlU5pvWI~)ooF4R77`C5t z!;N$zu)K6j>J!)Qpwok!?(*!vtK&+7<~;WMx*0Rs>A_7`ZoG2ILL3>y=GVKYpLO9K z>ghquM|6o}7wy?$+(57#f`Ra7+q1?f##d6L@pXm4I0FXKA= 6u)l);~?8 )ISWD$;HF$A(q9r-n#mNdNrE$>BE1x8RjNJ9oSw#-I#C`VogY6l zb7U^!d^?V6mmCh}Nn2L`qP>Nhts3mRK ^+8f|9#u_PJ-tJ5N$_jc4fPIcK+1a^>9aEo >x2}e)5wC+nv=B#Ne z?-5$h5C)!Ac|y)llx%&{u%YzKtuc>_vHMN`soZaRyu^lTxX1YtQp>4tUU2l;uhMsQ zHa+^*-+!O?I3@iL54of8-IbJV+Bp5QjrYGz$%)R<&%RRo5hYhn{BHWVGds+&q{A%d zQxwZtmQGB&dCk(KHx6F5n!b9_zPWE+fv|#-~)azg@KeqQ2S#WtG1dN z#9uX5QI|}s#3;sUvWAFcT3wo8yqrztUml8Sg}0xFt;9lwNUxJ^tED{6Y%44l1ZTDt z(pz-4ReXz;3wAKKr&9k^!FCqahR{cPqeiu(2{tmSjd9bD{yzkJ6 DNyvGx)U6Y4sF>|51d?W# mQV b8?MCJ!_J8uq#G{N`i^Yy`vM`c zh7jp1g;7BAt;XzS?x _HaMg)fgM=f?ST^>2;1h)&55gEO zujmmHM~k)i`lGST=QjwZaqgN>y>W=qY!~Sxlg1SZxGBnAhixKsd5;^1tr3CnH~Nc2 zZ(~wVMzFvaXc$l|P8sVKryy^P-%{qPDha@qgfAKqkbP}AwTyp(c{D-H)qeKJ+Ba{k zUG(70w>cq=>NeJ1;Kr8}N4tac#YIbk^li!%!vQnbfD$Riln^UY6h}xS2y^6{SRVP% z&6MZ2<08KUX0|9N7!C*qBNlD?h+`7{lZ<}^>`Or_$x &7};Zn=8@e;*{jMgR@!Rt1!zQtsvSPhREXX0u1 gj%e8QyBh>ERSz_%gD~LoXr*#h9~1J#w7MXb0TY?$Fe% zYLNd^&dVyF-V -RK#e{$niLyl=xM^5vivXT$5%kUq! z9kqI %gb{H)%HJKQ5 r8pUw}(Rz-r0SF);sV zkeOC%)Xqkx2bb~RZp>4<9Q6$Msr~FH)4k`o0-@j7lQDa^>Fb+5Z&p9s$><{e@=o@7 zYup3@%Ae9%)#_=O*Ccz_YKIddBs5lNNSV9K8LU&XQD#ozFuE`{h#RFE8yZCPQ69p@ zRh4ve!BQp!oaDpoDdjwMK$C-Oz6^x7d(($Ey|?3cil$`lD&M=t^b{pqS1)_-qp?5j z9WFq?CaX29#Bta_r!NtOs3n3d=Y>jCa^w;_0s~$jBYs5z9((r}=2ks>FD2Ksy#M9; zlm)!R6f3sTY34jkg~dM9_0oz!sCH0AZI!#m9jtJ9gKqXuwZAUAqOm%=qDHK(W&e6y zUV!jOiCQuH(u!KFFQF fXHT1UX+^cqgT=JUb9O~QtjVsZ3y7jO zyQ0d|C=NdDv`FBf!NV93f3>*TT1?6#0@-IzOG~EzD*UcMO+~FcyTXJ2|Lv&=;7_m$ j|GTm)+##1gJFCL)ak;%&jKSdG>@5D$fASA8HSPZZ8#N`F literal 0 HcmV?d00001