From 586d0f517492a33faaa77912a5a40d1272534602 Mon Sep 17 00:00:00 2001 From: plaa Date: Mon, 19 Dec 2011 05:00:30 +0000 Subject: [PATCH] guided tours implementation git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@235 180e2498-e6e9-4542-8430-84ac67f01cd8 --- datafiles/tours/designed_rocket.png | Bin 0 -> 50859 bytes datafiles/tours/left_design.png | Bin 0 -> 19147 bytes datafiles/tours/main_window.png | Bin 0 -> 60007 bytes datafiles/tours/rocket_configuration.png | Bin 0 -> 17714 bytes datafiles/tours/style.css | 15 ++ datafiles/tours/test.tour | 18 ++ datafiles/tours/test2.tour | 16 ++ datafiles/tours/test_de.tour | 6 + datafiles/tours/tours.txt | 6 + l10n/messages.properties | 13 ++ .../gui/components/ImageDisplayComponent.java | 124 +++++++++++ .../help/tours/GuidedTourSelectionDialog.java | 197 ++++++++++++++++++ .../sf/openrocket/gui/help/tours/Slide.java | 73 +++++++ .../openrocket/gui/help/tours/SlideSet.java | 62 ++++++ .../gui/help/tours/SlideSetLoader.java | 173 +++++++++++++++ .../gui/help/tours/SlideSetManager.java | 134 ++++++++++++ .../gui/help/tours/SlideShowComponent.java | 72 +++++++ .../gui/help/tours/SlideShowDialog.java | 160 ++++++++++++++ .../gui/help/tours/TextLineReader.java | 120 +++++++++++ .../sf/openrocket/gui/main/BasicFrame.java | 21 +- src/net/sf/openrocket/util/Chars.java | 3 + 21 files changed, 1212 insertions(+), 1 deletion(-) create mode 100644 datafiles/tours/designed_rocket.png create mode 100644 datafiles/tours/left_design.png create mode 100644 datafiles/tours/main_window.png create mode 100644 datafiles/tours/rocket_configuration.png create mode 100644 datafiles/tours/style.css create mode 100644 datafiles/tours/test.tour create mode 100644 datafiles/tours/test2.tour create mode 100644 datafiles/tours/test_de.tour create mode 100644 datafiles/tours/tours.txt create mode 100644 src/net/sf/openrocket/gui/components/ImageDisplayComponent.java create mode 100644 src/net/sf/openrocket/gui/help/tours/GuidedTourSelectionDialog.java create mode 100644 src/net/sf/openrocket/gui/help/tours/Slide.java create mode 100644 src/net/sf/openrocket/gui/help/tours/SlideSet.java create mode 100644 src/net/sf/openrocket/gui/help/tours/SlideSetLoader.java create mode 100644 src/net/sf/openrocket/gui/help/tours/SlideSetManager.java create mode 100644 src/net/sf/openrocket/gui/help/tours/SlideShowComponent.java create mode 100644 src/net/sf/openrocket/gui/help/tours/SlideShowDialog.java create mode 100644 src/net/sf/openrocket/gui/help/tours/TextLineReader.java diff --git a/datafiles/tours/designed_rocket.png b/datafiles/tours/designed_rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..0accfa23b443c80bc14e7db960889a19a625efdd GIT binary patch literal 50859 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 literal 0 HcmV?d00001 diff --git a/datafiles/tours/left_design.png b/datafiles/tours/left_design.png new file mode 100644 index 0000000000000000000000000000000000000000..4c496d50c35153ef56b4d61d501d8abbe00b0e1d GIT binary patch literal 19147 zcmb?@1z1&4yXHX!K>-Ps?(XhBbf>F!ceTDoDD|37o*-kE#v z+?i*N`W)DB_Fj9fZ++kUz3;mXQBsgZd4c-^0)e1NONpsKAaE<--+RO-;7AI8R5W;d z>IjuqLqtSe{H6F4e2e2GuIZ#|XX@l?=wJddv$eA^VQ~E5U}9qHXm00p^t3||0wIP- zi;1YYr5!B0>SAs`LjG*C5`RQPq|VA})C^&L_Uw&_a#)e3#+&lcQs=3X`zE^3+{otg zTxV6u?n=47u4poC z{2UygUlCPjPzca5GEPWcszplV;^5%S^EoWK{?6($rfpIuTh07=50T3Hfu8>cCZ``B zQ?<$QL`2_qWnJ=>d+XuI%`$pHPb?ue^v%2JM?sGtzml}->s}*1+fXIVW@e%~8utsj zzq{j|b24I15!FOTe1@}Qx4!;ihrLYnIUa7h{x)rduW!lh?Wd2UmBq#A%5JZp8kd|t zr7jMMqHbCqi{YkZlIRbX^!oHudaYyGeZ&KSp4U$#SJ^2xu6xGt!v6H?R$=K%I<`mD zv0N$Xj2!k&!_V59*XpZhNq%nbWY0{bg4vxn*UC~S)L>Qk_=MKoSLNY8tGfDRcyIO< z;nL{f@S7I_DCRHO0gX~>nrh}I({rK;pBJ=ru&@%RW~Qc^@?=&r z1}CnHTu9~YBRK0`<7@k z*lK`GhUFmi!vu?rgn2Ks9QErp?oMW0iCn|sH3KQ?*E0U5$X)jMX3W@bjy%t$j98Po z8C6VM)UF=Xwr@WP6JOmPE`QAK()DcQXy+O0c5-rRcB;#r#74S&AUq$|bkA<0iK6bQ zWsH>WrWPmSviHZFTBXavq4n}DIlUJq$1pMTwO($PC&PP!J2kS<{Kp}?n_5y=l~7q` zVuG8Ji+$ZFrCRhOX?2aG?Mh>GX6ERWAunIc+2L~OvGa=nXj0!8alF6m&Z{h$f#Kmc z_w}u9vVr-*!P4k-<-m(xmVnqZ?oQa7)-<((h)ONYM&~_sUEQT{9JaFZa`-3TL*LLn z$ja{h+FEJjQ=HU$s!hYmd3cz9RXkZxXEm#!q*?>(3VfV+IQ_k|^YeY-MSUGxWIsXY zPZ_s|wE#~=Cc#W5<&3nn&b>oj9i37+iu3YT!xZbFhufnLWQ5%2=H_-fLH85?VbjxV zFXuBEmJsjwq^phT!9=Usin{vxUi8kSq3Kjk=dU||{``6xx^FBD!+731Svb1V>fYus zT~cqexP~~69Zo?)f*Of>d9&bxi#_Er2ZeUBMp~Ud^`f*&Q>fdSxxr$_v^K|#Jh${FLegI zd_~A#G&4f&N4l&ODDw~%cc&5a=L$B#g<1Fuv5#3Uc%9VWA90@B9UHqLBBZJOgdtwZ z3}043dS`1xMXx+XIg6i%ho@%iZftR}Ff}%8$gotb;Z0PEkd2aw$>u(fqqo=1N<>r} zCJ|n;XS6J;>$ufcoeXv6{Sg2Q)+}!mnWOD1Ox z%gr3_C&twqL&f$Stq9L}n zwb?CQtqogz{|vv_V8=v9XLW~aQ32LoNHnr8`mm7fg&{UdmpP)S+|a^!&}gNK)n2#n z(__VK;z*LJngGkshMJE)_X&*p{u|xTLo(?2sZQNfSywv1necdwp2hZeGY^e_|32LV z-*+4r_nIn^aN0{Sa=odkX>~Yldb0Ggh-HQ5->Wo~Jyt)ru}YV%t1um~L7 z#Y-Xece2oAfO3OBq{!33Uot)s66DfxU*V3~IyjsRj_w~E#Ov;jWsBxYL>T$BEAB5f zIfARNbof5{KHj_D-#9ZS($$1~`}U2uMTA~eO|8~+I7KuFbvQ%7bH3W7o0ZS?(8XYNkx9#x&w&Q-(AuG&~%+O&#C=3u>T$W)w9^;4{*^ z($O44_Gv<8)|MRNNN`v3$-D$48|#a!H5!@0!K&PmnY`Xxd+52X9-fyM7g~QNJ6rF( za)jpRdDz-hrNx?JeFONK&WP9K(v?yBV5+K<(PZuQRXZPXaZ+G+zL`(T%FE>B`wGGR{rafo z+&+K2-K~G`)-oY6F_RmXqnIh!oe8ETEHspsme%9p&fUUd2TV)w35{w2zwZM-2}yQi ztj_phqVqsx* zcwL_yEH)%3Cl4kvNg|%_%^rbo0YE^^PUW(5*_oiAqzt@jvs-O1X&(2w`tz%9dVVLM z=miN};Ixq@N@oc(eaAC4(+d17Xr_BxX}PKUhq} zFH}uy4gLy(Wx7-&3=0FMm5iuD1@dP~$-Zkq5pLHNwmO-MSe?;(qH4#fui1~PX83H( z%-mjoAW-UynPK0<-Y6V4+`eN@8||Zoru!p4SoHR2f<|1WUQ48=+jZ!h-roI17Osc6 zhRc)qQmGwks;bAh`6?N`{%)hHNPONOESuI~B7bW5Q7OFeIo&G1dIAp*|B6uX&Tzz9 zKtMnh)$AlMM9duqJ1*C0*uLkU1u-sc;5*T6hKB&1g!7iUT*@v){RCLlgcEiFAZ2jabN zFVF)-1Ce*8iZP)@@~NDI2@GULM*8|I0WYy!4wo!UOajn$mzvmcUZWBT@_XN$)tHTf zuXJ;KFfn7nh;k*PFcv-c=c<1Ge18moa(X(NDb!)ug#bn;D%u7A@~xPd7_onNM1-EM zuI+O3J8kWhl$2)U{ur=er2a-mMt662xUFpyF@(#NC9ehDqkPe_p5SkWjI}&DW5I0m z^jUAgnN*wm!XFqIxIL0Cn)$qD4HFA7JBmnXYkPZfVFAPU?+qCn=jG?0?@oseZjPjI zlr}bMdbxuP3a-eY`BnIPtzS3m%*+h^TRIvV8WxuEkrC9sV+z>>>!rr=u`wkNJx|YD zv(XF=pHdDAa&luZF(AbB+P&Ou{=N=Ig&tc?hjDXsDdh9W17{KANDUcbJ(JzAfyF|E?1M-5`zSw!mY91v?l z_`)}Z0U)8af0%uEAc_A%eVt~z6AP4@iRoyTVKIST&*h{$v#yQ8;5vib(+^V*xjOZ=0lx5K0v;|PD?2mZ3$S7|CEezIQk|5IFeUZR#xeH1U{?P z^jT(U*#o5gj(2o^w)`1pikAm`E(vi7U^Sh_J2Qhbriu#+0?iRg$kG0wLn{qBjH)z2 zwE>Zk%Hz0|FFTHyT~t&Ab}!h|GSsg_#d1nYN(Kf(U5_Tvq3Y`DUJs9^??YsKt~V2_ zKJ@YOIAi&Svio?Ao$avAROp>vuKHrVc?16pdF!+^N2r}0sA&-r zr|0KQKKISp+1Wusl8+DfZ<+LUH8t(QS0M0zSW8KRX;?cY2}`73sJFTQEghy`SY2WT zL+;~EA~`#zRWO^HnknM!$cc@`JPxa=addNQWGw|Sh}d7d&QknN`q|oSr9oeJx7xdR z-j~a+VOUI{dI&*_KSCdeo#t_KTmaB)it3ma?} z>oKVm<`x(6u(6-P!^bBk>S$|MXxEhhy8?k_aNYBR67pXJ@BG zuSp2mZeiwIusL8G4Ud<*gJd#dW{8%SXcfJ>8t0)OHZ~U;KCDL)@I5fDw@HzAijxXv zj&5sUDvxw`Cj~PUn4X6@Y-EtkV1(>8!gRkgP-RwL-#cX4n3{6>EX`>-ZpHZ7p*vaz;CgU<8tWDd%sLD78)xY*ckt529{&+T2!Se@67mLkH!h`7HgN=j}I4s5Eg z9d5m?wyevJ26K)V)Ma5~dNFH&E@53CA^$vI$o>8(*Z;~4YBuFiTNM{22|}*)6Bc--gvWm;^h; zg8V!=J>3SXK~ET#WEA1BQB}9lPOZfx0?FC$aZy=W*^tPan;V66-r?@!Bxz~s^ET>$VN){yfx$r(WMnjG_bA9@yE}hh_gCvtss(Z+3G4v3JV6H35A1 zlUpC`;@2$j!-l z%b-n<5kk%@nmhjabML|8rKhp+RCma#OzmH6@$uuwOkaIvO--p*mZfIrRLugAo58&M z-k&E{Rx+U%yYA2Jtgq+ZT?{O~Y?Klcghu(=|DFk2WD7Q2*h48duw^tG?|j_bJCK)b z^lLkqcf_i8bm&Q>B09HHBZ0q6)%r&jdH|WJI};?Za_u_OM2)XGtS#am$z%U`0W=#E zgF!?@TK$?isK(pR@=VWsb@x@!!dYY=IABOv1r4zLA9tW}w zd$bjtmzG(#ynkpVtY8ehK|sB5F&okUG19NPi2lwMpN*9jiU{hj_s#0IMwnO*xHt<= zc+~v-^H)S7nGdTxj3WxqQ3*>bDi~>L1!1iC(^Lb$xJR~6tw7#@dbJDRM52WF&~c+& zb!ez)XmIiHnC#Z#wBJ9E#O5f-$uT-eQL5%$OMFK{H!v`8_cU-gneV7n+*{o84G3cU~J>e>(* z8tM^X8nXU|#Q4MHcxPwzhdzbkVhga7dtj{qXP0UO`CKkvCM4K&+`Ft5DUUDeLd-Cf$Yw%g0c z?8?fc-G#1+>Vu!(;XtVtYl@7FEG(o7>v3>$`UYz?5L&ISW+j!QYip}^f$J2%D(u_s z8f6pw`3oykvL`RS{bcRCUpOC+M7OHJ^=*gu>B7PSEyKY(TOYWl7uQ7^xuNJ}ap0QL zLIH+zSt5QQghlWA-!r#gZ>54XkM!(wOiT;_jIVIngWYyBeIID3sf7_i=-JFy_pGiO zG;{V0f`}Xh>AkC~3)H|KBXMzYq<~IT2QAQifv1t{_cv3N)j;Z;t10#!o+? z^lQJG#baU(C6bgQ*5L6tE0Ql{`PRnAu^}6AEVYWdKx2NN5e2 z7HU3OAWx;30RYX^I`2JKTHdKBLP2)V!>F}KnYFyA zBCW-Twm06Vhu7i<3)p#P@eiwkrH>}@_jrOCx|>tQsy6fsC-_b5yuB>Nedzf~&Fgc+ zsVsc12kqF-`tRPzbW;cHM0^R?Tp9Ywt+087VuicL=C`G8BO^pP-#jFN%!x5gtoD1X zrtr#;+5KeW>2p+OY~)w24LNHVAL^C6aGf0-z@}AEYV^7HFxpj3@$(by@VN)E7F=wo zr?)%|W^kod%cu$fS9+~#F%Rdp-nTvA*3Zt*qX_sU9(In7m;`uNKtBZfH5$T1BvSn1 zi`a-KYm#cI^;bib>$X1U+FL%~b$ow5)3*6jTOmWr z$&1UCG0sbiY^6^m zhp)C@eox`ho!+jjok%nz@oGuB_2C^f2`9ed#FNSFR(03OI2h(%#O&a_M$fN<$pM}f zmZnfhhHS-oio=fJr%))1j|Lcb^V*Y>Y6+igUU;McXtTqrzr?;j>%0ADCb;>NJAZ7- zQ*vU`db&%?vN9+Ib6$^Ca8nZG8t)6@rrTOt(*D%g`@KuLYZr@Qk8W#fNeSaOWKUs9 z)%%jUde@Fo{FQjLJ1KWa9*uSh$(d6ocbuM{UdZc*<)cX_+8Db%J{E@uG&hSlsw zK*aK2IN{KC<71=Ze5F$LazNr#B^TrP^>h}Bn?Q&XL_?$I@pH|zB3890#wUOE6de_j%y}{^2WS8cU`Dt;bcU3giVW6 zo%y1AGF`J;HD;V$oJ3(^hqoi$mZ^eEy*iPGcA@ueua8Rh zJOE!y5!oN6%nD@_(a=aN&J|rcoKQ4%*XkM?=+YXgjdqsM+;MDP zIe~=slTvmcD(Y2gfX2UQ?M+>Sll^7Fi-`I*4m6wo>MD#JVa@c?)lL(vJYpF3S zJp3}{Q1-O2H1~9UscFK@@8=JVScJeW&`0tJ4IRuC*QB>~6&UzZ3|=1GwmBwNEI0G% zb-+Z$1*T8~0s^|ZHnDMVNc>M;zF=R@-8uqXeo@hnpFjIwVlhlP8E7+dpG@a{%66YF z8M{1M74l4Rx>X-44pya7NE7>8yaUQ~-M7w)^JNo;?hPwsZl#^^Q44EpUz3R4v2T9c zB(*fNwhl)-xxDnf->n1FfC8xT+o^bG9F>2H4l>;p#9 z&BSETPX6K-xc$I1grOfl05sAtLkr`>e-ByAF;b z*q=n_y;gn!j^$iaMnGiWgdd%qX+pEj7iY>-4i&6vUu~~AS88UWmQ!bl*X<&tkgl9{Ei%B z+?<`uHA;3IDiD;EE|Y$EiAE+IL^zDy7@8aZ2@YD6Qyp_vlatd4 z*sOq63VkKbInWdMqeV!FBG%d3nA+M_06N~xYPLWgPmh40#M`c^J3b=|>6@UP(buk2 zO;M;LAfrKRmr>{?;~pJzvNS%f9N@i{l+@~Tk4r+15rPIaCN9tx141c>g_OA|Gxmp$ zYtzLG0?^hG33_qc|NPc%*YVCU6D%r^)kPX;Z(rea7j;^KQR=W8SKyF<>CuC6->3 zgLqJX8msfb1cfZ_Sbb~LR6_Yhz*xe z&r!Tl7yr)40ed&h2^8Ot7ct(s^#~p8&)O@WK_JGu{Dm~5F{;hSjVSs8yeF+M_<$;m zJ5|=cX*@B7lX3{u?IOq!$6u+~+}oU!!%Ci?eHk6(2AuL&!$4B*7M&yja&r9m&0h(5 zII223`Ge)m*XPa!xG!G3aB_Cu9!@RXH~~#3Xnj#^8QIukuTGi^qLY&?OigE=-7B|e zOiWBf;Bj%bi$k=tJan^_HNP0FF4*a}sI0#0p6BCUa5)G?OJR4P0IQFy`Ud*DI|LJe zvdG}zxmNd@$Vi3s!3K-Tt&w!T2y3-4!~iI7dPV1pkg-;$9hEmTNWw2gc90^}5fGG> zqru;Zs6oVRGRa7K{nkd%b3{i+vtof>Jhr^t=JIg4N%wGTIJN&5$?;&xyHb9BeqPr@ zd`!$5uWN@_uc8340)NgKTS+emwzqj_U9W=qlSlV01-IAMKykyBOV5>fQrveT+=9ub^JfP03qSw z;U7OjBqb%Os0y9;W}^2_uI~U3Hj*i1K#tLG4I4@00XrX@OThD@>~<3l5=^F;OXKsC zyJ90|Eh-q(mv&Xm+PX|EBtPHeNWTpM75mH86)e3ph+rXV@bc<-y+W^LjT?;q5Wu@O zVP$1>zwgxa^yCkq+Iu}d2&4}8!tU;GFaIIBtaJNp4dHlu-vef1joW8;issd;R}P=p z%tn54w*zDib~9!`_bzuN2>CytLFqo~iz0f3i1@|4ZG_Suf7_v{P%)D-C5hSaiSqB? zzop&+wwBghp;ZXuATTJ1&b)JQ&A>y;}#HT13>-aaCvcXkPgIO-})OYEHhJ6pib3QS7UU21^pXXx|0(J|1qEh zEiErQIy$nkvGKX=|JXjYU|#^*)ALt^cZbV-4(C7B( z$Iiu-Xb#Q!3Rs!z>+6#gvRkro+d_r(lG0KO_LLz?PymOAhv{f(v5^s)LP50kMG}ZY zp+Nr#LMzb-gFsA_4sE}IxRwyt+n+05A0glizJBKG`v{1O@g&}BuLlF)`yQhzR6_n> zGz`RNAa?IT>)Vs~otYk#Nfwr4z@*Wsm;D~g?gE|44>M6n>QRDXXXfg%ByeTAkH~U zx~FG5lesyhu7`8VdU_16U!X$)Q(phI)?6+fY#v=kzzebgbwNM?5OaHARPmYxt*!iY zbc55=&Ravtfc6GNVW|ctsD0h9UBtxvyPXModwYR=3Rs*z7(O705kZf<+k%9T+BY&1 zX`KV65Rn8E6B7t~Ie$Qt6k)AkiU~e)c=%T)q)ecprG+9IVqf$T`6eYNN8qqY5TpID zQU*;bkkWxB+m81VlBH`-2{s7|HaGSAA74xceIJ}BDQb^7&lI^Q3V9j2RC{D%4K}3jj&ue z9T*_=fL46s)(VDYyV9CW%@1^^7z$YsL8T=nxT|SHl%T5z`pwqQpFj8aTkTc_bI`iJ z0+x4vejXkHLH*ske(UJ2U*ULMBP%O}3QwOX8N_8+Rbcfv4qL*GX`n>x?kUa2N?l0;=qIQ+0Tz6 zfs38p>qJXfSeT4Yj>b}k;N2=#K%;%elo9y22m=@U;Ls1za9@oI-JQe36_C!7lCX__ zf$5%KSnzOjqt~eq$G()_K8)6v)pc>XIO=#L#K3?ieAT4?+qK`7G&HzMNJw~diI5(D zVdaU*qp6tzwg<2*Zu}W7Er5o60j1{Pm|j@80c;CmHb@efuGWKO>3-68j)6{_15VP( z{xUE0jaYLrr}a@Gf)>IPq{&F(e-Ji>RMJ+8^k2d6L>O<)M<+%|~i%YdCxLbwb@i-WR6x$ju6bqOHKGzDdOdMp1C_({ze0&h} zswyg^Z3#|mBx)Lwhjd`ti5 z_*l6b4@Igg&#fF_dr)jv+dOA`dNu*~zp=yjN%%`ljFGisPj1P!HhtKrI77 zNa`Ovt5+nkBE{o=*(we(K!vGv4$$t*7~pPrlq|599cyfij5dpw&|%+JsF@$uP6raLJC6lo;7x1+ti z8_2QQqCt69Uy|LVJ^=y?!K>$W>M&4=V9w59ag1x`#eM;G!sx>Xz-WKpbkHc*27;lQ zjt<>X40ke5(rdK}WDsN1dla@eiBBQ$aq@QLQ7?`V@*F&J2L@!;Fb`+Sb=KF`a&mH} zroL#~thO(M)jFPj4S~>(-87l9ZbxfR;`Q|PG3hnemXw4Jn*z~5*BhmH`ZN4X_GNg; zN0nMZ_SjsXx&kiH{(zT;!94&r75RT5b9kPks`|e7!iSz%x5(B)ev+{l8ECwXJA%<5+J*x9eSz^ zfxNb&$;RpW3Oa_h-39O~VNqH6j@-oloHh%_R#uB`p013EvR<+oPDndZLJvu7W~k8L zpuS=U3V2*OO5;JI|Jl)-G=Dx!9!E|&M0reW)fI3UJ9mu+a)u_vu zoMZ$z@Wv^G`f@Yjt_2%4m6$F`zUsm`sJE0SbI*aFEaY zrZzP-^~$F4`1m*@BZHriiJY9AhX;qG+q9;wwG~8kgUMh5NY%+nNm7ZyvrB-62AdJY zcv4al7!XiGTYVohMz>uLm$dZFH0fu)8g`*U!Kpx+V#UG+EfVy{@Gwf(R}j0T{vc-q z6di^}OHVH+D+@9yIh2~3T8j63K`VTc+*T6H2V>h0>3n}csqX%w<&MW`EhQ@(n_)@= z(CPW^o2pO1AyA=_4yk>{K+R6(|Ceb8uA7iiQ#2lYpcEvgrFj9wx<+V#+_kp0#%Vn_ z2B18^hH~k=@0!JOwjS5R7CVe4q`6g@plN1zrFQ z2*TFHb}&LxfZ0^NOjAVnb_pB=J9NjH@jr72MQx9fC8zlk;lX$V>AB* z2SGmv{8P=2+o;h|IUqfCqmEBc%Y)Aq{Q=f0K-vHtzqj1NbzKGg!yoZ+h1pUhwJ{)5 zVmgw;#=FQd+K%Rscq>8+X^0Z04a)F@pLgBX7=-ru-ve1Ddf5QwXv6(SM&$nk<24gx zs#-JiuNqT1AGr7eKG4b1=AQqh)KZB4wXOL-Kij|OgHAaVek#4q_JXh0fb1_Gi=Uhs zqfZ~D2JN$i$KT65$He`gw(0-t^MeeUno>szXfoi}E()Is+WLIQzm~ld3CO?!(1asE zK5qSoChh;y)dCCn#)K!X!#hzAW~CItP&aEi*k!lbLL>Prqci?q=DR;&JN`Wr_8UB}0VnxzV90nEM{sC|ft-?Oxe%f*wEfAkj6Ec%Zj z@5*~9A!|r}+_LUPR@0AE$g~~cBw_b!{+@+htJ`t+Sw(d`0#AMkT#6V8p$FpS@F=*@ zhDSjObmx>t6R@ukda|yI%F9917Zw@mbM{*qSi^uT2Cxj*^nucZquh~$o(Z3nP@;ld zjwIf`J=beE9)+6Q!rm((r?4s)e~ZY&^U$Av!{|d}+bk-{>!pL~C4`-!la^DyeSnj0Esr!+4ujm6WI6qh{wg&*#b#BJzsU?BO$<>e+`?YE*P zFs;d2!5|3{AHw4?CrS2#Mr?z&l+|YE;#PXhFS<|IKL9Qd^q0WUI^iU#CbuU!%_o}w;B>bZK!O}9B71J&gUt65uv$TV`I}*Rj_faTu`SH z7z_?KHl}I{!KRs>A}gU-pk*5@ieOqG4bVM?@Er=fRi1lrs4_zzI>aWC-h-a3Y%e z9GdO^wc|11#}Cl+bocg<_#-?=o^gu8mE|XGX&N_FLWWES1X|X6(*}ZDdlw)s4ksFj zi;MeEZJVB0SXkhxW@nG_3UW|y8E?8+Xk-p7=7y4+zJ6~5zW>JlSWt&f!lBC}38#iU zeDdYecrb4suZ{qJKt)xYnHM3;Ld3iP(&PF;QZmD?Izx(VWCsWD11Bdt9$rcnOScK6 zc7As{C4Dk$&3Sm?_qrq*z8Mu|{o1j4cD9%7-~uWj(s1)$K_0s0^@6KQKE4nO0UpTray;|iyd-d%Rhze!b2TZzi_4We#HRiN$0zs zo=!O=g=kw87w}~1S5F9fE5TSi&ZOd;`u^J;b!$ip#M9mSL{pKyl9JDme^Ry6$vsT_~qG;#bUMj<2v2_Sw z;e^w>ED`60_w<_mb#;}jttV^$9?dxWip%;5Qr_Ug05YC@@@I)~^Ur(fAUPJ~5@RBU zSAKen&HAj(4HTsDBo^}-`Z`YdY#j5LlXWY^`HvWy^z3$o9=8`^M~f@XZw%+KUR7Bo zjPFjPxV^2gLRb*HNwLDv^(wbzIBqr_9-mQWOP)rYz^kJ^k(i&*2>B+AXU+kDlCe6O zl-)B#3~*!#am;c7Hw8{f#k;VE#N{dN$1!AWYIsL7nO_5UBk~*q8vQ)!}{}zX_ll_0f zVgJ1Be?|3p1*YYHd06g08uPyaZvVt#(ro`0hfxg&|9`?^|Ae^!aLEsAV}jic1Rpht zJyFO1UIxK3nf$-5K-ZYl^ArUU5tGGw9kUUq#U{tE1-CgSC8bu9QG(~Y??}=klaqHI zkNcQCJ!{U+)+#$tsoqjERxmPbV!dS)K}34iN#xs#LG&0Y(FGOtmW**grJ1gnil&Qkzn*VE(0;Ep9X$wjs5)*3;&B_BA|Q zjzWf&O*SHeYb4dRr{5wos1I-|DmnZt$GN3@MEooILLFcC_Z@Qnth8O$*LS$P;cM3K z7bMSDiW&O&m?(|mP!)RX9%hh;DtzJiK{u;H|F&zi5;M>ck;Lxk0tbg;ZS>^2j!IE5 zm2)`Y>h$OLzQIIK%#PHg-_mO0`={?pZ9U!ae=oV4$ql7$4t@YqkkfwS`o%%R?&@nu ztzUiM){TtZou;z#WNG4gp0omJ{$e&MD5kw{U8H1E&Zjlfv6$LLUMr-z`CL03ZEVc9 zd1x`|x}{U6@p3p!7QnqC92%Q7iz$sF@^x7gE6mH&qM>o@jXJtmcEx%Vx4otA=1F9m zgQA`~ocb7@lp7o_XSJGfux1p3HZWRQR#Y_Ka!C@^;5wG|VP~gjf+H?Yt))>@(2aS0 z*5Ek;!ozfFBFFLVL_SxlIUXd7-zI&msIn^vlS~(`}+wgF?W;;Iu z5MRA-q?jsOBqN~$OwR4UM2w3$B{O=cVYds$!G9|N=zQNFGx z8`NuxY;4{iKFoX}sYlFa`GD_wYx}Wq#MkH}E(2{S|H#L0^!OZOS3qplQcy6HCz}W73bg`ky#P4;cD5SUU zaLJlnn}Rz&Rm`ZM@b+ZD(UDFfB6O^mCt`p9B-5vPrYbiib2Sr@L{HBH+KIeYoGY2R zKaWY={%0ipA(k?Iw7-~{eTv7$IuD`w<;ROI-0OQ{u1Y-|K0_6dsQRYLz7lt^yc3XB z*y&y8bUXk3<21Hlq-d5lIXRzyWo2zGe}GSr63aR3nd5b4>}QZ7OzG%O-I19FW=7+p=~G0Ee{Vih!o}z-r@h#llT~ocAr^ z!ooxE`oY1B&CzhGU2tbo5?5rTr(0{Ah=|$Mo%Zo2Fd_t@3Ru{6qz*2xuRD@+)O{)p z2K!TH{*5KkCx{ggekJJ*QZ;0ZLkkU z4k!EasR$z}Zz9kzUWkK1y~4*%NaJ5zZ0V}Exg?(f$@R1+j0dEN&!3y&pBtEKPGT|U z`P|oex2ZR|u?+Y2HhOz+U$a=xvDEyoI9=HEql`kv!S*aV$;Q#@ z=C3aLKX7(k&5Vf&Lz9so zZm3_mIMic-nxF5^!PZB9l)5Z8U%|hu!05nwt(KB}FC+GecM`9EC@U^n83WC}a~u{G zJK65Mx7JUxn8uShFmN?8(s8-({{D2UV|%Dcj6O3~)z-GXsk$1WIJsSLvNPwM1q~62 znu^MDT`5gfM1KC=O4}ltKLYaa*Kgt}+e6pFrKFnpCB1xXjMn<}+se?PshrDob@%0- zmw)p-NR#Sgiy+1IMQ);Z%vCe++^iCf?4 z%y(e_Su#$RM1%wKOV6D5Ey7_FDo{44IhX?~1^ylwKkrS)H(|bNuYuRw&tI7WL!^Ga zGG4=52;_yt-~Sh2$aAH&6p;j!(DS|f-bew*`JZM(|x7ehGL6V&m=#y0fy881~j$RG5vn zQ!`-^`(GSAy53#c-rUGJQz;lRn`1GC<1znKwA!=D&aRS-@`*sRTweG#mn8ly7X+T{ zbAuQs336zf^|udC(Wh^Gk*VbSJ{LLD&*g*Z4nr2b`P;VT`Lo>V^uA)u}}%OP*9 zJk6}l3fsmf(AnO6mmzq+G+bWp_BQzH$`y}uiGc|VJSL#@ho<9CcZdQDi(SV9@7+i` zO}9{n+`(c^(-LPQQwK6~EuY6(|HZ+Bl#d5l%n-5+7$|V`k_h^|s0t4W(H9R0|HT}X zi-m3Oy01AAjw67I?}m@bhEyyB!-!l5nMugY?FyuJ5C!Q%kGuV`x#sNjq()~s;#}%w zjU47mW=7W3@}~cs4N|hn;CW@1Mp7_Wn?OwNuG$g_2r~|AnUH_Iu8T2A!>F^SHapJqu-JBaME&&4Us0N2g)saA_wBt@E$rfSZNo_Pbx%8#-I( z-|vC!ZNGV2dAG+{6N^EBX=YkrphHK?u!)DWV`>twty8nN^!El0u{&W>f1U|uulY;R zJ@o^YyP_hg>0T56vF?!NMEV`J_rg@wV#H`OQ^5=M9Ab#*?mLKKZ}pDGa}Of$FwI87 zM~2km5PdhKfN9CRlA~AzZpm58|r4su$JF{_d zOs9g?OXDGoSRjyLV;P^EHKQaq{`;)pip!xjG!A4JQh!TJe~^>NRCi)GOvF@FpitAx z!z~XFIe#VhCStnMq3LOdExCp|tJ}Vw{J|qyS&c*mr|`Uuy^5a{UxFmM+HXo^#l%>l zzbiXpf{=G;t3IA7d`X0(Wvi+EAQ{W6^Niuy8&Su9?O!Y@pI>U722gb8?9qlJb@&C+ z&fe}#P~o-+=k25rc*dx>s%nSN<;t@N<4qXgaW@+UpzTncsTopMf5jzRL zmy?GFOJd6`K(95Y;7J*&3_)HO>+XfRV^A7fT-iA72*oO#4;JX22Q7o_c(iyKteey| zj>i>gX4lbTHu_Yo|7@p%eW4HslJ`JQb2Xck?GY#V}u~b5KQ2mv(aD2~xs{+^zV6o7Ho5|4%$;nJ7 z^U&-p&|Kt>p%ezL!li%gn|wmYGVE|rCh{q(HA#|En(?=sq|VCl9L3=WQ2Bh zy1HMl%Bo@jXyS9G72k_lX=;9eUF>r)+ao-qjZ6V%!oLOoq0*pj#>s$syDNy5(C#P< z%U$ShOsobcB_@r(1rCNo!tPXLDnNEWG_wKZYfQKej7lC{r9ignE!jv`HiT55T z(QgyprW~Sf*4kJlrSa=bwq>y+chxe|aFUNc!Jx)Usj03m7`;+ZjG}lQT5q#lvIDyD zj|fVP>_8>EzF_Eoc?(!@@$5C-8h&F+vgB9rbSmU+(X6|vPoz`aI#J%~HGSWny}2c_ zTfWf+W z`@(O+Eui6h2A__EbZqhGEu1iHf!)#;nIoSorinKuotRJx8|Iohe4a9m!Q)0(=F%WrQx~LX3U4mlW0)fpKw5A3v`D z)l>~#wYA%ecPQ89J3D385^KydZ?6N;I{+?@%@BB{+j225DoU~Py_3_zR56x4J`-(;5wm*i zA~4`+srP0w|FYKAZ5|?gGG=W)=`TT6Ox6}X^xt-M>E`YzTWj=*y86sGh1zi&EAQVB8yU{Y4|mUJZJh8HT^`Z%Y>N$D<=YD z`PA993Tg8NotFD8wXnYad)dOaR8yt}GczL>rzxH7t>6Tv+FP?^1wLrzN=&?`p_s_l zeN^F+^xb{3z^%NdSs^V)+G}U7R&F_T*!}zr!LP^V`%6kC@7ElT-FGKC?IcFGB%WoH zmH334Rx`OzUI}^s=H|vHhtT>rMZv$GJ`3~6S93aXx3)elEi+T|{;90n4UBX9EB3@VEKl}PllA-CIIX$s zWv|pS*QMrJ$E4<58CThqy>29X@4b_~LbfilOZFbQBH4R}?CoZ6;u_g||K5GR z=l6%xaUE~3_iH?#kM$}-O+}7~fSLdV0ujl-meBx#F!ewn3@tDw@QD}Kgd^||hP#Fw z98@|?y9IoM@A6vT9RwnL`0on?l$JpSe2C{EuPlo+um3;Wr$~5`QE_)B?dK)cd&@^^`^N>z~(^kLKKroH$H-OpTuO1UO|~Tqzo9 z%&*Rm#5%~;vM9b|)(mB0SFkA5lOg?!je#lSTsY;(?|x5p0LG?yotgmKjT`C2vz-%d z5*2OpS@Izi^Sk)Cgs$LFL=kn4a-x1wJyZxLqIuykU4AHmi4B7O!Vh5v$1_Ld!N8b3 zuFZC7X~^}Xs|~>>O=`qhex-S57!l3>3m9k_p7;P0ylhS4o!$k@S%zm4!-M5cSALf`;?q*ce~Q<1~tZUvG+w(EvNUoFfxrZw(x$%X#S$ z@wsm*%bKvD0%rrRu(#TtKjzpUc~q4JGSbsg`vRk40P7~mT76bUSC>|08bAfl44)tp zbSJc5DKz1QyZG)8%71$KaZPBkx`ba`{keef=e{`mNT#3qTnnjx1C8S#>bSKnzq^N& zeL(Qn>_MO4VD^H9kh|b^vNqEsYtW+4IT8YwVs8)_kp}apDoK!IP6;P)KD4+P~qynmyMwz^{^z7_rG+u9rmS z=cXtl5;EZqUSiLFzRci!%Cvp5OSE=@9rJ~gUw&0d*#5HRLKk9QrrBLH{w%R|IwM*$8bLs z$#6ens6~eV*jkPl11{GlPK=>|k()nB3IaV5?k(X1sezy%2oq;EyQ^99hk>oh*GWuc zeaC)>3F>PE2nr+%u^+mmGRC=!ys*Rd6Mh~!BNzrc$N+;Fp%kO>=56_&YUjP9Wdxb7 z2CJUxa2UwrfoNqL1}FiTK|~P5aI4zYy%Vi*)F^v&vFrR83eI^+!OI%Y2qv2nrDC9e zOo~GfGE31BBKPPeTNWaGSchtN{pQ8vl!hEApdd&yPYWh%+x~3ni(* zcp+<&$o46mKF5Ta8j%F z`W)}+g5I(@6A2&AUoX%^yFD&@%Jlj&AFjfmZ>G8Qc&{nSi65yz9QmqUH3J$zY6Kig zVAigfkC;l4N-~^E8BEPJ4J8$<*dU=9-swkAUZxz(Z)${x7JaC)nQS`CrcMfa=wH^oFk%&iG>bBHh4~7&4hdAvD zyS`aqL+^>ruepIgYc!wA%>H;9q@i4=A?$DCzpSOJRmX#kEv=@rowe)kI7RgNwnRzfx|e83)~1;xF}AKUu#`*K(XUBJcf3tk(GpX&0hyh`%hP zr8UhMgiwopIY;7oe|P#$LE1V(Pg`5M_gf7vCEyFq|ekz>&nSW)#EOCSPn=n z3IYPPr)Vg!ug@spcgyf|fEoF!`^s*ZJp9hT+(Z=muIKUcV_Fz$Ij{Yg@@wi?zrUnMF?IGC=|_;AJu|5jQzo`K3Ue}x z4t{qR9}ZN-J}*KTPM^{X3OZL2W(D?c1l)wo2MmHHV7}GUkrvdFE&j9+q`~G)E`Ta8 ze~kgf2C0ocpu@tZ8?(Z&RES9Ae3PJ|5agss4pLw@m+3{2DX>F9n2Ax53az5a%JWC+ zLcY%@D$lIOyN8IA2PTpy;VZ9S=z8D&*b_zTw)s?YZ)(QXzOy+J`5J`ziJPiVY>%dI zev!8Hfe%RyktWC_Am7oz@#jubTy{)y^0wS;xWE@F@Jz`VPr11U2*!e~`Bv}i3z+JU zZ>s2%HRGbl99>jQ)d%^ZoDjypLcbIH-xSa{cum7LbwuJs@iYbslU07;Te;y%@uW|Y z2BnOKIAMZdPy`tvN>4#_?8_AoPMUcGxhqeS=(GrryGHLX8A0BHpTB;U^W^^QsJ0bC zA6qryeL*aHPySTfnAVyKi%EaYj(|u@vEz^nOkE}q7DEx;s7qtH>wJB&#uvmG(3~90 z;e2@@M8xQBV(oow} z)Wek1PK|oxtvR5=<;7C9A=OV%U;jy0VSOkog+0P(Iwpf`iE;`b!-S1;$bbvq;^(9C zpU1Sk&$BS%#ie-;reu3De#>xZM7L9mV2?NIy*+SAubumgYBmJaSnvE;t=G+AqmZHiCW zGO*{IOou$`AYzP!OPNmQPJNIN#taw#3nw_!A4m-G$?L3M7lHms9B7b=tPb-q%<5_J zHeZn*G`mj7RwOeRKx?pEleoEFwt24P9)^!Z@1&)l!}uPc*4#FZsG%~RB9>U0+Rsn1 zbIvs7_R`s9nE+^z%{?0j&ZQd9=v*Rg&i6e0fY}E{{W=q^IBeyu0fE4t4H?1;q81>y zzP7n@m|NZ(j88nU5iFC_EM+w?i+191LRJI@SXMg`l=B3KCj;-JCJ4_$WL<_`4h8~2 zgLs28s8G^cSdhp{P0XODD$k3@K4VH{JP@AF%nQOC%OwM?;_?i2bQFD#3?jgo_by*r zbFE5B0WmB0yMrELGXClPKe=g88Q~^1Rf#$mi(x&la4lmMOOWj6$>4M z*ga_V5RaGq)hfH}sr_NDhZuejguZ|oQlx_R06{C1KnQgvp!NBDa1&vp0f4l_6cx=2 zCu~1yQp^ZUg(7oF0K9h3xxl`0k(j)h&Sl!Ud_yk;VnKH9BYq0+ z5g`81k_ACh{U|W46Ts{sf;a|$msij)wG1u)0buW?59mvDmbki+6dD>tE@fQjHtXF+ z1%|>uLNKAs2qhz2_{U7Qp}n_C0^NbN&lM1mnguifoXtCNK_MXJ2Y;Bjv&teXy8@Xb zF}r1^PTvS@pT2*teC#boX-yitCKQ{WKnABeR#)KP@?cHpWM_93$xN~~K9SK+QbskC zPv|ElDzPdmDwahydS?|TSVZGU|D>YqONYdN>{*~6nLa7`2h+_vySpNI=;Ii~ym`nX zz7;D@)hNC2MYi}aGWPRaSmPZT%K-+;8z!r-}5j36ii!m3#`WfFLs<-4z)sRGWmOVce_o&^RP z7DIwf%J&M2I5|7J-KcA`WR_unu2hv@odA|4(qC!Efi8y;r;vf90LT{m~1K;A7ACaeEHJa+S+zFqv-p0QU5EC+?=9fe#irl zj4g0zM@`LhB?cVO$GnUFBu;+Y!HgH4vth}mt;eyVe5p!e^k^Y2Dgw_e@h0CXuDG6b zmBNj|)Xsjjng6{TW4Au_SSU4g#64H7ys|Q6t$ykL&MuszP;(2N<-6zA=6kedo8{!_ zxbD;HEjDt3dpm{usKw|{wg`Ix&I64hloTOPbt z53GsA^?Vg4XZTcE;9XtY?E=I7MNgIONUUSDrt7<`-T78a-#}AI(DGJcw$D|nZR`Dq zz=+uBZz`v$ws$VT%Y9)}-J7mB9;v^2^N;AgSY)Gy=H&mRVk3)a&xPv8V@u~GbU(z8 zJ`9)esQY;wX5PB%31`n`P9At=$s5;$ntaz-T3VW$Yrck5P8g5u@83?_E>KK<8p)SL zsEqPEEJ&vJKXK24IW4ss$A9(RYp`{3Ik>;ML928%xEywr4woi%hSL$t!N{2qe`jml zS3+<=L1sKBqgW)3^LyyKllfUsdnjnIw~xAWlKnW;Pb{m~ia*T!0TBteN%ObLN`-i4 z6d#Uyil`S?_av~9Euwc%;s5CEMNTmSy@i;65+_C$C!3BQ921E7k)fZou3=0fe!^H# z-BehZn=37NGE-%%4to0R>GsY})a2`5u4A8JJ-M%$^I!^$kj?%5{jIHF$PuPwVM9Y% z+Xzpz8tmkZ9ZW<_{KxIm1t#R#pHO@DPFov2lAb)U9u^*^j3SpELmx|n#Z5+5WupX? zP1^!)fxSC{Dx7=KR@qQn8-{K$W}Lsy_0>w=85Z4h5y|A_r>D9)+KdQD4=H@lu#OnCeCWMbzxEDT^l`WP z5)MB9D*>>&NG3fktzNbFXJ+|aGna|}#Dwwq`1sk`*(Y*w21w!B6Ig+k>r>8flJk?3 zUu%b1Sy^3C6m?k=F%>NG+flTMizRe9V9it$J>2SIkU$OqU|}% z2MXFx>o@pt7&y;bpUUt+LH>ljAcT=z_l`%aD411~&oru}+DwV;?op0TA^eQFC?W&Qa^@LLx~UAfD9VI1&0M?Wnh0b=nz>)+No z%(CimZCf&VLXQ0z6rgKg_cbZ#Tq%JrSKuM{N4Am4SIvU>RZ^X!ii%i~dFAEAO{jkb zvfEctUpVlGqY*81tmY#*CQ0JuPHy<_3j zq!qwO%a5NX?l^S@L4Y1};hsp!?bRtJ$%TJ`9hd6;!z>*O5W&pXSTP%y1zA!ca9q5r zz@yGU-_@zOa}O^~0{y>YiVt71Kf=a0^gixR_S&1~igaLka3nV3dQ*`v_b`GPZd75C zQ!EmA;k?8^Pmc>a0t7}g;W8hSoP@pkio~t~$^jxb+8!$mDST)G#Jg0RwnvzjSe_gY z7thepP*ha3si_HyD9KwXnw$)754LbLsrBbzL^QqI9rwsIqHZi@5ON7Rv_IrfCzpHm zinylQ$a^TNV-oz|xRJlXP!O#}!{loY5sQ?ol9^}O7yG6G*P=^1n{NVdCv=fYnXL|& zk*FU(3{3-T@+z4U71TkobmANXZch_M+%85lz5F*XCB)(*9?K9F39Vox4uaoTN3vW9|%)jfKT44vtU%gVl& z7QX`DO|7*V)H>KHdp_3`wARNBN<&V}&kr6qa|}dB<3qtvlz_L%s6fn`5WE*TR5qB( zAFj^ceQ^=-(0174rYn5ktHB5XQ76~8gdk`~s>q$9dzDdE>ro@(D*x3nS4~o=cRE*h!4jwVv&dvWPv?P(2V_B|@CY5y~`aPmNs zt`^;N9XCbPV#UVZRoE*qsmx|u;O&K}*uiH>iQ|Nb!@&ES`|A^1$@8l0yUk~&zJI;i zE>9%`(ASkO|2-@;D(UVjx$UBZ^8Rd};ky6+Zm+HN;^yl9w4m&6V=C@ma_Nq%pyVgn zB+<($qG)+d)JfCie8c*LZn)g5cYmip51>(7O2AfOgiujYZSL+aRNEb|c14}-E%+Y& z=?ka#%V}+mMR)DrFPqXs!Snj)-oHo;W(gN-I}X^kWrSC}LXRzv3u})1CfGSg4rPErZ8)F+^4|ndIcWK%;0S zH&<3s*Sn?F-}&#@bH}}#(7Sjk4(gr#9ip&~8KZamG)*LQB5(ANf7Sf%G{Rp(6Kwb% zE7-wki%Lr;p5I;^=8uS9%gsOuOi{0vt8M#K4{A)c(P}!;cTXdak^?Wxw><#B47`=t%~%}q z2?+?a*Sb@hmPQR?Eby?hV*ae;)4ZrBP;8f0T)Z>6NE6lV+_rn>yWiloQ|mYes3mVx zZJ0g>fuz9VPO7@PQ|%w{3Y9bY>?cdEuCDIxT31$9T!iL@eB6M8-IIHHj0XBPi)Npa zh&Wk{d^`sM6F+#)f8Zaw1GqCHNG?c&0LGYdkild97L`z>?7X*RXsmhtqo>vFkIO(0 z{U!Noy|e$CJ&kEV-_9|&aqHEnAs*o+oQHgCf9D~#>(L)}Zi)N(MZq(wup%L2G47k~ zM8^Mv7?!4mdVVg=hVur`Gw1d{}jppBqMbn3Fd*TA8m*x~P7_rUZN~pXP zOac%KSObvLrlFz~+$MfIoZq#Q2Lw1n@OuuYEAz%ahak-fMXkb@_W3!ZG;&~(j0d1m zIQ0BdPO{FTtCEPuWEf4DprQY+-smalC;Irk*q#Fy+C>N#_sUQ;8%eH*d@dw(v0>=! zfAWN6D-242DKnbe%TeJik-R3vl{|1nTLv_Df(D1Z*g5CxO*saU_kX8TWBI`|vpN6u z3<2+^E14Hxpa_qQU8jtBmjkOnPyGlds(9v9q&&MUcsp(QSZvNB4arELGy|wBh)Axd z4ns;1>?|}?#sE4Zrl_49^(fG+m94Q;00M@dsXp}ieLJ>hO;zwIo_^qwnIWuUU; z5dkeXD=Kxi{P@R9x$n=OBw2fUdZCX)8{E@Wv&0gW3beFCAxKow*%^O>kxKm6iSN2N zSiu0kiVX2SnXb_1w|((K1sCMteYu{SyVA60;C^!vae2H!C;raiva%rEbjGb`w{G37 z0YKV2JKHZD0}4uODO^878qMyS(WZW%%`_+?09NRW+87GR=B6Teu2j5K;a+H-5=Fr| zXjPfVSib#uOX+I4y>4STliz(qNgZ<3V5IL8s;TWbG5Q~CuwNG1>q1XaepiiV>nJVF zk|#RFQ$3y14g=?st9iGg@LEb9zINpnKVRD1f~bkGc3TXZLqPDp;a$Tym2897qog9u zLO{X>K`@O4HMf+Er)S39zBY>~^?nOZ5N=RYAcZ6C_GW9YC#LF#vjxv<=bSu?o)!c_ z25F6iW7i;fjAkBOV9f3mpI-kwD6Cznv4iNY@Fj< zIz=}GB-*tCrVTZPm3^y@_}@ER%XpL8K1S5%=!$zcr&C_gP&`CO2n-WF-~1#xKP#w^ zln_aqF+tV+E9jHO;5P0{&`+2;;4Li+1zaAj19eIo>`E&K#sNuv1c5lTKBy7EmWAj+ zQtVP6^U0+?f^)$w{$d6BJy?Jdcrwqv9MVQ=(M8=p&5i-5og3!*AN_KoF#4pA3&%G1 z{H6KmteJ8)Tqr@s&L!b7H$8hCMCPMpPu4yueV%R!v%~-BTIg8n_%jF;iVX*?_*zqi zgCI)reaz4kRz7}pTfhqZfWKED_dpP1TSv5t6|F8 zxU$exHRs9;hvpuPmn#RUXYaB{0)=B-ZsgCNPAR|U-(RomKE7eNI|!HIyNrkn%$SK` zFOa;R3Cwb`zaGiH4Yy0%@_0XU^eA1>v81HLYOx`j_3`t{Y)FSi>uH65;)0NP_^SC} zQ;PL~rD0^zX}6)I@Ee97VnMqPx~;d$tZvFkiuKc#cZ&Jj3rb>-}6dIt1GihQG2CA7{?1zQ?kF~Wm`?R#R zC#vl#-^w1eb2K1 zqCV`DC0v2N{dkCl~`?{}Q<&$4_aelINSzH2h|KI~!(IG!8v+dxJ4KoO0l&U1~sy%kRg zDLLlr?SKiso^kd+HYB9r@;hEmC#2*WL?8M4`xj{`cs3{ie4!nL7~S#+xW8U>mD%>41wC!poykW$jnV0EOo%4Mw)^#$c@l{6@xBp?3so&oU zXAb>JZ(!aOlevUlZ)93Og+qvlh&c_Kd8i(!WQsheCDu=}eijOBWx*k9NUq}JK`wi0 z93BYxg-WK*yc^b}v)<39+sRUj7V(87yMOwBgcVcbYqRL~7~U@$1dJ!|TOMWt_ZCt;4BiP*vnp$lThCS(^~5naJBk|{8&AxPsq5(I z=o$`0XGB;PJ89fjS`Pp`moIhj?@U#i?MMKiyimz51YA3ADIuFnN@{Cs3kpJ6Ug-gw z|3$ho>z4{WKLE$Mqlceya{~}hQx%1vyJCX6Dt}+6Isr1pDDh-Jr!XqR! zy|mQku{CaQPXJ}kRH+Kqh-X$O=ceUWLe1AXF9Ad5vV1qN?v`ZjBSx=`VnoC<8&^&2 z`9EKP=6}~e)Qg6Q_-qTvCpo9M#qe%zNqo1%shi_3Me;&_>#oMhFad%eHmJm~Zg~IL z%hPjrsqMZh`}S{K;L*dn0c~}CpB_4|=7SEx`@4Nf4sLE+ekk~}qBd{4*hq4+E{9>Q z!_K5*)A?UJhm3#tRfdTaoWNyT>o6C)n`_2M^?-r^M;S$b`HL;!F3MEwYBN9kdLAut zyrp`3=A|leKJQKw#dPrm?aAl(Coi>F<4Z(7zERbL&@nw1?mTBS;nT?4Jj!EmtzffJ)&POamR0J?_K% z6Ul%LtxT^U4T|S;vBtpWtP6r{?{2jY7L(3bS}V?N=_Faiknsr#sc9Qqrm-SM1%~){ zciB{GkSM#hr4fzjfNjleK4ndHa^oq&(2zWsLogl)08-Za9OuZ+m0p`FhupEJp29z?R&m=yQLb~XxT%I0Epcppe8ZPGa<^qzL8}E*UkOd5ur)e)^5S~CoRJS z_AZs-U3~m7zb$;Fya#QG+ed>HyM}vpZKbcHO}QiHe9nWo^7U0vz^ddJs2n^R>W}}r zCG!2}U{ao^v6m1n$EmSIHuvO9n=%auHo&&@Lm;FfM4d9=h&;12pzU{=^cXNjFv)y$ zG?!)J92oaB*3L{rQhwRS4>6_%V89|L(oPr!`)@}J;3i7L_9WkOz*GGThCi$qbQ(=){8D~ zi)b1enm7i@Ry!1Oe0*H%X^r(jQVfkCaM}e^m29f?5o*AcK6@tWx&2$W^(Ybe5iv0_ zz|nf>eM_pVPp~YoVeeH;>iz#R1nR79KBE232ts`FlNbruIPw93y6az?fr3^|T!t+h z>XV0T2yh%rf`c8chS@Fixd~?H!XHg&g3Y-EpH|ls!Y^vd0w#9P{TXv1&wO$3vv; zICCEsIX*R|tEu^rAe2g<&zkp3pHi0C<(M1;CpR~DBZ*mb>iC9>(9z}1SiYS7+qby5 zxI(e%eAWs)RDXO-AP5f;x(B%bR!LV&tGBWlm`XebzjC3I12I!WLq&FR&uwye@6IXE z96ViI%B!l50mSM1x1t9qh?74Ir$$FVjiBS`L@B`7@qK^lKkwWUDJ;b@!9rNH3lnU{ zw<~rR3!B zMvk$tu!@T-?VSDnTVRoMbVu|pYKTQneJ!gJLuEuX-@)znN>a>%NuD97JQ z^6~MBi5Z!gl*0M}a=u@`7HjC-k_b8KQw;#B`wYBw-V6P;S<~g(~DvebD1dWm$;oOM=o7_mt>YC2<*F{lp@<@M|T3 zkY<(T@?I|n`#TS&3TC521>fz~pAI)o6Ff`T(;K|fg$dCT|4<8pV1o5C7^<+3#B9@8 zdkz~*k7>h&VkhRP<)W8uEFXfQn%54>!@zk8B|dmpK3U&zx85#()cfR6uf%7Vwvz`` zFyk<}c3OE#G9bXBZd7a01xA|fI-)vUjN{{qFH1ouNhK>>Xn;A4~@A)Y*W0{B=Kue4&cjJUkKbi>=eR-gWgFoSsW~-iJ^&a& z%+62*@ zahLMkp2EEo@Yo2kG2@vhCMGaINTt*cL|CW!JLV=gX0pdq8&_BFK~lh;z4p1kJ&#N0 zXdc19V8J%japjHniF#dGVxPu%0G3AacxQ2!eS71xle6unk4#iyX^|)^-D)gN#Qo4G zg9*1vWi0^QAp3k0RsNXC$4{2%yRR&Iy|!eaJ*NClCN^oG zAS_bMRX2hj*id-___jzg{I0F)^7Ye8-^NDd^C1rMBbHz@9tZ(;NScnBNOtZ{nwr_! zgvZlR#ssUGj!8Wdc_79zeMb(^s6!_VsDO}A$_Tnp#o4XNh{`an)c*2jZ=p$yet*5^ z-aZ1>i#{&WdOP2($1%CMn5D$Z{grkDnbK#~y%z#`l|NQt$feXH_O2=BdktAM4!n2$ z$XkqF!HyB~iz*zxVw9_|5}X=KR2ZW!cMe?NXZ zZ4Z#|1BX?^&6~-ubLRlX*?0n6m8!%;b@E>9((mq1pXR>_-t;KeHA-G7Q(m0jfrGEF zu43uM(}rvS?ja3U*G@!VDzWCn6aoV!3IF=8C+Y$wj1EA2rl!In#Xo+Cdu)ytYkwz; zka?O&5Z=j^{49BZmq808B|tsl*-~3O8PGm87=muA8SBL;L}~Y;eWVXA{kkgYoyyqK zhssCAi@qW>-s%q?;b*E)A~=lNPm&X!M&|9z$}*E}aAGZ)4?uxW_mOI=Gt3|CR=QNN z;AWZp{9y*#ZfG*M@YkS`Q5 zz9oPdU3aUHn;IKaAFVF#SCCa_WzvmjPO|!mRHAut_W+AAq{yQY5bYa$-UXVPGJQ^Y z{WQ@Y3fE5(j-`40m>oBJD1|paKYwj=ET3vEDJf}t`z=CESC_Ke8)yXJ-0kgc{VE%P z59|)+3ZxG?0c7IG569E(iQV1Ze|Uny|76T}zvX6%q0us$~}^HDQzB0RQeiyW8%B(nLQH4nxU^pj!-lZD`$M|W)tJc@Z3t;jL3>XUW*Lix*@&!msuM=%sy z`WwxwvC!#CpiSvzja%{goc)~v+}WzmgN77;1Z3nGf(eHysw%Lzr>H4BlAWn@W+(vY zMFFJaiCk=TZS9p`>uYAFK0X%20ws!aCbQC}3Rf?w#&(1TP_lkeRc%yce0vvOXTFxU zqA>wfJ}M}Alq?kFK(rSrj+X*@MIJFBJb=>wE+DxAZhf|p>*~QuCm2dW2L^rn_AMvjpL&7L4s300rHAY3=)8C}SHla1 zz?)5+pJp~bt=T9(8B#nYNS@XxIez7V1>BwNX6D9QyO);}$@d zc0D~k1sn@-7(C4UK$m}|nE|2l| z@87-g9yh<_Q38Mta=Ne|a9+_vZ|{)dw>g>%*v7z~t($W^x1xDbiUH2G66=0qMvb(4 zoMf#IuiV0J(NLzkdn-2(MO@ZkR9aXlhpOJ#u*n|r`a4~r_4K*@BnQylmD7NchP0cx zy8{`GZ)IiY*S8K6JYV|ijY@F{DL^2nhINX#9)QFJQo}b7y@7>scdr@>nL<`w-m=j4 z1k+q^_BK>Y>-t$kI^xL!VN?m$`lwUMyTiC=I;GwLBU#S=JBIhiJ@@(*ZlTs`eKM?u z_fvtF?al$$O>I|y*rp`!Z=S^Yg=kR6buCUe?K@1(H0`%GxgJ@8f{=E;=ewc-f4zms zOsZX0l5}eYl$_q!+m{s;1?(&vhKjkDg(_vE1RQU#PVE8T$8`Pm>$|w$U0)T5TSB;3T0XI8=UL2-6{?v6ZL=*afa>veYONO1!a^$ z-8)CF?EUR+k&8*dz}dhF!9ejm?H||&7F3D#`g5EgVyzxPW8v^znpBa7!i* z7#OasT*EN{JWw-p7+{4hC*xs{29iZHhZ|>Sb!#1pN=nqottX1L@2>#yZxGccsPqu7 zM-fqPv=>8T3IsBcNE;M#2teIkk&m3}=6Ir|avU&53t z*>+uXI?slKK3l?nHu|x$O5ygYkF`7(H+NJ*BH*fVP{&M8O;vTZNio7A;XG6a-t!KZ zIeB^W&;bxA`iB|M^w=1XqS36|Qb;3G4y?Zl{z@?VMkKXwT_c zbF#PhDjo(NBu@2Ua`LwoU#cu2CD7c%LZEeXkJzICVkZBEm57*#J(3JR{K;p&WJS(r z&j3VjQicawb`c`L*{wBnw#L`h*5>47|7>ly(h=HjmIF{5(^W#;55SsKGKY4q0M;a* zE@k$Jp@s$-arlRJGiKUDZ?P4Z`mbLRU2lkqNS+Z}_r-Ss{0b<%Id;Ix&i*cX@?^|K zDB<@ug_GoC4lKEFUO|H3x`-dcGL?wwRk73bMP2y zMb! z2bw6(g=(b-t505LH{^$H&#gVV$zq^aJKPv<)e&;rJNnaZ0I=N}aD+9;#?_B6Hd4jiN8Y9QxOCO^bBmuMAecg8VhMd#!dY#LSn?9tgmV3Qzp)WK)O7L%DB9K1 zbBGS?4_0u_$iA(cW|0*%I~?4;V}G98Xztx&QaAU3_Z6f7RpiHow{l8fS!A997{oir zybUuBtm#8iAgIigcBx$&u`D|~zL|sc$D;-Z)-S;zBj<)B>xew^2cg}_<~s9-xiN~$ zw9+D(d=JE_hzm636+X`G?#1=+wy(UNIarpG)vn27}BF@k?+)yu5mXR`T|7vXY)T4r2Tbhk;;G zFuK(F`~zg;_;MvzS_k$SlRB!axY&M%VBIs(5Jnyrj*BA=m8{4V3skmZlw>9L6d*4{N}wxvL}oH`t{RDRNm%0-_pAAINnK5&h$PZa<+0upBJRF z^@F+!_~yjaPIX@8ZKmo#BG1&+8K!}xB#6*U(D7l2(? zTrNaZv*pGnX3SGBDRHqHCtEY7lG8#^&&)URni6XbtAyyqhgp?VnG)LNUFH{mrX6w>=EnSUvFo|nCs6wXm{*FDeu1#4u% zd2G}Fmgi0w>otA@MjUXzVFVqq%5m`ip~j(b6;VRDD61g6RJ?me=8Yv27E>({Sx&TK zCyxbzA9ZcH2$A(+=P;5JTSl|U6NEo$)Bz_auDk08Q_jhI{f1%Iyk$rxK*wRv9reBXf zEZ(pbvd?F+aD=gSnzZT7G+SO{~$H0yy`RtL-RwQ_7H}+7|lO!(c>K1k-n)l zKI!M^b$uz`QsHgnA(YA0ri@^a!o>!XX?$`Ib8aqwNGGeyn7Nu!(;N_%8CW(AKk4iG zW0D2pBBA)m*G`2djB7af<+|etXieVU^))p$-@gw4{5&2o8El3#9!JPfxhpY;LNa?7 z)YFuh-7arJBgpk0y(*h}rZ_Ik?JdugF|8R2a-sFQxp379qG0*0ZY~OZH%$79jk_OrDJ^5{Eg2( z`hv8z?c=9UfqMiE+Key--hWm#^2(X}^m8t-o|4go-Pc6Rpp^XKt#jqDNhq4!&R z`MDh3PXbEv-YAc>1GP^tM=t zgji!1t8LP+9wFb`A-OHS=a?YCht)OJE!&!<@jV~PmL$oPln&O-BO#F6g-$u-eNA|q z#(H#<*A?K~$Wsp*|+dLQcRc|M;<+Waxw+-btC1 z$lxr}v>d=*066e~2KIM%x9eX*yl2fdeDzz&w+ue({z8dU_AE4MI79{v)lV8vEwM8= z^#11zH#+e!bXja?D8?i_G-@b7&`P>?jK+i#Qd)#WJ&LSD{~E(7_!FPU7)f;`eO zqXFgnk^>-Y%F?&TUtafo3yS{qOSP)LgNliS-;G*1>OVB4`3XOiS$Ii zXj<4CN*Bx)@hmPXis&i@Zk8+n;SSpLpU3f7>zDS3!3TOU@{smrK*`jb#xDTK4B?zk zhOL0|J>bIgjMzaR+pw|JRN~?J^nA+Ts2~r|!3jzg z*fMcFK=fP@0QNN^UmgBo)~Gw+fQO!o#D^18VF&qkSRp;$jL- zXW*#*jws>5v46$-g`L{24EEkA_^C96Ssgo{{aNk^S`^(bBX>{Z-pmND?EE}z1p@N% zmV+TWo9pW;YT_aX8`5n{Y>{M&5QUj~iET_-Ph(Zvag_->^QdsKT=Lk53fyE8ywYPc z4z)R3@ywchX_>UZ^>>frx2>P1h(2i3VI)+_llg_G&9ImfZT=N|rf>w@pa6jo0O?~M zNN!|o>6cSx2f`3Qat9D)L;bR%FJD2ifyXs8q?!%7(pD>0v}#_HFAJMMU>GUO_@_AO z;H5zSWx9rd=7--os5A*Xb`ODACjCCP?okTc_F9}|mP#SR`%P%u5(#M8M;damy4$=P zgq1tDJB&V#{vJ6yC!=@Ju`oEV`^Nwj1dBx4Z8w@Ib-(J-6N#!!xq6dkGe&y;*7iaE zOEJJ?HRAzww~7+LtPV+>D}*4>4H|6^h)tJko>VjdS8h-5SvZ6~m6rUa*N1#^UR zFoNK3Qf+e8z_^&$mOot+AVS5@DY)UF0(2L*3dcPM_VVw(FDotxvZFHvR;ynlfV28l zlO52*UI<2`zILl?90st7ky;IW3WevEm1VCr2oDX>!pYVCkEXMLifV1&{*VqK4Batw zHyld9kuCx0ZmFR~8pNTyB?JKhDG?BmmKH`zq#L9~L>dIX$M?TJ&vLnr3n%v8PuXJpYZ@a_ z*jXvq)G+E4{?n61L=a<9%x_ohRBNu4ilhZWp(gQ}Yo zsHfCd>vvSrL%v7_9exf1e+ONqx8s}c#-!9&VKtAVZf{UD9KusgO~AIh1~8 z@}SXD;XV7s!Zx}$>P+# zmnrN>9fjT`J;2R=ckehr4&lX}z&>Cc(w^Xi$sTwt(ZUW<+}<-aQVNx6nEgveZ6}Vw zi_TzhzW z_XF3%Zqlv%M-ZtE2MZPGl!{CUVP|7`uhfi2E1Q~SvQcVgfOxW}%2Sn^-B~?ft7thT zZ?T@X5dom}AQvo~LtnaH@@h`U=t+wU+hm~Sx~z<8x#0$(Csi+ zldSjqt?!?xYm|Ol9k=GAYzsKvsy6!|U-p5Vw)^V& zCfqw6X)WA%?|1(t<3rQZ(FNU&7e#r}VaVqnUm8Q-=KwINE37NKd`L?4c86 z&W%VP&G0?fa_VkcObbylxKF`29Jq9(ZE(*dOE`-ek*_zh0nBx6&N&c>WV1wqs@V^E z)%u^Of${yeY@{t%DsG}^@~Ua(ngdfx!TT;5XvEqridIh`JFg&#GYt>@Q6vXsS`!=l z7IX7pA}!DB&pweT(tARgL1|1Q4=73LbLyYi)M{#K);wnqru)7h%+{5(cE9r3x;bAu z^lsCfe2bcG;`btAAKLBShZH?xI^3+HX57AaB3SO_t8GF9wJFm1?cW|%#2dHxU2ce$ z4#%emK2(1KR-*^Nj8*2WsSVs20ehPdg52`B;`nTaHckg@>%e9ZnA$Ab{k^QMKiBgO z%mT}Z>w*L-+(-65W}J~FgpWE6!uP#XSr{;8hJXa*(2&|f6K^bYbGIl2q6qZ>sahb5 zoyqo7jW%X@kJ7%;NO&F`{P%lBI`APT)OB}vTm4<90%FZrSt4D(+(3ObkF_V{jdN~` zn*=#wZWi|k7-Br7$M|7IYit=sN5h)e!;zAJ4oid@yU|=SqjZ8*|7m=4RBD!5WlVnF`{2cC$3BILNnh>|*Gni%jN3wI;4_7p zXUT)C0<)i=k1D5QO(%G4K7zmo0!@r4p7|B8Rks*%jn}hm9|t7VJ-A-P7)X4;XXO3z z-#saO%JrimcakB;Kx(@Qx!qtAV=Xq{le^1Kz$^W%jtC|)AX$Q%O}sDz`f4Vw2$i6bzo1WX*x57ES~yIWCno+`bu-jU zZR;++iduC^3w?MxreSB-?A_w_^yxq0WxCd?*#RArs;Zcp87x<*%GSKtJlEu=&RvR) zV7?vQMDLL~Qc=KPx>x6Fi(527No}tV>e-qSk3&x9UkBhIPisHg9+e48gUTuvy>Y zVoGN9#Z-Zt0|f27HOKNYp=sqpTL|UL`kW@L2pY488xruB_}*m zCs$!FLVSi-M5`zo~Wdld+ z;>5)6krTpQ;%KLQwG|K@K@~uK&R<5*C09f~| z_TrVzyyr9p@+{QbCUD)MMZt21r&oj}Z0KQxymKHZ&SbD*cpwy>j7pW7)9aHi@Q{)i zOn{4`&(HdqQtPCkc0>UhxtPixyJYhtgujs_T&fPv^6i;dXS;|cmqwa~k4?)rEWOn< zkm{MKF>Cg#fpU_>;glr!aG>kWCQ-HSeX|7KsJ+NY#|2ST{Ffb88-u0eV+8s&+ zV?dyGUt6m1|5Av$8fa9x;W*(ix$dx|>)F)a@$hcDpqhiruwe*s(J(j( zFc!lH1crUFw~zY>isB|horzn|$R0kgyg#$m;`qb7KHFy0&F9{gAvTm@>Drxjq9~MG z;S0u&Wuv-aCbS4xQ8Htw;&D*I_fmWm@amAR+@k>~SSk7U9OaNud6cKkoe9`pBlu&W$gF5Bgkab&Mab{?BrT=DlmG%kgr za$Vz2J|op~?S8wE2A%$6Wp+Y|wS^BM7!+gc2Sz<^Q_U_dQIQh#)-Uc422VGOv;N0d zb)#}j)18JzbxBIPIN8^rbVewx=CPI4lPczY_Wx6HS?zV>fEMcP#mF`V* z18M|A`;q+Gi5$Z%Hj4M_ohhv_AU+;tL!1N(9zM>E5Gya9d^(3=slr-}Do(I695;!g2D8ti#E_{Yh5aO*u zw*1p2DcsDy6|$-sk-<73^hl(f+8+M0+4U(O#-N)2`P%BY1dIG*1!l=>GN_rU?Yfa= zZEf}bniILFcGh_QyREjW*oVfuuId;mRC;e+?ke_M%bX2E)EWY8NZO~hoiNlOdF$h{ zWDYg>RH)A)yh9fP1~@)S<;dLn;;%H;;;xo3c5Kh2ZO6coHFP&-u#L$~WalsM7M|Ft zQz_!9-}q4YM!pVDbr}SrUSXacb01iRxxT^9O!!|JYSm*yZEWzueYRT|>GtHS89Ybf z5iottif4foSRljma3iUNWQ`e>K{|?2NlDyG-O$otI(eDPp5`+!D{IB!)>`kJ0E`{^ck%{EPRmBM0+YkvzR@z+?kXln5T zLcf2&7*NGgz=6QOyiLFk`nuqZ8f{-j8onsy)E0BHPK;`l88)trxs6L&KfPpDlq(Fw zK=0+t{G9=tmVbl?kONrh2x@*0@`2aEa_D+RnMWj?V6Z|U8N$6nib`(1LP7)ee0gO< zQd9@DguOt`mALCj4eH1yVUP+GBS~&s{N)k0Z&qewoW+hGT&`CUpDh49O-~Z^;3pcb za-sXvK&5mrq4aj~^%WBrZ9wiDnq=MYWzJ~TZ{#R5DH(Fl5*)bbC6 zj)o97lKyQ*V29TLAn@b8I#5yE6+L@ZMHe196cmWlU z{rf{`m2-SnPXnnwsDH)ix%e)oC`68*ohVW&MvLU8h-a*A#>EY+_%Z#l{(VqLr)h`q zi!cTEB)K$ppc$dq%5Ag)cL{#{fJI;fkD#+w*^u< zobJ}W)X0RROPn-G57pS(MfD2(3KfH+vtlD4K{uqZCxs zyzTAn0aWE^kV!u1tlIKhVbCwSR8_W2^^o7)_tsSHPb&@nXNKLw$9>8ApUO#nr_Z*w z?E)wR&euB}g9Tbq;>$Y6Fkpq;F0I@i++Bv~=-%jS(ivaUnP^{LkHV<^gWO;N{l%M>~ z$<^sT?~B{x{Ac2wO-T9cpQ78>qj#5uH#CSH@O~>29&>5vO=T68!mwYLAeW;%0KIX^i)O-rN#vaOcar>$>*DLL#6vIfo=U@bVg4ryqd z+roIs#%;0m;AppEx~a*Y#l|G7%sEHXH0_76t1F9Kq7YFuYr?U<$eNx7$V=&qsBt4> z`~S4aqCRh&#(w;AqKS|B?wxv3ir^Lj*k7@HU%bEQb}$t8ZFyN>s9sK2;K%XOgQ~bl z1jp+r;BFRcmXMNKZg6Rw9sl8DqIGPISN_zo-Li0S-ywrPR_irEi_VwxYRi(AB{H&& zCI?r>#}etv(B`H_2T^B>88cJU0guE}_gPgaIJN0dQ9yCYj+~Qcs6re@rw z{fMHrr&AZR#>~`Tx4kPDGPTOt)m&T;nVXMwB(WiH=u=vkH4=P=x4I}2QE%*gI^$!6 zDV?2PK&)ZVau$49ZVPhYw6p=L zkHC@V>+3r?kT|F52;7u$EQJq(40SWWCJ<3{G2(H%wzI=^PeC_h#xiJR`>1r7YCr$kF!o75 zTV>KRY$Fl4R0eH@)zZ5DZVGw;L%a1Gd2vyno2zGPX}`MeLeML6tCxt7j@6&u={znx(YtE@bF@#E5NPZVBLV{hI)tT4QhbwNL4Jb^lliO zt*zwX z=3$HM(kSV2mmV;@o^zAPjA=7}U$1LuAWn+}I>!F#ToVN{w)CmvuriI!7b)VX-b`z2 z=?g}lb2>mCezR!eU<|BCb)G$PgP6=x#L`@9n`YOVn2;-Pof=?XQ&bz z2g=La+Kedh156BIh&p3B6p#jbMQV)Ag52$Xr}Z0%!NcE?_b=o^mLZDJq4MV z^QEvZKDD0p!F|G}hV{xyS!c!rSF39mS(5F1;ET2wnV6e^4|%iXe3#8-Q_D3YzLsgdO{DaOTqfCT>?jL9BrO43s*n+nONhP~(DF^*3}gGq}YExj^x zej|Um0lXzaAS(P=Cue7`mZg7%!_x~ajNw<+Tq5vO z8jj=T9TyVH1f_e5C><8LskymQ=iKTqkZ{|g)uTWRNZqtVLLD;qNjjP9^!Z+^fLi_g zeXy><%wFBsnq))GW-&mqrB+#99yf_s;7EWMPM#r<{7g+?SMnu({27BCp2jOZz3FEr zSv1Ol74{2$MLIExED0heS>p$340OgmqZo?(HOO%ArI{7;U#hZwTb>w|f=08hIS~we zGUhVQ;zp-g3J_3?A58mpymih+n&qlA@IBIXuO%|H*f7V=rU~SR;gi`eWbyNqd5^X; z);j0L@d;<6xw4gdwQZ8J*k~Z(FkFa^GCw-YK2q2*1D!8iS3r+#&e0Qg)GMEtqlOGx z#X#3Xw!y&^MmYU-F3LvH%yv}l=Jp8)-si{O24_}kH+7`lk+oX$KdjN=;)<)@mqviY zvQuvPmctr^jSN)QOxpr#XZ{uYbhtkH9hfH1h)PSGfmz{D7aS(#cAmlV_gcIw2&63hcF+N~J!WaHs0 zt3GI!x~$703p7gDNtAov{!#5CpHzn!Bc!rk?%zQ31pbK~g-T!oLGoMJn-~2Pol43yo#rXd*+@#aB!*(^!0qiBZ*9Q2#yxabrsQ2pzK`>$C_>!>X zr+3@oLOnZutfrPWa;0-=|MV)P(;CE8amBT&jB_dYiv6H+T%CGFTj?RjQFNEjiI9j}9r;oGt((9D}R@+u0B z##emzYRm>DJmB7JmbQtIqjE)-W~kN^LUhP+6u5ZtQ9AGaHY!QL#%X-h&u8GIo(Q5( zfdjEN1Jf``0b0kO#I+=z=0M~dv` zSaY$deLHnE0^e@`)W!WjS?`ObTi%)5KPq>2bvmmFT8|%}R-5v-f68)pY?w|TAE=h#>E;`OHY+@`llR?WNNlOKv=^Lhk5_W8u-E%i1V1M{|-Y-%Tc z!dg$>@nt#Sl|KC5pbRxJc=jZX{WC_Xe%f18q@GUA8rP6WRn>cLwQrF=PiH)4S5L2~ z?Tqf>PFI^5?T53fr9sWfF`;&Drj*zUiqc>`Eh;LqX!FY{dp9756&?wHLnBq z-n@H;x)Ok&onArVv5Jca)8@}MUZ1khY^Fee1y+EdHbuM=5ZxLWRiL^`&16&hG*}}d zWWE;J4nv2;I*7E2w|u++y_4K5u&jrw5sOWzxnC&QlKjyo1CHv}c||HBnjQflfy<^} zpYr?pYD@lFgn!57+A8uUe)h1Tc&Ejg`c~lsWe{?h2-j>#M`y7dozHu59#K`ZQAb=SyV_TgSydBg1P< zb};zAa497&y-n|Tu?pugcleR30+%V6LD`qj=A#iOGjb%`WO?89Uj$;m4|Xy+5}xJsv8HB3WW-e5UgsQn@aD`+NKm+L`MFt`Q6qeYXm5~3 z01Ej~Y3EGsc5v)6w-azl_aVt+lKgP*#$f)Z#e=7}pNG+=eYLbg;WX z@KoF{escV&ZG$k(ykk!)vD2B-L80Z3Pwkh~A;;-dm+fnU$cZuTEh3l)*W~0|Y(+a| zSe43t)Pv{?^(>0DL5sevpX24LtorOR^z`lV30RTAa+#W6;wrxkt9OW|c;%wEiuot9 zoZ>IO2oW}$H6RS6@eMDmu%# z$CP%%+f)vQ%3UD%0^_Byquw1s_O}QShIkz9&?WoBPwGv9+Vb zC(?xYK2dI2w$D8?swl%3vA7iDwOa=+UXEq41AMx6-Z7;sZ)$|$# zGa@mzQJi4W6o;03^VTsA%o4A&=K&x7VT-wY?M(C*`;s8B)!v)ca$=Nr^F~|ZUj2M| zdAaZauvOZc`kgrOvT zykhL)gVYp9Q0iJSt5L)H=Ea{+>@sqFak7`))P9wU@taU~PRAWbrU)Azj$70nNuN|; z6s6~TH?LXuqk7;daQ38UV7LJx!uIEf%m0EDjLF*|whE#rI^?D10>Gr9$pH?3AfTZ% zHf3Aq54b7{%qb&|$@Efx2E+ai$`u}h4O*RXb#wE7c_T!`#J~^lB&N>IKuZhqO)efD zwGvu4HzCQcnEUbl=MCwvh=9oHK?~nbaz1%qqJ9|*VmqK*4U8M+pFGztw+mN5B71E6 zU#JZPrVkI6+L}Rxs;lcR=V?I;2#G#@T8>-*X&(=EwY`G_u=uwGU;gnKdmyN$Cz6x@ z>ec_H_*`7@5j&@WfTKD)Yb?tMjzmFbW_cT}&%eN<<+@OkSmUX-n5xc+G)UkYz` z!=!w7bO3>Y@85x>vhwWo_4AhRAUMtln4jQe1t@5*Uo$izpQuyY$rU~ag>;}sgM-f! zIJW~63x!faem-FRWP@bZKVZhxfnUenZIRtzl1&1*ubiBmGpdKk-J>d+!`W zQAsDQ3jno*Tv*SK`=d|y-?Go%_X-4@DHauWy|6N1E3ED;ME%vVfmrs#0SNH_Iyh+L zONV`%ntJwowdg_688fz^Rp;OCdn&|Cp?8@^mMwv&JYb2|TLFo&-Cb@Q+7OWM)S4v3 z#VT_)ZqkZ5u)mQ0k@BceCG8yfs%V>X@LdBUzcuz64Z;)%r!1_ah~ec1IF6=hm>xpWw;lHp7G z@HZ+2M5mRqW@^ovZ(iJ!mXVpMu`uIyQIC1&*OY-BpxX)dLlcIcUO)3!fR*6iyHDOj zAn2*v^AtW56V=D*8B-PlZB56hiV&iZs9rLBHE(em`|_=RWt#wYK00o3Vs36~iXy%r z+i&#tw{{wNeE)jq&2`u1-{a!&a);cwN}XZFSY1eXC0ByaLX*RX19lA>TGT{ z<_o=8Qvr|eX+X!#4OW6KpBhMH7otIy=TQjN)t{DNF8cYKlS#03E-NcrbU(KP?v3=q zzd>xI0NV%Hx`jU%npZw*s-<)A{+he=j;*F%}(tH)V~L`^EgEQY9bjHaeaOuNH+kA6Wg+>F~s-p-}PJl z6_Y3)%SRlmOxN=X)o+OONFb zfRaZfrLZ$@QA)y7NgCf6*lwxLZJuh12UPPnW|NEV{~1TfC;JHetTStN2M3C~gRUES zXb~VK_uKMwKECa%X}SBIH`e^zHz6ruxmElYB=ck3o6Bs3Mw=e|R$w9FM4eRc4N?8+ zM;vLKhwXwG-=FbuoyX4~3*?bK$do|N`|kd6uw4)p6*ZIaSZ+H9AuYSQEaXB{=f|hS zkZ`ZtmjE--eUAwR8?LusQ2h9)^3d}KA7?cE)jFi;xMu~aUIf@~q}3UP0@Q|Rmt{sA zkii7}BaM$r{ue;()8qQV?NC_>>~hccr)xmMk3UQO+s$vy+pH8<5yy>{==38s7J42mXzPrKOJR-SV@8g}Y5b zd3smpxldkXc5eIGzn-_5haFML%YyQ=D<3XIGW2gRgUs__@VF7Xg{^*7VLAYZz#%NJ zFK`uB-<@Mk*n4{uG|!}rr;1DN+4uCvaigtZHL0>%;*aoE993q9!4mC3ZLT0-Yk%qr zDNCCucYIn4m}$m*xbUAlPQ=l@m^f0~;KpP+v^0u4=9X1|p$iNGsaajXhyhP|L4iT4 z>g<7^{N)cLHno4X411H%;F5 z8V*$Ik+*no-g{B7D1=QIv!@wkE8i{w>qYpxbBi!OH9cn7YChoSLZ_w={AQXz-j77A zc^Y%YVAe@)vt)dnrZ+d3It<;G>9*FH6q}e08Oa^aSzj;GQFST>!Xp_;Q=Kuvw)tNq zVAVL${!Dp96oL^x9V*rx4EyDm+jKx7uEM{sq`+Tv}C^scRx3v@H0?f44bL}rtYXHeY6F;cG<~mTB!{(b_k2!+; zC>sg7Nwc9Lh+@D$Ao~Fj3aGqI)OzZxVGB)~B^@OihCep9G@#r+>Z5EvnF}CdoL?c4 z43+3c%;5OTc1xZXu;H}L8p+C%NSKp&``Nve@G zL2adr^n+e0vS4^mJ>SOW%vXJb5eHH6S~f*vLwl1fqi_$o>?-4Osc5KLJzueBcAiIt zFx<)u-4KU~4O1AUwj${aPD-i?Co|jTujsl=SUU^?<~57|2p`P= zV%40`@Ed#!psTxCY;mNZG6?z#78Vx4Geg%t`06jwl*l@mBT}xXoTxbO0DJ} zMQRc?+?(Q6xQD}#%X@1rp4r-3L_YZ2Php4eZCetxT}H~~L>{6*4-t2npTf;p>#=lo z9~5KD955hkCVM}Bd9|3gzE373#uH~JCpveZb$SH~4V)6rJpC|4#<W}7TPy{F%{&X^}F?)1UqzVXMerTe9_*)I!%B<3@|*OKG0cC9c0 zi|Gr6&rIWD=k!XGsn$dWMybxZbLO4zvU#_l1I*YP8yi(K@1v8HFO*8uIXMPs6$n_r z(mXB&ZV305uqtQj8svc;>wga{YqyS2thxz0JS5p4=;IWN>t-)zow!I(=g(>;NUWGw zz1yhjed}5%TiEyT+aG%V_j0!Mf`s?^)c4&om*?^_n0VI9boP zP#>W5oHN#5#EJ_7y}rJuiSB`V5wWT187LX(1O3jRLXu(sz0{pBpWK)Rag=HB7lOp* z;sFfiq57F^g0ISUM{{N`R!fq#2W)Gq3{QRid>LixJq(^^e9!R_&LU@1)9D|_f-s2OaU?R;Sbw60&iNlW!qu!7vw zmE)Y+E>-nyV<`>`Tj$pEzUE5F7nNVOGA4zp(qA$*%S8Ow*NaaaAj`Uh}RIeNYSbZ5PDIrPGZt2_|N~-sC zOd+lMimjis%3ZAo^80E{^2d1of!qK%O$(P*4uAcc08pr;@yt>Kk!>S#%wP4I(*(!c2|A(2UTbggtSs-LtcNfdDIBUQ4fqGBB>uAly`z3VjSE#=XZz2aElpw^QHZ~=emg_NJ3N)SofVHwp1J}6KW z@jC3td%&0s{S*mf!Peb$gm1Td70l)HW7p;&UH9=3MB&9eWzMY@zj*NDuA{*?JV|Qe zlcD}i8P9RAp@#rI4B3o<$8K<-2S}`lrVespY#Fy*cV`}HY^9UCharb;8d!)OzLGXI zDs1C4H#7%+B&^!{#>w!0u?f$hGHZcnf1%(k#n#~*mV}VL;w3|!#c96#^itK*feNx_e3i`k~ltj7Ed+Jos zv3{lB^--2NZ=ww$_<_iAk=vn@ZagWdrWC*n;Pp<#wW2vjE)z-hD_l^UICP+CT=DJ@b$(k^#~w`zF(bn3J0kG$GfhCTS8Nr^FKo9Ej4?9NVE(0?XbIIij* z6dQ0zMxC{gJ`V-!8kEXGY2U~#UCrr76;B+h?%jYM7kOGNn;jozyw?C6)vtH-tzYAS z;h@T>hSJ}hiyWp1+zVOGc#*Laab)XB7nl&qaG2+)B-LkvH=k9Y%nd9H>NOEMvA<;Z$3{0@W}vI3;ElO)K>EEO@X}us+j}u+R8h(nr9&RAbbou%>o& z65v@CiZrG9UP=2=SR~#l<3(4ES~Tn^MV8bqK#341e1sYdV_{~?NJvhc&uYXBP$dcx zafPUtKS3f7U{TD7r3VkvK7QN$&J9PUT#`r=ur@>MoIj9b5-~^UaH+Kd#`1C1O!d+A z4YVl0Q5yJX<$w<`uiCsDCOV56r(~^CALogMdE$=8UT2Q3JbAzM!zr zV2i<$N*LLTf}yO1$UpMA1_!fH#_J9%mU_g%Dt+>fq&uxKIvWppS1q(~t@Bv{1!mV* z+0dTo6CZDs&3D4O3|(Qm;}s8Fg-6($PdW`IbQ*>Yo2Y=epTV1M&>y)7-9Xgs964nO z4+PW%OCg|`KRisq0_z7JoZ8N-%IaTC=Mrs&LckGU^li&@bf~LL zD>01h*~xL&K9D|i?;qLQpxqj4cw}WAL=86llTV&h7RR}S<@=z4@i5p7noimBt}MV$ z_9CT(C{*BGTY0pPKwL42UaY{SrtjosvE@6`2GBg`Phdxe*iawrl_GaH)CaCm3}O5qhrNp z_N{nd`3Fy_QA#P*qLRltnH0fC<~dMRpotI3L(gn_!?C$b!M__s)3EyZfGb3h6lcCY zr54e#KNJ1vp-GxXf3Y(yg*egZ){l`w1?7rL9%?&bP(i_xDjaLRjm}Vr;mHoZD2lG1 zt9CG1(}A(*^O3XRWydM;sb%PW<|zPMFO=t~KV0A5~get6?R14%;(D-%rddhWzON&v_| zYz%7Jc1wxjb){}<+$~ZiN}DOlUu)TJe8WiFHRra)T}G$1B9jb`}aw{idKAQ zQJ%~_W7YV=wF`;JsqciYTp3t;6jz};3O3vP&EG*{X-drROg?V|0|V_S*lfCtcTle7 zsk2`Wj+--M=Ra-OEerG`Yo_3E2zJyuC( z-V6hBY3_F`yUX6`+esAC4LEaGH=Xk?Lyq5aP7?S84JUP7Jl`6b3y!XXGLJ}(UTXk4 zgj$BCib(3m_)}#VVp5Fq8yRhXx?G*+Dj^0tg3Wc zCEDQ$;P@6-OOH?`A0**V?SBFFs+LJnjHF5sveS1{>)+=gGJIo|34SPbNKNJ0mm<*j z0E9ClV5V6XU<&Iga|T$`1a>cGHPB_G-xj3RK$V-1oabJDG22ip2wNo8+2=-y<`7AJ zto|Xk^}iPwl~PvC2nXj1Hr0w>;llWkKBzG0@zhXg%_sK)7WX)R2pne}a1r2}I0b}{ z?;nGM^u_P@Fm zct1jHIC-X#>#33a*^8GE;4i)^?6lj0Ki!OXG$S4n-Q1>=CH~*_NWnsZtMb1~1F=a2 zjrx8!d@=L&X79ET+a8_t{a1L!Q@d|TIN?F4FCE9<9Q-1`K|NguYNVV$B9d$NsnhvM zUQ`Z=)ad%hdBvsvPX=_($WTfq?-~m2$y@dHZ6YUd%?}Si2Ig$mqG62kTM)d3U)-Mi zAt)!7IcO!Um`;bbLyJAxNC_kRAR@aTZF0Yf$m6QVf`g3?HOu#LT8?ZqWqf~`Z2?xe z@YyvMkhjJ-P#?bWANVN25KT@@0YnglYPg|;5jMP3EE`ShP{K{_O+;>RA2*_&vU&9Uh@9Zuf@&E(UgiKCK(m}{SXXZl3v8lyFC{ZBH1eBLI z%Cm(0I~O%|_9B1@zA7R`B88C5M*s5Pv9Vo9r~~9gVBbJxk%0ak856OwUWGH9yy{x+ z-lHJ(A^mz<3|aKU0r5qX2gj^fpc%LFHwfyJ#$If@6FV%h(G!(K+Pw4{mE7MoVQ0C( z!3Qd+ZQYJv8`V|j`~8e>s*-#|-swXsPAxb@J`Z!F(twB?Z)<5V^zh#-)c)Ep08@s26h0XY`;T_5iFQeHS$zVdu%h z5ru+mebmW|?QpdBQ=@a1@(|zk3l=#^=NI=QW?4N^sX9`CQ~+1!-ZoETL!~(I8y*xJ z>iCn~R8LdUA!39mLxx;u@(We?_Q+qly!X0k#{A)mlSI`jjDjg^4Oi_2RaBTYy_W`$OHw!S7Zi?-HHRw~@wH@*o;XQv5m zVP&Rr1$zFfKRv_MjZV4H074d@TalYWPgPX|0{zbh){&$5cp=nNX>Mol>ENN2s$y@B^&|NN+3Kqw5)o7>g+yNt7uLk*7fCS=%Nd=%(T zK_d9H=0xqlqNcOgX|%==nGRmf{U%<51|$N#yx929N5NGp1z>*!prF8 zvF+pD-v3Z_pogHE9uhBhBrAn)9oq{;VXWHych$qXj5QMe6@s7Erh+mv(C_PQ0NDrp zXE3TNUo-a8uQCFQ^4X~;zdDwt!06=H4Blysjl`$G1DGqva4cAwL$diV0OE7?+ z0iO~v@e1gvl;z;XAeP-1y*>}$6is4uC1MO1)Po5JI9{gu1=5tD}vcBtr$U=+5gi}&v>toN) zfE^xkxcboGSw&^;ko|fr%E1IsYdtzo4eu1>?W%z#=Xm=X6;!6r1KbjHWl~b&nFVSf zJWOBfhE;`9Fq-aa|Ft3|)<1e5k{__=rJ{xLK zFvo(LHBk9Tio`(qqqcTTYy{jCAX0@5IX1w0fWp>sxs?YffDlMKK#GB`VbcJb#$77d zd9e;U7hyoa=M>T+gX?pV6EVtu(hQoNk6>hEeE)C)peSek#OCC^A&@Vd@pJ8+YX$dR zXR3c0Hx#Mr$Yq;d$z^**!2l8~B+J1$*O7YQF*q)EdfY95{(pZjJD)EHJm+`~nx`iv zGWZ{Mba%r?FL!ok*Lqb>(gc11a=^j-6o|9OMGElvN!QO7jiuO|{5m{bY1rPp@csMu z^0>DBkBdMy9W}K-xOodr=RX53BdIJuiOT`w(h7LnUH`?VgWDG`RyuB5bq?)K?{lah)RmV0(}ave<^e}40= z6b(i-XCLLK*$;Pe{=eUhZ3ANARW`Wtv9X|v!;SqNMEQZO7-i2(jt{yq$bcX^=!E!> zVVy7aL;yTW(jiwT;C}}O2d#pS`u|(@e+d&267pQ{!vphlUtcDWe670VKtC8je&a}2 zGcW+8J@wskSYB_{9~wAl$IuvdcdN((SNjJ1eZJtISUOwQSs5M9iOsz44 z8!hIyir)`8x#>h-#c)l z+}wVGew_crZqRkWjE@onGMK~w;L#vOLr-*mdKw%4KS8Xisq^M+AV+E{Hr+F)Xw?JP5hJgzp9M1v09da8v9x3c1 zYR#;V{kf0UFt{<%c#_7YzH7Z*htIOp8{m@tWea=*Ip_h8#=!(IWotXma&2CD{0w=L z_13E6M6bwLHuy&jo7(kCC~$_U{|}|s)8v4+nI;2j;)NX+M2-zDM@L8C;ZbDC(Jlw< zbHKiqm68g$I>`Z;5Njb|5(Hzw#9#_M)_|l5DE2soW1PO(=R}P8uc(P}A4S>xUC+Lw z`F(BWzZMA|>1?aeexS2o?eSI?Uj%m!7WxM}IeGf}g8n;pz`pvg^Co!w-dnWEiAnl) z)*kLm5aZSo2evQkaK*s>J)EbmGg!Cb8U};zOVXaJ9Ye9Pz%LEP>@9$;{=0CS$G{!I zla0Q)xj7Y-K>-f`>HZ8E0yGWpIHQGFJ2~xucgoQ$>*@-#x5tJENl5tp_>!tu0iM-Z zKpb58 zEid1GLU=}5Kfiqps33PgpUMZVMc(-XNE>n?D=+eJwp#P942$4C%PTP34Iy*ssJ8}W!NWELYOkys8ra{|(13{H8V59&; zjw79aVyCltB}thTj0NC@1nFPo%mM|CLlaV0y?8>^$cPid{JKC2G#>+F8|d&Ly6I~H zlCRf52L%3u#hK^-V)@XAYCS;z0+ZU2f4+}|sHo4*csJ-X0#?$B3ee1M7WA+9b$kgB z#@@$U_ZK8U;xK~``$fXU2%QmwX_osM)?IE_Ul>Q8LHn-Q8Wi zitj5ch3ciIrlz0^0*YcCtUc=hYYwD;?JOV$@~M3THqHCJT;%wmioMd=q0a+=cmR|C z6L9Arc&>s@9-)BC@}wd|=$GJN74O&L1YPxAvd6NafKUuzr)@wlTmy)GY`8?J{>SJV zrgxBnH&&D8e~O6TpWWBA=hOfsQ-;_2#7zuAIlqSy$q)~_x$@grhO zNTg44$n1OvlMcWg0RWG@|2*W5)}q%`e+<lY&pjaK=j zahk+RkcV917!|(5Bf&gn9&x+5Y49E}u!Fw_V*6-;%+rN4z*%f*C}B+>YCj&80Tv*C za1qA}<^PkE^c{OZ#|YMqzn5~La!!ksW>HI%a9;!+e2AFj+^7dY10B#n0XU`mrrVAA z^wa^Mw8A-e;eZGm6YK`k)6>C+Da)XZnwXqy07`T`m0(kI^Wl7>E6B?L^%ZE-W(|%b zfE=o#q7oe){m^3Th|>s<8{UM>EnD+z>%1J<=0^v+uH+HRU95s1##qHPr^M=sbbl#a zmVFB5Z?onBl|gsBqLO#RBYCX%h&yWcO92ZJy`@)?F}MNmlOVKPm=^4~8I?(613oSa z{78T(*L?gKj562U>+XBcJFoU?0g?0wq^?fS-c#*4b~tDFC_{w_0f0UaEN~?mZ}lo> ztnQY;91k#&gC*?gv7oKP6af_=Fg295wOy}vpMy68-?|C;!0+cvaIhOOlX%*Y18yAX z+yKS{SKOaW&aOY-Gz1@<&DsISlS#AtYc@5BI;sdt^%&>W#Mg2@ za@k`~fJ3M(qsK9jVgN)1YD!CS;N*n3kBY_t^cWk~^zkFeI@>_%kY;IY%?q#9OZ!YG z#P~DSF(4q(z=s}_yRIJG0FdbsFmqu*z!r|e616$|8DFOkSPW{wZ_o)UY4C1Cz#(k;bEFp(_-PC-PYA5PZ|re_0bm1`5GBd zMa(4iXJRNF*rT~U!^expOj-G|(QBUe=SI)vFIKgoYh_w=wdS3F;;sIQ(BrKDcNds( z^T7B3J^^5K87^&wqbzHivr_+l$z}=#{SohuUnU zuO~4q5HrcuKOIBwPuEgC=vs6K!9G-qBFn_@T)=usfq)heeV{wV8)s7$l|cf*c26)3 z0%MC&a6F8Zi%V0S+OBpc=wxRCEP2z@(~2zrc<5j-0#0<-$v2JHuR+^F983)L3I`Lg zq?3_w78+JcZ|9RD-127qOavPTY*+5mi^U=*l^i0msXE0F?>aj8 zVbCx2KaT_M_d+8PAfht~4tedJPGY1)ktE7%I;yY0c~a(fCuqgl6$$*<$%lbow~rls zq|}`y$@R!L5AU+?TH31i$L@YUURaoqWHIQX`hP@ycRbbo`@c#$Ar4s~JH#Np|-BUFW{<&-dq#`|gv zPm^a(UnEAyPG(k5q#4h{z3n<30=gUbxj^in*cUK$H|& zULzv?LR9kw!zeH^Ec$2^r8c%8k*t1Dx6!?mom^);wO}CZJ(iuE-Pv{Bjt(V5hZ&nU}6O=~*!6&T7Y8*fXZ&qw!wvo?6@QeQQJY z$BQ*JlCh?5S_CYqu^5i$%qM@}^DTy+J8blqib-VPVJ~?%c%$!*u@c|!_jx!(Is_(N zR4l9(U@rRmpVp+Z6VVe7M<>mke-Y30JJsEB@z+H3yoZ-dSud}XP5lPR*ecEgb_2XjLy|C*OQpit+?^!S+zEePf$7A~_xcqD?{TGi?{~8=eP&skBI(@_o2&}UXv@f8)1)dZE8Fro8aEK6OUl=) zuE_dmVaaJyqQm6zTdSR;9&WXVhljz;9*ET8JlrQ>j2`=)3NUhL?>aoBJtk%~gTu_- z-JM)=?ODIoAtW!aV`8@2*vaST=Dfl8sH?l%d;0jG+O7g}EjXskEiFT%-&mB;g+q4( zCfaLhFw*RaaKvn}TixoUCwvrW&;Zo({d>MP0cf+p;iN%igt2w**RSk~=NY+R`2h}W z_LDVxe&?9lIy(=(h}D^v=m1~!_wU>h+rol^TZs3@^>q*=SwFZe-uH5R9_bDiBaagJ zuU>6$YkOt!F)giOaZ8ac3ML%1&I<}qfql@13BK1(F{+#wMQsnKGwx_&bv4b=a)_3T zAx%w9KYo~DV$W)RUY*93e&rQ*TAQv8I66u_IHb*pLKK1?{<7UXDpnN`z|h;}DbPfr zFEtY&WNYq(c}MXg{gN(N(|$XoS=R!SW>i=?TX%)q*SSyg4|X=%-=R9s933&xGhne6 zmlW%)>e>WfR_G3jynn8!bq~8S$AZkbM3ksG{b>e7jzFk?>H!IKzJHRq3BCziL<%?s zZ|#Sz70bgdl0(NRl^kH>IOg7_M6oiwTPhd$LTRxFQ?{Bc8! z|FE)}8Xr^M9d41ib&*Puod{K#gY7%ozE*Z2$LqZ!^ZL$OlM8Nay0224bKi=(C;+W zT;4ed3k@9}7UQ5i{{nU9urlqV%cH{k3CnDCkD3RuW9#eo*}5ubo^G}U!D`xTwyhd7 z8b9n_XD`UII2OL=nb#*4@?hCN|b*EoPDak~#-vOG``GZAy)ZV)A?#Q6BUZpy>S&!q(;UhUMi z85yU2pUsLdKlJ+g4B64s^M$z#n!hak6L2K)OW90Yxql=Xc!7f;_a^l5%hdXuo|~_` zN*rk}vMZNf;q83G8bx)5x5Lw7ac)sbjwg#Jw5BikLx>#PhwOp^76AbU2_$&X%~ zNRGThb1GQ^s++1J-Nx*CIs+2zudw>VQ$iTqI&);*c z#N7pTH;N;lN1ns4*evcvYe3nP_;{LSa~XE_=EW_dLm$S-Af2`d&hEVro5690#765R zXw9UAzd8lqNGj5J$mW#P+$BGL{CMTYeyKq%jt!)F1Fb?c9wo?HaZYPv(K*8cOKL^9 z`!*HB!jC!x4gW6b5~^5ongT5LeqQVr_G)N0x1OJk{B&lzhY+cjfx%1ugm~2KuLeO? z%j~_+C7HfXP6^7P!S5N#h8Ia3X+(=rZ`FZ$%iBHs=zo(}sy27;hXNiTzx6iu#7cG^Q)0xsI zkGT_==ox=6x}?>oDcm>>r-q0~)la1tq)!y#AQTk?VAjW|@#oJ#PcPfXS0cDjy4ZFB z?zXlz9Y@^N(7X5Rf@Z&ujOgxlSQ|+At6f24d?+YLD^?Da&1_Io*is!@j@_Y-=V-qW z&ftWYs{i04XVWnhMsbg3JxrSdgZ%kJEmOdEfd$c&CRU)U<%BIMD)hNS(Yo*vF#KjPuciHKxUJ>%lDF?42e>B7#mfE@?KllMZ@TJwKJa9qlr#j#WaX2XpDA zCs@AP*tlfoC_jQ{J=BztYC~iB|fh#&Zy22-8YMW0WR8~C}0vc!|ytDe%K4OBQ`SAI0a-NivhwnMw#Pk z=)j^&n7Jj|=+`CEerQ`JoW^s$m*o13G{J8Z3t@gdJE3%<9zFlVL8G z=9h0NcRz8z5KCZWuYH|ZPgh$XBY9Fj6t3m@!!7U;*{R9R0j8(^*;o1K)%O)5Rr<|V z-sz4@%B6AtvAA@a=JM&(-lAa!8s`Vu(i`y_y@Zwt35n$|H>#$bw5`dA^nw%&$h$`` z`VuJZr$3Tl458nY$n0+u6xlG+iES|sOZ3K0e~lBUJuIDKZtJP2+Z^a@oCe%<@dKS< zSYzo@$!zPS+fld6A`YC1*8X<-f^nd!uIob1J#6{b=Hc(w6F_P!8O0r^KZjfdu>Z{) zD>WlzG>3c2NxjUjT+r1Aqhd#`GIe+F-u2IHHYoAK;p#U3c0yff?PTMrFD)t2$;{Z4 z&(W3`723|qN~a*aN@II<$`>#!NJAmr$jXl+ZWff;ogs&Yo5z3{<=kN8zyvkVoPnPF zjUJ!CJ6P--^-W_>$d8V}L4}E#8EgXwe+^Nmg5L~yBBcVg9F0bQFTSa!$~k+oZ#>o2 zCWyUv@7)v^4p&i;a>Hv^nS-+N6!l*XQvJUO>hx6Q{JBt7ZclAe0ZD>P}ZkK z*Xgq<>Q~@W592rOygffZ5A~0C#u?n9S&lRcLAGLvOT8KV;;b|K(gU#T|s*qf`U z*oHo3?of{w=_vE{g`CuQ=ppLvcHih01J|v`j~_d-ywA$%0Ph%=>4`IVOa$6|raTUk z84ByAljlU2H^8YwMR8Tg@X6*!&}T$#7@<}O6dL- z&OoomIqPz>0&?%Hjh@^a`QtA0$+4;=^4#&N5(h~qYvfb=-DSN$P&6dcXidOK+IxGA zwJN@>k{etzP_cF*lVkF>yfi%6b4}D*#{OG?6zB4hG$) zG`4;iSG&G%6<*j<&l!|B1kJV_^~wZcVMySMZeLC3#uXO2@{7l1Gen9C!$oRxU;u?N zOK=xl3pl&C$JgEcc_>%fs3@BxA(8`u00iTi?bU zR7%aCiWlOdb#--J%FE~GYz7QY$K8gI_^y!WFH!FXKvR`dJ_l_tc)N$fDbVZS&C#59 zOvWVfA>FhYd}5cjnUYdnL)5CPa&sRIa)xHu*Ds4=q6Ze}u-FS83P<~&YHDhJ{P@9O zU)5+eR%8aqwSa6p$FS5*W*>g zE{J_}rXoiLLM25{zgI+5RC=RJ7;sPUPJ3TlYgZyg&u1e@e`sl5IR@62mLl}yDQ+_?oelIb(JvJ<@pVLS)c_yDgL6a!FF(J>{rUOxXMRzw zWw{>n{?{BvG9`)puL)yeS@GpwQf(RB*>r;|?S(EVUJwcs#?!{PM=K3^A-luSC-Dn&sQ z0-T8pf(;a>2A*oRuu`sqf>T~Tg<#drEez$AtKC=9q}mo-6ko67Y&V64gutRIHsBn2 zw)^Ie(a@Dkk*#JWZ?Et|HkZ1Zlrl$cpHxqT zm_Jt2UD*A;+p|~*gAURQvF{Opq5w;3Xh8R*Cltbf&|kN{RU{z#biMPDk5Ao0YaRgsu=Ns7R-~~! zG=WcJZ*R{{*Hx+m9Y~2ij;}c4Ay3u23wF&z*4-T)x1Z30a{BUUIfOBCCds$PcXTv$ z<#MjsocAx*0~9n%DT3(|b86Lmis!)i&ZVHMyu8&5*@*xQYwPQWJ` z@}SkWA_XrR(VYcXSgfAjuPt@x+xhwP*U$O+9CxBSnwpJ*V7qlG?8|`azbDPYG18tDb{-xH8EuL7HBOeU zqA;ARlTwPAP9<~Ciim#w`n8|rz3yh_HGVlFFrO#C&}~f?^1l~QJ7DU)CrC#e1RSP^ z78Zurc8SoMP?Op|cL?(jh?P1l(uC_4k6w!3fWpnMu8}3%MX8-}eQoWy2$qJM%_C*= zIzavX3dIdvMd8DUhCn)L^9?Zhp_pkz}eNk#JU(cCvI=) zx(#Nx5ONoXi+mwRf=)s%nZ0({L|_P(*7N;8(j1NYqO!V)+ z@7@h=Vfwn@T)*2=KjE>+H#awzcgnh4Wvhkh<*f|7&0}TVmRk2|Wl!snpX?IJD^SYx z*414A;KtEak#A;-x-8b~#v#X3K(3T&Rq zNj=^IGe&Xg+iGPl@b1rPeY7<->s%IT82JRcJ#e^vXxY2N;4c#PKzDm>hP~fv6L=7{ zI93z7U!GG3^-wdI`s4iR-W9u$9PUthMn*}W!_V6F`!ToJZa8f5O>oH^E%ZXK+6n+t zB#%1pN*8}d2Fj;DOxY`f_UuG(&x)sgVAYOY8=I=TV^|9o@@W0D3zE6q9bggu`Q&(N ziU#e}NY5`CPkveAjVdQz&DdNh9mn1MgDwbo6MK^Y|Jr5-MT6o1%jLOyZAIGN|GR;k|GBVcOHxLUdJkH+rMw{PViL~_U)sduE% znkjBSl=2kPwz>xL0pmWC!9C$Jocz5{Ai4AdcI~O}j!gNBNWCw)S-}l6j?S*GM?=Qm z{87rN@4*0<0I#Ke0_xBD+Tmws4nNo`~A;&=CKTf10i$UoHU!p;ta?Rz`RF!}ZqxzYO@7b^Q#%rtvzHyDBmuhb0Q0H6{Gc2ic4wCic zDG$mkY7e{M7aL$_wD{rT@L3InNN4leR6R2)gum>IKC=1wiUP)n|8W6^o`h)XWK?B6 z{B@ndKkO3YP^b13b@23G`fRdBGl@{k@Eb)1S=y(hHS~+4wGGaabOdDOTwwyOi}~yP z$*ek#(}g;Wawr20z8lMI7U?_J2npq^_uPL;mH*^namp?~yHk5bQLdBg`f3z!PuJO} zD$duUj?5I&u2iWl$MeQK=dX7dU@|a6AU`!7q1@5k+R^X8PaOL4eSxcAR}R@$mLaK= z;-@i(`u8PH&2X~;t!mv^!%F+htxkGFCEUq7MI0D>Gj7SyP4&L#zEy7Ha#qau@4{;B zOK%2ZjR_r5BIoRk#=1VsUEjYRtk2nBSURq47^7{(`9Wd0CO3BMf+1DtL=(4F3{gIc8 z>u_4y=sj_@va)Jq)hQ4MBCs47D4%ToWrcfGEVbmg9=T013XY4_6zK`vM~p!QG0nS&?Ce@N<@4-nc7;m5 zB2nU(V&BG6p}|WVf1k6|y>C+`dPFn+g1_+eb~~3ZefXDRoBIj*1c1+KNFHq#6k^$jp5s6$$9U6Kbz|(N`(FU5 zArk~y2O#`G29xzDh~-6m{H4ThsQM3%jokz)q@bW6)IP+;+n@khs-U27uv5=~AY>$K zU0N#WwoFV;h785@H}EXhB&SA4c`yS&*rG;#Ji*X@hDS9qh8!5M-x zUKR91(3$-`Jw120zfMfp3DQY2MGh_`B_u#;1@61d3=GXOfB_D^{O9S*D=TEd&7z6R z5RCe*-k8!QSOPidO6T8@i(L2c->K@p$O@Z*AFy_2aKLjUmZ2sKh9WmJSuj}n!a)qo zir)Dr;*28Qcc`R9MJs$ye2Ru|ii?X&NllD_43S4kS;yYSJb;h-`uf20dGd?2;>#Cx zc`kJWy3^x(qsTrHz86jKr9kS>&Th_~De>e(dASoK3Q6(hEg_!=4-Mk)XNhm>&$makA4$r-GDiiqfD zI4voxktELA`4i7S$C*6I{!0Y1-Q1)kWuf z%Ap*%y)7C$cj)7*p%FQ?+A8d5Wrd&(*KPz-3FPZgsT>;|4DcivGrC3!8OS9$q$L;DzQ-dya^Ds5nNIL~L z$Hy6s0^EpxsHGJZk6^E zNAo5e-av%YN{q~TB}$l=*Z?czMnqyt%9o32_4QM;>(k}X-`NFQ;qk79YqjAR;aZm| zonj(Eo-i{1)>T6%gE7M5+f?C->-4GNyw5@#71( zg@y)#Ny0T(DKW8}K_@o^aDBrbvM`-K?2wN(|FhYgNWgSDMdQbHx9ug}n)A@56cIrd zWXc^18w_rIKsOuZ6ciF_5`^7c zXC;aMm9p+{?46IFR;tC$6&Bj-MnkU+7Tv$#EZI9|E0w{LA~QAPybY=1cn~Q`! z92IVE=JxhIbM(OUbgG^h9IRV+5(B&1=1&tBm+h7tP5Q3?0L|2Z0EM!$CycF{97AJc zamv7cKi9hmpoj<%EZ{oM9@W;@=jeH`XC>0% z#E7B9zYh}L2NP{u5!M}Nk*v;ziGDxEiMgw!^sp#X8%bC_AqQ}9>vM&f<6}Q74ha!) zD&pq`?1l01x^bP)vnIZNy{E75*}&{rJ>e&7;_TeDy7PolY4FY92y<9VQqS=%u=m{j zE9p>q6D+10O&VMp)K>od`682#!woulMXxTDkkmYr86O^_4QnAf7febt+tu})71rnl z!qfIUpFcbuU3M*lwcPdlw-t+^u!IDBQ9$0t#(IP0S(7$#m6dTCf60OY7iJnivWIf?9hPmcU*+;0#lt6hHo9?oJ_8Crr0d(Ni-swrTR05fR-zJ)kGl zI(t6IG)es-isp&L0SruYKQBUFBT_0}^^daz7ONE}tF2wx{Vfx!lR3Z=uOfpP2gzRv z0aCwylee&SFFC=3K+^u~;VH>80E-+x7L;BA7gzGL3eC;zu#g?`8h(GA88Ojh)dBPF z)e{kmETQ<1+?1bo&_w?=JFxrPMhfc-E|{aXmP_Ii64rur**Q7u^hrsZs_sA{$>HK0 z*U~bIom;D*BYsYFjwrLA+o+99NuW-;AzvfWk2Xj))`gKPl+Ea@R0We9vL|)*_u`Yg z9PLh@pd2bFh$IVMM_RoOH>Ha;ov`15nVen!P+309$A&~qWBZ2ZU$&Te*Lt^`57<9N z)btHLn15XZwiP(*vXM3Vn&R`$E;b4#l{ei|o{D=oZLHrlqvK?XBqxsqHgH6E_}_JaeQRG|#DxDKL+9*6jK;K_o76%2sgtWHq+IU=IwnKjs1Fg@Eh){!RQL;7lB z<@eH3G{^bKx(bR%V-GYU@l)RHCuW+EO(;i4M@RZxo>t5cG;@J6`9(;FqdF(Y+rE-P zARKU9V0YhQYZp{CPQ6&vNTR@kfQ{U{0qhX$o0UQpYIyLUg~pqLu>05Pms~c#%sSPa z7f(JCQG3ETzp)3bT~LSum-yOAU_9r6k4Vko`e|4KV4egdF)NYLsVQc#*b6e`xzZ5D zelDq2y<6v3z-Rg^2s3;B+(9Q22|i7#iPfc{g-wZCqiOfp*wtt|FSUB&@QG zC%qyrx-q4)&f<)4XVhjLURzx9^|d~`=0_)o48=v$Mou_A#Y6`#$`qX@5jh+{B2b-O z`2^B_m`kTALF$A+`FPbNm+?TLviPNeUYGgkMFOhrl?*>N1uq zB@)mMPqPW%$-YEi!~!J}Ig>b}vsbC7b?$54!{|9)WDzK8z}lZi@&EoKdg}dNzQaZ2 zl@NmzwQ2bcnFdZ-p3tPy^MWM34f&&lR*KP+!<;PbB5J&$ONrZ-7V}gzG-lLZbtR;j zn$``66uSXxy8?lWNjO(NulUP)f;3^}wv)HtdnG79xr{)$T%4LlqgK7Mv@~tzH?Bv7cQ?F)tRxd8$l|4tw6%40eLaSz6DYEzB>1zu z;sA?BM--JDl4ktpk&g_XTxF(kPLpcg4v0pL{BOVi@Ce!O`x7mZ+GBFZ+}(%9Gy2Uf zim5!Gr3cKj?#H3s;PqYb0rcW2ub$2WU9@nq$+q5J&~*Y}^{D4*-D_nIVq#)RCUUeU zP1qHhFxEhw*eq@y`tTq6x{Tb)IfFBTDfK5ut8m2KR#CCBwl1tc_ONv}7o;opi&W2n zLc%z}Xct2WrMnyEIV5{&si`RlDZ&+jg6;_tWgv6@H-sw%SZ9*G4B=lK#b34vlSL%N z#9S8>3sy_N+e!*wze;r=bHnU&kW*@IOCVr9>9S#@YJW!41Cjz zuI?WG1>0i|y=`rf;^OJW>+xKZxlYOn@NUtwRlv?EEfp#oVI(C2Y6nzwR(*a6rvh=^ zLBfMXjsFsbTGZTUPeUaNGHr^G&$HLcMxrgt(3+p1GsKWxfyxDgtXpd$nL1i|T2kl= z=9FSnUS(j(2(nPeGC&7~{h&Vax%sgIKz;5#rFK%jL4jvx?GAqy@4@B#QycpD`R>AiPD*07@XKXXZ+ z+MpvKnD$l}bOxy)7nkyWD@osDFCdZuY=_UCZ`{~hcJPI!6zP-04N$w1@;%14=eVb| zGT_tuZp)4F@$rP~HsC}6cLGyWR(T+z+W`RhXKBfx-scD!yWpY#=9~bZ!DV7|)7i)8 zn0hf_Zu&=s2(5R90J(%uOYv}?AZZy~glu{8j_?Q!m{$UF4QD_`E(k_{HWxbY|0*@r zcTi0X$k*Tqiq25f{%LUOe(SfeYb~_0WPd z0JA#b&A9Y-^HFe67_rTMv_BKf+|$|F?9x#34z}L@!NC=bgzqurYO702C=?1rrGkO> z#O$>u7cmPSk>9`56`oNwBY;YJ6SVylRj)`e;woWM0gr~S2Z1;4Ezrk7F>QNiN0>C= z@~I0%3XsdgkN`V*aADJ<78-iE)N}nWc#{wl!_UY2PGssA-6Kh%kjzve2p(# z8k_FEVnNDryvF>^Sd^Am*2DsnQ}fQ7eB}zR&>t&O)vX5XRPI-)niN2V4Q}On@9&4T z+||;``MiV)?Q*uZ!y978F2FtSSk`faSFK_<)_aJ=*kw+{zd*Scjzj)lDFI|C9 z?w+tCC%-?iZDm@5~#aS4D@Xruv# zI0HTX-NkL`KgFN5R9dT5WCqxQ0TCQSUb=PR!Ub4!c(DJvdiu7VxbwaH_rJ}NOL%%- z(e3H&)&K5o7D9YpQbtH}DS3NPgfCRy!NCEQ@*M(+B#jnT7C1v!RQw8k^c)kN1hvkT zl*y`+{+o0C1!Cv@-zF#H>k>IiYkt-!n&v$wCmCXYB!UnsS~T8X=lAZxGBY%+eb!Ok z#*!8K!BN~+kj^bdEMApFI?J0*>772RndmsHbFQPk9k@p-o_79k2??eZ+U50sKi5fX zWC>NIXiXm1b0H|KP~*9F0I4L$#pRq;OHNE|&VKXVi>UPiq_x0bY-r>y ztcv5OcV=L&S%Jj`Yn>1lX8UYw#M$PVUawze>sEvmfjFKF?iukM6_O@k<^(rGJr<{& zmv`65_h<_u8|jIpgv9M=b3nLz=V84=cM4RT=Qm~uUV=q~jEpaoz+ovWW>P$?bNy%l z{uKpzc@T;k^|E{CNrIc<^|VKdXG1e!{e9Sd4;xAcH1Ja!XMfYHABx9!XwMBod$_HIu5Xtu>6D1A6+| zfJR4ggZuYml{uiq0U;O^F+1lV5=hD+!GJ>`Hg3l8`|LUuHMObCD+txlFan~ZulxxJ zyv%R0-^EfzvKP@_zTqz+(I;~v+|jE|!Dd$S9gqadkXx>kSvWr7om4rsI4GeP)qUnU?e@yVSYO|(*rDHM!(Mu!L`gC1@u~=a7UB$4NJ!X% z=pFiaG#IZI7ETtYH`=czJ4R;hZ;ULvqMYnR#{i$9kguF@)dz_u35O`?an0c2>6oBugMWjQOEn+sh-5l1Yib`1PY{`f%X*0<1y?jY}*dciR`c_G# zx9St57c^tSXrDWGEg zHMqD%bKslT#ws0p+uH$LQpR9HxI^*0wJTQu{jtY)Wh}1EGy{f56P8t5>+S4JrE({r zv2S3&Of=EhV^yxZcx!8`SdxHX z_jlh!IN>RD=I@^v=M~0J2ll5~sSt$Fu>;N_UP_v8Dk>@<<1g}Fwh_-R$>7$xngGh7 z^zqw)CT?c2AZ`cz>zW?!?e2*FrSPeMp2!~4vA!u9nf zz*3Z>$E%;N!d(fDNx1348P0-)CPAphF&9G21MS4_8OJ5iE?jU1^EfFf!@GC?e$#h| zdGqFQw^c@6jTX=uJ$-%XE8yyUEJ*kHT0ywtES$Z75CUng-Mr}(QL68;J1F0ekH35^ zGwyqGq@MG7elIqbhOy*nbI=7Cd7Tz>Iz^Qf{|9!^ga9Z=yiff}cB1{C-@mJ7f*96p zfEd=GM2JPFBli#Lm5c=Thl*ZV#=Pj|EUAH(@pJyJ63Ni?>o%{AEzi#8@K#u0+Rk``8tGyk%a)BcZIS3*h`hQ`)0`4djUvPgB$_ub_ zczAdyLjpVJMr+*5`mMlRP>7Bch%Nz&Hwm-%BFSpX-Q-lkIetLR$ zEUpM8Y8qZ{il0KV2?-06kdQ!An-ekyh*yn`a`{7{0nxJ$f$V=lY&>mn0k{*;$BfoQ zadW3}6MF{dXi01>v`S0e6dwFK{<5q~AbSWCEg~)5vmviFm~GzC|GOsg%4N^UVVfBpS;Y({QU z5@SL({B~VznyvU8YqKC6jik+h0xMy$VJ(!z&*2N-h~VYnNr;ah`Q%~)Spty6AQEt3 z;EiC;VSeEUl3?p{Q4tY9hG3SH)wKb-CM9BEU^wr;<|YZN6t*P1O#B3nkCCrmzd{ZP zv-K^gv!i3&{;89b6C4zf@2IP*!+-7V`9(=iLrmb#4IoUX5C3fVG~M6KTqt9FoJ5r0 zqqYvd{oG^7D*$c=<{OYvU@bxF513TZ`EJW6kp4jatDch&tDvI;OvCXyrwR&ZL{nK2 zY|}fuIBTIxC6w~fKV|D7qXXz!u850_`TLZNU~$?3csLpS_!;s#-SOv>)B`x14OEdm z-Q5e$aLWgPR&rt8cD(A^pzW8D;nA_)1MkTL>EmadU!<7GX)NJf2l`mTj$LR5I38(H zmD^8z>V%G%%nWWz3yYRnC*9a}%zDhe$JMcPXH*z)=v!y=3JMHRnVSPyna|A<0*1Ju zTzFn!`Dwf0Ks+`nT*@MNX>}D)HrV-4cclpfLLM|h93~AfTId4*bmm1SoNKnCpeXVq zK2_kj^5sR@rZf% zu$I4I{R(wwLx|lAZ#2rjKDMtCQ3GASTBCZWSw($~$cp%jgsh?R)?U|9B^muzLh+wZ z55VLzM!=2a+BH^$f4jK{G}%(fL!UakeB0^{_|o%mae;XELl8Sdb;79z5W|lL15ho8 z`_1?-D0aN!fNFxef-lgNG`xOXyq}NNe4}mbU7nsk1AW!d9w7xaEwY9qIGezzhITCC zc(2#Du&_|t=|^C{tQHQvYrlqS%r$H0cNaIl6uapI9clr zm6%VV8PJ4(ftc#JM>7kXukrfX@e|XjocMWpipG){O<29pDDQ?JDdi zM!$V?h5In%eXs(lX=os5&_HIlTvlE_G`|6j?X?gTpqodVz<8nkZ&t%&P+ifaO2~HV zhdWKf0T)tMohu>fmMBALtJV-2oKiJ!(Q42Dcd_{5<;e|z4v0xe4EcvQH$}ctTqX<7 z;D++Hve>uWG*r$|E~*nEAY<$8A8lL1#>~Xedy;JcPDZenjU+)TNRpqI_i^RZB0K@m z#kI2C9^ln(Kpp6jI&ts+xB%;JvlytKocFInlGy<#ivt5~%>WC9Whb2o+6XnN%e9bphATdRfJ_D& z*9zpUfkHw;ZYiy?@shnD$bBK~QbKkmL{6V0kmY}|!T)P+4$T&Iiw%}0Pbizcpd3=a z!nS{L3yyyXd@o;umi+mt%Xg{DJ$LM38^eE-)hnUo3`ZNF&v)-Ol`eq?o{eZCp5OwO zMDXb7XiBsuq#=OGIGu%ehl2#>%jvCl;HwrhXjg=k_WJefg29kXO>&7R>G??S|IzNx zk$(R8Nq>u^3?wR~TH4w{h4A(*0Vl_$276>zD z?O|4HRJ1p5s&da(E>QT&jC50v|8KJ;Ks9U+ef*G3GnOCd#=l>pU=8%%1r&)w9#%mf zHSh)+gs5rXyng)zs8o8OhS+jiF$HFL)%bZ+sh}9`+%Fuh)*0&q9<=5tO}KAS$Qgf@ zwThR?BX{e!LPcN35zgEe4Znk>zIh@{IyfW(pxKdhBwP|9_yn+G22j~c!BFmQ0f&AqTcOV}c>S=%#0f^=53O9`p zINbNAlHE=1HiL?oXc+g7&d#FTjN`eN^ili5xdHG0XrfU!V z8`F%69_qTLR8CS8&XjAKb6`HfO~~5DCXYN!5!6-*Py(SDu+el-ii0A(8yVa`8qDDq z4!1+eUZu=_I4|K^FG7D-uHh;qN(m_`+a9(4ERe6cOQwj_a`NX{4`;iRHZw}PamT+f z^qu9Wv&E0)WA4z=I`5m9XbucCD*{g$ma}Oyu=`Ae;@8TV)!V}+#^BDm=^=%Qh8*wV z&DMA;mD{)P^6?g-5Za?X3RrAH_SMi&(32k&OmsCgsF4UB%TG%~C}-toB9cR3dl*t% z+mDVUKwU3y8)9sIR6lGcm*dc-!7vhI$DlUoT73lEDaqbNmnC2{Q*<`HIs*^LLshq% z?i(v7qV}n;yS=ga2pFr3OzNz2VH9g9Q8*G_qJw@#s77IR_DVVqCtflIZLe$-`8;GkL(dAYEXEP07o=I-L!dRsKjdA7D8B9>Z7)LqbmBu82L`PP zBqHG5aH`19W?K@iAYhq28{$BOSct_^5FV%29T*0g0{@4k{>V;*zWGOAl4&5*Ie6^- zIF>gY7FTKz=lzjrCt%#d&!|I^cdercBsl~H{Bp|IUVaiH+xo6bG(}+~Nly)yyYL4c zL;qLrxIg^Odn@wbl4C0T2LGs+pQEj^gzvC?b{g;XJtonm6csIhrXU4>EDnXGi=iVY z+k*eo@F(zIe|ei`uhWun@8K|Dg$?OU@OvFYdRDftHg`ySNs!JA_+Nz6&)i-N_-=hK zXAofUdKvFe)c;PF%cH=b#Jqt398sRHpE>~}7~8McPyahop9onMw0QLh(3+5)PQcQmq9(q5LrK`;hV|KPz3BZq{A_r@0C=atYD|{vHG=#qsRPiV$aB6=b zNQ%M4Wj`X@t~QsOea zNC!=yP8FGHfgM1A*f8{?LRG?Py)Pzv0oX$TU$ztfyGX1l14UXh=BnB6VQ*P+93J3uZ+Bvxj6?C zu_hUb{2?wH|018~-xnqjre_qqhyXP`ESB%;)x6wXSwz3c#Hfem=%U~MmfK53Hw%le zB1^Yl49Q`l-BQk}K%z)sQZC0CX!G-X4lb1VTqgXY!TMt0pYl>8I9gGi{_pYSnc`1` z>5tVoSmlsUo;2#9Dwbx(;kN|S0kZkO^&;9lao2V#RRQMN)*s+D&w)~25|GacZvap?i=@GEz+m(5s5rU@r4Cz>%u)OoT!K z{M97pQDCQs;B6$Zos>DEIbTO%+8cQhO~6o}?wcm~caZ)JAkGKI_GhJJFU-tDL8pQJ zbx#=tDoxM z+5IHaGO^x zt~DLD|LqK4cUmEzf|4-W;zs)hf)$Geycq682>&$hfjRoiF5xD<_zg|4>qy+RLyVS> zweaG{4KDa>BtFE*k9ZL&cLTNdc)BlU}Gq+VZlL9axjNkr_ z1;OKtkC$sv1Bk1kcp4rZ-8*hdFE04qGi(mUZL5|Tk!X%fL8iL=*Ga|jpS^%sj=QM% zHdrQVYW8=Ft-j{C7Nsm3iC+o%q13%(%J`MnZZ5>dr9|a++SUU9q{ufcHEC|qKRct95f$VBbh7Cx+C=jP`rOa%T3h&t!|(6k$7^Zu zcKEaYUffuE3I_)CpW$khKZLs+J|F_N&LipRtbPBcA6F1_7Dp1H8PLZ3Wnu-c*qT&V zLw|@vx7{_;GMnLWfc>fdI|=>o#|@<$#byn_J*D(+kR>#1`}+FYEXKP@Mj)YQlEbgC zex385RbfJXzG?0VC{*D@nT=_!!5N@eP&xj%EQ1@>DFqHtq-wZ-a~H1{P(^sY%LWu_ z=m-*|0~$QS`)JYkrii$#FzLUm+k*xB;cla1$zk*3sO$xq! zf{@P{l-m2LL9J^${198KqKb;37yn4kYQxW+)9Y}oTe6DC%v)x*OU#NljgtVI|!|1T`xeXn@k zTl2v5`m^Te^_9}re-_qpI6fG=wNtF;PxH-QPDiPLqzCiK_tt}hgB)*ZK4z&_Cr~uh z3MOY(-(u%L$VXG5b#)4JAN>Zsmc!srI#F0EEYchcMiO!_?od&maD@uVA$c|V@eiHi zKwv+-G_8bUKF7kG%yE=#;0<<#i*)`CzB44o-=Q|2P4PpfcB3b)c}4*e-6T~Q@?2b~ z@0S5?CfX8NO7xBRH&o~r=4p4#>oi{0*zBAK^~Wv`CHYe%Zxn*)FZHHJW^L`U*c4-p zsxkh=IrdM-Si46mLWHFVG6iH4hl}R8LJ8*xOmn60!PDqFV%Lq=@Lwc0<~7&Ee2=@R zZJX~#H}D5HHo|W{jjcWQkm*&~nbco&4c=L0HY(%X*d80MTmO>QOFL0posrhCxjh!p zpIiJ;1C5OVj(@10k8#_`$nL7ou$FH8oHG$U!^YSs=hJ1qjc@vA5ET8nCPIzZA=Wem zqmh4{$A$igWpIOrlkMcV|FQ*?0oG@^9D_VSSaX(+ZH{hx^U+f+Ex(DC#AG!_8R`9H zhpDyN)#UFrAAc{6g!FnBF2vQ_KGfZh)yJjy)>UV79+3MMua4__?5-&*C`|gDVYeC9 z(@15i)Z1!*cTeYSNlkJF4mZ-ZJfgMUb2DIWPPeq6t&}pHSVYZk$_VOC0p!v;4#*q-((MUp+`nMwEsqf!kI84Z=_dzBQV}^RNTb%!nW6*l2exrw_`OZwS zNjbf8v|xOdj%ru0*ws*aQclF_`0nu(sX5^1grRs14F^4U?n~~P)S`G%Dv8~^j}4WO zfkQY4t2VG?tn*ySYw!BH=XEWT>+#ZeE2ETCjSG+fGz2RmgZ$H}g^pMtnde7<*!;=K zcF)qs@Y$YOsT~430zz3z!t>Echr1cvQPHTe&^cVWmVStqYe(U|yEne+X&(ouVJF1| z3V*W3blm50jVW{GiJto&!F{bF^R?Kc*Hn#KlCq~cP9X_jFuc9gHFO{-+9aES;)*Wq zT<*Qt_jX~bh~cN#`r?Z5j_2x;CJ%y3Bbmtfod)=@=VxB09b({t4l-7K(3LERx~swB~-pM@1DRcRmV1c-je26J#WNX_Unt zG=v)%Z%}yBbpGZ+5V-w{_lU@>t~T7)uQeEC2~5k+$3KLCfJ@_BlB8~?vEwgQXr$a~ z>DY<58~ak{`0|;zNO{sTj7pW|F=q&T)&ep;+|kd^6UZXn9%Nol;{e8)pE&n4og1Ul z#$Bo{5Ipp(HNs*;*MI!7l%VNUK;-09hVkrb_c|67_Uw1?UM?^Hc7#*Q`mCB=to>?p zIQrd}*_sTir#3@zLG^S&r=G3Xh{!MxiB#1lKSx>$ot1kv>omEl!A5-x3ZiGO1cnly za{H<4REm<>8Lx-NgusRnvl#)OYx^tJ8~XYSAjnBhP+Z;VV3$=kBF_=6!udQr{NDQQ zl(@>uvgiJ#|F5KLk7s)S|0~ierxs#5a;cG6k>)PtGMaMD+=htU5~gye+@p|*%C%f3 z_hUltX)Z@@$?Ysm?j*Nzzx93j{r>Tf$7B2Ky}e)W*ZcLnmBex4g}FYn2EVp7K=U*C z&`1o&r*CFKQxoc{NLGWEOvx(({=eHn3osCPRf||^C3#a+l#&1bR>$a2exXQ5%2xO2 z?d7$)v=gjZbyxl=joULSBW38Nr4#9vZWx_mpSIH0p;67e=3Q|yg}ZL0pzjFJWWe?qzsmF3 zANlM2!pvjHx4oZJob<&&372-iCb zQN&gK7v0%u4o*&D^U^F3=24p6d_V|y@*KX4N-g_~&53-`V_J_fXm0pNH0~S%k(<~4 z@L^w!ve~`6;<_TCCeO-EOiEt&;m{G|$vTBOEf-o(hP@Kx+%!@`gNvcb}ioGMvJ!Wt3si*hksvzp1CUQyB zPqK(#o|paS@_Shna(W|FK{G}{H?7cru5_LrF1`;jG*q~{8c7vN8cy5X=uBJlITM*K z%&{Nw(IM06?s=TH(u(0dwcwpl9y7=Xj*k}!r!Pji;#d$|2P%gW!q`aIgj=_CdwWbe zQdgW^s6-;kG$QTt?1-F`uVQxYv6H(eqk1AZdxv*D{*JaOMh`PB>uKY z1P2b0&@s*Q5lQXt;^~h5KPzz6dt5|gj$2k)T@g)6%BiTBW|XA*&L6n1D=>dy@V{&Q z{Um{LOW0^vw=KF~T>Vv0#y%3S3uNr$yRFOPd}huVnz6UqO3ls&AReFQ z`Ob4(D9k$cT8C|Vo1NVqVdmG-4>5X|Ka6J@oNlFHx4bDD78a%!77XSQThlDj)3GRL znN?*m(MT;^Vo_d+2#2bF4H3m<5!3D1H6eB8|92qE(NfJSCqrUyQ&ZDkV$r>O1s+wW z=znqrj0^MGkGWC}MrVtTu^{^T<62v*P@nWfSrACJOZXE#ICRvcv5|+jr2$v_g6@W2 zgt?9x>H7K(0n%6k4JBVCU>>?l@x}b^atN>%5+gW?2^SVN(MNu!C>A^51fEVvSeh?x z#pUH4VyDBzm*bEMQ94cHqGA<`kZ3BlxF%(5LZbOhtofryZ}jvgr!sP0$l>01^_TDe z!YTwS$0vA=s4wtP{avmTc7BAjx4_vYE6}HF^8PUGl}UvV`fG9R5>(>D&mhHT7R=Eb~f+pI$M# zt~S+cm7!K|)iffBlN~t7CNoOjop?F0wY3v|%-Go(dczjm!Sn}72y-JGVx<@tg2E-Cl>k!m-rm7asy#EfEx!n=h~j3q%3l5BI6iMt^XvIzuzBJ8 zc2EeH)DA{f<6mJf@NnNwNr{h452b@MfX{3~UH&tFFz~MNeI?BCY1N}F_p_2bZ?rls zGX0di0WZ59I?UOTj6L6IlAz?CNfDHcJguQoCdr6s8DO-szMw}J-LH46-!B=1fgf&xXF@ihxq;%qq_V)7-Mo>r02vyyOa9bMn1vbqoC#jkjM z&NnKnV5HuNw6Gw$ls7uvd8SdB(-QFWl{k0nl?~ehMw?tpa_?t_l;m^=?jtOa@<6Nn zHrQiZR479#xN*N^=r#cB9_3{U$vV;Li<)HQY1lP_{0FLvU$F@_zg|ZE)w~oxAsi;{ z#%GU1^G_oWAcgSynhJ`JVdtNW`WIpd?&KvM5aC2e|DX``dwT248!s*v@YGr4m&hG> zSLfhbv_9a~#fETGkguWSirpvnPE8#xD+{P?c<*(cL~5zI!{0fK<%UD=Ld5~ZVgu)V zI)-KMsQLahG=p8u&?phQ6dk{Sj289Tp(!`?KCLu3CY}U;GDdxhjMRE;y;-ca6*#7j z<<`!=8Jlt{rdh4~ec=;UmFn$Zt#7|mQ`M2RpTCUS^d%j{g&U&a!|fJ5=9Ht(S4q9_ z0}DcC+<}FneKf46hX;syeQlaKfAnNhGPBykAfV+81Pl%{~@1{t_EY zRoe5|WBRdzA$;}*Tqh7$DHy~*5QS1!=FwTpgexvmpi^UbZ{J)+Aohh>vj#4RhoD!# zWa_19Ws3e#?w`J{aW3)`**xJ6U$amMc)qKgRY5g!9bu<03o(5Ag2z6j=H4?QxVlQko56uIIM^WhjOqy3!4EMN z)aGh7N;P$gK*@A8yS1o=V#VvTsz|cOX=MS8rLf9Jes4te!^!xxd|qBHli5ll)t8n^ zTQtGIm(tP$qZ8${esOy=o9eryIE*78Wxl?oa^c9)rlzn$4Fn(u>iU_Yk<@pii6#`x zIf^YBEabDh9sT1`DkzvyvDW{to;N5~FRy|D@*kHsj)|BMDlbA;*pf35tk_oWMIeJJ~vHHbs#DTCc9&*19DS;^y?jZ64Z7;^b+QX z*dw!7Y~!@k>fGLDR}GBiJldM`RM!U&C`cmak*EzH`7dqvK~6>n-Ko^F)~^Cm5&)=O zU4CG3Zw}H8QaZFK7}voMVB)b^IXvNxKYjdZqZDYIm3PnS04i|bC@)^{Ur^{!#Uie1E#=G;%5k)dGV>izB8VSdHF(%P~Mt+aZp zC(f>&Z5>kBv9*ITva&!+8FB$xL?wL$j0`LMeSKV9QmvE@N9LnH!B_rlWE2-eE<;Ops-J=W3veM( z-emx810-qC?2o22l6H1n%98}2z-bD$lQ$HCIYT$2}+K|D%0AlSzuA&H%xeu6Y#X>D@S+@&Re>q_niUo&nhLtDyOLw92pt zgJ0jey*$|t4kl!{e=f3{W>#;)fnK5t6mC{E&vR9xVisgv$=b{m8oyaPG=3w76noJkOPiDsV?EH@t#e1eaTlT z6+T5l`*~uo%g~Ry2RWWzUgJ&eNiLpInCrka0KU@gw~I{Q1^>nRa9}r;yXx|&wM9p- z#&&hV-`ZNRSfkchmJj#?u_huSf_LHBz+7#>PLn++=g!Vfzw00xybMmA5)X@kqi1RD z2xq%qOm`|Z2Vjn6h!Ox%PpFkBsK}J~K~exJB=&GRP)nnlva%F65so5pKz9sQQ=55^ z2$%w<>`d%cu*WjvJE|CF%|-ZjPp0pqj*fQY?W)ShEwt_OuTSTG{tQtYxrTw@Ytcx= zAtx}(J zo~n{M#S-{&d_42xZ+0~n#QwmjYZwFK1f*13qu)77OZQT+QPEK?wB*jIn>kz|lKi@Z zmEIsh0e4?RF-S=8N-clY9(h_oVVsbC$)$X2-VqEQmaB$$)>5*v;D!@euVR|86ZjDv zgz&|v#e(|#$qqmhiZO{o?Ssr6m88$XSfe}DeS9oxH$*VeV)&Zy|BvRhTBS4a5+>nXa>hG)64AWE{ zk+h$L%o)%rtSA8Ee|uY1jthJfXeO`=etFkcRwhn)-T-h7A(@F4sXGWQI*^y~!2R z?xtYW-hn#6R_ef8YRorKCnQoiBY=nq^%-Ww*aY>{1QeXA>7rnhr26(vr#>$`Tk6#P z3O>9(uxt35Y0k=NJgmp*2)bk?bf0c~FKv095{F!3nmO$*!GD!fzu>@&<%S4s@)AZq z(@zEUU=6;i7W2Y%(Z;yvgh(;2!(4<>xn2Ads_qlOnWVM5aqZ4BYRF5k+4nM{VI*LF zL865t+S;S)a=aD*%jE-b>}PkQqj?(khwY1NX`nd+brT+jtj{H_otK{vQX<$DdwR^Z zfCvg^!d>29`Ktp?6}eJwlvk=Jx~Sw@Y6hw+vG}illg#zt(K5Qgw~`BQQR~N8I0hc& ze+~)V$i5^OJyW$tPJT_zd7xlZYDQ_nsGu-+596kU9sll{;d!2bQ zCD^-osY|8EbG7);+uaxaf1OBM-+Wr*y3+4!tmZc(zv4M;iIrgNR;}ky9YI>JkB?wk z^K^Ed_}*%C=!Ez=pY%E~wrEJ6|H}NP)pptH*up&>g7MFL|1w=Fs)RN_|F={5pibw* zfO6fX`Krj6Z|M;n2j>?|2%)zWIxE*&EV-(E6UDvrhr0)ZTdgC03x}=FCT!uh zRTM^CI6ZIWIG&6igN1vyvn7B3k9%ei99IJ2J-ELLD%F(iR<+J?T!QkX>x0_IZiPUY z6Q$pG9@*>1ck5KX``Afo>}RK6Oor|p6DtTKF4ocS*9BFq&>COg*D5{7T;o7^ZG27p zRl#>MQ+2N;4?IZ!=VOz`y_#@qG+#4dy~kNv4+s7GyIM3dH#eQ2w%3I7=^bKajgG_J zvobAVw2_nRtpv|epi9EFqfLw`cjhdUjLyJ2?I)u`P*$4+t~MSNlt8W)8aCv)wdp%Y uhdhWNftQ(ngQB}7e)u(gV9)IJ?)}Doo?krgguhW!c!>W59|QtDRD3O~2?Aja0KZPS zcYt?Z^V!D%f3Vy%6~LgrJAN|Q zM8iCsOWLk0ECRb&hBNyKb|RzdCRyFQlM_bGCv$~So17ohrGBU-=<;6-2~}jg7QF6qC-fktg%3+Bn@e$@yy{S%!>TP6X$y3 zbq|Yd(qKOtN^RiNV-vli=4qt@G(vYlA9vYUg6UtwNa?nSur=Z>72~PQD>#G9xX;T& zblBddd+LUM^O+K9WYO3*q!nfdJq^|H{;=fH7I&H565$5!4US4}D_(U{DVv%1woiyYnsye>vz|g3Y6%a2GYa)ewTj z%UAehxwps9=d9vzSta_4&c^gKI{4#P#L$Vc>x#UEehPO~k?tllO+^h&or$O-h}-Ds zE>q%-%GWLEx^^rZS@_V%1olVsa2dr$5p69ay=u3W;Xj<#h6mphw3baALv^fGi0(Pj z&(7}7)HqK4{fM*ZJEw#M>%8TllKN>^7pH!+ZC|e|*d9Xv<|UD=h6O}%ZrFE29H}kT zH9+olXT?~=NN5o=Li+qxO)Yr6W2+}W_0RR~M;wgpLdnbdZm&+odfTV!yy}8%bDA6AeHZkHzvwtP}OUvLvm*J(smuWGQ8(U zQO=>^kCaIcgRA}e?4Fd!K?P{g-O<@Jq9-`7(uN@RxxsJaSt=E!#@td8`7?C%^t?Ph zpFLyAV`hzn?F*FUC4Oa!fc$Pb6Tt)9NZ3ewfBnIUug zQ}d3V@>$5F135UX0NLo|l+^h+AuiQXI2CW2q^G+~=6eLl*5yh&x==qOPk21SBNGZz28h zygxW^!)w=uQl;cIm=)ur0uAEhzCnphtQ$%NhAb5Y#qF<2qY{`2#DrAU-^^@r6u}wu z-!`S^xchOk*t;1OMBOho2~}v2Z;}EJMu+HAm=CN=IOI}nZ3=CfRR*r_13kY9=JO_KlR-os1-jN^bTaq8+HPG7C8c>?!6cg`k3V(n& zGlaXA!CavDTz3}fd( zaw$9!!3Xr{S^Z*16|LvE9XGY~vepnyTh4ZUk|9dg+?-DHyqDk)Mw4kobSQl@%pnbl z@NRLCxq+OiBRRudZQB`#Q*kBVG3%x1)9M^P`Fo%G;W&fQ2J-bN|@+gz5orZ)C z?J6;V8P?zfIw{LO;fVi*%pm!6Lim30QiZ8l1iZIG+hC3;nk}!nLPw|4h}j?+`xCz! zE^FEl=QBkOQVsqMAbLy)6(_rOOx~Op=kMIkU&;3IgSCpU5<^}$5uXYQk5_wBuV6Ny zZx;d|d?{wzE-eoHvzbt#X*_~+ChR_d@el3cKr}qXY^G7C&*-SSiQ8j~ZCDvFCVuUV z>r1;|#>4go2+MZDz3@I<2E-#TYdMcsT1I6}ki^_NXW7D8)bEXlVezq<@v#YU6_v2H zZ3deJHFkra{yhYAC3IqSf>J|db4SYYlfTDwQIl{sIA=dga|PG4RFaBDSpM7!8Cz6L zRByjpf^0TCzdXN1On{4>65q@HGGTen$DlA|baVP^q}mhMhs&K|uCp(Uo|R9xszgl= zLPmeWb|))&U~Je^R65lUA?3@##UY|+BI%y@KF7twpk1Pdp4)DSud^$*u({ZoMJ1}}?mbyxTcovOI$FupG=%Ils<}#ke6C9)#aRoBLErY%{Mwa3Hh51L!#youW<{!B`8(SBUqtw z&~c(3+nAZX2X=^BR%>;(OBOr(+o)GnXA<2eX*6f5 zUs~b$f%+O9Nd<(S`hWU-hqtmE26@)I-J45mE`t;BBP*5#GXg3rZEi+s+~33>=-Amf zw7%88`S$YFT0lcyMLs*_I#dw;otd?rPBW!+0aL~^p-!199q5h4@Mrrmb^+m_pXErc zY1W^gGq?=#Y>smVQxbzx7r{4pj&?@YALd&cc+iBYlqf+&*S(HSH#)~r<5J1S zGh-1Kncx}WJ)}b=4=rc4(w&&L3DkVJ;q9_(}$_zYsy3aorIE^Gwn0A z%6b1Ic4b{X=DL-m(b*%Znan>mrrxFon#Cr_3ojimx{}fd_r^o>v!JAQ){s{3tyFma z?P^qYtr@@n-07vx%#6M6Os3>21%&824 zf@juddXCdZDJdDzr`sAT2Jdc1?vGHJLmzMrx=yOhS+kef7&Yd|p;~#cDQO;@h6l2!#PqVQLWpeL@8rlQwY7<1TC$2q zyjLMwU@E?wMI6$3QL+e6|J2&Uz4;<1TxU(HTvf$-aWdQ%`5x_Nv+pCCR=hBwYRs$0 zsz?KCnL@Zt-FX!ZkIC-~ldYD5v+Tk^Aa<{w^yzSyK6;0OP*oXXV}HZ}m!g+GxHy{_ zDeagD8_lhhCk?#XGg;8}W_uUZ;{DpH!tQ$La+?%2j(!j;J3YBZ@KvW#?or5C&Cqwa z8{=by7)x$N{yPhoD>_6n-;iB;vyY8q_|}5`C>ferxa#7mZhw7F#36FF_C>9~ z{!&{VCF zJ-BDB`ovyHIs2y)F5wr(ay4bm;tXQi=pUYuPbtjFu!%KD4XP00B@|Iy8e}!KBP8K$ zat0d}%)7Iw)MAZ5p4U$i*C(E7CTpm5m#=KHuUf;Thg=+*ZH z5g_yFCB`q@`m_w%M%>7(4Txrtz`ST0w5G>fazltIKo-*Ucw8B<*C&!o77H^ zBXtAsX@h@dnHd|5EH=LzZPU8Hn#oUJG)JMN3^8aZJ={~SA%4zMSKR$Y4B_?mgQ8*9 z)t{h}qAT|R6D1{BuDeBET}nyW<$k0IpC=N!Q2<#_I6zbAS+VvQd)satKJ+uYu$Wnt zYJR_CWnwLEZXEf5gNx|iry+18e`%-W-|q5ujZ~~g5w%Da8KDY0u!lV{w|-IX*YdCa`dS2WI#*d z2mG1hC~NfZ*v5-`k|d+(G1O<4_D`I{;+!=EB9p&W%rI@;BRd6GO+a=07& zU*Erff1N!+uFgB+5a~4o;k_({v9NM~af9#=% zE>Fk)1dn)4{T6^|j99vB$njyg(7NwSAJ zg?`&!3m4QqzL?gu5Jc5DON7eQ$%%NGwbK;a4xv{>@077z2W>*qkJ5}hcqNZ8DzG~5 zve%&C;d3QP4;f64*{*OfC#z7ttJzNK-AfYi6T^U=79xgRri?M1PHdny9tU2Hq12NHiCuvTxH@4>D)VM*_b0 z{9Z@e$dd1Cm+6!RdzZ=Fkh;l+WDrBwPL+2vZAZ0timG)}Cp9e91w#mLp-VmgOyJ;| z5uX=Aq(Ss#`YME|wsU%9o*XTh%FLI`r-qxSjikyBA*RK{nNw3fOXg&dMW(XhetP@s z9pfwC0%CCK?N$MmBAkgc z%hh&{POhEdFkymZ=6bX>M|HwpDWCpGv}hc+IJw6D6g|{7{m=;FxcDg+jJFiB1)*jl zW6Oh-m)c^zgKDFMAN9Fq@HM5tH_mPYHhj$chMtT_v|FaP`s?j=%$5f7CvHIHrLX7$ zr$^Oql%l|;2PrToI&ah6G;GYN&Nttr)#TGMcNSig&H`^pU~NNnx=IBR9o_Be=uWMw zn9FOI&3K{JEl*)+!26}UdeLwvg5$ohNVe(GhnQvK)8yzjs!oE)3KH<+C}P)Ztt@0* zYDlc4(2iZr_`J);uXLWL{uly|YfojZ#@n&>ddJXuf$xcHEW4$SGuk7gn|Q=v#6tim zM_;TLDajF87!cosySmIpf4w@cGvcN-)j-8P+4DZ!Df1FJ=h&Q%bR*tt^bhG~HW(a@ zZZ0u;ZX|y^2uUsoJhxjK$r`*V5RGFlhqoigc6oYL{nz0dk1%Ingc}Dd8uOW?C3hn# zF}IGg?_AX0*DlPRnYq3sx_YNG;tu|`r_QAasV-pM-Sg%M(=@XFY4)y9QcE4~bkth8 zEwLg*UTHkF?(pF#;{`9PP&?IL1u@uj*KTHJovb0LgYd^Zy+w?!9n)p%I>b$lS@Ei8 zj>6qZ-}AB)>SAJDVGr$KYM!AwPFQcK`(#@$JbpClXJ{~2#K#Q(;$ldF2)oz%a zW#|9%4hxhI9CT%iGpfFW1g8yWo^A8Q+m0ud_GB2k?}Z!AIWDN!FY$P zBZ3ycC~b&j*}QeiKxbi7Il40IO+24h??lbe?@5OG4ZLVozb9sw>oZqPFQUqEOfj~H zHY_Y+cxgko&3OpN>K|#ex`G)AG}SHG{k7^(b&h)$2z?HlRSB=mPyQey`VWc47|1+m z%$%GCdR1-@8xbu&9(fnxEcM|4)Rd(pp<)fm&0`LzXlW=Ba9`UGhLY+jTk{ql#KTO_ z2Cp|q5Ar_y7Vsf%>hrHk@+1h{D#=v!v{g}JWNa(48Xl@5(N{M5BLHwCx(6cm3erg@Gk>gY*>BP$_t8ok+81qWmQ*t#T5Ln^Z6!(8=`9|aU3RLr@ zwd}Zih6}imEh2d8W>dP>#8ZB%_pWQptY)Q;x|Ts;JR82Q-@x+tYIynSwl5F_}CN37(dUhCGfEzbBUqEhLDC03Wszvct2q8PQl!Z>m|ZR=ge#jy^46gwV&=osR*^eVfhELKP=3%0d=q$QTc<)Kt^t^Go*ZTUwPKJ~c zF4KFbtrQXgI$@SAE4-^2gV0o4g#%4cT zp@lqd+CB#2+Voe%nr=+~mS;MPh=8haZ(?j1Y-~*E;_9W6jek=ky@a{Cj)$9_f|`}B zCfL}+#Qc?3(ah?$Nh}F|XwlY_fEN1fF2~AetX=gcYD2x5aN9B-8PUC@tR44B*r138 zX}Zx2z^NgD6<>T(ttwS0r;KJ64=(W-TpX=E<>74jLLRCfQCw40g@wI%B|Dji@U*Hw zA&_GWxskpiTWy^kEzQ@sg+Jg2m!B=0kF@2Y`0P9$I^6s;OiTC1urR^X#p(Q4(i0Q4 zUlN^aYhymQchyaX!93l430(O}NM@r39dyP|s0tM~3KbhlBVmgh$9p9?R2Enx{Jzs-irZqI1~iM{Env zP-HcGO?35^&^k47tR=)OWFBLb`|Q%NKSjV^`Cq1@Yy3VZ5Y=)au+Su-HHj_#>-K25&$O?G@G|dv7%kp;*x7jTSkKJlYRSPN7);= zEpVS+E>zEh4vUOt<@mFPVj`}f_`OIzL?aJ_IJ6M6{_L<*qC<`j(qdDK@Nm~ALs1Dt zPY2m|QRHc_*Te^xKQj>^F}ZD@gd_5k`2v<%quBA}1VhKG?98@0k{Z*3-xv2!1!Uw@ z*Q~#%vL4}!Fxff{Sh%}#cJ$d}B9$#-PDBsYr_d7?N9S0&cguACoVMHbWiisU#V;Ke z>B2q*dmU7zAe|>WuCLndrFc+U+{75ev*z}}RdeZCkE73# zvf}Tgt3&Q4d$wgsA1w|yt+XF)iL=V?of2Q8^`3E0T%R}&U()omu|P?pereYSO1(nKe-S7!^)F);>Ox?+RFH2`m@r~4Z-C5 z+6O)Qc5}8d?`9Q6vlD-X;NOu8Vm}Xb>PeL*;(pG(VPbrBp!b%7WnOv${qNcK^c!hh2Tq47!1Y?0!hlKzB+$nC9w#;;}NwJig}(vz-W2P zV8PNC|Kanp!_Uq2y96NTA8ZT}F%;A3gmnR*+?}((GxMx&a>(NZ&`jEbK%uX{2M?nz z*3Fe~UMVLN!30X}4B22B5y4oXw(M#Pb^;D**R4BP>Gwg4xHZn@cpwl_MGxIE7^kf) z{YqQf;Czp&^Aj!-Te}9!SE-I4EJjASC5Jo3RGpKP=N;-F6(sQoTdhxG!A(f+QA{LD}wV&NNY&Am%sEBTxWi6W~?XU<{qS z#b@x#^}cQ|!HDnG`5VX21eaj_7O-HA&OADdcj@%wQ2Ik;7EEHM5Ha+PmFTf$D$(IF zQr-MB=onPdJ2pWjRm^u!fz?9wS;C+draeH;m$~IO{;|lsH&aUns8zL<*&-^^Rs5;v z=RqrhRFyxmjY7^tW`X`RA_NT;9i$r_2ez}Udj=A#*q)E9*c}$@0uc5@ExVgRkN5#qB)^{~Y zPfgNcd$~Ijp8y}1!S8gtu%x6?f1ta&Tdg30NK;EoOQ$-8Br`QGE+s|J%xv$(*Y9Mr zTWq1iQaQ9IAue-%euVFPP*B!zt3fk1vu&9i6E@|_l15QDT2xB$g`a4?=(NLaXG zt~}r}F&s9zbdZ>mf^!Eep?9q4Cocm70}-zMd<6@ugx_$cYh?FqtJ$rZ6S~x-QC5SK zgF`^K7k#udSua3}Z)s&gN=|N@W;Mpg7>6si4zs=u@L?7f_WbiJE-l|>$a>%#-@A@` zD<2mZ=Q^sU-kvb0M!l@Q4vV0!Axx%73P$R#-$x z`uZ4oWa{V8E1mM<;t#UByE#2A&DG7#>6?(UMq*KELxXyj6nPPgbSpg%kJAWD&aA}r z`o?ds`FOOyY#>A8eOGt{tYyE0VAanv=x9(xtH31iNL2(oxSglv{LC`Nlt18dd};rt z|0TCc!|}Y|UgL5f$DL1YDQ1BlgF+~kbl<5%G7jBheMNSg4<7{62MK3`%mMt*x zYi1mENG(q`gfsP~ow4eYPO-VNoWg zN5FdMmDju&=CvT+(a{kFm!T}KLHYacBt26xV1$@(^osS%tp=YIAc4b>;$qH~l7*n# zYZ?j9Z-Z;S39JfE-@&*(yY*;!2<1qbS*xVqDW^dNGbw%)m4Mac&v(knoaKfkgi_~k zRa6FY6%$5BNB0Nsi|)QU{b)Y^uJfxDrnXh%Wz$w^<6bj56OUxLq@=XvPlfUp^(L3q zR>R3wR?toT%g>=zf+B81|2#V=!JS>d-BgLQBp36ZQq$(O6O@_AlV4O+RC>lPK32MG zjeFd6M?;N{b?flYI}A8Z^O zy!%)h&$eBmClvjWyq6=;1d4tnTtEG}{rO56ciL^T_ozW zEN5Gbsmq(Gv&TMB--DK33 zB}9%ePz+sISQs82zT_;*DlxNlgctlqOH06GdUYWX!(~3Oaxlxgf6OHWFG}T~G)KpfsqbHhd)pz~TnZw4=P--T5omM$4Rg|CaiyERSfbz?0kmjJZ z&%X2J+vsVsGBZQyf_zU}nxh_`aH&QW>6WfGYlc%A9H$=*2UxJ~I@>({fA{?OUK)#*7bJ*h}Yq2R1iH{u9RifN*KP*oFmlQ$;Z;b=g*%O1Q1<)GoNJ>gYL6 zHRa{xbkB4rQoXh%ij2y zc9{w0%xVcNS%d?wHGTZ_;3k&9*J2{8yVQhDC9=(43 zda~ZFpa+>6mue83<;35cq@yDwB=o3pWi8#&RXl^dQcQ%Em5C{!E9`MRv!1RlIT@M5 zWZhCkKaZE_)6~>d;OVu3;04EKX3n<;1(_@aeIl!zf&x!tR@Sgs3NyQ;WHT_WcX1wk zaCCJ1U_a15D7m#=84($24onns^!@|N?_1(|f(%mc_7`8u-)DLD?9o%v-;T9}w1PiM zTUts>)rdlFt})#`J)xaTL0l%{{*(K+y~!sy!9}$qG1R8^0(fp~1AM6}l~#j{AzcVW zO;uIX0fIV#Reh+h&lku-sA7Yoje;yIYwIk(-FmA^F(#&!ZVEHwTE{uoEdThVq}4Ob z?MYdXiQ{cX@HVah@{)xscuP&KNdlp})p zQRww28D%XuOUv$YWZ8kYc;Iu3sIT#y{Ug#*-=cK|mrSW&^x!O`#C zhdvq~8%s<~Bm!@4ZWuB15*-Ru&fS zo}R$*hcv5dLnIPO^GLzY&d$UngITe@zFs)}q4fQaOxe9fCbz$h$`*pM7q%otEv}{Z zfL;hK=Z>fq{H0zrkBY`GmHV&}u&8Z`bC;FxHy@QTROOTzgRfs{kV;5M^kfA3Dul8E zdy99)FRBPCz_F7j;Z-3z=N41%`a8 z{Ky%)Hr$gF6Dcw9<9}YeEZ9mmz;ZlGpmu z#{rg9GgOOp1+q5d_AVXt^o)x&(*JTF zCZIq{ciC)BRG|tf^*ggf>5 zfX@6yAX{00!+evS)c|k$;O**QQI1pS&-)+Ekvw7tED_59DE|70Ix{7uM=U1XB{@0K z)TMj%?)?Y6hias9Op;XQ5WW=_1QXN^Fa?5_*P$Zw@_GDL=EcjRLg5%}oR+$+3`tpog*nNGX#3(&IT_Ng8Hx*_* zCuVEY7IVCzWn?7su0yP(q+|=_^jb-2w#i4?)%9@7I*X;hg0r7m*j~TZF@w1`N1fJ0 z|IP3D`5ORM5z+|*NJ3f~Q(TFUk6)}?w6Mn->SK)y`etFS~Otm)iy~wLOKVR+F8~7#$a14iqmg~(8q=>`x)2vwDvvIvF-%Bbzl>xX;5iRs6 zmNQ+vIm2!3g|?B=%*4cLkMzw(hSz*}WRyVqAOKhrxa)quuV#FQ^_{iKg7Ec>v*>Jr zde$n3E;0D#@RwPp-|nrNl#jcKNheE+>FDp@i_W3|Wb|0xUwRe#@Cb7abyJMzv{DA3 z&0%3dGN-BF+qRD-MzzhCF+r3Le}aR93$=LM8s`)h!%-$)*PVpYSBDE`^%i~ILFb)x z0G%kNb~J7c49JoSz-7=g^|92|P0qK0=MSYGeJ2iIB*FejI~utyg9O?Tz~fzCEv9HEa&MS$QkCKyG;sO&25E3OuV z1)y64B>*(?r>a1Yrl+S-Yt2$iP`pQts>FFQ(wDzi4!mDveq7Kqo|PaDH+CP9OG--O zX+B;auqz|E_lc;3QeEYBn2WfG{p5#oeRz?bxP(OGG$O?PL}w9*7oL&bR~-byURAX| zFKAnbC0qa==x=z&{jh>FN1YOM9P5f@u7a!r(xBeBwvI*-9FBm9U34s%{b1W{KAXq< zVv6B5ZPF)_EgI){n65$~@+r)G`PlgiOIvogD~Fb$9PlUj_f?-=3`tlocnnJxWcb2| z(PxfHpUh4MhC^FJd0MW6uU*}>jz&~1ay2}!h zo1d#+GI4xdfNDF~*|~{6jU*3JVW)ZF zy$`4aj87j4Ab@;L!R=j(T%mg5{d>-9p}L?6y5Z~Z5BB$e%J2tx1MdqM@jP{KO)B7$ z_ZY|lv_ut9xAZ|_$Jxo<7+wVAm4_ZV(5*3UWuc9eSN^P z(a4d%UL8@WtaP(5@D$HDI5?0;=>Y`O_xMB3W?Di*LVCJ#LzIN*&X`uz6ePam9H}m{ zCW~|T?>GpH7cVN%#eChss`uZwPaJ*C>^gseuC1;H$kOf3lr<-LKh}|~-5u$MfxGjM z5AZ>f3>LR~f~p+s?1gMR1pr6@eWb-n5x@5zu^q%f0Qxt! zgTUmVe~&>SoS=V?|49b_9{-yhLO6x7{<|{()cn8F$G_?1X*#ogFcVPni8A%Uo52FE zcI%gxuX=fHVUP2Xb~XZ*$Y>GsM5z!CpL_(8JQoQJbAvqt1hsn%|EZyW8~%ImqPD!0 zOJR%9$aq=No_x@H_>WRM$^#E=LZW-`j%ule9$em84_A4nl@)kRWsW>U)x2ym6W~L$-|GbI(Bzk}ia%Lu>N(U;0fw6Kn zzAUq?h-Wt7B!5XHiiX2Nm>v&ZWSdzX1ckYAE5?u8o?Q6wnnZ&iX27Ga_cb@v-9w%tE-oll#t!y zV`Vi$R;8sG4*AH-%d0>Hh;Ri31;sO>lam259iNeboZ7Ilw@<+41O*R68q???^y#LC>qQSs^uG%JkuU%D<`E_T}`;WGz zU6#8{8oktCoXyTSHF}(GOE37&?CdoiIkxQ;6&2ks146=u?@lbq*BU_)D!cWcGhE~Z zz@iFNZT;cF?udP-;|?eAU$S_3QnWjW{NS`*%JiCRz+# zeB(0*XUF!FF}(r&A_iuFF8=(8 zHa0fHl4r(R<_Yw;Y59O8_KflYqG1k3{{#LcTvpV4=?yP&I5TtCg5U6*7I%G>UYRMd ztOPtC1Yk~qtSI~IPFp!`MMG&petvRta?9B~STP=#0qUls14v;rtED9+LO0vTz8Q~L zV{|DSMt9K4u*93U_g@kLMopB+{7<)@)44`ZVc{|9v)Nnh&+T`UJH-mL!w{_IR{$1U zsB`HgQGX$2zE+)Is^px;u6jM$vjyugFKF1pG+`j<${vae`YZo2{ToRIH@WaW5gj z8m}&n1OzHyWJUv73<`y=yZ#Lnu0zPtQO2cxK#KshN2(Q|?>oqX;Y>+CAQ44{m6etz zTWT2^K9}+UosWmr&K|N3)t7Fi<+H<|Jh&$=E`I+Z?bAo0LHWHlA=B#`ITK|IKV4R8 z0U;TXWvqY|DkmogC|Q75y6+Q!GWBw>u?dI6Lq>r$$%ha{2h&5IioFlgC*k+re`}Cz z4lMZl4@W&R+#H3|6{4RO+B`u+iN$TlegI(rSlmUZ;;9A?01jMZ&b%7uLgIn7;aS1} zq)%r}&G&%13Fm16^b5IW-+-e*Kp>n5eU%M7ax8p&aeOsaJJT|}u?ZR1c2DVXJ9bSZ zFsF1MohW67D=%iEnw6CZ>tr6}X=^Z=m6@a`Wta=6tNta$@s_E8;=I{V%BCdx^c3d~ zm+D|r5}BTQD`I8iJjNvB-pg3#-fx3pHsCO3MHm|~SX*Zt!0xuf>77eI%ZULRKPqI^ zZo$tU0cKCK6eA9&BoIsmiXDaXv?>y|=g?)qOdP(J_BbDrg|HJt%a1)l;tbfU&|S&n@bvuBIyCnPUypeF z;Qrl@W)!6+p#R&n`@bhudtigh|2r}N?`QniEbedi{5RA8WqJQirvE={@IUSdNSFT~ z(BZ#t@ZUT7o8SMh8~m@j_ck69Z-{7<}SA{OF8wuPL+=fc=BG5D$mqk>6q zB4Q=eD9!KQCp@UCC5ec_`d#VF|KZmg6C^;+#Vjh_T+3-dzWYv4T0?Vk20z(1N@D2$ zKs(D_6ri@pA^(eQ|L1G|9hJo&?QcVvg59_yh#4qjK)(ex8loSYDR?ZfDDJhK zvDxn%AfLNV9j+pzzGE7zYHN86t6nFsW|>(t1wZZrIg^5G%FA8Ws!_yXMkR}-jxS#G z9x0st@-x5Rm)99{r}SI$r;4I0I3+TMK2(mZy5a>pPo!GU2hKP|z`m(GOX*+rY~1mb zK);aS*!oN;g?s;V2vO1arf0n|A0NV%jcnGjmanycHJ-W9?+P!NzQ3Z^-m`IzJ4KmP z?j;d-^Krb5R>5Wi5F^i8BL|;FyjNE4e<(6fy5c%xFAT=b8{2Sim~#y6bnGgfvagxh z`Kw+z>vNK)kJ}cv(&KWc5cCp&6of6J-Xt(@Oams-&^H%=q7G%2vbjUhlEw z0W9;>1OO>&1#Z3ZEF`R%TkhiQdC&x`yEx-0k*4d@8NfJA=qIbR=#|EtZe=B91Wb(; z0!jqnO0sis0Nkd6Q}U*Z1iLxn{zI{)1a+zEDf@>HPnsiqf#IzCsW{?DJeRe~H6)@vRp4^L0E7iTX3hcG$W z_qv!GKm)^QiL<670sczv)@Ar><_^kqiL>!7>%lbs)%bzp?bh4tBn+*0n`13O@bB4C ze&^qBb#&x3+{H6q8-YYM8SMTdqslxPK0DPgHqT*E z6BLl#YJzHa1_Xwimf=O59z!m;^9RTUEukW2g;;zV?46&VpGHS-LyhHhf?i%w0-{=|Eb8Ru?)}pp)NOeWt>0;?HDg>D9Il+gCB0Ln zwY9Y+Aui58D$p`l)oWF2=Gx0LEPVzAoTSBT!e{C&VSMrcIQll2KRY`M_y?{lh$yv! z&ZS8+jVM{hBHfY(tIKhHW65Aw)`HrCSlOU7m0F+Q4q1d@38;YC`}L z@Re*_Vij4G>jO(y1{X;2f?zyUeXsq^dMDu;(85R$oj|%ujP$9#UiW8BFzmz(0jTql zvW)T^bMLFe;=8oRttvA_ueu&m3s-r$|5;tlaPA-~Ln*VL_%{D>cFeyIsFR)C6tW!* zavHn!nBCC|DLViC_CLJ|k-jIkHa0$MsRa(63IQe#%)}#tCEw{=0V;Ajv&Y846%`dV zm*tXJQ(X<oq3f_pBFrC)ju$xqOKma5+!0a&~&;} zd+WNqPZH(nc&w5^kNYY#bANoZ%=Eg)j_1X#KVTYH2myr&m6Zu@(NOGw#Oi-_~V@tP02GT664GHiGdZHx)I>gWrDgk+<;7UnU zqXXdN+?`O^fyX|%c+IZE7y*0UP&(LjdfC+#vcwwwP1FSpcn^Vrfi^Y<_QqF20#@h# zEf-EL2eSk`i0BoE3s-%}XK%il#xs;NT}|93H{S+E4`^t?9j5Sn zhId$t=#jO2`M>5KUTEiy%=f&)`ihF>%?*_I3mWMpdiju4mHcZQlu5=zQaOeYz;ug% z#g#OaQa^l^6PW~u%d=<`-BT(o-HK<%3zoq}c~}{Xt0b?!W(Ky>0agw6P(9e1$4k=VSzkUaC*aC9QvrB^If%J zkYasX7;tUa1#lf_XHM$Z)lZBDKC6MCn7 zrqc-W?&UW>f#em!FArdH>9zI&+an552{t1=c(xTF=a4?^R+=T}^98djOqyLjdTs5k z9jI-oV0qW=T({VUP@tNr{}VCG+h_J0KN z{xc%m=lBPSA@q4EwUclGAg0ckt^!o)vVl*3JmW+c+H4dh^W>3I-~Fzz1hue2^CAEs zCS>6e@ay-xzrZUg-{$!D^c%p&2-bvei32E!@Ft3G8Tya(^Z%-oK!06i^}fOV9^1vayylBzPt z4pIcM@!}XN2hiUGRju(k3D2H7V?7fAEu!eRc-qLS>Y~=^i@6%C&-YVR)?WFO{hb?s zEuoUaJe#gx3HM$uD#SA@b}B&ZZ5#+f!E6A0bi!r{*??#+g-zf?8ba72AR7&(Bw#$T zT%;K=7wZgx*N*pr^FTxZg3%@=EYtf3R<xaQmA zKpFrfn%gV1w6&F$uC8w2%>^2eKOcp5ep85V8J5)1!2`&cmsyz0ZRxr_r2KX*@d>bg ze&>LNDIZ834G6@%IQ&)TvVu=Q&=W%^Z9N42TOVOCbP-Ay_$?!2$63^B;2Q(r4D@FO zUfO7A#0^?e^S*5ZOj-*A;35gnR4bXP`=9MlrGvx6tRYZ9C3jrZrU8NO z761KS0005Bzun($+`B<$-B^&i0lV|}jT}0O)o@1yRZ%B0ZBFjYzkv<*LMA9dRisCh zTj|y%5XJ$+{yrh?0A)HLbv5p_DC1H|2VPlc1$Y9rAY5iG1FI1m+uO#~wn;NPfy?2n zfU#WTy4vR~YQY)tG*E$W%mQ#xwDH|d^mM*xrlqD9!Z%AzB-~tGwROnuwZD(^Fkub( z0q+n4w)Sf<2FsAKychIvYTTKKq83R`Ns+$2B1lToNip@sGv^c#_)G*yQpX7DvPjqm zZKp!|*vacm&jqS0cl)Jh zH#q?wE& zCj-7lpL&{u!(|g+=laRuT-~(2EZjM|coay1pk(+POj-wHB@ZdWmLN2{en3q49x7Wr zG#N+B-~Wai^l{;R8!_<%?8Zmv7*eG|AZdAfUt-K3!X<2-LigTse-(L7 zXt6?3MyIx{w$9-9Ct$W!?_JWcu=Pp^nG6_r1eQAZj-0nujAuamYyA2~2>ouZY+CVjlNP3{-lxb#y*nEGr{K zd7Q#!umtQ%e41_s;#Op3gMM=3zU&ggJC09vq8v~pm)WEF7*o~!&hwu6@%&w;description. + +[left_design.png] + +This is the left_design file. + +It's nifty. It's also economical. + + + +[main_window.png] +This is the next one. + diff --git a/datafiles/tours/test2.tour b/datafiles/tours/test2.tour new file mode 100644 index 00000000..aff6262a --- /dev/null +++ b/datafiles/tours/test2.tour @@ -0,0 +1,16 @@ +Another test tour + +

This is the second tour. +

You get it? + +[left_design.png] + +This is the second tour. + +It's nifty. It's also economical. + + + +[main_window.png] +This is the next one. + diff --git a/datafiles/tours/test_de.tour b/datafiles/tours/test_de.tour new file mode 100644 index 00000000..615dd84d --- /dev/null +++ b/datafiles/tours/test_de.tour @@ -0,0 +1,6 @@ + +Das test Tour + +[left_design.png] + +Das is ein test tour. diff --git a/datafiles/tours/tours.txt b/datafiles/tours/tours.txt new file mode 100644 index 00000000..79242c07 --- /dev/null +++ b/datafiles/tours/tours.txt @@ -0,0 +1,6 @@ + +# This file lists all the available tours. + +test.tour +test2.tour + diff --git a/l10n/messages.properties b/l10n/messages.properties index cbda8722..3a51de44 100644 --- a/l10n/messages.properties +++ b/l10n/messages.properties @@ -999,6 +999,8 @@ main.menu.analyze.optimization.desc = General rocket design optimization main.menu.help = Help main.menu.help.desc = Information about OpenRocket +main.menu.help.tours = Guided tours +main.menu.help.tours.desc = Take guided tours on OpenRocket main.menu.help.license = License main.menu.help.license.desc = OpenRocket license information main.menu.help.bugReport = Bug report @@ -1531,3 +1533,14 @@ CompassSelectionButton.lbl.SW = SW CompassSelectionButton.lbl.W = W CompassSelectionButton.lbl.NW = NW + +SlideShowDialog.btn.next = Next +SlideShowDialog.btn.prev = Previous + +GuidedTourSelectionDialog.title = Guided tours +GuidedTourSelectionDialog.lbl.selectTour = Select guided tour: +GuidedTourSelectionDialog.lbl.description = Tour description: +GuidedTourSelectionDialog.lbl.length = Number of slides: +GuidedTourSelectionDialog.btn.start = Start tour! + + diff --git a/src/net/sf/openrocket/gui/components/ImageDisplayComponent.java b/src/net/sf/openrocket/gui/components/ImageDisplayComponent.java new file mode 100644 index 00000000..aaf82928 --- /dev/null +++ b/src/net/sf/openrocket/gui/components/ImageDisplayComponent.java @@ -0,0 +1,124 @@ +package net.sf.openrocket.gui.components; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.File; + +import javax.imageio.ImageIO; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.util.MathUtil; + +/** + * Draws a BufferedImage centered and scaled to fit to the component. + * + * @author Sampo Niskanen + */ +public class ImageDisplayComponent extends JPanel { + + private BufferedImage image; + + public ImageDisplayComponent() { + this(null); + } + + public ImageDisplayComponent(BufferedImage image) { + this.image = image; + } + + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + if (image == null) { + return; + } + + final int width = Math.max(this.getWidth(), 1); + final int height = Math.max(this.getHeight(), 1); + + final int origWidth = Math.max(image.getWidth(), 1); + final int origHeight = Math.max(image.getHeight(), 1); + + + // Determine scaling factor + double scaleX = ((double) width) / origWidth; + double scaleY = ((double) height) / origHeight; + + double scale = MathUtil.min(scaleX, scaleY); + + if (scale >= 1) { + scale = 1.0; + } + + + // Center in the middle of the component + int finalWidth = (int) Math.round(origWidth * scale); + int finalHeight = (int) Math.round(origHeight * scale); + + int posX = (width - finalWidth) / 2; + int posY = (height - finalHeight) / 2; + + + // Draw the image + int dx1 = posX; + int dy1 = posY; + int dx2 = posX + finalWidth; + int dy2 = posY + finalHeight; + int sx1 = 0; + int sy1 = 0; + int sx2 = origWidth; + int sy2 = origHeight; + + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); + g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null); + + } + + + public BufferedImage getImage() { + return image; + } + + + public void setImage(BufferedImage image) { + this.image = image; + this.repaint(); + } + + + public static void main(String[] args) throws Exception { + final BufferedImage image = ImageIO.read(new File("test.png")); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + + JFrame frame = new JFrame(); + + JPanel panel = new JPanel(new MigLayout("fill")); + panel.setBackground(Color.red); + frame.add(panel); + + ImageDisplayComponent c = new ImageDisplayComponent(image); + panel.add(c, "grow"); + + frame.setSize(500, 500); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setVisible(true); + + } + }); + } + +} diff --git a/src/net/sf/openrocket/gui/help/tours/GuidedTourSelectionDialog.java b/src/net/sf/openrocket/gui/help/tours/GuidedTourSelectionDialog.java new file mode 100644 index 00000000..c2ede5e2 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/GuidedTourSelectionDialog.java @@ -0,0 +1,197 @@ +package net.sf.openrocket.gui.help.tours; + +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.text.html.HTMLDocument; +import javax.swing.text.html.StyleSheet; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.gui.components.StyledLabel; +import net.sf.openrocket.gui.components.StyledLabel.Style; +import net.sf.openrocket.gui.util.GUIUtil; +import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.startup.Application; +import net.sf.openrocket.util.BugException; +import net.sf.openrocket.util.Named; + +public class GuidedTourSelectionDialog extends JDialog { + + private static final Translator trans = Application.getTranslator(); + + private static final String TOURS_BASE_DIR = "datafiles/tours"; + + + private final SlideSetManager slideSetManager; + private final List tourNames; + + private SlideShowDialog slideShowDialog; + + private JList tourList; + private JEditorPane tourDescription; + private JLabel tourLength; + + + public GuidedTourSelectionDialog(Window parent) { + super(parent, trans.get("title"), ModalityType.MODELESS); + + try { + + slideSetManager = new SlideSetManager(TOURS_BASE_DIR); + slideSetManager.load(); + + tourNames = slideSetManager.getSlideSetNames(); + if (tourNames.isEmpty()) { + throw new FileNotFoundException("No tours found."); + } + + } catch (IOException e) { + throw new BugException(e); + } + + + JPanel panel = new JPanel(new MigLayout("fill")); + + panel.add(new StyledLabel(trans.get("lbl.selectTour"), Style.BOLD), "spanx, wrap rel"); + + tourList = new JList(new TourListModel()); + tourList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tourList.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + updateText(); + } + }); + tourList.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) { + startTour(); + } + } + }); + panel.add(new JScrollPane(tourList), "grow, gapright unrel, w 200lp, h 150lp"); + + + + // Sub-panel containing description and start button + JPanel sub = new JPanel(new MigLayout("fill, ins 0")); + sub.add(new StyledLabel(trans.get("lbl.description"), -1), "wrap rel"); + + tourDescription = new JEditorPane("text/html", ""); + tourDescription.setEditable(false); + StyleSheet ss = slideSetManager.getSlideSet(tourNames.get(0)).getStyleSheet(); + ((HTMLDocument) tourDescription.getDocument()).getStyleSheet().addStyleSheet(ss); + sub.add(new JScrollPane(tourDescription), "grow, wrap rel"); + + tourLength = new StyledLabel(-1); + sub.add(tourLength, "wrap unrel"); + + JButton start = new JButton(trans.get("btn.start")); + start.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + startTour(); + } + }); + sub.add(start, "growx"); + + panel.add(sub, "grow, wrap para, w 200lp, h 150lp"); + + + + JButton close = new JButton(trans.get("button.close")); + close.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + GuidedTourSelectionDialog.this.dispose(); + } + }); + panel.add(close, "spanx, right"); + + this.add(panel); + GUIUtil.setDisposableDialogOptions(this, close); + tourList.setSelectedIndex(0); + } + + + private void startTour() { + SlideSet ss = getSelectedSlideSet(); + if (ss == null) { + return; + } + + if (slideShowDialog != null && !slideShowDialog.isVisible()) { + closeTour(); + } + + if (slideShowDialog == null) { + slideShowDialog = new SlideShowDialog(this); + } + + slideShowDialog.setSlideSet(ss, 0); + slideShowDialog.setVisible(true); + } + + + private void closeTour() { + if (slideShowDialog != null) { + slideShowDialog.dispose(); + slideShowDialog = null; + } + } + + + private void updateText() { + SlideSet ss = getSelectedSlideSet(); + if (ss != null) { + tourDescription.setText(ss.getDescription()); + tourLength.setText(trans.get("lbl.length") + " " + ss.getSlideCount()); + } else { + tourDescription.setText(""); + tourLength.setText(trans.get("lbl.length")); + } + } + + + @SuppressWarnings("unchecked") + private SlideSet getSelectedSlideSet() { + return ((Named) tourList.getSelectedValue()).get(); + } + + private class TourListModel extends AbstractListModel { + + @Override + public Object getElementAt(int index) { + String name = tourNames.get(index); + SlideSet set = slideSetManager.getSlideSet(name); + return new Named(set, set.getTitle()); + } + + @Override + public int getSize() { + return tourNames.size(); + } + + } + + + +} diff --git a/src/net/sf/openrocket/gui/help/tours/Slide.java b/src/net/sf/openrocket/gui/help/tours/Slide.java new file mode 100644 index 00000000..7ac4212b --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/Slide.java @@ -0,0 +1,73 @@ +package net.sf.openrocket.gui.help.tours; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.lang.ref.SoftReference; +import java.net.URL; + +import javax.imageio.ImageIO; + +/** + * An individual slide in a guided tour. It contains a image (or reference to an + * image file) plus a text description (in HTML). + * + * @author Sampo Niskanen + */ +public class Slide { + + private final String imageFile; + private SoftReference imageReference = null; + + private final String text; + + + + public Slide(String imageFile, String text) { + this.imageFile = imageFile; + this.text = text; + } + + + + public BufferedImage getImage() { + + // Check the cache + if (imageReference != null) { + BufferedImage image = imageReference.get(); + if (image != null) { + return image; + } + } + + // Otherwise load and cache + BufferedImage image = loadImage(); + imageReference = new SoftReference(image); + + return image; + } + + public String getText() { + return text; + } + + + + private BufferedImage loadImage() { + BufferedImage img; + + try { + URL url = ClassLoader.getSystemResource(imageFile); + if (url != null) { + img = ImageIO.read(url); + } else { + //FIXME + img = null; + } + } catch (IOException e) { + // FIXME + img = null; + } + + return img; + } +} diff --git a/src/net/sf/openrocket/gui/help/tours/SlideSet.java b/src/net/sf/openrocket/gui/help/tours/SlideSet.java new file mode 100644 index 00000000..459bda23 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/SlideSet.java @@ -0,0 +1,62 @@ +package net.sf.openrocket.gui.help.tours; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.text.html.StyleSheet; + +/** + * A set of slides that composes a tour. + * + * A slide set contains a (localized, plain-text) title for the tour, a (possibly + * multiline, HTML-formatted) description and a number of slides. + * + * @author Sampo Niskanen + */ +public class SlideSet { + + private String title = ""; + private String description = ""; + private final List slides = new ArrayList(); + private StyleSheet styleSheet = new StyleSheet(); + + + + public String getTitle() { + return title; + } + + public void setTitle(String name) { + this.title = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + + public Slide getSlide(int index) { + return this.slides.get(index); + } + + public void addSlide(Slide slide) { + this.slides.add(slide); + } + + public int getSlideCount() { + return this.slides.size(); + } + + public StyleSheet getStyleSheet() { + return styleSheet; + } + + public void setStyleSheet(StyleSheet styleSheet) { + this.styleSheet = styleSheet; + } + +} diff --git a/src/net/sf/openrocket/gui/help/tours/SlideSetLoader.java b/src/net/sf/openrocket/gui/help/tours/SlideSetLoader.java new file mode 100644 index 00000000..1a32cb47 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/SlideSetLoader.java @@ -0,0 +1,173 @@ +package net.sf.openrocket.gui.help.tours; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.sf.openrocket.util.BugException; + +/** + * Class that loads a slide set from a file. + * + * @author Sampo Niskanen + */ +public class SlideSetLoader { + + private static final Pattern NEW_SLIDE_PATTERN = Pattern.compile("^\\[(.*)\\]$"); + + private final String baseDir; + private TextLineReader source; + private Locale locale; + + + + + /** + * Constructor. + * + * @param baseDir The base directory from which to load from. It is prepended to the loaded + * file names and image file names. + */ + public SlideSetLoader(String baseDir) { + this(baseDir, Locale.getDefault()); + } + + + /** + * Constructor. + * + * @param baseDir The base directory from which to load from. It is prepended to the loaded + * file names and image file names. + * @param locale The locale for which the files are loaded. + */ + public SlideSetLoader(String baseDir, Locale locale) { + if (baseDir.length() > 0 && !baseDir.endsWith("/")) { + baseDir = baseDir + "/"; + } + this.baseDir = baseDir; + this.locale = locale; + } + + + /** + * Load a slide set from a file. The base directory is prepended to the + * file name first. + * + * @param filename the file to read in the base directory. + * @return the slide set + */ + public SlideSet load(String filename) throws IOException { + String file = baseDir + filename; + InputStream in = getLocalizedFile(file); + + try { + InputStreamReader reader = new InputStreamReader(in, "UTF-8"); + return load(reader); + } finally { + in.close(); + } + } + + + private InputStream getLocalizedFile(String filename) throws IOException { + for (String file : generateLocalizedFiles(filename)) { + InputStream in = ClassLoader.getSystemResourceAsStream(file); + if (in != null) { + return in; + } + } + throw new FileNotFoundException("File '" + filename + "' not found."); + } + + private List generateLocalizedFiles(String filename) { + String base, ext; + int index = filename.lastIndexOf('.'); + if (index >= 0) { + base = filename.substring(0, index); + ext = filename.substring(index); + } else { + base = filename; + ext = ""; + } + + + List list = new ArrayList(); + list.add(base + "_" + locale.getLanguage() + "_" + locale.getCountry() + "_" + locale.getVariant() + ext); + list.add(base + "_" + locale.getLanguage() + "_" + locale.getCountry() + ext); + list.add(base + "_" + locale.getLanguage() + ext); + list.add(base + ext); + return list; + } + + + /** + * Load slide set from a reader. + * + * @param reader the reader to read from. + * @return the slide set. + */ + public SlideSet load(Reader reader) throws IOException { + source = new TextLineReader(reader); + + // Read title and description + String title = source.next(); + StringBuilder desc = new StringBuilder(); + while (!nextLineStartsSlide()) { + if (desc.length() > 0) { + desc.append('\n'); + } + desc.append(source.next()); + } + + // Create the slide set + SlideSet set = new SlideSet(); + set.setTitle(title); + set.setDescription(desc.toString()); + + + // Read the slides + while (source.hasNext()) { + Slide s = readSlide(); + set.addSlide(s); + } + + return set; + } + + + private Slide readSlide() { + + String imgLine = source.next(); + Matcher matcher = NEW_SLIDE_PATTERN.matcher(imgLine); + if (!matcher.matches()) { + throw new BugException("Line did not match new slide pattern: " + imgLine); + } + + String imageFile = matcher.group(1); + + StringBuffer desc = new StringBuffer(); + while (source.hasNext() && !nextLineStartsSlide()) { + if (desc.length() > 0) { + desc.append('\n'); + } + desc.append(source.next()); + } + + return new Slide(baseDir + imageFile, desc.toString()); + } + + + + private boolean nextLineStartsSlide() { + return NEW_SLIDE_PATTERN.matcher(source.peek()).matches(); + } + + +} diff --git a/src/net/sf/openrocket/gui/help/tours/SlideSetManager.java b/src/net/sf/openrocket/gui/help/tours/SlideSetManager.java new file mode 100644 index 00000000..abf5e74b --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/SlideSetManager.java @@ -0,0 +1,134 @@ +package net.sf.openrocket.gui.help.tours; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.text.html.StyleSheet; + +/** + * A manager that loads a number of slide sets from a defined base directory + * and provides access to them. + * + * @author Sampo Niskanen + */ +public class SlideSetManager { + + private static final String TOURS_FILE = "tours.txt"; + private static final String STYLESHEET_FILE = "style.css"; + + + private final String baseDir; + private final Map slideSets = new LinkedHashMap(); + + + /** + * Sole constructor. + * + * @param baseDir the base directory containing the tours and style files. + */ + public SlideSetManager(String baseDir) { + if (baseDir.length() > 0 && !baseDir.endsWith("/")) { + baseDir = baseDir + "/"; + } + this.baseDir = baseDir; + } + + + /** + * Load all the tours. + */ + public void load() throws IOException { + slideSets.clear(); + + List tours = loadTourList(); + StyleSheet styleSheet = loadStyleSheet(); + + for (String file : tours) { + + String base = baseDir + file; + int index = base.lastIndexOf('/'); + if (index >= 0) { + base = base.substring(0, index); + } else { + base = ""; + } + + SlideSetLoader loader = new SlideSetLoader(base); + SlideSet set = loader.load(file); + set.setStyleSheet(styleSheet); + slideSets.put(file, set); + } + + } + + + /** + * Return a set containing all the slide set names. + */ + public List getSlideSetNames() { + return new ArrayList(slideSets.keySet()); + } + + /** + * Retrieve an individual slide set. + * + * @param name the name of the slide set to retrieve. + * @return the slide set (never null) + * @throws IllegalArgumentException if the slide set with the name does not exist. + */ + public SlideSet getSlideSet(String name) { + SlideSet s = slideSets.get(name); + if (s == null) { + throw new IllegalArgumentException("Slide set with name '" + name + "' not found."); + } + return s; + } + + + private List loadTourList() throws IOException { + InputStream in = ClassLoader.getSystemResourceAsStream(baseDir + TOURS_FILE); + if (in == null) { + throw new FileNotFoundException("File '" + baseDir + TOURS_FILE + "' not found."); + } + + try { + + List tours = new ArrayList(); + TextLineReader reader = new TextLineReader(in); + while (reader.hasNext()) { + tours.add(reader.next()); + } + return tours; + + } finally { + in.close(); + } + } + + + private StyleSheet loadStyleSheet() throws IOException { + InputStream in = ClassLoader.getSystemResourceAsStream(baseDir + STYLESHEET_FILE); + if (in == null) { + throw new FileNotFoundException("File '" + baseDir + STYLESHEET_FILE + "' not found."); + } + + try { + + StyleSheet ss = new StyleSheet(); + InputStreamReader reader = new InputStreamReader(in, "UTF-8"); + ss.loadRules(reader, null); + return ss; + + } finally { + in.close(); + } + + } + +} diff --git a/src/net/sf/openrocket/gui/help/tours/SlideShowComponent.java b/src/net/sf/openrocket/gui/help/tours/SlideShowComponent.java new file mode 100644 index 00000000..4e11d252 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/SlideShowComponent.java @@ -0,0 +1,72 @@ +package net.sf.openrocket.gui.help.tours; + +import java.awt.Dimension; + +import javax.swing.JEditorPane; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.event.HyperlinkListener; +import javax.swing.text.html.HTMLDocument; +import javax.swing.text.html.StyleSheet; + +import net.sf.openrocket.gui.components.ImageDisplayComponent; + +/** + * Component that displays a single slide, with the image on top and + * text below it. The portions are resizeable. + * + * @author Sampo Niskanen + */ +public class SlideShowComponent extends JSplitPane { + + private final ImageDisplayComponent imageDisplay; + private final JEditorPane textPane; + + + public SlideShowComponent() { + super(VERTICAL_SPLIT); + + imageDisplay = new ImageDisplayComponent(); + imageDisplay.setPreferredSize(new Dimension(600, 350)); + this.setLeftComponent(imageDisplay); + + textPane = new JEditorPane("text/html", ""); + textPane.setEditable(false); + textPane.setPreferredSize(new Dimension(600, 100)); + + JScrollPane scrollPanel = new JScrollPane(textPane); + this.setRightComponent(scrollPanel); + + this.setResizeWeight(0.7); + } + + + + public void setSlide(Slide slide) { + this.imageDisplay.setImage(slide.getImage()); + this.textPane.setText(slide.getText()); + } + + + /** + * Replace the current HTML style sheet with a new style sheet. + */ + public void setStyleSheet(StyleSheet newStyleSheet) { + HTMLDocument doc = (HTMLDocument) textPane.getDocument(); + StyleSheet base = doc.getStyleSheet(); + StyleSheet[] linked = base.getStyleSheets(); + if (linked != null) { + for (StyleSheet ss : linked) { + base.removeStyleSheet(ss); + } + } + + base.addStyleSheet(newStyleSheet); + } + + + public void addHyperlinkListener(HyperlinkListener listener) { + textPane.addHyperlinkListener(listener); + } + +} diff --git a/src/net/sf/openrocket/gui/help/tours/SlideShowDialog.java b/src/net/sf/openrocket/gui/help/tours/SlideShowDialog.java new file mode 100644 index 00000000..ca97e2e6 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/SlideShowDialog.java @@ -0,0 +1,160 @@ +package net.sf.openrocket.gui.help.tours; + +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Locale; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.gui.util.GUIUtil; +import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.startup.Application; +import net.sf.openrocket.util.BugException; +import net.sf.openrocket.util.Chars; + +public class SlideShowDialog extends JDialog { + + private static final Translator trans = Application.getTranslator(); + + private SlideShowComponent slideShowComponent; + private SlideSet slideSet; + private int position; + + private JButton nextButton; + private JButton prevButton; + private JButton closeButton; + + + public SlideShowDialog(Window parent) { + super(parent, ModalityType.MODELESS); + + JPanel panel = new JPanel(new MigLayout("fill")); + + slideShowComponent = new SlideShowComponent(); + panel.add(slideShowComponent, "spanx, grow, wrap para"); + + + JPanel sub = new JPanel(new MigLayout("ins 0, fill")); + + prevButton = new JButton(Chars.LEFT_ARROW + " " + trans.get("btn.prev")); + prevButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + setPosition(position - 1); + } + }); + sub.add(prevButton, "left"); + + + + nextButton = new JButton(trans.get("btn.next") + " " + Chars.RIGHT_ARROW); + nextButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + setPosition(position + 1); + } + }); + sub.add(nextButton, "left, gapleft para"); + + + sub.add(new JPanel(), "growx"); + + + closeButton = new JButton(trans.get("button.close")); + closeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SlideShowDialog.this.dispose(); + } + }); + sub.add(closeButton, "right"); + + + panel.add(sub, "growx"); + + this.add(panel); + updateEnabled(); + GUIUtil.setDisposableDialogOptions(this, nextButton); + this.setAlwaysOnTop(true); + } + + public void setSlideSet(SlideSet slideSet, int position) { + this.slideSet = slideSet; + this.setTitle(slideSet.getTitle() + " " + Chars.EMDASH + " OpenRocket"); + slideShowComponent.setStyleSheet(slideSet.getStyleSheet()); + setPosition(position); + } + + public void setPosition(int position) { + if (this.slideSet == null) { + throw new BugException("setPosition called when slideSet is null"); + } + + if (position < 0 || position >= slideSet.getSlideCount()) { + throw new BugException("position exceeds slide count, position=" + position + + " slideCount=" + slideSet.getSlideCount()); + } + + this.position = position; + slideShowComponent.setSlide(slideSet.getSlide(position)); + updateEnabled(); + } + + + private void updateEnabled() { + if (slideSet == null) { + prevButton.setEnabled(false); + nextButton.setEnabled(false); + return; + } + + prevButton.setEnabled(position > 0); + nextButton.setEnabled(position < slideSet.getSlideCount() - 1); + } + + + public static void main(String[] args) throws Exception { + + Locale.setDefault(new Locale("de", "DE", "")); + + SlideSetManager manager = new SlideSetManager("datafiles/tours"); + manager.load(); + + final SlideSet set = manager.getSlideSet("test.tour"); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + + SlideShowDialog ssd = new SlideShowDialog(null); + + ssd.slideShowComponent.addHyperlinkListener(new HyperlinkListener() { + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + System.out.println("Hyperlink event: " + e); + System.out.println("Event type: " + e.getEventType()); + System.out.println("Description: " + e.getDescription()); + System.out.println("URL: " + e.getURL()); + System.out.println("Source element: " + e.getSourceElement()); + + } + }); + + ssd.setSize(500, 500); + ssd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + ssd.setVisible(true); + + ssd.setSlideSet(set, 0); + } + }); + } + + +} diff --git a/src/net/sf/openrocket/gui/help/tours/TextLineReader.java b/src/net/sf/openrocket/gui/help/tours/TextLineReader.java new file mode 100644 index 00000000..fd3ddaf0 --- /dev/null +++ b/src/net/sf/openrocket/gui/help/tours/TextLineReader.java @@ -0,0 +1,120 @@ +package net.sf.openrocket.gui.help.tours; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; +import java.util.Iterator; +import java.util.NoSuchElementException; + +import net.sf.openrocket.util.BugException; + +/** + * Read from a Reader object one line at a time, ignoring blank lines, + * preceding and trailing whitespace and comment lines starting with '#'. + * + * @author Sampo Niskanen + */ +public class TextLineReader implements Iterator { + + private static final Charset UTF8 = Charset.forName("UTF-8"); + + + + private final BufferedReader reader; + + private String next = null; + + /** + * Read from an input stream with UTF-8 character encoding. + */ + public TextLineReader(InputStream inputStream) { + this(new InputStreamReader(inputStream, UTF8)); + } + + + /** + * Read from a reader. + */ + public TextLineReader(Reader reader) { + if (reader instanceof BufferedReader) { + this.reader = (BufferedReader) reader; + } else { + this.reader = new BufferedReader(reader); + } + } + + + /** + * Test whether the file has more lines available. + */ + @Override + public boolean hasNext() { + if (next != null) { + return true; + } + + try { + next = readLine(); + } catch (IOException e) { + throw new BugException(e); + } + + return next != null; + } + + + /** + * Retrieve the next non-blank, non-comment line. + */ + @Override + public String next() { + if (hasNext()) { + String ret = next; + next = null; + return ret; + } + + throw new NoSuchElementException("End of file reached"); + } + + + /** + * Peek what the next line would be. + */ + public String peek() { + if (hasNext()) { + return next; + } + + throw new NoSuchElementException("End of file reached"); + } + + + private String readLine() throws IOException { + + while (true) { + // Read the next line + String line = reader.readLine(); + if (line == null) { + return null; + } + + // Check whether to accept the line + line = line.trim(); + if (line.length() > 0 && line.charAt(0) != '#') { + return line; + } + } + + } + + + @Override + public void remove() { + throw new UnsupportedOperationException("Remove not supported"); + } + +} diff --git a/src/net/sf/openrocket/gui/main/BasicFrame.java b/src/net/sf/openrocket/gui/main/BasicFrame.java index cb7bd500..417b67e6 100644 --- a/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -81,14 +81,15 @@ import net.sf.openrocket.gui.dialogs.SwingWorkerDialog; import net.sf.openrocket.gui.dialogs.WarningDialog; import net.sf.openrocket.gui.dialogs.optimization.GeneralOptimizationDialog; import net.sf.openrocket.gui.dialogs.preferences.PreferencesDialog; +import net.sf.openrocket.gui.help.tours.GuidedTourSelectionDialog; import net.sf.openrocket.gui.main.componenttree.ComponentTree; import net.sf.openrocket.gui.scalefigure.RocketPanel; import net.sf.openrocket.gui.util.FileHelper; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.Icons; import net.sf.openrocket.gui.util.OpenFileWorker; -import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.gui.util.SaveFileWorker; +import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.rocketcomponent.ComponentChangeEvent; @@ -672,6 +673,24 @@ public class BasicFrame extends JFrame { menubar.add(menu); + // Guided tours + + item = new JMenuItem(trans.get("main.menu.help.tours"), KeyEvent.VK_L); + // TODO: Icon + item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.tours.desc")); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.user("Guided tours selected"); + // FIXME: Singleton + new GuidedTourSelectionDialog(BasicFrame.this).setVisible(true); + } + }); + menu.add(item); + + menu.addSeparator(); + + //// License item = new JMenuItem(trans.get("main.menu.help.license"), KeyEvent.VK_L); item.setIcon(Icons.HELP_LICENSE); diff --git a/src/net/sf/openrocket/util/Chars.java b/src/net/sf/openrocket/util/Chars.java index 1920bfa8..eeba22bc 100644 --- a/src/net/sf/openrocket/util/Chars.java +++ b/src/net/sf/openrocket/util/Chars.java @@ -35,6 +35,9 @@ public class Chars { /** Zero-width space */ public static final char ZWSP = '\u200B'; + /** Em dash */ + public static final char EMDASH = '\u2014'; + /** Micro sign (Greek letter mu) */ public static final char MICRO = '\u00B5'; -- 2.47.2