From 11b032dd8905875f86d9f5d09a66d950e78c5171 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 1 Jul 2020 23:56:55 -0400 Subject: [PATCH] Various locale fixes Fixes install on Arabic Fixes cert year calculation for Thailand Catches JNA issues introduced with Big Sur Closes #680 Related #683 --- lib/java-semver-0.10.0.jar | Bin 0 -> 55431 bytes lib/java-semver-0.9.0.jar | Bin 46843 -> 0 bytes src/qz/common/AboutInfo.java | 11 +------ src/qz/common/SecurityInfo.java | 30 +++++++++++++++--- .../certificate/CertificateChainBuilder.java | 13 +++++--- src/qz/installer/certificate/ExpiryTask.java | 11 ++++--- src/qz/utils/SystemUtilities.java | 24 ++++++++++++++ src/qz/ws/HttpAboutServlet.java | 4 ++- 8 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 lib/java-semver-0.10.0.jar delete mode 100644 lib/java-semver-0.9.0.jar diff --git a/lib/java-semver-0.10.0.jar b/lib/java-semver-0.10.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..55d21741dc594bacf8d3375e781e41bb2f828f94 GIT binary patch literal 55431 zcmbTdb9AN8wlUhQMV8ym=+eyc^Z5thQbhGz9XP@)i-@V`2=dLl{ z`eTh*^^UjZGoP9&MVW7)&>$d?kRT3K-tr)yzpsBAK7UZ3kDQpQ5S^5~IKwv(#eWKV zReHGpJ#9R!_wCL|5zqC{D+e97Z8xkPaQD-`^(6h zxtTfAoBS|xaw?3QlJ6Bn9PADf{-T74_OTv;!3e~k504=S|2=>F6ZoR6p-D+crQ_d` zNP&XD?}uQPfzGtsBl)9_rG3lidE&gl?uwxrWYRuH1lbI)o%;cE7VbpKjG2^XfjwaH z{t8T_CoZc6E*KAKxnnO*xy~!N-3EX7_?614jA96uZR{pkT%$~Xnd$rMPly2gD<>0L zAPN#DfGe)*z70rLL|np>kZcs44|WY8Q|@azBi~^jC4f|zgfvvI;Lo=2J215>_3QY3 zdNr*m#Zd>%PpW?DaT*dE*Tu0|I~8LyQZ=N8iP-VX@RYY!4)nfRGGCqPJ3VZ!bIt6s zSDm*QL-;1KK5Svz>W1GqoD>X1?Hi#EFr|F2_+{S(y<=^)N`!pxD`xPO_B6;iO+GmR z>tOzdWf{dLZknpd=atug zgYMr@GuL8_SoEo}wNH)l{4X^o=4N7M53sbe{fFu@mDi+6gb?{M`$?nr%=YLu^V@5f z^6E$FUl4DElo0(PrGE`g7O-2oGP3~4kzc97G=zE(mZOo&;|Vvfdy?A#+1$nDZSMl> zo8O*7?a*mWUuL39QH$vMW93W+pH^58BeE5Yh=MW%{a16*hZE!vQUSatOBwl+G~Mc` zlD5ULvuVRTOt3)RW5@W}Jpte{`%TZQ^c zOG`G(IFD|l=Y7v^Rk`J?GGbkxm{sv$Z>s4|`JHr%6YOP$ zr(eM~X82x@M5{$OLXUjl5c?#YBGD8==e%ZZqYb~^kS!q13-rHeaH+ssp38Dv3;t96 zIG^h0`1jSXYG-X`ORDN_Z}uOmkL~%J)dD|)RvW?4VkNfyLLE$cN08}@$jM3ZS1~lx z8XJBz7i`2G2R+_ye|u6K{6gO!fP_&0@#DM8yB$lm!4(0>Af|nWgRZ?UGp9Ium=R-J z)`25kP!c&>Y$bC%IIMm`q4;W1UXpx?T5d$7fd=4=A1l8Mg6>Rv0XALAO+aQ;xFA)J z)#--Zz_d|!ST{@?%~}nLx{6uOL`;`H5vmBnXX;LujQz=5(1fLvOr;JJKSy?#F$KAd zAW<%{WJnezv-_@PgWLWd>oQ6R=hFB1yzmhvelN`El|U7kZo-Kv?(6J;g{h5dqs{09 ziBFNxxHG%r58+#kml5|sWt|Uk>2aSI?zHp*{?{!|9O=ax`UV0r1@XV)#J_Lxf9$TB zoYR^rDqo%1n9IT-lMQsB-yC@)Z97wgS3{%2T7eYfzR8Yka0Bh1-O*ZP9q77@FX*q) zb;e-nw1&WhURc<1#<|pYa-d@tZ95bcj4P|p)kd`IRqK)d$khAuZjV>U3nD+;6` z2q@k77w6XXX~noCM`(gkF$u9OYN+*j`!m$pmdswBkQ0wVUzi3^=} zY&r&R{l?r`y+#^6gDHgW>(^PtP)}!K9$Pb3K-KZLW!uWHhF0}qf{&d(62>Z zXrQV_Cjau{6=HKurX6obNcA;caj96a^_;t19QaNnxW6cNR(1V@Dp-2KZnePHrR253 z^xT4R7wQ}QkWY5g9Gk(st9rjJV$j_$c56-5nm@?n_x|q)d=6)KRTj1TPJ=|zjT1KI zm&uNgsQtR#mhKWbm}!>xX6Wp7RNNEzGfE^w>SfA8omUTWRGilP^4LFl4uWv{V)eM7 zB+Cw6I@=m8WF}R9?o|Nhn4-w=s<$h?c1a%HltnFFxB2%nayjoC#`)saQ^u8@L@{lQ zm<45DAlSS7$@RbY{dw{Psllr1>=mH^pfwTe;SqVflHBIcEYN~)CfOfj`_rrM>}4(U zAhU*2S=G3>{R4ZUZ$23R_TWd0zRnYL70!^3(?_5K=VhV%Z9w6jHTpn_DVAxlGN?(y z2>Voioc$$rwnK-|8fam6OZhs*cy?~e^Ec7)UKLX2nX6oM_?$Eph>$l-UC;P4Ok-V{ zgi*=cc2|5fU|VQ&37hB7m;qA63=hG5Dd7-M3Mk?*7@-QuV_%1D0r3y2EC!O>jJz@< z?LIO%mRIJRSKY5%1>vAasWs{W$y|iGFNtEUQ>o8ah$@eFzQpfv#xrlP1R>Qa0z}H& zS4<5O!^+B3rO~l&fv|;`h0D#;sl)saXo)q2` zVf|9zKZX&_#)hngIJkK;#Mf`QP}$u41$kL(_NX;x{$)}hCj!wt@K5s!@c|+?iRe%= zxP~w-J&E+1?4jx_$1#pl=pjaiy5gE5S<0%oY_FR?OCts5vk?dximX&XZn~@;i#>_o zj0_t}Z;QRC6I08E^{v{w(byZG_*dn7DW`jhy%FCp|3wRbJ9q<24{>@wX(9X5c@_Kj znODu$%+21+1Ylg0=%YH$O2{PpjcAtk2;c%I{D1&v){d6 zzWkzm4Ya0?rGkW*i*@y`iL;81`64S=QVc1QA!2ZJ@YJ)u>iB)u?*D1L5M3Qxw+rW3kj4dNh#Kg z>VbSy8fBzX=%-}*okKP%S>8s&dTgcprJY4xHO~I&xmdkqn*d1W?rv<%{tti=4^10Z z^115rZ%H>(YZJ)}4)azP{{wCr9r<^6^FkN=ytPd)JtWrnCMg*>qyy#eHSKFmi;4NZ zmKz>3jZ%H~oGhA}d(kaQ2d2kTBf{lSLpx{#w|essVe|}@Tf1;PNB#R*hJ-5nZhY(l{wbccdq{zjA-2yPQ^eMRF{AF<(Zcs(Z=@agX1tm2 ze6u$R&8po@Cx+s;_QnEN$ayd`Zoxi0;T=9Ga(`AOuhytnty`w1=g3!JGSzHVBeolV zvTHoI`D!*>uO|}njI=ed)aqdo>_h@sC@UzU!ZQMT02xYRxW1o3@za&Dv`U5;{{W)0Wzr^VQ%UW z1z=v}<_ox&b*nW^AR^#h2IrSMgX?Du2uM-erkbh*%M#R1q;#!o0by=f@|MC5sC2Av z7&97H_>~ji0A>CGe8^K%5rsNZr9>b-555(gjQ^p@B@=UG%3z%-D=u<{qyvkrS@Hya z<1hMlO~HIMUH^p5?R+hGYd9wE84$=yazb;D?#Q5RMnECD%`bQPCCUg3%Q)emX(kT^5X@Pn{=ho=rpZN*2ytuFBkF4?O|Eas&lk}FB=)L%*BlNbIO z(-HqqB=JcM|7T!#Rr^hc?~`USKWRqz-&#TBGrF^LvILlkeXeKbWU- zmZ+yPCx{B%viUiU_!*<2BBAEe5$wz%2%^$#CFT*rZ*u0+l3^lCs)%?j?c_%IrC5rJ_L5*plcyvwlI4@5$jYR|DkVdGCmSCrnF75-&O^p$QH?k$ zx{P3X3dltR)`c`qVp-+2jbJFRS+DCaF2bgjhHE=aXwLl5>t7jRHdj%I8-nFJDbHry@CYhpolJ~eIc zcw^@hW$;T?=s?q`2FsExvB#UT^1j(z(Z<$KAblScZT?G;VJ!O9qpk zX(eqc;PZJq6DvzDJy(-0`6P(qV|D5>!1#9;=moEDZ|>C&OaC;Yi2I22iUWUPc=Xn> z@hS~0+9y#1cT|j|G!+s1@)+HFr?u8i9XSfIh~G*B$-u_kigI8!V0U&`!Nx{LUxJ8L zb(w6ORs);-zYrbMXd%|u2Z0Aw<+spFUy0YtFJ++=_ZkW5c4gE3JlYSOPGDrTP34*7T)|I33brcWdE*u^$4GL%*lReF^0d zyR8^&mr8AlBnz{Y4DdH0UWC69R4MDkW}S<}G)j|yS+dXk17e$#Sr_OA|9)S8D)OY> zx3z7)EU{vqc5~FSKI%|9C&F&WzgmN)5%$O`#Ze~ z_nSU$*f!@;Z!F*d^Ln>ra;e+(0P}vg1PQm19+yCu3%rwa^5{&U%@Nk!VIC?9h8{Ot zmkZdzNq>0O{rRV-!#qqBI7SqSMwAgll+5#=Y)rC|=l>%qK27JwH@Y58M z!e;upZNiZt!?QfeI!C3X@lJ@5Lir>aVg2FX=6W(13A5Kamn&$qS`cCcqWED_J9xm zsl(QZ9Qt(fW)!VX#cePk`#Y~)^-2cIJz4W_JUtq2arHIoG^(K**^Ar>j>v?|Ys`Q; zs{*+Vs@44t)j6&#SuHL)8_v{S;Dhqk?1ed&x6TqYZ*!lGP39WdZS(|EiGXbikY#9^ zplU*(V{%(YGhNh&*fQl+h^e{fg3X&mCP{Ht`eemD!dh{1^->AFgeL1|dBA;plW;dOB?M=|stidb75?c*RlYDjuGVSFQd6mVBS$ z1O}Ow>WuD2)a@aRoLya zh<4#9CRsMMv@oIw=xr8i@j!O}nwlUiaBNFz5py#!Sd!l=T;qO3o2rN3AhLUsYFYrd zQCW1iiFCkJD~+m|u^Am}|Ks9n2OdoBV~S9r7+yI77braolFU^}4+Jgz_ykFC;upi% zV;)Jn<9Yx3`*T7luK zP|>Y?GlZ_Cs(8Y?_8x)g7)mo_uw;jzO_o|I{P_+Dw1|!%)HgqMs6@l=C_k_fg2Drs27VhI@kQb=NHKDB@tM?_F@=;WXhMq2@SDnKcv-~1SV>o z=|gyS*{s&B69kYqL=2nrBt+;%pau+#bB=RQXL<(nPSQMQP=fE?zc!9`M1RE{*YQ8( zA99%0qxf@2b|p{w@h^F;7Ja|O*w4fU{-=4-{afdrn1i#?kAE0bVw{}9-_jXdUx71jz(*_PfMezR8wXcN#rqPBcYodc#)zWZd9&Wn_VcsACX3kqs@sI(hL!Id`$-}?PWHhFm85!I< z1`yxmsqI7}H_M&8^u*|};89<581SyI44!zWb2u`Kab5~|v>7XMzpbE@8fUt;%xqVd zIp|k~hn-P1z?9o)i1sANS?ZTopq_>hmWl)wnczVICzQfYLrl_)Jo|Gojr-)7&ZA;v zqwPHcz*KJU`h;(BNiD%p86)N*$1W{3`~f7>RLErIejs>)GTlE5S*js<<1v1LcA{jl z%bb}iUgDFFq+gUG^`UNS#f|d5H%#%~r&^J}`3qw76n|lsMJD`!DTG&~{!U8mB3lv| zy?T{Do2n4lhKVC?<3_nr|3WElQJVJh-$JMA&!pA!XmG>nr%r7@_4_|&ng33k|K-a3 zL&4tBBhuf5KJ!&BsZ0)hQ2x<`4+Coi1#%#B>0*>pKm^SR&{TPX+SfXuq37tUpvk`*l-YNk z%*zTH$r$5wUWACew-2k^MRg|f#|#%(LB9TrRj7fXXqtSc`Z_R<}hLSoh4vTIIST( zOn=s1E7k~1165azG4I#By<8t=fDLzbCs2pxT5k^S>@aDmgpKA<=RIsJ6MO6MJL##X zaGJ5NMjE@2{&{$lI=ri>Vbaz)G_Yzy4LF~7=J|7}WeRaD(vGn|xsRI5^G=^IY{Elq zn7R7N^kgiU{*j~Q9#w$#ffMfXQjv^Keu2d_qlQYac9-hIuT51n76aT`S6o=$_Kr{f zwD9dq1Q?-zTJHs(*p!{5ArCV?HsxnY{ zh|c+kdQXP`8uX=Mm{F3pNu!R5^WVqPMNQwO@A53is2YLm@1{lgE>LoK&WQ zB6&;6TnzA$xqcr)acn~V06eb=FVQ84M&oS6=;TeJ_X4qaQ53u~Bsmw0u#&}G%e+$f z2}HKl;w_R;);~-kpg=}{r8tw6+#dO9U4|VbDI9Bi$)p=(`Vq`OB^{>a!*-k^%VO=> z4~+Lm*x-tsU&Ej&AAX#@5^jL^J4D$hxFqpzkQx;*MzyEpB$-OJ-`F2x{52FZwkAC1 zLIMHd|73H{|6kDk2XF_pV7w9*5a}0ARcco*py!`+ zZ9PsTOEJelbZ>wiPPQIxdVUTWp7?z*2DqNMzi6Rb6r)k3YW5t!6e!(h!64*Y+};xe z6~;!TQu*_@S4dl~tC`*9bB^>lgD_0pl!^o#c8Z@ke(J~33B>OlF~0@DFzliI^r4#W zhPf}R=pvs!`}!sg&TDwn)f#9 z6lJ$xgH2uw#{4v`p)x&!+gBVu>1Cc-qmtgMyBfinF?wQ`Pjdz_qqX_vsDpmhwkX}gfwwmDpR2x@6%PEWU{X_9 zvx2d*+SGbYZ5Pkc;9c&T-pp9hcs?y0v|6>OXoQ7;zrvp#g9v52^i}qk_ho<$Qg(L@ zJ@RY^ofmcKgdiUBb*!!?*!EOPJtI?)EZ9bQi@ zYfDfN{>cqkLs?VOgtkSbYkf9TK3|V`wQnZJetc^vK(y(PCPzK^h&W8JcaLBs2kN48 zI_|WKI%qGFT~4f}UPijBE%RdQpPmcc3TU`ezyz1h0jZHxm3g{raP#yP9Ba6c*U!V} zZ`bECQK8RYD{YWwbOp34xKjhIdV&nnJG68gzJv9t@zw_Kj zY7~m*#X2I_XgVv~1Sk{4BR*0gJ^q9SnrLxZKRDAE_BpMKTHweA-<8X zVlm+#8mb~*wL1764CT$~@7>vjIyyDEHG{2ms1nsM5Hh}~7dTi09+mAR!$n^*%i24dYg2Ijnb4V~N$C2A}rFN*z6O02!+*V0io`8l({7-)(de(xaM`!z&F0`* zPFT^9IA1=WAq%J(TNPx5Pc5QaTPSH1kAR`$W!PzL+K<6)Mm!c$v)de8Pt|bp-TzRI z+%1D?3c_wY;D;(Y@g6I)BnE~}+>@ckWDp%krsgUYh5~ZK#_U_e5IMIn z5Df09x3zs)wq>cQI7AGSi$Ro7{!>Ar4IPuqOmpqf@=ZcxEDdZ@X~oyBbv9eA|N zk{)0+7|?6cDFka!EJVgazwxVvY0v~JVRPA`*C+$k>dthYqK=31l?#t^qzkRelq}g6%2bEGPGf72sZD|)?Ea7vE_7B^!1PQ) zr7Y8~Ru0fL{AQziqWqJ-&nS@|V>A62InfuZB=gU$s6+ERu4ccj`-zgp}_EIj!r$!)<; z%&F|4A|zZ)szp(Kf7sWi=CB3YyN@PSuc)eM>!`EE)MroZavh`@FubDV`SBq}NQ&U9 z;IcJ>VGrcOSPQSB8{~5^xA5Y22TNB~YAV@E*)UXU59V|H8m&`Xy3OHWx2EPD8-4Pm zx-zCoIGDep?&>ftC3w)-3QeUg4 z0k`(N$K@&PE+W_3B5T!6uh0QpOIoSLNGN>vK5}<>kybmmsj0S&6Q`f7dZNHH;xnX* zHMFGM-=H(+cu3}BfRAcl@!2u9@he3+JW|h)n3hZ)6@YI~P*#w0KPkemzH#hhsID^f z^JuWMJ}tSasN6GOM}kVz+a^&|PU;xP$`(y-yrkk|sjueIA?AReA zJ5G2B5sVBy$zwy*lR%Uw98I&ZhD>u^=G3pxJM$~@j_uLElD41@kVxz7r4nt2pjxoc zgJX4Nb&$6X*jWT~JH$VfeHqnoXo=W0k;TJ2-=1vJ=LlZd&fz zW5_ug&NwoFrug3^O`hwu9=wveLd+OUPH+%+UK(q`UAGBpVLV%Y$E>w$(TG)~tLszf zM+$q1sE~LrBZF5(np2-==l;;=z=c++lj1R5HSI12aF5DsS+MF0Zh_d>^p*q%*UDhu!U+H zgvlX7EUDZ!0*!1AQH<3~Na9>reM;B`0$~r%&HtAH^LFT01B+krpjqon+%H#n8y&QG< zaTYmhuIgw@k+IJN9F}4&< z4@T{eIk*8gT7xFqrdU3O-Wi-r{N_0WPXM=Gkp$x&<#+lJ=U!rmUeDN*$~g92guZ;OOJ5@4)cE~)b&GDhBYwjZYE{D5{cTY z95H@ul;qi}I;~K2cVLD!IW!Yq%4=O_nZJG%AM1+DsA;`yQy=$}T_`?T+t%j$ahY-h zt9}~?XHZkRFb~YjnimCxrm5D^jq9SYZ1#?`FgY%7n3On6nyXP^N`(&Rl8%#MoT(0& zCHNyo{&HqTZl0z*&sXIYHL;JFy+$tFV;lXo#)^J5&FLkX`b48A=rT(D9GwS9%fV?t z55=vfu;+fpc3KNYWq(=fA5JjCdR7@5Mo1C&fx@2~t~R2oT2knkQ2ID~UCe0Pp%6yu z^NoT=e+3r4az!E;Y%=)PllfX`Hk`D9Kwtd64qbcf%etpRGPq-GJEYs8* zya(62)@$=}N*3AT{Y`I>WInR#oUv@N@C ziVW!$r>RwD`R795dch+A?+Dz1BHVZ;^kye2@h4y@_&29uE&mlE$8C8Tg6j03*M$#^ z8#ltCcEKrBSE9^Iar}({F#v-^(#y2u;}8H^Bi&WbJOil;n~8qVeHp3knR4o~cjG&H zTWW0>s+B{v7hqzpPDy}HAb(2Ii9%BW1R(V^DjCz!@R>%Fk8%A~9 z5URT;o}TsYys91|Q=AO+rC!;gRu|f7smWteckh?fsuILWO(JSo;Q;evTwW3Rc!}CN zPNBNZvQEs@QjsiqRpv>{oeb`(Fb62UcYCfE`jUXR9mMYTzTskm{E(=e3~nw=X9q^^ z(Vk-^UAdv!VEjHI?w=(0ocg&GkoTx$Gjpt2^0TNOz|mu^wz#a~4M3P}F2-^Decq+Y z0nk9yJIt2F+lqF>_|LpFyq-Apx(EuF=|xb0%AI#hG7-haA^jDhNv>C(zOdW{YXneog8fy}Ely(Z`ugO{unze<<}5;DfNF;El@G zA2G;WllH63reqe+^p6j17`^PBkR5##LY;v`&5e%UWWClD+pVX8%VCx@Lc72)*i+TjC}vgY%B3@5%{?#{#B z%zf(q^RQhad>!mdSKksOn$ZdC1yt) zw7Dz!%I>*uH!a&O7PHwianG~f^W=Gg;FhvE5PmPwA$GN+=RrU)2l15gK5lsTlN!ymCn2+wX6m_3JmulVcaz8bVk$ zM>%o1v_q(oXgyZ9?W{7&mdj0Vnd$^yT}N6pO+N}4UieN&q~9^_!m`LIUdQ+cK>G~8 zp?vJga+gYusLS_pl_ebQwa1Pb6f4a~5`Sa#CHBy~n&loJuM_;^&8K31f~KOty};5q zffnC|T)72qXI*=$)4LH%#{9LiMlMfjcFlvPN>cJz)T*`-y?Q7H`fVI|@>VyANhLG31HD zi>L3xv;Uf3KYK&TWclo96F>j~5&XB)F@JCLCH-4A_Fp>)3)P=BbcWF0@sT}9ZeXVn zs!5$?WO0f7gTj-SL&W@kpoR}fF2^EmQ=AZi3M&Wg?*;H!g>SXK!oJ5RnKJ>#62G|y`G@Yjw=z>bug2S5`x`%WeUN_Xzs^DN@Nf5` zxG4|%Me;@U1qMafK!flM;RqUM`m8J zINkmB{yUcP**i4d(Cum*egXRs=;Tif?sKo!^{PBtt6@Ge8& zFocD7>V#Rue}}j@88Z%cYyX}(pvOLF&W=fzrQ_F0I4l*=&dDRu2)M(O;gd`>am^>+ zJ;gY7{Y~D$IK||Ns93;wnDI4b&KmX(R$%A87*-3I?eND5h}*}&`BoTVF!B@$>TdCa zkrDemejAqd5GHm#BQ`Myv|cNJI(Y^IJpv5sVK}ves0TxO|FE+Z;82A6$X}vx7SxL6 zt^P=lc~>0izm)T)e@SXeiyc&?<|^mq8Vu?}jCp!>7yTf!yp0eE`&6uMvi2vK1R3|+ zOzh8JhyyrKkwIjt5K)oOA_*(g_NJq|x3M#R0?3$T1n4@cwZUJFR`+*njLV}Ghe3#f z;1ogAeM9mz;O1P`5D}!x5hRMlEs}Z{Bfz6!E2x)3e;Se^;@>>Re$z4Jln z_HPRQ{(G*iSyk4&1B}Fs)WOp@)Tl`x#)Ys3}_0FcP?(rb* z9_mc^q=HE`EgB~%1b-?<44nyBOcv2H7Cd^qlE9%$TTovbb+{H@7UT%U=cLO};Lb>s z$5%du<8`SvbKKtrVAng3+pda{tr7Ma8ZmGnmvh}m+#*sqK$b7A^QcwLAxx*q41K6E zuBssY;mDyeT0q{(Sb~AVB3}0x5h!x`TTfKtPO7ZSxV0RGW3UBx- zAt(mdEUvG4Hw(5w2TM1HOtJN!EDHo0h+tC87;pii2@YT2(WcV12~Y93_Rv zYBR--m__2GZ=MqVQMG=NetmUT^+2gs06y51-fQ2yI~_lF#L7uqR6e!5XFHy0miB9W zbWI27@uxbdWTW|}Xw!6JbBy%pqq;8ooarf~>)7U=lC68v5P7T~Go&y{az<71t+{i6 z1Tw);&}KB)kM^pdpP~=a$!exFOxM`2_9g_epcm0)G}=%0Mg-lVf2SLF2pr9Z^ap>p zk4@SUMIz%KuvB(My7i?;nPo1k>V3eag0d@^Av#>Od?TLJJbTQO*3?VeaDrOUFgiLb zuhRJ-jFfgq>y(u-&dNf-ZVl%A0SNy^uP~O0v2(5a6Sotxh%0%=s_;V_4sJ}5-l*@c zgs=IuGwI>y<@!$udyYKfQS>wt1-E)mDs#JBH}(#-a}S&YLA%1l=bXf6d72z^EN9*f z>42lJR>`#vWcQI0Vbxr-@-!*^*-~S_nY1TRX0-K%Gm8(tHWU-BW&hl8NvddK%lf`l zP+3`2xufUCG0`3D##T0uFZDbABTZ6ao6~-Sw?feajd!bx} z(y&FM28CmJ=YT~rK=U-8RplW@o5nGJqx=~LH{rdJ+Cmg0A0a?-qhy2OUMW|ktOyR8 zkMzDqyE+omTlQGVIUXIIJI~hVCoMb5TCY-jC{OQ<6$($UQgG;?y(;?*Y7{fdV_-gY zDle$1H5s7^&d)hfo-d6XKK|G!5KyQn{Qhv{ZBSNn_sH|9kccJZ;E?QToYFa|n8YO< z4iSd&p^{I$1y1Fao^e*N%fZ~|L-4qQG?xJg5Duup7F7YK(-LfRQe=xk#nX}IGXZ1Q zd)OW~%zv&K?)SDJCFyaKu@*|`LQlRf!HJQQ&NGKP za~!_-?m?;GyY9c%N6OzQmJ>e!-92r*b5;pP<6y1u&tr>2uh)kTcqN49v$|^=|r-7*uLF* zaU;n{s(YpsYw9(tJQ&>0vG23nSrJIcOk&6?rcjdku z?udaN)3MD`d>6p7q(W4LUS@2^M?$HSO*fgpsZfqqoRXtxOgL7Sbj(&_VW1IqFbQ83 z58Ov(y0(;P$euX~M8qe79dmLpy9r1KoF(A63f`WEab@(!0OrR!$BG2L*KQl#pGqpq zDys`cpcB17Jpb0H!5Ae;Dd3Yratj3FD<@p|E*U|e#7Ibh&v`dtnf6)X)u)hTQXYzA zfzbjTpiodXAfu=8^V>MhRtJ#TA?J2O8UCtmbg?b=*iTJsf4228{qNkb|IqPgr!bD% z-#UdUR_Hqwg>lfTHAQkGAB52?w8Jbzf&Oq{RN9`9!KOqj1?g~LfQHPQ_+$?}^9mOI zQ_iOWB_4Sd(~7M(u~XTB#~+l6Y3e`6_t!Vi+&8_mHv~Q}6_ERVbJG)n%)}jHZJ933 zg_*L3Btg&FX#t`fFCq@X_;i#U26A8SaF()nVgv4NdSy5Zo1~(A;MVN5Phjm~sYk}F zFlQBmS#bMss~JI!Rlv#x1c>Co`E1i>Pe;RymC&)g@PL-fO5m<7mVP~Ri3EwTI>E$&jeeHCIJLRygv3P9}PCF;bdw0I8)8FxA$st-C$W#x$`EmFsrEsaM{t zU;weq&9Og8cC1uVK}=Np3x)9qK*+H}+Pxf2WJvqgR=2lCNsA#E-^|b)vjeC_xdL6% zPA^Kya|2aYNfRfFDdq_k*~KfRm67`{pF=fIynLfpbT;0_C(UFX*CZ)-AL754zE^Qq z&@t!`b-jZas5vW{-b=5A`rHc)Yl!8Ydu%2%>KRt%MjCP>iES|LGA-P95E1Hhm$I&I zYl#Y;{#E0R^&vloJXZz@nihpr0EiGi#S}>+$={R049tsiD8MW+qlj6E?Xv|2oJoHY zV25yOI(D3}^&StIS#DMr@n9coxQ z>yd<9o3~1--|h7(B^T-f-LS#I9E)!}mp$zLFyc%}G|O}F#mFpA}EIP|hLGTCU|6nT$V7!Hz|GH+Z ze3+A+|8jN7ygU{4goMo|aUthsA1jO2$SLgx8$Ea4gJMAn=lIL^m&B@|JAPFz^E%(9 z#htTT)i#}L`4M=B&1THw_wuQY(E#4#_OPB9j^W3~XOVY^e&MSGyFe_!_}--*rUt5!F2Sn>?LoDPBU7dn}T1BStQda?1MOOVT@bH+`bv?B6krpY{mRm^NO^?dur<$ zk$|}QO%FP}2gMt-fm#|>kv1cYh3FT)UABOKPWJ2VDHf1Tp2PO)XI_I~Tc%NniMH}3 z4i8W^Y$vp5VFptYoV|xQRBtuLnPsBdrW2w9j(g!N^n$Y4t+ba1P;EqrpBtqPBboF< zMVQrGRQJ0f&eTVrgznP#Q0@3TAQ zvqyP_Ua#%PN%A&?KV*MGQVU|INF>1*5#@PMWt7XJwODz}_KEW*qE}4Y)}297rkh^3 zi)iMo%&0*7T(b1k3>Nn-^T|}cZXe%|FWXe=x|}WPLfDVG%PCIwTZN{ZJ^ld@@aR}| z-c`gi6)WY~e3j$Vh;v-Osx%)vwLc*P100{iJzM z;A(h`oPFIJ=8wksxEHrwrG`bi)^|jYJRPpb-F6LPh}OaF81SluO=iTm;|I|wrNLCZ z_c1@ujG)F~Y4#F!azl{O_+0W~pU;ArD&Drb#L`2=CyGW#7^q@HzYBViZk_!+XU%`R z2A^sU5KE(kfQ@emliFkTpwd>kJ|>l!VW<5A(tHb7q5KAY#$twEWSPCFon7RV*?}{x z#LlBk68$wNKX8<_+cbp$wqCK)>!gY29+Qm`xoA$0m!u=UwttS}10 z1O2*Jn!G9OKPVzos$~L328O$@b=yeJQYw6S=CFx7P3jxZ-~I{(~K`GT!vs z{~aAwqMeFq6S9-39ak(z<5^b%T|VDxfM7W2wudnTbU5U;IxQwDj!V6KFpqTOO#2YJ zL3taf)Coe_MzuR&e2rd59=?0* zq8YJ@J3zoLUN4dCyOLbubsh#Z#H3o~j|H#)cK?{(uyhW>ung|R=^sT|V@6VYuQ1|r z;7sZL2Enxqe|QsPv_rkXNtxeU!)&_-JJ3C5>UQrtif%)U+n7~K{!uDSjtyI@&~;RM zzqX^#IB3$AieaFVF7bEFAyEdNHScHalDu z^T-69FcCFRnFo4Inaey;T`=BERj*p@4RnYam(V<(< zr_AzGavKes3gJ(m)ll)MQt$S2j|z<+^Ou-+mvaVW$dtk^HJ%PC{1qherZ4$}pCEDl z1PSfG1rpiMYYzW#ixT73WN?H~2fJ4)RxaC^I2tj^e~X7oIq0l%SlLL#I?&8wko3VG!EQaKJAFSqotiQL*)&}F88pOR z=eGN+KO(3Yo~$1Ike0WeaVqBQjuL&MEyNh>0W<4GX!*Ci=`1#D$7i`YT3)APqEizP zOnj@nfi3b-c|Nj_*C%bpIwqajvksr`PjoewwTuJ6A?DtXguh65W!%o>jxHFTlVhHR!)da}42Zm5>_xM1;XvYd|1GaeGHLzJS`zn%8hA{8gsgOJoxy@`XKo zuMlboUa4pkx4YVjZiGos5ZurJaS~>dL}`y0lv&%ujJ7G|s{wLfczfrSB~iOAi;5D1 z5;+QACnxdNqM%FKjgeb)_=}(WA4zmf{At?Ks*@ozi>SWBOk6P@Mhg)6-w>LOE?@R| z%)rSlGN-kp`441nyM(jqPORCWDZg?ns}?;UBs?>jp<6FFVI~iI1)2E-q;ky-(EySP ze*K{{y#d$iFA$ek;sqz^?txAh&6Yo@R%z3#d;_|N*4C%{SC@vTot`esm%<`6p3WHj z6%XkcXU7wtc!>DK1IxdShks!V8N1IrFF{kBwz9g#?u`dPbsNkUOd11lYP$P;3 z>ZSd*yRZ`l^0B*Mx*6r=*dXPojX#upJc%>$2k(jnGLah4`)F;Jy@A@4`e`*-O z{f8VmW7Ce>;DEa%Y|10#ecE?kNsaIUZ?vaUz_4oZTQlx+=}w9^qRja>N<vJ3Hmu5=^@+KL6}Esw5)GGQy}rf zX1;8lz?;Tk2DjrBa>uMuqo_@x+H=HvrVP{tBkLm2v<%dEWGVB`<9_sPzF}w!oMx zJ_u^XaFk@{g1$d^Vw>i<$Gq%&rj^xTT#2dh?m5xU0JscW1k1D76ihU8*kGdNM^SD1 z@(}EG40^OL7;5;Hz8gh7aOEGcmOc)95}=KuE6kVVfu~UBGxyo;k85z%FWPzoog;c7 zI3FaIgGijbf%Knj!5dJKNo<|MF$@-FZm5P|e~OaFaCi^F)j4nV;pZKZnm^~SP(lMd zO>Id~!J@}rDBSuhI%e|FzA%19QMcItE;{6lT+D3$(GB|#(&*H1_fpkBd%yg_klG;# zX}v6Kl%thODmVbDESwfo5FaE9A_Dq{*qiwuG^)zU0jTf{_WY6z~Q9c=dBFdEv}<37=~<5&|lz(fIQe> z(vD3i82FnVxKx0>W^cO6&M%#e78F-5rLg9r9UC{EEl-Fo&*H##mDniPn}K$+b&?%E z=x1hLmj6zaR2=1-W(4>z*2 zyYXJ`#3<^x@;z_J`1ZzhQ8G^nC|sPA&d&`f2)is9=k>_^N1{aVHv>}qy#2|=Pv>{? z8H0UZT*JXcUA%q4^}5AQUhK3xFvycKZh<|uD+Kq}2e6A7>w2(Fql&?!j7xh6WpK4! zE^M=T4Gu-5SnN~SgrmfB1%E(4^CkxwqvJy2a$FT%@_ znpX*;TFw$%uzx5ME3qjL8Y0|biAY5iON7!~`XQe?dNzg#EUP7z+YPY#{@TET`NQf< zd2Ab2g6ET+SDLXx06WB5H4Ca=M^PrGS{O}a=TR8wR-HpeuR}U`p_O`mDyHGNBgnZE zn()W1hHSnZ9BY5oP%%;!Ji$Vh?1-}H_wtXy$eSFA|A(`846d~8wnk$o9ox3;WW}~^ z+qP||W20l+X2(vaV|R=%&%5_NFTPXt>~nsss#WX9UA5Ml*PQbjbB-}C)JbZGd`*89 ztNm&6qDbtNjuna2gOYl*imGeXgNAJ+<)z+Z3R9`;r75@g0fp6JK7y3p|A$JbS>GDH zpnQ^vptm@}5I8Kh@s>WAOmC|GXAV4feY4Sws_=?fOe}IG9x}eUgW8|hCB~Kbgqr|Q z6m!^Ebz0^I2@T`$0#C7drn64|5(*J|<7S`BZ(%NvmOXZra)t;!)zGUO=y#CZ_el#g zW%mRtOFfKe5@DSm1PJVwo9h*KVm53okLCQaP`|-bdL9slQzgJxyuvm~!$@n#w*cGG z^2EV?s}@RO&)LNuAP6XzMQ|C$=g_-tQJ8kw78m#KCtF5$G@ynEMr9nR(N9ZO0t}2; z#@q|sexWgR-}y7l@u8S|A{Y{jZ3_~_Y{j8hs2!k)0o5Tm5PkAv{2UuZe zWxvV>>jeboT(621!l^>6!V#I2eqzGNNHKPp-pGvUc98h>O}`Tn_zi{AeJzA2It{ie z7g}2tGby<`%RrAE2TWx83p;wLjmZDVO)8Tem^FFBl~-8EOrt!&@B+#sQtUmv`ACh? zKLDxm128`_qmrlpQY=yguvMZT9h>roM1{>-;JuuQ!Z7xR7r)0q+=~qf>`BaFWoOFWi6Vmi>zSE%>&VP z0Vp=vQ|ZR@?^0v`{6Sli^SP&v`je={F{4#6j$J8>l2)6qcW9CtmZ1y^{hNt)EK{Xt zQCW4Xp|_&2y)y84c%ai*n+0pBzOkpWy(LLVcENj8S1)boP15z3zJ2KqbSEca-Q0>& z!1qDjJSO}Xm(p7;kt-E*=ZgpIElQ)JpfIb(N788DEP5@@_(`)6A2NxaJdR3vTLtA# z4@U_kd1$S;$p(>Hr2!3l3mc+oYprZ657q@5URgG@SMmK_g#p9VXa<>EY@E-wCN@tu zFUhSLg&~FTx1@Y!ZEfopV2N4;H_NSkK&KjNUPw{h$nseFc~E&}VqMm9KxK@lSNcqs zOe}Sx5Ob*Ny^ImJNYcUb|ff>E& za=GD$LC*J!hX@W*^%mtD%YrfBD50HWDI=;w4ZR&B!?3bZuMx!Wy<=8T%D`-=3sjTj z+z!-YiJFbvOLaMU9Pay;CCE@7?`U(R?XYtnB z9DFgcsveG6NBqnj&mIH4UEAjT0pTk|bUrPQB$pr1@9IRMBg6||8xWNJR@I~2Hhl;- zAwg#jVA&zIo*f@ywmxdH7bZn9fN~+awaiG)QwNgj>$zv*_4!$B@tLe+8_3*}K`*RK zxTLybXpSw3k%Z~hjO(oW<1Qw_0b4l`< z|9y-%#!E*8G*6sFTMB9KN6ox0-9FU54{)6*&2UR1zx%`Y*dS+`%h59t8-{`C?j~~* z=#o`&7q_J3sCSoB#Kc*0YF#ao8W*{!E}>-+608R|hRm@Z0oHIuZ(Sudjg| zRN40(Bf5Mf-)BY`s^%5N2ox~8+!`TsXUtAf;%it@ZtNh~1{-C391gfbkH@~$yGZGC zlJt~}-XXi&B-2UtoclThP~#v zrc)AGm#(Nvx?;yJC!3B0CoHxYB>t0DCE;r_mDo&L5|x>Jpiu=e@L#&C78s&U#(VEX z@mBAp$&2@};d;s}IbF>-o8V%NKUVQ^N7p#R7K11?`?*d`4IF;rJkIPr_8ei7;wUKU7PF(d+2j^Mx(Z=o+}Vg4qLTj7zlKEHxjF*QPJCXQ~$g8dT*9B4a)CuR*& z+$2c40|CXueUV%KSJx9+H@p9u+kCzGzxF6pPn4C_Q9t>R zZ|w#^7kSa%guIsD$J!+WMpnS`~BYZZtQA`G2!&hBAPr&0p&V;{$UA8XO3ys_Ee2mnOc2B+$m z`8)C0& zp7j*S&9b_YJ=Oe`vrk^p)cE2T286tb#PJ^mkmIB5 zH6^!QoZ>o{kjy6Vr6?+!rw$8qop;G3UM>1Kl8GYd_+E0-$8KmSQkEm-3|W)pv5LK~ zLOzvyE;`ciR%@j0rZ0`y>%}v!k57d*ILTtnE2RCZ#3{AN^YBUCn;J={#wZ*K1vqi! z;_!6ovq{NpCCr5^wCVK3&{evZN{K3@WyD(a{G}9Hvr-;Y%}LBpTcZ`8PQ!XTy~MDr z{PQ{J`4JXajXu&!r&w4k2V8sMY$M8MH?;J52b+byL?i-hZMWGrw+#MiDVe061b^PW zEkrNJP-Kl*b7x2XJdnz_I{D4o<;4b#KEHaX^iw>g)S8xHQ5_GPf`dNE40Lqb_p;^7 zkloX&Q;??Qx==mg>PsYS!h|u>9!P`h?^%QA9xEXZGgb`c*`xYIUzzwY6c~ahQgH?* zBU|YVLeDxJ`8)+lS2qqqw~q2@3*?j^5W!P(hLEUaysQ=QZ38I6PAzXJE%pZ*_O@WM zxF|f)novbuXcZ2_P@B-(QDA~Zqca?QXcQ>EH9`f-2{j5J#Hbh z!riE>&t2hjH%42Ep+B}f(LPCcOGpP7I9p41qx(SEXptA;xI}L!$#3{?cKP>EUHYz_ zw9}fEGFUerQuJ$EIi*MTXQ8lJw|%Y^4d#9B1R%R@#fPVPy>t+O$r4a&vtOHmMX+Z! ztrgRe!)G)t7Yik~WU`tpxFx$ez)%p-6SMj3LQmF{#6WpokT<1LesaMi94WX#rsYFR z9v3W=ySz8`VvJ6`zbcRyBP^e`hu-qk-@cnlKRnJ?qPow^Ji_wH;?!&oK+&eK)ekDS zo{-z*Z6p|T^sBt$;_AIrp*2kjwTDjVE4bSBd!glmDjk|4Zx})`SWAkhU5AXNILjvq zz#8o@IYtHQVX@psU_G-h7MLR}Z{{YW&%&!r?-h8ixR<$@DSnA0nIrof$t;dqaC{S~ zc?Dh0>%dW{6Kwf_s`^DONf%A4tApCof!GqI>=AX3ee;XbxkX|ID3gF`nj_=rBCmr- zgDrenJ)Nq3t7!sJywF0>in!|Sam7}{_!K+3+ngF`_3>`sR))AOhtXM9|Ln2{j1|;O4 zC_gaf1Vh$e1n;?vtzl)m(@(*yMy;&Ird4Pdnq^4XrWCEx50>Z;mKcARKcyeLF)Vh! zHI)~*WAKO$~3niudFuYK|GVNuAl$sCS3vQCfUXpJZ1Vd&gJ_5m;e6@ zhR9Wx{Q{{FeGf9KQLweb>sk~j5x*BBp@Wc$RKipsE0JOVM|$mqkgbjUsA)!Nen)zP zpUFw!bP(MaR~)gUDJDj9-v9ct!*_FU8$4f%-M zuzX65Fj<5Q#2wnrUO+A6HVnbFL(-%3=v!eV$I^+#`Xj=jxa9~*J59HUtl5Nz6$3jy z%8QkJ<_NSiiLvEtrxSU%U>Kk-8ygQ{BUhYf(}?D!kM779uaaX?Qa>~A95QC<-GVR} z&(h_=7jFGTf+FO%s7X`ftxsP1aG3!MNEk(XUoW{4&jICpMck^~DWcVu3c|<+^UR;d zGLT28)LQ&7=3HzuMRV&tlWNeT2PY()P>3B9!(}^GHqbv>=IlS^9(ZTO2n`U>HZeQ| zJ+!_97r5pTK`}(V$ZK%gcJu*+e-l97r3A6ao7{a4Bjx3E(y1x#!)EZ=@V@H(`a>+9 zk2&qo+P?h)Tqc)q*s9hu@G@W!>5t@5HGJi+(dWIyX@!rri+toPoX%n=cUBlT`D}-w z?vQ#`=h%gCmf*c+8h8d04Mr1njVG?tFa!-d*_K$xp?Kt)d4p_s0D=n@m!lqS zQ4d$9^9=v*kd<)QFss^Ev_O2pR*e6jBIf^^{cEPBffU3>soM+=*U}{z2`?%Y)3H%m zBuLG#12{=x$H}*B5MSo!vHXRX?PoZBnz-eVu+H556N`$T^5CIDo0Nsk8h+ny=iPPv z_I3Y!dR!R=f~c?FLrua>XZ1)}a=;?Np4pX(z%Rny9?l4>YC|7#Ws7s(R5YBf_gxImL)MLh#&rIvmq??iSmYPDdC}UHdh#F|Bmu=qOzUT5x_PH-CB`_Ood~9?2%*&(>#6O>{~h* zYamZbW#l}9v{uqY*_p>>*XeGOc3`|uWqd@tr(zqW!KY+}JxY;pD>=}hNyr#xz2SjN zr(C(N>A9?O&wh2BqiX*1hFH(YVxz=osAafvKR09H2Kw^&3Dw;dYRb{X)x|ImaH`RV z2XQ<`G&{Eg#EM6buKGqc5fcXz#Z8-n3Gr=kVpU2l4X@FJO5POjac&yXcYE`sUU5M& zuxP3Zj&If<(F!6Qc!F`s0-hPyyMeU4=Rsd1Z0I~OYO^{9ZE~h^f^@)n8{kgr5I}OW2a-~|5nyOMLZyyZ#R^pyjX5Zgbo_f+k zixEN%qkZGqVFz2jxcA1@sY1unBz_h}Q55U!I=9p2CGR=Ry9a*-&dJnD*(fLcYn*1; zlG6O()x`~=fHy`qVM*O_2e3)iP9~>{oLh6yID^l2)=|0Wfktt%T^w8L;c`i}H@pwWkOV2F?46CN2MFf}_GoVYs+l|UXJPFx@k`d6 z`MTN53;W#6HBJ^g;)4Mm-nTCrjPbT$)ua%j{i4v!9@tC~-g^^E04IbaI8)3Xh;IiR zQM7x#NGJL@p3V?;(o;@PLeCHsenM&CDL1DjoWhwe3el|-blJS@_QrT6WH)N+*gCn= z^vgARBF+%@Oj1iYqmR7AOusaz)zFH`J1LF>3i1;q_9)?oFk}!eQyi?-IA<7U$%%dO zN604wt2b1Qlv$3?vKcg7=YeRKpfSyK*0G!jTBro zzspf__AdW6qy0xQ3)^ws%xIIlTP{rz?p6KzdrA6h&_Gl#sKAO(hjhGtwKDs9an#xqJD{Ic>A?48*F0X+DYv z(#-HuN$qU;Q8uHa|F9(jUmQS)g7dyxG9-!z3Fh;!f?MmAE^77S{7gYWnpu}kIjkcM zJq%qfTx0CJj&Rds7X+ky?}m#0;`z*cp9hh7#mUfZ4}3`Fg_m}rr@A1T&IGj2CKA|2_TM!udD3oC5Hoak)scS0Hn|DjUF&;*a{&TK zpn@W}N~H=Fyl@3E8fkGP&yXBmC#M_+FU;&5xJ?uoNPk+m@S9upm{VuuwUHUG^9;vl z&X3Qx_Xm_d5>^$7w%kE21ozvv?9pyq7c@fF(x8#|IcF#FE+p@+?q0mjtm&Maj{1`}0zoWT zq+W}Ry~X`SANFHR{2SlnH#+{^5ec~XQ2XL@>)(VNm@qBYFGiG`0R#Upg8fcg6n;z8lL*1EcS4Gjd@G#y%-EgDSl5+eBhz)80hc z?9Rk?W+a*T+Fh7hF&w3RrXw~>;nc4U1L8+$sUuQq(Kw5{CD5ycaLN8CFx6}&w!&?~ zb*V!ms~hk=b>p`|O#Sj@e<5yBeqBoz$0^~d6bBY7`vOc|%4q&T@bZ7{$N!2~vl!3i zV+bIiYWV+!y3qe?Y^JJNJK!v%ebnmFP+6OtQ~p5dWJ-Y0rXe;`T2ESyWGY5VO%A#v zRG_rBG`1zKo3ctJr?Q89DSlrjFoeJ~(E1h=PK0_cXvR8cd1Cz1>(8?|dhcIw!AN)C z>AupiKel+|;d6D_{g`u?d*%1L+V6Ai6&|SbCYiLQFhdZxgcOn{GC4!85RNBOnX|@F z0U&xgHP)XPtqR{Lc}zL6H_xfVwQ{&SUO=Cln^@LM7vAW^Nx_%5a*YQcPc|Q27&gkr zTd*e?cnSC;Wjb&>m2{FhO519tjt9(l#hJ#V$7Ib`MLwt5sIyTGwjqA!4jthQ#ywIc zH_d`~m7!UoJ>UDd`FImv=W|;jcsMsNEM#C_ppiQ+yP?<4pUPvO$GWv>dY6(}rO9GW z%h5`GiXWJv+khJn+(|&2!#tbO9(5w~o1AaOt@PJ}-o}q^#X#9$+lTNtrfZL86X;@? z7Gu21SsBesBc zap??+`CWpm^z()>w3Q{bZd|T1US>D0L0cqDQ1pYpsp~o^9EeJ)gTcYbzIW>W0Q}r7?@0DL)Nj`UQMar*ZvAOlyswG z7?*3kA!1O!-nX+@yEXOsemaw}y=5N#v-&qIoz9(3+C4UP;$u&%2J~sDuz@2f`Gw`^ z{V6>O=gN9hbxc)G3E^Yym6tdugBu%1g;toao)^*Pp-J;4dJSj`ZC7m7xtkOT9>7Cm zbQ*KX5$-D-Y7VfbevrE8^fhAVE#Bz*$P;$rODtH6jRO0~jzaaw&({#y;|cVAll+v! z6Bx*e`+Z}K_gb$%itz&=j{kVf88XOyIaqwpK~aD4xtY}W@kelLy9Ld?wuf?I<+3y_ zU0u;XHTW05!}|nsvxV%W8FE>ER&xt$1?5G|`CYjD1j=(u?ohnyTWkGcReL80!{#cKGGc+$2{uqj_ny;oIt)hA+kKy&ks{ z+6|+C{J9#af^Y9o#;`l~0e!J=0pSiPUd8-Rn`Ehzn!g3eMo}R05w2w-oS7TJ5}CF| zkCPfEox0+-fiRGk5(2`tpIXKRVsj_Td?x0rb{A__(VpJOE{Jo!nQaS|8(_vtSb7jA z>k2;+do`pZVX0bU3>1Dc7bf2wr(VVDh@FF4d_320wgo*w8$(C79@A7KUJxSeGKt)9 z-g$uF+>rXy^A7(h%Uoo6LO#+!o~16vGCCH840Ft$I4}s{igNs@Pt0&VFB!g=I-ZP5 zpYvxb7FxVcWp(e3;tBG>hv7V(#S{RnKOx>kA5UNs5cWhI!p;%jMTB5v5gJFu{nkD{ zwO?3{=YykG>BAhz9(>iDuYR2;Tw)Aqh?730Hy#weWA>>NP}Ot&l-X4sqeoor6@p`$ zd94)`_z@BpbkCA#8xv+9Urh2|XJpNeht)%3buWhDsH+||cms>X^!cn059o2F-+vKx zsbTDi^Z{mIUX@-AOUF7S+rFcL83CHLA<1BJqLjaY1scxW&NW$+cV-dJFTzoTceiZI zeuD}6(ND80(L@Cc&B937@(ks|h@ma$#vTFi$9jY`&8~KKA5SM!l4Yp;B&P6_YIBkzp9*4bloZ|1D2Q^Ia6)iI;ZH8YY1g1Z z?xYq29p;*-jUM!wd#XSYivJ$?M-ADVAj=z2oPx42AD*q61*Q=!!Se-t(5zEh81?Fn z=Meb-Y$CWR2H72-y5$oA?&tV&JXNZEJ@BWMnB3gSJ7BZKoJBh55^@f zv1vb+2tVyPbmYkz1J@sR_EbMb8rks&1_Oh$Q@HB)V7xS|wfzDwr7QE)budF7>3%&R zWmx4IjgPlX?j*ZBfRlbg{i-(B8+b#$q! z()Kv2s2?N7-Zm?e=S{Lia^;ee4(H?$T9mAo783e$$t}C22`z%;GedbxdC&)r0hbAg z$TUL;TIhs<36(I47LuZ#^s9t7Ng8Qnb^3h}iZk8Le3{&FOA_O`EbcSUJy)B~Gk+dG zeLv6wy61>328qDK0i4Kz-^2$ab}_Y`Y_PuVc|f7SkdxfI1<_Fqa)wd>Jfwv9gQ#T0 z8H3Bvc#90wgsUqxJGAoVt1IoW7ux~I#g5Q)#-)nQs)KoolWcSjzuu)mz4bpWRD{15 z(r2P`{mQ7pnL?ngaw{Mu;;hE$;1d?3PM`cUD{&p437Zwt0=+dSw?uuH#a1$tZdv9# zK#N!mX{pxjx{=~6S(BFI^_nTk(~{Xrw?!$nDkfPs%-IRRK};xi z&||=^)NO>S?%E!1WEo*GPbJuv*(L!2a5Q@I1HE{L2_+GGHkzR|k#O5DZWKajN}z6i zCpp$kPM}F|F4V$rj$%_w9%MjkGR@v3i@8p^lDp-StQ-+el9zHC?yn-JD7#Z0_oTDT z7zq#}Z0RW^a~=E{b;vYUJ|p7D!CfR#Ujmzp{NSh%ceJ}rlobL@q4d;wX|)J+E5Gv` z$XxL#a^mNu(Z5ESH|(tPu^lS(A>Jxu42{N1FpR4Ley4~kNWYP_+|;wBK+f;T0)Ii0 z6?MVm!lun&{>%pe?m6k&XwCbka@|&zBzKCOg64LStCKRvA^9V=0V2( zeo*m8f#|$o0ATxl2^Q@%>errUA@rHGnajAkds<#sM5|lp?2YIX2)PgR4s9; z59lFAv14)QJIqS}!aL?@H{6Pl_%}D;O`}RuJ0@LzJ0?@+;XntUR*M^&<5W^7Sm$P6 z;fw4;vc*REa@CGgDFD3GFLJ3eiAmPNdyUF_qxBC_xA;tHhx~x_3}W!s*r%7yNgt+K z4oiU6N+D0EvjfUROvpS+fTM2%KE%Nh{5jc#0}8?{E#ESTjG$u|;2AwAf(MCVR&VK0 z&-Bz?+P_xXFJ*jPQriD*R|u&q-)*f`@|37f{6VrsD;$ww7Hd%GPm)A)X{_~^M z_muc3S*$N3+?71J&p;b2JH)r_>x-H8h|h5Iuqnsk*OS)5T3qw8R-HQ%eX{b>Zk>l) zB0c&s=7_fl&xA#|PT9qjlT~mTsD!hloIJqkXIpQzsE=MxJ$cLodv+suE;)DpK459J;A{vQC(QP5ED;@7o)=qu&_ zEd%Wz+miq3RiV70^raxmm%Kqg=_J_(y$yus91MOVg(!+jN23@8wlqqFl^kl4yl#_l z8}2ilu27=Nf4eL2L}N5-77Eo*J<03xc%R3=pHXlW&l}%Sb&&7(4Vx>p%$z|E7Qo&xfvQ%44Ju%;)!J7r zY9Kqu-Jw<{PpUog^i19;<@Fv9P-Z@ZTRib;HbRvxTUur2zkS@?rn<4UTM{)@Umd}2 zJ=Fw^%pUxrafn} z&KDu#@*({Sj4d`kg?ho)VzD)=!I@}PWoEdyinAEfd8GaT)*@~tjU`9418(vXPbjV1 zv6JyU)+r~URc`z}reJ$ssVz*67+|{rL8mFH*U>-(b(3QOJ_JCzPaI86 z4QUZxYGiIvx|H=bwRqw0K;bSm6tzHn+cI$v@?R&(17PnJ0|~u^Q~>H^yy8V(Px8ha z(E3@_Cq@x9l5a9Z0ojV4n;~GIGAy{tOjoQhZOV8dG2^yl z_W0eT(PlZ!-t!};;bhsTogBu8jve#}rcgWDj_L!tH>Rq~9}~ySwF+d(_G1U~-s$j* zrl8>pB^&V^NSkHFy*1<1sJs+W7`Ex(yk*ICXp_gsjgJUYl0vzRU`xg+GY^TB^b2}; z1Tl0)q;ZV~c*Ht>wL|CX6o<>8bmt?++&2%%IOX@z_f6-)afnq)rUs2A^>AUkfy)1o zJm|4iCixAIJ!HMGi!EEeM^>9m&+q=k1r{$M+#7@gQ;NFIsEo)*tfM_4PIX(^at?y% zyn^@%{_hRZRS@@3;}_tC`UQhh{T=Z2ulvM2f9zNIAs`@7An@HF=-nXf#2|hK4HfRI zh(WNy=T{Fkh`i?vb-BFnCKXO~xme4R5`7j|FC8LVi$TonPThA6B`pwtCwH{T5*7}q zWVI2lW^~;!WJ#dm>}{gtTBc)xv>uq{!zz({QH`{W6kWrL z)Qo%?u4p%{5Pd-`iGc$-4r^dyW@Kh$3IHO3B>`mtg-w`+Ib>q02WAQxp6LTF<@%46 z7P~E|2Jx=}RnOOeO5pFl`9B?P02YQ$hF{h;PXC!H)NH@Fs;GW;$PMFeHLQeBN^F!F zvXsRzKh-Gd;FrVz0Ldugo-NY!dZINGHx8MzaJkWW#}R@(hHF4B(!}xViTRiHgvaGk zD5{#t!kWodyZbEHtf%MY*85rhPCihEsOm5!zY0_MGozS;suV0t?fAGWm!=A0YBCP> zmJ$&ym4@04w_W8ERI5ty&5s~?6*wt|;IWYU!hQAzrzEBN%3Xxub=KkTFiP&ip=+hm z0e8=aiD@V1=4m>)$)C7@a>Z8o(ei9KTG_?8&>-CDVzUoF0HcNFBC1;Dgst`}Tsk|; zuos;sd(MR!(KFr7{?8fqy6a*(tIh$bTG&bQvZ~F7P_}JHfJeXQAZreInCQF7H`&p0 z@+&tMjoPRz#@t`tqVoxRGs7!bAQfJbM&3-u8T)RHYKUri7?n-P<4e(99W!)*nT=>* z^NsIwzvV{wLeA4p5K|1lk7cuSX?ye>V>NV`i!Z#Rsi_$k)8fV-V~PEF@^|@!%dB>T z-d#Bm0Z#q$&9S{>F5!BMv7Gq<*C^vQSlqY?N^1OlLGS0m`z`U|lJ+)MiWVf_e(1aK z%-(P=+P1?+C80dg?^D?-N;~X^X=4gk2QBU;#;{J9pKM=D(!nYZ*}<}>7{jq5DQvwF z8tgA)yRf?mtBiipuoFOn#g8KFSlQK=5WINNc9e^A8ZFx4uW^;GIV>9U(luF+(sgr~ zeIFGpJUD8Fx;RVEJZmKxmKb!(=5DA3YmvyGWrF1!zKl%CqA6dk`pn>X0isxM8Bij|mYLn#x#SYTx zM7rn^%X@w|k#t5g-0at^HiY8BAe(QvDunBNW>!zadexCUI;XHi##kSd#4heh-!f|{sBXNA#c;r}sFy+u^mM@g$08X>^yo zR|Ed@Smtj29QzydBdC|PEm(2NhQl3K-`XayZ<|C2g#h3aG#Dq|F%Av%UVk=yume$x z)767tNzH*-FBJCy62VyKPuy%U*0;<$$(H?#7Dd7eb%5XOc0&wf#r$3=N&zBum`zekPw^-yh^wm=`lU zc})6Hc+=^i;jJt{-iL+{4cW$iM1wD3SAdF5A_(VQuafO_f%aip?n6^K_I5;(MNf_9MKix!QvqxFiA*Guo;z-$^|O{xss_o9-a9{Dd4N=#otnXRo^A=Ux51O9&1hMw5xIz4`==ES zm%Npw$j0+a_to>D*f*`{_PTc460(?2|Gkf`#~5)!xVdle(2$tie#fgodBz*lqw^4; zxIA$4=E5;uyZ@1j(#w`%^uM&!jFEwW=>M)=`j=nszi_h}b!}(uFZNlS3w;tTPcse| zWeW;Vv1nS&1XG2S$x0mFrpi(rz$cJ2jcO40`t`_-nJ7*eM1W4Ri4bxK7c z$oLo%BD(dw8|XQV>FgCJnQbHA+fku=RKHVLtM;?J4v8X}+&<$Rg_+hyRW}QAwJ^-G zEmTyA%IWb-oggT8!zdj@j~@cR$%%w)Sji2fQ@1zdHm6-AO`FL6a(ZsiY{@hP7e58j zVqBp;9iy#H2XhaVvNX<;ByWkB6QNA9$|Th%(r*am!CtRw)j(rS!Dua`874NI<{<+J z&}Pk4zROy>g|8g;m^zF0KYxBxzjrByUTKdTYEVVp&2N}nt3OH??RGX*$9bL%7GmvVoJi`yZzIYqDfiU@8 zVKm=GS1ho4`}*BkpPJ90bWyFs#mU4(M9Ah!BtA0edJ}u?#zD#>4dVh{@ahAbqQGm0h5V{AW?&`1Iz5x^gj z>>=F$^c(U=N>#H3MLJ9Cf|`&E%3epG{a)U%gH(>knjljI@~SPdH($l>kFBQqMUK0| z-Fv?jN!K!#=bYU+`svJH_hHT4bfU}q6riCzD@Oi1&CPG%zuI(20GCqFcQo^9GZ=QW zb-KjFVMw-rj44vB$VA|--PeicsCbW&8}>S~dvAC-2R>C0zqqR97t!o14Cawn z3OLEGnB~f(3cM2;?Q92a-Y_EF+I50SqJU^MDEx!t%14N`!2WuEVK-DW=_4CmoCx_T%bd4@GttwC11b#HpKFzSAy)*b0MrfcRqHF@VZDu~!v*m-yl zWGeuycF14C0jCy9u+~Yc;;mU;S8>!LXWhTWwq?uuaA;@s>uLSRo4SOA-X~%|7#nFs zsH=_WzcGmygTkvhuAGKglNCRks4{%pOQx<~+;s_txZ20<(Sw)HJk%C=OjAKhoZ7UO z5CstDzyg>kh~Hg#`Dh0=<&L*QkeG#E$X^Du#xP}H26{AfcOgJOtKdFYT=&G0cAvDH z4ge50JYnxh!7qHO_mES&@tm`NaCaDX<&%=2HO()QkO|~vCb0k9?uf33m&By$WTmY# z6)`(YC)HQ#$g#Xt#lH5_J8A&A5n+dA2j6D?K(z4oDz*7xSaSkjW_N3 z{}a>stI093X*Y6u6u$i*kgC>*6tnccJ?DzwE6MMoS@aCa3_ zN8PA=lnhm-a8J)C(f**IPPj_@XmeM^haqx6W!vE6mt(Elu*TXd(FH4@P|sO*wt5Y& zT5zzlH&)aO7(lc)N=V~Hn3X3K)4f~@{c#zy5bW`&5GQk_HMfPsq!G>*3?E-P1wNbeF z=XLTx9$i-3o4!`|kj4>?O5ulkwWH{ zB7jjwA71!=808wj9$`~h(;5KUo@*a*bKb>Bx?h8yts;4$c_izX@F3?U1B!yQ-N{;> zCi7yIeJ~DmotS#5t|dcBLFz?I$k}Za=LfUaihc^O-nQ=1pYMNQ$`zVb?s6O2tS1z8 z-kxad#vQO{3?&B%m9S?FBnCBohQAYdl?*zTv8Zp#WO<()DU%MHg&BVDeuufVrZmc| zx9|u+JN4nYUyLfxXIm}})*ME+6- zu!c+Smbuc{nubQ6ji?9?#{l0zLED={eDqkxpwYfJyC0Zm3P-=C`Jw7ednw88HuEe= zG2WR(Hgo1`xTx+@D4ie|?|`s4Z53o>ju$Rark*%2pQS2b33&tmP6%8iT zNh(|8lI=wg0s>itSAiZ}5=Y3$P{|6lK{toQznLq&gZnolzS}{$a}(d)BK-{fle(n% zH)@e%AyV!w1eA1z{YK@&gsQ0@Ipl|T9`t)V@F4bH-UaRfC@!8rNFRUuH&a+Y&MhGAZI7DfZrM$FET=&Cgp zbwA!Rp5_Niu{6VmrL0>`i1Q(4QhYK^0j%E`^#o4XJ%K7SDB#=9$!q8*2%HZj=1a`m zaGoInVdVBd)7@X(M7qHK=j<9u%oUr2d1`Xek%p4UC5(iX`oPXVTDlhk3jjxfBl$-AO6oQ)f$^b^7tZGU z{!Amz84kC?4PAIqZRD_R_+@M%XNp$};gh=ZO34vEsP*pRi zrQqJ3)kbft;C|TD&LHYLXayP8o4F1-)h{DnV%x8pU{!L-+O4!(OY*Ufytn*9dT}#Y zt9gdpM5D2jZi9O~pC(vB^A3+d;rSBJs=b%(m_6mzB4p$l^=xrrGJ*C?Jpu5l7{iB)RJHCNd>2HxyxggT@tI`D z=(zjUb1);CEs{E5T_v~6K8z>bQWMT0ilq`BR~#p)vto&3U!IZnwbh@UVLB!<{`~+| z472pZ+!#~oHQN-Ezg*kv*k$d88-7XMUx?e9Bw%m_1lHA5o;8j^|jtIL6)-xdWNjQskMW;)K>f zXHI!0h6L5nTRe#9lB0?x7mZUm-H`~2*f*YXaBgqRRledK69#>$Q;b2v#-UUPjq_c@ z*n6PfsEeYt_<3Kr^v)-mF_&l698!J}r63sm!Xt4qUbgG6LI4W(HK>4s0{ScDS&f}# zX}&7_{#VHVt-0jCh5Y{$>Zu!l;d&#zC!w}0Xq0K$`*_VQf~rHXl+=_~N{JfEMfQts zA)yy7Yg=C4OXj|iMe|R)(c~GFn6f_i{k`LuvvATv(kSWa`n6`Kg@vPl}aD)%zt$l;DzF;lt^kl;iegx%y%IYSq@!|Hq7T9l3Mwc;`RQ!}C&StrPpiciw&0rg;^780@ktr&LVwQLL85 z6RvYcIP)QiMrxr@P0`f+y%d-xGA@m61j9?DWM5>)l`V|M{ZFL^i%FMnb&fF03+N{> z7z8DpI%+6o&1HN!?0L&XP^YRli{uedBraL*azJdK2^<@OVj7DCdcT;1HII?Rwt!8A z`-CaFQsFI|qNja-kqevB3kIhL-eV)%NeqJAFf?{W6PFKNzS)$PjtUlGNm#DnCkeK* ze4>w)z_1pltYM!Pe8U?eYAL*c;-o=bO31-x`M$e^bTh~7YwPh`AD+5qT;cnpT)A%7 z0V^Xk=Uw;kk_s@UNyK1w=mxXBLW08HBp4% zXO}xsR6mf%--H_uEPMo_x@VGw4T7l~X0q5rj2CYUQ z2GQXUb;l9kKc>2A1KgA^vz-ohkZsovEZok;UR%fsLhT1z?br*H{t;^kWYYK+aBTC(K zbxM4}WmZJtVL;$pPgU#rI%<4#NAtr}?H;ld^GccPs1!ZDPHFk={UV!y*(t`p|PCX)Hcju!Un!dN#3 z7lZliO^N$M?LKacVFE87qv7*CMDLz2GUl{1cv7&iSD>R~xAu1PUM-67Jz?#Lov>vI zo#rz{pl$+r;|7ATT$YfGl4bKcFE6yXG9%2kuV~+RpN*7F$v3LatE)GvOJ{zWt3wu@ zX;H)*_eJEI!#j{lTs7t~F)j|bGJCTgN>w z1P}LsZYaz}x@!fam!DA~KQ7x!Ju%@0)6DB5)WW@r>ofmPV}6tV@d_f6d{X+U<#4Daj7 zG0X|%%x58c4QY_Qw;d@chK6VD!N9mNu4bBa%PiP%#E_&jCYa5uk!iG$a&+-fl-KNOevTu(Nx@31XbIUf-p0$A+%f#;B$Blu;Z>?POZu+(d%Li?jgSSBRg~;ff`5@|fr7qj+{XwWX3USd91Hv9 z<|YMW$PwRouaK15K5xBGUQw>GNAczU5P6}d;t}<2pAEYaTk098gdwzdNJEqfCr-pJ zk@#&GJ=Hea?K~D&E(;v`xvRm-6{EKy;%mU9PqLGNv(C0eCkP;X`GaGnu>jKwOu- zII#glrmM0aq2nxHyIAj=Wx+J+V9l8^;LVg=%0p|)8LIu>6O58!2Q4S_8CVRn&W|%m zTrI&6W;-1=MWkbXA?u7OLAV~FCMpqdnCxOCA2ZAq5@0}Hzx#lWt}lX8RViK6ksnN$ zS(v4QOq`{VVOW(SDRRg-!pe^H3TN2pjZ7N3+^9ad$J|7*Zlxfn&YnO`B1q-ZTN7{6 z^K~_sxLccC62l;9I9azewFafm_qurj)z>!RiEMFr=I}G%{qWU&gpfm`Lq{5*cq`O{d0X}sknDPDn( zJ!gXTMVPO(s-$ujTg~?xu*(PYtMnzV2vnf9PGS=Rnq z&Wy4VPI`0B-Zgi^DYXpdvS@eNgd`1{xN!5my7p++7$PKPYRIJ^2zS40oI~6d$snm} zaNYCg#8L@?sBu7GH)D~Axpd-rkl~+vJ?50n*$a~M#}cjM%*73ZYTkevqdEGwxf)DN zPAR@(+)x7h#3avI7@I9rtx~qitU*?xjZKS<6KuiYb6B;d-Q(^OL>k5O4!pNj!G`uj z9T(a>Gv~{bhU9EG?Npxq3uBr%SBI%SB9by*W}%ked#luVfEx?C^nqrn2;rj6Tul+H zpth{kdFK4##yTyYRt;}Ec}YMBdClqzNNkwM5}ZwqGMT0n3bgB^=wotwy=;af?Hlf; zOZOLBC#u5BulkOujPqDfU%tFXshz@)$niomZh(Wn4{Nt8#&$;Ha<4iDLs=C{ktkK2 zQc3ZVe>STt#ZS1$tjj^*qQWvZmWXkz_zg#HZMa&P{Vg}d=qsZ_(G6TIHvVPji!#Vi z0-7=FS7#t$PFeUB8&W|wSk;lzqfRCpuKL^Vu`3`$ZGjV7Z4*uhimYGAv0YIo%5f*) zGNxw&WoyBd3Sn$T56h{s8diDLL3XjDyn{P=#~d51N2grU%Q+qnmIZQ|C10f>QcX^hC%_t3 zvBh2r#)yt=!%rbVjPz-3mXYn*xS!4k=RK2@Tsqy+S^oK>44XmB?ou2;+|g8WsfWb= zB36O!{NS!#1UX@;I(>3(0X;D8wFzm_d&^B)~#9YzR_!`OnxzwfNb?ZbVWl4Er5l zVYz#&8Lhoz-j|jyII(4%IuK+E)LVJJp&X%$)(o@rMuvKJJ$|0g^psRb(}w%33#kw%!5R><4mSuBDUFLbYJgIZoB?50NRav!p|U7DEF1#4u5UmIF|QbR3yj;w|&c3w2^)*=9B?rzWF%1?tQUn%d!byJ%FF zN!(_zTwVCXN%ho~lS!Uqc8WJ{LR$kkN(dH_$^J(^Z>lYxGr+mv^~B`HY^d!%+{u1A z;II6g)HFGuKBY`G%6sntXyS%S1q{?m_U-0cdz3Ke=Iqiczc_Prld#_6^tw-WtT zvCq-iwk&LiI5raN^Q?!!p0~LyI!fOL5dMKiP( zc0c(s6Gi``2Q0=}Pu9?ilwn1YJcEouR_d_7*(R#fig*{g{@IrS(&wUd+BS=$-3|er zm;28ZU<_U!726BgkVIRj**CbLYvh7l!5QuKpG~IwCDU5LY-dnHDB6}S+amyu3RQbP zKp~mBgF6;$6dYw$3<@{DNSG-YJOCauqZ(bS@l{}(Vv;Ur7!|MH9hID3PLzF6pS>`f zxRf3!@WgO5oPy7B&7#TvRu+1L!Unf{QyF@bVDt$c%3F) z0%!XY=ZO%6P0DGPc-DPYpW*`Ijj7z3v2a83SS=gzI#I#O3Aw|Yz!^`+dY?x?@+UhNpVRf|j8qHU$H zAAU|!Tv}6>t0l8k@Bs;B(;$}IQz-0=C1F)VE z4>tHdd3wyN{GQ4z777?3e@~fjQ%#+ z9dPR%&CjPf17PPt<$#Zpmw>NdJt*}rIXkb1B!Q%VUGM{&^Xlapb5I%a7 zz6kQsUMf5E&@j?AWI8bh$88e`CK5JuoK$4wTsn8~1WL@p!G|0p^i#L1tfZ{shipz& zNx*2<+3yOsYoX8Nn6}Z;$cu@KEo1|Qgvy>tQH+k;H7K`q(|3K%X0*BChFa{w=nIuu z{YmYhM0>jnF)Kn9wFJ3#X&WiQZ}p+00G=Ogx$wsS!L;DEEOWJbm*xW2-K*dl{O9Vk zkniC^0nTsF0S8)t8x-jKC+hFje{{xubjkUn9a80%%_e0~zFEc)n@m~QRNIYQHx0}U zRDB2|KrM894qgh4<9>3;+-x?H+utAtao&oE=eGNf2H6c^8T5hl^rdj3OxIyY^Y+Hw z*Or*$B|M&1H?Ru-KoUj`mP~EcUN~fVm2n&SUJLNULiD$%3<2Grx4hD==ePNmEqfhM5- zoIPv&4UTja>Fa~>Wzi7kkN=ht%WMiesr6~C zay?|}oqRy<`8kQhLa={H+%i3BI0Z%s@;NNSVIqeJl}C!C1}FSQBL{+1N><{b^-G+} z?c9f(X$>pNP)Ts1<+POWF`M`+gYR~Tp{k?7j1(4Aj$LC0iuXFduRheNg8L@G6Pa^%DV3r85j@BfpOyh3$>NI2{y7h%2*7LYM7E&Xb-iH_L z>Fwl#F$$WUNUBVzdhuWA4H&ahW|>3@)f_;akjyYzfqu5IWbxIvm;eid2e^CxQwyX2 z-H|C(PSXr>V{qAiFd@6Vsb{~Gs(c{X%bGG>v!iL55# zTTIr9xRzVtitksFui0HqozSR0Gt@&1O;_tF3{G3y<>kvjoE^=uaw`42okiZo7%wXg zSCYK3U<-}PwgW~n;-}OFJo-uzufUaF#g?%Y9L6@mx=bF!1YF1O2T#Y?NcU+jVae)e zZqB=X+MEdc22k~2w`|j9#-VnKcupEUf67UaOoR*SLocmX$5RJxxg+5+Md#VO+0q%f z0NwRfMzokhf8}OLof?Ed+*9UtGE+baR*kbUN7lnykj{0v5tXK!sz%)xQ!ZN0Oyy7iw$8izLWL-+U=KRJ zf6r7V!MIe8#D70=o;gnRljK6E`O@7J`KvB7PIM4}$?g3=CN+jXOzwBdG_0n&^+pS0 zF|u4Yh)*vI!1=ogAi?Ac$cc01im)SD%~OaS_hvrN6)JeZu~2`oCX<5?!b0MKrehW+ zm-91Lo=ZJ-`^e(a#N(0X0d@j!Xvo38w4Bxd-)O)RkKZO&u_)QU7UD+qM1R=_ZP3_6pL^ z{Dw0G)F7=c#abW!;|$K#0sI|T0t7XlEeBFI5y4?uWE48M>-R~`)FD8X#`Ju~M(AOa zu5)14IfnhHi+^g+3InA#4z|0{IpBlTP^vF8&kzZ98kox@7W6AA*&!*``0%%fzfEdb zkCPhtZ_U{Y%V!>OlQXx9wLCEGxQZs@9TCU|Ba`@$66__Ixfj@jH{+BOO9=a~9P zC&-$?dpfbKl7wW~xQAZtx7N5FJpwNIn9;doQ#xMY_{Vgg7MJS)Kd(_H z%U%WFs)LmaQ0i;&~<&9H19O=|bcRItmgb3O3lU7HVf4bq6N9I*c8;GE%L2Do(##v8DAU07EsS9drG zuDE!%uh6nV2vW-;EAjlx8$$glANa_urZ5ce8-|gmk?->ZVJUjI6&)5N{YsP_F&L*~ zU~_-7t&YWJ=H*cmY8(icSuAK4F3gpm%(*fCiDsq zfCY0(3=+#}Hx*MxJlmoJ7_eZv@0fHIO-=p2V9I1nWO* z#hU_bOVU)N57o-ktI*T0Oj3>=3}9OyNvbq~Jz{*QA1sG>ov+yI%<^ z4iqrc7rE7bfty3T=;tvUHmblJFDSB8At=tr9GcY14fPgJoUanaP=kX}j-^t2x>hRo z<>mi>CoZNxjO)j4EZ)N5aW`hBq>4qihs~{!Ge-uihRS|Ji||46ILY3G-g2V-&dlvR zm!?JHgwGB6F1st{g$_SrJ`4@^1AHfQVBy^H4~zNYyaV5 z@|d%LBn^+@g=ECw;<`YH3WpAglEHmW2AvjlCHSY5Jtn!wf?XNJqFe z*E-xb*NkKPOEL{&0lJP^mG<4@Jh#)WTa5|KkuPcZS%P%sil~ri_SDC0COgSa2>0!rM`o_7mrje*Z8>HVT2NRn>b&@yc`g&?U%XrgbipiA~0Xb zcPb*#gtou|HwHSxpOYC}4xSz^W1I{qa|CbZJ7arBsFI+pYJ2F6UV3!)Z)Kw>{nTp#oA z0~Y|E_l^ILMUnXr+jNCiW<`*~@2H%Vj>QX4PCa~A@YJtS!7(_~x&Z$oENX=96Uf>`6too5`f-!ptcw&J#53TEM#RI$$3ybpZ&oV;Nnga&KIwalIgIc27~R&hDjtMrrR$x+Qg~za~V4MXW(k zLiKjK2b$dPHos`GO|fHyj2}*e=z#iWCdREJH4oSK=0OC(GR?2WAsM0yviaiW+muR4C)Hb9W~qZb2yIE&o*7wv24>LtG-c`+x8@hFkKd{at>y@ zBsg1DF8K^1?N&GH&q{u-cIUd>#Jj=AGrc(J0JIAuwZ<71;%Yv2oJ%Xmh%?b-$YWTrIaOt zM$!QeCx4+=kj5y{nW}62PQU&ubp(3D2aGp17M%+chFNB?nX$FhFZQYf$l_mjr&K6A zm+_|MmE@jxVAjK3A8`m+E?K|$q>wgW?8>n*PM=41py16Bo)L3eVu`w*9FR=2xpwR3 zJ3sH-(!Cx|dIZhULSo)qF|@tl=(lJWpKHX~FJs2~ZsGH}uDfGIX7fj_;Ppm|1N{sC zl6E58CTQeS(94g*V`_9A=zuhPzH8j&JPIP&R&B_ zA&M`C3|<}zwX72>pUAYc#%WOZ+ggh6lmRYYcazUHCbE1~=SXmr0Uz7UlWf*zv)_K# zF|59ixp$({3Cd1dAMlcdiL*U6AU~0W9F8IJb7V(~52L^uw1u&;086k6pT4twYT5B? zyNuLbuxnHSrz6=Bh-Fx{#v%}^f?Mc>rBVwSaws9Y9g^f*@o$a_x0#)f zBJ*+E(+iZXmD`)uc@T^fqq2{$BJpLsz9gwELv@H0aNPw$GI2X0aN!oAUo~^*G*D^L z@Kptlapuc`a!r!s_BZq0KM72D?qSax2>1vL3G)jg&VPN-@_igBiObI`p?sr`r^LB|FVfRvtn3@LK%*leY$X0o&5vx=2ey{jDyUEFMZ)-EG>ec5 z5)!?O`dNIC1r##9RQ<+BNOgX>9$xV!#7c^+K76VTNtW9a@9qqJ>|R@RXu}WYaTpzi zL%Jk`)?$NkA;A{&gUZZE%kS0mnvz+Zh6HEH0V}ZXqV1q#zbeCG)#meWqs*NM;}f&y zH)sN+wXYeYi1jSUnmh1IOzIufB+Ct7bcN>SqHi-L!Ih1g)lb&gU0cdTxEf}52&9LH zfo>w8y-rqmx1MyULJ_wXuxU6P23#5>dG?tqKtf`k?rKP|-M$XFaeHp$%aACqQ<2iZ zdw++?+7IZJ?~a?d0&G)iapsftcDM;chWgl5U7eFn$I9mC!*>-mbfLSy22?59 zelTO$R;BiJjMVnzvL^AFHqVlwmR`^lkz=smNqax9$&AOyfVxVX6F#u6sVh2ivN6|^ zx*`zmZSYk;TIX(2WruQT3);gWA{Rz!-1g&C|64cwt{Qo=5%8k%g`wnO@-)pA)QX|C zm1kGgB2%{EYjKxy-NULZ7E6qK1m)`s!tG2$WQiLIBSK)roCv3Io!vm~6abCou`ow5 zJ`CJN=x3tfG0VfpsOT){_R8r4&D7~263ZzL`SyLxai zFJVwUnFV*E8^x6?GKvGXvc6PgkCKaP)K}-l#3k<12+(R`1iBmc72WE(UxZlrxRwXW zE*OE2qeo8AA-x!g-yMm4<_AqKjTSuY|94M7vMrG5-7~f_LdUhqW*+fx+(}#l$i!Q zZBrCb2HpsF*({24JUuqaTb}8GKQ*o_;0clscNwbCJBvBOM5|qZCoE=F5s+E%6{179 z;I*{4K*5@yrC;&RM3^WlS0jPacsZ6F>b5=6YjFV=I1A}3ECa7Ku-Z2eo3rBGm;q8@ zw(0aUx#pY;+0cG>o~H~8rdi>L9qKDIS#R*;ql5e(J|i`A)m2RQTH-0oa?17WL)NS34hlB6sM;C6EDfn6mi4aMSsx+3oj94d9;ThVmKXp>^2Ou=>3pLNu>e zn=Oex$SM+;?n^(Q!eqZBAn+2$XxRQXLzcxwd>I!}i+%69+EP?g^-PGlDKr^mI>i#T z(m8SUh@#TEv|3Z?T1C41*7yBKB&xR8`|xK=L&?YP%MTpOS6?!(jvHXwVYF*r4opgux*lO2bpi#y>S=oLogT(pr15e2cI_}$3akjhH&s*b{ zJ%|EDUfyRzd+hUNf~Ev7=dROnmaRas@f5CH*?PQgpTy;VD=c@%_uMl!B|T1hw0~9F z_G>kEn(~Pcgprt`(W(&J$CqMnqvzI3 z<%i~06P<8s@?I3P-(;%MW^(-Dt}SVxeLX)fpjt2#sP&IQvh1z~AwpYbU_b_<(fQz{ z%J#b;pr}c~?;N_&zOHjtkJ%%Nl*Rj;X={!`JocqyF!yvbtX!9{8?Z0~z|X1~jGV-!j9 zI+qJV(~E+sETP&41Zfdqkq9z9hkQii%=@I04+X|uQ?KEY$YHTSL6|gY)jo}6w7lbs zNoFKbQBZlQGTir;^#CM_);Md}B4r+KkI=}XDFyv`uQ6?pLUuRwA|*`j`(zIyq|N$| z--5g5v|mjgJgYJA)zpvzTSn~*<|tExrmw@GN3nxsR3%~ZXZNL2dt2Xzku5ql>z@0L zUYZ_!I8qdag?nbUEHG@VtCo{$Y&?(ndL@XK>Kvk-VSV^w9;Qa^9iMT{Tth~g|D`CS z7U%rCx^SqQz7D4qYSl4`O0r=KdV~!a9V#p=aIj;thH%9Bg*=vH6)fmmhf@DWtMN{P ze&$?Jw53?Dx;|`l7>R@I64T?Lqa&jpFJT^*Kp(`UhWKCv7Iq3T4NIy)t&2NI z&Xc8!Qe%E(t&tH|o9%<7o8<%UUfmuKWS+jVoluR<+b_@ zjJi5C;xUCxS`ZJB!=h`t$was`7v|B*g7RgLp893eFuBVvnS|&Xzar$Sj8KSmRb)hs z1HSyKoDJ@t;tTCmD%=lx3ZN%Ys012WghPBeYr5XVdM731C>oj2_1F`vD+tevJBTJ! ziA6f3Of!obpcBXl1yJAXrjS>?tUe_)VvW1Ofr*wa!#>-fl|_wtncxPs3u$>!-DJ`l zVy!YywOOS`)I^ojx4J5%8?tcur}P7#_gFl*h^Ncol%r9noyFOc{@ zB6UaOgNvdPAB>n3U)!o=gveFOWE}X$vh*8Ag(%fro+m15fEtEnG{U0e-cR~M2pT@% zdOMJ`$Vj@^7MQD|5Xl)}ga!_xrIkG6n!&VScr#m;KTs?R#=`NgXj^fhP6@_-&tV>v z1XVHZh_#Pmj=jMrNf}%XKY)@^xZSw&h_(E%mSQqWXiJ-5DOiECwQyw~Sz z86~D|A(x&0@(%u}dZwiln(bCVYgU5BP8HBt*q2a+1WEsr3DLJKP8BT}tGR-)1@ zAtFAHl)N}<6EEniMs`fWyE^DA?(cI)}Lgbm4zH(1e4u&wZK z1zrSp_Vqf^f-L*PFL%<97&IX6+aT9P79}cFi&mndTeGaL5H%psrc-x_KskbkWMl@D zGuk=Or!?#D$+Q`2KukyxNVYSdJ|~Ha&rd8}vK@IoLS2+#^Qp$mFMhxvV-O|P2(b&a z(cIheOQ^f~6jE%?zyY5jk!sla?ak?V;+x~#jw|Amp)N;TLe{edzN2U(phJPvAGy;3rZo50)v{BnDyZg5u<_M!FW1Q6xXKtxY%R9Xc^j`S_Uslkh>C%g- zJr<=sRKKk!%5=8Q>Gr5f=?&OyOtG*>5S6!#J76R4H_@4Zy|Ft_)$HT(5?Wwr$(u2l z+2YRs`6SlR+J39l_~6=NxaLv1levzW~AFc3n3seFzBTF?2bQYJ;pGNrkxyf9hgD;%N&UvgDCef zlMbeTyF&MHLhiVW7>_|iaAr~j z9~Pe7;O)BCK(q*_AA`>5EeBt}s%Z0WlAR0lm$S$({K818aBD7swwXw#q|;Ks>#q_9 zmxXkxtI3aBGjBTF^1wuot6}gewW_4Yb!ZFv7!pR5!g&vNC((PJG#pq#7@=DUY z{hDXjl`}L<=a;!%*yncCs2aLL_Y>I@r8ec8{rITKt0>!gjmBNjm0;UJFi6_vl{(VB z*c#y!=8={`SJvS^6k^D@#WW*dTfY(tzOf%e*SR6&e zRJ9X)v_OfiA|Yc2r@q_T;f;*atX2r4ah<{4ipgtxIdr8&DG4dwK-`1o2)NFHhK|`P z>tJ;iN=t#v9o?uMDVZre3Lvu+FiZ|U)p{SAsI8yFG4}hPlb?28TwB+ zc{$;AL*7E>uC0P{itD|79lbXD$}_X#^y3hY02MN@Z* zl+SqjHVys!+iiu>=y$Bx*S=x)uY|xtg3gl>%iOO9965 zmBhT&S^pm7B!N_a$qdD)MBp7%e}FRskC>;Wm|y=#;;K7eB;~ZrSiYEB3BPxeer7H* zpLeRU8^74AR+M4wLlmBpe0~ely=GB#LXAnriL0otYx=2*X(?63CIp}`-MNS0Y5?OB zXtBy!U16V@G!`)>s$pI?%4L#g!>;Pyhn7xOh@)Xs&}XgRRg%E>Y}xSYkXGkHNC4OM zq{UcU;6QmM;W&l|Y;GdkQIn=7SDGitM9$F%$6~*NK!arrI$TWDX@jVj4r3Bqo_3m! zs~y^(4#6J^Uk-oEP_e?bwO_bmER;2iBJb@(+m~kA%*5O|Sos69k*iY>yKe-{yh~_u zGOuzCK12ynxW5fk*Y6}E$;tb(n5Mf0j}+MK^<_BVAXW@;gaiN{pZ|ycx zil+HJS%Bf;dSBp7Tf&E zyz7uIt|5uAvDnkekr5FdUfNCJ1U>?b+0)7ndhlXA6a4EALf-V-Q+P}4Hr|I)0uix} zDJGm{=K5|m4mq&3$8OWt464QM%dEC2E%bSn`gPwTaGEv3mu`dPXpnY*dZ&xE#50*R zA=F(pUz|0j$?naL@LmwCt)}j->;y&~dnSL?z2N6n9J)-Rcvj^jhYD{?Vrbn-5o(2` zBHm1@gjpeQs$rFp2r|lIO>?dayk=A=sK}R@s1g4jB{9Z1snn3Z)t78!6RgEN_!x`N z;hErD|L82jid>mpU;*y9_n(sehI2=t?6gQ%WNdQ{8V4GDY;y;)kVJU|W;C|!{3&(G zY`OT9hP>al0TqFb(r4+q`R}3b`qq%Lyk4SWqzo}9p=CoY2$g2A$>f(e>Di?B#&~na zK_`V8l=Y%k^HaME0jZE1Hcw%^kQDO-;WTt7s3!S6ePeu_s27FmIR93W3Q6cxFmgAf zkKKocjIpBCVWA5DHAP}AARUso0V;3P?uM^P4)A2ep8=zQ{C-o?rtD`0H7J15{+>E7nD6P4*b(r(o|VNBk6k%BNKaL2i^ag5$%tB zK#x@2KWB8&G1Rd&GuAQH`3d8(!jIYhC@#)V7`Ois!_L6M(ZKep$6`i;xFEng`%NzGeC&<#^KpURM5Mp?|}FBAxMPqDOHKHj^RM=Kvxs01?X{EP!W@ zH!VP-?-z-l2Go5@64&2>(F-W|C}5ucxwT>dZ_)l2lD}>(zrro74gh{SV4w;8REZ+M zZ+;Q~hv>*})%h>&_S8TL|3&#|Ril90nE#d1;H~w)Tj_Bnh&mUb3aNks^ZyI)u^$lO ze+5qfV5(MjCiVtG0CWSp-vU928kk%Eal!h}UGiA|BK@5hU;tklK$PWY11m%NhkSqC zHw{`|aZvyR!v&C0{Zuh1z~u1v4JBmbpkw~;(2r4vt_K2Z_5hHU0QjHHY7_mJp#RlW z|BnCIMv7p_Dtdr%(F~X{AC(;bNIBkkfQk4QivBPBpWUOM_Jyt){s9{zAd)qpeOUh> z0X%cO=Kz!b|IYK*wb{Q%PGtZLKpucS@&3eO0^t2Mmfu5YKbqKo8}g5BSA73!CJxXq zFo3rE*}iTV{~_C7R|`#OnK=qTq6Qc^kDBU#q#W-Z=KqQ4ui=eQg>wb~_3#3iFU=p= zfMwa(wX#a1V|K4JM72)RxzN^vS;QvLupFfxWad1BkDDeZ`)Z%Z@e;XJ7 zWs~z*_@`?8Kj1^He+B+OOnXnI?tj1r*!&Ibk4@Tt62AX)6FqKlAHe}@_-~2u`xEH5 zPb1`xe?#`0Z0u9KrwZ18K<0Rx{}SHMde%?Tp9%v1KzDWimC}Ak|2KKyr#w&PbARyE zy8JrNznlDD>HYn{*7o@o>>qvn*XngHI#iZ}`5ycmLzQ)>GuCQeHoh zr2~Hv`7edNp7K1^Px`^bAM(HO{HJ}!Q<0b-_|0LzhX3z9{n+wPZwmgvMM(KI-2c8Y zetH$}2R?l2|AhbaV&2mZczPr22a!$sKO_2nKkF&c(|b5Sh&D3+8PWG!IZuh6Uds4E z#GCWah`wLZcuMrtLH`F)YTiF1`tGj(l<29q_79@#f`3Nz-FN#b(NhoKA4Jr}|BUFn zzwc9`rw))mh~Ad{Bci_^rB6MPe$XfZLhbz5UG87_CH=V)e{~H11HHcOUx)HC;$VP- To<}!NHXsO8ARyDu$DjTWKSG18 literal 0 HcmV?d00001 diff --git a/lib/java-semver-0.9.0.jar b/lib/java-semver-0.9.0.jar deleted file mode 100644 index 842d290ca4924206c8619bea448d73247518610e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46843 zcmbrl1#lh9vMnfEENw9}GlMO#n3?_%g290N*MV2+DDsb+e_fzIf2D<$`02!DL>T1$)eH&*_p@1! z`Y5&i=iecpC+h#bnKZwQxQMW#61}v@z4XMmlq4PfESw}A_0+_4y#nI`%g&(#t;Ey_ ztt6cQ6y!mnN+LQ<52;&grUZ+lgi{uE6>2&1JaWWO7UX(l_twk^1r$jI#h$%r@UT&= zGMKI~<1%-cArBD`Afh%^n-0|~VFc|1U=L2pz16K1ie5?O;fPLN>+FJjw zkNAJKfc;ksQ*$RXXM_JkL-fBk^w2lacd#_mx6uDT^uhbz_Hi_}b}@GNKXfJjpSn6b znOpt;>2K_2_utR|C%7j^G%6!sK|m(KK|mP)*7Fse9E|m?Ntx&kt@Irolaw@NQTS2c zfi^X?a#wDm{HNe60j@-50pH9OcJjo&rk^z>8X^_me1hy&aD!_9*- zZH1w6At_#;mF76*+I5}D((WtcO8}}ipn!=)N_-;B9Dr$ZXfJbh6gWc+MTjLt9T2O9 z5ugUx;|bhmgw5~mVFr9DFn4z60nE2uog z)w~%)&P#@yw^PA9GT7|j(*%r_D5tqaJ1N zJBl`DKyeE0iOW=OcD@~p-RR7g!IIgO&hS_*$1<^(W+$sa8~{Z_xD^`&$)|>3D%xYp zE(+Ew=J7g=~QVnk-*?6Q$>7TBSzVr z4k3E+opr+CtS||6&PXIO$}AX~Dz+!eup(G?mM_T2k~vfB^!M|2~% z8)_f5paI7+z$^=7BTH(^F8DWfmGri<23GZMo9ORkx#}3oMDnPQC)j{7Rmv{g>hI#{ zvHTO)$c^#h`BM*UC$|NrPvG93b|}rE{LJ4*DEs3trE+FHgL-}w1yE#D)k$CB9da+W zJ^jh-&IyM&?*};_W{+q(6>~WeYdXF0k5WA6$F@nhhcE7E)Aeu;iAE%TxfylW%_x#- zkPqUd6u=MOJIo%^cI^zoTE-T{-M@-F!ET-J;r%zC{L?Cikltt+AwfX?Ac26;|9`NG zf7(QqingPsDw?)x8$mqnkH(Di+!dLNSP1nd>fu5OnsyhSv*LUg{o$8O}HctJ4n-A<)8L%J}Bu+mXaBG*%rWp?~^dl(yTX0W#0K#EB#9i5!%)YHo> zS@3fluUb8?>zCKgtu{kqe43&4P>TpT?bHFP0xKaEL|%~F-}Hbj_nqIJ_R#9uOnP95 zLWM!o5Z7u^1EP#Um*FZgN3dJ+a;>RNYu29cHnIY$2s5XSFZWh6m8n(VcsSdHYqr&QX#E_ANn|A$s(-d}7vOho z2>#gl+BwB3>9oa`HMxFFQxV}}Kcz8YUt+m7s@4i#k%~5bRji>i%AB_1G^8%AHJz+V z9TB!%Xu06FhvA%V{s?|)hLaMZ#3DLf-7x_mtvy2f6z*q=eB(5pW z{;p_@y5J%PzR952yUEJfW=akGk&%v*^3**|=;C3ez_}62(mh-w*;w+5zL4_f@+--z zB#g`zGebDxF*{oo+PVg^vSr-iN;UDaSV{E}`|~qp(GRI#)M7EyMGBswKakM$E51Ra zQWqt$&|=7jg`cI*I!U&Hf|n%HnPzdp)k`*)*dM}|>KS;N~qMFH$W9S&t{3wYKK97!l*Bh6q zanz;eHZo>*DRXi%G7{qVIu?ovgWYZC{)x8R63X~&Ox!SW@$jTn?(UoKUST7;XR2Gh zi!jNVWH98zM5E!X`KzTQ*d6m#A9#x<)W;s00CZ~!E9nc}UuASqgWIRfR$zP|Bs{ur zG&x^#ICB}I549l{s4p6Dp#|>u^)tyq?JL)w&1QK}yBYkTyI7s`2%S^z) zHIZad;ixxY$coFixZRiCooZOw{^!98%n`{r`N>8h6AQFUR`D-;^ zrWu(S;%TrE0RThL7G%|Ob+nw00Qn>fZok>v8F;em$dIFRc(HFav=z*I)QzBPb@F8a zA$K#xA%@}YWPb%bXd8{OFt*z*7ROwMX7SZR>b>MYzjv>?J}mOmE6nTlzLrtjl?=c!1JQVq0Az%pAw zqQXtEON3_&tl4!oL3Cz$f@EQ2&j~L>$ejjc#n_T7`zo+}Q`GL?Z7GW?ehB4x)5PR? z`|7^}3ikcVVr)I;;|@O{B}8~n@S6CcD`k)W1Xq>g$UUI{9tQI$J!gt}6Z6tTy_~-~ z=#VOAP!Thq3(ly4$tIL1#jSea)UJ zJ1mLzUFR;9bV@sKHEbmt_|j%iBWHNabep~JfO_Ey3EzX3VoLUPl81(%*hFUm&RBAI z`OkM~vOkK|zC*9Kj_!88--1+Q@wtXw-zEx`!)bK2nYo=Q)839l7f5-A9{1h0j2~G| z^=rZgmYR3H3*c*(f>a%2-0)CRo$R+ty5;!2%uL)I`*M_|8*SnK^cQoc&k?5^EiRT9 zS8po^%l$dWzq5e=Uvek&9j$nxNjAj{LTVqu>MFhg@Y?j2 zLcBkyL-sNr2*N#dsQqw%O+2LlCct@*|Lxw*-z8iNI=&p4gMVZZ6PjVjo~qhChJH8g zhD&r~eLVX{*WMDJ#Z_8ox9p6rc$XxIv;cDSq?=nom$dBoCcYwO`UH1}t4!wMS4Z$M zP|-qYQ_AAK(B`bT3FsecaaKS@VleQ6-I$-y!n^&;@vSAgOYkSRPv5Pgz&noO`;R=Y zv8!9?Z|`Y^QazWhNrodhgrUfG6x{jbamlXYl}(|@7H6)DMlHWZwO;8Iq|9>qOSt-Y z!afjhKZg51;2^xQ=IP(5n$y6y1=o$=TY{ULQ+=1TTlMCXV81t{VqIkogR?zE;{Cs7))TBxMbkg!5`AXdk* zJ~h#r-v70W?AUf+d==Mwq7GEs1JU{?>J!0VeXqEJnRhlQ2uLUt2#CPn^1aG7pTgGI z(8<_H*vi=2*v3iN&CuA+$=ufF-~L!rQBf83-NlB2Ba>PrsL3r1JtKiITc<&#r@^ld zEKn|Rf{}+kqZS%6KH)(N^HOkFch8Z)YX(bRq~zW2oqX8-G9dv(oU^~M>tcNE{I068 zt8@DKaew_0#HR-oEwClKNBoU61jpftBRT_yTvo}TQnA0eQH9+ zI?Nr+6=P{O89tlPDjE)8bnpB2p-7S@nxVOOMxi3$R%DY&yWWPW_N%q#8O#wD#GSG{ zN^<*MArWRnfHAaZ^%$NgJAe%zef(FtJkutf?dDU0t%Ij&gso#gQlqv$PPU~=RJeFh6A26SE7i_A1$=lKi?ChiPM>Zy9N4CDu@=( z_hi(Pl#Y1iP|dLDVZWppx&X1i9Wt2pxdjWch}7RpI{|!Tt!1V!CZkT>P0}_4o1A!Q zDn%?w#Y)NTkJn#7jcXw07wogT>d|~B9ZKf%Mc#2JXeZG%(>lk{3V8Pk?ENVw)i z2!Ub~ou8msWA$ltYUR7HKr?X_0b9Ax2FxC@HzCC7Jd%ilLbQtbD5o#^o`0M0Iid*C zprXMMhei&?s4lCh8U9$;m+|OpqD1cY5IYwGgt(NhZdg|M1T;p$^!f+)w0`If@@w}( zv2^P-lmJP;?iZi|vo9G^&|A^~;t*z4uO zbRQhyGgF*khL{KwEQPRta}U42m_4K(3AxB_g?k$LRvKcD@{Sfi8w`W^CjG*E8f?V+ zf?!~&pC)2XNBredkm`~|C-HroH}D-ktdUJ_Sl5uSOju(r&fCLVEUK`^KA-(Pe=}4v zbiPF}xRFudo)TN>ikA@@k|X`N?z{lkh8RjNTEPIKi^OYto*w@9mwT8$#z8j)F(24n zh3ZB3`ftEEwLO%-T0d{C5dQwB)f;^Q0pa{x*8i_~^k1g0XB8NqEZLKdms^4wFRVy{jlMR$i$2F`; zO2p}+%zkKgK5}=joXA@;J$`GhY6!aBX4vTd;NC}q0(}q^?865}U;p^-cf8_qZ(rLB z5&|#ykcLRY@bu-cLze-5LXhWkB(%;julaji_r z2ab)t)s6}oasV!jAQ%&e1dU3df#!1R>SDsP-u8HSnnCvq*TCjifEGPpe_I$0_=JA{ zfHKN5RwRYa&Y&!o3fnq~&j4Nyq+kgS4Fl$P7iw;ZPBeJZeuZ_|gDazr6pNfk?>pLN z!QMaksyYr+nI0D&NP&wEt!unIq%oZ+Ulv_|3xXEF(3D zGf}PVCpZ0-dvoTw%YWif?ZXvLfGA`Kk__JGy3W>Q(4?agd{6p963#{!Ku{cVo3)nU zbpQ>^h&8Ic|L$xn7^A#NX%5Na03PsCz1uT6$8AQ;gNOmDVfYWUc)qoY24L}HSg*wu zz3<5TOc8W+#w@*-54`YCWeI+T#=2fkFV8Gb$k!?eVUQX|*@~crm3AIbTS zMv{%!sq@8+Ca`0GF#sKD zXUu`Wrzill6w*e<5|Hr`Zpwcx z;;2R7?;{dk3?0GDaVJBygjMkbqe9C~@@u7{ZZw)udWmQV-uZ%9cGgKt+7dkX*qpk6 zDZDPoJ(Y1%;TF0KqmbZ5j7|vSEq8)vj5LhNB43sF`9H9`e7E9U{KPHmGs*iuDyn~A zCunPJXX|M0WGwudF*J7kFQyHr|V3MKw=7Gj7EMUE6R#}9Jb=yn+Pp%%!-4P=HE#*K#_O@D&77ox$rR>Uv!oMp7# z`$%ptH8Rs&GKm@zxZu(mrnp@E-2KUcU+1t|Th*JsiE8@ODkT^5*RCURPIy)gZ4Cyp zDOgzjA_-Kjc0jW<<8qoKKbLWh2|wdS4Qj6gYkSr8X?mHau=S)fpu+8oU-if2fF!ak z0p%SV8f{w#&DUbJbOZ6_i*QA~d*Dg3PMEm>W_e3A4%q&2A2FsywPvHX`~g~TXpCyR z=B#vFS0!PE0eA&g=c~E$o2N3vvKNI_DdI40~_FE=J8+znCELRB7?yYuV-ATehOkv_P|$jzhD~4a^4M?GymFPk7M>%_WAh4~ z6RlzYqA7W((&E)vr08HT-Dx4+bt5?xbF(jvdXc6IIU1a$XXhlvZC8Mwj3}s={}3OG zd)NzwiXKOfo>qu1#1K_2c#lXVIUJm&W3Lut?~>q9(7{#3`Sq$0-GCt)v(rMp`$Tjo z=4t=%{VawI_X}5Lv|-D*>Dcs(8>?T__FoB)R;_Bz>yz+KKMm*m{};lObr809*0=gM z?@7w`@gWX>z?xapQHNe1_hJeg&Q`=k@G}S@Aj5Ap)y@sh?KL6po8B4hk=*V;-Uwoq z$VKU({#+fMxVW%=e|7tC^9HRAK?4;`or~*h@W-04NS$Y_(f23X+@nTp443nN;0FFu zShUq}#^SVIZ`)VZ(*DuWTgAuvLqOerlc)d2|G~&@ptf~(J9!dD@NA_98h9K3FreOU z4y%0BB$;M4TI0~%mlV0jo(6-5#dz^&5~G>UIE%VhFmFovws=xIzCLc76xXMqoG}8jb`zS&EjVUk+1=x?gDEr`FYCm18?mIjP&L zuS8rVl!rtD&g^FOFGmreR_Ai}g&o6^-0wOGUqh&ea@P9UxRY&Cvol6Y7KttBLHVJP zZok9k>{z#xrBtKgSW-)*0=^$Eam8kBs?wJGe9IA~kwak2O!tf?XPVEVq}g#DA0i?G zegy=Se{hNt2JkI@YUaFx{S{BT@gbhvPdsP;Hl9+(ZpIG(5lSX0XiDOImOIG9#I=?s z9cSGtX3^7yE-Z9Ncqm~65c!c_*jI5A>M}MNSH(_h6l$Rxb`Wkvld{DF+yrm*kF<_{ zY`0GKck@1ij6GTO3fLegs7dLK3ZS-LpIt zwzVP>V}+s|6fZV6oO!ioCU8x?U9w&uRd?q-{)1@l80@+6cImProcO6%Qs?)KC^#=9 z#7d)Bw3T-=jISBjz)XqFJc<*u-bi-(b?dwHubQ@(J4u!sqTuHpUJ<;Y*L@8W8bQ;n zCMzuCYe?%uhDi{JMU&g18}LkyUeh;_Uz(8m;p-D`!>XQ<(pTqtqR{M#$z^5Xn z{#!OI`)|FXFfOyshstf3(c;c0ur_yBNux{&4JDbR5v!3W0j1(k%NM6NFS8-e?7m{Q zC#3vQ_{ZO-tqe?{_5|{wfch#Dbe$A-yY+aA`!UmUvirl;_e;m%IY2>8#t@!{v(jYO zU~;f60uG}FGc((42=HT(@a&Zit2qSj@I zYSjXT>6bi^dCT-kE8Tj)YV(j&ojbG(2I!>>+%sCSg>oLk;Vwt5knizyt}Yzf&qrxK z^wW2Q$x6=;o@0&-Cg#^D=h9DUlMAbWg>X&u3sXQK1wPNGLT(!Ra5SZJL;1ePD1@$*0K+MSyqZ1@bEiRQAbc{ z<0)t!3d7gnve3QN4^CXNe>(Pk&w3t%Q!_rtRxy6X{!K97qGtv_=!&|H;+Pd+bze%SD=b_AJ#A#@V^j~lH%rUq7lK@$l%)s&W!diFoyPF{mXD|( z3QaWEh~~&*0DWta^F3*-VX|F_`>F3J-LbbksT`v~#z13pA>&CZ6+dID@aKFHqRIN} z%}kqvvfXsh;Wi1@(b+KKQM3ZtavCRTaN&1CL@xF?S1-9Fx|g?XS>#3v-9Wt zUisuSy1)0G|1Yj-ynhWQfbvNNUc?>Kq9a@nSnguQ`r})AMFzU9<2puGm)vj4D?j~mT5T*`rUS=>q614noZ+qtVm2i(;{OZ*x>2MNFAi_(s5SIar|>p{~no`SIi8)A8d&<%oq3P9w; z6J)7%SrJY?PQ(A(PV!pEv>{_1dZ52K=sA;>UV^@37casw(B2CZAJ{q;W zr^uOoLUNH;+P;RAP<_QA{5>OM;Oqm#7l2Iq*omZp%>WlJ)1<*JbRI?!!H^go8080F znqi_ia!Bbj|63o%U-5&>eS?qxS)d;lJgES)Z9zGD&oa&Bv1y4*M#diU+K+ zNoSpyXzu3w>K3}FA3X2T$@JVnqigOgj#bsEs?_COpy^trN7k7 zLCjR3?Vz~pNK_yt>#FX_%tz$Eax&(y`&tb`JXt6iRc|3-OjI?ZQ}Q_K;) zaN2f5G$GDeJzNBUlYs`DHXu;*+5%YZi@l8&O>^Gh$)>xwGG==S3=bnP&v zxH`M$GGC&)OnMK;DQirAd0$y+^AI-%Q{#*j0QzC=i3c7`C!AL`rPPU#gO(L=gF5ok zeDM4mF|D(I)%ZNvWg&|xOs<0>98T%gi=B}H8VI?jLz*{pcov2QpB{SDn zFOervnspAXKv_wfF&*@QHR(MhSmnY1q<(WuS z7Xz)pVQQ0aH&AO~v8PEe67o4B9TJ9fl~Z4{u6KPkK@lu=3n5skVZQZ%abjcMHx41- zV6yx|FT?I8=RO=4V?Fo)9%1F&5#D3%HVA0?1P-V+On3$Gk8UDus?YD{Ajw;h{t4AS zr5`+>@2CobGAc{u!0qFjGWg=nN+Dk=`6{-UvU%Xc<}s4N(g5rKM<_m_GVDT$^te{m z@a4qyi>LTLVHJE7Zeau0K$hOU?O*M^V{=e;3jzd$3LXT6{cqX(KQt)mKWv@!zf+r8 zs?VyL!)WjL$Q~rOfN6w_6`8%D)D;1+2)8Iu2(S^L8m-7z+WKcAd_s~SVp2$oskx!m zM|$z}Ch?30@eKBe9K4Ga^-ON(^-62slbjjeJl=OE)#C9csM)ZrYax6FM8t|zkWqxJ0D znH$>vnwA$1Hi=tHwC=;PW31oI9X*5Fw@KZmC&q4Z5e!TZOmF@XzD6sB>Hk?r;S8E*|H5!JRAhM z&pb@4DTY)wY^O^X{UNekl2CuMliNS`tE;G~k=oeV z)s-G0@`XyRl*B#DlpG_j%FZrh4NYW2utork8iBrJZhNp282{ZKloKM&38`c>{8jSz zt8jqpENv_Ona%p9hrj!a#yWAYooa5H6-PjpwNrFr+Nhd&oBv{7;1SV$&g1~fd&4)I z$(MEqMbuc0SsbWeV5e%DuPH8M)q*C(}<<*T;ubfq}tQM zq}2+fL(r`5=&!z7&^#)BE`2lJ)jiOWIJO&#ly1tPayP~Zp5<_u2{#UcRKbuOfpv6q z*Angx`esbV(mLkp-CM24{6o1pQMIzB^Nl|4+{rqbL%FW!mDoEDhq~&<={sJ%%b@!N zK2v*~XzniI^;iP-d%*nzW<-pDAdK%~?BF)4mi?(EoAG{_Jk4ZDi~;j4glg-#&f-&K~l%+ZgX{;Mz?I&rL(GS~dorbmDKnQ|I zU$K6jhZ!P>?-nPA@d{OWvQR(1U7$D~k_xvTls|q?ye?F{!g%qRdxZ7QT0nsE#yf=! z4r^xxgn|D7?OOE?#0EM}0a^%xRM66?Y0a!ko}ka6ws=v4?_w z=4th_r-U<1aiM(_BJ?WUg^p1sr^;xgpqE#EwJ3(Q6!h}6xc^lXF)jG2a&*qv0n{>~ zHYO82mA?PpM=+AT_B`<7b6s*I5mzFlqB~@=6(i!@HP$_Wm5F6DYI*y zk_(bTSJ!U#g*8gU2CWeonOeeG9H)utA7}%oc3shShN{(7FIP~~19-&cT70lYon?f) zWKHgj+S|vd#F*#F&FBcS=O*qOmq;g(Y>^fkD^kBZ?$NJ1ci{y6M&o|x;(q5mmuCx4 zwvi;h8MXCHO=)q~p+`P%@=w$_G$Q(x^Ui-vldyzWO z)1K8dSC0&)m0*wu)^tH_mr*6V4~?Q$VrEgsFe+CS#zQ&JzA@JlymQD{i^i-qce!kc zlb;5xGaKt1e3P(L)fFo#;1#T9PI(`qw*q{-l%=1+Eoz7D%*HTbCj)#t-!rl*z!t@; zUB_sH^a;M#cIjJz$_;0)>)CjuM=uVT?LtJ9-;Q(u+c}v?#14P2>uFn^=8a14`orN6 zUBERGS0Ro_`wpJRsb``6iW*upr?nPVH2RtvPIQ}9Vn{)GRJdK@>I!1?S>YX0Y<0R{ z;x{lGoDAsFz9uBp)fN8S)lw2QlLG(T6%iEvuqZ-*n}Q_0)+lZ;U{v%CH03bEf-zeW z^hcPAz-etV^-pX~`4H=sz{>?qn|#h~{#IX>KTZ{cj;#08E_;A8dwjSjHtbshup3=g zDtuNN%bENqO3Ne5BOflp8~$=;J-AcJTb#QQN^40Zb1mV{E60svhmZe=;pt8Uhul76 zoXyV|hvjejOh?E6NWzWEeC0<3ewf&2BB5@$a$^RzG2)&QIEC%jHB({JNG=wc`T94p9M-*lObXXzIXC-!M`$sJ&>r z8u!+vMCbUnd$xQ&ASHLytrq)SlzyAx2&a-tT`&%Gshe8KM=V$;>E&oG)(Z{O8aZuv zWbb2i4F0(1gQ*m6CAK!qJRBQ^oDjxvnr}ktz_Yq3*~`lb3HO z1`MIR4{>>jJ5C_Rzvaor-$bN;-Ia9zuQl5LTvN$|UnOhs2_pZe0Qw)xlmELa#J|du ziJLN?anA5ZJsoX(m7g*quUv)SC3<^6epv1hEAqFfPCwRJ92V;k7yI`03!AV{U}uB| zV+J5^;1(>sK|0y8)sq9()YdMpF1+53U8gcRSaN(iKcMuGRGmo~EBJ>q!(llMMoLG{ zFa<)YfC9s$>=SJ5=Z|DIwP3l%%NR@vm`cIo9S>eUkQj|T-L$sS@bZt~ z$&F{0H=0z@Dv~2_lv2PCiYUYjYhwr4;aMhrNB3KokekvnPduQfaG|9nv;-897RQ;W zVN=ck_C1+sl)non5p!=(qq9^3jNDBg)drcF%LpFR)cz1;d_XpKWC)$1H?QY6^xAc5 z_TkYA#sWL6Po{EZeEvgi{1$;MGAXpq~@;VBW1E8rzPaVGUkVG@g z+@K{aq;JUYV;1|>x@49{W}~oUFz{;Jz?FEjS7J~^oSbNbT$ zZ4UZ(1>k>?Pb!j;yuB{`P%WltXPZ`Jb|^k6ZpSYG9cv%p^snp#7b?n_Rqdqw@$2yV z@ceZjr3a~rcA(CT7}ya^MvJ4yRBNFZMYMQGjrc459|eHT@N?G-ARvQ#*yq4iYm@DB zCAx+QVVudMEsZtGY)RqeC3 z(bpq_oG~(|ENvP=Q~>Rg;R*M;W)7V)aVdS(nag(xsyZ9c)tO~J)gNo7sM$EmZ8aY; z%x^2qQZhMj8#=?PFK?Wzl9G5HuIvFxlcbB}j&Bx^dW=|PhO+O+2_KhF%d0f6gN<3q znlw8?_`@JOI@P50Az%b2U)Hejdp@`?rDG)X=pN!X-Wi6s{~(;uJ}4g7PsA=icZB?p zOG*AgIRBjm{MWjOe{FKeQnHktm&5d#ve^`g3nN64m!}3rqfUqzBSWMGszJ8{&bE_$eYj_cmq)r`5e zqKEwvM6%dBAzYBM7g~V-9aOVw3lAn}<(Wjpee70!y@ZarM^c~(2s_LbNYE}mk5KUL zrWMFY;l@7w4jSUA$>mhUgB2M@0{r5bLg28u{~oOaQ`x4dZ6B=4)W-;Aip5!l?fQGf z*bspmOK=J1ERRG*E3IIe(3d!Tqi1_ZpR~_DEt(dyYacxB{JJts<69|ZOVLg=44$j9 z(_UscG^+AOKdInHH(qIK{CF|hgjfs1?w4>tg3|X+_3xe9|8><)mj2kx_}-ga{n7=M z!i_IXY%tO|t;28)Q!*sS?!pfth2RP3eTa2-g`1K(k8=HR_uHH(7dT6 z`Qq_M6Aizbz4z5Ojc^ZIMU7_N%t9r6TWrauI&o|JKA%Zass5j(-;B(nsZtFwe2+WAx?i#Cw+u20z39{V#O-E1^2`Si^a&- z6^PO-##zOS=vYYSt<%WTEUSHDP?=Bo3F1c#q54r_9~@Kj*`vs~^3C)>(S>mscI6@q zGA@d+$-8&I?tU%f8pMAT67mA^kW2X_A+XPc;s3Z(=O5Eq#@6YtrAW!o z^-#kf>xDx@OKUGaG@%X3k#5RDh}?^il-zFX#TA=tb1n|Gtt?3NQ+QtXqG%04N{ngXEm>IhL* z5Ziw2*@1Oh8}pXzFj&1Hb5_475!LLD3@t^WpSRp6gQ01?P4@Gm&qv1trOz(R`y!d3f$In8vQ1^I7p@P7r_I!2`5_Y+{pPm%O@ z)$V7N@}C)^e~BX{ZCe~+RPOezUp5m>;+y1&KtC!b?R9ZfkP? zJ)1r0i_O~hXqXzWPJceHQm#fnzYt0bG6iZjqg;6DkURv(c7?IH zs(LeHRQ|{XD#8i!W?P4o-lD)Vm@^)2Yus}bS#a{G#%OFg#C~6k*jhIbAEGjD?>PYtPh)6VHDx) z&Sexx<3&YLewT+%B^BX!f8hp3LFM-h>sivH-1flT;6b$RY?-7jJ=pw)-QmaN()NkL zhIxW^qIeNe@gcf8H6Va7TLiBT8@{#Z6^%nRV$FV&7e&mSL)b&W#?cO}9v)s_4%BuI z5#PxU6G7cgz5gkD;Rod&w1u;rNHAwan5L8jcpQ4ut0tw+EaQ!>JG@SBP%sPp)Sfb= za^^f^>*LUNV23sUJ*<=WH^Hphl-!7=#|}ZEMe57A!>9(vWRtJHcz>+sruyC$y!&KI zehZlb9L2^aU5isr)Ad&HSAv@Ul&oGqE10S;tEk`V88YE~L>U2a2=g!aZQ+rLzCkM0 zR{RVxf8c-QJi`yIphw<~pigMR*aht)N=0AajI^KhdxH7oFcRz_iHzeBa!DY|C6ne- zNh-`Fk%=4KU|!mvxY{EEgA35{n;FL*C10x#T1bj%JQMjk2(*_nz{c&esZ_gy&8?Jt z1b<7WrbUg_jAS!>fOto4TdOV0<(kg0*z|V+xwsRu-SLw7!_uO%8wzSUe8l_-di#b~ zVr13oWvO;qs(qtjy5yK)vnIIHSlA&_Iv}V@2U4pCI2QCipkof6eHRY0t{iL~LTH06 zWf3y*Y!cCCyT;ey-H$w?-Q7LZm=|18KR7#aPKH&5UenQ@Me4B6^jy?WBV+1jnD5!i z+tL_rJFG;RKKOor?u$s1x$o_|nC)+Iajkx=+EKvfw zBzanPD~>B?>ZCJZs?L|;f(|K5@Q(9Wdp6haJ@@}4?Tt?zLi4wj<0onVOE`X(pg&8H z-1F#`G~wZU>n*omFw1S2h6YYxzRCCZZOVya1|>_uGWmq_?hHkR4W0BM+!RE*`eC{n zq_?&nPjnt(fl-7E9p#}$m%;Y^ zWv$Hxw=B;%Gnb${r#M$JexW!(AaVapHNdE2xVH1Qd&w#dh##aHK%^Y+&u-2}BcOdF z5turvaB?q_MpI^=)3BEwiMa%s>WDmaFd4^Biz*$7_0xBS26nODc~sBU!%yG3mK->H zpZdx++_Ct0mK|b!7(r6j%eYFl;2uJ;t49Tm(=Q%r7@+T*Tfi83Zd216SnjG(2Afkl z`SE5A;Ygx61heV&)ycepyb;a=4T27mo{1z84{0ef!xMb`P*;!3*)kq=SWkgA7AT6R ziAk1tsywd)b7G>AG%I?1Zkhe-+kC4j<}+I=#Ff4#LhXcT{$zDa6Bw#*Sh26rywP{* zSH(mMJ*f-JKd03-6KsD)a@I_9H|SGIx_;K`{$8#1AG!N~Vp*hOsfeSD=_6x9u}a@5 zCxC-ivjUXNkkFLl17o5q%gfCp6tE?8 z{$v?(h~-P0@HgCkdpOY0XL|we9OasQ+&~LQg}~@MYs?`>i&rjDfqwc($}C0P0tx0~ z8wRt|e)eJWXlRIQF&~k1fX4)D(P9qTU_LGLQybiTttaNjZm~Rstgnv(^F=65F_-!n zSS$N4^tJqpCOOcTgzZA43IZ3f_A*EyeT=+<9 z09x2Mhq*J;lQnq18sT}iotMT$xR^@nsaRhVfMxR+LA69voN~Fs!3f4Q^pB)CbivZS zQ6x=fx?|!%G$eEI%uteh@X=dheH9uY3C`fg$<0z}rHY^obM5>4f1Nt58TbTi-iR)p~ocRyk@> z!2k(JtIgG37m76#3y8(a~0hb^ z^wOjjS?v;U5b<3yxdKGy2q7&-)GWQdm$FOy)e5(H7Cly4(^SeM{j~(m{f?2m*Uu3YYW8g zI-W?Dy5>c46QDT7I3CD@oxYR3J%z(ReDg-}5+ndoMeO|yc{E>!p5W!ZV))j)-M%c3ha zW+b3Odo&M{?Li>J?09*IHwA?nfC#sk-j6L*x=BV#MxtUa3!}u{@KFU>Rk`>+(eTm3 zi^=v}y_C+&NF-pm+P?g+C|lj~`^4#}o;`<2;!oez~oNiu^D2*FVECNr#YIRd z6gQ%IW3!TmcB3}y$d4f1od^bUy1ZW2>X(>l`)^mz&a1 zt}FD|er}wrl%0M5m=K;NuS!@qZs%keE4KVXf+puRtfs!{JE`>h=!-GC+!qpKfnTS6 zLAIC+dbtTtMSN2yE+K)>s+>!w**&8}Rx~E()!(Ro5ppPhO#((QzUp@uO^B|Z)hSq$ z#$9|Xnnjll*IAnd^)FGp>4=s+EzR9m!eX9NzT`DYAB!}`gMBJsLUd!^jO}^Tr!Kg6 zy)(#fbV~(D7j9X=9#NXM(}@0zL=Ip+lA|mz6GW5z8dGvdQmdyL#EsS5k5E+|eqv#n ztV_RRvycw;WOkP;$$n6R-c??n)IYzgDv;KEKM@_Oot^aZP00HmM#lRb=Bl~!R^|H< z6OZA>;gjQ%PHvwBBYyu^bbs1_ACclontAYj6K! zALE#e+oO7INUY^Cx8DS+e#RR|e_-x$GaJ46YtzNM?jiq*`%=ruZ2f2Xd4>G%mZ1ML zDe})rFsK3NweZXRgU2;xPrjN_UNj0r}OWc%PFhX)Qzt^A0Hp@ zuHx{H;*Vc*Jg=TRxv!`1J$)cew|rjiL6Rjc5ii~H!E|sR_Z@vQq54870&qXl3}ny7 z6ghG43|qkXGZ%WP2D9P!ShMACD&ctv1{~dV>KIOv8K|G);Xk-SF>Z_pyYg3bDSs<# za~G^EqrOUl>#E+sfp06_sKRs=?FfT!tBCks4!cU+;CCnm2tV1x4u6O&ca>CrsPw9X z`M(uDu15Ac=02_$?+`zYSoM(Zfo^eKhqRk&y*dsglq1`(zc?v;F(2LZO&u*W&)oH)zcup${=-IW_FcP#6ubA|%q1#K#y zVcwmxW+Bc}d1h3d8*QgbEvZti%eSnrx{d}2!L$(rdq+q9U7IEjnoh0^rY1tj+Ou0z zX3WKgrgJG*VYBEouzIrsdc_KLLSB-rX+N#hvDpwBh7?cDIwBg-LxyexJ#9Sof50+n zs!)$x2>3*T4~QbeO=yQAC1wxwegd*}T`wFc{z<+0!J%Y)TG{a0Zu30GrMj5$t{Fp%F$x71G2UsTG_#=ze! zQL$IovKLwAq$+FT>d0zd%+l_O0@?7c^)@wedMYIZ_wacB5v!CiAc0!^$Zaye5Xh%+k1y2P}bnpr0fsB-5;xJ)vEP#%sJ*5<9(l@LB(K&?`sqMP@@B_ea5qy$Xk~U zXj#f=P_^p5AII^wpgV@+pzv81^<5#nl?^ zuPbLm5^iQ8C{+z69XO)}1DKgYmrq^G=H5==8Dws9FT zK#ti7o(KM7=p$GwwzZX5wPdQF)N3i;TID3|3@{a+0Z5h&BTnIAos6gH=#S^_1VUVJ z#tZckySmq`#d~*hkT_tQshSFRb4IH+EPM3JL!(V_>J zpeF9dgE!9g^Z)A9!N7h-y5cx8(YBM45{Cc2Q>UdRToX**=}p}U|4vQ7VU`i~{Ea}( zNo+v0+X22pRV0n7U2VW+`@z_6DIUGjHIkUtJcT%I;uxSOJld%9XWbHg=QfV&8Neo0 zL~LtDUsXh`xxmn<5VK2m4sWedFMMpnY*zG3k3ka}=SR{M+ESe3>4o#;+LbXpP#)q@ z2zKdo36+kH=;^sQ-OEAE@Rtuug@v+`zLYV6V&&blB9p(|{$*Ed7tY*!#4CW z{ndcfg^4mWeQDL$Hf!) z(0Q(y-`2Y_M*O6$EfO5fH(eQBrzz~q_>d-kS~tLw0bTpMnwi_0))x)h-9Pg);ZSi_o?SCCTJdCEqm1Rjh-lKT=E+&uny=1ng*3?Y9g?=y< zDLgsMeXEWb=}OelYd*XCH9eZ`?Qe6Ov0JFf=qXU2Ls9&~QC{U~w_ZH@NVaBC^J|)A zdJZsunAz=!9|CdOMyk=(qC_=Y`%dXkP22PLOiYypo4?r7GZy|jlh4)9I7YhB_Mn)- z3aaG;q5>nL!@QhDE$P#F|2nd?d9@hC`JA@@T~5;Ub&znr$^wmOdqJyGemnn~D)x~g zu?E<@E?;H_Q{+CFK_-2EJX)}~oy36ua2gbNTyas}3VTB5bWa>N8 zaf#6j+VniV@{{$Nyfwj5*8D4;~ouSJXx*K4m9u$qT_SQ#p-KY^CO*SCxyJH@ zBd>ZSi*_XJ-UxC06~AVpLv6#AYjJ$&;nND18s)iPnJ}G~8bkDh0-Eb{wg*0%AgODM zfxdQnjswE7Z%j3f!L4We-1{~VMSxgwhXP8Ls{Ds;#{%;Q?&tTTy?KIl-~?%``G#vs zWqnF!N`qWYC2Q!faph2#r|HJ0l(-E}UX?6$M}hayHq{=%d>>DuP~Q27uKJ+A?zmSo zk=-7v8JFCJZ+p<{u73g1tUxw#4Rz0xC>8Ucg&4hiURQ(J7lT`eV0U(Yy$9EgKv?v? z@li~wUZ-YHg3{+aG4z@iv^W#)SQB=Ek);>5o_nm?(L*o9SY{bP+X~aQ1MWZNC;@2d z(+u?VB?Qu(RB=wl!hQ=Jh7WgIXxu?RZS#f?h(lBPOHewXYMzX*%sTL3GZoV z{^5RoguTDSq&`kN9m7m-H7sp5GzNd6LA`}5`M`m=ao-Acycu|qml$n(_VZ5248SEE z^R)VtW;JuYki0vDG@}FI&-nFzI>Ks3%QKcKwoZe3u`Tv$PaH^O@TmH^eQpxhwT2|f zQHnq#xrc}I7c1TPFE?ag4pm5PTWt|yGn&6(Has`&;x>?+Cjcc4!PMK-0jzcos+&-K zpLr!d{z~hrhMR@PHqNg^yFwR0s3=Y zA)Mea$$Lb?6VBfk)7L}F=D&((ZF&1p24kqt+&%BGZFKV@v3VH#XbAO2&`;Mx#3lq+ z)q^p^-KonVH`$_H*+Uo}qOUk@_Lso4%Vt1Y<|3%*Gg3MW)0+D#aKUw zUuxXYfJn4cBf{u(qB0^{zPUPYsl1E|7hVCVc-j?1KK*B zyscL*pJz{BwvQ-|5<^Tnt!=&5iZMKU?6{8}EE%Vd{?Ja=dnXq=)IF?JQzG}immE4&2F{sSGbb1 z*}3X+U}lUK(w+*x>*tJ-`|)T8)z&ukj0I1as%9Tn$vrGEz2lI}julO&rK@93Q-$bt z7il{jq0Vz97m-#7n_iLH@Kez2b0kXOObYPE6N+{cOo@4co9ow5Z}^*Vk5l>ziicsR zL5Q7?T<4*`zYAALox*nEyfgK=?hK+2113@*n(#hbft1a2gK%D8@2 ziBk&Wkw()Gt zdT~d}7fJUfqQVBG74MRtc}me(j0H>n*zk;~YeoAOWusW=?gs8pFL_Op=7wxY{Q9d$ z`%`|Hcu}#jGRZxr!9{~9)00qx=;HbC0COww z^{;j-md!9pZvoYM^EX@=Lc`bZ5Gy2G9S$4n@986==>Bsh(&eY(Dw)Y_*5FAr zB)1H~6;yEOi|LUj8l!GA)L$|K4pFm#MtaW#;&Mt3ED_n|V58GXomQ{qayuBxS+T9QFVO;xTZWqYGy_b3Zf7#-D{Ij>hbJB4 zoyVgOQ8+GD?0nuZiEZ1+A`Io{o|5^O(`PVpFC#YoNJiB7b6;+`eSG2(yV~9AlhjeP z#}E@QtY620r&_JmxC{ED)kP-J=5&nP`T*x@zZc+b#zwctBKlsOI0j#(hZGBd%#VZ| zb)zZXPaJLp1I1GLWRm`R(Sq2*Z?@1}rh(!MWE6ZBQvet`f@EuiiyvZhWU}Y`td#M3 zqR%aZ)Ig47IcNuM*^M!+ta<78E0T8`;6~3BmmyzZm9xr^%}mjz=cRK*xjGOZGqS%y zj90pWa6Q&wz%B5`A=h~cO8D2Z z4}zJq$I)gukUT%8H>`GLQI5iOT8omMYr%eIso!arcz(w`BTstUzxyO=9{!yqAKGX( z*m3`zxy6pI5!52(}ynpfv*>P@>TV@x6 zE@=k+&!FnUUpU2^?7}qr%)8zbCWE8}+G3><*iKyH>BHna;pcb(w(`BoU|X2l5bAbk zsrFX2KovKMWl4fS2#PFrAnd<}KdeIEKI7Lg$MFk>EBK$n|NnTd{((s`{^CsiyDPXv z!(LTY5-lJ#bc<{!3Ifi59)~s^7ipogMF&ZIIFkbgrC9!KlR|qiWGs5nus zAncCJWhZ$Q*TnYPuQ#Cs7<1je1r}uk(kMM0z!^8ssvUJSo{cF~4Ji)*#9l~juiDQA zkOQ2yQQ~Y!uA@MPBHbb#fo2)HBS(W2ZQKo)*Z`xNKk2pFEm&Gn!vbc6|xX-XHt=2C6Ab^&-EiUB8VzJ<8xMzB0z&dG4uY>=-$&OuGpC#Ea%mWyi5QSxXL%u%o$kBNB%rV%0uwPrxNX{;4Es zEn&A~(z_^nt}`oK23@j9eqLYY7K~xoZrj~7jM-8Jjq!MJQ`Kl`0m$=!>Er!6`+V%U zjR{8XW?3nbVS1HVzT)w;z9!8*y~D!4#*)>prILZN|Cx4f68Q_2U1hs~ll&+~Rzba; zmUQz+>&lbmb-L}0A`&-TJcrA#kS!f9?X?0o z#950yyWlsMOkEoyvbW?M4aqeM`=Y$CYhVC#qN!J$207duBo`+T&CbLH6O{L6V*L{( zgcoYO`lnbP=n@S=$PEFiLt&&Y z1-9TcDZE~!n+l1dcRpRh5sOHBT#?oQ6AO%aVZp8hwla{VB@r31JSBR)te7%uTspI4 zX>XViiqBdU9L-ffV+9w)e$kE8m+CFxT$#a(Mv=C};8=;#WkfV%Lbkc0Th@i8cv*_; zhBDU7f8j6xX-2hSEsOT?0zr?MFIQ$N6k|Xb5KnZyj7vhCk0A0{*QbCVPL}!L%7l#n zMT~t)TfGt~X7gwakt>X_LcVn(EsyGB?7r{Ha;v}_yw5GgyXEYhE9~pWo7j{U10VPp zjRGJ_pEO3@lXh2SIt6}^F&r+{5cLWnuM3_2n~B%Zi`oYKD;590V4K+ft116~$2J89 z1#^KF2+5SlKogZjiGhd5Gz}}@cj@q^{Hog@CC6kCKL~6m1{NV5j!20|AzjLJHSzM^ z?ObfW0PiL>zdboOeFOasJ6CUWAo876i`994*c{@pf$((#6>$8p5>MzvxwqecMz(+m z`EV(dChRETKTtn+D+)B>`vcuEk33D9spe?QEHDAp>`{5a2rXj z+j-U0_gnx=Jn}w;P?nQv5kC<3$EB#Ui9!8_l1 znL*_}e`=AeHAU&MUO>@gZ^%5!8x1C((AgpF8KNJqWKN8K0P?-w|jSd|4(YM z8x<62z2r&q4!KjRQmee=Ni`70^K=Dch&0vo5p;Z4xCWkG7d;4##71*j?$+rZmlR@y zX1mEO5@Jo76bTKi!loI3k(b?0kO0NJcA3XvpMwhpMK%A37UD?T# zPA2;?0Y}sb%S))mMt)`DpU%<`Q9*1zaQDAT5c%O=KJ((ixQzGUW>nT^?V_s)MLT=k zcnsK;25or^IGN(W|Hzf;R3;c$pDWI>S6o9c56=b(@9wvhwzp2iPoxZPBhXP0KwJJ` zI>=&y$LaiuU%qq3gdbjGv>x34-n6*C)PmTC(9$77Q_OLnJ z!m>M#CQ~psAF;E)8=tgd0U0*BYGO2PAsKcCfNsKC?4y9ZvM7(4MK;kPF#X*Mwpn&p z>qBzbLpq{d=s>0;9}0dqUz}@go_pu2dtrY4;2d28wcf5Zhs24uZ@7jf(|!@Xt4QQn2OKV4m&ZOoR&-W2y{Yw;IrmX(SyA zA=6uY*f{|T+nC2}F`SamQL|5aGjfWYgFj2;^Jm42)@|&fl#$=P2&w%79sH#D2n+IV zW)4tCtY6z};9R&QQS`N!GO{!CstJz`Z^JCvJYR??(sC!xcv1-e#?tiizCxn3AuW2` z74?wn{uxT6iH}Ca_;bY_jgnHlYHfhJy_oo; znw>c%@CVnnsvM$4RU@12n@TtNneE8M0N)F;pEz(!9J7~Vn{)Wyo+@~s2qZ?v)u2b_ zo>={mT6!0bf^5~7?gKVjUA|EuKkm^+t&!%7vye=X-_xh)b5T z#c1+Y#e@bT1yLYz6RpD--?f$Z_HRT4m{Py^|5t_~`+p}xVcRd6!Usjy_O@M{y`6kb zi;iv)o3`_^3ZEERCJh=2x{3>u7)6$~$Ktd@#x~lYI^YR8CL=mu1m^%Dd9S`^InuC) z(aChT_x0P3-(A4_`z?CE=oWLqekC+`6;EwO`aovvInN4q^H{(sr6N{pn~rF}R8C+x zXjzh!Al}kbr9MOp_5=8k$Ry&(B(R+FNZ=a$NZU@F0kKo>^^DuIGV=EroW$ax%jZ!9 z---bi%sQMG9&D%gl1otn>kX>omg~+PC<7wDz>xx-#Fz+=KC!7FjG-$wtoBQY%6i5B zNrnno8Z#^ZOoskL`R%!8REj;8>E~oy{C0Om-3PbY`IPEn!0p@k*>{oeVCT*)$Vs#5FxC} z9@{p(Nu&{@)7D42U~6%`=H1 z_^C^rFNPr?D9cS^;`!e=c$%(S1WjMn9@>}gh5A2LegEYE`L9soeQ;bAfPjD?g&^>N zVDNx&kbqbT9xgmklYn4{&#NA86#JV!-0k*vFR^f{+s#&tl z{deZjk(vJQrQH992DS9jk-YtSV^aT5ym$ZF?E3%Epq&3aR{vc1QA&T&s(%z47=bAy z+ksXdp(2*A7ffxWG8p1G#8MA?$*{hSA{_Gp9}vXYeJUzW2siry`w56lW0j30XOmbn zvz*C(nR%JvcD3mJ`}%dTpfE_3oCV?F8=!oU(?s*|UW>5$^YKt%0OU4e!Ym^FkT4S1 zm6URm_Y~MVCK>jrHvgVxEAb1l*zF7PA82QpIA0{Y~9}- z>{sb7`YHgvAvf%$=7F5$zxoSSKU2xG-D10H^K%-a9e$(gmRh2%phEg3@$y3KowW#{k3X^LO{8SqpctR< zwi8w+ZD(0O3P?6tYG(D=Lk@ZG zIj`o8(g0SNoe_c?5bCU0dxUP`^SE>ks2nM&d`6 zE*ZqtdTg*aU|mN3M}{i4!USz0odt_4>>@TGP(Ei~^-6s-{!h&sEe`VKiI{=b4ot>~ z3A$1Wy?Rq}Sa;iTeA5L~5!RMI1|#*G(NrILYM&L)P?{&S==*1q#c7{hSSjGNL7BLZ z=r4Oagbml{GRzAO`_AfsK#)HXcOVZ=74&zn@-pQ+b98vC(u|26s&!0geR0=YQjjqy zh6h4YHL>N}eoHl0yuuK$uzj#UUgh*lnqtpL>H|ejeSP7v<8()=EvVQ|-@xnU!d6em zaN!Q<0l=BEIMiBL<>tZ|G7?&Fk`j-td?mETvwnG)(k8U4iW3ZLhon-BfxL2cC&_{B z8A7Nf`N%B5 z0{vR=YVmc5avW!-ngs*=Um*6d7_3j1=cC-v=*P!TBJ5&qxJrwlt#cs8%&*13{E@Sh zw^ex*4x?k6PFI=o_whuN^j)I1OsulB_B_2u4<7X_MqTB6Yx9H|c@HY=$v(pePW`u|7X(Blu z#9^cTmplHTmez`dKYnBBhEQn|Fok^_^8M!@J4$4Z8R8-mKVcY@WrTA@4L={dJYRzn zc1!H52+8r0V29$Z&#DHy0DeD2qc(MimMRq>ZkMs9!0yLWK0ywvkkYN17m$7|mZLUd ze0-TA&a0p{Z~-!EBS1T^_BZ3mRSi7WA;K;X5FlL`gRWr^u5<{{=|TF6)sMj&ITK=x zeJ5-^8frA0cQeJ_5My~k9xxX(=$D$fLMdD=VJ!A*P|H#v;5NvBs*|&;R0us5vwL^Q}ptULYQJBqebJ)ix+E;+s%7E;`zd&&5W+QoM7 z=B9+kZ}tOm(d@WV>kn@xwdat=HL9RM&B|nKrev8gaV<6w9gU2lKxbqlIxjC0@;ISDA@z1Fao1wgp9(}0s|O+ ziPU~k69UtvdB$;L{-FV>J8gzm$L08r}bI z4&)ne7tbaH58{HCr4u7`*Jz7%4RxWoWEO-RDIPv~j5vOS)z(tsNj^pfNs`UmmC-7K zu4Mze{pO-XV9#G(o;PweT`pA%u7xG!tn?+g>1gawbv`757@L!1VJ=;L%oc|3f?8Qn7++TD)c7QVM{(X&MLKd zeJ0E3L1=qE2}xNPnVVJcJ7qY@43og*+qul8sW~ijcRki2;E=J$X5#e!sfL$WK zkIWqx?_XOCj)k$bminUPjcFuL6Q9~2)$+15jPpjWc_f~D*h?-n z5|_F8dUMdTGG^0MOtNvHG4$lZ7AcP{th)zK67kO07>4-wv}$`4m2??N zX{gNi`tW8hmu%qdE) zB~T~xI{u&y)TG7Na82!12lAw#>hrNg}2ngG>-@QQH1?UK+$)pkvJgVP><+{ z;@W-L1(5Y!Z-jB}r=f}7NZs1u>IKjOso$Tg;D8`nRx6VjSzRtrH9%M#P8qyU8AxJK z_}FYP;t1qLPs;x*`yJxZ_whL->e5Q}MiQOzP!Z*8#v9T?y((t`oK-_nNeV`&*VUNo zp`fJ2ZS3HRM5rQ!WmKGS;Q7tp)z#Tp5~8(D*=fb?SmwqI9|w1e8uG3)t;>b~GvO{xR=1T|$N(u{?Cq$zslVRo1P3 zh$IBD!UU>)uiwMP-r1TeHsazNN5ur>q~}dwR2}1SY2KsU2#$BtNjO&ANi`;>{*4)k(^b@v+ ziu@QNM|)W{3}$mI!U?;7r>uF$Tz~mOlM$*NK(zgCySMjMZ|$MkG(dl<3U}+8C#B<@ zXVg_c?Snhcwy%tUE-^u<(Se5RTpP(?+ca|N6l;0#YxE4G1D z0e@vCiuZsn&Iu)>B(50`R6B>#1c{9CSd=HX$vQw1&rmC2VnFhjI4qA9UlTs-^@k-j1#R>ZOD40vUF z+yIONt(2fc=mRf7XFnp?v4k)#2Iu|f2-^SsZK5BD=FBILH*2a5whc4*FA_O%K8z?HtsptR`KDo|&aGyL}hy?{n!-Fj3q` zr~V19`B#eK?{UQ|W7nU>vf!?dC^g0RZFRwuO2rJ-q{>f3&A-x`{?z)0fT|CDrqF=4 za^I4VemVmnR&sC?)y>qZHmtb&aMMz(CG`PYqERqAv-b8(xtw{RK+5;m(yf9rR-wF^ zZ~9rh_w#UbmMlV?zY+Z5#=x72^EKZ<#%3OP!~Ul1thm^Zq^C5{B9c=i2h{N` zb((yDsnuu2$sr{8Dp5QYN?f^O8BoJbmJeik@usb{wbnmS*$39xbVaF)erQ+c4pnuY zKAmVUQOo-R-1fNqP>{y_!s18srX=}ZQD+7C6dPK4>=tUf|dd>iU3IU)PyWq-&3ZC8ks+&I9e-=bdrx#9=}=iO~t`&zok zXB?5oL(?RSszENfZQg?b&8RKn8zvpZi+S{*`P_1S-9Ek%>U1a} zIcTBLDd6m)Cy5}J4;&6H4uoENvgTa~E0KK+9?dg3C=vh`GF$mE33%^M59gUiTejlL zBRK<&PqJC>ayB_Bn?4V>eZQf$R}lv>!)I=(MNiUK5r_K)w+2TQf^DfOs~DG4vEI*S z>MvF?4>xu|i24mUzybz3*U=|GG*r24yRGLZl(rq5s|N5@H};LU&eItRe)})l%<><^ zYB_HV8qZ;N>F?8NZMlPgFa1OBJE_Il6T8cndlSC3esKfu&~9QY$t5AmRcr0Z3OT5T zt#-Rfk!4JdOD(~UL(?{%f1!poTDVW{6Flw`dag?VO8R+JIi{N>>&HuG%BQ=#$GcVU z<+-h8?GTZw`S*^jtvvV^qp&5ZLhZPUD(c#Q*t^TD zheZ*ya?#C3?#Ujzp0(0ahO=&T6%^`vX7K<{=DOU(GVB#|a z3$Qd`fek=BPc;z0$r7{R3bEx7WjH|l^|IhqMXtxGO1*f5qtZcsDDL9~%3ymAwEQf58XhQ1ocvr|4r9z&J5)h(RanvM_(J$^orBd zPSwJ0@x3u*rX)oLqZ8y#U{0$}%y$6d4{X0;UhGTFCGnpcoATyv z#%9KD#{V7r3hs7x|MuH|b^1z@CLI=qu)=1CJ8+&va6~#%zJa?~+veLTA%W1u(=2?G zi3Hnbatd_Z}zwRzp zl=lT->0CDLuiGP;CB5DP3dpe7bzTWQ%F?@Sy#d{H#g0~AMgNEz3K5DwH6FV4IZ37O z`WyR_+qeIrkml&hiqylupGErkVjAxb$iCF+J%!d}*`m@M6-nf$?Mc12_xxEPboJFz zln?LHJu%Xx?&Lc~un_{+E_sb;^S@GhFZ(6>T9#vPJmGVUF8V7;f4>R@pS#qHx?lh5 zr+eJKg?G2p@@m@Xv{NB@M@!SFXAuHEE_={J>gp3ca809d5Xw?o8}3xgEd9+^livGe zy%z1G$TM{<#W>6IGhNmf)N=wsW*RdF07Azcxc~9#vD1&8ZLWnCZn_6@f)#ZfQ{=Dl z<5e&v@=3YSHX+Q11+60%l?~_KBg+AaJj5*pKiI!e9R!uFG7FrJR6I&r2OAW_2*^^0Px3-vT0E5WiX*HY@A@>UV5xbC|OM_szKkHJ8Ea9A5jf$ z|6};YY&;_(N9}stJKQ40r1BB;Oxcx|4HGh$>o?lWzTdO3jc};90!|4_Wecd808z>o zqUgNH2HA8!g!%`&`3`m=4)YhzUc4|x1aq;B5a~lD)G+p@!{(B=5pq06qLVAxg29Bs zi5stO&rHi1<1ql|_1~nKx}(}^5nnTFDA;e`xc^f)|KGdS|Lj$3$f|B?pnWi;(icD- zPz7PYcq>7TB1J<>TM@B=@$PBx;cz$0ER+sH(bXTTrDl|7Idt0cCW&)wdo0?U%noPx zWKI-TeI$H@)h^`PR>8@o%aQo{_4!`$|K>%^^DXH!`1=9UPxfdQnqXhH-x}@i$8b;x zB|7T8wJ)0LxO+Urk8CItF&VG>$1t*;(O6ExQuae9lzKlHu7%t&Vq6+4ZGJnEQ(OxL zg~dnrHZ{T?8kI$%?Wh|{S43r0NOlLgfwpj*i2g{P^X(>RB;O2g%mow1qQfo)d$3~4 zgksW3dNL&{(tdMNlLKWpL$|ami_>#TY@Oyx+rebpWzu6pn{~VK7~x}}Zj=yjZEYni~lBlV19&KOmEStI7&CS>|bv+Z9k!L`ox=V*G z>u+s_5RZ7HAN)=f!K-$KN(_oy`jRTFZl}2!oBAAtY^><}OvSOk4)sl>W^Rr)dUN(f z6NAj3%@U2@x3x~`rcPi2+~Z1MHRfHqS0=pth=!Y0sb?T6=eMS^rfG8Z_t5L74)(r3 zHA$|x#2%zPsEkZ&bK38){UNS9+>#hzpQ3hypD%G$7KTO?^BZzv7P^5c-KR+(BnLP5 za-#(!!j_|nFlEaJ76&) zHeM1)S|`cik#6Jk#5Y+(4Me;|P=-=UDRyy5|62PUohug9bkJ1oKf8(M7xVJ=}ynwWcK$X zEpvK5cI!^@FY~%-?xBE|R-fPr1p5<+#E+YOKUfLO%g;)?tRG1g4k+*UEwc+=kOl7{eq;j=lGSXJ;XZMjza0}BGM$a@BG0EGvHP`Cv&{Pgez zQK+5BwS}^rB;nE0J?(gY?Jjw@?D;)?`00Pc6qsU?fopll>)_?|Rch(A zZ^H9lCCt8kStoykI#4~=2ET1N9e%i(70gZ-7!H8C^hzQ?9^d5SK`b<&?W#Ia;dgM+ zg_F8?N%i`!O)o2h$F(!##{J5E?>nSH7AC2sJ0gm z=|}Tz)pJGmkJ7#04lo~KWN#&S2JvQniB*`#H;H%#sYA3d2JS^FF4e~Cu=b*7jOHKMnxUzn(B_ZSeNhSq^GrR z%gv*MeU=8nysyXU{_RfrKBHqKz`e$@MabvpJo;Q=k1l_{xM46 z3i9$$mF+lV%?1?KJWfz|A{kCD3y6MIngfc{5;!llZRRZ0X-p6QrBA!M?UO6z80N*? zdscHjabAtQ@y+a{>byfpWlBtpQxZWe)_@S}v=CQw1Txfv1o^qLk`?!M-P36h)%uB} zbVZzyg{<27+D?9$92cBC1Rxl8oSV!XO08tUMTBUAf77f{`VKdT-UsmsJQ=^Cjji~F z1+OgXauvL!XePURY1F7ad?jXbW-VdLDU-U0yE;#{$V#Q5B?)srU$RAkzLGq&T~r!x zyEM9`2hf-FXd5?8PLA5Dq0_HsyhVgnadtaV=mB;Qi_PXuZ5sR#Djv)p9X&QAfD+jx zxrqTcxek@?D)rOD4YnF9Zr&=|TEddft;v*Xdg~rLfok^{QITu~f;IyqCclQ@@&JeC zxmL(w(Aj``e9dNDX^MPKEn|t`0^ZGLKL?~tfkYS+K84{I-!K-ND2evgy^v!Z0S8aw z(=Gdta$Q;AAci$26&CnxH0PpY-GWUHM8UkxB1k933hBHU@Pc}sh5Qs1b~mBSOqg|K zgSXS1XdH5|G8+d1{8PmVpR~0|_j;{Y0PFEghthqwIy@w?rbi6Jpv#bV9ZwTx3a_yG z8d}^Ffwjo6D33Qd2uglyTr48IS7<2NKDo0K1}EPF#B)Z1!c6LS!OW}HL~UQaD5AJ& z#vYE(7;MtGI|$;KO(i4NR;~LY8c0=XRJMn1b|VT!Yvx9qvOq$%ppUCv0kicoDsAAc zi+dZG?-2g0&rmmGxUm6)d6m_O0s7}CbI<`8R^4u$r}f8%ljb$kIW(HjF}OAwa|;a% ziFgdIe{Z2tyHuJp@w&YlkPr_uJz+46W@qS!I^04MRfg5MP^n0{)hIVjXMZ_OPP?g^ z-O!l&{T>NAF~T6gAV{@zPg{M>xr7GK#mS{#zFiyLTEsXd8;Z9gOm<|sT?F~8(&;B$ zii|#YF2|4q*aWF6x;DxXTjaiOyZ!iF>443Uv3(ic5)DHcQFm38T|v1?=lC%_R|c*q zy7xllIw`0&`ilvLxdS%-0m?QVI_IyzSCHQFC=h1d5%zYG5p|b#4Fuo%w2>n)c1?8G zVLf%UM5QUzFLQyKa;PbdM+A5!6$Y$&gH$%z9=4!#qKJpNY4sx}Hn38CslK74rM#h{ zCBmJy5<7_GNA)+1%SIX_OlJy+LYKVNS4hCISC7HONXLwCs;0y9A6?z^*<;_DB+jjSB_XzFw^T-OE z{X9v^uSJL0=+PEH*-jeOfNp~;i3ZUSrn-7KK)VUTKdIs7$P+0J^b1x2rf`nshbJ;m zlsajACn_>H8FpD_!5L>`Zj%?M@ZlATiz_wAIa66ODy7+;e`=Imqmb~k*0o9&%__8N zO8eJU5oXj*DsrTrqvy3`?9f$%LP*T^?L5Q;K90u)!tXl1*;xq_SU#$4tq(6ZIo%NM z(O-t&@IkbdA-3|5;|2E6kIf_gMs_I14_+{;qfVaGP0-airM?I`|6bgtXMy;A*SA_ z&nSb2)V(3@*Yn3BBwhoj8hB|Bq_Nt{fgdBv*g$KhJ^i+@E7}>X;0)I!HEBDk;)rgE zYe~60x#g%MBqDpr;nYXXBPfA{dD;xtxrT$#pslEsNMrj=+un?Q`ZxCItbH%POcvQ*mCJZ{PdnrVAqj+wnP#;l zo8|O=tuf{k0M3e({}0xm$v>;UC)PUS5s z-9Uql8)z+tRI+l`o~&_Ig3jWMY`-Y0EsNd3d&3Oqg*yXTgP2Ds!(PCoS+oAw1;;+Q z%^GqUi!q}?ZB5;n^8XgL>>PHI0i(TXS-ew=-T&Uo?F##*oP4uqcLKUb+BM8Kg?7iB zM}Ooa>>g>ow#Xs1ZhKX?GnM{*IhYmE4MRk>;FPg5L5vejdEVtbhGku1J z13ybr4;He%yoQkSg>Sg+nJ5)W>C9gVb?r^55z?D9d7bll>sxB8Hy`AH#1j%%+WHOB z>FBWveR#zRAC+1aNYh9K6-JqH1{Z#d33{eDx{jEon3^O0&NatBaTYOWjC<4TF=-@x_Dy{DQP3i`tG}l;Lg?j! zwU2`6F>SzBnHaS5#9pyM-JM96#jA#c{jbul0;;Oz>!Z>ojkLg}OAu*9N~BBSk^<7* zsUQsoEg&V$qZH(l(t=V7h;(-dl7foBcX)zV&cg@)_sv>o-E-GE^ZU*0i8E)qJWM^UWg;J z-XYeNvYvePQcGheM2OH%$cSlmF}j8f>Z&`7Mm&qm1Ur8V%Lt{8-RiuWgEHHNBAK+T z7UeNM?Rl7b=5)q1zfI%NSt;Ft7Uqm=8pgUbW=Ji&tsnX}Dobou7{!^-a1%`^;!H(8 zipa7Ja3wXduhJDldEt6hSDIyRfP+(kpiQ4;!>Grre}%hYI~4h@KOtQvstvws_$L%) z)W%8@>oNQnNbIhcQ|^}%EUpsQax$Am)&xUkmZ@EuYg%BARPU3cjnVn;d_vy5D+zOz z-+U0y8L7Z{x!Z8BG?Q(%&GRFrG`C}+wkvLqD_T)Qt79Wen}4s|y9Wj;tZX+~->PSm z)Kokzxjo6;Q(|qNKfhw98o4I* zdcg)XkvtHI8#6>-TtsJY@E^OHe%lQOCc0_f=louPQnf zZ%BDKd|E`bV&i3Ek72J2pHv9-H@z2hT!<=s3m+ZOkKumkv|OeAm;H0P8JU)td$T9@*;Hq5ZRn%w56fO4LD1wQU~jGw-&lzRm1> z{Wi^VU&=Mi*ZUK{DU`>KHjpVVw#;mT$9MH3M&(zM*Ato!wTfj+>&Z5ycjl3H26W3` zC-c@P>BU;Od%FsgI{OQa={%!Zf7dbY87RxqpCu~nToqJjUZzc%K&c9;Ax0GA0fM;u zC^*L{@WHlq7egvG1wEUl!&^~?LK;>iZoHy3obs=`8WSFtA;OsPj`TH*xY%{EEOl!l zN`L-tl{BS`0ky?+DQ4WHOu$5gL%>t#w!}0d5d{|ZBoy~93RDI)#&T!Ah!EH5?9$y^ zz3%qj5H}J&&kNxyY`CxVInLv|tV0`x1N_mZ+z4#_^|w{d#xinR>P+MWZ)3iS^xUEm zDb$d4r~ZUv8n{gxA)&>>dx3c`v~FdE#_tOjJc|2Yo;|l3a&D^knG`5anS`ZvCu8bS zbirnx*n}t2w&KlqZ3jjrQhVfn2ljEw+ymtFCxy{l+}6%y?&4PPs8ymZw(M1NKfmwILk~ zS}vj%I>7^2Z4VENO15h{+ehp0GS$988WcjOD;nGwA0T;o7cVBQUJ@8wRVg2+pb(tg z5F^mKp76+h((aANi%R9UB4cJk!lN)D54v`VoS=!z*KIv zh^)}ox+mfqnj4Nc9TS35&ILLN2CfBoWN@znGCf(B3RD$Zf&q%@e5O3QPDUPj)y9sL5dkk zSp0E-H8YyCy@i~tSOz^ZM72_n>IKwo#B$lJtkC7hUx}+FTO+bmk{l+lV#qd1k!bjH z6LLFo7U$_61gYn_;X|8U^dL?+YyjmlZ)(@nQR#P#R4u^fb+Eip2DHpKLmKTRo6>zxA1sgIWPp3@6?*5{7%PxiL9%qttMFPa+mN`A>V-vs zU8i-!)nrl&YKv!4&_{WRrNSN%lk(S?Wkni%4lbRIibDb`1ZSbNUGEhwatRGDN6M%z;O%^HZe8{?)VO~uWZES2(Vf;##L1g5sdiE(#v+?OipdD*G$ zn-U~9tOn4TC3X~jyQ^DSc4OD$nez} z92UKY^_F@F_sWuRt!`B!dP=>(){*iObg`-B5uxmz{Yy~4Iyj8S%G0lj-_NHDZCzZ# z7)KCAC*FrB;rTfoN#0rv^4oqPdl4-$1!p;UmHKqD3gQcFQd!W%0yCwemkqzXd}Fh^ zvn9?LKpWBi5Xz&|t_01mNo^x7zFe(A%`#H6MktR;cqAJ{0<6w0!N--z5Rf?nzS#$2x& z#7tjfhENu+jqt2vEo*B2GHlX8bI<4OZiKAZBE5@iz@ZOH^vl zB;||pl(}T#xy!fIiQo{6Iqu4ko#|iNLB;+a_2!-V%kN$iZ3_fq%?m~N3fJD0rh z<)^h&q(d&z@xm!%NL*kr=2mT>-5#!z4o8#lb{QB$`}*jYYOPypq< zLSO;YB}0jQ8s{y)AW*P~CjiZ}7?m7!yVbr&!!pI747$i#NYWF#L9AxG(9KW+nH^L)) zqL@*v$xMP1`J6R?lh#xd_5K()$Z>cfo&*M!S5j|?rs|lv7@Le#CO%E15~;b1WJ|@{ z%BVNokims%8CzyKfu8cU@BGdbT8eY7AZ}ningpNo_u#eHc11vEw)GNi$@oNNz}?u83Dfu8VgMv4o4(8ueZn)BKv7B~bb;q#)tdU$n{`sd(;8|yf^tPELVqYHEf8cjB; zPr9r>B{Ijmd#SP;v-r-@Bq{L#QG%ogwl6l4aG-4Wyy7-+i-~3K4wej0l{E(<1l56 z0!-1z+*I(4@5syYAz^{!pu$Nvu@Y@cL>~ppQZ_G3?8J_wjdyo;qg(IAhn4{mt5U*@ z6`N{Tt9Z4M#iI9;qj*1IIw*9Erx-n~Tc-_}E^<#3vi2A2Ve!CxU?dyxq0J%Sn{`wE z4z|b*f|&Pbt3HSN5x!w8e=ZUp?KbY$lOC*wq!0B zh)lxBn$l`l=ERUXl#Kf-YHwk=kd&D0e0KAk&=+3t&y!3R{;cp9q{Tg>QEA5uGhlm` z+R{?#nK2HQe|w@?=UjdGH6Qo&HnWErDbGi4FEa{C zI;U+?m>FpbN;0=A>NUJyMTs)Va`U;nxL6gK>FJjvcZUvFF`NJaOEbQqzaG8h&ijnf zGBlGZ!onMQF?Z+$e>v=1@cc^WfjfE0o1$#e3fDQT^qq~Y|K(x2 ze?EN2#){p<%+b`zfZbi+Sl`~lRNq|xUm*6KL4o*=hcMT7)@O4tvT`=E{{@GNu#)L; z{c2_!(Izlp@=<@fnEs#PY=JVnT3HsW4J!^_!tq+Zjk_w)XnjUr>xraXBz>Vb4_ZLS z$fL0v5W#|j13pY?G&(5VyCeVrxewJ>P#6W}P(gs%(h`OtJ`L;C@ zezMUveqomxK$25#{~DdLQk~+Hw?CC0wYtAf(FJvFrt9Ax1dglmop)|V9`3eIK%OCC zI_FWD^_Vv}&f!b3Qv#QMY;fXZgD{o(UZuL}Z%%f&kG9vUWW^qPFcW@l674Fu&Lr}= zoGtDCN6kh&gOC8S+;78U*`}G0u-02Cd7V>E4!NexY)c3J3q0+f29P(Jc z-RUxFjI%utwyy08UnNQZwy@;G$>#MhYT_wv16+4>>^^&tYw60q5I#Srz9RNjX!MZA8lS0~fg%>N&a!l5zZv1e?BCLK_tMMTuqi@ll(q zYs)Fbw9{a>=S^hhxPr96S0-9vZltlhw-L$l5QGY9@;Rir z^us3ye0Y95RB7J@*$NPxiN0h93`r;8+ILj-pT?4{y^XDry`!0t16FGxy6+{N`{O%F z6Se(es6+(h8IE%^7zyriP`Q?;hzni3gCcjmz8JQPg{vocea&p6%xTVy@X37rWrkkzN@%4&Fnz{J96Am~}J0Qh> zt=At^(wC1XQn@$s+6JghE6~s!hb+J^%$pS$<^M|bcUO`ES|0GmcRcvguBAXX0GtTS zGe=uzj_@?#;x<;cHV$TvM(_X_kQ+vpz)X5PA1gHf!(E^<^8hE$k;+hzoQCh9GDjj; zgL?p5>zk{|07vIPIF?9H!|``WsuOzII&7?^0N@Y-2cKL8c$YmIPZ%sJaA;RJ&+{v%;W--U6^ss!DGEoAV~+{CBkz z;Nf%WpSKc>MaSK+wb&ZomY{v0c~{NU4qaGqwj6L>)80FXbP9RzcNk95H~ zWAC28d3@s^FGBFq3OJ36_y0n3JUZAO367o|ays-seWilUe&EQFp{GMWSYZ5`qW&l9z}o*`mjcJPGvr{u4cwu?yE1Sh`uP7wbg)MQC;F$x zYF`=uGvOfY?Zqbkrg}P5&BJvsV09O;cKGdHWkAYSKT-b3Eix z)%_v-@yh!{0+_e@e}O+x<->*gQ|AL#Yrt<8 diff --git a/src/qz/common/AboutInfo.java b/src/qz/common/AboutInfo.java index f64da83d8..edc1cb6ed 100644 --- a/src/qz/common/AboutInfo.java +++ b/src/qz/common/AboutInfo.java @@ -26,8 +26,6 @@ import java.security.GeneralSecurityException; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.*; public class AboutInfo { @@ -110,7 +108,7 @@ private static JSONObject ssl(CertificateManager certificateManager) throws JSON cert.put("rootca", false); } cert.put("subject", x509.getSubjectX500Principal().getName()); - cert.put("expires", toISO(x509.getNotAfter())); + cert.put("expires", SystemUtilities.toISO(x509.getNotAfter())); cert.put("data", formatCert(x509.getEncoded())); certs.put(cert); } @@ -144,13 +142,6 @@ public static String getPreferredHostname() { return preferredHostname; } - private static String toISO(Date d) { - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); - TimeZone tz = TimeZone.getTimeZone("UTC"); - df.setTimeZone(tz); - return df.format(d); - } - public static Version findLatestVersion() { try { URL api = new URL(Constants.VERSION_CHECK_URL); diff --git a/src/qz/common/SecurityInfo.java b/src/qz/common/SecurityInfo.java index 660d1ff05..c88b8d34b 100644 --- a/src/qz/common/SecurityInfo.java +++ b/src/qz/common/SecurityInfo.java @@ -22,6 +22,26 @@ * Created by Kyle B. on 10/27/2017. */ public class SecurityInfo { + /** + * Wrap throwable operations into a try/catch + */ + private static class CheckedTreeMap extends TreeMap { + private static final Logger log = LoggerFactory.getLogger(CheckedTreeMap.class); + + interface CheckedValue { + Object check() throws Throwable; + } + + @SuppressWarnings("unchecked") + public V put(K key, CheckedValue value) { + try { + return put(key, (V)value.check()); + } catch(Throwable t) { + log.warn("A checked exception was suppressed adding key \"{}\"", key, t); + } + return null; + } + } private static final Logger log = LoggerFactory.getLogger(SecurityInfo.class); @@ -44,19 +64,19 @@ public static KeyStore getKeyStore(Properties props) { } public static SortedMap getLibVersions() { - SortedMap libVersions = new TreeMap<>(); + CheckedTreeMap libVersions = new CheckedTreeMap<>(); // Use API-provided mechanism if available - libVersions.put("jna (native)", Native.VERSION_NATIVE); + libVersions.put("jna (native)", () -> Native.VERSION_NATIVE); libVersions.put("jna", Native.VERSION); - libVersions.put("jssc", jssc.SerialNativeInterface.getLibraryVersion()); + libVersions.put("jssc", () -> jssc.SerialNativeInterface.getLibraryVersion()); libVersions.put("jetty", Jetty.VERSION); libVersions.put("pdfbox", org.apache.pdfbox.util.Version.getVersion()); - libVersions.put("purejavahidapi", PureJavaHidApi.getVersion()); + libVersions.put("purejavahidapi", () -> PureJavaHidApi.getVersion()); libVersions.put("usb-api", javax.usb.Version.getApiVersion()); libVersions.put("not-yet-commons-ssl", org.apache.commons.ssl.Version.VERSION); libVersions.put("mslinks", mslinks.ShellLink.VERSION); - libVersions.put("simplersa", null); + libVersions.put("simplersa", (String)null); libVersions.put("bouncycastle", "" + new BouncyCastleProvider().getVersion()); libVersions.put("jre", Constants.JAVA_VERSION.toString()); diff --git a/src/qz/installer/certificate/CertificateChainBuilder.java b/src/qz/installer/certificate/CertificateChainBuilder.java index bed3ee977..21dd9bff0 100644 --- a/src/qz/installer/certificate/CertificateChainBuilder.java +++ b/src/qz/installer/certificate/CertificateChainBuilder.java @@ -14,6 +14,7 @@ import java.math.BigInteger; import java.security.*; import java.util.Calendar; +import java.util.Locale; import org.bouncycastle.asn1.*; import org.bouncycastle.asn1.x500.X500Name; @@ -30,6 +31,7 @@ import org.bouncycastle.operator.OperatorException; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import qz.common.Constants; +import qz.utils.SystemUtilities; import static qz.installer.certificate.KeyPairWrapper.Type.*; @@ -96,7 +98,7 @@ private static KeyPair createRsaKey() throws GeneralSecurityException { } private static X509v3CertificateBuilder createX509Cert(KeyPair keyPair, int age, String ... hostNames) { - String cn = hostNames.length > 0 ? hostNames[0] : DEFAULT_HOSTNAMES[0]; + String cn = hostNames.length > 0? hostNames[0]:DEFAULT_HOSTNAMES[0]; X500Name name = new X500NameBuilder() .addRDN(BCStyle.C, Constants.ABOUT_COUNTRY) .addRDN(BCStyle.ST, Constants.ABOUT_STATE) @@ -107,12 +109,15 @@ private static X509v3CertificateBuilder createX509Cert(KeyPair keyPair, int age, .addRDN(BCStyle.CN, cn) .build(); BigInteger serial = BigInteger.valueOf(System.currentTimeMillis()); - Calendar notBefore = Calendar.getInstance(); - Calendar notAfter = Calendar.getInstance(); + Calendar notBefore = Calendar.getInstance(Locale.ENGLISH); + Calendar notAfter = Calendar.getInstance(Locale.ENGLISH); notBefore.add(Calendar.DAY_OF_YEAR, -1); notAfter.add(Calendar.DAY_OF_YEAR, age - 1); - return new JcaX509v3CertificateBuilder(name, serial, notBefore.getTime(), notAfter.getTime(), name, keyPair.getPublic()); + SystemUtilities.swapLocale(); + X509v3CertificateBuilder x509builder = new JcaX509v3CertificateBuilder(name, serial, notBefore.getTime(), notAfter.getTime(), name, keyPair.getPublic()); + SystemUtilities.restoreLocale(); + return x509builder; } /** diff --git a/src/qz/installer/certificate/ExpiryTask.java b/src/qz/installer/certificate/ExpiryTask.java index d00c83ea2..1f4f60fd9 100644 --- a/src/qz/installer/certificate/ExpiryTask.java +++ b/src/qz/installer/certificate/ExpiryTask.java @@ -18,6 +18,7 @@ import org.slf4j.LoggerFactory; import qz.common.Constants; import qz.utils.ShellUtilities; +import qz.utils.SystemUtilities; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; @@ -122,26 +123,26 @@ public static ExpiryState getExpiry(X509Certificate cert) { } Date expireDate = cert.getNotAfter(); - Calendar now = Calendar.getInstance(); - Calendar expires = Calendar.getInstance(); + Calendar now = Calendar.getInstance(Locale.ENGLISH); + Calendar expires = Calendar.getInstance(Locale.ENGLISH); expires.setTime(expireDate); // Expired if (now.after(expires)) { - log.info("SSL certificate has expired {}. It must be renewed immediately.", expireDate); + log.info("SSL certificate has expired {}. It must be renewed immediately.", SystemUtilities.toISO(expireDate)); return ExpiryState.EXPIRED; } // Expiring expires.add(Calendar.DAY_OF_YEAR, -DEFAULT_GRACE_PERIOD_DAYS); if (now.after(expires)) { - log.info("SSL certificate will expire in less than {} days: {}", DEFAULT_GRACE_PERIOD_DAYS, expireDate); + log.info("SSL certificate will expire in less than {} days: {}", DEFAULT_GRACE_PERIOD_DAYS, SystemUtilities.toISO(expireDate)); return ExpiryState.EXPIRING; } // Valid int days = (int)Math.round((expireDate.getTime() - new Date().getTime()) / (double)86400000); - log.info("SSL certificate is still valid for {} more days: {}. We'll make a new one automatically when needed.", days, expireDate); + log.info("SSL certificate is still valid for {} more days: {}. We'll make a new one automatically when needed.", days, SystemUtilities.toISO(expireDate)); return ExpiryState.VALID; } diff --git a/src/qz/utils/SystemUtilities.java b/src/qz/utils/SystemUtilities.java index 7212708d1..178b66087 100644 --- a/src/qz/utils/SystemUtilities.java +++ b/src/qz/utils/SystemUtilities.java @@ -23,7 +23,11 @@ import java.net.URLDecoder; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Locale; +import java.util.TimeZone; import static com.sun.jna.platform.win32.WinReg.*; @@ -37,6 +41,7 @@ public class SystemUtilities { // Name of the os, i.e. "Windows XP", "Mac OS X" private static final String OS_NAME = System.getProperty("os.name").toLowerCase(Locale.ENGLISH); private static final Logger log = LoggerFactory.getLogger(TrayManager.class); + private static final Locale defaultLocale = Locale.getDefault(); private static Boolean darkDesktop; private static Boolean darkTaskbar; @@ -55,6 +60,25 @@ public static String getOS() { return OS_NAME; } + /** + * Call to workaround Locale-specific bugs (See issue #680) + * Please call restoreLocale() as soon as possible + */ + public static synchronized void swapLocale() { + Locale.setDefault(Locale.ENGLISH); + } + + public static synchronized void restoreLocale() { + Locale.setDefault(defaultLocale); + } + + public static String toISO(Date d) { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.ENGLISH); + TimeZone tz = TimeZone.getTimeZone("UTC"); + df.setTimeZone(tz); + return df.format(d); + } + public static Version getOSVersion() { if (osVersion == null) { String version = System.getProperty("os.version"); diff --git a/src/qz/ws/HttpAboutServlet.java b/src/qz/ws/HttpAboutServlet.java index 0dc672f34..802ef3fc2 100644 --- a/src/qz/ws/HttpAboutServlet.java +++ b/src/qz/ws/HttpAboutServlet.java @@ -44,7 +44,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) { private void generateHtmlResponse(HttpServletRequest request, HttpServletResponse response) { StringBuilder display = new StringBuilder(); - display.append("") + display.append("") + .append("") + .append("") .append("

About

"); display.append(newTable());