From 25bcd14618f035b8a0513f6dd889f77fb06f463d Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 26 May 2022 08:29:44 +0200 Subject: [PATCH] - dynamic code generator: replace invalid characters in generated function names --- tools/model_generator/gendyncode.jar | Bin 94595 -> 97494 bytes .../tools/DynamicCodeGenerator.java | 38 ++++++++++++------ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/tools/model_generator/gendyncode.jar b/tools/model_generator/gendyncode.jar index 9763ccfb6839ffb516ebcca1dbc0a44f859ef740..c982eb0f1d7e44a511a9c164f5d8720c212a33ec 100644 GIT binary patch delta 36139 zcmZVkV{qrq^F0nH8+&8h#yjT5wr$(aE4FRh+;Fq8?QCpp>}+&j-_QNzU-g@ss;+*} zHB&Wps!z{3AqP+^uTaQJvJj9MV6d>TU@P98YDvgEkpGLaP5+C@;6$kZmxKL(*7uYo zaP9MG2hce+3x<;NT=FPTZ4+UZ)LLnaY-nRHGq;)oP_1tc1b zi&c;T%V<+&maS&|;Luj-C4^isN+9Hd1CQJyyS&wcM_Y~b223U-F&JDu>g)lTUYnj0 z9PR7J&W>;ENAJ@PGvJFz5|YME#ezGCQ*NS`Z6Uz02Ro@e!aCwC5zRU%1!9ZU9w8u~ z9AgCpEvG;VEWJj#X1OMQw0o_gpl`UHw{>S{HR|^ID|sC2Y#Zf8CkyxMxSch+ciD@q z3_RD~_3KyO68Fblq~CRD5yTYF(yep0t%G{2&M1SNg8soHYRGLU`P$kK+S}O2*g)gu zmjj~oFAD9H-yOLHG`VD`+OHY6TiZBP8}0y|m~i`!?30es23s!nY=tKG$+PUIw(7k) zUP3r;I0QHhB{?HzL4_Z}v_ayzWl>&I6AKr%w9D2H56j8cT7<*ygj_*vo_wR+vz08> zh-u2EdPaI?OSni9Df1=_tm(KJI2pK_N@&~?C`@f<{bl^4Om*6@LqNgjW0l`9|{$Q3U_55;ExnbN}}G zRuWd=&~S$tHo{hj)Ngw=U_q)7%^E0FR-v84v1Xs+wsujy*1yQABnFHUpn7uz zh+atE>ibeIqWU7%V7?Js>=3@dz8US7T#WY#84<(3i$3l3JvS!2e1efj8e{l=FB
@`P~TcBo_%@QRNmkHZGgf>Sv6s@>0BGi{b+1c}*Aig1YP~ILP+$`&fc=Hl_1%37v zqyl@y@3ODNpQGp#6<*;dsiw@3V#H)*49O;;E^4tcA*s!os4YuG1K@uy0svQHliUeB zs&q=f=yTn|UhFyTf3aBb^CgM2gWO{8(Vxy;v8*x_B@JLovM{hvf+;+T5MW?d&|v@N z|6jzWc!vBBZy9uk;20^t!C`^6)GY^mah&j-ro7rq-njckcKa7NH&SUh_lqH_va+Qn zF5{|S$WOdwkW#CE)mzLD;#U5W%_Q!A`@bDMMB9of0;?`{i7F}e@Qtn?ilm=)|1Ebw zj1=YwY&>Aw``FUb!;)R-^L0xfjHfjvbMOqZ{6-{L=DwDhj(afK7+_#&jwLWnY8n~? z!N+FcOvbjvX5gOSoZvRFFtHez>zQHT(#IwTHwUW+<^J*7LAt!GZmaq88Gqi%xY~rU ze)Jyvr%k|p)R8Y=2XU~^{!wJ~-Dnjx((e4*?fuUakIkFlA8sBFq9hu{z262g+YfMl z<)x!%YD|`77fD#HUjy@q{uS*QQk?GwMtn6)?FEHTb8R*J%h`+0-{>DgK&y55SOW5Y z*YbDV`BtkHIxgEWYiYe0p$Ho)ZYc6)_R#2P)r?_t4@q%n&-Es80!l0$8@l3GSAzRc zR4Sd@-AC|ac}x0PaOFp!57-XmM=(cpW93ISVm)!L*?!_^;sRJD!;Q+QnH95{>(98L zqHEu+DdX!(3n&$zh}uK#t@=ewsY%buwt7Af8mE7^#563fjUaoI^50Qe5INjlgLgjs zNADM#7DucRc_np=u@>qz*z$D@EYHNybOCc7eCew~%x-}uUB*lZh)QM%zMYvHlLHF| zOkCD^A5W5Do4`WJfJr?3giM{re01yMU|VukmM&6DJ-)3jKfiKyS{qw~x>2k3X)Vxx za_1eCg!HSZLG82ZuoGqFHbeqt$=ucQOW*qx9YGD7nd7hfG>v}Ia=nJl@F)FM+P@n1 z$LbZ9nB~U@c715Yxg(N=6u-vKQ11K@_9M`bL#kr6V8E$2tmDo9j+3nY1^WZKN$XN} zi0RQi(d|dI2rmtXLba59;z${l^x~TjvGLBTz;JKF*LPo$f67m#55`aA3yT-DXXF>6 z3zF*zGQ_6D>4G!)=>f6+V*eoDDjyCmOc$uvN6QL~gs46!-o$o(k3gc~j5;G4p;g@Q zA0cjScmosPqG?oZ-169IO0|u{C0oX_yXfe6cVVt9mOsonT^(GQ5+KeG_kRXt38 z0CIMr2=`DFEw7j(WCa9h2SuNgvV5YM&nA~+F%7tTv>M%WG( zIfH>8Z0HtL-}RI*p8dhWF_UCW+cdEW`?guHzN zoUghkJ5Ta`pIrCKi1W8mz@SVbFejWkptgrmH%n!?7vLrM*=8=|9wM&golFy^gmF}CnTCiql_^hxrLw_3iZXN34~1r6 z6^84D$|YNSI#kBiMPb)i93AJUgFeWVGC#dLNvYR=U_sO>b(%D98)nmMO0QU#IyY+g z8}s~3578(GQ*+M-;pYJ!E_3=V8ZPtE@MMSfvOf$Hyy{eJ+za9`-Fw-*f!AVH|^?N7u$aO?16ioc&l)=Z9a_Dk>u;?+9EwN z&E~LoCBU{#f8fvNaI|sa>MF#w@qb4^Y;F!ud(eNzHcj=xWTg{szVQ(6kRFJ#eGb4c z;taC;X#oS0wN411$vKjpub5m3+RoH9eT*;MASdkSe4|gn@o5JOPo)tBqKmy_T8Dg# z%3qrs)CVB8D@$p?$!Tzh0LDGn*b6Q;LB}vczfWYW2V}qgXnna$g6Y9{-~#!pXSK3nV;bZirKr;NP^jWX3~fHh@#nhP8$2(HQT4?h@$y>MeJAd z4G2ys<7P+W1*A<#FuK_3!*-L)1Q82UtKtM?#=~oUrjMY+foWO za;iast)Sdo-M3fDxu>6yfm1Lzepsz7PeFA;4fd|yI6#(@bTU_G@~n3`?*8?PnZNS$ zhksuMuWt0ixJ5+;ZGpvRet9vh79)}(G=RmIB0$`)B~nWA(BS5~bpA8FtlF{O)fzNS zu?mx0kEuSRVK1kba^nk!VtYYIyN3#wAmb%BZ~(i~?2++jf`Q~`S@mU|fnnjohM1jo zJ=Fy}4~U*M>DN6~>u)vvBabS)GHGx}^%z5HLSsFR;I~}vFqU0NpYQ1(YA#-HRe+NG zb|OC$kNKS`+9!!I*LZhYLM;QWM8{FZoUjhojd#u$aizG_yj2Z7ZT-y)ghE1$m-{yD zqE-dlpr{!Zm#;p(&-^blefF}Mz!n1}5(a^z5)oa1fmw?rL8+rSMk1kJyDK*qYwx1K zt*f`&3U$ZQ2;*!DOyAX7HxNhb9Z0#6_|9VE(tK!032xTFsL&2$?6k5k#-9eMGC>L_ zETMgEf8V*}!i9g|xWGYV8MC22{9;*kXqOA#;P}l{X}4gYuy1Gg8vY$ZP+Uq;OzT%o z=gQfAjUY4^-2lZ@bYiGn_!_m>5QxM~-S-m74b<%+?OUVxSd$;Pb=kC<0jT}KkD5__ zYWDCn`bKP=6snFYEkdeT5@|NCi1raBm{c4IPNt3uF-#JQ8tRtEqsNR~MxvczvxFALXz0|^(e~wxmBrF=A1W7fKw>?5N&mU$C;9WLj+;HL_3}n=b za=Vkq=tv&oav10@D??w>v5W_!IAF$fb)<4op>Qcp1!M{*ze*HrfG&8QL!bxf z{YL*@%AU!{U1FsOQCyFPDR~G@oclGgY_mfQ9$cYW6_iv6;CoqRrcOsKh}G4Z+Ne{t zCRy8|O=9d}O;QRMJ76)&#YmzW&IVrWuj~luauiT#nsz+(Z;# zCVur|S(1#XqQueU0Jz$DTkCVXro#)%Gt)ZQusqv0gB-C@NmBUEZA#8QjVIC_bpeb;-8(u$@ z7!ZenqH-s8F>WA#XI%{6Dmu1$e#@*tM_Hvhto-b0*gJK0<5IP1y5!^h0l{iw-KL;g zS3lpvJt?iK6g#!W*7uP|+z#EHg7i-aOQnH5RZd)ju9<tH& zm%xU3WCUi~CRqYG;#~`0?)@+<6C3!@&3qdGi=_PR9^C>d6!EhxvY<&fdE)%s=A6K6 z7NxoVDDPW#tTd};3^`SqrI7^AmZsRfv)SV_E~ll9U%feJ1Y* z;S4hp5mfcWZ7S8$NU7capFf~#HY#f`Qn0GvFG+UyIhISOU@NF=dlkYd80YI>{Uy}? zRHoo#-ggL&BMmwqNp3v!kfuJ)9pCyp#78iltEvgGqAynY5Q|xk(CB6widT#^;9!Ui z_ceCxFL8Iz)(n{@!iFe}7uJTVy9j*)XrlbD3w3H8oj=zQ9v{U_;Na3zu3}T7)gR}v z-o}mGI!Dd7-sw<#J%%peGS=7sRQrs5y9-z{6{!^5rOpZDy2zraGjX7*N!dc(VdcJR zZB#VoQJT@H`w>CK$2vs30 zy475q(-w5pwYB?{!!eWBhInjYzpNv9sg3TfpZ1WV6_q#rVEA3nHvf$zv_4c%`9}mI zwuyeFEmEp?u9=6wZWVM}tF}GOIjA#!;OwHtP4;XVbBi&OfEaF^0GUG1y>tpj>$}{d+mZT-Gr41Y40F^!dO=KazC8gvVimT<=PR*?pQ zUE_bw>R}P$wAW+Cd(2V7k8<&KCx6Ds(c zC@k;;0U|il3s? zHA^)$sVko6{?auS>(9;RNocz7_Oc&EG_qIR!e%C>4o8+F@DjN!-L<=~L%P#ySsYO5 z%A;*lXF0fYC`@p-6{HiyEnUsi>lfEyCo$}ntg9yvFI#kr{T?biKiQeskzskVrG62) zJiAu?5Xkz9zcAh{1_TQr_kXz8)t|r%?h}t?_-2c6np4yrPy@{v6+4&F-c1&K@ZgX3 zySGO&Ni$swV<|A0lE3T{4#eF=m4jtkQJe&n?(}8VHCq->5MSfre&tTgf`7i}-`E-3 z*CEXW>Kqpxj;wy~@(I{S?7*g&nh1{lw|o_7tDV-8wwN573Dn`Xa)_GhNT86yd8{R` zuI^Ha&Lh-KR3@gD{rf9v#Z6PK+f;3)wy{;~Js+JwFB(Us>&Eny_Cps`DQHL&oaDis zqlN=@ErJV%^W!Fl=MnO2I`HWO#!tqOo@Dil{Sy%^As7|o-|?~Ax8q%h?>ymKMr#No zVV!wKE}8ZtA;6r_s0DIx78YM2@uU3+i4@{LipY?}9_+)gs&s`$!AW#sDHkcuDunPq zr6e@S>r|dW$)+hGiE^1qRC4+(fx`CXBoD4*gsrvq7qflFp|p4+Ioc4V(-6UlUHH&0 zo=V>r2-16gv3MC%BT5tELFU98;XJBDsG^6W3QM(X=L5k>u*fyj|1fgH8*we1X5*c} zBzThVR3u@H<#6H{X<>1D06VX*%v^q573$bY*=Y(h!mYQ5nFBnKP=yC$uEZsx$(~wc zANwiHFbjqZX`WajQp+x4WguCme2GkDxzM8$M2r!#9;ACC;_)CnH;Rri>7F*?>Hw4z zx*jaPF#yL8DQk?)-uJg~fNKsmq6iKq2tQ&Fo&ah(6Pz&H4DQ`*Snl$R^91YouWTDw1JY^Tm(Lf(UBTSY0zN> zi>at3eh}qfp4|P9;!7j1z$&oL@Prtt0MKB9TJ{T}C(1wd7p?2GgM)Pw@vC-Z~kk_Gr=payh0zAhn( z-Rk^4DAe6^ob=_;4z)>!9Q3BY@mCqJlKLnFYnc7Y*DR=gdJ(vUXgmZi$PnE|48U5F zIm?8%aAw0>mGnggRwMqzCe%q-f&tF88kRWnth~NlFnkJ*NEw1!hVjM1>n~<~VD4=p z%s6c^!|S|wy6~_(k%{RHOx6LO_9S@|gRjjmB&pL6%JO^qx$B=fanW#jd!q|p1|Chy z4BV`3aD10_)dlyZwZ-vnPUs?9RO8mx+Gk47_vE6vWD99hd%V1yEH&iu{cWhbG|3FHnUqA+|T>dq<6 zG2>ql?a56$@l+k?=4*kpji?d*R4%DG&hU2qCg%kZ&- zLu2ou;%vwxuP>QGSnZKf1>Wp5ocCsN+Zw?nka4w9O303p3Ec83g0`6&N5Q-fz}Y|S zmq|4}`Y#%LaYc*%NXi?~+`Uv8v-rC%MKwNB4B@)kk-*yDa$>i10CWLi78)(AgFw(S1g$4V`D6s<76?bjY-;wzZ(id^7$cVrRJrnSa9YvH}j-s=u7adLr+X_qCRN6 ze0v(mxPkVQ&;CF%civf;@MQm&PqvFHW}^*K`5_2jR$ihc{@XO$d;wf<* zW2u%NK1q5qjKs3)qnH@M=s5k{>BWT7UNxg$b3N8AucREc^+hb@I`@|$oxl29MXgI6Si_u{&OcQ6Vp=BK6w zz7^3VKn~~ErG#5V<>rqvei=vHdZB5bBx;a+!&Re$iM=9#yp=lRMvQrr^p^;P!>pXaj;w1jLef$~)$^FeQaAd3E&FaxIDw zLsMM|(G7-S6S$N(HrnA@AbekYWu~aA&#whK1Q@CkS42#>tmY zXF(q|0$7iYX|YUr(svnh<1n>EFGXqxpwH`ubb2sOc71YV+7I|Q17n=g4FWfA$Tq`d zZ)k)6B+&JS$-mGtp`Uf=neD+VM=+Xz`-p+*4%_I_GKm&gSWc3@;v8DBCc6knml(?P zz)yCMlTt^BW)CRGnUXY^OriYP__zH0LwyP79LV*+keN9xPaRq^y^h*r$$AeqsP>a~ z)w{MMQQhjrl^Z!*dR_mrpHAE^vG8hq&Nhz7k6nx}P@Vpcc>@`J7g$5n+W?JFA4JfD zgSA_h`mL6d)DU^niBK;=QzhLUb5lGE9mItsmyYg=*5wb}MgF-&a$LAH=RL?8%j0zu z0-lui-!n7<=4*riZrFr}u9ry?ejky_&onIM1+I{z*GI8&%wOUdOLXC*T_onr7kXn` z3SOJW=Yh`1u5#)(p$c!Na&IZ~p3vx>5qenDS0s?812Po~L;2HQg#P&^*dE_URG!aB zE{>EluCAX5DV|MMCgUuF8w>t>e{B95!0@#%G$QD0kW?oQL5I#cAb4k3ARy=T8S(@9 z@s4lmccfmx^tt#Dzho}lTQs(!)(2A9(#`oG-X+YgH&bcw&45L(cg9aQTeE}yxeyrp9h{4IIdz4g^6GnlK-uLt$r3#1p_K7i?k-#N%vxzZ7H z9@|aJu?E?FOC*C-Y0<}c!?_JZysPno*xtX|LD)MAL+iaGjQb#Z$OZ^A-J=pj|1J&P zQzl5@b4KIomG6KlAUVONIC+K#1Y;TwTwjO;6M#YN8xVh_;jW`N;3r+WPhSjXh-tZx zUyOwk<>RNS7knM%{?eo%5J~c>e=!Kyr1Qf;6OtDv^h3hIV8~|j z@`l|d)1o2s!_zM;Mnuk+EP|@)xuI#hl5)nR5sURC0SW#eoJ>ueNm78y*AIfpb;nKQ z5AO#_JlyBL0vAN6H1_%d8#f&5SK*FDEh`z&(Zvq(>Pcx9yozDbO($-1m7|`D5+V7f zrYKwu)AS?NMIg_g_|;az&VR@etQM1hizKVo1kQZ-;=+9QzJGl7BtCl%fz#WW3 zIgNuSLm@p85H_iki&A#;Q6csUaS$Uyk+#u9ckNj*da(!D;S|&%ytTNz&00c3Obfur zjdR_*E@3mfj9=hl(8Q^$al>N~N0|s@wl_wEgWyjSL}!PIo1UeUzF_`O+3~H%gO>N{ENyr98rnQQOZve3Oi0pm9UrLw4|G z_O3HhBZ3+8B{AY?{;p7KkaE)%jKr-HwsU~O_DO^F8%Vtkf9a(-P!zc=Fz=yV0hDjj zBaaP-_Z{Is?tSQ?zYRv)L2;_%(Rv%uZS@XDA#yDw;D)&pR98(rWmYIQa znq0KpGFzuPuXwpMnmkp9j!9HzZ?w_#syzw!z<59$ODB2y94{!uU#D8~GUh(sR4I-U z7W9z=@Ybt%R>nDVu+FX3RhUEtS&(|kwAV|t*QrM!21J!R{pdtoYh3Ow{*y=~OSOO| zpEf4S%~*ysyj;1Gzg9G2`mtAMBNKP7Lnohk(g0@IE1robZ(Ut4?m@lOuf=ZZUiX_k zo4_u1^q+~2+gb6EEEZ>Z$?eFMm0w=Aj4drEkQ$>g(LVHGY0>P+kikDc(&i;1Ya zRIpG{u4AO~d%`L*ETn8rt)^B*2xWEX!CsYitIkm%XOG8~kH&KL%&%9?nE&|{u$X$Kx080*E|4Uzv?{&?FwELnG`F5}5H zF-9!(yj-zze;ItD*|S6S7hd``_S@Chmfr!mZ%eg)@USs5i-<@+W_6 zveTMqntCah1^702Jp$|>I8>Je=A6?4V`)Y|EFQFaoa3^$|J0pb*cvC$d*`g|pvwNu z^&(y9tMXj@W^?%7ZB5GPqKeK)HC11#yCYCq76v82@4U#<8mh#_YAWeMf~9_tmuo@V z=YCvXM#lIVWlmOI@A0TVOo~kw`VYP3=Xvf*Z*2WhM+HU|A`M|)&Q@#eamTGP;1}Cy z=6aRdO1;pP9clAPL);d~oPTkxlwg5(rkz5Ih&|I zn{MEBq*CFO#s4bOhttUifPQz?ZZDpRU;=6AR|Dh|x(>#vh!2r2sbb_{dDyx#g{ZF0 z*7zAr>^GlntRtbxJATLPBbu5To+4y$S61T%uQofgx%N5vEwb;)+BANDHG=78eJR%M zEP9rwUP^DdAdCY`K*kGS{+bY)!%xj?hw!2t2qg?=={~ZSf=qk$z|2*C3^UwwZ9F7W z*+H6f-%EkAkidvC146ovwA^6>zqn13L9b^h$&P$kGp0xbn_gk7%cB|FOoD8fMa0e* z{0EV)+Iy@g)gz}M{>Q6C!bS&r?}2!%`A-ZYzS~~$R;%0`(Zw89_=c|A2}Qbqqs5** zTD#W2=`h3CZ&$7LfOCS$i9|F@Nr{N#;Ec4W39jW|3$=3z@r>Hb=(GJ^M{N3xp8_Q# ziFxxGl<=1f+ z+mAh7wb!}hJ1Yrow`npdTNJVF0d76zuU2q*X2qp%oKIWSfJQ5Hy63AI{I%&T!3=?9 zy9>Qbo4UNGO}E>@GeY-)6i&?TJez8Nq@6u?efj#3^#OOR{4HM9M=lk0OWXabImQ5% zh-_GoeRbmBDER1GGM(&%Q)?5Ay-xX)Oc%zy%qYH*R!x4saNkRf2HR6R#nV55r++Cw zQPbwTen!%?0oZ)zE|GMs%g4;16|S&n8K3cga0{F?4h195Q;57@`ptJC25uZKZ+>XJ zxf0MWxYh?R9C>pCGOI!%4BR|XdL2G84hy?*90?~5`Gxb-#C*ubkJxIKUV zuGneq%7M3A@HI$!eF$8%>s}o0i?sw*l)mF8%f0W0)BqvO9{gGkuh(=Od>FyhllkVU z)_Lw8BEfb7{x?vrJP|FztHsjorn9*!^?iJCwI^hB1uudp#MkUT2J~BEN_f+DVy2nY z(g}qK5KopgK6T|Dn^A>3oVu+ncl4ESKq?e$O`a(jjB5+!Z#PO~@wAe#yOg*XK&*ft z*1r0;HNi+@?8u#P=!^`KlN?fa_vls*d00Dh=r$)x2YF0yJ8QOuH#ZJ!HrQ(S_hciO zG5fvL8j~W9mT3kY!{5= z&!@))UNL4(_zPpoR!i`(O?kUI@qAcN@UOEpS|-=q;V05iHCUzDEqlzVF&gTd~##5t;$8 zpQ5m9PG>9{hmnua^NS=_k63k7k_dRMv<4L<(DM6h1`P+_@kVI%voz09#x?dBzK0ER z$H6ouR^*F!;=!wX>u*|Nmy@Dg5oQ)>kyQ6LYY0cIKE2!$!ios4Faq?1C`RfHTkxu$SSJQ_ zSSS7{ppg8PZ;$*TLvV0V0w?&z#-_1qV6Z+K_^q5oP3L|8#`>m>ZM`wI|Wvw3Tnt#n12YTvFM z+3Af_I(y|9nA)#;=XGWpH_1aIG9TXXD2@?3Km)wCPzSoGiuw}0NX{aJD2 zz5#j(zvS37e*<0p zR6O8&I=L8y$2#iax7vih^+R@YR<k~0zJ!nvP(UK={2(+UBK&m({nHIl64RNzPX-&ovV2ue)4vMa6;5` z_)cfwu^nN^W7tm*%#eF6AB{Nb-QVhJLIj-X#IEY)d2KC+kk`k(g#2~s*^Ay+tjF1Q z8@^4SUm*~?#Ceuz4po$TDV<;ToA~!^4OajjUnD&cS3wNL#q-lN_#PyQDhNHEeduX{ zm*U--XL_1=v+g;UJ;)Qi^4nBJVS;4K4Usy6QdoEcXt{3WThR-lE|!Kc-__s znT;Cc^!MJo){~K(V4Zu-bM4A2}{?F*1BFrZW zc&Ul6-ekGRa&nP|L8g<*qR>LpDrb;Urdq*LVt}KHG>4`o4%vw`8TUv3BBzU{j4m#0 z6jr`48r=5vz3fe24aT@HaJ}Bz>dujmy#Df^y|3c)oX7%MD&&A%Pe!mm1I)0&5Yup4$RaS8f`gg zN=jLpTU8e}N?F>fVl!OIWxNJwVJ-vNFjbnWMXx?6BEdv!1sIFJVjpsJ}CRtg37Ql&N~> z`x&>BRg0KQPGtxwH8h>s(W^>-+thmElmF6o1|_?vZdTqu^8Sv3?$kbMKlKYi82zPw z(thSwGUG@+aW(gv$NO9MB#!sD?#c71U&_q&@~c1ZPVN1h`)A-tyOm$f2=UUZC{yNW zd#4f8j)GJOuj9fia-7gbu()3iFhX3U>}m6^oV{bpyK@vg{O+75lr&aws7QHN@d`@i zuese~eEj$)%UY*pFBlhA_sL*`CSHG>_J@dYV7d}%a-q=4gW}a1_0!L7~ zb`=7~hQE%dyTEEO*qnXquY_jLvlL`?sn9!;Q=ERZ_ex{Vti?LA>(nuFk zq$RVfpQ&!k;_0#vyY%j?ffMW8LP;etdWW%NCD}ntNzBk^`%*s0E5qM?ke7#9 z^f8p)l(V`2Koyi=MVh+pEe|^}M4^USQnV!$A8KXb#PP67#ENeN(ax##6f&bFThVY` znUzt}Ov)7T9P&P+JX73YQt^rx1G z`So)vV_vhlqi&eyhDG#K&rFh-Cft>a5DJ*EQY`zkG|o+;nBKd%wXtR0mCItxyDC@2 z-=UMSQRJ#`B z<|W#5qXI0G(VFo1U@Cuc zOdiv1rPmatN7ShD!7zH|?Y^`=zj&)qU5q9BZEXxAJY+%pE5eL zwMjz^)X*f5O(KeIb{dSR-%}sM<#t<+@H4WV##Vn*OM5a{XCTgnb7}Pjzgh7dp%wd%pO~tv&Vp;tpq<)uMR;8?H zhIF=^g%O6j=G*y*dK%QXUa*kTBXjr9W^wi2A5B6^vm|9Nhs{UkuSk!d)qd5uGbBYz zhT4F>#*Wg7=^S;rcc^+jT}}NIb6vx|rY16Rn7-L-DzsR-aoa!Jy9yIkfp0Gp>B{$L zEj-JHmkrMu>aU8A%W?KvJ!_hyg{}yp8VFA^4fo3{OUns0RrL)uRd~AUs=XN0i7J}C zR_Ou}$<5~M6*EUj?(V(k|IXsm!_8x01?YhRB6W_mCaG#2ag|N9C^1NI1V!6C0!ELD z)QLc554BnwsD3d?Sy*AC^*b#{EzFQUdvY3mK?geqXwN=P!vumnEzLzG{17@0rS)Ja zV?A`;eKxv@^GO;1M@}mh@9Ac9q~*`MW*DUZ`f3Sydp=ufeLYvZ zl4kQAKnLX6$IzPLJO&9(7#+n}{y9aWE>cHZ$4qa?+gZE9V5(F(j*N4oj6M2vj2vGYCs=fxQA{CZ z6)~TyB3L)P&e2jucLqy0RhW%_oZ_baqzqARLL&boe_XjY)PZO_wGheNBynN4tjP7N zz6CBs6MCz5WxtU*?kX46As(o|wnnk=ChN8(!5cA2mA8RgxHQ5DNv`FNUfsrRKO_yo z{0f2H==aS|oPK3WmnfvpYd$q|GgH3j=Oxl+JsjoW-Xvzx@_N~}pT{eLleQnO?T)A- zR!vxr!8>!*oqYAP9`YMfp6FHaH;Y(j$`3F?fQ@v`$SJlw# zni~((wh~Mra~;Q(IWTRgt8o;z>)g#gP-Mpsf@Od95sb3`4I>4(ipm|twe`h|8hWa0 z>!&R2c775lS2Z~BEGRBLM=Lk1Bob=KgxcMG6^fwt_A<6nGx@82S+)g*E3ifoNg}*b z7-~b+mEk%|u=FQ_yG3Umg@kt4PE|^t($3&MM zl|-tz-Qifr)pf?DuO?JgR*n#!T2mMAg{P;=A~f_TQEG_4MiS z@*e_@>_ySBXKk7h9AKT9ak2xPW2^-0MZX+j?7y-T&Xd0v(*OjGV$5z-VcB!6@d(0f zG%uqBxCUxwylr0hmjC(DoF{|`*NDc5eoNA;lsi>T#X6q6w^X%>VMYuTlTC6_udK=$ zV8MFddBwJSbi%cR#=|(+v3- z`?POtSm(lV`B^$^80IjYxMk)kN<`|5vq0`^lKIPM;Ts_OG$8ZD_%>p+qkJczpz)OM zkGQV+1X{zskQIH(&<-acY2nB+9n;$v7TWaomc#X}wmlb!vBj&V=l`@(JnJx-H97QF zoPA0A{1+5Hb?}-!WZ6p)stYDcL^C-A4_sc?SH#x2&tiHgUEDJ7*9fkSR<+rq_vp6!vn(Tn?WGW zy&o%Jn|XN_W2Q$|Q@Q=Styw|MG6k!uXEi^m*ov+6ilpCZ5-bgft^@?~Q8SO#OHv3q zh-)Tn1juXaEDRX!*~l0>k{)6kJyMcn&~58FRe^_C76fk%>m@(Y_#{*3S$ou;K07h& z;1c|!0;ruH7HmKw};_1empRjki$28zsw44(@Jc0cC* z!vUKpf|zEdls!9>KA7|pm6RnQ{eU*>hr6s(9*S~sa5MGt`1*2_wnZYLEyp8A2kUsk z3H%tsd$7z_d0yCaeR!@ERbgC#p#Owh!)RiPnJ2~E(SSe!Y0RN>#|iu4ZRKvWmV!jJ z>E(PPr3-v?w`W+Vm0wsIQB#OR=}&T1V4Ex6)c{o#L6RLdD}!>zIL??l9~ z5jVa!(2^<N>GtG!?#~P0koru zHrXgn4nta-56+JkA|!g7t!8mrx%Eicm~ah+YOL+UxmzF6OwaRJ7>}e6Ng<@`)st-m z3UC5*K>>0^J?NMw0?B_7OZ|~q%M}00MSYKT(N@B}NxIIr9rIpdZiv$tU2pzFXBftl z4DnwRbrH>%@^}3jueKk1y`zvX2DTX}rkAm_sN2IC_z+)F)8|jsk75uzBfEz57Y6j@ z*6>V?xPRE& zVV)eNhWWM97|LmS60!7z2`1I)9Ib(?#iYhr!Y&w83HF=HX$t!aq+KeorB?6UDV0#@ zBc$1-m2{#j<6vi|zv`|+oV>-`8SxKY6&Le78Q39FG@B|xvAAP!WXKugPrXUH~~Sdq-9 z5YN4}j~7ktD@IpKF1wk_L|=pA>yEKJxls%Je*$>sAoO&zVi!t-t&jM z`38MnnC1_IBuHu#)`%gVf{k}a=G{cPIw9*+Huf0$BMZU%((qz@;Dyn7x7i$gaRA1s z4wb3sjq|YVj!oXcVT^vvs9W)84wl-R28R0T8=do~JI5popBc-DhbG#0;=p+~6zapN z^T6NDe>8;)K_8qKfcl-A*)McE2BzBH=5vPT-%w*DhZ!y2GXF85ZJpO<=p!HaaAchL z!*is_n^Pz=%88y=DK<0~$J&11+wDy9$Qfe_aKm5dQLe|GO9^PkCYNa98A3~@jq910 zVmJ=1uRj=Y|27a9>hEz?ER09d_WVba&AZ8N}9a^eR zrN}qm8?A(_1I^+8vdzVOwAGjC;3sI=2XXvZqeo*Co9~^&E-xFH8f<>B`6O{o%}|S< zUmEJgO$ir1INeA7@Q1=X?V~JFQb|%E#kLjSq++b!7Q}cpQ4HY3n_j-dW0#F38d1^n ztm}yf--Si6(+u3EYaPw(GF$G*Hh4caM47{Qt=M=J?8*X5ERciEZ2Fj%`eA+nDT3Y)@=wV%xTD+Y?Q6 z^M3Q*d+s@B|FwSIRo!dtUhAo@r@Oi$#(seo1(n>pn$QH>kO7hddt=?lyxCS(V$=6K zO3-WK;)t*EK{!-^PJ#oqNXVP?^IfRDJdNKA!cnaUqXrnX4+7F$aBp+fNh6ORzZW7z zNc-H=TAeyPuP$1N&Ykj#0PHAl{S$5C<%UP{O4HU2heHlX)7CAAB}xyN^L#N4laB$k z!!-iY@oX^&eCk92Nk*9tL{(l5op>>2w{vaVUjYKbhJToW>t!Ph!9L0YK{)n*uC4UH z`=U?)Y$u3Xv!ZS3uuzqYFL%7wMkyD-Pw{c1%q{fScx!pka`USCJLVDxjKl7KKvQLp z%fS2cF>-jI2qNAOrxA3VG<+As)F>maB+e$^xun=B+WD4nR>N){`%K6(3G1L@L}~!I zB+fKxJ`|Mrj3d#}VS$eNLGZo0Gln>u5~W?}Sf7l$T{JwEfHIMDU(eqs)lV<33g?#n zxs_szX+K@{4ujlYT(i_H#*vD=vkIJ*~ry(1v`>-6}`H&4X`8L6I-$NewBqOhiTo`hvDg zpnuCX@azXi6FBSX>(Ayy1(*&qJ219C{0ITBeZ1LJOA=Iiv3!uMViK_YH5NF3S zzZ8gQk6JbgdY@GHEmDuT%t8odBf>%xtr~=-8c1_#8X>L!1`fn`E9$Gr;tK22eP=o@ z46QOcr#aIdj%^ktL=3wNHB-yk4B=rIPhgvH$yZyjz0{1bU=>M}NbJ&2PYl_1*jGI_ z^8~E%8Xv85@JaxX>{a@VnIpXSv5R7E%g?LX_cveGnk zeQ4kAlX4BD?lWio2s+Un&nqGqD@j zQy^z!P8yo~jj>`E8mZG2n-R*fHV?5?!6(z!_iKOVYB)XYf9qsjC|~vCk6C1d1;(R@ zJve~KkYS}Xl|-zL8D`pj(+4|o%@btGuPo;g+F`cheNJ|Q&sojzX~%+HVY<$~@2(EU zSQh^9AzB?-Sb#Enk#gSC!%UHBR6+yho?;osCs6jg@&Jru=Nfqt?uoZ|n5}JxXV<3X z;w5Yf<{oNM5aiU)kkFDCOY2z>fDPzoW@%ag9(8GRgPms5PczUui3!$T0>W6)yjmd1=+l`Jt>m!UQ6uYdZIvQ#H1|+t9;wj;A34^z^%$GPR>b^SsMXlnWpJ%zD5qepAJ5%37%deFkQ)TC z?6hX-L|Gap^;M3l^u@9Ufg{Q<+cVKL(6uGKELqGA4T*9r8{a)sJ|jZ>o>EppgIYjR z_O-ELdtf9^Y7fMMFsxL8&O>Llzh)3pGzL~9_2{a1Z0!pBn(6u*=Efx9bkz+SJzDKs zTDWBGO7apq{N#kBCU%(%gT#uoiM3L^3l^{P-&BZ+T6Y$O3>y(Ffu=>aGK^#)B5>MI z%U{gddb(ycm`!htyblxJ7F_hKF-O(E1)(J%D7~~kpnUaC5Lo$UdtO)TSEvzPG9S$| zIRDMDW^5HzE2!Nq3M=)upBtEV=NyBq7-!?S`DSXw(YMtBU%U=?-tKeLMR+OHR}klH zsa%wn;As@yZk@KhbYL3!;z{QK#*#=|^7*2!{kVWnvuTJiV94gM!X4hvLf@8zv5GO% zg1hpo4kAXfd_9D!jv>S#SEz%9>^e?7(AHKvkhNu^4@$ zEAfQzV^I<#HLwiV*#3M_SfRvEALM%EL;#iP0X~V#8w1$3Lcscw@#gdC01N2XXEP3T zUzswdKWm&nXc({R*RAO{t!;%`0_W_2V|GB^qBs1uH{G_kj+BSTiwC6h2PETF!P+&! z=+ckC?^cI`#@XppjLXS~clzhFchBrEgFe32f?ajlz^yvM@uQgYt;0LYx^-N~k8$4~ zmRmI!2nhHu4>E43)iyQwT;%>=rNTtQq{GC+vND_Szt(Oz@iy1Gi|l4lFf{^{$m_Zy3L1?II7pS#u}d$|N-ywAT_vpAM6KG48rL#1D2_YvqlevS*K(m2 zJ*sPpf!Z)4Rf#{S;ryq0$)|k4a}~bn%lc2-^ZuT4J6j{B!X+M{Ygr(I?`Ju5eiYgbh|T7pf|gKbh7Rap zXtL&XaclEu>Q6tGUq=vcrGOuaP-j3<_B?Ngz~vG!_%BprFa*nN z1HU!H+Xap7=rw=!cR=TZS?bnnM%?r}+aX%-<|;SlDL2R8F-t;ds`XhO4(`3Mp<5p* z5+Y59aIZ@+KrIV=(L}c~1M%>y2&6x^Sst7WA<~AEv%%*Zzx2;MSMrGDhl#1%xF+*P z$TGX?tFxf8s*gq$9c z6oBqvd(fZ^xERv=ibW?bk8c1q<1maa2NLaSU?nc{Eth;Fu>Qsk5-25{Vz4OJ&tt^K zik%tO2ziae^6V-JaB~Ua%q47xfH_BgS!m5>JZH%ter=MeN;oEg8m6)8T3cXI?goRriO@ zHmBy#)5)(9_gFe-9ypIPzQ2~1NG^rGOq%(A$@C)Y9L=&aW6C3PB>q^!>YXSamB-aO zo}-j_ERa7gz&asNS}Q~@Ki)ei4m{pF=EmhkAzHbEQG$Mdx1=0TtwTNBwco_U%{rFm zo$+Y)Kkk`h%o&!qK#cs6PwP04F3$M6>;H z1p+E9nk2e0Ei&~*^q*jzwym)sx4N;OFe>i6>o*8HPL_=O27PsN>r#SJaJLL#~LvbKrS91=m_x><8@4K}Ia5BroSU(p*4tr01MN`(;W0Qbgz?{p;HF1{p=BQ<$E154D*x5q-`N=&%6vsEG;qbcnu z{3!KLwv?d|9*6nf-hXV-;WsUA4f(=+^GHkM;K5NaTV;RP4e&OWM|WpBFBygeT4Pm4 zjHNR6Y1jg@w@h0sv@05;=(n3;YZ1MyB}S3_MX!skb_xrb>$AP; zN(GHbVqUmZz}dABl6(X->jIdls&RiTORXm8QbWqHof%9N?v3p z>7?mVc-soj4J5C=PcK8P)HzA&$l|Ep`B(0rx)ev%v;{G`)Kz90W9iEcw{~usKIt1o zf`*)7$M=I?V3g?P)e^Nx@&O!Fb zA0M;Lb^~Butd~MuL8o|_Jpr)>3`GDWktM|-mOaIbAffvK_99XPf#b`Pg{L_HPSe$6X&Am+-G z;OztHSmyMNi?Xc6T4O4!kg_Zexy?T@Xq0PRnhfcut-op-I~yC{Sw>B$kP?Ssl8PFn z=fbrS^4Y)zlOy$dJRqa(H9Ems`&%`F8T*Iq_&z|}nDRO@-cw!X69h;sGpN9q3GqYY z09h)rIla>cJm}(tm;zXKK$&#L{rj73aTLfm&ta{!Z|bc8*U@RydB4R?lp3zApU5RbKxY12Z@`ToH%G>S zgI9`8j7v1M3EX`MyR<7ljCi0`pU+vtQEBQNIa_!Z&)C2#ysbF`Rrf>RNAZ|rAa0l=J z=i{$U@%0oU_F9m99uQk`gV^l6Z9^za%>3?7BLA$<*5!?8?VG-8?fW>GmfgmG_y{F^ zrI5I(Pt^fN)e%6|(PapGIrxh^Buc0EO(&?LdEI7@hwTR3Be3oLDn!K zNrU5YXtcP$5Xvw{}L@0zz0aIEeTt&=KJu`#s88NSwE%I}8Hgz{?%Lj(`9> z!8Sw@5kEB0eN*7M=*`!WuZz8heZ;yIeJE zqUXGwr%jYe6p%6EcuHy-rfx`x>88d3f-rzh&*vU^~!b8HhfF;hVS%Ke>kR-Prr6p;B+WjMarj@&dK3$6DZm z-ce8Tj*T)oD>UB|$ivQO=?<)&xKs#k6+{m#zPN0Lz6kcEuh)nn_bTBfCeRUCYr8`} zXXSvH`gWE$MTvY zN)w~XoZE*RcS55&;hCl}EqnBGr?~Fr8T*{wm%=-}$_#i@$9-ho9Fjc+bq(jq(3L_s zvUHpORQRgti%mFIwLf%I_Jrq)z__<`YtPh@yJev67v{Sxox&ma{B=G^mfcxxm6h4ihyQH0U04Qem5q%6Syraj$aI z;VKCw8}fTS;QCdUX{KVZ+>S9Y@MSlOiRc_j3|9J`+-l1@JSm(z#QB}E>F`zGa^P9; z4Ji}YAI!PWD}KSg$*B6T_`b$TNQ9K8J+oqHkG&xw+@SJsxh?6X?5 zwkssyb>pd459bWG*H>AUdoxfjNgTUm8++t`Ek5Q-3w~dOaIcQM8Lhjz3Des)|B!_) z+R-&haR~NnC>#lZPPl?j7(ye^6MmW7Tdc{%iW!W&<{R$-Y{XS|?>%xJ_d)g9S-{Qh z;_SHrhF|M*1ZB^Vb;7Dh3REhAB3RX{atn5jFI2v5Twk2?joqKq7jch35}q8gxC5{_Sc0M z)xKg)Uwrs^%G0L}H~bOL)Uk#*MX*Y}94>wrAowZ26GrBvw9+y^ZM!e1FD@asBNDq;6H0kYtN?Z|QKy*v55<$OVs>&F}Yi zP=+~!{1eT|O1*k4t6~rR`iz@vzCZ*Iev3ov@e^(r+wG$jBh|-sU0g%eN8DU*`BlbS z<|o(a;R^v1sMlf_s8?~KsA+P_i$@Q7YjC^rtkK*tNWrOSI-U+H6AXB^p4@=gSO&CV zR2(#;XRf#}bE0`~m0tr&!54W^!^B8l49@MpQtJtSRqKDC|D_PG(Q3L%$OZ&Wf-DbU z(0ok@w@WqVpM4O+{Kz{Bs1{tRp9TZtL@}kDqgA-00q@@B>WVP-ecZc3I9HD8g1UZG zr|kj@T?^>CvBPHh6`)@29J)TfMZ5+Oxcv<+TL;tk<$?h=_zf*s%6wepH&{z5RSqUz znI_L(BkiD^E)OaOYA=_Gg$gifG7%cqt06Qr+kobMsh{n%RGWWJO9YL#FGUAMHjKki z9SARFFJ~T{&1Mg z)i$Ka*!gn0j57^`m=n3^7c9!>z%y2ldFZl8ZP6K=ztHQ}$F(-uSPOhdvE>yW27n!Z z`6U@-5(kN$N9ux!JuP7(Qh5vy2*eGJsC39ahVd3-)Pa2IV0%=}YYqI}ba=x8ue%TA&WV35T27iX)k}Q+qan?RdryXx%=oy9^ zAJ$ggHv#X_}9NhuXO5F;U#Vk!8BcUyn(X^MK``T_wR0V)W~@@;{EmzI37@ zT(@Z=zVu6T5vixPUy5|zQAI^`8Fs#%h9h!dTtG#y6Li;A#A0Ph*yYm(%{fiLB<-)v zX(yRa*|ljjLIcB0O*9HcnQQ>Ksd#ZQggY#PsEQ7SG#DUHCzee(Qp(AQ15XJ|F^BRWp zWDGN!@w8kZbcia0+Xfn{#dM%}2kxt7G}BAu3!pH{)I&gniR0$V`CbwBpC5LCUw#U2 zJ3E`?@yjAD%;niTRet|qBj@CFx^byBE$PS$*mhZ5V^QrzZe1}8D5w*t>HZ!t$!m?F z*rl2CE(|<^=(IU&l@83Hr^+FD!=FJ$Zapq7+37~w;`)Edb8#3dPUI!x04S+f1E&CtVquYH&>ebyPo=>-( z7ELZcsj^?yp%Q0MluWcXjw0dW6iMLDyjJU(9v&%>Hi8oOL;^&6fHNZ<0_es^_m-33 ziB5)}IjY8m+l)Q;bq)-wXkhE7PwG6oWg%%_lqP*K)3$ZQp&%#b(37tABQPIP%)|? z8KbRmkB=X|;Ll;ia;n;P>dPu|`ZMAfG)I|=iqCfA+n7M}kxF%;w@L&=!?GJe6K=#~ zSuyMLZDMVB*ub04louow93$q36%-ik^8rcSl#Olr+~Ci_nHZ;o12ZNEgAGco*0Ywi z(8bLb1R0VX>1!gl5LO%wha~zM4O9*Jyh`^1iP9}-)Yq{K>!dhzl+J|aeRNz{b!Vrn zMtHRWs7MMFJAA&nbYtP#7hEmuz0!FwV_9_wsx7gd!^>vx@S^br-ZN(JB7g&xj&;7t&w#3UPybdGmo>YLtyd z_7GvX>z6`{7^Wgxr%5iXL*KGYR_LMkYZsw3g3-iZHZH8TOE#X=6pCA^XmrmcEh7>a z^lZY%iq(UtXLD3V(Y&*cg^_;k3RcTq(yl>w55O)!_bSx`!j;9blnS-OQ4T!jXS(~M zleL1XqHo6fyAXHo<~k(~AiSI^_+zpijOWhK(`BNBf0B>-eBAzqLUjFpo+#bSH-tow z42ompVKtGg1=U#RF*vD`_uMry^h`e7X+xYX@WcVtSl69aNTLbqIHl1~q;d@zVg!3c zsd6o}`BKzrV+3)@)`W~#w+V=H(25W;BgzY6ELS_{iu;emnDpJDluL**3H8cJt1-pG ztg8e_ApXfbm4ubzLL`4p9Zlr;FQ5(`>o=p+6Ne3@YSw&1ZKhvL1Re8^>WS8@P^ldZ zN%JEWyYz_evMyX_&`ma(vacb5xndc}a+)@G8OLT$Bd{$dtFBZ#K-vbxWW3z4Z!k22 z`AzR&a~PI+?T|LQoIBP$jH5G>!+YnG*0(LiNV5WEYMI+xX#)2M-gUgL5Zl zl7-a#yrpvEUeu-S0GV z;&cB5k`&)`nUqS#v5Ey}khkB0Gs{h)H#lWA>r7&v?SneT=umAYMfAtiiomvD@jrh3 zz2lq8kUUCi+JHx6ExXl$IE!@EhMEh&?Zkb&lOP=Y9y5vO2Ry-<`%Xy!iQcV0y}^Ub z^%?!QmyG?uA7{%g%n>uG?%qeS9#)HLj3iVEgYQ@U>>@)pEMH5+=0$5OGOsupsJXpx z=LQhGqfv;ZuNUAr-*!7lB~&V{B_bx>5m&@bcUSRFy-y>W%8a#coWq4~q%nS_jO}=NLab9%`M2#aIApgI5X5qJ2RL<5Puol* z3R6ZQak?+@vkUa{+4VrUk+D9mtomX-U^+zf_gBzDd7{NsA{~ou{;?gW7BgLH)Ad>;aZEK45Q&iT5SB)uyT&w96RWDp zo`F1LvG&!Kw{nXboddzUbF^{d&&0TtTgH0_Q0H9F5b1P+#wz*Hmp&9H52nLI6An(i^i66YxOL1y${R zlSc@amjJ|>Kc(m*4AFBd<*K560n&df4k9I?$+SzFga*l;E*%=NMA1nBkZLXqIq@+_MCdwM_rYMaQUPMYpiyd3&;-4Fi8=hFX zt*&<)3ME2h$N%>rzT4pV@#=bg^7F#O`8#U;##|YnN47X1IRGE4h5#@ zCicpu?KZU2DVN_TUyOI0WaI8liySwQ`jK7BWPH0$q>YarU)B#Jm64;t#PXV(Kq?Xy zFRJ1HhcFg^DTBxiH8e`(KpS9~!h&W-4N)!4jWem%?$E%3m!&A)%R5?gozDXKt~!{u z&f!PsPf2%ZMxq~cH1P1J6Nq^X#6o%%oa9gPWYt-XRO^f6r^Rxf3lVsZUYCq$>IesA z!cNCDF_&Og?@M!blh~BvBAyBhcBxi~SoJ}U{#r1kSG zlTji2L);YST-hv-6_^f@O-=0L6E#`hR+2SlH4o&Q*1FSKr zl(WLEf6fmv3e+_1F2s-&>R0>?=_H?#fhwUj!^pnKEk+mc&rF580nb=^9XmJ!Raa2X?QCXp zq+PV6TC1tofTm{>CYAS- z%Ymm}S^KaC730nQ=-8|9f!ceDjdCaQS|X!dvBno&q#nqzllxnfLo>7dE*WzeC_^UJao}t}NJ;nTlnAGyBxJxEMr1W(BcU0`Nd}>0p$1DDVxR^QC%4& z$l%Jt45>Oh&ofC!ZhQQh+_j6v{`{>fA0WnR2MN@;r;B!<)^Kb)1Dh95NXOc$^0zAu zoA7flk!0EI>@??ed2ZAV{!K(;TIbaBbfV zt=qHI9b_huzC8}D`FU7CtsUZ-yx1M%5<0b^vaplW4*Nq`UaH#jFdh%LV`E$TfYG@X zhey^EweQPG#DajwpU4*`G(^h&y4b(04`4@k>2H<2Q;un>YrC@>c6UbWX^LMS)K%&(hF_6xMXds;OXl=qz+7cYPZ z)AJyC9&3|j090!tq*WBmCxC9*Hi+JxdO$g>>ia`@6ljok%bSt&3PYRNWk6eL6hjT=hzo?yQhyKLpb6>t z<#(kzqVuaaUiGJ|Dyn8t+AuI$H9@m<^~Z#o$_fp8W`!E-vZ)oNTmGpT?tJArLj$h2 z{KaIas<(sK#fWPIrh=;X9a{tAl;X=>{yd%DFS9!@_K>Zd!<+O4AKzl0&?{xAJNNnA zS5#N5tzrW5){>!6lv4+#l4#_Jg_%5Yd|J>`t{NSBw6b{^qXr%&odO_6SlRsE0Az#a zdSOy%#i?qIOeRH^MsdW_eCn>TYtoZWCatgH(TK^tXlm7DGGHNLAImjYr+^_|%__)7 z@iRwFgYstCp92opQXA#ukqxVcSG@`~wtKXJLdZnC24QYt-Q0}IO4UmZ4eG0sVj5s+ zaoI1g;I!PVQi9S-^$_4M^RoPT=LM-#&(oXJXR9!;A3Sm$p}nw&K?ET=ZTF?+sWTIp z#FI!?3bmU7c!6klNICGl;4V24)BN8=I00ez7~_9lS3segtbAIZe`*}}ZM-@33J)_W ztry%V(>8M-exb7tPUzW?XWNM$zhPCFcn}^1;TmD3+0o?bc%uZE+yvNsN&1@RI8-wD zkgs9?5Rr?0=o+4SF6Gn8WaR~#9h>(d_)mCy8|tMft-zNrf(d`a+yB4JZRYL_e>1lU ztAdavZvsGI>IU71A^um|HOuUcy*l@R zBCx+##3BBme}m?uV_51|!fO7Nh>qd=E0L^3_P34N1o6Km3E3+mw6p#DAp_CJkWjY9s<8_dB4p{WZih=TbmMx^yuEZM*W1g%c9 z((Z5j$^Wl>8W{uq>F)qzE5&Fpg3>A zhK0)hN3~n?pr^?ad#Pt-vM3WBINzD#5rHJ|XWO3T)N&;d>)~MBonh;FlKbv#>XGn^ z-A*eMCT7vL!N`CZ(pdBU4ofAMrepQ#HVuFr^ArIfDN7a^XUVxGaCp@cV_E)^;y=Wc8@&-RQoIe{iBRW?voh(t;#Pp1}j1!bz;XUv^jR$ z#D}hYEU|sY_zEt3dZ){)^Vw-b{&kvwMZ!YC zuFhjbEem+P$&06Q>LJdweoXZ+pq(n6sDnZ%qfcfHcD2lU^97C~oC*3siUA)OL6I~~ zr1?RcU7H&C>4Mw$!~9g;MC?#903IU-RyE%@X$409{L|n-xFf+RFZ!xA61!5g(tObg z?@eu^@#{Sr6Pe@cW~*hvRc*X#(`r+9x6Sn(;){P$T3_lQxBgH~zgmQKRG0V}=)6@n zfEU+3nL88JS!ZlO^%eCsb+nBoFcy)XdD&c;LMhx+n8ZYpRFN|#GBjfgxtt;Z$yhkbFn}zT zEIXcYm{zw8oT^Os`zb&$XX-7wynNO<2*j9{p6@C8MfN4b`9SdF`GE6F_HJsZwIsNM zZa=>)=ic}6YeNn{ZeJ(;ZZH%OvZoy%xXxY?xOh$AK0vxV-p>?8*k{7Nb0>vut1{Fh zRL!>$qq|8*LA<*)wCqW~`w`UF;2Qm>{~)ro9nD&}4b?zjpIF7&WIi;>1{fDGN(btyrrK{XbEzs&k{ICExat+o)yDK~Krp4+j= z!zdj1yMBdnbTzUFC%kmot5kAvw{jQHe1z83Vs^WZZ4V|U-{kPX9PlfH^aKq%zpY5B zqhw75KFne7-t;qp%*ZsG6f<~&my(Pctk#5%QY~brj?`LsYePw5W=9`m;eiB53^<<| zvUzsdx0M-EAw!EPYqt)N;2wv4Cr7vfih}}Rb%3aDJQkVIt_}f!vU^olo()fr0*HSU zweIbBJ}cThL;CoHvp~SgR-CS0VHP~hi{&&oErK(f)>1J?4EO*_XKhQ$$|lnk{hB!8 ztN8J}k}6CP6zFRLQS#MknoLKcDlo<|qI@3f=QX(JZhq3}Zc@@-p!Cz1@2ZGjIdW8h za+1saN#I}*R(^k4O`2VEsaiC$C8_erb|?hmud#z663O`vC@H8eyQM6?+NfgLy$izV zoN)lI+T!|QJ-;Vy6rL9qDSPE%R_O&V-l0nrdb%;$TL;pnCUSEAv|P|smz7~vSPSpL zJw#YNf)pGSARAb>Nxk~Yfo{@hgu0Lqw7c?`IcTlNta?2`*cf&sww7z+R7a!niyN~j zzv%Px#c^M1N#ffHczg{uDy%r2R_iW-~r5=Z=%N<7kI^{3Lon8 z9J1QcaFa9K7uNJ}pDnjB3ug~fFI`Zg%6B2ZPgKru&O#yC^L+F4ApNleF#jF^^i_SH zO#2gO_T#dI)`GBTqv|?8>~Ls?zuJOseGJFbU&zQK%(t_(_nPNiLLrw|KT;insU<``-{J$BZNT1rJ)#z2rLnwav#LU{k@2Oqz zWIkCWwS@L<7`2b;*tbjTFtK0beCEbF_JH~5o-E7nTA8HQ(oG~Vh_>0H1O_36#(M4= z^$?5uKhlfldZ{@h9sQTl5fw4Ds%cWk8Kd_&Bo z$vKi_NOM})MXq`AU}-F>3eM|?3a$D~ROFuGmvj17YN>)-IHf{{rGCJ~AYCn}9&nIlV&s#k@N2w~xOX zO`kJI?f*hfKH!NnswvioZJNv4#aC%=a1d(uv_^16Wa^x0$M6XwcY0HIon1#hTW@b& z*}jlWn8|FaeN+SB^>AU(VOCg3Dqd{`OT--;B6Qf7O28To05&{!zp9H>C@JxnF3rPF zqEbU}WgMFVcKJ(8C!qjBs4)lVkTC~vi6FkJ-IVaXS|1U0dDtmx^kR0^T?lk@Hrbwt zLJt^owRXA-TAZRiHR7V+B?oy?IrOSB55NyjJC`(AnzRS3mng;YQ1`%Ix7l#_dFpGi zuP4nFLO`v;ZbEh&MB9ijGWBFE+(3raQKj%6w((6t;EYk}OG4EigemgX?F-xXb;JcN$>@QyW; zJ51Tn(4`Hqv~4RUQf5+1XzS6;B?JvMT6~?UEdL!j^>rJ0_r~-QjC}sVR71nH&~sgD z7jEO=L{v?C9;IA*K`iFBj5)N(a5A|*jy?zmOXnp!sub4t7F~QK)rMalG6QR1P@HI@ zo4~;k*K6DCu`qKiD*U32bCbRjp`Y3UkwgIEl<>9k=dkLh%8}flE<9C>%OJoeDD*&`O(1rikN)D`Z*3jGu}?V96S05&Tf;<{~6E?E$T)w+D=35fel?{C_| z=|47*>PRH4!;U+mJlM>*^kJ7f+;HPx$$>6(gSC?YR z16O#mdPVTlYk~}8?XRBnSZUOkZWtD+q4_NMSPNa+LmplE!XRMHnn#qpe`T;FfLRWm zlBTPPJLl@GSQaX~2p?36)++yUG$qN;DtY)3j^vs#B*C+oBQ*qDK94d8Sri`~a|49A zlNu^s&f8=45rFn;YArBW4FFFS(#+d~)0wUzz&&p9PB$l79}wZ`#8cfzJjA2J*Wa;5 z-#Ts%wS!2+26tyuukCcVKk|s4M7vPWSvXE* zpWLmELQ?~I9n+F8zp*HDxw9euYlY8ZEWOY2vb=W1N(>BZ#sZ}MJPoZ>sbw}rKlpow zT_jbC_f+^yO0+~jws?6K!Ol zfiG5!DO@*YOVrl6{-s%zrzaK=elUr${osRgExGu+oE<3s2% zUyt_zCiF7Z@=mGy&yA#cBfHNDzLf0&6r)fwTAi4a@&$7Z|dnr#Os#FGgFwygVPrjSCj(^s{UGyfuLD@?|aVZ4R6Pg6x#{2 zL2oqL*d05knw%M!G)YWMHdy3%F3%EK+*n~-9#&dbD=1MUOG38_ zKIb?Z-ec6R7TB^W2j8ky~`O{>O)y_rt4dyfx;_$PdQ1HD` zO+18p<2JTYebciL7_2Mcy)K8dwj@5|o;|`#C=X~LjTqKWH{LVbJg@on7sWpoeA4VWXXc;AdtyZwx5b& z)F6KUdJ;8)AT&*!bRdZT+SpGWnkHu^kb-{||DjNbY(Zd?x9mVLn{?Pgc>fjr=k}Vq zxIr%edO1y>4Nd>+!$imY?X0Ov1O)0|CnoERtm%_CQbzdu4Bl^lX{6*T2N0wt2PKe+ ze;?$NU|RdH9t40tRkamRh0)%FG2Ghdnxusl3vxuN=t7A!(5a}tg-iVa-)bDw#2jn1 zYtnm9KuQ}Xk3Ytx=zOt{^fH4bnTC>^b53{eyvt;r^L=?fVfEA2T$n~A^^?KEFcKA$ z%)c&iuq!)8^O7BChTfcE`XL3OLQ}+koT4;SVW1A6y@UliD)fAZaEA9CTHk^1`Q7+D z$_87Mz*(DR&HHT0bGMmvT)ycnS3KUG6>p198!hp`0_cmpSl-kPRwUDPxf?uF8e68h z#7f=8$d0yCd;`^jr?*_&Ngb7sZnHM46pAYMm|XGT-N` zM&o&DO4b8>kgUfLi>s#4`ej0|I`T}Sl(%G&yaeu;PB;|WnMALy6T!IRFQzg2dwgM? zqp2MYNMV*+1jq}EF4LTM#Mb3$brkD~kB0InAq_;t&pbAO_MlwmNxBJLKJ$nK@ADI* zrCR1r*WM#VHSQB%p~2EByY6=xTYqE411MOrw;KbK$J+7Sp2xy3ZY!!!W(-=wheE)E z*Z^xM<73f7ckAd-v^*@K%%WEJzu3_MXVi-Ku_8x|7qV^7Mm60Nbw3vx#!P4L9~Mvb z@SQj6;9R~>knc=n!VfSh?G@^@FQ#$g$7>Fizx!vr+7BDU_s%=3Irq`2LR(#L<#6mr zRAB=(Y=;sIj`InPdEac_N>HnU%Xw}b3X0sx+4<>b?+siE`S9bj_65cSbnbm`mv?vn+r9Uk-}#+;&OPt$c{}el%7eDOtIkzywsX!e z(Chub92<0O9bMG5gnvH0__UMOzD_ph*|~+ES(YWsnLPTzsW(UWzWSg=`N`{X?h&r_ zQ~Vcd`17YS*r(%IXY2NN)IK5A-l=u>O=nFO7D^8wU!^Y^Uu!8(50O_rJX9ON#{JeLDAqle5h{H+Fe8y}558%uwL zwpI#Id5odabJU{P|CX&{*tzQsDtHh5KcKjVQJlkO#UuP9HU<~|+M#R#gF&Dd!RS?= zFzfNP%}%&47YUEZ#aDB|4?`=N#f!Npn66(*?-+jruBPoS9LHu`z-cO(o`=G0;^NC# zOzpsJc_>s^t*d!pKU9f_AGK7^cl2I>M!A-IQ9AdO0X z{(>|94*U~bznu@RM+}i^{=Z(iP0YG_i$)9(FB#y5GnACWprpaI1!kzG0)U#h2BRwe z{E+L?BEGUeIDnQ~gM2$_fnn@aDtTI?E8o*-G6y>qkfC7YNIYCAr{!D%O_Lj?% zFHXaQWkujiBjn#|hQNkDD2B#}d?*QN--D$(`!|)`XGETYwc|#xcIIC?dfkYWRKF_v zg?mF_=@6_MTivqesU(Rejx9ny0?4yP$amR3gz#ZGT7yp(A+JDE%ezbs1JgkCHCVMs zhOnOl!fp9*jGP5o0prnPz}UGQ@zcG2cxy3QDGZm8;S6Uoti&A%DQMIwy!2$t=12Dm z3a`S>4#+mIo;WprcL2P55xk3IXdUyyn@Z4A6g@pLwN3{seOu0P?1iY$S0D+yN)c(j z5$5mwRysyN!Dn_O6bB+cW>iTI%_?eP_7~6YK}eMXNEJ4otwDmnHKj-)xN4G}UFpbi z3b=x>EBR@N=&H#Nt)OgV+|vC~sdsDeY`jc2YQJWR#A2$ z0a#urH?!<72bL#O#7X$M;D;|&h=uv$uVuMm@U-+s?$cjfpWaCdr8=@Admvz4hGt!|vME z)!+82?zMWYy~2hb!J?`vK*L}|ARr(>cx5!JCZqDh{9jaPg7N(CodQXM@xKW1{~Ywx zWJs+4t3!f-K!Etax>Qw2w*MQ$0>kIy>2PhW!*@ zPdecq2rv(J3A^V$qC3JnB19ag&c&XXh`&`*F{!h)Yrb)}oVL%2$X8&susX?ioHVL1 z*LD5|pB zD9eZ&51B#1VqYB2xzk)(3WvA8doZu+3mB;{i%tk z6){!G-e;a`x`O{rI(5;EiF1x)j(v`krI5-wip0=%I8?zW!Td>`w1<(OIf-uD0#@M? z_!O7_oul(Y|2?M24+>tyOggw~w%6uJ{ohy_kHgMB_w2=EHhhJZHp7?8hT0a3l!I29 zZ(kKQ>`xK1!sAZjCbjMdYS?_m^q2J>ArzNe?_Zbee-e>(aZEl&3UryQC| zICgC@DLSyy2DV+Qj10Jhv%Y#p-ImxO`P*kCaKk*< z$ubdMWTub$j>?bX4&%9KKxVT8PGn4k2+Zflap!PF8SG?5`pqByJ@eL!Jpym62^zz9 z#_x{-&LDPxcngUCSglm^T**Aw)q+O6pRL;+=G6V*AlsvNN7m3Wx2sZifCl^<UGBrClKrK$jra2bs;p$rWHVGRcX z@&DoVf4EF-iXuyOhJ;HM5yAcsatOdSkdf22Cf@j$O3IpCdi|g2ZpWjt#_!u|=`;@F z<72wnouf=H@>lM0P(&3>mVjqU7$SByoKNu6wQ-+K7%`2ivV%RC`n$xz`Qc=J#9fwu5bK z$Dcp)x4ZP*LWuk8ei#iR(_4G9hezJaBI&3p6~W~>>ql4!*SK-kyi4!>)^j6nsPp_4 z$Q$16zKz~PWsQImOmB_E1G^5xid>IujA4&x4CtZpHfm(V z!1dieHOusx)5yr$5Vtp5J^3mpCZX;X{q8>5fIQd<6-{FE>*RDY^K6XXl*r-p-+p-G zI2qdc(0+o9G&-)+c>1a208(rd&-_Az2J~-x3a0b&vHAy@WjofRNAS6hei}~QTDka$ z>SXuKiM@Y{2fhLWP3h-hE!&J6s;Pg!E&6V1&N>X+Tfe=vqo{x`0c{j^)N#BXN`G&k z{foZiZLgp>w7sd6%>;BRlW+xAvSjq%-A+*!=pJ`_cWqi%`o0P@c-HB&elvFI=h7{! zTGbq8TIE^d^v4$($$&1aIQgM~=pqz@KQ|sUK`hw??#Ns9Ja3YI)yK1?ktz!b%Jv$?Md2FB1+u|=oi4ROsK z%FXHZbsz(Cr9i3&ny&)vd`f+A_H#VX3r8q-Jiib8ac>U-=FslQZ=3_eRGc#&-TXtH z`1^;^z{!uaA8{spz)>e~-Xj{66uTt5{4&fL)$D@a918Oi<{5`k5rEMySb;L=MWb`_U@%#`sEdEMD&_7^M;yIR(Qy5$SI+GQOn_}9Robf8Ya_JEe@_zt+ z|JP_!$q>bXe2CtftE*=_S(AP~K4Itx=oVSugObP*A*C`KEqRk> z!*s)SI0C*(>)rX1yr zWCzZ$GC$zZC@qP~_N`|uqS)iS30TJ&_)y0c_{4(U6_XdI`t{ zy3FSBVQoljrowxkJi|N_8x#8q)P`f1Cq2642lDti*t#cwRI@U06c=_B1O8p~s2yv?e3q;N#*r#hVY#ev!nO z(uW`9u;)~#Ua&k)3+DQ?H~E(_)e)M-&d_o!pa+KaWE0J&Q*mtCa%XCp(V|CvjC2xg zo-UFaS>xTA9r+|=I6OQmWLUHBp=e2BJm0f3&_ek7mSfSQH)epHIgNdKs6y4F6s_|1GIY+p$%w8MB1fa2L7C#q8zOYhZ$ z_^Z)iFmFaCLrkr}Xl9s|YNu=53_Y=$q zw<+c4-A;>dJWQMU(O|hVEtv6eM~L`B-w6LQ4K9s?xA*|o#r3D&zi^09A1y1^>WqbQ zh?FG77o^=M#m!HG;qkxd4hpFJjfZfty%V4iP!D2fW)(2|Y6l)?&Ka4GYOaVHCc#z- zE$h_&&|-BD-drX&HN&^-9|-iytaW*ivs#9Us;bw2+X1cJ>s{PuS3~?(Gjw-?2FTV8 zb;C!V0#HE5hKfS27}c;Ju68V8h=})FJuG!?h1ETA`zfbg!Z!m@FjmS>aN{&G!P^F^ zCpNbTTyXx`C3O=U_8#8)NY>-mHuNz;tIH1-Kbi!W(Ig44sC6u>}Sn6jSbs5AZ2wMD3P@NI(4yx8Ftx^MtZCPSJd3mDdrml){iGx_`$fr^Bd{ zH4cP}2auSxl&)Ux@C6-xV^`ETMc^Z7gBa@8=wk?bGx8XO>q;w)`)$zS2t7(W6msj) z7F;*YAtc|z_no5t62W?J{Pqap9ObrHlHouQyTSpr1K!kP?n3ecbZ2CXMdhD(*tEEP z;ARVOL_K7;%n?rD>1c_V)UgH46G1kx769oh?{NMZh4UV;4RuN~aSIq+5{vYonoj^L z!6N@OM$zs}umeLwWF8>JmFw0oD6(q1z1KVoPS=GXYqrfDnCjYjuwwPr9+bVv3L3zw zL%^$ZEEuiq?G3>oJ13Z(VkBfYo>##x#^vf+wF4|L znx&Bz6`~w~fcaXRD+nbV{#v{qVv zyP;xN2b7FhYgxpwGx&eoBSXKjp~Ya$R?-4v_NkBRO3UIQVZfLbch_?OBLTXlF)p-S zMa@k@{-JoRG_oNp1=KX^%&MbQ$;{D{)tMCK6s7faj+J%Qb*%C z2JR(~5h*boz0zh7Q;I}BWBGlOLOTYJcD9_NjuZ*25`_r>wpLKVxQM$UsqrG#trES; zEP~FWBC{$+j|;0JR$Kx&m{-jwF{3@2Wrq6e2mN%mjQ_l)*BI2>w05`=wwzf$!|5Y6 zvbQc>5Cn1^*9_UYR1X(G`KZq-LWGB{V|2zE@llsyN>h!6fl93^rbQC)*sKds@ZP4X z{*#S=&SR)6t6vgpK{~-87o^z^Pvx@0bhs}i?W#1EJQMS=&`f+>enWZ@K^I?tfmt@ zZP>EDuwoSxO3!N@Jhkydv1hrtk5GPG(sR|KW=xN-@%j(X)?*-8j{j_!m%q|V%ec6* z#CSYQ7MF{+i!K1#R692gts_=27>cJ#a;{<-YtUF@TxuQQ5NbB5B_*~uRqXp~c}oJG zl+|bydVXuq9;k)u@IHQslSBbZ``M?32!($m3u$MpU7cI6c3mvE*P~O}{c!vBvjRT_ zYhS9`dOg*xk}3Q`T%nVVyjJhjs}&u}A^D8=mqG1gwfr>juX@u!w?Lw=b&Ur}yiZsI zGhbvo(e;{-wDs|yA`Jelvugy^?b;&(ziK{{g0LVFF zbsq@{qtHBHNPTDk^DXv-1@2fB&bXrf*9E`zCc~PR?mPjCpr6cu65{f8Mf~4$X)QAQ zv#^!J0u_+(pF9uO&bOx=g7O2c7RJ$QbF*1D3@<6l;OJJmo84N~9%uBQ}G%*ca#`0#W0M zgTH5t>$1&AF4A*gNQ7kKldOs5Iw=xr;@)FZ75{MNprAe2W=VsPH{Uz{8-iyjv!_)! zn14U%ZdY=;J(6efTzH758fGSpk8+}4Ot3EhU?9NcNtF)13@Yh0dQ37n38Ca2AzbWueKfK!GOSvQUeT{;8uS0setaN`fuu6B2mp z0x{vCApP~~t{Av$!V>3*H(R2-1KKXpdKMiYD1GGj#8TYd?w{H=xisSFSNyZSiNS2V z!DqE1i|L5h96M}3MIB_v>i75(J$nz_v?+VP{rR(g+hswhX>@NwhY4yIGfzWVzIbxH z0$Q(M$|^w>^_vKgxsJpRk>IiLx4@yBCkbd_o0#*yLldMKVYM-VCa?l|5PSms{Is%M z0*;T*8|8@EjkX!>jI9BJle_{$8T@QTN-^)61`ZE4UDZ}|n{g`b;GMv#oo zpSqxPy0WP}OFDZv3u`1LSotNprT~B-V7bKK?K})Xwp)2!IiK>bZp@T_#lp7)bd&e24Y6o7Bs+Dzwb8ThE$~Ha@)@B@SUri-ID+Vu_=+&44<9$B9~6cC4I zD^+fGFEzj8%Q>5YdPFjEh?cw=HD%&U>p6d)7M(;@I*oRx=v}&}BBRBM=!0EK9zpoK zu>r#uRy4C`$XZAbsJ@vJI6VlX5M<|jmv<2&epsl>4Nwye>iS=>5Tx*&r3(%89q?=! z>1M2%+4jOe+G#Db(S{a)J2RzZy4L-K>Nfc{sN$G)uB6Z|=n+@2RrE$T!N;_VESCDd zrg)?l`XPlIWsa&ofG})<)S(3i2`p-2RivRLvQiOL37>47FjG%{C)QHlr-8e_7-AD_ z2yvx)Z*&A9Yyt>bSr1rjaD(}|SsyUD5eu-f-aI%55OFPxK7WpYp={)eG#ZE@Y4_Y%nXs}D36!Vu}q<2#y<^QJQ6hVk8<3evJv5Ixtjb0@??Zlg%Auscr=G7 zDnrzDp{&HXnIiT1&@KjHtwP}m4%BtwbcT_<(Y1%%79`7cVMzxGz(jN5P6!WpwNj9% zV8UHjfr$V~-IRSGG2-vEePP6Z^@)GKNG{RLKWLslodQE_bX$T&d*L zhhPaX@9adTGx4?Fc}Jixdb0;$^)wv2m5sHuVA8XNxptqv6ocn{CGeujGP~mCdjfN5 z!Kd16Trd@Z5gQ4YE(G&Pbk6Y}gh!)V1`X^8yQ(|Q^u#jozosiuYZ)B<6JoN<=GA6X zEc2O-S+ydol+^n?LS3{Q*b;03~<9y^Q*+9F?Q8x{>;4&qqV)DpB+1oso0TETL`TPDI& zmnSl1lH)aSH{cf2UJa=01>>2&JM=Pp8^Z8-MU~HT9!~z|gpM<(%rTqJQ5siD%*Gv% z>_dvpo5ex(xFxK*)Cn(t&9Rp%7p&K=HFVRr&W~+F+nejz{q9&)!}w+rpnrTZg`VRh z?5ypzCkSJ>O6vU+#@i)sEIkaQIZIFz9cJgXM_vq6+fIagmbPBmWQI|7QYoei8F@En zYsIB`M585TOcfGD_?9c>Ta?5pRbq4#QT5Bz27F<8-(}`=>}v3a)U1&?icUYAAAx9| zsEz8s!gaS;-8haf)6>?CtZ6{N|2x}Jw!JKwu)e8G4M%?%Gp?fv;SA=$&|JkNUq&H9 z$z&S1@=f=ZOwCm4r{{1Tk8%)I0_C$OKf-0mzTyZTaTlD((qW=vODbo|@6(l zFSE+@xMP3MDzaLWChjbvKMtXJN&Tb+#FHqXd7Q-^m0*%W`wg+IJE%J`TKh=kgR?v6 zsc?gR@=h4z!Ygk)mJ*^)z^pU1{GB-wl8z~m#xOK>Uq2Um-IRTn@c_;ch1ZmFCvN(H z)*EssCS&;8n{+1_{y_NyA~2?4VE#^HBf?~0*Bko=qsqAf5A`M5Wq~>70Jj*^Guq=W zXafo@MsPplPz?-7>xdlDxQpV0`8A4sSLqEP!2$-4kM5Dv{X&^~z3OiHm7$jBl8hk9jroy)x5H#IkmtExi z;ll^u38U3Ee_);g?e}}5zyv~f9U@G~6#H;83T2rqzWrdQx?Byu7^=YZm-fT-uUF|y z+6O|UCJb4oPo^J??+Xb*rM}Z48@vI@A&3?Yf>{q3DTmEysgJ4JbC`FDj|j0N2@i$y zJb9i&xZ!@73kBV@)xlX9uri_gW$|lz33DBX$HZm8!Eq*)RE3(;kk4k?ZHGDs`j?Ip zy&bApkI$25k|1DRvU&3U`GtE8a8h&ghWcI&TS5qg?^<2=_QDN`_$5n z&_Azls6u9|bw<{*=lsn7sjx@Hx)2_*_NI4O?5$wP)kqzfr24^p4>nM)e~QIALl@|> zVDmF12qQ)H_SQpZNzAabV=V=4fq4;h&J7JG@qFu}vnwE_7r^vcXPg(AeGr8FUwX$2 zZKZRT$NOjM>MnyWwo-3&Rb+;VG#heqr#6ZqUTP8Mm4%2JY=Fpp1fm#oHYHv)hMaRI zj#(;>MQZy(N(=Gb?`B-#(TZ?e1oW<=9ERZWdtt0=!`1!)sqL7WYfYfNgQ|rPrHS zXZXeg8kA&rkNv2YJfw<@VAd2s)q7>oj5lU`& zxHoD%?je3BtkuzpcliwlmY4`!mv4Eyf^%H0QaU1n;Gi;ZoqQtDn$sb2oiJ$u_QV z64oG3yhN!+m@^4zmaw!=1Z{If`!V%S?CE`1rgdr($W!OtD$%j02%4iPWzrDxl0Rzl znwo4Qb5Yo$+!P1(BY7BkANB(%jm!w!@IpO;2rnq!okwA{p>3@JPOK=q$S>UYt?)Mu z*AeudZi>JShdZDz>ti?P649y47Wvnw6uReVX&!uBP+%i+LurADt1M~QB-f`FI?16H zYn)lEu;T5JV#}hZ2xi!>dysqnHuX4n{1<2mkTKT*6&D&d^H*>;1j)6U$ z58S4~Bl0uE6y>3VzcYvx!XW42ieK(?Xagii!S|B5)1N@Q&+`a`!{6wK!?~Y8EUfA} zTKFn~17A4Af-SSSX4bLbXTnDZQ`HOhf|Z)q-Sog98u#bze+@}9vLV+T`AohrJ-Bl? z2)x6ejj3BIlqAo~N5qXWLO`|~Eayazd zVQD|uJtWy7@4gQdR(=fH>UpOg!9*M#(VS+_WGn*yq3axvC#0rPCgOcUsHo=>4y4s3 z!=JTA47lL`9HX1h6^@(3!QB2Q>!)vJUu!WT z%~q=C@U-bgLzw(zO)~NZC8~OTpv0H`5J?l{Sdy7%NZcn-l91W(k zI5KAggeFCTqLWG1z%Wc>z562p`(w04p&(#4EKp`XrQ)3a0p&0Hj>rcV(FpDVw?FLf zfsB2&KE>Y;)sDTdWQl)5QDjrt=$|#vP9phRI1+=((3AxaREw3ds6k_q{coy_lx$hc zLJTWK1O;SaV9zXH$;K~xYm2i2L#I0EWSrLDZ9(H?pr`L zj@PJuTiqHWmwZ}vor2Mpz5%QP?yuWl*mCm$PVF;_m0<3q_nY3c+^<}}e{LB){&$4G zAh;HgV3ju1BkI5*aod2nabgbOji&d96#h0g(~uG7jkan8Gsg|ao}ZLkLEO8g5ZQqk zBAVPr{Xl3WKye@gW`y!TA@&Cc2}>w$qP(}_!R-+e%ZQHTZ4G8$c_F3&l~BtW1%oV{OD_b8rn;PNmlDPHO$e%O{KgRu@^*a-{%JmX#T zJu-)}rYd9iUiv*T#)1N-ar%8soDQ|Wj$#juy-CJ>L>#ZBzslH)<;V9i1GBeC%-`wv zl(2Q+ChOlAv%ip@e>B9sSbRv1i5$et0vV31I09Lu`;+eaLbSk^_<`Xj)8Kf#58W}R z(HCO;ek?~I>k*pShYTzbh{^xag7+acXmZb+yxKnvj*J6Nfiv(v4aVTb|JBER4h;h> zh?4G$;zBv3N1#kH5IK?+c}S9tXd)GrvkW=pI3_XEFbtIrtT(J_HfrqF(21CvMDm<1 z{P?Q9sNj8{zzlV~L!1ea%tX|R^~URg_3d&siPnq%-dHF}5}tv)NW+xfD9o)c;XKwC z3Z>5CS^go-e?yW)ti#L~!z52IyAZL&U5q&Y?w?ljprh)MSZQ@cnn6D$J3Hy3&5D{H z^c-Dc70CwZ&^4>a(*ETWJm5$^M~EJib1#)V$^w@Eruqmt%@y_-O}S6{O@MRn`?!$t zM@_gMzX?o)(M<@%Jsy+K{cE#BCMRbQYP~^sYrjJ8nLe1hCs<{Sxpl-`8VnZ!ii09dzn}o+u{iF z_=OHf=3r7c&-cviEI{-HSIJb=&MUjRaxOV}oBDiCiHcg4XX4-0s_6t|D%oQje=~$t2f*2gL z6|~GXeh_ z!BGo()q$}vaU7VAaNE93Px>PndoLRwpj#b3_a?i#|8a7^(W2^RFq1H*~fN zAm&)S=d{?{>d~%ywrm)P1zW^fK@9Ln631PRZ<6xUf9E_kcwv4MKlSg|-r|6ki?Nzx z?a;zfxEiQA?mcea-dJBiuvm+c*M?i-roHfuuIW2DXp^7&t8co(@yzGisI%vhiFE@lK|V?y^O!>%--l{cT&*Is~wf1(quypTTt0+h=3 zY>1-mM>xC|OE1i%)-qLh^Hsv}^LTkPzQ{N&r(R9XL%FBdr?%9ld=eYS+Qfa#`W>-b z*di%k&ugRoM6rC+>6==e(+ej{j`0s+FbG>EBLjm?|M3qt2^63HaA#QZ`6-#uPF+mR zHxgaKH6!P;Y8@~WoVvONzU0sY8mm|{h)s24N+xJA$KkGE^?a4b7)Sr&GNsp3;ahSp8H9mhhe0RWw--u^(^1)5SF{ExK7&^l*gv@9JtU*eU`yv-k zTyrEk0%*x+v`|(v+ty+*JqWsUMTT$p)~~#}AOtjl>Mfk=Pd5%qcMR*v*sySm5f8^v zF@a64e(Z@1uL>U?ZxP>3j!+Mlce-aLZRm!roDuEC(^x`KqOD%uJo#^iL9{;}H#D51 z8dCcch@D@rzFi9$ixFc3og25HJ6GBF^bY=BccbaNGvt0Fp@)6-TyfrWQI>$eL@lZH zLx`ymg7qT)DtCqnH99E0=G$$>v(jJD$AOf|pG>a3@rY}$A{qnVm@4j@sB|=v4vmm2 z5{Qo?k&|w6#ZB(ENn~O=ZxxKJn0o)}Renb=hcz@_M^(h7Z_J_x>Y}lB$ha~5{6Tc) z#PQQbyxRLG&x@@ylmE_RNx~QN08wipNyQ;d7#ptXj0EN*zXNg;0McH9GeY+kALibn z^$@@`zFpf3UvZ%RTs*|>00VHA>r@;%!K`Q7p3Vvjck6vW7_m}Pw+9o|hf(~yY6GX5 zoaph!>IcvhS)K+0@zQehN(7hof+&|=P|e}IR)T7H!m|ViRr-UD(>xFHhOQT+62B4x zakL;e87rJ~tvr!dJIssM57G)ouktFJ4rZ=(Ef53B7c^)s`r>MrQdYB@?~N&r7|{9Lz?W4W=ifj+M!%c$_;y|27cLoQ8nQ=?u#@!U2FlVp60hi$X9-`c?){)@ zuV1(X^2Ibdc4w4zkYeYtdrxuMH*fjrX>EC=0;Qk*lzFbxGq35x*8){y=@DERe`Y*n zPt^_p8d6Y!7DeY-!L4vppZS(7$YC#+5A}|b;C2rW!O@o$V!qjtU6F^Ly=6!7hJDZX zsQx6j?H&Iij_Jz@*o`D3W2=J)f!OqpC3_Xt);XrzxW5nGwPjg$*kY=A=UHO4n8?be zPguH-=qdkDZmp1h`~1TSdAa%fqYkfjnn=*fGHqTNI4znbuF~{3w^dW2h&NnS|KbnU z>tL@Q_a~4~uOPiaxv2kp>w!6#6%_F(F35|!Ke#USj|b-%O?dO84GzSlO%>lJBx>Ve zUTa0hESg4)Z1ShY|9yg|pEkRu5Y2>PtEyE1Sn*SyE}b#NXA_fviK%F?7*k;0{wRDc z3sb%ns4zjNIOtZUV7+*dmPBilKIlW*g~9{K2tM;~>D_0uCbs$O$8(nA@9g*dT!IbP zxi`o=FCPe#8;p2Tr-888`Jm4JS&DjJ0j}K;M$2X-Wh(``#c|av>y<$ zA92DMBt0B(Hn<18Yk;c*aPwRHBOA6w2Q(7sW%*A{Cz>z?iR>DeU2yU}|L*4` zDBRZ`xd@$kfBQx3bm%j_?LF9p%PR1EAeeyBbL@U-d8XNOsCi%Q#?p6b7_^=nd*9sx z>%_OduXLsd&TqjLbv6#}$mKnZoU6D8wm-u59Ql*pb_WTw;68Wnc+Ybain^?t7TB=_ zo@OVSbY|c6U1EPswPE+On_vmD*@YEQHHXz`tdv)1+O-0-@o0I<@dPYaaOJL~`G6e+uQ8}v5_2v(y1mrni9%#=|}0ZEqO zYy*kgLcsop@_!EERJ+grzeAB2=#Ra+2JW)-q{)#(K!i-EP(Y*Cj3)5qm4(8Li9#aZ z43j0;gc&q$H1+X>5oBnhL_m%)Lwl~D|6TBAuM&V$dIFrw+uY5Xr5SnYz5RM$>2;g# zI?MOl5`LM>0}l<#ctQ?1zt-aRoxLJ9W~x*i&$;l@IH z$h40f@>5lvEBk=ILRml3)zszW0Fas*>Jp>+Lv6V!-7qA_PjF6mLxz1JTgvwjY5oA} z3g1_o5BCs(P=dL?X0A9uYAcOO&sq2%he4waDw$iO`PsL;QqS^Q36ZmoR(f^1^P$#JA6$= z`e%_J!EoZfzXosFzjP@`K zvR{0a;Cj{$b>j4%*x&ATX4n(UBYl350V_`l%TJnvu8NOcIgdc#=e))5g<=0E&&ZGjzJ6;5^QfR;BU55?Ht?GkU zXusXv3(CJf;GifQI1=tF3Y@r4id7-X4z5`FCWYIR001xi8*q72OK~3q zKvxyV5Y+JWHe-?y)HCQi=uk!BrIO3x+x#UqK+#g~j1Dna0s&?=zXu9!=89AiDmE}1)?zqAzi>djM_{F%wpAqLu z@d56O>&T?Vf2Bkv{_>7MFhvK4QH5^7tEKz_=w)JUQo#E#z-c%lB=ci`(?sDMaW;y( ziy0mT%2IHwqs!nO%1RJfMhQv8$^Y0MwQj(p93wCz@*sAKLX60i-IR;Sw2z{X$h3{J ziQv=6eGT*KCQo1=L6N}5D_%h7{Kh_wKA!S2U^B-fnM{6)XI4*sif`6Op1?T*B|+pA z6&}Gih)zpzNHx?vfgbxu&pwJef{tCXiX18eNXIGJMV?MjJcJ(Qm_^R;P0bR4!$Hj) zf$J(qE$ND{X$RdS0)e3TH~O~--2*^HR9b|t)Vu~g|13IPJ13oAxlS(i9M1@U1m8OP z8NOK?`2xrZ2N&;9+}Buga@4pf;uMGoU@1H1kZ0i?*+X%GwQS%T(K6O`!fq za*ufEQm(1H3R7pOH79JXX}Cgn`*zbjWQeasO(h7ZdZQ6$vajYqe|@j0T4?4 zm!!Ut=Ei*~%#QW@=0b`Q*iTNfFiOM9NPVY%Pj>InqGOMN_Q#A-xZ@8+Y3#MJHofQh zp{Xq}43oq2zLK1T6Nca|;PAhH%r*i{jqsjA_Da36R-_J)k8+<%9>_Do8UgMg59A(k>IUZpXPFog zSLSHy5uw0^prmMHuWMnmR-wRHX~JCMm(K8Yc}v|VMZCpKk!y0sh>5F7`FOYlNEii) z^=FL}@g2R^(b6EOBuWvr6szj8`FgvK0)?4Pt~rj zKcuAO$ojK$4}h6*JfLA%QCn3ZqyLB_8B%2`L5ujT3hp}_*kYj!#>a#-Q(FUz+h-b3 zVL9?DhK+#VC4dKhy~lL#y$S9`WlItdPmx zed@g)WZE-fFT3FiLS2R(AtQBtFiytq3CI3QJF|=Qz9uB~D>>64wSfmI_xK#UE7TfMWFYcxa zqmPk9xk-~&t9;zU!!wnI>jGv`mOMPBSw-^#;ViGwu>V~QJb!-%_v$Bej53Zglp5Zx z1IyPiwTO@&ADQ8^bWJo=0VuzgA@5Q6jPXF&E|_!#DE=aY0nEPJ#n}5&yp^L*+#aEb8IyfxqB&Ri&$W~JCC5_o#zn^-^1q9Z+1sZr5?hS$P{v;F zX#7HiZJH}KQt2cr`fH4F=%^d4nkzObfi!;6g~sJOH6XuuS0~jQr73PTN8XeCiXG%D z3`5N=F8fkr*VKT?f2Pfeo3wa0ZKVyxn8Mlg;h^%B(s58X7u$%D`(FwTnjh5fpa8Sx zdAir!08{w}MJ^1kNsHSSG{r0?!AuS*&lSsR`sFBiXy<|>ox>-c^_BN&TY_o@;3r`9 zU$GqLhvmf0?|<}+j2G}Z%~-eQ&1jo4-HN=HR-2*;hu-`ICN> zWVZ?nXh&Bkrp+0Xe$Mv0GR?2iDWYr#pBwX)CBF+X%Yjl#QdPX&Cu+#XZ06{We#)F> zCeLFt_$bObgiI`G$FI}St2nbIz(-moZTEzycihwc^0`~mcpGKz?xiMLGcA`oU~60C zbXA$I$X19T*O#?j4o;n>uH7omjHo`qwRUL(OKDT)d33f`>W*SHDgjD{v9TEnp3_ov zlXSJ5PBj|2V2@z4LHhZKhDydk5bIjoOjv7e0a7O0h+jkPm{x0CdRa~lh}}T2=;Q#v zsFqL$xp7Z53r0ppt-RM6S&VnBPFLG0S3R#+)@kJTqy0Cl+PLueoKp?ANhV0?bxykT zu6KOeP^gD5c$H|GC}i#l$vKFAlFRHj+3d;<%IE2;#mXM>xHkpBmJF+gw!> zIEx_s((5GPMkx+mxbHc_*0g-|!}?(zKSpCw)S-7%@> zRU}?3^N=6hnn+O&{A-s-uNI=l5<3+N>AGB^#2@i?(uz@ttFx*NC%-C-3Nu&@C?`?~ zX!)AjvY&Es?O~zKbfvJV@0$?7(Nj+_VG|<>X&)0^Jqj$J~uWTYa$1-=6N`crXaQBcj zw<>ZZqzMEV;p4%-mIf9H&N`PD+D{g_ya^*NxAv1v4@JvoWOB}ky<_Mrrp?{?he5E- zN#5FAu*`ntxl+@Ao2(^terMSrg z&bG2e{u?cTe>Yt7a}&4iHAraPWUpI3+6C}r7C!LID^ zxBJ{M`75%Y+^=lSF8W^WAaXvOF-1L_$g=SAU+7w`s9J0=>YEaO9^^MxcZwW#sgXU> z&alj|=BA&au}Hx_;~E&yxLW)Z`4>}&WT;)3oNfjNs-MYJg;nfq+f88|M{}K}Dt5`T z@K`n(7Efau5fwh5YoyD!&T;5Dx{}^X2X$KbMATo2x`SQnwFcDTjI=W!ETY@B=v}%v znmJWL9d((CDf?()kqACBw=koOT$>UK&#Et8F;izv?W)1KX{p|QFBvFj7aIm zU)NWGnx>v3cPJWb80e&7E-tLJ$2%84{u|c{LEq1`HyXu!DBuv38>2hD;bLkyC&qBd zLz7JAPP6`-UwrL6rtz|`=Y{<_aNWK@Q0ieh+(3v z2qyDca8;Ew(7t53KWb2co&_&O&P9o4axPI%^k*#Lg%_;O>OLOruEwq&yozymfAE{Kw;*$A?`>`ugNZAmNDw)#o~&{k@0cwF`h z_HbDMF`h7}E4rgpOlg%1#m5Y(6k(BeFM%qiIo*BA>E~1Ablu=QL3k_sB@(fBVc*Eo zrlo!7XvR;~FtF0+imn&B9)yhQrGttzJw#yraaCQ(edKy;J2@(uMl?)h%FTdNu@ei_ zMQkUduJJ5vianCXG5Q#UpP3IF1pBV?|D^9P0AVlk^7Sb?mzat^N;OR(?`gVf!zn}G zKk2zW&gbhLxOr@zxU=aSC@KD9QPDjluW6zR8JCJ(#=i@v36*@X+IAGVev5BV`%bC5 z7IYN%tnlnPg;QChtwqDQmZ|_RkuOW9kbI5wt*5r>_UBIdyDiFh$ed()we!0LR7I&s zQ->X1v5dS%cutiO7?tK_dmW}_)?qG*4I%_>BDZ+E;f_lL8b*v3W}2g0l~AR{UcE&I zkIi5CQWH z4auDmkDi7-`&AL3^KRph(e=h7j}Nx6Rz885~{sA~&-$3&!i z*D7ecl16gUQ{GecfsHy*wK+9K#wI*K(Xsp+#GeNiOwZePXetZ1kPJ9>*+2Wva=P&d zB(yNY1~TY@9Xf{5ZV14&b-*^Qbn9GN8tAYkmGBHZ_YcGI4|PTSZ=}NowAQC8>JR@3 z9jUHL$Ek|1DD10u+lQ)R8gq^I4>xPivgF@c_nW2=2=k%Cw>nsf4t32h3AY1> ziGI1P-|#Wd{hDsX+5YusDEqCdG$-MXp4&Gp&BW;&2I?@y8Q1{`cjb1$Fy(@gj~}?c z1y}hV4jW1y=}E^DxjSXNybCRC_KQu$)r9l>_yH;z^4A!U*OAn8uCDIeiV_3rp`n1~ zh;ZY|Vx$&M4QEE2T9jek(Kt{zcs2azhizOVGZLjP{m zg+?lC=u&g79YHwYN$^`0z+)pTA>a3i3f1FmuoM?7cqzK3_639T5Ho;|Y7QEtHTVWm z-Jp7A*zFphw(4+0iveHlm-&D=Cx{oil^gty1J_&awGw8%q!@ZsFBL$iE^8+s1h2icn$cWmC?tx(4dOvU&r zyf+>rGC6&p-#`N2qX0TGane~|ay@Abbt@H}VMUcJ{@d!0R;wfQG-G%^uqs45IUwL&dw z>yzhh%|?!VCv6Y`G0~vt>yk1{MpRY$tXJ3S;;mfRri8uKf-fEU0b*SDlYcV@hyIvH z7>X0!eiM|U?4D#{6p|tqd*mE>3KaE68HrV)X7}maVT(@Lyvi-StYJfQ7Q~+DD5%Uw zkZaw!R&DaMvX8&*NT@USV5y93vbC%$p~c5Nj(a0h?|p?G2ByAIi}m(F$(S zAgSA%x|!wTEZpy>vyOt@TEKU&L_?n=8ips4ZGCmhL`!H=$G_?&2Cw9I0yO#&G$K-= zDe-tCT9;Q+hB016X%Kh&aO+hYb$4ahsh-NB#ESXxU^G%pbJ>x5B_dF!k6GUY<(&kH z9CVF|ghwV#OWu$YQ*erWTAE%)_>$Ute$ClLO}r^p6>}`*&*deojb`X|KMu@Ur_qEZbOA*_y+5v4@fSnY0RmPy36q0w<9pXNr3=j>))Te8NV)NJ zB5yBV&Z22>{dm)}p>yZ{8Slk*K6sg^Yhm7rtk@q%Ys%(xrIH*&sN6{U{-NyHi{G5? zHv{XR`CwS=6R@e1H}0dANUPo2@uHtp36KHg}I_2r$1LAtea=sI$P zj7}OiM$%|$+2@k7&qh)?{X=TEcVqE%h@71>oHZPLwZ`5D*mGjtkMY$a?T zEcq+N_0fl;ix#0jr~+-nx?kiH&3Y%1gNEjjeVz$l)@d&VlIMC*WsOv|^bmASw{GTrHVX69K_t=z1v zALUR!i)t}HH&B$)Dit&$H07|6v>U;Z^BYxww|e!h4lass=~7}|VzirZ_+dZ=th?R9 z6D~*5j+6JTnc0JeMI1#w8Y`FXsb8EO5MEg=fEm}!8-K>z0LLAH-yDHdMfXyz_q46| zJLwl%hZkB$7xO^VC8NgWwd&=ySR3GoBT%sDf$YNbJrLAhoCA4!oH>)YNb(676;_>4 zKH9UoICH%S^9dMw2%6}KJY%|emDbrc+$a_z33cJO>tUQ>O5*eemNpqX4jY5k$8wy9 zozvfi6B+e~wPrbzh znTNam<{W{tE6^e8H9u9pbBz`+``3!Ila6?NWd2AVjHRuK_!%15BktsdDD4=sGJ1IA z1WPL;P4Alumjv1yJNItvVMtxJzKiQx)4q#aE|+nsmJlz)6 zM63}qHM{&x$c8~>8yHRS=wIp;zUa;Y=4u|CXhuRa7crZ{;)0eJ+?ukF4#qDt4sK3n z3M3Lc(cw)DS;-9}3GG>wvg2<)m>n?Z>sNrKy|jMwN&gU zkYWg~uqWyKr5luYujF!&0fN)^J1`R{FaxSTG z2&Er-aTmym#V@SkQrSB6-3CA(*0U$!g!3-8JwWWUkqO1!IN{w;vN4-{(0#ce3=i=) zGn|YF4bE(X0qh03T`A<0#C}|T$7E-lgTT^d)kO`e7ezcY8sXys?!-8YIJ&@*B%1KJ zlk3aixmcc`aWFVMJwE|pi0KWlF9c6F6C#fs073OoXx4^EC6Jc{$bPf0$JhV_8!AIH@TxwW5;M^j(UJO{Q!Oy6ikS%qIu@Z0gO(LOf z6>VkMRf3#SVTAUu_(Z))iut8u0oV~M^ZXC9s@R`CE^h$p8BUIXB7vZuJ%t|UwdPF|k8Lb8q$i8Ok#@JaK zZ{RZd;@Taar*-cPP_SHQY^uusOB!yWGu&cBKiUwwoqit9 z7OjbU%S@hB6{aL2D;NZf{)DL?pP+Oke$}XnwaGTtow~%Tpj8)EQV>?++RARQh+pJ} zqCW3o(o)KzV8E=fx)gTsy@CB2@?h??uNnmY@d`cLm8n&IpaS!7X%6qcg>ZJvgNcc! zLPG$^1@FMpT7j10>GDIs(Z-~VL2W65x*iR;i~o z;4#ZfF!c)4c;7v6)o%q%Hi2Fnwlbl#tz(ZR@_}WS9!%R7^!~I=JMf*w&YiPnmxww2 zSxC9si)verz}d)xMHkiH;QaL2m^1B=rkD!MceU>~aT?yx)l8dPd4wPKjHiMZ7F_^> zTJQ_rr?ws)ZAk_UKTQdSJQs+sky_sd46si79lq10@F?T~rW+Jyf2o{;J``}^*DG7? zp0n|+A*mZXl&;s*>^4C#jvT)Lhny6Tqig>PoI<6C))Ko32)s|s#h>oEl(=*%QWxZ$ zz$_{teazQKueD^Fvm{to%L>Ik9Ch)1f7@fYGb8SD=bfB3EEIiHkigC#p5y)&rv-_Ocu1 zP>lhk)fq#B$&&w8bT?YRltf>km z@q^bh3x1AfXKnqv<)5KYsL=NAp^;CdaMwo|zG$fiR^>shi2^#pp#2cG9z9L)d@;t& zD85)6N_Zvv!?J-BHeNAz_6YY>%

|-9ihS7y%jc3=xqYS@OsO6|&{sQc2~x?ii1Nd^8|5_m2RE;MJEK!mIFhe3|GLmtQga>LzZ<3+gi3$oO@J$_g)7U8 zD~o|EtBfnlrrqz`L=Lp^+CRtAm1<-NdQbR~!L(dp%}MeSBlPmF27x3~mw%z@ z^AR|X`SO@jfhpTQHVUN-o&KxEwtkOr7GH03_yGS9LXTd`7}bKQvi3XY>b%B&9!GDldh zlKdDHc6;(t69O3n`1HGE@`ty(3+@oFvMJ!k{BTKn2de#q1)eG*iF=1)(|_EN;3MVCI*7w)%{yTTp+nzlQlu2PjKW z_epU$K>L_PHkCQ{>$l}d-uZ6Q+_|L{lMi@@?Yp9f;5prL9&f{;fe)8ZG1ASz#kh?@ zt9H)#jnkz8mDkF#c*O#>6fGP-io62$_p#;t2t!s6oR z3#rc+uBu0S1xswA^&;f60aT^;NS`n0^Oo4e>y1!-y*Yk#$!i12jfvV~Eq)c+3srqN zy5jV}uQK;Mv%P?-GO0S#y+Ah_2R>|zt&ml$2XrK3Y!;uI+;I!1ee5be<+`r%^{q$Z|Leu*%`!gbp6!Qu4~q=^7ZMJ@R?+lWtZ zy{WzOvPUoN;_Du@krWmM8EM)Q)r|v|lTqpP-D%Ub&sIIuwz?Q0)IYVQkb(VZttI#T zw3LjN;ZrZ=XLNNp&yr?Y`>~B8t)h5>jv9M&R3+M8wp#VBcVt@uZI~Juj!>cRin)CoBRi-BMU{*uC*QXfnWbE|q<7glBM? z%Byf^7$@9kHr$5=wrYS?=^Ze1UD4JzCb$5zt$mzsm#lOkx-)|5TRqb^6s@)dJVvlU z?8t><=y3?$eiM$ce(ve=MuAW}7JSRMAO5B|zX4PCHlYls3irBB0I72wL}4w;cj4E+ zrPBjr3aG{Q@)S0u+{n-Gg1cK**#l3F!q+L@+6S|4cXuqIk@t<(=uyou&s@XWVN4JFCkR!G*0mrG^Av zm!Y4#FxRi!0@p_Du3`Luc)-MuV~r;LYw8P470s0bh}r3Ip}BzN}$c+!@rw zcG3sm`8(r3%9ig^#Ee|qI-@;`H@D~{N|Stpaf%-o%%>NG`ly!y6xm=fqZsA9=qVIX zR+L**Zr!Sj68JgO*g54df;#8z!{sPw-iy(aWo&il-nBmOW73H4_Pg8J1HXO!(L?yU z+knK_e&Y8e7t?RSYeK(HQS(dE8khivC4dOFEREa9n|rM`d~Aa=bsaaB_2uiSz5)!m z#yh*oYu?EqAd1Z$Dc_iXSLTLJ9ToJ2E>q_kmZ#@k+-2B&!pvGl(>8_+J)+!>xX4uL|7YvB@wL7p0hHYp+vAK|a~v8m(p2aF`)pjH<6Wumho?*57Z z8-*r5n=Lsr&RB*x8y;0npj$0(5l2EwlUS$>1`W49A|BoFXPcT(r;35EUp_B;V&Y+0LAm@2<**)Jp`Za|6tAN2>1QXbI;i|!1{^Aj!FhEt*iz}TM zJyq0Ug)#BvWwKWM`6whWTWa~c2i{2WYSOlV@$wM_C4lGVdXj7nisu%sk|GUy=T=pb zfWx1rl(%Z;)fAF+w{qJj+#Kni_%zq5)Sv`>nbVYB)i&+e&Aq6pJ7|vhHQN3&-@X@a zb}82go7N9u>6Hr2OfRUC1b%j4jDKHl{3+bTQ3ZSqxW7RYYdsEXb+DMX=RkBptNy5& z!kuPWVFg6O>TpMvTH};9a;K&TwJKA1NGVgG`(sf?3%|w?=ek-vbJaiqYH z_uTN_=J8SGW6@KrW*^8g)QErGI`&KA+sQW>SH()ZUXUcc%w&SJS&)o#vd2Zu(dhhw zpVa6F$}~|=RcM)LC}zwZ73MVYLT&is$Txf%Z%c;Up-sqINdwiGw%1_fF5b+c03S}y zwY7kDNr3}qMUDJI?T?RG{;7Jax*KUsF4XvAk+lpsZG-u`=2I@_s+e?9@a9v}q}$ z<#NYXMshY;`-+Y+ku8R2R%XACZulF*?s?#ZeImDqHnUSz;+bg%+;#%ocQTi6wIg-M zsgmAY>8x1Mu6bpA7(Owx?ArQ~LM@2+(J@q%b6*xWvFkGBHhjk9wum$I_@Ar7oC8tDy`@GRKmGm^R$>Hv zK~M?y?j{v##=alW*cYh`r|EsguBVSeANgZ4Ypy$P(`SKUF7I1;#L*`Fws_}YJD6w? zE;_u{p`0}sLDEKTI%;JPB_T_p^o3(lCmV{+re^QTM~rHAy96^m&f|sy{i`COj4+P@ z_+;1jJ!eAHS{M{qW$MP9+Wdho7bqh@*gehxCK+i2z zj?`uyITpENbZ<%QKCO+j=mojBTC`=3Y8=s37c><9xH$A4mD%*w8Za?Q_UxA??f$x6 z&PpWCt?qc&o(AKY1+R0pfnQWSVlOpUhze_>cve2m1%39eZ6$g|$fxZ7`0m9X!=Z0!3wA|xyz4&`GBM78F{G!Z~rezMEh2dmW(6?~4!)wK_y zbhN6(7c|cFBK$^>APQa>x`~omWT=Tz#7Y3C^x>3i3JuLg7B4zz&og{r7XSw2v@;o+ z1EWD+yuXksm<+en`+oSCwNEoixnu=Hql8y5gos2#_`sVQ962}_tz#$ zjsBfPIkr($Ss(8v`L7BuLqE1}xFV(_o#xS3I_S8MX=c6eTs~Y$C=vLY2VG4E_w~`oY7|US|e;P1QW>k&Q9qExq0UD9jgrF`Iqa9ps6(m3AE zf#&8I{@_-@Pfm`$t*-;)tjMKkW_Zzw)vpo~#twl8HLIaW=^ zLo3(OOIYPEAzwx2%x5`cN8jAma1gH2!NW0U*9gts_F9x?2^!hgL46xYS4`j9)I?Cwqn+InCYYb=r3`Ie5~EeYGD5TWP|4Du%eOL?5#5pzBNI)`bb@<(xAx}*|Db$Eo6(x(mmGL6e( zs7y-fBXf!NBD?>|%V|WKIv^{7KPaigkW%NG|u)FcCCi5NU6TH`}glX zPIsZ0f><^ zO;Qz=J&=!Ync-uY?|Q3lT0yeWuKZ>|2JKw92-8&-9^(r8YkQgrSWRCp<-@wb zxfpXINFkxN4ZUNVj&I@yo@;U5M38Ah{#POJ&{+OV;6^}rh;goqQnF|QtGVQ$Yad)l1W7-7yC48b*eEPgwtMWOSB8p4igkkglE+e87v)a*Q-8ac z>vw!nN@J_ly~egntg1fSDLbUT7HF01$g8^$l(h-3yfC0y#$mTy<04ijpsoov#Cp}E zan7NMnu_)%l?ITV5E&5PkD>K0wB^@*V)upkr6qgrmXRow!X8a#7mQrQJ}f&>b+1|0 z7!;}O8U($luRL-Xzb>;BfklD|CitlCvaefsYG&@m_+`cvT45gtiJjLp@E~Q;8o{T< zO0cZ3zU2Bookr#w-RFa6UWgxs+D-(!LIAAU&H%euKyb^il1*Qu_47QV*iI45od?4~ zQJ)0lRwQjZgSFsa`*g>)BZ`wiyrjV}iR|;tR9`_orP9?q6Xp`5d`4hc=^a|>Y2)YN zwLD^Ag6$nlY>Eh@nlE)SDb&g?k`1~WMlYX#L<0?#<@-5 z)O3e)O6yp-4QLYO>5(7~v3iBxX`4)IOFpN^rJc5GLGwyIssh8<>%2_QUVy@aguv|^ zOo)m{!8M_t$F%cu;j~U6P#xV3r@okMT*ktA_)!I)v2q-}=6z-Ll0;TwFOp9PH4O!h zgVWk#jBGxM*ge7aI(Qq?^|-7sP+2}KNtZso*gafBSBp>i2fUWu>IPB;{hh%NI1%gi z4UCF}%?6}9C?OLL5PH|Zsq@9n1Lx%9Ht|(w_U#MzTivDD-;#u_Kt^0wT2?kcTIu%9 zs75Il07L(7=t2o=|95Ry-IOi(IG9sz-cKR^Ep{+sd`fF*?fJv11xpjv%W=~CCXHC1 zTG8yr70j$k_E~B#IdDf8rykm~S!SdFSzDqmj_SQhlJr>cB8}}_UDY^U6L!!k+;p_A`d-W!bssFU5Z-YMTC z$suvR42ou@{&>Z&z*wp^^G1b(ZWh~j;nPZ~r?dHJ#bjS`tD@~|R@_{)Ku2BpZQBfX zqmgj+`Yxw<9$4aflWKXAsBvZj;pzC$c3tx6de!~O{%YqXJ|K?<$wZnR&Z5+kxknVw zdxJtnGhXX!`w*V&)rv9W3EQwkS_isYF~KzXib#4}S1+IgIYkB80KE;$Rn(HWVO93v z#0>tgk@`Nr;)c-9y!WT?>Np=_G%H7WVbm~03miK9FC?`5(D(UKFO^D|Z73AJ9}WO7 zyWVmh{qhU8SOT89ay$5B`&3O^eB0o5cx}3LelchIcA*Zfk+$wUgEg>vqK(gdRV1#o zC8*xcV}Mvwdv&TBzPATl1Q#!_OSo6Z5bt=LRuUfo63~xv4V7P|sr$k)7qnGdwEr^B z#J!Wbm(>$o02f}ZL-g`xa}&QgP$IJ^qSl7qIu?(li3TX%#Pq?K|F!txn-%xX<1dW* zg~%(6`W47u8TAX0!!?>T@zlz@-AmUSk?k~0+BBL1$UX^yiM0a3Bx1_H_IwQ7yjR`& zs*Md0g+1#`$8OU6bRP+>wy~!}8F;a$anuDI16@3M-NX0glu4(sK1{@tQxhX*x!9Fg zu1tR4$7%s;(wjp0yl#G>#2QslkZbg&Tt0dU=Bf0Mx8;`(SRo2GNWLKf2=^Q%&uEA^ z5Vd?_bd!6vpPbf{p^G^_|9u1B0Zyo}B6P1_<0Q<3xaAWU;q9|?4G$v%w8g}{BaffILKBr=}D`Af3l=FzyuyA#( zYUX&y)8_KbV2SP_>w@x8b$Jvx-4Kbsq{$(={Gzu0sENc&TVa+QOYBIsMtYgnaW)6@ z(i*7DNWhETLKdjUOfWyN#^35n=hMjDKoQQRexJg4A@*|4-QqSkP$@pO^X%)#lEzEQ z_9KEOq>Ps#>NjDz%A*u(lR09SeEg>ayu{ADiP81*mI4na(%V(^6>--sdmfkbujeYI zznXO3x4(~FN$6VDja;>M@LsV}7?2uIcZ>$^2m7~E$E}h^uS`4pubSe;Vz&0p5%@$@ zr*)v$3jb`D@PFs-XSw}OsoY&%nERMQMb@k_eDe-24CKIVs*v^rIZB_rL)?XNtYrs{ zN@u-|N|N55R~N^#bK#iaTPZcdjF3C&|^ifc+vCIP3s5hsj{j9G+$5!Dw!F{F*>ixMh@TWpHcJE(dH%BhCc*6 zNiZ*uj4uTdymKKt#SwmA05%3Li@2V^W3pA8Mp25`ZJt(_gD4jce>9=qun0%%W=S!S z`=PQ3G1bubhr}~M%v7%yiDk#Aj;?A$J$s}WmYWYuB^@tm=daUDA-c}#lwMD7fs;;Ofm3Cn62FAvl>OZUW@+D+=ppit z3}@$<^*K44ZzfDO;g#8(iwD?vyl*1OaymBUm4Uwsta7h(!ZrNq*l+v%*>G59*ldQiK zzOr5_%vGK%OjZ6;P>=b}HF*zpUMJlCHUsASS?uttxGD zOvSo$6VmBX7b;0JTUix|$b6?qwQtDhDDsI3m-oA0X?-0o zsO3trmnjyEq@j$0dX;~?rQpdy-;S@KFje0b@af&-xBx=+K|v^};`rxxkN` zpBIinmWF^AAb&joQmy|W-19rgqrpOdF2JZEdCwqlO=J~F>{~eKf3Tk3 z-ev>=T>)s|fL|g1nDB?&BsJuO8MfcZK#gU!Wldaz0RnT9KFo;3uc=?_;>=>jnz>Vr zzt3!Zog|Lv$3#9*Ow%anU6@H;-c~<_^Dg9~3bibn-U|@@cuSU{bRfV9FiOoh$)!1} zaG(3;d*uJA^WpX$14`?cI&4Tf@`gSvFFRSk&L@fVq<$-8PArD>76<~L{ z{x0q)lXfI!G~0IOGB%iDjE&|Bng2jfEm6x!hEip=Q6WhCIOrj!QsdlKhl$UG@fO0t(Tj$EPsc2nTlG!dRSxCW=77rVC%QS_-6+jyfW*I{_XcAKR~aR zKU?e7C+ker4)h+Ndf#LZEbnI7yak@O9BbDz78D9K%4bznxaAH_a+ztc(9k|!s{SKCGJ}R19*jY5(F-_?5NS;{=wu^BR)|QTtI>WI(L}&c=c&!1i3@g zNsE&6age>yfE*4kh|6O70F{zGiSV_K1G3GjVPuO4^~awR3=@cu|2VEEBS( z#!AnJXjd;o?bnfmk$Zf^HAXqTl_>j{f-z2BF@y0hYBx zqlhyPNRbm_0^apb4*QwdxyH8F)=RV^@ZyTOoyMZBeoZ6 z_S1W3ze78-4F{|0%>8K45g~R00L97QW3hSRw7xMV^3c=Oi6~ID=PP#|{t@aknmCX< zLX@>y$4J{eWC+e0!)s?|_r~s@!@;VJ|4wc%NLuwfvG|>Ozm`ZOUk`A>pytOvYYzkx1l4Gt!1QUUJ%n18Yoq_e|w_GwH20Mh=sdXBM5w!#t z5JFmFnG;&@Rpuho-CguD5IWV`vX?>U1$E-p(o=&GQ89R!S=% z=bpK@(4Zz_DddYdG#z)D7pdLBzJ83f(ms`m z7T!DK2-x|1Y33B^zDzIqKHKu7>Q9N}{3+J@2^QEfucYiXDTd+g?h~;RrcZv$6x8^r zn*AtvsTMrB%=u0A7wb3msVE0V-Kio|dY^P=#%}`%ql9=An>2V7TPZe^1f@dQ_^Zl< zNQgf)^uI{q0ay3)I*%Q56hu)_O0L{=-wTFSDy<{%k*hAy{Hag z*&@MP+oXP1Y;RoLwBp*T@JY^T4On8Lxtft%j=mVhs$Q(mZE0cru5{^BtrU_>0X=q4 zNmm23cRJTJ@!aMw8*DC-R!h7$HaTr4Im4UzGh_bFuYtX{J+o}7!?CCjOM;A34u+c^ zuZ#NpZ>&oP&ton_Up0Y06qR9H)TuCFnENR1&zZ{`J2tyJwa_q_>==|u$xvhCvQBkZ zoW~GN$42tiH1nY$@c>&xcls#I&ph7{Wpeh7l;y z2U~hmY87j?%Vyf0BU!&p$uJKCfOk+DwHfrqdAY?)fZ#+LVH8)fN`Xg;B?E z8GK*>3#t9`q6hXdPw?U9%Vier_tp0?$V5k+0*+s8n!UUVKK;5wTI_a}KJ^X=^8xIT zFEK=UoAQag%KF$FT%zJ>o;z3NIm4f>W>zK=;w^=HQtt*-R}3p zHcg3Zc=3jBN$TBUzrqyT9j{II~jubnP8F=pX^;`O$oM1uMd}=TDZvR&lCvJmg zpx+NRfCcdezxcv?CT4>nFEb>6sE2ue3_AT-4_;|P>4Lf)o5OiFCOlJ)72 zE8Fw&rj1qj|6P-6BA?f;6xIg###>^5_doSJq=0VBrvkt~uW^l#ni=n(QW>)Hv4ZHl z02qzXbO1iY=i^XKN?w3Ey#Vn4-#M#Kj}(lJxvYTc=Oyr|_I^fe%;N&Y{Zp*l-TwpA z=K-L@{$bb%Asqkb67qQA_sUv7GT#I3`4X~fBf&h&f;>qr|4V?48GslVr>>`rBZm7>R5)78+PIVdSr!oF z5o5rr202SkMNzgXgBmGe*}@*bak(Yi=UR?V*qYk(#T2i?ouc$>utrohhVWr?0N0-2 z-e|z>uLG_?{__3(E^~wyj>0@G8F-x?ZQ`5Mac2d)ra}n`LkW?Hik>gA*kDpu(lb-@E;JXDc=S^q&`KiG0K?qFhcjvRz&_&Y`}5(X+BPx`0;xW<@w?Khqt3Z~Cns z!&bw$%!4wm*4NE4jye1ojSW+8%vL9~RcWzU)=Ey`cv`WT{95&TnG^-}CInRZS-uLN zo6t*Yup&|wNJlat2k@ZLCDyTHu^duJYdRTsNcrU2v5PDE$$z5jAJ#|Z@-gTm#}^ZO|I$4@>JiBMn(Cn`bX zv_{nwW}F*C&Z~A6(obY^+#`xFPfG`1hkpa3&%wN8q<$Mk3o}A!HP|~Fy)`!J>Y>Uc z2h2M=dqkKe*5)Q&8kW^B)Ra#s+?!r+{XVRBKMmDmIvUKz`ocp-{n68n%}1)nc?@Mc zXNwn3`he_m(oC5;uR&5%oQ3ggo%mM=WA5pZZ6m6mude03CX}18GkJ%GzUNAznDPk4 z)j3M)tGHY*o|G%>$o~Pm6fl0s7ydwNWeBA1-93M)@B_C0;haN2BsZqgo8UbuwT&1( z|C=!B$smq=u6Pp#$_P2!eF}Xs{Ibxcyg?0dbn5GrQP_c3@jn6|$Rx6qR<0Bc3*N!n zB$o!6e2sN`ljJK89~0dm(qvX#U+xn&V$6P*9klTx)P5DN@YYnQ{g1w{126Ni;(>)Bs>%#lz&qN zCOlC|{4w}t<<}?*$P>6Z3`(gkfo;x9SZ92sM*be_!$3blj!9i%ztwx{`UtcqE9Je zO{5@0$N%`&(Gem_^%+{^2#Kes@KE$mbAAg^lLT^yu>M7lS_z>iPYDELgC?8+sDH3E z#X6VEA@eSa|NmpRRYN+{K(>R(oFKvU#8~yZwL2T)HFX3iD7wEG_qIV8Q-a<(0dW6d zg4=AStRP-OhA?LQ3$y;q9}_yA0Hn{}T62P!;MV^HO<~_c0FgUG*54;-AOUB{Nc-@g z5&ap=|Cx?dU6#8U02CA$q7uVjLe9qj2pNVj_@j<)h>lhf1Tzid6`H>=$)^5bQo8&z zOIwwgH%<_&PKfXRo?_hTKZ<}?us}l||M)IybCg9JB3%YDuYY@bb@mUo-x@CHo6CP@ z>(~WiP}1U`5%w*t|1k(@xYxl3!Y&%Z?(anKb?<2^C_y2v|LFPeNA$lfO8oJMKih94 z(5mZyBpyk_xKw0N{dtx&iQ?qhLI$djolKZXi_6tvJA#V6PN~8#$*+Ys+T+nCxfABB&@S1xeF=zqt^xt9NP56ZW>iPEg z?g=qFndF(nPg=lpE<}dWG4Rf{>*+F6J&oLOBVp(ftI}fGj{Vd zhW6@t%vJknOh*)0vF=cza13E|BMeQX>p(NpX7|#&AWL(9P}3ApudB) zK;+4a=U`oF=H~bcaRDmC?SHQXp5o73Aq6n~9|dX;986zA+L^{eR^Y$yrgDiV|Kk7o zE`gKP%-+P+_5WXunYf!V!4Pe#Alm#Lu5_yZB_{kcz0Y2v@`HGS>+SPcv?1Vs69J^i l`EQN$w?nXXp2?o-aL^Y&03x~wln7J|9u(B39>h+l{|6~_NwEL` diff --git a/tools/model_generator/src/com/libiec61850/tools/DynamicCodeGenerator.java b/tools/model_generator/src/com/libiec61850/tools/DynamicCodeGenerator.java index 2cc6ff00..ccc1bd1d 100644 --- a/tools/model_generator/src/com/libiec61850/tools/DynamicCodeGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/DynamicCodeGenerator.java @@ -73,6 +73,18 @@ public class DynamicCodeGenerator { createDynamicCode(sclParser); } + + private static String replaceInvalidCharacters(String originalStr) + { + String newString = originalStr; + + newString = newString.replace('/', '_'); + newString = newString.replace('\\', '_'); + newString = newString.replace('-', '_'); + newString = newString.replace('+', '_'); + + return newString; + } private static void createDynamicCode(SclParser sclParser) { TypeDeclarations declarations = sclParser.getTypeDeclarations(); @@ -101,21 +113,21 @@ public class DynamicCodeGenerator { /* Create function prototypes */ for (LogicalNodeType lnType : lnTypeDefs) { - String functionPrototype = "LogicalNode*\nLN_" + lnType.getId() + String functionPrototype = "LogicalNode*\nLN_" + replaceInvalidCharacters(lnType.getId()) + "_createInstance(char* lnName, LogicalDevice* parent);"; functionPrototypes.add(functionPrototype); } for (DataObjectType doType : doTypeDefs) { - String functionPrototype = "DataObject*\nDO_" + doType.getId() + String functionPrototype = "DataObject*\nDO_" + replaceInvalidCharacters(doType.getId()) + "_createInstance(char* doName, ModelNode* parent, int arrayCount);"; functionPrototypes.add(functionPrototype); } for (DataAttributeType daType : daTypeDefs) { - String functionPrototype = "DataAttribute*\nDA_" + daType.getId() + String functionPrototype = "DataAttribute*\nDA_" + replaceInvalidCharacters(daType.getId()) + "_createInstance(char* daName, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions);"; functionPrototypes.add(functionPrototype); @@ -135,19 +147,19 @@ public class DynamicCodeGenerator { for (LogicalNodeType lnType : lnTypeDefs) { out.println("/**"); - out.printf(" * LN: %s ", lnType.getId()); + out.printf(" * LN: %s ", replaceInvalidCharacters(lnType.getId())); if (lnType.getDesc() != null) out.printf("(%s)", lnType.getDesc()); out.println(); out.println(" */"); out.println("LogicalNode*"); - out.printf("LN_%s_createInstance(char* lnName, LogicalDevice* parent)\n", lnType.getId()); + out.printf("LN_%s_createInstance(char* lnName, LogicalDevice* parent)\n", replaceInvalidCharacters(lnType.getId())); out.println("{"); out.println(" LogicalNode* newLn = LogicalNode_create(lnName, parent);\n"); List doDefs = lnType.getDataObjectDefinitions(); for (DataObjectDefinition objDef : doDefs) { - out.printf(" DO_%s_createInstance(\"%s\", (ModelNode*) newLn, %d);\n", objDef.getType(), objDef.getName(), objDef.getCount()); + out.printf(" DO_%s_createInstance(\"%s\", (ModelNode*) newLn, %d);\n", replaceInvalidCharacters(objDef.getType()), objDef.getName(), objDef.getCount()); } out.println("\n return newLn;"); @@ -156,13 +168,13 @@ public class DynamicCodeGenerator { for (DataObjectType doType : doTypeDefs) { out.println("/**"); - out.printf(" * DO: %s ", doType.getId()); + out.printf(" * DO: %s ", replaceInvalidCharacters(doType.getId())); if (doType.getDesc() != null) out.printf("(%s)", doType.getDesc()); out.println(); out.println(" */"); out.println("DataObject*"); - out.printf("DO_%s_createInstance(char* doName, ModelNode* parent, int arrayCount)\n", doType.getId()); + out.printf("DO_%s_createInstance(char* doName, ModelNode* parent, int arrayCount)\n", replaceInvalidCharacters(doType.getId())); out.println("{"); out.println(" DataObject* newDo = DataObject_create(doName, parent, arrayCount);\n"); @@ -170,7 +182,7 @@ public class DynamicCodeGenerator { for (DataAttributeDefinition dad : doType.getDataAttributes()) { if (dad.getAttributeType() == AttributeType.CONSTRUCTED) { - out.print(" DA_" + dad.getType() + "_createInstance(\"" + dad.getName() + "\", "); + out.print(" DA_" + replaceInvalidCharacters(dad.getType()) + "_createInstance(\"" + dad.getName() + "\", "); out.print("(ModelNode*) newDo, IEC61850_FC_" + dad.getFc().toString()); out.print(", " + dad.getTriggerOptions().getIntValue()); out.println(");"); @@ -189,7 +201,7 @@ public class DynamicCodeGenerator { for (DataObjectDefinition dod : doType.getSubDataObjects()) { - out.print(" DO_" + dod.getType() + "_createInstance(\"" + dod.getName() + "\", "); + out.print(" DO_" + replaceInvalidCharacters(dod.getType()) + "_createInstance(\"" + dod.getName() + "\", "); out.println("(ModelNode*) newDo, " + dod.getCount() + ");"); } @@ -199,19 +211,19 @@ public class DynamicCodeGenerator { for (DataAttributeType daType : daTypeDefs) { out.println("/**"); - out.printf(" * DA: %s ", daType.getId()); + out.printf(" * DA: %s ", replaceInvalidCharacters(daType.getId())); if (daType.getDesc() != null) out.printf("(%s)", daType.getDesc()); out.println(); out.println(" */"); out.println("DataAttribute*"); - out.printf("DA_%s_createInstance(char* daName, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions)\n", daType.getId()); + out.printf("DA_%s_createInstance(char* daName, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions)\n", replaceInvalidCharacters(daType.getId())); out.println("{"); out.println(" DataAttribute* newDa = DataAttribute_create(daName, parent, IEC61850_CONSTRUCTED, fc, triggerOptions, 0, 0);\n"); for (DataAttributeDefinition dad : daType.getSubDataAttributes()) { if (dad.getAttributeType() == AttributeType.CONSTRUCTED) { - out.print(" DA_" + dad.getType() + "_createInstance(\"" + dad.getName() + "\", "); + out.print(" DA_" + replaceInvalidCharacters(dad.getType()) + "_createInstance(\"" + dad.getName() + "\", "); out.println("(ModelNode*) newDa, fc, triggerOptions);"); } else {