From 9be873b0493ec554c64e6ece3d7d659bc223d127 Mon Sep 17 00:00:00 2001 From: hansonr Date: Wed, 15 May 2019 20:17:42 -0500 Subject: [PATCH] Jalview-JS/JAL-3253, JAL-3266 Varna preliminary upgrade --- libjs/VARNA-site.zip | Bin 437137 -> 436954 bytes srcjar/fr/README_SWINGJS.txt | 3 + srcjar/fr/orsay/lri/varna/VARNAPanel.java | 8095 +++++++++++--------- .../orsay/lri/varna/applications/VARNAEditor.java | 1142 +-- .../fr/orsay/lri/varna/applications/VARNAGUI.java | 1386 ++-- .../fr/orsay/lri/varna/applications/VARNAcmd.java | 2 +- .../varna/controlers/ControleurInterpolator.java | 17 +- srcjar/fr/orsay/lri/varna/views/VueUI.java | 15 +- 8 files changed, 5605 insertions(+), 5055 deletions(-) create mode 100644 srcjar/fr/README_SWINGJS.txt diff --git a/libjs/VARNA-site.zip b/libjs/VARNA-site.zip index 9ff173efb300f2accb303585ca2bcc7ff44f2de2..b8d60d6600e6bdf325c2c6b5496dc1eaf0c0f65b 100644 GIT binary patch delta 295479 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�r|h7@;T#2H4D_sR|TDI ztjRA&gLT|J-d?}#ZjA>TH?qS1r;gw=#t;Y!%xu&K1#P@t{eN?hK=_b!(Vt5V*a*MRK`Zo(4VNc{gFu2!Ae!Wdn||tGo-!~$0=5ZhN0Tmj z6leTsX4H=opEuTBs1p@af8`&Nm0s;LD#>i0x{`n0^qAf{=0THoqds^hHAqyx2u7=p z?x;`TDkVun5pXWn1I{0_r;KNAY}ozBS5?O&a>{7Czt!jr=;Z*%HkGe5Xq=A9K2WI! z5j&z~1~0Ux&FUZnOa}sy1L6MmJOtiI+Kd}%S7vk%Y_T%axFfr*jtc^fR)vtnMft1{ z8Rs=?j&Uq&4z#*21sIq7M7&!pz88tAsaph?be-DPM9@KJfC_b@-P1{DCe!M_Vasm% zb@hGU!o4PnD5Kgo;jXgU2lWRA*bMKIqvZ!&T`+>2KAgiK3rkZd;sN&=TZ)vw%G8KX z$grSof5kSpF=>=T@cx^U4n9o08c^)v3tn=702-uWCFS7nx+3379+W> zy9X=$d4rD$1{@rOsA9O4Z$?(HxCuI~uh1n(!S2MN33F2at}FTp?wSljA>9hP90&NP zd1Nf(=PVlqNfVpI9-nSG{OxA&DW3G~nN0gi5>tEk zu<#Nn`h$o+E$;+Me%_5;O-NbSzK6?82YT|NA%(Gw5PfI#w;OeuG%@9)l3%k?A}bRHi~8H2cHjF{C1K0RM?TWX^g zq`<`mUE|p_kO|8FLC{X~oqdkf_DoGTq&Vcd@LI2(m7x%ijIx`BV(oKOfnkJzsXv(j z6a81{5Li0m>@cnX`#lVDwGYU!tT_WgUJw5g^9I7G<3M`-Y*uHI9O)4E0NGLHWReY0 z0U)JFH(e@-?j4-F{}@C!wZhY;b2?YS^rU(03obJ#@fd$Eqh8B|2xJXa`z%zF-U@BMEZpP4?hd2T=d#$@zJe#p z7c-s1ZzDGNK%WV5Fww#p09b)SR6Oi9tCyjt?%i9>?-tK{h4WkQIr_k9Mc4gs_TyuA zv^nG28BbZJ@mS)M<27j zqr?cLz4d^zaKHuV$p;_AhZ#Vze*`{fYLTnY9Hj}-4P1#Q1KbgD z6V8{yU3Q4W`R$*MfbmNO@gPUB?=%!yoP4WSZop66UJOeYzv7zM+ z)3^ZTR+vJ{T-_OOYLF6JAGv*cR@~C>09+ZQ4UNYT`n$ zu#8PZzPxdpV?;{x`{8P(p@opjg@rsZ{&aDPGa;}uK?{#FN|{Tzz|;bkr=j>^t+m|r zj@q6|M(h%IrDY`1lT=-}->5+gIY}giI_s1@nZH^PsQaKQ(4|?-q>SO)bE>TW9%P5z z))O;=In(o90niGnQx#&Zjt(iaxEh2%8JAn&=hWCqfFP{YN4?qx3G_+Z19TK=UH$jYbIiWU} zEqw^3oo=LcOb;S+M4~%J7%1;cQZ<{kIhB{F(ZGoUyTIn%#k43Y?Y3g6`*v(`aXB1r z8k22P&@`Q(jV#eKL&7ja1;jNL#mrmbCRg>wC-L}4_aC4@EBXPja#01wcMqZ_0zpE4 z;_Sf10csJVGfP1(ln~`ai}QwE1GTr6>RYQ_s2W)l@A>>N95N^jc`RE^ATH=QIZ;Bf*4=?a6ZbXQdHvnS-SJQ{^T})|ag+$Jo6p{)P`euF9v}y1 zJFIE%D)|~8CC5Xol9TvQj1W}|Xc*MGib%bb1KK++y31fj9t-U!nAgLI6@8s1267c~ z!;!RWkfD=z@xP^gast8{U*Ohq1;+<$wmJ=Y*zv%5dq8|ee|D~1=#6qbFq?$BP#6Ac znZ{SKpJYY_bGRU2{fk87c>sc7Kbu5;9DCh9)J0!WSy*OM)5&S>;Q_{21`kG-2qW6u zMP#GsI@k%JmvT?JJ~YVk%eF*F`GLLU4r^mFDEHd{7`H$R$&c0b)dc*zK!we`Fc4u0 z!MaWZk5CQf;*U0Qn)UfKcn^GCAcYiZiXIC2C@^=44pa#^x-?Fthn9pp5I*<@uLKWOIOXf^+ht7p7I@9b z354(6s|7YJ13{O8k}Jx%pCjD}<*!+g?SBfL4=q8NM25YHZ?m5Pq`=x0eNb~C!m0`A zG|*vH6e2J4p$yox>H&HMWLV<>J0k>|u2JD4kM!X{4VYa+bVtA!N87n0Z>Tb%Q`vwY}TT|U^CdR#i&|sKnvoQ^spn4 zX@kU6`cJdRj^~t1+5LX5-%CHT)Lz&9zzyG((t8f}`xU&W?`b>pCiuQ(UFDYX#Aj%o z3hVw5=i!UtoU{oJX>5+w*~gW{RQj*855=+I+zEmA`VCD`3LwlT13)T= zfsP`F-jS;pDc6$VWU%_!=_km&|Zmi=H&o zHVldc9S66F`nPJ5KYRR(1L4H)XN#x^TtAI){?Zc z=Rh%e*2PF40Cv@Dyn=?VG&nxbnU#d@K?Y+cF!T8#)31fPUY_tVdsG+$05@bI+`qsN z78reGv?gGc8{+msGP;OFwP{ac>0C|-+n|t}Ww8?zI12vm2R9`~(;mlkD;x^nf+aw; zn-EYYy3T@VjD~hCG!X?#c2dDhb@PJwEyTc)8>)E~(el-puDgkJ1Tm||uy^!h&-UGm zqQJ=y@|6gv6Zk%CdPoP00kY@c{mbW{dx6}E$~NWHxtk@SxT_wp1?W^XvUANGB0*bc z`nJN9M&WY}D3tIPqNx*-?W6-?#nD#a^I(XLJz2t+*S$dlL8*1NG_RDF=Ra%UCn!j6 zlVVBCp$#yL1wz)z&0*Cy>nT?!f~%grySANN;6+a#xUzL&bj?MC0eI)1Yj4hGk1N9k z=Y~*PQ@k#v3V{k2=xUcshq}t#9CSYm!MDca| zY}5&)t5dWBYD&FIEM;aH1izFiq1280BZ%3^lW|L$J!MMP(DkR0l{a0QL#;cj>htg9 zDLXu~+5nz>`-^YnfFMMMzam77n&R*W=6k1Q38iCQt?=e*H;}>zt9y zRt?GAao5WiV{04Z5d(IosThVePJ0CQ$r+^3<`G3MHlMd7=&$fDkyk6%ba9j|Kdn!5+$N z1gY?yEk92n6>&R1$u=6p+O&qWy^OHXCehq8k`kuksj&NR zvx*G2D`My}eTrQD=SmuP*mFAAM>aF2Hg!0OF(us66weWnfv+1I*S~j8t&J^exSnPU zNolpd`#c|T0d{2dQG+3o(x~lbCyJUMux0R06gftcdDfK8+1-D`5`}EZhp%|rDoa=v z`Wq`&JuqDkH=@ekjxut$^Jieye`X~{-#{5GO4pdGsfMh6Xu*zmbyLAk%>T6(uRUL1 z5ym)^03ugh=}o)hBY1SHk>*hU0@*_ipz)|$pXtUy1E`G{dL=DB1_m-ju9;QL8s>Jf zlIzBz7~wDAl^Lj12$;cM7WmqMF6}SwLOoXY5J8vo+auZOVcbm=3&fPOwHD6r?`sW_ z@7MPS>xyK7KNlOakaR($I3Sf6(2cRHA`4Q`5^U#h+jtzT@6HR>jXH$OdQ=ReL%SsE zFt6Om0yN{jExm;_eYfHPnqk& zjCX=&?bb)!7D3ghLV%c%ma(LW#y__L+)9^3s@w@kvw_gaeCXK|;I0eMQ%j*l3_Qw) zwwWOqy6Ht9zp)qBQGPkc_tcgP2Lgoyba_rQ0eUX*zbW?BNCFzHrYPEvSO!%h(WqoB zkP_Z5O>L+FJH9!aNi?L_IB489;&WnnEVD&2{>X)Yi$1zHA76XbgczAL(K&DSP$yW; zc?O`-YAfpGmyGzwmZnzeJl52;V4Y>K)Y1E6Y{ytipAvefSjwW=ta&icwKW@Eo;rD! z04XjMGlb3;)=2GKTkW7L7&XZp6i@5oPuxF`OrW`1NZXB&X4m7DdBf+#E=z3HE2iMw z)>yK?sr^`Tn6)bIKIjNB80!x}en7iY%IhG|Sh373JB&!JSC9ANZVwZ}Im#W`dob&; zon7W%?WbdiyQ-+;1)1gcU!DpUW#x^E!x>{eslK28-AG9$)iFqgY_lQ-NCfK`1Zun%wS( zzh-7S;b8foL!F0hi!x55W{3U<8?Zi1W^(7)i3zq_DAA^U52<~DzudxGX8>!iiq+fK zbFt2}&sMbwb@cZUS(p7YcxmG0R@p8w9sFD))8O!$QfFPnQ4V-=spxZZNi+m9?k<-Z zgfVcz5xiNLJf`9%K6~Bquq_xG9rW8oW*rFGlk4|wR-3xb~`c7Z#~v+YkKIcD!T!PtN(SLsroxUr>ZGwJ{iP3F3<1e z89O7+2JkBUXPI}%&o`(;$o&I*8z8i&{tEus(U}+DJ{{*hz4Pc*`~24<#y@oAky(tW zW8 z$L7C40)r1R{|PN-9LAu*b_Ui8J$eg0J^`6uSdsplOjfHYkkMj+fc$k!yWanQ(Qp0> zHsC+!|BZeHZ5`L!8n)pt05flRu`ztQ>((9dhDIa`Z#RVs!F-oshzMf!R#FuV?Mc~E z9{1bV2r@Dh5~ER(979uE$RjX7)YK z#e`QHal2ci4lL99t4{@sC{eL*NI3;y-!p8sy}=O z{%a{O2l@senqUG~GF(GUL$o=5|dxG*zR{bPmVzaox~D|{L7A*dtH;M0^qr16*5B1L5L>70cLR(PV(Y8%L6flOYp>hLrrg`2qyFZEL}`1 z|M|&?`T-KLx=6~kQWgf+6wP7gq=wc_J<1DSH$R}lH<{zh%0LiayK@jK)O-oM12VIB z7$lA!GSfgL)S`VmfcmLd4T~L|1 z6c1As%AOPDZ{Eo^Orlx$5bNYq40YB3I;N03+JH-Ujy}t0V%1rW{SF8ya0N3ZC)M|< z;3Scik(o@Qhc`0^sj?~jd(En;C5QX_vCIJlSapHGF~v|gK4XTbehES$=gKDe<7|4!REa7XZ^zF7Q^p^X}}=Ro6J-uhUwOs5<4pW@9~}JxgLXS;<9Pq=^J!_j^%D z&E#ZpT5qa&m7qllKhA7lsO+P4zv(9Lp~Dcrx|r3*z9qVe)>T6`b^6Bmd$RYdH_Pwk z7FMY1HRQW7PZhl^%PEH>VVm1Mns$NxFWFX)wZF5={otSy5@${9{rL{<$SE)qkc(T)HW*t|MXUUsGsu=t0EBt_2v;a zoA0-#v4lsdq%%HM-Yh#Kk02^Jn-qhPqzZ8#vi<`LPpE>i=P;#|zc&cvs&C}MO3TAt3EbzJui=L^(Z*5Wle*F3e9euIa8tFn&^B##|0094OTP9BC$Y8Y%djhBor9uTP>^(NK zgRb0Z%ixWjyb}8Ucos&Li7zc;m|I6W%i$5dj>fxN)4UE;d z{=##2UR>ha{Nox-$;;!>k6U*IC)(Xdc2k%9W9LDJ9L$8zP90#gD%1%1!*;88o>=B% z2Qd6PaxdXL-;~k(#U8gCK>dI_i!-pn51L&60|=GB`<8_$B-aXlyCMzp<8Za3@2~z& z*G^)<5eHsloY@JF1>vxOAxr8WB-hTh{K~MK6r`UUBtShToVXyABJP?8iUnm4mQm7n z9%=%D0tu=qQ%o;lf8ZO6!id-bEu}}H5O7Gr>+1!Pg!coDYv7XceYHVPNYJL4QAU-X zOyYzmojVP@?VoP4OibBRC)3$;I$!E@8j-acolb;2Zb|H0wS5JdOR^2O{!q=26GMwG z-zeA^y#i^z4TcAMxnC#VKeVek|B)v-e)^LJzjT?7f0Lut zag`(ke#5S;vw=D?CI|ps#;GPPN*{U5EO*C{)vD~XRFO*)j!NtceK{osyyl=cWAIG|o#FC>j&vw`UY zXkmi55_2wCiNrxokVeN8&eWm+2lQ&w7p*=ErCtk1Os<$p)J`-%hgAS>&bfATyYN10 z0O*^s5`Rt$q>!Y9LZGIjAeVmihzT^l&SC}x#{h2Yp8-cR1lKSwnhVf^aKOKWnYeiQ zxf4#;3Kg~qhadu7IERIYkmHn_LplgES(`CuF6WkT1W*+$ELXvuD?Q)zgF0udQ3L-1%G|N)I6LFl^+Xqn5c3VYT?JonP?&Pa<>#B1bpj<=R?09DW65>*}`Svv<~^ zb(v`%ujcW1zuR17^(I|OulhzYaIt+p+52K82( z6{b|5xu#zjQ7Gcs0z?9)pdqHoM>ZuCPk+QhT1V(U!6V~s4z{7d&M9D%LpDYwn~H`F zmLvBz;V|g=KFd7ZnV(cp)dpA%4Qb+@IOGh7tD$>H(l5sH-Q0rR$V32HVCcRFauedL-dtu&K8NwE$uxT3uqZkS z+*-Ll(R$Wi574OsRWZkxkdmtNPz6;WOKI&6-&jx}j+-LWtc1wbD=q(1#lA)a9z|V> z18vOL4Owv5q7L$IOriS9KtGwIIQHQW4ev>4EWW^LdrSl+&AjoFX_%IKx{Vk;eYl#$ zawv)FDIUqO}3rGvApPV==YyxU;q7^*lX$lRB6FCZ|h)kwF4)P9whJ>+&Z{6+l zPtRF#6hNQ!;w3{x%X}y5sQ8_i?QWgG?2#*cL8&n)ui6Y! zXgvtiH*K8e%r6{X38W(!pE1d}D7Yt(JMFmM=57X-xLWkn-E zZ8A+{im{PYrt(WwGLL~g2CARTljzp4ot4-9699u1>SO06;|{?@cFQLHhWJ+$T(ZEN z9d)iHlQlsrbngZBh`}lZiI~G_YV#%H80ud;bJ^x7rbCkiSxZQs16(r@3$;M3Pd^&HQJp^r=)HpNwD(m1RA|hZfpwRSQ z4H$}kV?D5>HyhD^!-!wol7On_3wZY>lzI3Fq?|?eV!+0EW;EQ9&S+VKw-|jc;NCBiNKNoXQ10P?b|nCXxIl%}?hMByOvc{R_jwiD}7&%g}+zL>HP zU*sa&00gmVz&wkU&u4yp+-H9My_*@&@qHCF)~CL3jHx3|BkefM9^$-rohv^K2qvO5 z9kaKcW$3pJFC96bW|s>pX|3>e6Pwzs7y zwWVxZgl(xFb)}lTCAvH0iUCcGxQ#*Urs8=7H~mDWD!X6y&K2;gCz~RD zP@%PZ%#|EX*{JjiVCaQT2@rwWO-}ubNFivvw@2^DB`vmcWpCRG%|E3*J4lUUipu`O z*DK_C)sxcypNiD;Sl=`19DpiTrKKY_VUFY%s`|+8&sQ~}CV@D1fO%b;%12#8vtj z+EnD8bXR3&Ezy!Q8Q~F{Ceg}%-?kBx(E*LDH)oYUh4pY%cZPLm-;5cWYT9+oa9X!0 zYXJIC)YlfYUl2w5$Emrt$pP{6A1Y9Py3qtoPqQR4f{w-v@XG=ge2zcrWpHKeC`?8} z4sC8+W=bXtDtk7qQUPUZAFwM4N7Uik8a8ok=ldQldLevh$Z&AX7A(V!FJc|LAALN9 z?;q{&8#)0G8w5*+*WR_Ql-kpIhC+bMe$z+`ueT3DVdRpMfbdq~k#I;GQ-5W@_*U(J zx`WL4W+D(xyE<)Ihl2Jd+%BCC(}oUJPM<`6pU_kdow#=te83HQa4EF#m`<=r*OMIZ z*cSZL$%}bqPJ&mtod)a?t=7qhA@WUoLh&LH8%^m|t^ALf5aNbhf|K7bX1OL_SM+Dj z+F1eD?rkqnqS^0K!khpDobU!}B{o6QvmOKIkM#ambc>)g+XN9s2ds-JW-iN>Kj;f2 zJin9IS9)97!2z0RGCQ^63o$MsCB5@5p4shPBL{&?g_g#?2gqq;im{qhq&NDqdAXyF zT|GKRJyqaOODMUz{Wt@m>FoV2#4u{8M@}kyuI+eY?J-n)OiH8CS!l9`bIh(7>Y2ib zTBoP0C>^dhun3y30o5D_eF{_W3o$<{x!}p0hjH@%r zbG0X5)=uIzY&h#{o^VKMC(GNmHvyL}1W;eVDL~0_R#vRMn6KeG;U5Z-b^`hjSG+IC zqFyS0&S&(Py>jTsnr=Bk@YBY%+@>(4ZVZz9Hj(6NO< zasj*x0!c_;xI#==Bh=89Y^G~!fb{wmUA`Lb0o;?C`pFvl;2i8(#7~2NKw?xFMh5b> zw3+%^l}Gf-%j&TX$%Zh0plMEgugOgx-{kSA$^0$}(%z{&deqT_Sj1keHfhzC%RTxs^=K?tj8TS%FPto1Xsy?#xf@#PqP zCFG4<$yG;i!(`Cn)d{{Njqw(LB)|CxJsgko+J%k$;acoi_Ue3upjb<}raZopA-Z8^ zFk^VCspBT3)_8N!NSYttPlLorgTlzWU8?3s!l-on6MPI^eB zR~Ba%3>1p&8~jd6$v3>Fe*s0@Hei1*t2`*JWz^g>adaNBUY=8NnW}94)u+2&6xH2l z!$fDaGEd0eVQ{AdkX!VGrtC1cz5;07=Gwg7SRZ)@mCU6rtMXycfL-5_SxH7+tw=v# z(&@-~`KP39=H#qtV*ZXg_1JH`pkp0yw0@#5>yoHdot&msylC-Tj_mcAY+66fYlbs%tbre-Owv9I?*=j_LnlI{EpllLAe$br`t|( zb$)3;v#wSK*iojj1RPJ=*R zbk>S&RL2!^4~RTIne1; ze16`XYTUeHe|eE=eV6i>?$dX6jXTLUY~t1b#w`qS(MH zYp+``HwOx}U70b>QCO`ZX&d9j$WxzTjFO%TWPNw>pP8tXn)6>`HP!pJKSz7SaOY4L zM9mG{U)QFSNI5v7Gv}H{wBs8ar9)@@*@Yt*82{8R0#W#jMz9>LWzQdyL)E)w=#D zv&9EbRFFSYnZBMA6mB^er(*T%Pu!HB)uvZ<+jM>)dNNcT??Di=ElplnQc z%+4fwumdbpii8U1D0}`?wp_0+n<9_2*`X#hnuKF-xQ5GSQczBwI2wcaM+reMh0-u3 zq8pE<$tdMope*I0$k~@m$0~O>cN{Yvm0O|3*v^nX9u>z9km=cLbWKq7td0GeE^6e1 zNySn3(@csLl-8=A}INdT%CX6lrmH+RX)kKcOaDSE;%V#K)pD3S3NFeA;oAh>)Ehvv_zY1{yrX%bRH-2_F(D!P=ah*5_3 zfZ6Pc0#LkQU>pPYPvV$G)#E4(tBH)xyb0R-cZ!qP5&+DS7I|WTBdduZYX5tAxilKr zo~RSN`f%zKQ%RQSrMQq)t45SmzwZIGbYzLm2q9m5Y%W&k2h&t4f(M}o`PyEqd+f9^ zFAQiBB9I99;kC!_{)lu@E?HnzOiPTJ%mRUI?9*d!^xhg+ZBaN3oOAHG z9vSLeeQj-OO58j!&}2%WdZHRAIj$Ck4CeR*sA{*4y!kcMRN3k!7~E?Tnpa$!0|qD= zM(m&q6QkMP^i)ZT1`d0bjGKIdSz0j$s3rwxPA!wg$!oMut(6ib^bK!*5la(}vUF|P zbyI|rre0bwdlzyV5hkcQz$|@<&uEQ^U2YIjS*C0Ek!hb^hMA=;v$YqWQ>K92ed-C=X|KTFfISeFvb!YE&-u4cW$J>=p!I;mi~w{wM&gvXt8y7h4i)9*JZcuU(f_fwZO|JA$aTtR#o zr10qw*YzAN{!48B9PFEy_Ia<(RZ3!!jH_QXg&A8P>U1NR^a%1aojW3ENIAb`yFDlo z)p}1oT4Ej!jQ)4ktK{hF_K=2;4XO%w`1hgpe>SLLVEZ3Ci}^t)f&>p%e^Ey3A4Sz_ z-oAK-(Y3@5p0qsbqTI!td|W~3`@QC1z*@8QwBH!T?$Ge`B)iDR91T-fJH? zk=$aplRHOHhCRvV(SMgQ$I73A8@>R$To-5^CkYA_5fxqdEVFr7KC0LeP z?7IiH3uBu6!<~zp;BgE6jAg`ytq0U5n>gEFFdf|*LK<79!Ev*3x)eKhE5|XC+<0|ZKGlx6&a~1!pb*Nr; z5BuM75!x&JtdpKEKyebYwXNIKks!ZnEM>ndcO*+z8B>H<<)r8yJ}kLYFVWo+qm_CS zr|`yN$tj0=L)JGWe#9Bw!|9X$<$P)fn&&mSSN5)qKOnBQGjhz}fQE6$OIthGE=CRjGk8A{>)*6_Ov{nOE_Y(ZS-L9Mb7KV z$;nMrennqE(j#u^@4Q?hLU`7z{#;_>gDSkd?kk_j{jI;ckZ)`4T;>%R*wn-jzhb_w zk(79mB$U^Ldkg))p`n>}`|5xK0y32rhzBYPm=ga#;qjmAKRYC_by?@S^Rf8%Z7LEq z)ij4K?J4al3hG}c zJ10cuTqJyZ%=g~XKNd33mH%C=oP|Cm9?!d@C;%1F)GSrEfm8Z;u-?dv@y0+!(wJ7XkzWPqsmEcZpLL_T>XnS8^p5-1s z%LGqekfR-64wcu{y>rFGA>mrt;?q+Fo}I!e;Zz}uVjKaEdEM-#t}0);h0R&+D`n{@ z2a>d2_d`23H`I4Z>UA)rX}>%6n*6={@hN&X?)#q%P~;d~%XSG4bE8ZNXSLH)AVv#e z-2kk<4TV{}&OoHpJS-xbg}vT;S|R}`I>7e#Fgvw76^7w~z6iy8yWijUg6A$jr?1jx zM8v-`9)8R>XgN*J1BuMMKb`}_B_T!3@KrXP8KUCNGGlmO!s2*ZA7f+8g0w@^HwYcA zaF}9Xa8@}A>!Wex?=En6Cuj*E{zQo5yAXnmZ+#28`7&o5>n`+InLzroaGN=nW;&Em zV2@Wx{=`h3?-B&JTe3>G=mbgak@;n%D}nQ;R33x5WxUU7g>$dYXbD~%WiKC{(>T?q zcZ5t2FD0yka`N_5X{jcZ#m$i`u=jW7~Eo9otsNcG9tJXUDd7Y;~*G zIfsGwBR2x}r>iD)D8`<`FiG}oS11((rL-0txR%kas(FP^8}j#@ZOSJnNRa>oJCF0B zF1Jm}ou-JE5~nCK<~l3FaF&{G?{D8A>rgM&Ob`*n0_aQok4d|b9Vsz)rQ|8Hp22}O z&*VQeij>)9OY`tIR3oeELIX=P@peJS`z{6NbFZZCpzwfCJOqxM0nu-V z;u;T0#6@$OUWpW1uIPNu#*!~Z+krg0S+Y07DWRX3X3D~}ddo5)@Y{HZAune{0dT;1 z5t=?-hsI@04CB*mrhJ;I$642zdHM2kIY8!0;#Uf`7n7UruR!14Of$-3Y*dP@M?8;d z!+!}qal*@BjA3mFU}k^rlvYUxipduT6R*kLWEyAGVv#)wKr}wioINA!kB{lt-OKS* z2#6|2_~=_c4^NK7KpfL`oH~daK@?TW%DnDm*2P{pgn~#X^X~i=!2Stllkpm28fa{4umH%aMODR}QJ&g1%5hW0JO)QZx9kfdVAO;VDdypp+j%#Ub2AQ5xeZY*l%8g8+&kR3lA}@i9 z9A0fUXl9R33KSt2?*Hc(LZxR0=Y5bq@R@a>P{ok6XZ?V6?JPka8-Y5urZ>zICfIs* zC{9Q8$u~mBVYaF=2^tABK)d%cos5l;XKdwPIJ%ji#tv4B2-@Ud<0B&x^d;4`dJkae z{rdC)*@hmdg-9Hz9C7K}6%aN*ncy#KMgx@Qz7NpA1KY{W!wJt#7BVEYjDsvK#wuOU zv0iTP*7t1A&JUX1JXh)k37ZXcbD~#UQE=s9!J#W7^TVzWvC1h-uBu#~E1QA#fl~bb zHi1=;NN1KPE=07WZf?&k-0u9T?JQ(^2lO~GDd%p8(3M0H^wDVHbu4wl(AsU0iTjk{ zDTc*AfMjmQIvyOa+HfDjRL+NFggcrPrk)7OvS==io&HPvP%1Ir79Opb?}&rF;oOxr z1h+ps8$>b}2IA|gBHa)LeC4|#jsP*lbp|Jdtdu9IhpPxYyQdkV+vo69+x`-ESI9NY z9R$C1_u)m9&rq;-xPXE0*jcd^5CJ!?mID#Kz;BYM(7KvkrXzmo&U%!H@9phzB1hlB z;k{OxI6waZ1Z&pR3^1hTn@xGp7ydT+?}WM6e=_P3MQMAsgQ**aGL>*pRS?!f<*7kR z;G3yng|8;$;()%cuB-auis>Tb<;^Qg$+?X41l|HE6N2&U zyH|dYWJ*90xY+@qp~50c*?nK4S9cuWUv5!*o5UXgf48J-HOZ`d+d>~g3t@9kt(3vX z;no)F9a+{NRIRLBfEzbauAZEA%Y1n=y^~AgBhd4*Imrq1iRJ_{*uU$SL|2Z1fQp7e zgA?|Do{T}L3lU7Aup&!EE}<6M?lnP_dz;spBX6Xxj)R;?(C6LZBQV(gk!b?$u~5kS zg6}ZNpc2x^Q%V*MS7%&x*7&}bQRHvRteRQW5vJ*vZSWQ0g!}QO7xK(kr%GX=CdzAf z13xc+K_RLce^KGMN{z{(&2cOf1GObladN-ABZtnnEBuLzOjLh{y1l>dKb^}@OCuJZ z^Q;blzxzuW_x8dM{V?vzr`aZTENKSMh>9XzIoyrM!j^FBf7S9wf)CCsaSN&JGvJe9GX>{s_N)@z~I*_?^rm)XZTLN;H8)$#?P^Oo>)3aur>B@Nz zRY!NM&zH19@~{1=3*Ph4Pk}NTF}SmIPCM8y)lHoUjeG^`R&>*tERmN|G-vd z9=DXbjM%Yt2~HXFq>}`fOuLS5qz#}A$LZW-l((v~CP`@!C{0fXEboYth9Ipza}d2f z+836hC1XIk*{~f)1$`pV8nV_}QTkTB=2!oa!mp2PFI7O(lKGXRYd=kC>004kBvgI zL&lZ}X>OTht^fjVsfUEs8{Y^u@Vzzm7@RzaS(`qD@O8lC=MJ#!wHGlW&9Z=eBiysN zmz4Mv^e0hph~gvDQ+&wJFNVea5-aCjIuTBBhg6>a4JNYO07(b6gDDslD|jiC6e5OU z)!2S(?3*KfvATMQLnFWRD#%Qx!+u$x?ib(0hu|YR6E0Dx(+&aRuc<1}b^sz6bN^bj zYW16DJUqsS5j`+pR{-(13!`hf42JX*upAbaCqC*w`OHY*S#x{i;tqdNxV6mx< z?OVHisj_iWk`&Dm8@?hxu_57H zpHB+CVJwFJmx;Q_1M;dUHEt@4K?(1xfe|xM{)|#CZUAV-OtZ{MC-*ytyxprfuGdGz z4mJ~uLCCtxTKj;!vd~$yf%or%%Ia3c)=Z>>(IM~yv!YHY;2pZIM+b5N0SjB<=zTz! zD$Sn^F6669)_;Lsav7I=ZXXIYu~Mz4d+!1DrasXgHzt#TCk64R!KecJqaI$n=;|0? ze=zx%Q2_8b#j{|mUBMfE4wnPXdFf!4TC{XZHRbFjveQasPYhN^{ld%KMLX=}XKGt& zNQb%1lUodn&<=v-d!LPLcH~o6#>Mn-6r$dDcIi>(_Z*`KNM&z9)QzMoK6`*Baq9h*-Atw`o@BR zZym4`cm4rwW$sPD=Fx}e&~&@1{SO#^E`oTBm_2mb4?B9h-jVXES(=+$lV*CG$AOwE zjEQl0q$aC35QfXPzn)~h2ZK`ZPxm-sL3TJVMro=1vL0_RTQ<&`>h+(ix$mrm^MCKw|GZcKvDI}%_tu~izI-XOy zwhRzmv2PnCUTwU?1~iLqgKck;Ce2^a!mmISF#7z0M>Q}H_%#+6#O2=#DR78cm;@f(E^({!bt!3E{5wA$8pvWF&$gIe?rI`B+c(!e(Z9&J>NNH5 z>_7@C?eB9vZJU#Pj>z7GxzU}8Ws3}Ra9_3LYz|TgOk2|DvPJVr%Qbyew3VaO13!UX zZjH|bIt?i>@-s}9wzmAOS&s-lZ!mRL4!v8)Hsb;8tprT1Exnu8zA*8%__3O?#|IYI z=+nqTK4DY_{B5*Mkm#YoknHvAbDv8?i|Q=RLOkmE-@X9Y@YSB1BP^j1md}16*;zK|6E+Z*WCfkS;xd zglg8rKlvB_Dnc$Jd)`pt#G0ZpKj$mjF#a#lS*m4x)-Wg8Q0^coj~SPiRWkrqOjXSj?<47nP- za{eIs;wd4X8~so`!5Be=(GnEJUUwQV;oDmPweNyqGn?btsKPGpw5)B!bjc5d8cc(% zE^a8bxK30ZcYs^sWc&4xp6sEypLCUo#-YHRTF0wu>%>I$_64iuO zIxlc{b!9@@)){Hy<BI*VX z^!zD0KAa)C5H;n}qCe1MI$5I-xV2%hwFNN$qs3Y$7@c6D>6i_)VYwN9>1=dLG!Xyd zw|ZH+i`87n2clJ|oR>h}_(t&wJV@Kb#0Gxp0MtigS7ZGEa^#@4$S>2uEwNibY< zwV|q;qQSN*Xj5RunB67Sy}n0!Mo$AuNzD!U;aD!9=hK4K96ff~ePL{g?EGeU4ioaQ z;djV9dPGcRu3jSi+G-?{OD2XkW7(VMlQaHW)HA(p6oi$S>oLVYbvAo^Be_LOiP^?Br2UGoy{?jI6U1V zSZboS!{S=`4)NXLUiPqaUM%%0cz*>YC3BB=*?3%7wk2qx+~o9K{g0t;y;T&%dGM@y zLzUYoQ6qfK+11`(GEMeiysY;>gRnt7E;+z7xRz|Sj%QU{NoA*X=Y`FUjuD1XBrC3< zOTySojm@jfmR=H9)nUlL4{XT5Z3f+$R*c&mE^u~%p=pY&HHMzb(+24fV?ZKni%`D( zl^@KTVo6_mE6anLG^h6*8kbNT`T}R;D1m5i|Q1If0#7XksXQ~ zqN<6)NK84^u+qQ|F1%!6QPOlz5p@abZcLn2+Lp!J+8sX&E;}8KktX?6>($3Cfu}oF z7_V|xI(V!QCXAYKs0+#@At5%XMTFd~I{;*?UZW_%=TI>=q9X0gvnRd8h<>qA`w;{L zN-Q%kupr026^rAGImmDH2A&u_;TBzug#E<47Dsui5tDiV2dQN#DtoTxq`L>&zshwY z=xIx|GTg?9n{Q*=*^iRWZ+9qtH%PL$UgfHd$+mz1O}Qim%?kM?M2M9Q%et=$+Hi;T zxTHzQ@n@bxn3karT|tbw3XKu%X+kEMm$q^$&~SJyC+{U8G@Gr?!@pKqKM31SauRW< zB;6x{D3TwRRW5#5jt4rY9g%E(oy?!dMBNwHJoi%7@G8U!YHMskd9=CZ-D?twUc)@K z;mOQS>0vWJMn#eN0di3_+|F*8MSh1_|2NOH+ux6*LIag6kn1v&)gh> zjC92!FRaW)!}D6UxnC0+*DD}Qy!39*rP#OK+q3IJ0Rm)QtpXTP{x~)k_d=noH%NA? zlf(#i+yc68yi{UFLcz_rEcwc~K3y6DKSL(bVS;5~`Qvy7PNl@bXVKJI^gDb4t5u7P zF3+?EU@J4fB8pdJ9lobxflvE3|0R{HII0~QCl1!JDZX&;w+CYo?JZH%(-#vq%Vw6J+1z$fKq!t4ecL?H-n z4N&YpApdu|QixiX2IaE@?139UFu!_LdIw>(hgUipg}u*PL@U#%bvsU}zY7$To64U9 zvhg=_@I)8bcl>q;^27pA@!dQmAanP-U%E}U_ty5k&MTQC?T&9_;GAvUe9+z=V@G_Q zrrw!s2QEgm=EQ%vi%_7ctYNWDEU?4-g{36LL1q2;Y~E}0tK=hW`3*dxUE zuAR!>8>|=Nvw5`WgeX3cMGDdtb!H*r$sCz^+kiPVbqpAlRa}pasa^OUf*`+MyeN ztyiOeY_BdYaD~H2eu){C>0oHJ;BlNul|_8`-p}JVJZei^{&Z~{5eX>}?Jd%>9eb<{ zsp`FOTf~fz(oXpypjFmmX2qNfz27YYxdPPk++Zfg9a#*!`5SiQ zJm}f}GvUY%{d$auToAPT^kcH302`*~(7J+!g8_28Au|;nPINYAR|sXaio54A9iiHm9~D^cp>sk@FcY<>UK96_t|7ef!?o-$+l-*wxLjUd zPQ}CSsaUf~^BHgZKf0Mu{}yLN#hl zSp5+w z!V>-!0ybcsW{6bM)rib-X8sJlCNTnHDi*S*8ZENv`%sBB=4%i^<2i>SyR6n)z-Y1O zU(B1%2CP?3-loShdcyq`fpB=&qZy30EJSwZ@A5dVZs%YxaZn^KfH&wpuG|dz{AgyS zMf+pr(CObA#9!Y-(#cs6ph8LWK{&jKgkdT-+)qHM?yS7PFn$*|?Vg<`Ux+($&A(eb z@)>^tUy~+Fzx*9mH`H7#&l`Vdwu@CiUFfFqTz&ep>}ri#RUJyK4QM;K$1TS>1=&JS z_XPOaTKrQ#yPkJy42$62=-TvmHH4#f+2CM*_@zN^nQEdba~cYhVceIZ*0v!BNel!< z1N4Aps}3!XCLU{^AUn&LmU*X{X~&jMjrxM^4tIAa?!j*Vq4?Vg0g92x=4HfmPx*^3 zGordejduNlB$E#&4H}zePTNal1fAO0p}CE%SV=dHSGZ;CI2NXS2Z+ai%{L6Q9Y>B` zwQU}_$t)SY3N_0_~NMTKTr1MpO0f%DEB<4%zV1Mls!YrsgtQ2tGU_ z>sK~{6~5XsL|B?^*@Xt5W>!0`Gmbz54*B9%OY?B~(s+R*di$m~dL9V0HfRJdp1<0neFILAO2lVJ(o&#C_(mIG$F2TmJ;r>mMr~T~i0DKr7eT>ZFmo^E{Lpp0eLl z$=Hnj?KJ(9%jPnfK1ltozVF$l{j&L6>s^QE@-E4!VeKSyN zW+K>Z9#a{0#U1%Qv@{{o&lE>zIxGWKyR{Leo?}R~h+nBxsx)x);-p#-Uz4W3xk{na zoppn~>F8bUFd$!53ROwZS3CP#Yv%Y%JfP=-0>|AY-u;AP!y6v%Zq-29XQLcq!KxVu zT=Raf`@kj6Yu=pQ@Hs$Qt6{tTC$^0*KvX9m!^3$_ipS*tF@=?C;=Pf$qzGA7cK%xG z^Z(kF@K~*bgOvFJ)^!G{8Ro{@lK#3 zVkR#!o(x*^G(BQ<9|8tr+oKWz!vOde&YY`ZnYoi!oasrhnLkF>I83F3;9crzy}s5{ z%ww1)iu1$R$?Oz7is$(o**Q|jvg?4UCA(o$b7&PeCD2}Aq~KwGYSpA>D(px)OmoDR zqm?EZAcTLi%VMGIMV<3^v5gDEh_5u#xShWkBe?4QCgiV^HhP)#kf}EIf+OPQ)Pn$b zjfP8oNK_Inmb)&l5T1Xv2DAY#-wD*XOTclAcQ?9sV{~($ge%k=BXz;CAMz{Kix1ru zlwYHN08o0~C^sI)6N9+11DuMDS(t}1;@3IbEM-!GG^JRwCA<-4zQ2>UVPT!2wfVN{ zyjqJk9HX#=%dt}9oEH9{5=Ta4&XG_T??;;OuosthiFJT-0vHFb9br@W_yha$6jHxI zRE9V>+;kX4d}8g7fuSGq^FqG@m3dIrh4QvUrh)w<*Fo%! z@KBM;HB$Yo1+dG|Uo^x5_~FWj=qU)lN7RECo`VgU$}PinE;9e#xb<6q6rpAXi~vY~ zW-H=LaE^M{6K)I%g$xNbMFO>|h{ZGo!WelrCHxN|-;EUe(B-w!aWgfU=}#sDsea>< z_W)b?B4i+4F0M^MPvRH96G+4z)qX|M6#i3Pbd(ifbtbTzQfm?M?QqAOETPbRfUtwmKjsc-0mh$ zE9#W~?gj!cK6y~eX7L(MWlfxh1j^)NUjuB^E-y1cxu}lNFP>$R1z^E$q=ETKXsAY~f@ya#k;&3vYGogGjdAa%H}pw*9A(W6~xUwvk#W0rb*hdwR%26QGp$_m zC2RJt4Xg7D_NQI9-u2%OmxZ%+9+fyUg7Z6Ve+=0>j24zi*jEGpQSyfm8cIkxsVG4A zH&PCt5dZfH2eDRx6nuN3^B>`4(K9)(@&6p-$$0*||1T~C{%M3-8g}@Szxs;iW6L84 zWSkdDAC_~J>G{-0>IKravQ^_H#gY?-)5z76l5$ExW1;{GpuwtnzCP#MXwAzgNthHd zqx>1yUG7P&w&Amgr9aE>K9>Ac3;ZMJQ{J@5gaQ_Xskempf79onY5T7;RiCBvoo)9G z82G+C7|r8g*+q&=k+)q<7o=arOgh1ko;)Ej%gs2!t)qfUU1Ia+z`vMD}`LHKKFB?Vi&6N@;RLm2NAQz}}N zUyYYR6?x?-xfee2w%ZaQtK{p>zX_zV0_y;_-wQmK7f%Psh}kC`Tgd5=bLQmh35UrS zS+&O&gZ`;7#S3}-Jm$n9bB;tfh4Bjw_pOO|*z{Y$1YEIe z(kSat#bkY6REpvmD8d|?=_^16C&I?z&#f#_)8Zt1{pk6wPJ4r+))-?wUj9@W#rAf7#t!mzm1DF&n;aYE)|B$!wTc zC@;{crX)#1S!0}qLq0>m;Mznl6>g4aro@5}SL~WA!e&(vbC~;)D%S~J?(nMYf-6$p zZ`)k`A}sKiU<=?1D@dpPA|hickBE{&g@QQAJEW-+S$%U&C+us@LMZW*GTMR8MQl4? zcDw6kkp1*R%tjgWzQyI!Ck|9jZ6grn5us-zPs4H0je_Zr`{V zQqCX7^ZjIjz)jY^MI{ng^ZuhTlq_$XB(lkv_?X+yv_dS_jJwd3*-_dDCYH)}PS(~) znaOT{MZ63sRs1YDGEO62of^v^`04E>lePo$+Q(y z12yb4^AhKkp2}~Uv{MV1KewY)A-PyV(_BkbExJz6m_yMa+37pVEO#eD;RfTd2c)ECX$}S7-Z3dm5VDNb&bt{W_rt-x4z7nDg-dPYgJgl8Y7xwMD-s6A z#7Exv(=4$|^%vkJ7ZCk?8T%N1ga0!48?Eg0p>BxQVhJ})n_lA% zS%ob@P)mi9Sop`2l61Em0-eU!A zSwh2~{{6!;Qpti^GGw0rf+N_piSLHSV9FIzEIlg$633%g)L{;Y>uOeJDpxcd%~;l; zOLt*!J?UCciZL9&)o&nff|1!kudP)#)tn4AI@Cnv#?g(8xPQhdUUA=QKWRwwD>z1K zBu=JThny_hz;j&wg^*Y(OQ2|}VBsT}0WeT?=-I6I3K(fo=SEXR;8)ufvdm^nl~?i? zcIaY04Kd>NYJvq$;}aDNwpHyvRtscN#wExz9{j0kSD&y|*%jaS(r2~VFHo6TT$tZf z*sfrSkw$$OBkis2D_O?x3z;cP+xEVZubhrIo#7lpU{%uN%y8OhNH~xVHiMeaU5ukm z8c-jpYOQ8D`>>m8VK?vYja}avu|*lFdip(5rD-+A8kGcWI!wOzQ8q{k7UO+40RVr? z>XMhHGM<66BK+VcX}hG|>W5p0PU`Z!>W)m@;jF<8fhLXhoS{|TwGNY5yE)Qusp7)l zprgKQW!V3FaR1lzebLp?T_X%S%{%xVKYlU?afy!a;IcoaibqUye6_Eo8P9HFZK7X; z)z$yj%iA01#L3^TGI%ur*SFy7L`6_*pBCefR+#kM@5tRvn4Om`@4$$)+c`&^5ZX)q zFb2#?$b+aTP|RcW7eq@RqgZ!Bv?T8FMhyE52E~EHH1^XVG709RUaIrx0qJ_P)dy<{9*@ke>t*3fnnV<-hbUKYEvDqQpVJg z6$ym?Dt>)6^%V#`B427*g69)jd!iNpChe|0VM)=1JuFPh0Jy#^tN)QhiM z?dl2;*$0EedTCx(i31&Sh?ozUfM};vO8sr$r^#ny)u;@D$dxx)1K@4Qr-@EBTcQVH z#alwqY^w@mX5HIrNS}%0oeR+NAs*z5aA^^yw8aB2Wl`eQBnSUT zkjzc^>?(>cJx4Nw_1MvxSc=p$9%VLM7*Ph+HITkj8HtVG5{GHyntG}F?-!iHnG}h( zLUdmxY+vzuMYS&k_$kpBY^MHEXbHv~5Ji%uovBX|g?ouhi|>rudF>G&8pZRtt(;SErQ(xVvtnqHKnkBRL~lx&@&^oIdwe7m~-yi0p9&rq!7Fht3DNCcQR<(!unAD&Nu=p(v4ek>Lpb?GqcM0@N0Wm9kM286Z*C*2 z!V0=l3cb}t-7osX4M+?q{Jvun?m_Y%|L?@G%H7Ml;gReJDT-I_yj0mhEO8;55-U1e zJ(_XR(n%_flFW>&8Vz~>0?qtPq8emD7>xK2ON#7zPJ0=dUZ%N1M9CT77Wr~SdaZp? z<;GP269SddWols?%D+OWchg(or5f4b3Dt_H;2_Y zaz)N+t7Jf?DLjtDkxtuhhymhi*DkzO%JuTz^u0~@eZuUek}E^kgv&o%I-aHUo9O0L z;B)U0*v9;+(&&=$3~X5@B9gL(ysBh1SmJ#-$m0+?r|PkPKOy^~`v#2dmE{RwWHII+|JZ(wqmWGtppfTPP(91uqKMdrP9S zIDwPJnNys`n16WPNl?Ex!@jHu7JO2@2d_p(ojxw+7FqElb)cF_kbqx zVSyW*f{XABD8p1u6sTz6E<8R<T^x25Cn)ndeS?!|!Rd%zqTnn%7w>`N^#}i%N1?^hEMh#&MAiir zmmeIj%auhqCBx6U4XS#+ie54#_7jQV4kIfVZ)HGwj0s7VdU0&>!Uq-Bhiu`MNx$z& zgO%=8%dUou=BO&QAZgTn!|S^ax-vTn;awC^gB&ISTAp3taMScV*pTp|qg{1-u8p4r z5V^`HSzgiBbZYuKoBvOh-;2uX>RnHqqQK*?Wor*zsd7VYcZM@=IPO*1h^r7^#`kZ_ z${^skE-OUepy=C=u;p*@3Qb%woC03>Hyt$QL#OjgggTzf<-vGA7(}}`7NQ>-mCl%= z6JICMi}f}}ul7}q9#l;8{N`;iho#%``lkdh4N^1EocQQgS1HMC7#Yo%v=cUg3JcTc zG>1yunVHpbEdrzD#88u-!;iLh&GXs>cm}|EX3}SaMOkvQsStB}C$7^+@l$NX$KHni zZRy8uizL5#*)qx}w6l4aXAi!Ii&K@Vb$Z=sjx1Z2mhnBh7G^O8*k@j0fZrdPYQut3 z*vutL?jDwowRVuL#1D~*+c8VE{qM|-SS^Z;AHr89?ONzeS7_@w99f;>VRvf}Vp>2E zhcL`(XUm#s8~8swQgcjk_X=JWtQ4j@Q?c|rF6J{m^T?5R{1M8LE2ZRr*HeGG>_mhX zCIulJoOB9q;d9&0i)9wwp{@PIUU%jSrE>SQ>oCd-oUb-iBAX&9Xg8Od9)K>>D;Fs{ zdiM-^!;S!C72mLL+FJcFFa%sTV@d+|31|~Wq)=rRxn2x)E)-@0_|heB61h9Vlg{VI zvVNQ%O{)&K1Qn+L-0+}5nQFw-an!-x%I%7DNx!`2zF(+UONwcfrJg+pxt1i^srAnd z!)Q2CC}Vm+)4&P%01A))p@6`~CA|v0*+-upN{M&PMZ{_R%BGd&^x1TM8Y_W=N@U9X zzY^3L+1kx8UX60~%6qX)jHr}pEAc0%2idI|GNTR&l$JmIWw-)4Pn)5QyTHbLkcWhL zTI3%iULN~QHwh`hN`4-c^y_)XaIHQY7H&(nVsmbS;hgokrIr-7fP*C|q4~?rC>mfA z#~p^{ZDEhWv)_k#8ZFS&`)@x)o>$257DG^2&uV;Gm*A6;M1=f7vX+r=#@I!dhfir((!)L)yCoc5T>q zQfiDK^VC7wX^47_*BoHKu?R8L8n$JCgnIvihn2W)3?eXOB>>j{PhCW+P4jWLF(8i< zE_Mlfs9?7oj(WoX=U^XE+f3QXpX>Roy>v=VXotLtAa8jL z6_*sFV>;;&2p9wUs4L&5gkek5)AnIPC6zSuXnu-~tsdP^F0AA3?QTkX(TJ~3BN?^F z*a%Mde^^1JaX!rx`ujXo{7ODq$;hYKjP*oZ?q4ZZR;COu8_3)b%*I4$xBUh@#`xe2 znAZQ0QhOYYMQB2Z+osm zsSn`nu&t6#rhczBxQ6%c^Pr`QAj-DJJ#F$LsJ(B!)@ZiP0O+|Uo$GTDk_dyFdJz0T z#00cxl4!ug0-haZciXPG9{TsMkps5vVN)Qpz+Shg4@y@B0J~2QfW~yN-RgwirB05uZ^1z{c1lM|QX`Rl36x#E!+^?e*t03qEQ{D5@N*qN$q?Gfm+bFp9}!>O{(f)tG(Hx7H|kbvp!lD4w9sOx+SvB-{VS1tma4S&pBY*Lvg*R}SSrLAHGG5}tPz&|3qn=2Tm1Xj5sxd=>dv^fvh z2VxK^*Ere2j8^?)6BW28<6E;Gwz;j}25~FNylL_*p5^}Aa8tH&faal)8Vu12=jDb&q(F=gZ zpW`mJ=Y{M4E*jS=n8VEhIwb&LVBFxKz1DxM>;!E9Ge82=uMNNgwkVnCelv;E4DE*w zGQ5#2?y4-0o=nOVA5HmqDp78Y^GZh9cFE07&fkb$V5SYab_EMH_e^r)CXUP}VWZhG z6oaT$5&w>q7eXglB?A`Naa0vDQZ8L$SadprQ1p#oyJlodA$UTE#%GQ3X1?L`SAI*(gYM29ga|e$GL|mA9xp#4SPFcHyKq`|$NB zB~z2@t{&of9tDg8vaJj|^4~(C7`P1~`9dp!bS%VeP*J{@#Aj-fJzD z$QWH{UJDtOh2P579%eLWyMHIAn#}YI{v9AaP84}{QTy;Fn^9WXI%T~E_@F_yd(-PW-*+gz6GDe=~^4i1JVW>L3rIFt<|qBcZ5K`rn>6QsM|)u}@# zu5(&?+}<-$w@LArBs0j~XzD=G&|nwi30Yv8KIBbIZf~>8gp4_FwQO3gWAILYH%%j$ zL*#BY{&^FL2Qdl9R!F7gSahG@$ueQv(ge-ydc=o6z-NbZiD5>9C{tbei$Ys4DQ28W zmEjmJ0n`gdj~?WIylIn^t@v5jG>(DZZZEGvErnSE*A3sRR%7~fAx1g!yZp4wSO)l9 z8#kek!Rh0ybDM)Cq#MsVQMlu@qe$5V~ai~+&`UT1SDww>VIJIgdjtG z01*HVFuKNuc~;%7 zYW~S1l3Tuxq#NQ{qS1d6BH~$dMZiWLNkEHJa)jc}@O^i>V@M`%eC@~>`yQdx{i^~t z^y?(djrG(0hmmQNwycn&jM6m~{daY`=y|Y@Y4qxrKGgu3Z3Npo1aOvw5Z1u@)__LK z-#s}po4`yN7AQ?am_QQ9u(^xc3{1|koRbZgu2X$kpDUQKHRWOM7*4G*r{?j8OM8xZpR+~x_E`YEGp)y~v-5vu`wB$P zDkiyb|D+t3a1QGk{OSV1RUbVn;F%G`rl}CX+?57eTV>F$S6QT6Hkq>ZY`Wh6&lLWD z4K!G=|7-Bj#&=d0*|_>rkH4kK%_?hlFKWv(_VV&Lk|hxxWg|zI6H!kZ_(5RISY?WUi9B? zAj2)9jb{le#$JdEt`hGAGM@y#`^6u*3Qa&K(7Vd$SB3)cjQMoQEo4o(C@U(Cp^<(t zUFe3bAaV_%V}1Wb8@?z+%KL!&$hXxAVzX;wC4MkSdLf*GqeLaZ^_9$~Dg|cE?P-Lw z*f2>3GKGcU-!i&R%Ie8`@x@egA8f1*R?|UVzDxNl0#BES7$F}}6topcdW4c8{)+E^%94EU{Paun^d;f$C0 z-p&J342urg$z7b1erdV}T1iZ|>j`%#O_?D|`;a2qo1iIXK)Ym{9i2)ve=fLk9%TeX z^2vT=ppuG#7zb^^cqYhFIPG{8M6fd3G?Ej4fQ6>n4m~KB=I01UvDqMK!UbEwsj40k zw^EsjwwCdLAe!z|39d>LdQ`{Y0LWuj&j)LqV!#d?d5_f|UwChzb16*2*;}a5tlj=p zORz%$vg5b*NCkw#NSx5vVkt7!sHDPx_aFMM>oY; z;rR`0n}(;VPrz4*t$hooqpfu2!^mjt>!YLzfq@5pY|aQak1+mpvR35pY&ZtF(lHJi zyR2E}2*|L<<-#8*f?!^xs;k{q2GL2ZSUWb zO_rgQP&tS%{u5S7sg(Fb@9H#H+WErOhvn@yl=^)y6AIYCciAE;9V)j@5o;zM_}wUl z0px_q3_OstqFL9U__Fr;TsU>jTlwrejT^Q5IuMrh2IPr-u3j0BD845vp6AY|Mj7)a zWuvrLRDDb=v>UgwD8(6ggH3dXh#4pR2-hT$TAZx>d>J1~`}!&K_)I1RLo2UPg0qhjSwhcqLfUEM_em#GNtu3|CNAi_c zecHH@uC&*g{I-%qOoEpylJq?d^0)dO%>!JrM@>Cq5qGpcZ`lC zeAj;COl;c|+qP{^Y}*~%ww;M>+qP|Uf|LK=`>eCy_dKgVRoAKyRn<@5x_;NfBazf~ z8AyENjBs;A@=+TVQV%57d%;)O{_Dp>0vYoozI-c>V0oUua5iB~f&^!g6{UC%jhC0c zw73-@UlY2RzAfXT3k4FqF*|XdCxDn~2h2?Iv>iAsbYOldVFHNE{qV`EAQd#@!AmcX z{z|a}7-3MJD_N*akpGIjlB1eNFU)<|#D-+E+kI-$o0N$T_LNGNMOwU|t#eT(kS_%G zdYP0S8`eP9I>RGpCgREEditt+b9cOg8ukFN7<}r&jSq)=GEUH<-@tmu=4nAKFQ@+y zoarIg#U(jV%o@{zE`GL)CnD>1L%2LWGDN`R`RV&u=>kbtqz|f{HU02#7q1Pv4BD`A zrt;us_Y5NSikIDMf8hS&;fr3ITnip555A@$HrOIP3Mbe|eLqY=^XpZKvuvLQSy=@z zhXvAneBn2g(y2+>_q$dAW||1)yHv^>5kco!V;pa#kSDzuAYyq9yM>;;MNS*b!+%o> zyXYU(BCWdvUl3eh8|I&qchd;UyTZ+P?`;UaHrzVK0KJu@%cOTQ7<0um!9IL3orS=r zg9ZjtR2uS79`ZnG_=T$4-&pI1?92rqY@&cPulsC`@U2j&6?woot!O02JXtTyMC3m@ zCjnY<4Yvi|de(9qK{H&E9VBSHEE##gv<;&(G|5~Q{3a6u&U1qXvr^4NLM*n8!wepz zor~=}ca@Cs3*@7e9+LL{#bxo$D(Eu1Q~vi5#$je>q)zM{ma|qlQ!6_Ik7FNT_NCY` z*;tStHz*1g!wI7pB%ifUotG;rMF|=Ukv(=_Q~qzGK8X6# zGL_2VABnnJgdJ5qnB?kv<_Hu(Lr3_%kTaUr&!5%N{rNKrf&xzxtFFHx#OI!ZBt!X; zrk>)%HM(5yQk33Bs~!q|>842Lp+=f3n0EQKXB9KraJ=r%j~YV=-c-Z?FJgo#Ih5W~ zJ2ZBf2;*&^-3JmbSkiE z_s!wp5g_S7Ny;DFW*f-x&k-$w&e}-q*vq3=+aqQhH@ib}drKf`_LESVnxVMWRNRUJ zakX}#4pB;{;!lwV?VUNm%sks>_|L?Ke^ioulEbTRUmNRfoRLy1-w5dsl0Ig;dJWY= zeU8(NnFEbC=r6u(A$=!^X8N=j=sZ@d7&k#Mj`-D-@qn3Vxh8jSuBg#XkYk1TGiB7J zGH<>7RlH9|?4|Mr_QQt(V+izPm! zPf1`!s3GD8>@Vt#gEd>d68$fe&Gs}l-cd;fnXpK4J(je$J1#b@Q*$U_-p@;8QG*!S z-XrRC_OGTz{Gez^^1D?%=)6?Jdl9jVodwMv*FiN{g$1k7DWi}%-TG~LPo5&9->+dQ zEiB*hH=3Jdp-WysKLCgzc#E5Lqy$tvk%0(!@{Ky~i`kF+??PTm_cB z%_+fX2Rnjh(1ig~fmM{gL--4ef+-BO>~Yf$P55Z{ymQsuViLSmU`$PTD1cu)0i089 zbx1n`vi||}Pufh1L-Ov_^#}!dSZHkdJ`9x_)dGc_JvIrT=%4&Nv7H1Gh5L`lA?Yhk zlybP7wnfC1I`}?uYWW+GjgoBXHS=I&rJT%u zB*nNGJB>Z^WC|^ob)Yo#TUKR&#mapQzgloFUqcd3i=oAP=mu)pJP_M0)6r>B@kmW` zp*}>F-dDeT`!sw=iL^;_>fS*!06EuhWOOFIQkM*%zWKOXkjXM!Y2%dT-gX2LNb@jI zJu2^xHgC}z;K3J=Sx5gD+wKWH8e>gsH#vHk?cLMFR*t}wNh%KbXFAp`lf??G4(1;S z^gGCoOuWEGY@+zpp1z_NqlUnpp0zuP1iaO~YhxsNKta02SyleBuEM8t&Pmg>a$X z{$SknT0yXqB!n9|H#aU>EGk)_jOg!cyogJ=-+Lm zaE#xql&U-MnCf4?%;Y~FKK2A#&cT5Ht!rEA^>6bbMk zbBD!g#YmZ)RJnDrtj3fz41#Tg zldcV5Ne(YGvWYtqve;-pZx%u`O>`%Qdo_-Ivz)4@Sj1jnk$lh={GEm%hndV)AsuKk8ZqWaX>`vpjd~NbbndMF75)u?$4@j3KQriO5^uu1b$HwU@Jz@%Ag1054S%Dymw8JU?XWMNUh?LgGnR241# zj@a4bd1zQeW3IWSaY0D4T!-npMM3(JR?sex!HskWg@xwtQYLL{JP;lqiD=FVQFQB# z7+3(1A_?*h$~A}c*M0XQSp8w5W8zu2)5_BwWn$6SF+Ni3j~2hZOB7Ku^h7n%vL&YE zE!C&79U;w@UO1R&es^lDR!E<|Mj&yFD0|+G1#sj07#P_0?+6b&<9I0a^TWJ{!!dV6 z)IkTgfVtUp0eq#PLB0Ri34s=v&04N#VebD~BMCf|)CENa z0)jP21xEN$h*sMH;{$`XOxXdip-6TH{{dV&`(EN=z;eIJPmUrFHJ3RD1>Qg!m2;5Y@pr3U5KS%$ws*-Ge zFp!8NI~ebHB8bs&)!3!fMzmO{HBqSTDYh4pA^IvOn^ek&gkzGq_gijCmpsmAT+K*f zsAu?JFCCEqohs>Q!O;DsP%DQ4uE=8q1nB{1;4{9r+P|>dOoQ1z{3U5Iwf;wanqBJ9 zoZI7uW3X5Z$kwa*5uZ-_>*D?Kcf&PJU z(ieY*{44fh9)#V{hB9GE6oQhL45fLCFGbS?K$S#ge@=ERdQSIlzjcti0Bbd3(GnwK z80rbRlHL=JGVqWyA7MHl69*Zag}xp{seT!xc{C#UccBcEIa5oE)zKWpwLnv1cE1Jq;x6*B1F|%r6;8o(v=`e>#1c4FMej zG9*%oh}$Eu;^Wo3#9}`aC(*`{&ZZk!FZpS| z-;ew>^uOh&8~-CeU0(XiuwZOf?{6I=L75#kC^td`Pf5>$+XyiUhG0AF!T$frPi3n= zhD*SJfM((UyUd=)2n?4h7YfV)8K$+avMiU88XXFZ3y4oL9;-Vr7((o=9VGGazP{od zmq*tu63uz*8(>W}7U<|o+SzG2Wq8Rv^y4k|#4OurKc z4|fJp0ygV`SFnvkm~jNic;?$s^Hxh2+zz~ohg-j2FVg_ITx$W@5q!x3=M(6R0X(H0Z`g$7ZtXH<7{zjo|b$^@Q8o=s2&dy5Pi z7~pUQ#hyt2s2Ly_*$yR-rsBA!gYJNHR$@Q>^p{fdo+ZTcqW*TzHIg0kBUj%;4@JdB zN1#4|0$7!=U;u)uaF&=F*_{^Q*&5&bH*;RXjW(xg$QnPq1~1qmf({!`@W`cJ;J!7K zBskPVA8ldDCdJPu1m02-F+tHs+uX4XU|PX^vs0kSZA#r5w>U+c-yU}(H~X${R)Buz z5^IW{))OF=gvSuPSvhBplGg(KuX&UeRX8dYL>O<>#~+v+d7nB(h;51a9?}A`DBa0Y zWvZJz`;HEBy7hd@oo(opU+$f_X_K-&(Znxs98ku2Y?D}4_RmXADB$7*g$kKGVH49b%XR7)sdLy~~}& z`c+hGH`Usd^J%r#(6x}I^Pn;~sIzM*Ap*gOH0_v>XQb(n>vf5A>F4Z)Gs~$JF}F4c z8bL1XOL=BD)B`}iF^k1To`G?7I3K%<(Nn&qd!MO#cB{DL)bH@r@CT$ecVDe{B&l}! zR8}ie*T493%vcapG)s{KG{{i2$r9h$R|b8YWU>Dsy;e0S&0=QdwhX&Czo}`jSuV`Z zP~V~8yC^T8h}+8f^Ys9owLGukdrhqO?1@iivh!+7F|Jv;`TiJoxo>gyt_;YX)HcZT z5mMa1kx(AL3;p(A5~vo$#wIR?Pw+RTGD!7;W|Y!T{kSW@_>uM@NrQs@6u1AU-u(v7 zqn^qb1?<6^>0)I7TeSfXpTKFJ;aq0$E6Tb4XuRkLda=Or?IW(#Og1!)6JRSrC{23v zy6I$BgoDAOlDZQGi~~q-aLO1D+NYZSJyFjBm7X&Bw9X$3NjpQp(KT0g&|-EOjT7SPp~8r$pORT$@sNZI|O951|$9}5`i4s@+?m+6Fos));i z%~E9gx*K5aA*(9akHBWO1WzK9b7ghJcsbn93$)SRcEvG?-mXmoqlnTFX1qT z$YzjrFTkCz6aWxmpk2I&b#AEC31RQ@z~PPfLBXc!%ahm}VqwODoyPaNla_gs*5X5@ zWSOUfA_<!k7jkghL+m-#$r?l^l`A;ThCK6(<(g17%?P{ljXO&mH4`Z8`c5bXZ zV5Z6_8e0`j4H4xJnU_2!oSpK0U`L<_RDlBKq z5D@Nzb0BslMh7dFYQfDiVY{#X!hEn2ef~X#c!pY8ANC1XUeAbGY}4)^5=wl*?i_jg zAKok4hb!2vlxIljV*P$&+VytJPX?oJ)LrjB1wj7~wH8If$vn;N>iCyCqbw>55I-WB zRbwJH;!69yl6b^<`YF|c*kh8OS5_cy&U758j&}P^DidKseLSp@x;|*TQ7Q{(xK0M) ztYzxmk5%d;yilJN?kRA~JQK^j0mLSab5}d$b@h1TMOnq)$6t|_-P$F0_EYrtw^)u# zT7VLQ_0`F))SPPz@vpKcw}~Rk>bZ=aG>#205fOl(VGC%{@1-J>^?e-P& zMGPf>^G`{2LW{GSd|6E`DrDJ9?Y_=6+|-n=Ajh11zG|}}_NaP4%j-=H5|=nnBjR0o zm_pytAY4``N~?5(_hpW*_NxO*pu9?K2w>uI-B9moY{e}S*@D|`yC%WL($V44j(qW5 zH)K<6v)Ii~!_)eQdJ~@?vG7>p5haG3Z1^6`6{D72^q2^OT>@%O@g6TrkakgFfvV6k ztNS`iWkop_=D@tlk1jz%*6S!=Dbi;dw3!(%+sGnInWs7LIH)qo=-h%bvmnIo6VTT9 z>w9ZB*mYs*e7p*Nq1Cgzul zuJ634*h_Pz@J)s0Jzyj}t4CUc3P6stfpO1iFMW&oFZVWjkQ{iFSW+1oWSPDIj1#{{5S!#%ku*9 zZ;<~p2}}6~pai7yCje^#0{-93NJaOj(TM6JzR&NjDuPFuRst&vdIT(LO$DL?Y?N6s zUcaerDUm(u+VlE)(~!;5xDK5;to--FYlibB=VEtH#F4}?d|-r9xeSNYVi+GkEJ!o; z&dU|1l~ILMJ%d)F1guUo0Z9!teRopTGWFk+b}5orHsKlINlWqJ271)Z^!1lY!%i%S zww5%~ULgpxBC<=sPe#OR@LiQ;!im!=P-$mm@ao;zb(B;}J$@x~i}hwTX(~Ji%0pUiOSJ(SnT;8&gbfsncy`{}t{51~oxF$v zSZa3Sa`pfa(Y$y+O!vK(N+X&bi1pTCx(lS`f22eFgUNsHiycHXvfZOi&q2*=75+6h z4S#PSSMknp==&GOT1<#r=!MKVrIij3P;Ar?#&7Q46b9L+pm;;uw5@bQtNWCavOT}l zmU{v^x|}wgV_79=Sl30nxFHlxTjcU2Rfu#R{Z9^%&pg0hX8_&g8*$~i$3gl{#9tvn zZC?PVOy0YvZPX3!1de478VD2F(C3`!zR9(=?V662{Aw6hD@cIc(>c1LGBeN`!CVq8 zE%)FMFWu3WTtQ{l27`kZvz1fo3i85m3$O4Gq6`4K*yE4lrn3Oobn5{kHxQe!Ac}5s zcp?oLM0IhKJ4w~aK00cxqQ&Ehoh`6!(70Jho)|=}d3qBw(*@W1HZrpl(9?=t9r01wwqRIc&$D;RZ5$Jye>Void3lwCm{KZspaHgR@GgfTpWQJ> zLhtyvnwZwrb;A2Mf6>ZR&!Q%|9!kTK_90U6lDgT*x>x&c*6k!V`~F{GI8Ky8Ho+f{ zqg<@icxF(t)c;C#ekukCsh-Ken81RmiOIlZ2#dBaeTcAX1%}1-hf2;FsUyk2L;yy? z=_)yPQ-0ssAOOGFm%3};mDq1{DkfK9BP7KHs&Ge<~O}fpT zC9G&I+lK^QMy^yvnb3d-;8aC_M5liGs;V+jhlqHz`=!60gCTOesJm5}@UaOBUZK zF~SkIi7nu!R|8sfx;3k;t0WjiOU1%a2rh=2~0I(X;SicdY%xF9DoKa5QD4uE26s&EYYO6uyX^BW#y1UOD znv)B=gWX+6l)6&6Y`L?Ahrdc4)@X;Pab-z%`4{vzM@y9yuwl^L_(Xo$SCA~{M}Tt1 z1m;&K(<SFUMGZMB7XeXAE9r+2f9n3X`JRgJJcl^((`LVCu+4Wzusn3+79gPY&)Y>(ekQ#*)R}7r0c3}_&8e?-z?kF`gq2Xp zZHbN3+}U8}ik2q{xE#-cAqfbY_tk3ES9>!r9`4JrtKLMlLX2t;-e)sf4KmC?hGe}WA)lTAsZ#@AGqn`|NWuVgDSGKVH0!uN6dZh~PJa?0JVYYi`xo?4wVuxD$16eIf}HjI zT?HfxFIkZN{L5PfdHNRON&>xBZ!{9f5kFpW(W7(J&NI0yIRLpSoom=aasfd7YE5Qm zoMbKtaS9c!MFmGG!yK8yQe6!pxlY|ueM>B3syRPKhL+J5m^=Tm)#!6=o&de*XOE3Gwq zWsNS7ZVVWZsl(4rlvRQycfJ79rS#4KPRV64=bEMPogT)sce8}u9UW4Ups;-G#7=^wZzNHU3s z(C0`$Jpn?fR2G=CBP5WH-N%F~6ugiBYsyeMFHu-F^(O1b@JRN5!h>vOga4UB0^AZ; zx-{x1FtNZbB9yI@$LX72t%h1e(3}WO2B56LD&>p}_3ojET@Y-m^Sy{n88?Bi-E;cR13r*yJL{G*|5J^iO9>7R`5#P7=~GygdS zHwZ|pGI)(_x=b=9eWS{5&EUa3eehI>y*a-Wg2^a_F4JON;FsA-wK_wh2 zeT;1qk0`IF=Ze;-ob-+9s85%S4qstGs|A4hZA*4<5QM$pyrzn(amj;1@a03Xi~U$f-`)1_E3GSn17B(%xo)yU7sTV(LoXpU zn2X7Kq|Ig^US7kWuE1Wp#9wmQ03cNq^b;s{WKZ1f(hR{AT+5wwEKmOG7X*6Ah{O(x z-4`XNC&6qA-=;>DS_x>xM`i9)nvzHJXw}rJQO@odb z^h4+)z3~p^{|rduzMB_Ue@2JVekiaK|BC>d+LH?`1NhH3|5;PYivOwJ`~LK$eoUOO zbXb*sOq@Q9hgbCxo9BPZ3kuUsT&mBcoP|GaspLa0*?Cu^+R!eE_J7xWTczCb?dsv@}}#1&jO7DcG+~sQ00*U`$oCHdQF>D%zsLNk}Tr*=kCIGUB{CZd&f{Jxbk8 zfCZZGut>Wd49LV$4O_;LKqupHCl*?5Bf>47DWSu@qCr&Ys;GNRw9|4LXZE5CwZ9Tr zN}5qU@{}YuX1B8arX0wVcQiW;c@m6C#26LiA`tKP=@;C!Oiae7w}@mdMX_(1ffY#EjCfCo6~ot`JC#3#8kTSq%jIcrI~c7Ghj0^$mR2#?e7GK#!nm`G`77jw z1{=b&w_TKy7uy;|Px4N{{9gH6I~9O;eeQeXdBeUJHVtDMd^AzqZ+GnOfifddz%3qO zI96TXYUmpqZiC``EByp6A#%%*ALs1}hW^-PkmGyE^v-ns(4B(?k%SHrpV>{!ajEzv z3+@aiw-Lo@q6W;Ds@BpQ%+Wqc9;*h1Ni6QDUukuT`ljNVR-XF4$L!(%755RlsxR&R zJamVjGPej&>aPM|6M#N(<%Phxt!p`Av||K^pNdN{T^Awz_25}MCdKM>LGw9a#5KVu zsU%Eie{%9A&6`}cvNu92{?%cCMQgt^?sCtc>dR|v7qa7sw1TCo$>2rBQgAEDFo`u9 zwU=jJVFJLGp!rpf+Ptiowr0H>Gz0v5j+l-aO{%OMgQ z8Tp;$|NP1kQoGGtXJyct2Uw6YH*#8%;#7eR)k+pVD|chJy#hC@2>?1+g0AVt@6`yf z1zG%V=;g9a0q{C`KG0`=s81C2r9ws^9*P8y;>;TaF{M!MrlJ939DVB|aFG%~>P^{H zqE%%5G#rG~;)I)Rko;^3xK>Fz@cw<|{kdC{P za$B?qx6Qek%iH%nRMb}0{6#-^RbeNd6ToBH5>FBd1z2{Yi<|3|Js|!y)}68MXg|)7 z!Elz_Sy&6T$jZ(^&*(^!V#zHgkT*4>I7{cwDLwOO7x=RpGF2lGIjjeB;3R@m9nH>T zPdG%&iq@5h1Ko7|81u=?^7enAXKLi|1BX%AgB@kUFak zfdc>rLj12&{UNP;^P8k!848Z zTmW*WUbf}?&3e*)SGY9p%8w0!VH>%>VzXG|P(PDPw4&!==|gbwTccT8_rZ1eyii>7 z1>dDXAq=W*1X~-(|U3x`K zynhrI@Gs=e3@qcw9KxzBHeVLij?eogz<*uR9~vR&XC@8m%E!5B2o|*^q;47=eCvZ3 zs<`uhD>CSL^x1oAney4Jgo0=)n{LfrzCs#L5X^x6vWg@w(Dh`YFK*Us*H2QhHx?FSD2%(~-5!&EU8*no}#Tg%+`RF*}3!hl-9hPu)T zrI9j%4D%3T+?$*r1TbGFr-dxl(?t+@6sG!1b}tp@i7VlkRj8yj11HnBU4o~S7WSDX zx+4_Kbz+=~lfl!ja2O^Z)|cygq5_;)tX2_SzM7czu#GCfF?is)#2$()0ho8XdHw|d zsl(#s7Y(31u4nOgLkW3cP7WMa?zuzB?op6Zk%si&xZ_J@QVuAH&om4x}jNm9SzCOswNhUPIsa)b6#jWvoH_b$8X znepLcLJhM3;A%p!js8}01Eq9NAE=XW3UQ#^MH5vy=zn+z@)Wo5qwyJzf2sjy*t|0FKxK=r)j}D3U`ayPNTT2`4n}&sU%( zrXTYH%T!EJ2Nrv-wXH94af?ZLT6bj58?G}fE9OTDz4GHg8vpI=B*RuFh#*X(b z3OUgvBRwRewr5f=nasT`1A1*2Ak=4E*X$TKmP5vZoStXnSv9u_>#fzzDKQ0}4z6eC zNxJ(4V7X!q{E;2V_0O_%L1H;zTF;p#2Tc-aDg)owT|^D$fuaq%KacLiqFM*0g3hco zqzS5ybBh3bz?0FC{4L?fh>9rI49?NS9w5cGKT17~RzW#Rs6J`<2+b;ihYk9ez&c&V znf)et;aPnD85~vu$0s>mcKyJF@x`F$Fl!G4AOKRG6p1jAkVHwuclc%V>t!@;BSM}9 zAf|Jy)Cv6=XA7;N{It2iT6SffdG>5a34%{qu2t)ke`(UkQxNSu*uNu8?=eUiQBD&w z0!-L;*P4J6Z){qBhR3TzI}#oVHUu^1r0 zAi{JxIrMv<6i=|Z@GhjQS%J`N6cdHv^;#A*1(s#Sr8=gZ_sJ}R=0Sfd!=qO<B9i-|s0CkPP$(NK}x62JY5~ z46=|90+YRvv^sRnX=xu*(k(9XJcQM*}LVD@Gq9umm+kEMR{?Sn#%vAlS)*lv(3ba;;0&VL-s+SU!(V_UKvE=)ZWpouJ_cB>b@ zTeZ=Rjx=Wk(o^?Af)E*zhZr+){ZZA<@Z_&TLfqSpWX0?fLyz$v;7X{$-$|pfE=Wy0 z*x$a`JBSCSz5LT#kaX>Ub}cG&*wI{y8}C#X6#{9U@>eNp!nKCfhtFRp*>oPzyQ=g~ zr7-Pcd!m&hD8pT#yYFcTC(_zxFHSRZOMNE>H?Y=zU1#QA6@|V%ZY92#eO~`KI?vje zpT>5j5hQT9eC3p1J@^*(r->}fs< zYllO~UJG^NHwl3ZQ_r4}c4k8)toeTHFJ?4-R3;MJeO5!HIR4mO8<|!6Fs0w5($dGD z?7v;SNal{j1`X4#mj1?yHr67{_uay{-1+|8SSuv}%-rEpWsEeDD^{6e>dwk}RmNt( zNUrf4MO(P9f9D*>imuZhfRPv7dXCIxZRX!rq?c3^MqJ2Ux$)&MF7+V-LyJe1ZRe$>V=6Y=J#13Z5!E z3~U4po?18jV}CiYGOAHyN#SFi$qXNJ;QS-oAe3t#0uSkvXq*yBX-vu*dHw;%hAaja zkoL@jgbwW4Yinj1biTa2Zq)`PV9 z5XK6R98H0f#A%Sh=o+95L)1i0{H2N4-82p#v7CcPA*H9*Gap8vz%P# znK1FK?Bi*;HWCCi_nFS}CrKZR_b=`A8$>7U4CovhL&A7kA9(Tl9e9%)R#0J zj7PHIPr&G>sDjFj^Z9%h+aMSupWAQw(p77hs-S=UTzK`IPeN+5AN@|=7sy|Uv;r|x z`BOeCqK@t6U&3+-hUgE?d|5*xSxqk@pD#)E-O1c`87>HKua{%C{%eAcA4X~}kcoz@fzX~|+eZ<&e zSqX2PWOBA8fkVbZoG$mEkzs9WsZRIqll|sqESAd#-zC@ntlbXSw5?{a=jzsvH-OCj zomK5tK8IUTE3g~v=+e(zy*&0a%55SfxK;=|o95UoiFv0SVN#96l^Xoa6~{0d zQ7{M7W%JQ!_0i~!o6l1Q&Q9Lk1fW2`QnM~=;xgiAoC3w!u3IyS`ei@NEZQ6fc z`UcVf>e8r`kHv~XYeE=lWbEIljCy}y%tK*0=(wVScWq2HY;kKD%wsMNHQ<0HFULf4 z0&Sl`&W1w*AFax`A-Q4*vYi#qR(t4B(z*<5i?yaEgNU$-0d)l-U_^NOTE%P5ltvW+ zer4RRWl0e#`-BpD?b_>by;$z^&vB3+wd4yOkjp^TqlNQ8^0HdBs>{4oGB)X7G`|+r zayjEj+VJ={C0>6m2K!WTQ2>N46(RfzORJ5^MB=ItQ<$x~l&c)d7}KfJn0;$WpAEHU z&LDb%E=Aop)!jU);CR_yGIU1&;y6PyT3gUGx+C?S@v5NY4l5zN0|rado`}V4Ipqm^ zepaM!i$`$+j_O`vLdat9Krk0*7-TQPAakG*M-fWBJxLm`0V4*Y^pDy-l|eHqvvO@R z5m$AgO#jITyi#aZ6@5{Z(1I7*yZk8ZE(5-;YRH_WdHoy7%z3Ds%G)o9IU$Kfh9@B6 z&mJ17L>1VV=15V3t?IoG7{hQ>`(-{Gl^~4?W~h}(?@suJ4Z;)823e>lcGLkZmL?+Y zEia)>N&cDEtY&93I-nKZ{cmt#&J=hM5!^2d#2TsGTixODwAl|^V6%ay@%!xPg}<)S z$C^`>DKd4aT4<9OsO#lt2t=k%XEg(1fx5~gWmVGkn-1s>ti1f8>gCCBnv3xHH@$iL z@;#tUoiz*gxctqq%nn2GH1p~dV=D_nbwbAvjN};`l#{2T1%MPSg0w4^MGOkPwg&4P z6LON?qEZ#baZnd19ltFuxs@<$hYTq39;NY}h64e?-^q$OxLk+L$d)W@s0s(HP=>oe zVXwrp=jeI@gi|$Tguk^~qkt2$L`5q{wGD%iU#}i8vL{2N+Hy)d=p~gqR)|_V2NPtL z{w@zFpmyO4=>ec!#MRtGXl%4WIVOTw^rwib2$iqA>vB5MXE<(=%e+G2wE=mr*{2qGiyR*$S{sD_Q2NZ6)Zj)vcI6ds_6tH^P3Rt6?|624uSUyaVkK1AJ!0NC)^|}_+ zJdv#FAp%G%vqS>4U_;qSlJ-g_AT_xnpbA&5ApR)$!+3Np3S5QVF;v(H6FxHv93Zrl zg#*QT-AZ_bbhquDH_ufttv)6na2^=KurnTa2)I6o@dt2RCv_@Ahxt@4y4XKBzMp_N zdme5?+V6h$=@0CTTveAKEv7z$H%;%~m8KHPQs2r$6dCJ@O_?kZP{`(AzY$ zO5{P>4_DjtE~tTdT@OS*p!?E>8R77y~&N7@Fh zOghGPde1S?nKaOc8t3y{kJp?&<8mO9DB2G6I-!@W?4=2arhf^aC%xA4@g1g!kMpCN z1%ii0UAlIxvLq~3dXYZ`X@NoW?jUiA&;T<1=m@ubR$gxxBHb;_vKKRDlAV9wn9=cK z)mhd66EXHo0CU;PoqXY4b)e3WyEhpqJpT+oLj>AlXG=;Q%RG1@?s_sZ%dcc5Y>IJKyD4I^|AdmB7?*mthSM+VGj0BvKTwZ(aPR$!R+x+!)_pc>xjHm6AI2J^@* z6A^c`7Ec@c5Z8w$=$&TXlTBlv$+q1&iR;+0G#VxBrC+U~%8gNm?Bi@3CJ%Ls`I@0_ z^4C)nvb%kPz-c6YnS!E`JuRU9r7Y&7S>&nFLEPELBO$}OYQb5q1#I5vS_4{p8=4;9 z57KY4Upg>8?`}R1`c|Uhcr9cqhUs>SZKk7X`Kc4XT27De5C3v=+z{CQme{OVCOL02 zZ*`Wc0hVdn_QclQScChL6aCYT>?Ri==edBCN9ZOXmi@sFVsf7N(x*HWeDJg@>Iss+ z5G1=&p!E(u$d)$l29H^ussVuiMVELXg2kBmszoQGywo(BA7n}*x9W_JN3%%@_rxK3 z2+GGU6aUT<&Be@B=IVb&-%8uRR*M5qIb4k%X|5Fxu5TsQkMiy(O#df?{37jkI*}e| zHL`nm3jV{tC3JzA=zLH)3kg5GAbCv5YYY#=fuZXRxpGF52Y<{9{|k`iF$j9qX2IKL zZtz2LL6T%g&XQ#1Ye(G~`iDUPiGNE6MahctYOx;u`N6v7{hE6md}R`D(D5kcuqO>E zs=`8bEZcFtctVpg)ijvUJW+!MQ(6aOIOQE?)Q{NTDlDc0(9&A1KoF#y_baQd#T3;r zeBbJ?S;3scO1t7tpaujw(sdh~Q*Qs3cHFQ?=@=7~Vj`&4yQZ_oqrUI)<)a(!za!T~ znj#q>%io=q8A4;H!VB~$AZ)-_-GySKFc+&qU%Z%@EYSP&uYxn|1L?wvv;o)wsuC^} z_w+I{s&1U>p8AeQ3}PG4A-yo|{CU%uoW#Dl9?M~Z<=?T0ZvjB1Y~ZFi_%-|$xg6+L z>&;L=t@-wQY?(#o!r+?iRvP40olX0od^RvobCf>IQ5TUWa7f_*b}$K-l+j5F!j(pE zylS)hOmUup3vbmUeANH9?66AGgZd@n8BoVc{tcaRN~-7uKMA?UbsYeqoBla;(W#%m zcW*aFAl+yyLK1MxUrToArBidoR#E-_n4?aZFdOZ5+T3;n%_sJ~Gd8m|hGT7VcNC&j zLAPwhMo8Y{_DbLY{i--REGJlXLE``~IjW*rM5U6(rm1`s&~#6$RkGcpn*G3mKPax? zzI-#@&&A;wEb6N3W)feE$f^FEA<|$3Fxdbp$g|jqTm)4A=}vbI0}AFsg&hO0FjZCX z)lb%KuL{rE{zSC>%*!YvKn>@L7k*M<*~jyyg-4LK4o^9vVcq?Cq+V=WddJXa^l7jTK8oQ;cw+_a6FvSU&h7S zvFL=s&qSJX*TZP@^j9=GQ-kXS|EPIFS^`E?m)rq8ME>_Qe7r;CK^x#rC-V|ldy+dO zghm2#cD<4?+6xJj(HXI5e+txO6qm|$x<8F>_(`@^Xk!5skf5!9?B@nO|Gq|H#)N*F zG}c=g*SF~|(N?tQ=F+TiG2_Ot0iRIR5CVeUVpUR(K9rH}q0%;$#8rsuh$!P#Q5x)yjc1H*1O(oGPQ z{VaXv!fmI;#DuJ~mK_}2r#bV&LnT4!^RE`ukJ7DOKamn}l<(10d!+04m>dResI>wv zb>ozDxD#Nm*Ox^JUmAR&?NxP&ayHFsjlB=RWv1U2e_>vI2*EO?MKFlJ$6gfONm|K= zF_+IILpvkre3j8zQ*YD&YTeXC~uj?=aq6_B!Jxtv=#f!1)P=hhY(_W zt--ZwMeSls&ggro68{vASkuc86W>>L`yO9%Su=v;Q76cd# zhdaf*ggIteqrKtQr4ZYmljT+%@oeP(cAWW7;XroAhd45IZu!S@Ci188{GWBDWn;H4 zf%v6Y{%wG!Ih3+VOTOo6GZ^~In^si_G47NUM$^j__$10^%_@QAsAuOAJ8(+67tB)< zhZ6I0E8XKbeQj;)?~(7J*5tE}rUzys5Nom2646eNQR+5Z_!B*r!dn@EKK-vTURMwt zVfs}4{eLkwNOS-!LoxAgVaz2jwub-`(JE=Qf!`HkM7gBb#3;PoA;diJNN$2`nYGl&CHs;p8Wtox?r*Q&YuqPnD3n#Z8UHk z?-nR`n4f3$dOa`)(3vHxzJ$MJ^FdahvIMVJOrwvD8J+s-fqPtdD=l}(-!UN=E964A z-*3e*cNdkfJc~w&&^vGBl_^UdcW-FFE2x7!qlCJss?5(%?0FRxs3Ca0T2N|vd^Pf@ z2|KGWT2i2&c;7A9M!8xRRx9HM4q95P0e`bOJ(!k8{|`w>J?tX~3As2b9##^9gs#Xw zY@~{D45Twgz0gYecB(ntQcykfowboO0<8BFV#FwB&IDZ~#efsjch{gdyv%u*?DDqw zgDGBSAy*=mFrDZ}&plaON>!|t149r%8!uRM1s%|{KeZ&-eyhk`{oEeJ4 ztQuWqWS?;-cUauupl#ol=PotDS~!T#rip8aJCgzJ_{&q#j$i30q^qXoN-nmY+gXOA zJOwZ|EhGH`Ef074Py7|fDvJ7huvq<>B7Xd&Spg|1OgDfUgKPgm?{ZG@{cn+S1umRf z1vO6e_YIPe&^U7w88$XAWd$h_`c+ml?@@ZxW}IJE z?gbrI0nVI36yl0nh+&#Zw=&<1gj2iN7RZ|Ckr!RggHE@p`wXt(z2xXr`b4e#_0)X| z&va`rjJ8iH&p&mmm<9ILe21o~s7YHtpUB}yW}#lu3$F2wbg3Y@U+Rk4Y_AVWqy;$sfW~){Ukg*&nJuIAHguh%|QTegIZVM?q!#c6hQ32gd@tv6wmyUHefc$xF)zm(m3b8&PE zPdRjFT3LmAmG9VSjQ?4h7k`BK4b-K-Bqo09 zf}y`@!9lGdSP(L6_)~M2=o-}vKDRRaU<1WZT`{(%Lg}Z0kf7r*UMcyvYG=WgSWh;X z$Pdj(!gG~~hHi0{(8MJA>Qol!p2MDJu1-6bSgb;6psuf1d~0B8UWCMWFn7&ft&3M%26WPuCmb{^1^m@U$f#_9G$bulM z=v@HTp0rmN>nKao()Dv6uVL$S8u*`h?*#QKOXU|c1cxdWc^^b3m3bQk9r$nIzq-`6 zcifjm{vbU47=+ahtN!=M++B9241|w0D-@sS-(U5Jk8LzUIh|E)Kkx=j9`$;-+Ycth z39HDGNXYzr@V3bD^05fI6zLbkDcy3fVM-?!n7pREIM>h4^gSEvH@GBc2Roc!Tc)9~aUlADtKN z7Y>@96NDRguRAe!1SC-SRzb~3xOwVl_CH!3Tl{NLMxdNOF*gkQ=`L-CY7@~gCmTcLG+FtfXPc8M4dKeCTb&PI(ZX9 zxv1w*Mi+ad^8$S(IP3V05uZ4+?$xHIz+-rLW!#$&Sw!Gcmqz=LAp0+ZpI_=vQ9pEv z&gMqwKwrFL9XsvZwQ@da#%iN^M4I66WRYkHpQG;xZv*7eip1 zh{^)ElTq;EKp8vt;gMVcQ&>}iN7nb%Q*obi_zDl)Xx}fFG`IBSNnR)=*)7rhxduqm zxo$M0Yw!*a&_<8ImmL^?6neZp3swcw^tI8m@?oE7G1f5e!vuLUrrR@UNZgtlh}r1H zF=&+*deI6_Oz^UVQc%W)$|U z>Bmo3*~4J#tDUJV?$GzFwb=;!bTl7Ce@OhU1tHAOTbbY5QxVXdTvR*8EM2=mbHhLp z_0U_{cYAh#g5b4!-Nb~xt$lDhyBe1}^JLW&c+=jrqYIW()6g3jedf~kS~9kQW69Ne zFrjQgMt{}$G1*}`sIREmLcq%@XZ`n>%HsB}Uc1|OL3_3T+xrC9VQMipjgcnn_gRLZ zvv%|Ef=x}9}pFvkn z+>=H{TiJi}N2$%M2tccZ3Y|4z2$2&4R3UK&I#*1VOBJ@sukV+Ljkk#TlkSk%=QElh zgWlCj8mrWeEVip|aB(d|_~E{C#m4rEqQ(M>`*wiS){&(P@2}2}Zw}(-y!e!P6D&bx z_#Ef>;Hf zba!HFb;4@9#NM7){_c1?jyaA&UkZt$Sl+p2Ricuo61#-7t%z_-XCVFY;wv?#{h8C) z$@M?jxBu-*y<(%N?^EISK}9^>StVfw>GP1s&`Ztj6qPD7x%#_VzoQ~y`!9z!aw7h)+w`j z8H`?E?hj4|InO-LGL|0onqS^QpeDQq|L{C-avdhro~(5Zq7^v&0y~5tiHSp7gO+T^ zHs1BHLt`5Qkd}yDeTX6P}@XxOFzQl|$b*?eM>E$CR(0%&L{;{P0izBR^pTYB+ z?{1nB1ZtNtSWC4cc+_<^f|6Kmi@mrdC?@cm6wzf|jbg)zf?u3Ncf_?W+JXmzV4Ph{OsWJSf~ zkfpatsxL!FYfM3HM)$sUbpS{B!d0pI*KDn=&B^Ve)#?P*ZApLcH+%)hAX-!E>JFkq zhfCE;3y)WA8rfQdPudP?+)=wLlhxlZ_(VFx~d}m3F=lb7UU-$k^?L`B(lvpGHd87nejAJv?ihlOQSsxRU)dpf$f;ms_qDA!zUK$`qfsdg%xW_EnF}ReCHYZgbwM@Xrk$>7b$HaeMT#J zT=T;(WghO{8`lVusX>KNB3zGACH(*mSO%GFy_a0o+7AqC%1clwZ7gnD*MLIbXEiWN z`HTJ+JrX{CmuX!jw{`n(*Pq`kF;Ev>8PKDsjJZaWB1YVi7fS9l;vc!wnJkl;vPR7t z^JMXYlX8F~G=D_OGIHL}3(in!dkg%f~W$n_MRGX)FV)$gVa1 zP}3O`w#9?K^tRFBrs!OVl`n`CLh2s^WCxfRMq28= z*ss{I=k*qlt)T=C2n{T(Z5%fvf3$--hOM>PtlcrGOeGffbGR7l+p;aoyC;-Q|C)Cq zt<|q*MI1U5^TgZNFxJgD*UMChG3 zN3iQV%-15)^WSKVS}(ykmASx?3)TX=#D zrcB?}I5#*q!Xm5R2$=h>D>Y3(4)8RL0)i}9CZ50?M_wXTdFJ|d(K7)rzHj>va3?X^ znpSC6XB$61KJcNQdz^iXKshDvSYb(2h#h6)iTb{e+Gmx4Li6CWaM4lY5{>oQb~$#% z`s6o>#Zk{17G!~M6o6NO;jx4Z&{F~>CL*Y^95SeEDq3-#QxDERve=mVAd7bj)ZT7v z&7Abo&5bK{&wkyrI*J1)%mTB;0VhR$WjWVX@SggokPASyZSUksUX+&laBjKh%1h%+ zj^79Tr<7cZAWXR*lEHzSHy{?+$Wn_0H1mpEq%4jQu1Y53ZL6KYEb=U}E;26K$jwXG zpv-Pk!He7x&Z;E~LF_Cw(`sDUnztf6tj4;dfre4G5`J?o+yc}VZ`+E7ux=?S!On3C zME5R^#Rh3fiZaIeLz^E-E1-pGZ56XsE`)Yv^~o@b6L4bq96hmLsxP%{#onC4#tSm> zDoEOx*i6zbQNs37I8=Tb?Nq?=M5a*J(L!2?{U(45@Sy+M7aRR^)dTtSid)i%vxM42 zw47&nifO19R}!#;cs|#Qb%w!kkHPz##@;G2ZBB~g9x5982eD!qi@_mAh;4HIi8``X z3@_3(I-V3FM(r$tCWbnA&p#@6bpDpSdFGGS&3E?xy1i~qRB;k(iG@mCNuHx!o-pe% z^}c>ZzOxfkIm&wxLg*RG>FeCg!5&K5wYiC89GtGM90!m0Be4o zLZAXaq7^Ow&^gT$8g3d69%_XE&wC((#s4P(%8v$8AcSNen>2t#hd|8JHnzOJkgUB@ z!Wbqgm92h+8(nv5o7-o+Ng_h1pw5Oi?o`{%JL|)2qrlkxUr-;N!Or>XvZ*otR%^rO zqe^CFW(iQvmf*ZC5odw)ak7+l$vWi!migLJn$ZBJ=6N3P^y zCh1zwOB3(>3Fk(=N_@Wrs7O&Y(Xf_I)cb^e_U!v4>N569o$udoK{OQ*PA56kT-HX^ ziWa6AM_IRLY_LN%=(Pr&8Mga6BnH8%%|rhYf_0kCJ^sY8C{P7Y40nSVIUHC6(1(O~;xGXI zcA>KX*3j?5GK6c?vz;p?7p7r_OP8I9A+2$TnLCNKJ|Ck1Fy+xI=q%#7A@NHp1> z3+B(9C>8g(qA>jD)q#pN30h{+rHB9nE?wzI{Rl+luU!@`rEJ&NTsW;mZ`&DBk?6AG z&p_yeph@0hPzyGc64Hb%<@O?la&#nnyMm zCzug8bSez77aR@?FOyFTsHwb_V{C6`iLv8!t><^ENOFv)wV%5a;Kwxexx3p#;e9l#vU>KKK6|7^@f6W-Jx{{C)Sz>BU1^Z|tvo*Iwda zN_mr*ke)KIklNUn6JBaMP^031Vn{S41TF0UTRB!zP~`LaY_g+J^c~@70c{29JfilX zkwx_>a#u1RKpoAo=RgaSPGC-=b7%4W4`8W7U=mAieUNdQ`ja^Dq(n6!V9R2;|uVQyocUXRB{V(w_uS!e8J0b!p zMPY{$5jQ7Faoh51gO-lb{@eY|1zYbCU?8Qj)4D&7BD_!7}d#H}{trgr{ zDwa2RX1|F*=)+)KuP|M7Piz&c84esc3;ALLA+U?i5}-eHr3jj$HeNTU2Ulx-j3SH- zWlO6GE}A;|bi}X-cWpLw?KNMpv|LUW;O%k^)=B>Um;i$jEkTVCbB2-F!}dE3j{5}( z?$;j`WblUcKPQMurTA&mR080nU_q8CT+=>emPh=tIa@VPAE zq#|<7*5U+t9W?RVZ%1Ozwa`#fXXWM1~$S`?8jU)Pq$hiy}C&pjDP~Lahu?TcH0R8&2&Hxzwq}G*(|I>GNK7N9f`@3i!(2a#^P3q zd^m5-U($hv2&2Q&R|jwj;;zm_lR(#gidO80dDoJ;_s~uBEON$=c_M4O52MGC>mPMs zZYrgiTUpK z7LOL6*X9TvV-Af{SOc;wCZ+N{A=~KM5o;k_W<8Iam`3U$A6JS@iLTAk?7DS zXT=!FisMTzb$w#DouE`x~Q%0rRPz%>~ zkxkyYNjlo*niOOJQK2J$6!x!`XXmD6E-nQ~-|o-K^Vqu2;l}z3yRkV~$JL8zx1MiJ z3U;cst)g66Rff!N_Za-$GnNZvVMVVH{%lByD$~^bFiYo@hEJVRuj454v5AM=JmM#D zVLQyLT}_%>Z7X7~CBIyEnd8h-(rD5j;NJ$VBrWc*^Rk7o|L1G@xQU&a@+DY10ZlZ@ zqe!iT0EJI|H-tn^od5%c2mZVAUxldX%aO65`!PKeiNeT3nq0VHD4z!L)y)kw3`Zi- zshD_gmW&jUd*}$=^g1T+Qdd%grN?E(`pm#*a%tqdrzFqfosOp=+K}bu1czK|Rq(Zc zTgmp>^Noug@MIvJkj>wE-_WkZ?w}xA=zo}AH=u%9x(45;1i(2hG*Uw6cT+PIJV9d}&(j*w?&T$`&eT-hiJ+F^F#a(S*<9^tm zD6x6InB1G+d5^?}e5X$piSIk}{y)%LOVxkq5F{u^Z}a3**RFaN2T7icL;6bd=pdMY zNTfxn3k~Hi1Zj=O=FR+HXo&&ktxd<5?)eGwEByR_JxoTBj?`TUP%NOU2uz{yTnyuO z&f3n3*`T6=H9~bNT6JBKPw?Na$7PXWQxpHu*}omv8G#;_ak*q2Wopze`7}w*wnXX2 zH+hU)gZg_WJm-Zm4u&RUr7s0yzAQ@yX6%8ev$+Bpv`^dOwUqJS00nG@>bRy#4xfJ{ z(e{XtB%yyHenA_sw-y5$Wnr%-H~(bcS}l?xCiO^hg&CnOE(gI%X| zE9$2Dck1}YnWCa6CBxNd%)`4ffF=15T;=l_>!%s5X_d|@2gp7r&p4w>qOr zsP_$|bRZLJ%d@_ddb1R*Pajng1j50Yd!QgZ;Woid3@)N7KcN6t)tGig0@0r_F>y+z zO;<>PNe#DJf+#*r(PVChPI@V^XH-6iB?pvQCu|n${4A9iJxq>K9SHXosqJ*+s~SN7 z32%hhk|9eM3-k&&{c|XIP3DkDoswc?eP@3DX6l}cp~ex5)Cq^i`%X)~qsLS}l*h3w ziwgdJ*Iam8@E<_jo_vn$kfaP{7C-Tu%IGNJESDYDWi0h1tFNmvO&*zpGZLqV{h?Px zZSAVbN#D-|&(y>MwN1u?52l?RsARog7u}|7A@7}O{@`nJxv%w5tlHsy-5hG)TjiXI z_WK2IbSdR_AWV0S&P{L&?7Dj^Z8J(YOxl;mh@%pGHwbSSR&gbgmI>}+}U&7!mTgY^S3;av6y843j zBYShiEvck#ae_~reF<|5u5XN*YE&6U9yPFy_dIf)?6-cp!WVJBUGw-^wI?rS3D!*) z1bzO`CiNa{-D~xgE5Zc#zl|fmx)faMDKsbr@ZaixRjr}#xcFrPl-u-aq>iajWRw9a z%6u7MPW%H@xx6k+LH&^D>UeKG`Ld}l_A};^+KDUY@8#_xSSe|Q~nRH&Y!M5QAKq* zSCPyrvDU_DFR_496EylaN2Z_<)JHFUgj`m8NdHnz$lm0an4XTOJlT$@32}rOw0qml z8wHu?1jVZEpKsx>fg$pwzme{2z`$=j#d)PCT{u{Vkb^>SQfY3qDPbqr6)eykn=Z6T z8uweK4{3>KJ`NB6S|ozLZyQ4xpiamVzYc?^1Al6HX3C$qR)mW|_g8B6F`=pDAc+Ou z_|AMn9>-Xx&b^Z*(3v}K(m9`@mvK70ad4$bUq<5Mr7x@OaHcFsC}uBo0PV6G`t^Pg z>W6YPWBwfO;q%_%!rZFmjw?%?wr80f`pg|mr{?30AlmUya}ar0To0Z#Nz{m3NjgUg zV4IyH_zvL23e%Rcxnp5a^sL-4-b)%ga7c-kWc|$Io##5SP92@Ag|?~o9pgxr+Wpsf zi=nU;dA9fHObW7Cn2h#U0OWR(2elKWy5ur8o3RySZ6MBZM$Nv3yt2oV;>yt2%T_4( zp1Yhn5+9zcSV`--5A|k~mV~&n-Jfzn?)vd#GoiK8j^kS3c{nAO zo5rwyMeqV1^1an6d?&vj>XqQ(SYh9f7i>`E?e^jK`}uRX-y8a9?!L$GfivbTT6p3z5%18eu$oj1i6>9KKYxh+&({g_?LXY#-cr;hH69-H%SYiqs|`SE zqbtdwQWs7p=#sKnvx?>XT<@$KRQ zO={Xl@Tkg3rJl|7`2flKOI*46i+XF-!R*;Cm@b;qej|Px_yqkl^it;`$|JrCq=z?D z+{GuZbPK@1uR^G?630E+ip1N|+$SZ1UJeguOo|LYxlLV%Dwmqt6W}}7we&nb-k3(N z+r=+RnwOVhAfRAiRf6;~AWjNw1b;B>8jl_iaq{@6kwGCYnJ$wAh@q7eW)+W^p;>=I zS+=A>Cz6OtBO*m$SynY54MyLNiwi(rDeAa|f5zFWM?WYDVzz{!%p8JUJtyR?h6U4~ z-_w(eM7RPhhZC^yg|L=B^mwA$g(@2^Rc=m~@Xrxr%Bb;*2bL^XaHe?b5jUR=PI2ZU z3wlS85cbs}=>REkIFJfe*3-GC(#LUR@a-1{xp5ndhGk@TzD1Hr<$ayG&)*b%_-)Ij zQNxYbe-B+e|DqF|C|*8VZFDK5aAn|K#X!-=G<;>rUu3&58}DT1h{5MOJ$Ayl*6>L( zp44GxB?sm?qfy6>kfked(7iSTJHOd)kX4~&~s~*NaytgC7<{=Ww`e7d%QzwSo zz*%@kZPXyZ^tvp((nZe(XYzYrKY7K+h0>lj=^tm@NAVf~E+Sr*@y|pF)CV&ZkT41N zWz>zU?U{1JnwOk?1@RPWJNe3CGEPn_iJ{DCcd!NfewDse3wx@#fAP3q{Z-el*vtUy zPAkH6i12CNwi)x!kMZR8E?=05cAwigG3yCU+`n&t59ro#-)eb`t&iUXonil?4G5fv zE1mq@TVKpNOq5W+*vE&T4fsI90r!h9I>0Y0IB+YM;47mz=Am^vx|$x3=0R8ORu^ro ztTlB5A7r(cM$qtTngv6)CSa(^`}}`Rl(9g>$Jp0ykLJr~jQ4*T4y2aDffM|2DJy(z0c_Mb0 zOT+2_^b?z?>D-9p3jSbx(-Qn2zrnWM3`pmh@BT z`JCrXY%?V(y%=}fZ{r&H(>gSS1vE7TXPCt_6V}~tgg&hpz1jv=3_Ya}M}Arp{=F4- z#a=c_j^dcaQ{qo;3)ls|FGUn(5($;-k9T$2R`3zsz}r5P%x&Zx)MroiaX8x#l=1n> z1+ZqM+kSw-TlYpDUB;ih1gj=X6ZmjC`~DKj`71>#J#$M=S0rFA7=HPn2E#6UqkKe0 z)}Pc~Mz=k`b5Ka{FXcplwCS6-9>gN?;&wj`=MdvQf`9Y-^)4AGDj1;|#6(TGwY#tBvE&EYB8Ka_TN9+hficT*V{ z%UVlUPc3B@em+QGKaoVgl19H8V?Vu^vP829_XUE=jcEYf`Alst>S_XxHqQ}4rkgVm zsY7IyNb$>9@yoLc$K9BT#|Je@BK|T17R4OCs6*1Zjwvb^(elhmDbbUVN%3^Y0k?q? zKEc~0@eW0Drz#G5#$n(fFi`emyO779+g#u=vdDw*;YWQ@vhoFb1eKZJ8i}jCIJS&# zbqB~$`|<&SqVrn->J4NW=B(|p!=!fwa3a-nD{~#X3|Au=9D(n z|5mH)28Q|!8YU}X`eqR4hYYrnie?FNLL9(rV>VRwstp?Mg34H8N-|^!I)QT7jG}`N zrI%D-)xy>7A>F^0(q09Kqm-tOj!;5@YLwsU*=(SeRu@E>P4x@uA*T6`i*;$xOqi;c z-v(hYVSgWO4{f2U|BJ7M-PH!`b6t6KR38Iu6sq&8L8FQmlv0S$Nqe9zY|EkfQZR z_IM?0lB+`<1n|}7(BAfacNtwKaI>qHYlKht8cNzQoz0-lJ=%c=q9W_0*9!G#)BH;= zKL+IK%fL+@H`duF*a4Q{3ca$HuUkKny9%N4~I)g zN>IvW7~ZC3^>E7Lp7V4(NrjFI(p_c}rwMgCLV_u5WwnK{ksJD6@%E_;u0SL`qb%kh zs>ZYL!zU7szpnjwY#u+l?%qsnlBw4Ybfz#EarghX-q z)*h+_AIKX0mV09QlW;mmE>G`Mx!g&qEv^4`l{~q&HaT}xFE6fO_ubOt$7NQ@RD#6@ zHI@^lbv*u?KG$@7e0UEU)C5L)cD%RO9SJ3GtiAD`4+lqlO=`lyGVq@QZx4g%lEjgA zwT=_p;Kdh-Q!5EZbjt`sFhFISzD|kbt%ozb4}QHY8*b*W7!EOZV_w{hW-+kfak62# zzu>7MwhxeafjKb_a2s)B4Cn3)mKuO|w+K5~ubVXXK=%hGvWaXtg8?mCbeew^{<*3M zR^|lyi&pDRXqY24L1+(1JQ z_~pbWiflW!e}KSIE9V`}$fD$u;L332^dSgxR2%*>?7pU$g^uyE~hz536s*O z#UA0CFip3$ekm99wR>N;=*me~W))MS#s{GVMF3yaB<(fpLMreh_dtL9EQg}ioT>Br zbH9b@0wR8d3LYse)6)59kCFE5O%4WQaXPt?!?L$2L!%?FDuvJw!+za;f=i9F59P6* zgX155gPrMW=*ZFdiV8QZ6}ug49%KDr?d{Kq%+KtUe8_SK^clEZii*}B_#5a`kBCBV zXQm7o_kpn5=*|EEQ&)@5!SMOWA7d}SU@;`}`#r4IJ@Kzm%++((Fg|!MiF#jZ9xGJZ z={1Jg%hHgo39S0XTZ+f~rC}QSFzQ!y$%jSl`o^N}&2v!AXC6_Wp-7IiDag%lf`=Eb z&ADjiTq?UMFy3Y1zfc=cgRAthD3@Rc2KW1h|9cWa{m-razexld5luJgYdd5@m>N(I z@xKr-xYP`MP$J;J)&FW)`_ple8~u|Y;wQ;5tmr?Gm*oX6l4mksbq5eRnsx|J%}MyL*qFU;bpvvXbreBK$5cLKpVM|5}ut zA_s8I3Aj6`w+*OBCAPMlZ^TQi{ zdAHW-HK=1*Pf|!)ZS`vMH)fgzQVKQ>vrp)O;?625)3lx-GC*-^cNCeZRFmK|YonfM zgZ9iJai+OVqvH0M;$Y_o;}oKc!NLDt^aMU9Vg80h=7_MynsTI0TQ(-aVV0%S=O!ek z5J}09)3Y+$2{R%zBKDj4Z9&qLJwvqHt=H9U)Fb3H67l6YYKL7}Ma@_^AF2lXyX{CM zcThzw)`ZI`dr%Ah0@)saq z8!v6ecO$L2vEY{-%KtftaC^))so_({Z5qx{!Y@G9h8nhP7&V;)o#g7Bzw9d0ij?Ef z5TYWX!_74TMOm_tL;!cW-NP1$l8#Fc~`{Tlu|4hkt8|54z*>)@GC z=TQ`r$|3x-I}f^fYuaTEHuAY5Iu#h~6h=J>%85X0$ivq^qqbTt7b#XRa{$m%c7Lj} zKn^A6^Ry8Qfy+ixR+?1}1gG#fj^0fXu39hDK-{6-+)G~ur+|60e5Y`(=^LNtolzaN zzEiPZu602P6-B-iv9CXIm4sLvvcKtE6#}BsawCyW-E891co_X9khX%^f*#BTRRWvq!gCXu`7lN=J39lqJJ1PhB z|K}YCstIqj2Ih?7mMdkPL_O1|9uIG1jm>`x?V2=E#t4x>>>d#|OByt8Id1eVYY#bj zjJ@LfadMq8;rEuHT@RDc(_;X`^E=34!kA6|Rs3#|)FWO0nay+kqGt`o9~*h^xQ90O zes4Lvt5lgyE&C+)QHu&gh^k`=wj8X)(3$s*K>EOjZ~a8rF|z1R3@;EfF4<%eVuzwLb?9*? zQjj9bj$_(qrrD&H9{JII#O>`&e;G0lKO7Pb7n!+YQ*tew(}ng@kKKMXmukOqCK=@6 z$m>vqX2~o6D}l)SX$An>C!&&vnydlBB9LfX?al!M=5AZZ zOiKi0I4m`l9$Je#5<90R^e;BcphJiHQKmVolR=}*L^`A5rFyqNRdT{9JA#G{eOjRL z+%vm=-Q6M1$ReE;@=qYv-OlHS<6Y@SxSLGw*ZkhmE`dz)RP@``!oYcT+i}lDw{zCu zFRSj3SuvB7V-+xMN}2YszEXgGg79H2CZ!YCpnvYaH*NhZB z8$V>+xoo!|1yPHsKx%TPA37C}AxVrXf)83Ue`lR%(XJC^MX@Dl_s=WjM>ovZm2F|f858Z`ufJC@odzBirSESi2!<^Nu@V=YRyFU`j{WOAL}{3jqQ#%~jU z&-sAGbm@~+6_l$rRe>QKE0v4g$`{*he;u*v13CISUzmT91!dN`3hZ18Tt4OwtYW=? zLvJ#Fgu&2`1H{)^rK_Y_;+jVTGqD8k3qTNVE=zzq=QnUi(6d-X{BK zJhLRDjIpIAQh-tcs+MC?LjG-!+9kX)+GgPW(B?T$PWN{qG!nHcu)fL@mwbZO45rFf zEk|haR1r#?jV`3?@Mxl;=VeAQ%>_hNe3p9F$bT%#HP@XILfgH~-j%efG^7Z5|J_N< z<}0Q-^*4)km?==X7)I2D<#@TS;HmbXh4mo45!j zj178@k#StQtma-7oFOc!vYXK!rYY3Sr!04lv(mR1Zy^QiP?eevU3 zLZ#hIWV#n%fq=o>^362Lg#I=A7yB&R+dzQuuf}8@Vmt<8!XFcVE+T7H8j_FKhB;mN z2#2j8Kk9z?PX4exQP3!j}9Ng)PE~aD^C6%{F`KSnH z-@&v5=5Y(21ua3pjy7id9d{6IuA#?X_8sbwl+p+zMOyq3M^vChAph*U{R(Klu2!yl z`=qI}Z=&j|keox_YrNH9UyorQ)I}pjFGPget1;%XW0MOM9OF)A3(w$jvD>*NRN37k zR6ik4Of(XpV`)y+yT$D%a*x?wiw+dR#@bW_)@YRf&6&lH4prw0CFkqIquyJ7gVEX! zuu$PEb@-mkxvVfsI>4~JEW;yT#|{%7k+Z*vn}15~N4nLhc6tKYiFb#K$z7GSp-3Dv zo-6Sdd1~~@bT~}v!D#}cgneaa4X8Ho>bS{?{LwA^ z3B`zPW38&Ssj$%;07dS;(lHGulVZXFACPPnQB4Y)^!9!8?V2yaTf5}|^X4}(=lFrg zu7D?hMxym$NwieSgP$aL2dnpcobPKW8E-G?mFB*xt0O5h7RP=Eyb0yX7GDLjSXj)LYwT}*6SxphTZP7f zr=-WE!(6U${&dp#%vhY!wDh@mKHuC_QC~R=Z>mFdV(;>p*u_jCBhUqPN z<-`TIbCv%#qVdhK}>N!9NJaDeBzJrwtWcTIV4 zy1$QbbL~C0c#bDOPBt#=R?6B1%;HB+d^jUZjIGFqEdtO^zrB4#inH6TTP@u;-`yUa z1V`dP;C(;$#+4A)NfV>i<_!wpa}`wh!;^Y3tCg@IeXT{MUK7h;^l>k<+ZT%05MB&< zmQU+3_mt7@$6QPX91$(049vJ@K-yHBOaE*Ek%a>%Cuy?XBI9IH!1^ts&HAg{i6Ss0 zM?lPGWBA2?(uF1BfSGOaCxuG>+sF+4mCSDP!K|G%{5r+o;xwPJaR-Zz&_6R6?V&6v zF}&c2_@Gh*peI+)|MuI$y(Ek==}>Vc+sBltRVuf&U54lx0m-4iE8shE${xgLF_9gO zl4k3j5L1QU=yZvi1@g-qZdV2B?2ZQ|5psxKt4%nP>;lmh%8*Z`j*A08{sQ?eQ>`W+ z1m^y6m~b4+$hRulrlR`He3+qHh)1J@9L|^O;&|O^mU1OMyO$VsYau3y3k8P(#ADC; z@I5*eImxf7Kvc!w0E>}glcnaHutgyIAZl~(cKznr!t-`T@?~KAc3r4+Ilt}Xj}=iLX{E%xAHa4<{=2TO4Xz_+hxu0+pvnv(0B+kPf#T{q>J zo|V5&?5>3jrlPelVBdxf%d!0_q7cz$<0Yuu*kiX>GAjbF z^jx4Rl^D;-@Ny2G;&w)>3_9vCpILbF!pNU$cUGy*RHgwoT%nay9~_W9U1T@Zo)aMa ziPXdnAS5C=Y_ zTmM?z@ap&;Uw*GsqVjNUq^AzQJ)m}4I658eRg7|}TskJ*t=lZIY{9{fQL1M#F!23u zMST`KBNH)G8yv+_Xk&$}GZo_eK*F?2A0iPMD43xXZ)_ntoCtsoTo#_<$f#@vhy)@N z!8qD!OmwHJt!oc#zWwSP$<(E;393L@M_;%1dX%-$e7KfKr@c$4KGG64(Mc$e$f^(L zWHop7tmMa0%ltdo<6=u!B}J;HJLM1JHl6&QD7yk~l(_MTDIf$EC6F@2pWm@BXy*_H zn1FIg^?LSK@BEQdNHA>Xi({p_p}dF4l{8>;JmV5pm{7abwK;O8_ncUyFY&}n)B%uU z343i=D`FIJbUB^pc=LC?&n}Bz*$pEqPLv^P!&o6EX&$0oQgW0j3S_JJMRoP)O6D^N zT?y;rK*iR-qtBqL;ncpAk|w&`^}SmId*nszoI9Cemn|w`dI=pMtk&ywHq&l<3tAQJ zS!qixDELPBlgsN&#~|bYkDxM@ zSrr`5q+VldZyzYAng>viTM&m{8*QoC+^1!ulC5pScx2tC0I36w6q>3A{5@U zm>EVgAjQMPwXuH|P}2z%qd_dt&{)N=VT&%c1T)MKr1=rRVy6g5nWZ_zSNjV9VGVlg zPqJ2T5fg|~;?3&Ke1#m>&rHmC<+6PibgG^t4Oysl0ea=w)R^2`LFU>s-Qw zKJOLBJaXCY`?tMf<1=eiO_gy`WmMRUR`>r8SLYO+S8rsWx?iQW3QZ0x!^YE z`x-#@8D}}GfMgcES$@LvNk`6m9}gI9>QWybg-HU4H zDPaiE`1_^0ygjJy6S9se6aoQSCLip#J2Bta>w?>NvP-#1IGXb?1q|Rv@tMTd zK7avF9E(eRPeRK_YGat@%)e;Jibbb)Zj0T9PGYOo`3&Njr{w1IxjNX0d258LYA5uY z+NV*VET>b7+l6{rj(ySMo+h}~cXhks__h~XpTX-5&O0EJ&Dz#p=z05ux5)k)Ve`i? zN%B7YV(ughqVQBLkieXLWB@sw1uFpJVA7$7=W(WW4Q>8sX?zWMkvV9+UMQ*&=$MGA*N|+A3!I?YON28IE3mPXXW@g|A63?(H9T z0_FzOGr!bx@D*N44a%RoUk!>$smL6MMFJ-L*H;fxHgDS*#GoUK90Hn+N=yjZCSBgX z_`-biQ9E{vQk>)ovOBV$YKs^1sJ0x>&lPj>C8lZ817xQ2T^CyAOG|D{B6vy+CGXB~ zFkA6;?j@nO^t%pQ1WR?#vyW;o@KEo|bF`wdu?B^+7od?x;49Qs)J4>0x|AaW ztiPmO)hbhk_EU&Z;7;5R5hQw!_T0nbRVkfX^hUwvU4rIjYiU63cmBBtR9KcI{$y{a z8Rp8sA@17(*Fz(17nmi+xvzq~%X2v_8A0{IQJ6_xSO4lVdjn8^SpV_$zIb0PI@T_y z5EVo;Dt2y$)c=%}FX__fmZ?m~8NJ{LH}iQ0(Q@-d{}9w&nyse4-gnyR<^v9U4$pb&4Deci zy=i#|4#n@>jNN=bfLQ}DMWM~;Vv9?U;_wev4N1ci^(ycdvy)@>bfL~-tEqFn{U0-i zA#$=GZ>k>~hz>As>Lwe=Z;XKV z@bvL$4Ku`}=LynjJ`N*+qG)@7R_vxvWkecJf=rkxQGGQ^;<30tudV-O;@`MQPgua= zWfJ{LRxFOG=XZ=(dG9s1)hLFf2#s;Oq=s#uY`2wOzonqkZ}K+_4u%@Ta8nhVWkv(z zNGl3qvZH!;Q|78gALui_r87R(voGB)?W-*lYbAYIT1|ZMmc^ujaXw?hO^b95TK7>u z#5~~`M_M*3c$^3(4OAXVQ&DXQR13hNE?$28tu}okudR}mYW)J{3*HB=8e<|jRgoNM zw;h>K=D7`KjWdj&Ej}V&z-V_8uP>-$aWAW;TInQQG7Jc-jeX~=eOZHpVpmnR7;AaE zg5M+5N!>{*Nba?oWw2k3wcdItqD3}muz);AKpuzd-QOAqk-8uuNldNFV>1a1o&~RCf!ntSG9&6n4uJxv+E#yhZ_sJ9lgPdI!~c%v5(OG406e94%6<0uoJa zLwc@}cQz&5k#&KE!god0lw=PaL-Ved#d{1FP%ZpFdk=1>5whjZ<202^4pM?sHyT5g zl9$rz^g3?A>U;`Yj-i|Ig?xa{uy4G*WWG;KD5+-1|y90+{>(sC;`A z`1npi4Z7l+08%1JcH*%dw7N&%DD!5n^V9zkrW%yrhl9kAO^6Bne|uuaztB@%xIs_> z|JnWT14U)dZtcfBTe}FTi(BGQK0{u%()vw5K^AS99LH4;5k!Mx*Gt1O>e>%|xNXke zD**nKz|lQ&oZ~g)BB3_E7$%hPN7o_Pvn}z!ySV^4g*WHx2!$Y8W=_cROUQ||OjJ^C zK?qCrAkUdNs-uk=lcmsLm|E@?Fh5Ig1h1sMY`_s!2Y1~V_NTfxNvePjFKqXm`u5s( z{_l=)>m1Hn7sEzVZEaTBfk2Y3g{&usP_#*9zDh0(>#wD-IGTI!=Lg3xg)US_p?nZa z3#LOy5dI)G0zvTn!=7#_h9OJ3B8DHIc#m)1qkq{TSro4Ce(c2}kAM0bK*JAL5Cvi` z2beRW!>@^!Nk~cBKJnBMn92o~u%lhjm%DiV-Y`w6TjPL!P$t+FYBRIJYSBTJ6Ih$@ zSTzgL;Z`BSp(M>MO*1szElm|9CF4=LEYoXHGn%LJJWJkP&XM&kc1JJ|j$PrMX?TnA z2-kRvQBAzN!vzsHFmN{?Kyniy@>4SA&h}eHAR^0u|N3Rb#QFs4BNWP^M!Q9j#hKdX z8(yETSFi>e_sPY13%=8P^4SC~J@wux$O{Iu{yAZgu=&c( zfgLNWW>+9*Q==ndmU}T`I>{S0_f3!M<0i`p9EPswyfrgv>Xh@=tbSH_&1Dk(tq~yt z?AkJNYvBmOEA{#c8Qhg`xNIqke~S&@ZXcr4J8FOA1<$9o%YwI5ibh7?!Vo%`>iyZV z@drVR47>C@ySeGJhcb`(3*Gtg{}gYbJih!>FL*&L0368Q0RK<;wW_(%vWn*Hj@T&= z|G_c6MhoOZIj`1p7+BF1+~$U&gc z-@?szz(-j&t7oC2H1=g`%D?vqC!`15b)M&|s`f*%_qA@{D_S9I%-`{7SNhiP_|e?L z>{rA-JF6N7KbR~UdpvSCxwyMQ?G26;frn`(;(=_z3Nq{2jZ6)>vi)ODU#*eA&$Kr| zglk*3l5YpQb{Nk3CU#*1A(7YNoK3D9eUaa1fXGqT2ZXp&@CL4FBI|B|Pc^H6pAE;w z(Q$7Cx_@OBtJu?HDm~S!wD`zv6ckxg4Po`FH_yi{1Wp$pyXOs3$XQ-KrI%y)wIwwB z3;$Oy#mojGiMf`Qvvp{O5m+O53PN+rvOP4&Z#kVdIgEsk55rrylLRM9-$atk zNCF^W>7OZ$MpjNXA!#XL7UnUJB4j%BT9J-sDi9Zib=l9oyFF)BAG06M(y)m1NM5mV zLGeC<_%&V3uMlfaA?aZ^mD`j@FL>wt>urcERzyYJ+ z9fvxZvMeW?R41>vtx)opiLAtw@hpoL?Of9Ww~=Q1bRbi!#5Vp!drn6@noaI`Ag*op zDG(Uu^6~gEOWl{AhT%h}Ih_!ux|NhYy5d3mB_3g~13wv*g23tH9;0NW3v`6bpb-T4 z5PX8sZZ&VTXHgU`{Ow4%+jU7afT^%ovY}iN0|pbGnBS4ZsHV}0;aj-EU%ckrzh)JW z)=VBP*%c>xQ(goA6{!1w-ZHNM5!lFZ_#b><ym44Rx@TqQ3xflxN7DCG(ibVX1hDewI7Cnl zoLxdeQIhmj07lRMbV@_?)-8i8O?sy&Izm&Iy^*aw2t%1iNeugN{SR$gXXlhhF~=@M z7%)k!yu$^#zeB7dzOr&3fMA2{c0F#N)``IZmUCDhOIS!yvQvVjKtPe&@}Io-K-v<& z6M4(;eI#O;0oQ@yVrXQg>0X?fvU5ZaV$i%sJVcu20py2CiDC)~RC7Y%!C7@E{fM0R!Esq5_R#4m7 zU)XQ4CAXiVSxqR}TQSIXt9(3sOai7K3gy^q_1QH>mQ;CyY)7ANrQ+(P`}=~FkgfTR zf7x_@JxzwJroL0+{&+!RPn|t+W{Q;;PTiT;|K3Ru=mwKmXQ!EeE#s;Hzd0%@;Q5eZ zWe>A$JI*xX@@ves1NshkJ`G@Tz39uroau-wB$xvGiB3*l{7|76Ol(jZsu5w?*u!o= z#I*HaP);!I$)L%RH&_&vM-h=u2{F=O6H5LSPyM1~(kFLr32Cjs1L94MRaD}Vcr5_u zbYUFN^&>P@Q`-AY%^V&eIw>rLg)jrvyOe2q#N=Inv)m~k4A_1?>OKxwlpM@LEb=6Y z&0hEgmV(fyE^?^B_sIhlwOV!e;AB_7qB2#95hW^5nN17~((SES5my4Xx5Jh5YH86w zIaj~AN`*1x^mb` zG&N%^6L6+BX$_I2%GxG*qD14x&ptun-ijp1j*BcR2Yi$?X?sR;jwIhxGwzko{gIsf z;b;>&9<{vBais`bMn zthY!%hLD;zA9@g(QCY`%=!JW`IRU0cdJ7r??7dN-VU&D4T!JMjB>IR%Y4z z_K!XUaj5cSgHXCdC*BK701*Q1wqU`}aoXHR9K+#2`+S6T+hT$( zdkf|8?MK249g`>1Z^;~E>zN^~%GK;hi4`lY&8IG`4B<>ZZi zKoUbZe}+s9ga~qS1rCst!(PsFB^DCUqt5Rtg{nN8D*Wa~sz z2olGU1g2Sc!92!AF|VpoydJ8x*muGjOp{buNs)MZ#fBsjEG-FOloIrE=#yr6$2S9x z$QOu%T&@Ge4F+g*vnEJnZdo|f5?jy#06fX1*Psy!b$}f{eO7uEjAeMBpux;Uq_aAP z$GL~EC2&KDsuoD}JWv32DFAWb@iJms#_3be7AH-$gajl*+{Mu$}DMYn8V39zc z>tWzo2s^!RrW}KUszh`QzO{s9rFC9et$8S>syFN}kS&CG`8L)r_=n#Cxx7Gr!b8q@ zvco>eRLQTqsHNbRs#Ns;SO4J9(O)d|ElQS>=n-Hc*g}9Kk`=1lAd^AVC#|(}Uv!Y#>#jz7^OD%_f!~VZ`cB$}83d8; zyJ9CabP6bU-R!y8S4E5}&vs!33H~w&l815_W}K2OBu;N}7aWC2ydyAlpDS2L9kq8G z?WdI@5HLKdDT1uvL;^I*fIN0>H3B6<Hh9lWLg5wVOoP4G=9qT<2h7- zJK9WUxVHO!q>FU4$;EJ8 zn+Xgb`>0e2(oIdUO}PPHGJS$^1eSiA6W+3KB-I)dj_}FR8}G z3v3VK5qXL|t-&;ty3JfKoQ=ebG;GF@1NvJGk8%`{b%V$Fdy;rh2#zX()qqq7Os=Ko z7ON&BTzD*JQ(VtZBp+oqxo>j!x*Awpz!KF_)v#DS5le00s{Sy-SS$qBQo$oL^#nM5 z{7NaU@B}D|xq?9HLRn$UDHgTenH)dJEe#CgFokf+4Of?-77h z$%0ualrE80k772x!0xrO5f>V3?}*k{=tuGUR8_ePOWtKv{&bjN-iNiGYh!?Q&WL=;R`q+o;Zkb68V^nD!t>d3cXh^fK^vOd zhYYw|PuW_hsW#tT=c%>{c&fllOE;^K*fc=Su+{^=^@5j3$pOljnxC4m7jrv&7S#!< zsFtS5?Pd~0O?XSJx97o=qr9pya6FG)1LJGAB7^5arAHXP>izP;>eECrA=TlIsda?f z%P~=h2EsQnbl_m5fn77j9zhx(RH#2?3z;Fg%U4v7g4E4=q3}ID54m<-62oJm6&}E9 z!}vwa2krOlx{W1mk2C~)8ARkA-2Ra0UKsneR!^1ynLb2f&C4}m^%4uG>A9Og`Yn3CC}l~~c`DZ$-%h;>b?`m;_^TT=CgpY`7H@5SY9Krp;s z`28Qj9nitScZi>Ou9{Z80JiTtY5uxi5t$^p%Fj2=%J-_x;2Hh(Oa1kkWd2@nmk=|9 zcOR>iH%O} zqX%J61vmSFa1_adkb$twrB2F&5CV#2uLmgU(>7Nv3g>s?Gb=P!oPZG} zX%f{k5kzXIZ(9a#lugP_Ck8m>c02O2d8xvnu~b>{{u59T#R_Sq23da+;Kfu<43b7* zni6 zB%5--gjqtxTCY%MGepMXNVQK8yV?esPB^Hg(S&>dp)d#l-w}%aBO6Zzp>nhd%C8ETB}@RC6%-=#iz zpj z>>LoLRV{LuNZ!SmXlwhpLq}MRUcQ3ngjHC!)SDedhQiv??PB{U^C6E;EH1a-osak@ z8Ia#{Y>f62Te^%aUuwfa20qTBh*oavD4T9S?bUahZfC`-A!Xyv#X6F!SBrRxOOxuE zg~-Bo3v)a_JrIzVFl^70V^ID8x>BXCR`W44$se{byplbkhI8DVHBb@_uQABzL7B>w z;uR2lJ31bl{|Nq9EHJ7T%D%*n^h2l{XwaJwjAckNBdAd`D+@2{XE_J+iBQ5HUW*CM@xG7Z42t(tS`;0#Bky$ z{id0#WsZhZcCqetvQ&iI9>OUlkcv#|qr`iH?tr%uZl8SZM*jF_=T`umc8Vq&1hoaN zkK^3SzZJm9!B;(t_I*u4Bt?e#Bq7P>Qcy5N$^EyvWot=mYP_}%A3Zi2`kl2_9DRVF zF&;`%z(nWW8qTEIwtieNxUA@)?_#r!0T04%^i^pW6?OVlj-)Je1^)BRx`REWYym?9 z0XQv)6H*Hs66F*TTsnyER+s^N5zQ3#_tA&ruqi;vx)=o~!(YgnV?tSmIol|O1$8({ z2K2AFTAnBdTKL5#14e!_`Fh4!E%Ck;^w?Yc>IElR!=^LBOipjG;-^6C37hT5FZ-YL zDL0Z(##M6d=%edvEbi+J?wgnT)sK}8G5|2Pws;O|I3JRfMVRY&alfQzO`wR5GTLk; zttc+RiHRsasQW-CAJ4AY z`0HbmM8=E9^T3!OIo>FI-h0@HG)&6SC49+%c-s65CoOp4Iz(l`^j29ye*5fZL}1pMQ1xHL^_P( zl=wSw)Rm@SB!#+RauWap-aR#yHDuH&Q+8g=@6^0U4jJ7ESq|0Wq$o9RO8``PI zlr@SjEqq3`9<TV@_E%N~qxM8R5-gH1U}v7FBA=Lu^LW zM17J&Gr54a`>Jqm<9CZZU=C=@k5V-iiN@mkvNk*LPSB;VgXL{8T@+ z(B;{Ox=FH3sgr;d%Q~B&U>!Ujfj%f~1Sflz)Xf^jKP@J0Ze(6Rt3~sG4%0Pcw`pC@ zeKQq~L}Y^DHttIw_Uw@bOymD(UZmh zq&})ST`lg;DDVE&u(?yxw`kcO$a8fY<4z4r;TrapWb&QpsY>EaVzhbsI|tM)&)dc! z#Rjoit4#5N%Uv8Z`IXuzrdJRByScbcZR>6Vcja;9sU6UoN$h@E(k$^B&x*n6R`Z@G z@rYtw2c!0`Q#^Hl-vVL>E*`D*IiY!ZSLJJ|Uwigg`3C-G#%=i#l_Vki(^o+bc6<-s zd8uWH0~>e<<7H|33{mLCdwD8I?D_w#Cip)o-seB|B9x!(0FnQW{#)9aTcwWEgV3d( z{X851z(9!qJ^W95?>`s+vwnO?)<1X-UxWw#FaoRJI;7KD<5+hJe-)WpkmlLwi!o(6 z$;X3iNQN}E-?queB()Nqz3OPaw|$;{+{l%x&{_*rNPNrF#ZY+0NxXbZpxID{0gd2s zcKMd&a9#yUFlP!8ih5L)(ok#8fPIrFafH}`#2E6?Eu^+UMw0-P#i^E;=I;1Ida_aj zj>K8nI4$XRFL7$MM*c;cAT5P5LCp->bgf=DLmG-%#f$MQXC@iOR3WIyImj+e0eV?m z%?8dfoz2C4ec^GrMTEKu#K=1GlYNR+W&-)SmmOh6#D3f^YO`fDi>u#8fFA|-+sn1S zI!sblQoV{?C}HZ)0xb2mWyH6Zzr-nzTelv{zC+4g?l-JG#bU#PFg-vK0 zXRG>gLP^I45)OXM9%OfbrQE_IxEQ?c$WQ_=^>n)4U#ZW=GDe>Kc0cBV)%Tmxyv+7p z1XQq8!(0%qR2}nQNU1McKQ^`h?Ea5DbbsW5>hr(yz*(Bs8pgUq{I5J3SpOrBcF82D zRf&cLg#XH8t?Km6K>H=f>x%PPFJ82|4Xv2y)_8y=W5UZX?$3=WOvWL&=^a`7m`np;=A@3;M?xsUH_58b`FFN@+xeoUDR++C)wyOi5lr zo8x_>D!Ep42kHiE1n~++6q?NV@rYUnAq)l}UY+PNDy!$Un}^MvQbPA|ZXS&=mR12O z4tVRS4ZQ`wi$$GSaXq!)@r$!!7nS-Me1=uHM;FvC)}>-0Kkbo6-18$D+WTc|AQP#v zfU%V)tvGN78Bc6jJ{dC@!0+-J?vwLMpg}$e0$SL)cXHgYW>v0Ndcvbnpe}z(GAr>! z7ZOOWMHa;RADmJ@PPR+wQ$&$#ss#Y)%FeB4l%!1U$am8L^XmG|EWswQA_DGOxIQ*d z#)&Q7^GXPa(d;nniazr!$(z9YLskj?=233;Ay!r^=UM4$sh;QD1l`6h(*#|k)5B78 z@pq!N;%YiWe+m}sm9OVEH+)gAQe)nEw*$KdsBYuGyy^cPoBi+9EZmQuu}{RPksJXC zC{Fr+_*#E7K+sZW%zq*L_d60N{XYWv&yD}ALmX@Sb&fkP|1StVf~w-k0xhe?P8Ye> zQBrWWP*?0GK_q(v%nDg@DbumM0~X7SZ{LAX3Z()Qa);V3ZGw7I2M&7pP-fxrC!2J+ z2o7o6<0mSjlND%$gp&yj`k~y|!m-j5oONyHJyQ}utli(BK|F!tc=oaR023&(*OYxa z8vegsfwg|VxSG4Gn%kGUV(Rg&G<$7h~(9>udNT`_R zoxHXrMW!9%pT%NFZoN`u7=dNTMDA@O5;qD{?F)v8I z9vZd)KGF;#Dv@76bN&P@75WGjWPUK-^@K0D;{p1vxBl|ejOlv4nj6e=haaot#9RA6 z9mWk$)AkJ|6rGH6MT+b9tX*jT6d6U8-}3ka%wwEdpC6!_{XmC6c8F#!jVDC4&AMB3 ziZEvv$QzCoGcXjn`dl55j_E*}>5n;R9b2yfcpC6=9ZrhZ2LU@4Yk}0|y58UlTYLi& zaKB0kFoGdAQp{zM6@(1)6$m5k&^+M%)N^;ub){UlcJ>0AA88`;>>sIykwp7Ub1#ON z*K>e82~y}W(qt%pL3}=-7{!w3oLqCDAVd+j8-geWJgj5u)6O&Kl7)N6(H&pI{2d(t zbbG7x8sP4cbSUP;n`ZP2gfvo&)q8U-Irwv-OXX_H-0eM6q%V1rYPQUB@2QN4$Yv3C zpsZP`CkraG{xCQKO@QCtmbP^%bBefH`W!EN9p-+wVvb*pY7XrUHkg@AmMmbFETqYn z-iCg<0WR>xDdkv>3~eyKaS*V#7=;G_6mM??{oho3bI#+R;o%ThqQei!X_~-EagQDh2y2b#yRKZmC#FSGhkq*dJ9I zova9J;ob>T7zBHS(~%seFSH$XF@}b?3w5S6{V86&;JBL*dML*6gLGPmZ@}L-sr{-< zg)?T3bGjt=Z(MZ~N7MN(Cpn4$9F_IbJnbe~uT(d9&k&H>>jGqxGJjZV#FiKarJ_vK zISC{b%7S>J%OWnyRmwHN`oJ%_Vs(q*2dMN)XF*fh8$-~)2ZYHuIxY-#WnovnD@p7O z3}|l+{#z{_Ht`VU#pqgTfB> zfE|%0hmp|IJvA-e$?ISir08i|F4h^wTe*;t+TK((2~4lXC;?c(PN5U9if@PtpdDYY z%w2SM%QW13h9=Yr=)YX+?>D7E@dC_jj=H~uo)yP@b;->Zvrd1nq&=-j|MAq*$zu@l zfiU7+)wM_b$}!1}H$s;J@Ys#J-aLZQQ^y{Wzr23|a3n#8Z~4+9ueI3; z8)~+V5)_7lrj?ik3Jx1EKU#yNZ*47qL#moc`#qusc4d&`ZG<9bah9m5oJ_SmXuYQ^ zBVnPzTWPS$S~ZzVzXv8fDV(x`^kssTvP%-}aY2<%p^OhLgP(x?o4EL;g04~D8!>dwm>9V-RcK| zX!Nz?gCxtB9cK~H9)L=1NC$S0)M-6|mCN@k@#jHOpc*<5o&j!cpE6e20?BMLf}yEO z;W;`F2Ys}Cap$JFK~4rNMVWJTf?W8isGSNDw%>$060H&*&od9FTBD!uQ zO*eQ-o1oeWM0dYx%ediVHnf`XWtLW&m8#1_qk*&jP%Dw}QG!l{v+;}F%2Di{hX{g5 zY0c5DD~7bg)r?fa6C*CO0Q-ei+KrxmN96Q7Eu)zTVEnL4{Fd`;(a4mnw5v@`+JO z179lwu=CVg!0Iq|BaC(Oy%y?x^V{?4mHuNhwQr_##tq=}Ix%rPEtUJ;B}6f`A2VTL zH5pj$P&oe5wbJxuV+s$JXQ=Ade)fLbl@eg+AISP#q~>X|j@#m6(`-|s`Sq_>K6j-# zd&cY1OS8NCzS(j6yo%q^r{&Q_eVNSbn&59V;AG3tbSHCtkI95K8)Yo(gu%zR39rqP zbI)bzgXsOQTHSzk{W6VQ9}}&7REJD4-ULKnBxD03(%3D+y2sm~!%|$!fX&NMF6qQY zYrp_7GKL$^IVvY!b48Y@YJUDGO#tSSUwP@L9b?gyri&u$YEn{M!#J=;)u{F6i9O*N zU}0~lts=r&Ru#ROBnZMA4cT~9Z~tVY)L1gEUztKN&yQ`Ile}* zFtJ~y6J&o`z*A)oQKw2&_^eMx7@=D{xyivH>o7yfonaV-73IExIn#AkTUo8zEwDNT zs76pUcGKdq34Ow0b0GAMK=0JQt?nVZWoxs9bC9uY^sQSc#zC?I} zB_K=vh^WKj3YS0a}r$Tc36KHnIsf}m@Wm=s7G*j?)SpmV`-!8QtM4$tqUQ;d(XNT=y`HUa&u- zI&)suRY9vQ&lOgMuW?1Q3mCz$3+NHs4e2}=PnA6h-|wOdh6oONDvTd@nmA!EQulUu z0D@Dn1`tYc?Ts`l;u-j&dxIa}6RUPgsbT}ODZ*Lj;FNk+#}^i>VZ|sEieoP#$mXl7 z1SEUbhf}kKW_;;~vK)>r^&2#BPh*)p+v0iBJkio^(rG=Q#{6;eJe7v6tS?wf8deZe zRB!eu^mEii2R@3F^hlOltltb9yOA(wgz8ik0D$^8!K*}8{Z2v#G!ddnk3$zxEpF<- zn{Dx?=!UYe9~oKnipc*V@(e;5REd#XyU-w)D9(A^pfL^2A^0q5pcqjMCK<3N4(C~V z6t;l`i-rTflK54oCXG+v17WRTXJXlCmbbl(GADT1jqU*VuIn2r5`)z)b1961Fk#dW0xGX7lqRW+gfpd9e@!^}Z~< z%{pZAG-Ev5f>h&XE1ddpnheqY^>}d#20$lY#Anf0r;ZiE(z7!D?cYPr^$u$KXcTwI zM86r(a4EeIDs{iUu3F1`cwit(Mll8ky1z0OD0=7+=K1@ORGTJdQdqgW3lc{1@{j|P z-2-|wS1C9}X0?^9A zp7Z71sLm|!bBQ*(Akc|>RxP~xmd8$_-qq+HyC1F693>SgQ`${5XPGz3{D5W|(nqCf zmhyE4&z+@Q&Ob5o!7-az*5*gbh5-#K3kN>1gv7UO%W2OkntAr_u<)T} zkOz@YFdYXgs6!BR0GE*1;Gcc62B4nXII*BQvBi}|=@Agt3<3B-7b_MzE)%{5+C0Jp zsXqO#cBH0G#>AppJQ94r+0btS5Uqhuq4s*pET6(DlTlG&)`wY|PXe4w?BJ9rYQX-|M)xsZXwG(R`8Q6mB5+2+tY z2^M;YEtprTu#g)ScC})722fJ`hDDg78uAtwt+ZF+)pH zugYd`Dp|w_=~rHBGUX)CPb_AVa1dF&#nea#cz-p`&}QgF=7#hQjX}sYthmJ7{WsE--0ouMG$*;6EGxS;0zua{CO3 zUFv)IRpUf4s39e&`Ne0zMDTgws?JL=Lh*-kWs(2FZOCZ|zHrxVHPw0@CB@R&ue-*u z)ta?9G_6zk+&1DUvr!}XdHsh&DKVZu;5B=g6tE}o1%E@~6?2AZaVt}^wB(u{J3BgY zZ=He%?BV*;1FB4wGva;g`&y3*Gz!}ItG{&$>}GJkuFOSRrEGJ@BHVCZ0zoenxFO?m z=eZUw5*8~j9-yIBD9VcqO@zMe1akh(R~*5pxv%o<=j_7h4yD~Z=uNi3VIg5EHFQevnFD9OvY_>5it#eF0+QGuL)epanW137L9vPTJ6{F| z0ij^U$&|)q#WO`w=}GsA=aq?+|H{7d&x!P3%oWe58#meI?2%6s(>Sl{G#q_GVXzXY ze3VRODqtnEgQ>>&j1t$Ma~M3=tOEN&q%SEVJ$$YVHY37rJIv=kGYSpIfME^60*L{5 z@9)8aQuLh!1A<@1_J7(^@!#$^W@7J=+HXQanGH?$kLIP+vFBe=;8R*~L<&K*`>ZTJ zq)-EU#UrX=;}pNDyG1I-TTm^xOAZvZekf&`8#?-4b9K_}RU^u&|JL zaOQlv2K>BXb$JhtW};x%g8O!wc-Sxj+&ps{r7Ep#=pi&8n?l?Mu0YppGXocN%s?pJ z+@WvB!mt0Y^YEzC&FgU-!c(x?v=_IM6ztP|(o~_mr_w}0(;ekVBC?|fLjjN^q-B0V zWiix4{TQ+2c-c-q&G%Myr-#zha6sy2zFccNb1UL?<&gjdv^lwJd*1ZV%Ihj=reT+k zqZ6!-lp8Z^s@>;`iIUoSkCyW)y31lv=0 z=KzGKt${|Z%eO;>*xBXFplZM_0%c{OV|LP7zGdoOQ2T^ZcANA__}3H*u^T8^$)ef( znHYd7dhTITbRF>$&GWa$ML@g%l2X73(6u$eB0}sB4A_Qy<4`c2WsHh#^f-vjHmJkY4wfQ;gpjpu&%uJ#(yzN-89E;_n<53`SbPA=<4TLrht^a} z*)=zQWnY%GN!Yh`AxuyBu*Roe5dZ>_>Xe*qSn@6YA*Da2uSPhUtuirxN{ysbCnqBQ zZV{4)RVfFHvep2MQ`24*F@^wg?v~OQOMq~B>_kYIf^gPYs#~^1Dvyj79ZAwpiy7U| z{m^QvAW@Rauc1g+bQ3_qeP*QD^7~9Tm=)NFO^cxZKO7-c25$ zQ+L%53CrU$+J_k@btf?6zEh_|ksK{wmJ9QOzQ==c;y3P{0?Cr6a{z+prPr-9N0?8!Q_th1v{8-V>Q@Y zX&Ok_tw7KSiMovYpgTc->#+?Z;#ON42+}gB;$G4ebSzNxy#T60q8j5X+IS!$;J3RI z;_&p$Ff9NGuGyfLH9~V--?-Gu;3}Nxqk|AWrfahe^Q(Lf`F|K^tIamHXf0!u#fSuhRQdF$3b!kjI7qy(IE7a)+HrgA>FQ-hGqv>MP!Hk1WJcu?}VAJX1Pmig=U-NgzMK1L*E)K4b}Qof0le zt;=Gwq@V7Y;>xkIx0ZaPo|7Ci_F*sm-438SDUaT2;T+kI zxKP9&ocgG=Ap%?t9CxYR?T5q!OTd~1WmP(XZHm6Di`-HhI{8@bj5@z|_@u?=J_m(S zKzJ_l*1amXB4C6^D>Bcb@{5U#310o)5{m;xw0g7F*6FqG$$2FpeoP;Y&(N;7bOWGP zFG3cV_FbW1JC<-P#zi*EB+Cm|C#EnYfbPae(mo#9kKpu|jTH%{Z}?v4d526{iEmmc zE9YGilnO^T33M^4V`Jv%r{+|G(=~tzNBP!FZe9B&Zqd+`Uxp9tp-rSL^lo|S0+dor$F=dcjuk@6Q8p_kxjkhbw``| zkJigIJYAcIN|@`bf%2~9G4`Xmm9y5X=|iKxobMfHmtAcSQ)7LtDFBp~9@|ztShjXl z>!nhG^YsTS*v>fPxb~>;crw74>rMk_T8KuA_oED$$2?u8F-3Y;2FBK+AC&ZwpvlJt2#3o#fSdtb@dKVz+rN=?CNNiC{ z&rQ+974^>O0^hA#p8^h+2)#05x|hAno4FKX1z2(cjQ z|B>}p0daLn7ie&o-~R+MZf+Q7FAJ<;;>CR0d;ADXcO0O7eqMxXc<1o3jv}3EMH^)+^+Gw+nY51r zGl4c%tJBS6ud>?W5{YpytNjA}4AIUyhaIVwGlUY|T+R^Mzg3pv=<{m$;Sj)9pD4ot z+hKkUg=Y%U_vWoy#(&}dYCsTMF6-8tyrakCG`~IAX z448~XF$z6hZEd|-`Ph=2p2i)!_!T`Bdf z!ImiY_}+AgOSu<(f=iv;)2l4_fE>9;a-?G~j_1A}k{5|Q(1H$XXDyXt3%<%$;4&+V zVQ$Bra!65x`rWb}LnM!2#Xd|p%TuynJeh9^&i z26Ne*wv)UUQ|8jf<7f`pHb||oJKg8uB&!Tm{n7pI9Ms06Ml=WoOSmb^0xKi_KEjIR ziEEsy!ckCeYM(Ko{aJqlvrS)Ca;Z8JN4H2+F3WmIU#TDRODzklqS#t-mvnA$49SaK zjB<3$X%B`W+Wk3vP0tnkP#x_SbBcR<;ZMe2UCeU` zJvBWMTJhWiNP_nOKh4p+?6CYv)h~sqY2uV5wBPH?XIzJY(6jJvNl-WAO!H#SOjPkA zh10g*bC-MQntv!3uIEWGD9ITQd{fy88oUK^J2}1id^Z|05jpVX^!p~<#E=`^u7`Ma z8a;Yig58^*V7`$3F|_CQ3*O#m&!&G_4+zs+OW@B6Ltc9Yz>=}_s>t#AI@>9e1QvDE z+*w2jV{3$T^@73cFszad?sC>e`{qXEaFzOqC zZGwSv9usPBk7pCkA`W=U6^f|)A?K&8l1cv{!vY_j<1P-{VN*pIk$EaDyF(lyo+`5mpzV6W$g1& zEKRRGcB|_-{cW`Z(Tp7<`htZVe6(P1ZpwJl9Y!D`KvQ0CS(dW;%hs76LWuh(+ z(%9LOpH^CR^n1Gwm~*>lRSglPyn9R8CcH&I*^lnJ#2FpV_Yo?OR3^bN(<5Ciw*9zT zB6fMM1i&`V53u33hw{04&a^vFrls$F)o;j<;^l_bI6J=-VF*(9ITGB;a?MewlRvY) z$a`4vcw8^>Np;{svbuGH?&o!xxeS7-p%b_nNL8dbH=;|lXSa5DR_>V=#Jri+ery)( z<~{Mxa%DfL7g2cGD}6m}Px`$ieUqOW7v|924mi%%zw5Oa^u0UFb@5OT*(F$dpx7=8 zKhO2i$9}eFMnUrC#CMgIZ_ik42~F8pYJj-%yjAbft2n(|q zS+~vbWG}Q-B67K=yt~|Xh{q2?bm(na9o6rT4k11;Mbs>}OK&b`cZK>V#)YuU4Z=#l z9RRK4l~i-MY(#Z#29H=uzBu-q(@hAQwZ=Aq4^Xb*KEViscL9N^i6-Hs^#?=5OhkX| zIP&gj*9#f8v|bmtk;)t{YqxLz7t06K$_j?9((e?JqGbvXO+H}VLZ7p3mSU7S&+vA2 zXZkDirh;I=GE8}Hs$7A!b$O^1r@Pufb^x{CmkF19F}}AS9>jYcClAX-qf7p1IqzHG zp@1rY-c!DUSQWnK*Q->0rV{>=-xW1qEP~qRlqFx_(P!S3f=`S5!-v;4S(GdJ>K`g| zDmwuh){KCcGJ2fQPb9BCF#!GzpZA7q{CD43%MQyoIsZ_tWx~~<*Ir!)uWdNzUOGq$ zWVBf#1_V0pMuBtL@dwCyftd`UxOasAKCt^s)P3FqPWgkY>+Su&9T?UBqQRiC|E0ma zDNR7*j(=(62u?N*ao(U(B_|z4wi^ZH6#6z4UA&NtcO7NBxWOE^(Bkerx|Bc|_m z#Gmg3(rC%!evAVF0B{@t&e0NQL9hZ5Rrcqnm`2k`pHf}h>zK5sU);wJ@z#awm7|G` z(RIlMGeOR-`FIH3*q?5~YmhNg$?oA{vcOd*ij?|{eiTqX9y^iJvS%dq$(n<8$I|l( zqB}-u$vP6@Y!^0L2n8CuKnkE?60gtuFt05bdKya2?hr@jaBn;SN~lXJst)*_5R8Hi zJ?H8wZyhTP4Q=-QupLsL9MFebK*eamo!1ZMIA?eF>s#9~j1g>CI|#QzM35QC5ykvm}mM{&0&ge)YQbIwUTpRSt-lf>U( zLJqy+`3M(UmXGRyA4jD*;uG0D{kwEkLtllehX4&-crcD!_~2GMqEB9XO;7hP7uo~H zUziKzCxhBE1Bpi|c?ySJuU0;)Bqc+^4h>_&g3o0Ej&surZx3wa3iT#;8`JhrQFzMj zX*GRT!8(AfK0|kWslbA!{PDbd?5R)sbs)Bj;J;%2ACq{wBa*XLP_#oJfR1C}Tv{h(NnQ5FhIAUw@xaRaqNQE3OOXg-{H&5%Gj=s)^2SWc03Pya}>xUnLTCj7#}+ zOd>JMPWHoxoLd_GWjXkw_jdB}N~^-M!L@vj&d(~8Se0i~_WBL+%aSTF;Q+XHHm z@dnYZ;SIK&?;g(>`fZ!gjKG>rI-cwF0Hc&HStB+P&Wlsw8_z}^noEk$B;B^b-pJw% z`@ef|RxHb)9^9;1yoov!1%D@Yy?l%Wbl4Ak!lWmiK63$i^6za7IjOodc#!?*o<9L+ z(%&)hZ8LrC_Rz7nkfmi1`u7-GwxHtLw=4S^59*;k2%iELc_SxwZpCLA{a()mn=aAL zLi+9bUA|xs@9lc(;a~D-<|#mjZ}0nWVM-|S+G*wP*~x3eV{I_N{ux9jxbaG{ zsfAFK#VDFOo#a~i9mj*e`o$wGj9gID5YmF_?F7&^Kfj)<$V6FST39P0E_V~}zjrx92M>uFP$3v( z$E5}=3kJtSbT&R~p^cWVh$6%20nP-2vm)XDz^g2~Uot3`okpPpqK1HfWdYriAeIm1 zsw~ggj>aK$Tf9zX5@`7g{fSg&&Un8zme619&YT~cDb3WeNNF{kTJW_48is%q2?kyg zu=m%=C~Lm8gcDkgXL!G7vsVvkb?9-!9B9~3p93KY#W;B;v&|HOd za!`ou*F`7-0=q-NMfDZDwh;yW=AIl*5>=}gKZEzpQt!~(t@bVlt z0al)Y2BF|$U~$00P;hau4B%-fI2D*55Iqc>4y+0&6bAAq)3r*In(SKnu$lPimbQ1YLAjRG{2LZfmh4`eJG3|4S1oUn}_GIA+K+Wle+f?4m)59emW8#;t4s# za2iVMgxMP17TC{FkHayCGqee=QjCGfyXK_oy6@r#voNDuV>?d|Gz|x*MrLFdsK_&7 z?#d*=U%vSX%m@c(0HXwsg@bbf`pCML_;4;R&ckiNt-|B^F1f2}HZ--5Mp~@q7B$V* z-$;SAZcfe7x2aX873ItxVf6Z93-Kb1Fm`+)7{NaCXC4nMI9?<2B{I53T;Shg=;l4; z1P4?7;h70^41=>HPfKb`?b%H$#|8o?%F@^AT?V8IW{Hf!Su-~5Z>N>%KBj{?B4CM7 zW!5eE^1=K&*0V}?PtJ3;pDSX`Po2&*> zolkd`4IXm^I~;5;*<3d1{>hs1hkTUL?30mt3~s;{m=F10L=tBw=c+`Vtroy^JxF!?+o|Lmnl*Wk!sJkkYuGf^)Q3= z9O#mM=$FJ#se3ZqD-slAgprkC!UbOZjHgWoZW#`woxA5Vo;qu>UH2)tO7HOc?(Dt4 zKA}{o$ab;2_f!F7YElmLPG=H()WoFyeb%lo1{ZGnksHYg^v)*oj*M<&$R|r;Wla`1 zO?pQ6puKeFr6-i5EL3c33kC^hx7Df_e7bMXs@vmhx_@`jE1;uf^#mHxch7%CxH*aZ zu@`+Zpd*JHZ%obXB^cNa7k3c+tRvNlXITsMKva@y}hTRw{0sCImgq8-NZW{L_KE0#7!n6(^ zW43h49%y=E0E=y4$mesb>H`75`xk(665R7h2NETS>h64$)zVZanW1=l=P)4pIKB%yFB`WG(Yhz_D6(yh8J zRgJk?yfmZ25)<%PUlBTE#ZDr!8&7f?<3lv}n$K|WPlV*p6fY_?Qol^&bqWd{^g>tL zn)26~QHNd$dx1j;VvKXcUM*z&hU7n5cB6;| z*a;)QFv!^Drt1c!Rvch)VEAi!MmH(Y5mJ$u*4su6d^zO*<4l`-%%3AVRkam-tZ*veHp$3A4#r!%%rkIoC!L)TE0%vU3tYY7OgoF0_^v=AdC;p9pj<%fGeWh*8l$9eLBIo3IGmI0?{gN)ivT}xf+?4`&^0+@r0n);7AYCADS)>D>z6MTa`M9;RIDZ_)1_!jKlbQW;IRh2$ks!< zS!QBN4%!J*b0m6LxQ@0DG;{I?ufO|ynmu9SUZt^js-j~-{OAa>kWVHDNW?p2;tWsn zQxGGXK4{rc0l}b<16~3Ev|NFF_d2`KiHpf03%v`@ETf_`?H-i_8!ryo_uG85tp@Mp z{B&(h4H_`$k_Z6Z51CG`=R+gT8>XtjcIR3TgSnsI+{I{iH?K9<;d7y7dd(Hvm9pZkJuL;K`&eB5J>=U#M5zW7r+ zK}{<;ltmt94A2ij%2Vc8p2ICJr4kMe+Y)T*TD3=MA5gq&POU42(mcyCiUlnQrvzAa zv}R^8o-16Gs?GKzMhqf z!ZD)-@3=GQKOZ+4lS!y;K<)TN>^iA?bcmr+2B4@UNO_)vRbF9)tIiAFjF-RNe!8Si zTgGQ3_-^ks)$v|Wv-?<&k;2X$y(<4Vx*N2@HJ&Hv%N-tpU6nr+0P~C1*!n7Ql3Tp`d+N(pUrK!B6_)MQpA8S=s?Eg^gSC9*oKZp*gP*pk zZZ7i`?`pHnfVbKMRo^JZ(_gE%CBG_58tI>&@-=*vMc2qa8mB7Sm^ghACxoI|YsB$k z#e-XZr1cK)Rl*csJTLGy*2R4NL-^k{KhUB2ybdG>%%raq-MOwY8q=7(EI<30rrDL%RK5sh%-Mv>k7YwW)7%A~;RIZ5pd zH_v5(rh#YX_`>(Jf&ErP`1?+UAGIZvG|whEMS{yAdqY~YX>+#1tmIUt(h~D&Y}P4G zMR;V#URgUexKEE2hHRW91^PwHfZd-nLvedO!A}wr@fL&fRb;1LqMy4v3?KE&%vm|= z2qtk}V6~g#;^@>HM4^x>owg8^NOgqwPg5+`e|?Zp%p>|2e|}`Ki}ur z2rGl*{ME&+%CzLR2`jM}* zU%%NV>suZP#Jm@*(&ya7ML^kVsG|@&Ohqu$$A!NX6Y6&SG7%&dUQ97h>c-swsDPC9EpUsU*a1_H@BQ6y$zKEpH8P2dcT5i zenp^_$q;@1TAO7CJ9Cx%s$NuS*NfU?To;U$#JS>vdZ$aU>P%=qs|$Ese5L1!ej(&r z^+7$efYbRn0%^GIQg;sS`O1abqj;%FHJdJAewhkZt<&0r8%JL;Kw-A|G7u4>1M6hv z*=e5+`2(Zf`KKm1Iy|^-7F&La@y)*_r|f<~2I$+ju3yGPeFn}knDjVv2H;J72i(J#1Z}b?(b8nru=snw}15j zpoS)jOO;6)Ouk^OALD^(pg~654@V^V=$nqmP?>Fs(CquGZ3(?8?diY+T8@jymfse+ zN8w+&p9-134oeI)7bBT&WoghW*dD0nk!oIOmJ zGhtyIQ@M*H^FS4+%I1X(Qb|sO�d6>)91;35E3-OPAZ&mr}?>&8WT3+M2FjQ2T=Lcx4>f_bqr}n94 zmVvDYXSw)~FTanTu

0OcCbaMc5`cCI0L(mU4=}>ti6+Df&_ofU*0O>ztk*U8D7UD zRz9#2qIIP_1wqmx@3re{?7^G8#7q~&2qhhdJRDQYZ?)Sw`RZ9ZI#Yo5G-2#qeZl!e z+L5+UZQp9GwO>GUSQ3z>xihZ6JT^SxCNbRLM=QZ7uToO37k|Uh;|5bZ|#9pS} zMqa-_J+8Tb^UwZie}Scf6H)(t`}g@Dq3E1VW@9w_zR~>yNGQ6P0AvmU%A|sS1<00I zPtFZ1;INd`cc7u5~nymdhnlwJN+QU*E8_KV-e#thW{1iw6Y=0@;?Lf{42(svkxZ0Qr{=B`>W zegpgVR6I)@ZJzT73#18WU~H605LwD|eiPw;oNP-PXE`ocm*+Y~@G&F+hRJUPZkY#0 zk5Mz1(v0s^fud=`9gRo3^^T9(Sli zdL^hXya(pbSdUddGheuD{(gk|lF|_fr`P*b`QgUM=n~xZ7$i5e(jIkvFYbQPpF!6? zS~Wr`*fg5OR_=sgmi&_$>E!JK-UXD{Vvud&G9vCDr-^I_m@Thh{u>G97)pQ4fONtk z=)eS4h<~>`hi#zIk^YK=L(u;f^BJI1Iyf%K_F4lW1E#5FH5N1pYoK3E-BhKSy~SzB zT?eQ5!!It2O}=`4%=&9O#Y3zA(QZ;pCtEBVdhHp1>~}GGN=wI^J($>&7V&)Exf1&# z%G&ryK0^jv=e<`$Bxj5T;a93Z|N~iv_eG;$0^fFKP;InfviVUJ%YrzlSd;EsXA4% z_b6(g(3gV6=2s_-P|=Mv zY!th#84}j&(kh481#I2vIpCH2HH2ACkrO-oY8_AMbh0yhn3;1nNp^6G>B)AO?F94I*h}e-Orj1q%Z0}sx0cSD{>eQMq<{+jW$QD z#*RD*C;3{R3^hlKLuqjFE0Ua)amh-YkuvRe@|@MozU28@%%*w%mb!(=K!CqGN0+ti zQLbC>xIMPXMxlGsAJ9OiZhdyF7hq%hYOF|h^4QF9j~JGLJpDsV}Lu{hIb9B-Ghnbx^-No-cv!$O#Iy z?AG}BV{$P*{DR%WU$KO826Ifi-3GvwPC2%Lu2d9yEm29kQZ&m=712E1S@R1eC8q8o z9~a~O-*GL|f?$P7K)oDrJ(48of2F%gZ9CO9F4XtUw09WxJ?e+g>mg{c2hObV;K0=! za1+GV-pA!ZlLL3C1M35zbS^k4AgdWqn6znqj`Vr*5Cy z6Cr!gM6%H&uFi}$6Q#kV0mro@T&m~FXZ~0wn{^RB@(Z;%GsIBzD}b8ZuX%@OXY#|s zl~_SZTChQ%3CdMUCSyh{Tu9w}E7tRr4dVE=$=uo@nL6lm;^FSX%64RUUV$-3L#o8Ud;EOq{=m2k0W`WNg<4nUWoC%ey zXiPAOKmWieVbFk#`hb@C;HUtgcDiTLEMJ@`{?iXa$;Q-vL;moLxwH2RD(XtD=?$z2eLp=01oTE1C)au3Jz!$iOmUqW0yW@w7%ib1l3IPbyAlT%;!JfcFBc%kRLpsXL#wbhZj^Qw#EqE5~jCR zijwaxQW(IVAC5)wW&8#p>}7uTlH@kmiNh}Fq(yiPvLp~t{h)Li$G)`?JEM+xHq1e} z(Je_Uxi#bQlmX9ocDsy^pq)@KQJw;}9}ZiD1=n3XFO&L+#lY=Ykxxoo?)cQ{64gx} zMe>XB7r=jABst=4s_~Gih$4iG5C`kbx9Az?k(!=e8JNzyHDw0~Qi@@#w)&=G|Efi< zAJ@8O{i)6HRu-e{Q=Ji~#IW&-(iIQYrdhRGVoK!vrzuK}SJR{WntGy+x9s^!mVRua zo&Z{A{SWPcKEt1wn}#^c-VD(KUzhdbIRx$Ap*H0%0)asYcp2cOPN~Dtz3F3SqEnYe zo*J&AYU$uqXe2t|0=6sL4H-U*vsg9xceJPYj6tcu5(m+U1U|oCp zV4YtdulG?lU+We&x9KLSmnWr-P)J3X&*EuTIA>W(i;12EESZYtXz^ROg68YBmI!PZ ziAg8H#HCgf8H6)wRi0BWVGc_x5+$gNOkb^1RaKV7gpHrmE=WZ(liYJzj~Sp5PIH`v zZtWSODH>T&{T3RA7hrw8I-D)P5X0uYPEfe4d4kQZl!0OxB6Sqv5C`Pn>r@^NoDiC@ zI~PTm(G(v7IP%k5nUyM%*`FYO*|65&eKL^}6~<{;6~WXD&;R-J%E!c?aQ;>WWQKL= zD)3Ur=WQb3xyU{^Fe`UAvby>MQNOUkHJ7a^%diA3%Scc_K_A_GaG;0doe*kB)@Chz z){)pME#ZcnM}MVVB^NKDK!dP82Ck6eujVD|m_~011;JluIj4BX4%^L}w`BLfxRFZH z&^FL6Y^)kNI&~7o^Ch3Q6L)lJW6qg_$NpQnbekt)DKuC)*_Ost$88PJ2JG<BK2P`z_v~E?w1b}i_M7L;6TX49vX>g%L!(YuFtQRa7b|E#EhcfLn#u*mx~)E zOPWuVw&iIrRCaY2H(ByTLC?lu^qg=7Lp7VH{!H2rUEj?ujS1)wLKlQ#$0~|5Tj% zydaeeJ!ymr{TXn#_S3q=OTBGVb{w$2>vdT(u6M4h9$Le+({~zI=}k(xNP@}dwWtW5bWTU z=1&);Ufvkl>3iBZ*`bu%C1tv2kun1FepM|~6Eo@gT9vejM5#kGy&m*tV-&buq}4Ij zAOF*465GD}1Dq%W{|2!Bmp9PAxG;8^jXyZ{N7u%ewG2s72t-TA-0~NaV#s)Z%6|AI zX1X%iG-JQ+f}DYlPX9xOu?;1bZ5xrDb<1_?#<=-r8y|xJkzBhACR5N;(C|sy%Ay=C zhM?p&Nf~Dnrl6}Ph5jTY`WB*&xmo?*g^w5jBEsyku7HRz;O&~;5Pyj<4xyXdl>ZQ6 z3q^Q3xtf^?8^KZ#C&qnnQCXv z#==y%fA?cx8V&i@ibi{3nuULVO{HnIdb~tGAjqh;qbt+tmG6}f7KRkmb zAt`CL{BItN{*_`k6QkUw=A?dv?e{4Clw#4NV6WgtrPXJa^P3kEKU$JQzv-X;x_L&U zys5oVa@B9u8t(qtcy|aDqqgb#Ir5Ctb+QJVrYrL9!U8WF76u?bjPAeqFpNT4zej}G zcxs@|%@++m2iKqjf+f2D$1%_Lo)%Ud)a+3M2NL&za|0vnpwWTS6(I7{-?x7szj$Gr zKBiBhmq8!IKZI0ELH;YLyGE|OwoIt_-^3)oEAN3ORhFt=cQZyTa^v%|&s_Rll3O-u zOhk(0?bqaeK{ONux^@poI>7w!o8y+8mD>}+YwK4*IHwY4{xI&i<3=YxK{$`2?DU>Q zxS<6(Km|iHLCv}V1_iC!Fs;17gdUhx`>>1_3m|$nN3xwjEIkebF#J_ zY2u->^4CWrj^c<_*t?zDVLyy&C48 z;}eD&ma)J)ta88qQGWgr2r#wdDEXZK%EdmOahk=2*{08{s~Bw^v}(r?MB%%O5fyWkZyr zOtS4PhTnpT?ykj-4k{}S<**em!dfW9D0u3vy%RuZ+Z8y8ru4W^M;TE7Umr}h6f%bO zhVf$r^kxIb#zm;slD}wojlmbi>rMpYEQpNZ^wp!EFjrKAAo=a2mbcG~I&H9KhwHR4 zTB#4jLqt37S&FS$=^YI^P(JKItKQN`fw+fQT{@*FQy0P^gy^B<`m_1?GXkCE%{;Au z`8OVI$sS7-8hf?xHyLg1F?Cae&Dg6zWRVU+C3s8(#Tym>yES$(S>RU>3yMesXl$d% zKM|R!2Im3Dk}`t=g5V$CF6zi~j>D@j-f(ACT7w{xw;RP8CK~ohn9=8ChxEQisD13y-xQJA{Nd=<7 zXOy}~r+k8*sIUpHqXMc-`jzHUrSQIZ|2Tl67W^YMUb7&@0j2KEIct zNG)%i&F+QW%qWxQLPO}GfRDgi&EfN@sv6&i@+h8mF)64|@ z7cxvZ-1AFOp9-;(X%=$R`GvUk>BcCeJsSJ?kvS+H?5|cB!M65aPL9r!fK&VS;W;>O zDun=?jJgxv*`{QC<5#SDwB{Xq9lHh~HZO^-!=_|J&WCubxL|C6;vDJ=6zRjdRzhzH7f7QWvtT;7|Ae6XG(>kQuE2Cu_kC04x8_Xjw`6pbHUbDZIXjt+_S4ilq za*S+jabo-HA6;zmCFQZnhf+ZkDpkZK8 zo1t_MEz%4-tQIocA{z1xaaQE}H%w6xD?DaW0jqj>ja^5S-E zhtdnPlcdpUMJsi@pYL>*T6< z0uWx|&KJyPk@$^uC3RO9VcPqF88GVO*NI@#>s-om6-R!(t;n_&AF9h|N?PuB)*1_ko-6*GT|ATJI zR(Oa~pr~tr(ySDax&d4h@b~Bc!5U83f5X}j0({#M3`P>t0j|HWwk$vR(M6_u`46&T{Y5tBe~|43Q`^O4oke8so+TsE2Fv;D zU<2I&)=Ci*b?VoZwB}dA5O8cM%h!*)v$id*)YmViOm@+FZOCvpl9%6|d9xj3cJVTI zIP5ptD*qyz{gF$2 zy!%q__diP>i<7Pt0$O9`|Kw2+vS9#M9H3Ev%uS#hcjdnr7rGVtC%heP5u?pA%fxn9 zHGx?e6~8N*S){{lMMfv_xVY}4t5D;}v8|+Vl6#9A4ruN|UO|Tuvxrb-B<5{3rAb?S zWil|xn?sDmG6`?@lz5=SQlgT%Q_?f{Du+6VQuuhc&Tr!>)CS{-XL9^~0QIiw*b8kl zqHII_D$@o7nq{;Em$#BxNfg2(Pe3!lraA|J+%L>;G;!6~l#-FZ0dJa~VNI6@0M|v! zBb{EO0E=w!#k#$bo;X-Te$sfSw7ok%uBl21qJ008MTfu#r=avO&5B8$3b(zX@)bFD z=O|Un=ESw}#d|a7izW|gXP~QL4|WGXmQIR0NlZg%7?kzixE*fp3`of`BUyd1wY;<7@}JUOF9~^lkWi$SKG~ZfUL*l4TQY< z-l{sAfLqkJqtD7puZ*DheS7;;xlOON9|qjeILk*aXlWddH6KEBu-n3iTDlkRg;N;G zo0A47J?sF^&HePy9~f{V(56?i4ff>FTU~tt5bzvx6i%BTYjKYMGzF#aaq4R1of9QXPd^&x2vjCr4!JR?W7SKiuyM+1> zjW-09?L203*XDy!NRWB`8O&q@1w)|?WV6q`@2`nE8)D7+?pFEhu zqMbsl`&IpaObUrudjQbBrUkl|(5)diPPx*HSks$@1i5g*5;W>aGY#s2vYZ6Oon18Y zuriAYYhnv??KA)@IjJA^yv`G$2ByIgH4AQpG5!*&M?(YL$;#I-qR)`E6xgliRr)j^nX}IJ&`l_{ zV+ykAY)GuTEq%j(+(q^_$6Hir#cIuhCABS{g>JZ(p@dd3EK8eLUsKAq0-5a+l>7c) zHbnXKcRoB=^k`)$Xixb;{59Jp|6Ar`0GT?#zk-DV6+1vuprx|!cs}u`!9gra4n~+&3Tb$IRdQYQ?)3 zEP3}$a809Q0WJ^&lRtv?)iQSAQ3nM)t5ck|X_h2-r+ChNs5mm3M-f)A(;O0^|5%u5 zFLnrXmT!vlefq*DqXCJ9dOND7ixQ&r^|JrGMNB0Swf>Kv1_7=q?2qz#r4llb)Tp! zQ21TeLWGl|p92Ei1>2GMmC*G5-sE%2!|s=vjmLN~S4erTu%WV#0%R0ck&~L~^q9Nz zTqo!F>?b=~dEFD{_7wD$4%I^0rFo6^pk>I>uy3-^tj9gb+pSi@m?2kmoZ^j)|H*&w z|3oRnWk~NQ@UjzJ7x42x2~gQ#{x49`UI^-mFYZdEE&Y)HuI?95ibBMpj(7o;H|p$w zhhh?LQ!*p}=5gLYAg(){L~xXOiLVP}>Jm?c;Lcn9=@&q-E&lus!P1n-dQDPpbnJRa&BJlO|AFtCWPDske zn&tpI0@Dj#vxPYA@56P3Yipdv@9@o?l)q?yLWn;KzH53$7^Uw|yHX$$XnTH%Ph|va zuInE;&q6@*ZSzKm(IeKvHii!ZZhe*$8SJzjwxDu|~Kh{aG z?~i%l;R?b`RBT>h?lDI7C;lz*jS8D~W3(i{_kS3FO|{;~KY*WmK;iuH?{H=%ZGqAu zY5=J2K*@v55W%)P!pV42^IaDDTXzr>XX`dq(F2c*cmLKMB~J(sKiFDdf47sGC0S9# zjIm zM&(N#O?1#+z_%sG_1w=uR9>X=R3%(Y;zTQzZQ=u}Xr|{ACGn>zq-9`SYk&Y|qxd4y zzQeGfsT+mK&?b?lfmxR{7{wzZE}_4FwqbCAd?!W@w(kDVKKy4JcDRIav;pz^!1V!b z|F;eQlGlc}Xs-!kM?f}Ma`SQ&c5*{q?|BGMsv4?eQZEqpL@)au{yWY&Ehkb(||3`wDA*;mTlT)7XyGF7}KARFvmR_~W z7fblWeu=MAxiW-V53a|p87Ng>x7maaUu zLHAQ$!@K3<&<}sedki?9pOX{qL~;rYQ;NCC&^Ag&kivNJhW8VmvDVT3l$7>zb^5Fd zYD4`jdi?ZlKjF}{6uZ9%a$)?b_Lo6HmSNoGbDd%Ax_FFxh$8LgXNcU}MfD$R#n+>m ztIV+cne~`MI!IfIYd8a^8}S;5Sx$`cc;lyh`F~mVpXhQK&&Q1d6$ijANk{)3-AWZ% zn>8WSF1#B;=vtx(8oY6NDz__gYh-FN;OYQ43BbOgx>9-$7)pW@r94}DWMOr6q;+y> z9VD%m(6GNC!=WZCflKaGR*S@kU9^&n!!M9UcpoHmEfHXlDLX{+|FHFq(V28jyAvA| zTNB&1?TKyMx?|gRCZ5=~HL-2m$;mwLx6b*Vcb!`OtGoZy)w^o++>3pv!AI!{?G0oDLk&V_}xV9Xpf*+LAHj{4&U!*SlweQ ztu#IC#@QG)e9p z84=erY|9ix4WZ627C~q=4QO|nrbjVO{kp8{_yKk$l@zFz-R|j@$pX*w!dLM5FhB9I zgl>*^z$vA?ERO9w?Q<8&noMzu8ORX?XcH5)b{v{ud$xtn`?A`i3MJe!t4yU^JozPe z9vukej6Xqi&qgE!O1NJUUY>_`KbGx%2CMqG@ehix(&W7D%1dqDh0ZN(q0q$jzgN$E z3n0>Im7D~ZwHP}$J&}{YWc#07Xk9-W`x?Wh*{-KEG%1^OZgdK(};6Ee8F3i)N#^Pws-$_p)5CRf8bUTNqV`E z_2yVYO-rW8BN1kAIWzE!yV4trreIvu%?F*acdM@8W0E+zgn!m2yi)_Fxq zRk05dj{ZIU`Xry=6sKHNRS)Qzf^g<#p&0zVspewH^*T7Gz5V;P(8IW)_~>Hj6Pk`* zi}V>H3ra`|Z3BY%z_eSZ5kKwT5O^iP8K{uKCWuMx7{f%MLD&q$Es_g&VVb>QUc=}$ zpbeA4O=IxgQ2)t3p#K(`0jb#FiDYv9+FpiSNE!>S{I+0wS-}~t30>f)vqDy{YfEB* zrAR9j+sf${WU@GK!zSb3jgl7cYoin+$J_Iq+4`@IGIeC@hv3(zQvm+k?Vls%!4Vws zA1a}U@>XyFsW*`28x=EB(hASBkNt1IKbjlCr|{z<~t zPa7yPv)3)#vED_9!Y(AZ`dO^Iux_Y-A(h)(eYVyh6{_n2fpRvB!5mg)Cc9eieD2e* zOwCLW!;~o6RGT4MK0C~5vpP|0vmlCKHF5KOF~8POKahq+BY?HDZ^jQr&Emi*4SQ4y z&S``;Z{@#C#WDD}kw3+9^eX_x|39YU9Xn(3p99+FfAT6WUwM_E%L9Yp{zBki0jPq( zfv*Fa%z&$Ie5oV5OA^TQ$K@MTTID~(SC(y4MM2i+h*!@`{9}N2FRkE-)6F$3`Wlrj z1aONmg5=-B7&8mM+BP@=E3#W3JPUjph5`3G{;>y?4 z70s3K5^`MmRjK({K4FsQr=FVMp0v)QktModZ^$;*s*cT53pW;`6*2lZr!r>-@=xUH z?^$cc*oK^rWtyZd*h2T;-pD*K#UurH{4378`FFO>&?d+;KD;3oCJu|N#vsy7br6q} zJY@Zyab!Nlp>X97nBz=pn)gjAjxO`si-Gu}SD#BqvatQ6L7re z=e;ILgyN`-T+!@2StG2;j8&8&#yGD&A0xPWC}6R{Rv{b;+kJ|vJMy<;&v zK!D7qhzkM|%~F&@p2P6Z>Z{RjMl)kO@vR-;6XOxK7vi|J1avAnC z%*!cyl-kw2q#k{;SZm0s-K^Z#VsXIW^?KZ1Y<_Z;h_gsc11WvcGUi2Jj^W3K=^Nhu z0VK)r2ST1KB5%%qDv|Y;Eb}N0>Ii0ahiM0OkkIhUM6gI%#l|{UiRF188&M`UFr~hK z%OA+wG6G|0&>z(1_3$@;{C)X0O05HHXY>qLd2C;`rTNX3zK06R+~csE8+8CW&UP`M z2&M?R``m9mb#cfcl6)5S6>rVF&o^b+e*2(6!Sv}lqKQ8un5mZ!wY`PAc0Pr;xO3E! zLy}FO8|kiQow~T37r#@VnyOwYQ42rHY8W30aENpg!fd8ZzgI$-5nnib%sFc%qdg}) zVa&Px7t0x}i4nB5IK_JsSPoG9#diKHl`5KYyX+`FVmo}PpVN^8yF5VLj8@l@lqS zsY|uZK^?a>S=8&yo;5+T%MM_`ReoQ>SapI&peO7Q72N8<@Hl_z2YR!q_%+fYUD4P5 zc$ItTz!v^9zd}k7pm>;ET70e2eC50lB6EWqEI%-gscJkZ*#xuek8-mO0d#%4sTW~=obg^g zrs;9T-~kCzj23#*5q#3oZxy1?M)e3f2Nqukc~(LCHTS`0i3aO45%o3yRtQPpe)t3=P(VbJ+2YBHW!dvzjCp|s; zLG0tNmt^4%kIWCgkyWMTroo4W2u9w4aTVLBp>4#E4h3XZIIs9drmG!NaS)v+gxL>f ziH0*MkX)3t(cm@uQFsKsLM-j;eDRhmqB`#K)Gh_yr37Wdh8yw=K$ORZoSZIM@Q1ki4K&yXOw_-|T!T{1RVbUNNUzU3gTONC+E4+4b zksZ!3O?>#pc;4UP*CqJq5_H1dC2>b-Y2VI}D`hWCK6q-nEEZ#Rthi=aEVPJn=1Su6 zi3>HyBrkviS&$hS{TQUDoR#~*hOQ*&@u@Efkx>Tyap>IFw zgh3sPP~L>`EP|j4-I>vcwIk6r!-(|@l3UF~Q(z!rS!~}m{;l#1$V1^cUZg8kq}VD> zs1lg#!*0Ilcx<1TayvDRao*@SHK(Y+Nsw}(db+Q7_QA^R+YKRjLd=Zg6R=(l5HAnv zP!RQFkA)~@Xe#XYMSyxjO1*Ml<@c`NbG-g@yv6tLtqn=Pe)2jcb{1F$aQ#1%m)3DC z9amXzJWXHlF@7Q^AP3bLaao_$GBp}BwX!E`QkZ-G78O#6mB}Fb884a7`EuD5f!qTaNU{r=VVM2=TyWircK=5B?UIe@+v z{TF&GDgSdLM@<$xBtRQ!K2o&UMqB%w)y3uA z2a>4CXn~6;N}w2AA69se{_aPy2B5Qg(%(RM zfs+j|Zbk^1w0w-R!-sCW@!CG_)6PAN+6!n;$+%j>&f~-sD*+uCPxZVnt{-#JS=fv= zo&un^-8-T9o3Ww7z?ImkWVa)MfktmIHA7Cv`Ma~y!ZLA9F~XBf`ozU>cCyY4*`8^hNlNIBo z0b@(K)p{&NQvlMx=qUlBxO*De@Qcj|65I&hl}cR>5IKCOce*}m+=!S~OSt?Q`qVL< zAJ7O&njF$sh$1h>9eMNd-lZ(e`)}UwNr4wn3RbW1GrQPq7G^GPJYt*$gEj@)Y~S9I zJ}nky*k0T(;+N8wbcA!mSQl`o?$?`tt3!L7>*O`SIRTg{@HmB~Uz7XU>TQcA` znTG;xJva9Xgtm%h>frn_)Et_?Z|#vEF88M{T#A(-3_H-tq_-#m*}ebeSJ%HS=-U$~ z_Dg+fnNb;U-WhcN-9&ijvGFka9Ai@Dee)|x0KU}}ed%_~!0`cTS_OL0n;mav!sSjN zIWdk@%?}7uHj6|7&4qQd9&&Nf_jJ;qi8SxyG^;24y7aIqv1sOfgxWEWCblgZYy5ul zEq^Ti$jcUJw@sDh>AM;H$xe?2#lU_~49SwkxY6`Ft1eVt2Z4wNWvY|#WWDv>^db%t z&A62T$~sm}D;Gm=V`&EL8AWJywzzc?i$?qI1yC_Yk3~T5(3IsKdO|yv1R~^+{AO+s z%P$=B#zE!~V-CQ%>0!mf?ARUJOAj>pd>oq%b^+^~7=DL=fK@Dau3Y~yG2bZ$`b+HX z^a*?;ho>M>02}Y%P{xIbJ&qi_8);B!PG5-G{C@I_Rm_YSM=<)(K11ERPgOXyy#^GO z2biAh4j18(`o;=_OW)S&J~*f>MmLa-S-5TQRzY%HV9Fij<4MQh&r00! zj+)OQ*@`@sc~ZTQhU-i-`&?%or-pBG(6J|jFxF^pzw4&g$kPMf!7>!f;fSBR#Q^y~ z5w-bGoWm7yUWsd%!JRVdrtb|;9`A%SGbfEWTX=(wBtGqKM^e4(d*kKzhovPtQW$ai zLK{a75eZRSnC>g*$S7_VOBmTjf1?EMAc`qq5qj|NZ;!)C!jokvoFJFoQv+SDEp6MM zRB+Oi!$s*y`WCXgv4LoB4m!>(-~s~k-b~Axv%YcDFUD-digZLMR*mGf&H`(XC1M7F zX)0cJl|F7BZeywUyiVr6X^7%$Q=Y*$BXaf~e4|(yTNnD6vpNqO@?L%_b0;qrkxBe9 zLGPP+6pa5f%J$pUH&a}{m1Zs^rUv-ZIYLt#nhxOO$w#hG*3`VO1T|jI*%Y9KoK({; zqkSEoS~bmPWYMwuA@DJVVcW;?{P}Ju^>Th=xIax3;CE7C}10Gz5rg2XK~kOQa9_<~Uk z?mJ2iK_aLGUQVCm&cJ{T?1yY+GJD0*6Un7L`6k~+?(%}O@GqVkX269z7AjkoU)t7Y zuZKXgMYRZ)4N?}yC*$sPR_)gu&s=K)fIiOqiT}j$aRa_ZFbcG&7&w418(S1VTGpDb zSgD@sRd#X6BqQbf*v6I>in~eq8ol5TLL`v~7Fq`TN=Z4WKiwtDnSMl@4r9B-B4|uZr3uV= z$PT54OFgz!80oUKs2qST#w;f3cvK;hfJ8W6sc0p%vNV4|qp0$c?rw~v2O&Mc0tX*% zzA3Ah>-9nY>nWJwqsePzDxLomb?WP`vrBu+P$NzW(EfS>(bRkQP1c4}pJdV|pJ7$+ zd|UOlKfbI-x;h*dn0_1Oaj&V&y@D!n7e=+nIJ$yWKs5v9<1K(y3LyyZfGmAzPpe@c z{x%&rIQa8!srNu>GnEB*fd40_d$; z{?Up3NR&p4T2mR?pR!O+aZ8yvo1$Tz?be&bYuSpKvr<5?Y6!Khm6(Q%Cus+nTSXd6 zR9h4BViS*TUZ_m;e%`U00CAX?-uTZNHY%@iOLnig*v>lo)NG&dFnpi`>3BDjA+~r< zFQ9Ajc+OURBmi~5QR&bR-I5f>kgF603KIcj!)A(knq0G>H%0d_Oj*G)eCm zlj@pRsAZ@ZWjO`&w`iP_WSF0T`8<6`+;=6xX{acHxGNcyiG?KUFu$}wNf%khR<%>> z%6qDMt{$z$A{i0|tFU|={B(b{{f%T|BkP05Gi(6!nCn@~B5!4KsZ)Fl@eC4h?6(W* zN(nOss|P?f&B5`aV!j(z zmWkrx1-rZGVRut8s7p^-)^&=|40hmR$e*b`sUP8f3o){NU{XplYhvKOcV^M`d*xE=pC0~74n9i#0+}z z)#6k6t+W#$$IyR>4(D5!UN5#ho+d5hnFkIjyiuC8 zhjCmZb=*sewlq3yn;3V6xn2LAiqM3JVQJpvuqZi-t3AM2QQ_H6^DP-HR{a1_tGOpu zi3a(WEl`e_fTvA$rJ z8V+L;lIlL6(Pev#5hg=Uv#czKe87N;4?0&D)4W(8BTzE!GkKI-73StM$DFEo7~35+ zyptVjQMywyKl-QHE7-!0o^cucK{6tvxoUF$7};%N;rcG=?9Is@gp_Bg4nb8Gu|^Wq zGX7qjaBf>RTf~j<*>($n#N&ydB)~tW)W>C*95vDQE4O&&=f;Ov<|a%)ONeSwO;R+O z%`dG8)Ivr>EEFEGTGYZ7dA=5!Y-C705*e2GD}POr^Z_NkW?qbm1>SUpR3v9zTHm3m52VbB5jN!RET%7-IWwl zI-|_~7_3RWs#2@vOKA`$0V_6Gi=)-$0P|I3y2?35g>+TL@UOz)WWcWa(>n1~Y3PdQ z!!_F{4%MysppYVf7FED0TZLq1dhCy8Y7IT&WeX1x9>K3-5wG`=<4I#D6z|(BE!l9= zhY@blu&w@^nBzrh<3ir>Z z4}sf*FY{nP9Tb8b=vz$3@u*;77nL&*;BGu74dwmA|E3&(@m7rC7S%i0HSn!dE?`CZ zIstY|J4Z0HxzGDD$|of6qbC`ja@KQtz)(^G%D@(aKU%g2Tdit)i%t?Hv83Cx5&;%K5zMziX90Pb zFfus5Re}hhtCCnZFEo-?-u+XPo?2kVzEM>Ic?Ay>CoTmnpFUQD`KY`(eMt3WsYk>v zlQ*q@GF}g$NH=RIGE>KDRcN$0>-#bB(!F-SxeHO|X)?CP=Gqm6{IDaE@v+jaW_ix4 z%d^Sjw!!T?)Ms*wi1z_T*)s1a=!(|m`U4%l?ZJ;a@UB&B>stXNxQD?;<5k^BY-*DW z-ck8~7wd2YHL2yMoa_S20&>5In17`~<fTb! zPA1@EoOliI_AY$N&x2_Iy672qEJ<%TK6Ap&0-A*1Q^4&=ECC?Fccy)VJt^GdLt)A! zADi`UivJ$Z7bLFlARn}EQg*|YJ;dQ>dO!Krn2d$F@Z<)JJJ@oS79H;uD$(X>WEM`; zP)q6*e~UHoEKz<_nV;B&6UXZtu*Z;IeQw&g#t3J zg^FfFG+r~An0G*|TNuTka*;SX1U?TS#hkN#-rHF%aeXhOIEb+kZ!x~XCBOYDZSfy( zK;ymoJeyE=y(+$HV0(-9G2nS|X^ub@a1do`E0j+o!QK?!9%-Ck_FUYhqqGMe>{H4}4Zl+Z`5Js&A}*mL2CqKGPatt>Y7{A7umf;slBp z!|bQ>^W6a8m6GAxt9=*0cc~JR_~P$z#@Pwqn$Vd9b5?%-f>Ra!q#f^-D|rk+uRk_k zyDHhKaL6PH{OUJ5wVt@*7Ey<@w?;iYWu|~!y!{eNM_9|Q0}N{$Z%oG0{5w_v-Tryb zr@B5i7^ZZyC+jnA!QrP492i#*pZ8%-Hk+Mzqm~B%S9ze$bK{EJf~Y2rGoQ9J^BR@a zF_^618NGqjmqyA;<8!8HsJEbrK_VW8yZCofwceilUO#EyZ-&o!@jKR1)bwztUQDeN zc6T=|Tb#xEvZ6EJ=vkEd#)6F8ITeXs%A^jLJO|@9#$hd^{+lF7#(ik3j)9y z8P5=WR?aUk;UBKAC-kns@qPNZj8Y3FE5=)^DA==lw{}hRK4AI3) z^ldHeqQYAdD5CW&@vr5Q=9GL8WmT~mH{GHr13)9tiBIe4;x{#Z?3%?HxVtu!$SSXG zBza}un4VF1{SGy@1qEvtU_CB%V6RA}pH@Lp=fySJ72u7wPd==}NM16y&Rfpx9d$#- ziAY`=n(7}Tqz1c!JA+18Vd#PX6w3Oq+{-<_q3~D==P|GvVC+B2{(rPB3#H9Y#=EPZ z-Vx!3wO7fHA11bW&;9K9-`X1dqpew-NEU4w^2Vj!ah<4lKhH>^zTMe1I2kJ zUJr6fFGMpJLij55Pt1+~`qT>&%NneVb)pqdn{6VLf^xTbUY7wg=OIl!&N>;FcZ-?Div>usA!vg%=RVSIYBafL^Ju;Yhn))R+eR?hC-Ptv)LK!KMe1V6T3X~uI3O=w^5**gU?LNMn?(_dikr$hHswPGoo(Q zBO|zV`|Uz_&|;F;J#M0it%g9k+5^GG{=LlQjxks!zVt-= z%4rLIL;2?DYHnj{;h1vK1dNgL1qVIg@6*5Xg@k4AUnB(oB5~m#E%EiI?G~Gf5|>Mo zvZJp?R!f<|*e0WJ-PNX;=wIxP(D~Ri{4!)=i$yixB7$bjO$+bF=~uLgbdT3WT#%lp zA0ozH?Z>YUYRF?Bm9ACjG3)l$FsaMQCU7lB-yu{R=}F`=RsoX9ib2zyb+eOk@+nwE z>a16H=K?XAyBW(R4P>3Z2Ru=zZOIArC($XGNz3eWP-00e01C`{N z*C!hMW}vIt+RNoo9<#J6#FA_&G!>I9KB zR%)4LX^XGD(#N&6h(~&ZsLtp+s_MP!EX@n8Sx&_>KHiS>!l_e+ut|-ig8Sj#n%!Fz7*WlhXQgH z7$W{D8~`ygq9|DsFLg~{fvir2owojK?vJZ$0J)&P-iP1ir=HQfaRXaa(n-_T8fqtx zcH<2wx108-I_y?`N@ah{LMb85m*(oH+Xfb_A+h1!^N9h+1>z zZ{902RCl@6cf^Bka^lxVtE|O*l)jIBFd5MY8?C55n<>-h6=w~{JF!ZW_BkQ#aLXJL zw(CVKYt(T(kFxJ#qtVpBRE1>-soiW@up7ZU^?^dXA>7mc8w$f~f{njk1M^F1>2E3F z2w;T&fdkKCe6ctLKlLGjO!;#p%242FiK(P0@{+Ck2Mk|`4EuyPA}Jc~ zHgT!YdgeRO;SWb&^cvVIlTM0-zO0B2iyN=!k80Qp@;_E&9I`q6zpV&-%&l`{522$j zxB2^5b8G5dzt9iU1~-7Gc11~E*CF~pD1Z%A#UBpS!Ha!#5GB8h4eP;hGi1L~_7`8R$Qb^YKcTw@W(E9x@K@GVt^fYWe&7*&`k@A<3Mvn}sKS=#0hKaX z;U%-G`TH=y2E?0(q)}rMC$Z9fT=I0PB`YmU1{13VdqH}0Z}2>>WkvVT5=o&cq}DrSBTnZ$Vb<-aHR$1)yTmY=G?C|gdAvV#EU2{2=~1h1KL7alKo zo%klOKY*!JS$3ud>G6)9Qk3ZPvoNQ)#VkrR4?$EChr1b78kI;01TZY->bmsiTKy+e zwmz2!SRIkt^VJi}r3)AvO>swwPk2L&GVS36EVrp^@i8o?kb8Gj?7N0ov<=nZt6g=$ zeagY`=n0e(x=Gc(B>=>_3pE)nmQ~-6n1^?O9q4vT8V!aN$(oQK0%AB6d1n$rK=8;Q zPRG!>r^uz`Gr=A<)i@E=Tq7K*b=pRyw+N&eR~xRm?D}R21LVFL8B|6Ec{3-xhQgl# zrDy5uLhErGxCx$Ja{HR}!{3nidnbI%xC)3Ih@jPHu(fOuAkR<1^wFz-HW`VBG`0+` zeE9m^chL-+=X^_sPVO$=9Q>3Z$V}&^BGyd`M;LFLV04W&iwUsUeP7Uwm@^UBUF@brf{pTXFIh*sIUHN|(9 zG{By4+1kyufJWTQdg>$vaQ0xT=%tP+^0ZC$?oCtIR# zL#ooWilDXwK$+e7H!MSRH`-VGLC-LX{dxZ6XL#(fmBz84j|C|d;X(x zXBqxE5D@h8M6k8v(EbF0J`LP>qEJAYfV!|KlLOE$0L&mGRe08sp$0wr%?DnNM!WD0 zHjPMEeq#fMzI}ZS>RLn8KID`I+YaPV1NPVpbr+L5-cgqwxgax)!rI%s4%x0_o?dWU zrd3++w}X$XqjU<@c)l3FcX!x3)l&l|nA;~EtOLaIVHVqYT5gHhS)&MVN}NX1`{( zi6Gz-Nu9UujWQ_CpC%P*nD1u6+xSu|ed=~<0es~I7YH)03Lhwo)VEw7jXkG0v>Wi< zL_i?j1_Lccy2m@yn6POMCt21~?sxfhdGMdloDkq|Sv2POoDv2mEv4o>vP9t)K?~YVQxVZOV1>rLCP3zD5*01lYlb&im zM^3!mJ943=p2?7%^197?(-n~5$#dN*tnz~>aY_!$^KzCw!zAwt=9gUmc0>uE=p5v6S019Jnlr(i#PHAgI_GKA|qf(<~`=v8!J3Z6mXQ1~@^ATDbz`T0uB zagp9|eH3-?Jn6Vmut;QF(2|rydc7MAl)gi)YSmVxu_lN4Ig#uSE0v3i@xYHNev;2z z;5siz&J>wo%l>-p=)in6@*H8r#t1cn)_prnAb%)W2h5X@lW&c-<1jqnuB&fxXwl}ci1IR zJ$?)_!PhoAnip1nvj)YesxTy=p=Ke`j_F`UbehnCfcyBbJ|_Aary_J;EDCqYl&V)S zk`!MX5QvoD9^f!3v`@eYKy)d*PhTH6p}wPSb;HXJ(!3ca73hyu@(6t|q}`&L*6LT7 z@a@r)xND@=2&shnsq%ZAHLlWlOwqma>O zm`ZaVop-cC8|F|5f+MSi9kV{$N|O{dsrld@Ep@8MW%ocm!0?F0$%RSTi@gCAiKt4;F^ zA{aBclW8-E{m7=#M%%&>om21T(dRPQ=UWzxpjKpiAuc=vEuN6o3$I7L%eD)8v=Dv) z99h$WZZ&Q)bX&G`GSMz$I3AP3g17Mp`w8~>(r*B$R2rX2w(C3H+tZ3o&66jE&(Z_4~wQA9gKQe zjdKm;Grk69+rw5G>vUG5NN_s|HHKU4VGxN}*1DuN4y0phSv9G$8gz^bI zc$PxT=+-ZQz5LKwIWEbyj%E%rS2+ADbFGb}2g%7bl_f#l}1x=y_VG2^X? zfnTpMiG?e8!lXFSxn|0G`EU1`1oiVs(FHT=?^ma4q;e_M(rzFC~Hj#bw3hbXwXlLF@3$ z+SYfYd@19Z@x<^y&vZ!}r9~t4Z+*2dNDMUDY2Ie#6^sOZd#$S<*54qBkY{^nl$y_? zm9FAL1sJhiM75;=3sc^8T(JU53s&aB;o4LRv4-rr+J4)m;a00sfj2ZiTT>G?mg6ZI zlmjt-()VU}J9k)#NvJ}IuqWxK+F3iYA8UXlsphrMp56haEYW6!rdFG@MIQ#ToM#&H zuee6bHTY3wB_pD5nMTe2VsP~%O+iXkyZ(do&icyCcp2FOxU5(pe6WP;;b!YCy~pJp zwl!E!im54PrFF<|UijgnT}!7zMJO18T}UiW(UZwyK;;6*+nuv;cebuBCFQern_S2( z8JVA{R4Nvsn^Lsh!Q(f)gHKdIL%rGja_;Q!I7vAkf0em6qHyHVE+!*xSgtk&2|TdgD`voXH~i0lTr8BntxLx6!(p-@}bfE z&gN%-JY{*(gTFGCHq%vNl9L%u`C0GCJJFtOEWyfOt!3v5@WdpLD=sgP_Pu%guJlcmQne8^sI^Z5XpM*YcIUlEz;&J!4v3S&+VwDL<}>7;{I z|I*ZnTD&`}Qf9;YIJE0V+MC!V5O;_2%eYI94M`_*MXhzx44RuPU$>oMg|c!wZDROP zaTj%EfMfSTlAOy%{uaG@t@PAJNd?1A#!7lZukxr_wT1; zWWI2q8)dZ^phIjz10grr3Z)h$j42$3g~L_5^Cdtyr@KqVtox7Iu{a~&LxMY(3=Udp z%V?U@+?pU7-%!IuvI#^rL|!yB1bWjBdXKMyl0OM~bzxLyH<}Hdq`Eb_a};O&9;}tb zD`>@HMp)eYvqEG}B=#dm&b3e0`C89mq}rd11tO4O1;c}mI2V2=BLo3I&=snscET*_ znl?|bL#6K6NheKWg@bl?>3_4XDB{t;P(%kK@27GQKuU@EKZSk2GrGO(Yd4l|*C}v% z2NbGIF(zY?oGJX8{Wzk=hQl7_Rzq;17qGU-EA8+osxep%J!Q*i^lQ|7j5B6E{w?y! zW`e?0VfNUP`|i;xY~!oMu^QNo6X97q-iCh z7AkRa1DLLKY%}00rcGILBu{q8Cq)c$b&i2OfqKCf#b99c@6f_Oaz^xc5HNWijRDwu zZrz0B1Y{vw%@i4Lmr!@L9}^K6Ym%c(PDxN<^{M)Ph1^>vt-|f%q^+aG9TubLLq{qo z^7Mv{y!r^Q!>BJLcsnkEW?@$plaM7qlKyhgUQq8@usRL{P^~D?hIS)Kj!W@WpPzoo zT54cMBNCsidK6FGSgHZAQhWqno%)diYLWYv+gY4^*71 z7UmWhsN&MrT5#+8d?axNV{~)TsYO}Z*j|qxHX*eB5)1$FZts3$+7cm4 zFUGmgbP3Vn08wbTeh~j0f_qC=Z5Wc&hR=SK%C&`itm1IOb<|-O$;}viHYx-kdVE|5 zjj&fGiK0x;HH2k{RnrL2uiV+&jw#Qi^Kg1XKQB0y=wc%v%nyNc5l+kVW;bk;;4Ema zvr8gqHneMiteth9=iQ2#pZE0RYEp&n=VSzR2y~={k)QBP)+%ZI1*2*--%D;pO9_-= z2cb%n=*3vL5q%2f1T@bCh#UZIXWj z5pxHe&FOc^*y%|A5wFuEff>bc#Ewh33tAGfIYC zk|e`6Ks~-+Bd-C_a-k9QJU;vdM8?Y=Ek?J^U$3s+%Fg@4RSch8iMT#}xzfg^N^!;} zy>BOyw22W_hO~vM$H1$|F>;37eqee3cOd1;grZ93@||dD{tWrg0Zi%*k)QRMtH#0* z%f>4663G`>ndZws)kI#sqQh?q+9bJ5(qLDRc8^)s6q08Fg(!!Fu1TuSTF=VLHd>CZ zeyEi&=Hz&M{ipq9^naMh1dAOXV~3pFMQy-dkAIr%%Z4e*#y2nX9Mvey8iq9s*JaEd z*`ce)@bXa|5l;~_;H)>PG>#!jAk~djS{e6A)QTItUZ}0QimaXmH>C^kj{Q)JtO_k( z-mm4zRR0JEw4`hE>i1z!t}CcAXGx7-Nd>kY{9YQ<`V$l~)63&7P2MAEr6t?zd!g;1 zgJ7yLdbwE_S_|_;E1!b;P>}3`DZ;xnPTkXsjCS$D>*IxQQMZ{hpz_o&Y199_`u22v zf7cOc3d@=!ynW`-^g+iuN+J>{{#*<~IWS7b<+fS~X#FW=5aYSBH2~gXC2SKNAxF}_ zR82h9T{Zc(3q#jPdjRJ)zCnDMQ2jHuQ|5*`*Csiq#p;E$V^1RRP8}2rII15YjfYCm zChw)Vg?oslE)pZvSr!o@U3`Bjh|l* zIb^+gdPk6giEh(3znQ5s1|*E?#dM!4Z|7Jv0I_Z&zqQY_8PB+JdBbZ7&k|g9a0E@Y(OKqKL8NudkM4LP*VADG1AT)aeSKSre z&X7*dP0823^&e~~E1!1N^9-A#ESXk93v(pb4d5af?o#Cw`U-s>#U7JE9YgGTcw~F0J|u-Dw+u#0TNEbPp;BtuQGSRVlBMGR-k9K347}n3A}9 zYyl}p1Ivj^taI20cWAx~xU%0_IhG168%zm&=2{W6YT4;gzsly7MO|aW!A-|TOwZU( zY@?WVv+Qq}x*z2D8uTsUt_8WclsMk+Cq`b`iZ8c!LuO|YuD1Dn?@bL?T^qMe$?OEp zz~#4mW#jsT54NWvlLu4kx~s!tqUcIW?)v_liQtQ2Hati8?VC?^N*)X-_1}{=O3EYz z2rSTC$|?j1CV<*~L&rMlyasu5V(E7rSzA-|n21#DIA+*f+}x7v!smPIwE+ky$)ATa zlQP;7BVwn58Gg1_Y<>_6x#Vl|nE2-P=Xa@8kK)Rn59+t`CIS<-;_V|xc4KQmJh()9 zkZTWh6mWNVpI&z4GW9Ljx=1hp%~c`U)`^W0 z3iRo^@A^VAQ`ZH^kS~mE#!09VabvG%)ogMHR;@Vbb%a`it@W^B1kAHIrLXSO-L=|& zd(Uq@dI=bU90q=FXqF!CklOTEAl<;y^5qea?;;2j`@ogyK=e>LE0`ez$cs+GgnI5h zTpiEr4R9sv9TmStu0wsRpIvMB;TL46($hzbvoC>F0~_)b3uyVF{E(agCAI8^3Z?pp zP=LuL{l`5ur?9V$9l`b#4rsU69iJ8wL453`H5^xhF>;p}0ZfxmZ1xoMZG^9y0_Ds? z-WvLK(aI;CRF$P1?R}Z6a(xi9Z35~&BEkmd7a%g*OX2V_aes{YAzI^bW`OT=`2aB1 z!Y(0rbesdQeKWctpL;7xX4;TO?JOw$`JW+@C|2xUNxWCJB1hq;wiG|mK@#`{t7iU z7f?=&maYUYGi!tylhqxGJHQ}Cr8h(mDCZx0MwP0AJ{n=n5kY-x7CWVs5CC^c%QziS z;FiQpZCC?mhm6^?a!9!d@%r8BXS>`F=Z61t&JBNK#rK&=x_~;&o>q;XBd_9*aWa|X zZ)I8EO2u8~c8(3Y6b^Dd1~Ub`pkr;!TEHa^xqxIz3Y5Ot{6xM4a|Xvsmaus;!ty7r zI=5g#a}~ruP)hOG_wnnb&^mg)W*UY!!QU_GXz93 zNsLo!2mWXry1^ba2q|O|S)!gSSi8WZbAY9!!x!yRKiXQF@W-|zRN!WT0Z7HWw-~v? zAH<|X!<$ES3yQdpVY`Xg9lpzIjqo;yW$&YSy~T&f$lqTw>w1??Z-UFyIBdR1J{r3&t@}++){~lZv0Ufwv@1)FwOy0aU zCKRa2ijjkc!umdxL=)DF{k&5^%f{IvKk!TJX2dm0Ktpr-R|()|9vw!sJ<&EvJ@t>V zIkl?PpRfI?EsAh0Rj$(#b~WeOB(C>I=Y*;*%J`if@3W0TCYBu!E_BRcL=2#?J-4ju zJGrwDFAV|v9NbHNw^@;0C@;+w&EnCmTxTEG%S%S^Z-@9!Al5SF6^G5ha!L5jW5c{) zu`+5!Z`x-$e5oh4u0K&PDrvgsO7E!&Y~<-1^Kv}}Xo&l|3PRrpTshTqydJeT7U()( z;HyqgZGD!XUrr))$G~1m*D3(YG=eY!s#IQeRh{kYTq=4g2@g_5&>1gQx&W$S^UL#F zx%&E8z3Zgjq#uv>Y@1hyAB{6|X?z zqD&>CD^jgPq@ZmP4&Mx7jSlM+{<8$(asa!%z=3tKqmF}xf}rs#`QVHpfD=H5W+lk& zOeA^doT(_5eTYVtBKSjI6ZD8$u$@6pW#rskInCAbGOAqOc|K#@kwvGXgB9V()HKMC zqg%(`KOHhPYUeKpF0)kI-?$A5{W;f)nyK59qP9(OJ_2)}Lm_xWVtdEueBM(hX7AUx zlbE%w-fOFR!^d{Nc_Siwr(S?AYo*+B&6lkv^Hy!KX7}28hp)BC6YuKOSG;bmjPE3O z8MBp*`+siak8%~Z8z)I`70B!(mW`|ui?PUPj&y(S+$5pXQi@ueKt>VVG!Y~;X|dfJ zLKb7gZK~tKuxkwyn+R%V(u<%oS*F6K>%0Pk&s^PheqeUintM#$1CHopg$Wq&I4m-n z@-h$%Y!{L<=w*u3CCaNK62~0_@#4vG-1d;X{dMnK$?)(PfKU$K!CAdKu)9PAH-Y|M zo}KO8-+RIVJg?p#e_g+icP63B%c+mygq7eucx2%b*KR?i_ilnJ5`%&?c{YYDLa)7E z4U4sXKUFh5Z=fW60p`ZIlzu#m!#O>5cEhane)K^Jfw)#a(P88kO2h+TstM zUM~-n#5!)?nj^NQ;fX(7y?q-1E$?+97jHOsdxZD6jn;n-J5k|PQ8(m-maGq>6O5N2 zp;C2d!RX_D18%+sPj&}4_K=X`Uo((?^njs`(#;DZP#1aCn!q<>G7V>cs9I*D%)`eQ zU5Xx;c^RpuiK0Y)lzI(KA9>BKJSeh2Vd6KhqFml(%;AT>o^9H(E0Sb+I}FCp4fABS z=&WIbp~~R!F%RFm2i99d^X*&q8LwOS_E)_IuC;Hb01Dv~57bFY%*eoGlJOG`wtKO^ zH%JhZFdnUI5lBjT{wj8YMhfwY86<_e$N))OEVv<{7OQC+=!GnqUovFgqQYkOz4d+e z5C!yIyg979+1?zG#(j7Gp+{8&WavEa$UtPAh)pdu@UPI;x9ZwAB1zU@&qzh`|9A)* ziTJ-f0vok@OERJBH{Llu zh1{W(U`<cKcciy2V{+%Rg^;3w>ON3Co;QMKgw=fD3_j5y(wDz?2jn-&BHpkVvXzO1v%2jH zpb6PNd$~2i>2kFd*{v{sz2(%G)R>4Ef>jf+yBqlT>h(d9ap*T`gMzLIvGg{dKv~OP zG$P0?Jd;$9Oo$|ia_5*}2d6KR0)A+NFy3$#^ybfpNHuQc#@QsWIx|p!KKUxEcV&{q z0I@uv)&;a4(Xt`WWfA&@iq-I9N8;!MfXA@E-fh`21On<8bB6U1mGuvCuw}(#VArBn zS}?$sRUU~L>GFkqOw~*=)9D&wfIw;t#Xb_sh&-bZUslHwc}-&+j9pe-6G|wa`6tL4 z)X*^Bu5B^C$+_ z1(yx|f)K;sy_UxqYzPsa2*)=ix#NMj1%v2p@_2Rrxq`hs@Fqr15<+Z7xScj&iX$n? zK@e9!6#)xE$heepF2j$EZOT*w@FG7^M>b=KV3;Qukpk-$@<}2#P0AZ|-p7#>=B0DF zB|Mo*XTuT80G?5?@C6@$3ThzfcNvhP(R^Wsv>0)h(bDw2ctesU=R1zr(lOm<` zNwssB_(iMC`t|S<>bz}v4M}`z*@Qqvwf6Yb-=?1X2x&Qn6eIOya85|I1rf%xI3aHO zJHD{C(+VlIw^^xvOJPcR2<9#s^5qrLG9PAanchbJuVi)<(6ip>k8^*nt8C5tIzzZ|r# zh%5)q(z6;Tb!MZiR$av<-AZhSZK$^-rLOq8SJtpN=Ye0s&nxI_AJWcd276|qo>V#3MDtZuYi;D0Do{yAaFh@M61|W@QQS?Hz0JASCL6MA!2E*3QqG zRlJ3{gyuAAYXlZRmG)tXM2$*#xy5vH8Ae_r!6JJ8vw0Wi| z1xIabzA?qDPMtlM_*T1g^5q#_2#wf&yzPxT4-hmvmT>c4{vU`P2QM>Xfi6Rh(Di3( z1`cN zNEVH<2BfmzaRVQgNwzC09}R}NZI z%-J1|H?SChScb|G1Q~x6i%=-6%2uM``}OYKTPdqdW+~qXXpBjhY3Kojd{3m+BPvaD z)0e45|6=4>-u%k(wL6ZV-#b+u7tFQEf>KW_vQ));-AUgOu|+V%8b~Vlr}Ckm~GZ~usGC1icX`GL&JuWj!y|fS`S|t@^%~c!nZ(PA#|Pj-8=eiP;Bgtby|? zkNp^MBRJjU98HTnFeN!S{VyvM?gKFvW6(Vq_vc7P(x+(-Vwu<9zK7nJ_{$VU;?a$J zWz~Qd=~(TNv$!ySwGf@X?1;l87i~n?10Q3dHP{8|s@ZuMXgz+z2D1iww*oCB5ZOwSqkU~w&xOZ3=VHN$n?Xv&? zFiI8J9!g}rNWDyPE3BZ8oHaIr5VRv}VY7wk7Ygc45r{ZiLqFvs$JTii=zujlrJe!B zcf&&!Dm20~p1KNvegun>4)(n)K|C2@PP@06dE@{OyS&u+Ny$Uml~+uq6%pw^C6MbU z-EU2%+-XP0TI(`zJ{svc!-wiGG9C-~C{-OtuwI&5oI<`XaFN_@@YDR#s&u1(Z?sv9 zu0lS~FiR+rS(Ei~Q|M@?_tL~eHmAmio1Sezfu zxI$Rcm_PR(kj+qUDGw2N=+?ZRz>qqMA{|n7THEf>JUZ8o4x9Ei7C@AD_frwDDOh~i z1||W6P~14a)=VL-&WR6o^C&xQc4C#sQinx4_!&`hc2TI8*aEP#;Qh_{ljYPOTPs&| zI`oSpw*0E_5YZ`LvFC%Pqs)7F%SolDB+_mK{?jk$-%~j%^K52djrS};-pV0mhZ5Cp zmI0SzzJOzWu;T=}N&42SCkLP-Fg+*hV%HDl>18!>;!Ew-2eGxab>H zO1uAkduET#q2Xk|HHnXEL5I)B%b1O)ex(Z{Mcfkn?*ymao?KPaprG?)xW~G`OR>U} zSMJdwgN#g%PbcNSz;YLK3t_+%JCx}OeKtNpt7+||rYWqacKnIFkCN!g3W1* zU&{uUSS*YJT-hv0bfN(+J>L>^gKm+zQ_ej~3LycPe_-V^-kd53n5a2IIccRl4n%&ic`)UqBgd2?_E?BUKmjxZE zz=gg1M78mIb+7$n4ziVP%;9tVxzQcG&{lc290ZTI4YP86c^`lq zs2YxTX);PR6J5Oxm98vNhVO%4K3T%%xQCDEYgRAAom_y7=5fU53*v5rkC(f~>}7Z!PC5daIo%gC7S;%C9hcwB7eFh^W~Cuz&? zQpncT9p9(6N@CT!kh*}?jR6ZC?onEPsMtEVTo|hMN5<;%-)lWVj&AY=8UpATcqsmu zfyr=+$r=Jw7B?k^W4*uq3ayA0A@ITP{=1n>)xh=9^!$#c+qIN-rrVN_3z)NY53 z$XbuF=p_2TKlC|0r(GGCATO8407)mqSRlg}RE~uJ6oV zT52R_!y(>U#Y(}KE2OV@e}IL&9uvoc%)jNzU0g^yZipj5VHjqzAV-LUI&3kFsk7At z?Kg-VDxiT^9KGRv50_J(Wf9}^c)8cjrw9$|cJa4!HYpeT6{M=aiDP`5ZgrcKUhU?2 zm9MjOG#!;Wo6|lhq4nc4nH8qWuH*qjWp*>&o4jGp_0@t^Cei$t3mWnMM8DY`NB`GR zLp^}|dSo-_i=5?o-^k$ocUKVeOh~IRLLvPT0Kob@8X@3xp7+)M7F-v5fZsz;hV(H3 z7*5nrmHD|yiu_u}Uv22d$q+Bfw7T&`aB5Dv)=B1&kUq@kO#H&?kBWt+S3&eg?6mUF zt3|HZz?|(k3DjMH&+O#8$_b#Rk_hLX)U*Z%`)q>{9mc|o^a3q_G}Ed|=Mu&DxcZogfeOmEsCb}jRTC(uBW$_nQp4wymq#5EReyi9<)PG}(K?Te z=YD@kqK#i+iF;SzP{3o|n!)C;ACl_F1p{XMXVwFGx}d1O7O@hDr1{PZ20~e)KOia! z$cSJWdSSLN-BvqhV}Ww2wSIYq8HMyn=6OAGj@n(wy^vj?G21#=K6JUPbOSt1ywTTZw-L53>boMzB~+KVfC&#lyhQ2;#E8SDb%k!) zC2Y^H&V5%{@x|kmW{kTeLu&3e7{Dg1guHy-K~NcN4dqlL#;md^((G0^fg`wIh!A~N zQ8oY{qlNXXPOsE`qzSXKsT*!hc<_P&mFD$Ro6IqHs#t5UY6lR``Qv&3H5&~7hvTD* zrjoeO=c2E|2{&t^5-#2pw2aqN0!o(-Ljq-IC$zloB!!2V2qL+w`-|7V4Vtc@xu&$P z4VKsIROP_iitd3fo<;+G&*~qh=?wz2L*pb#7op+G%lt#Bp0)bC^g&+fIZlsdnRrc) z4Xs=gCI85!T73Cf$QmTc{CQPlaqR?;S8n92XNR@K-MxoOC4*o0f~VnfJJph>4wHP6yN(%vs!Yq@9-K zF(1s-=s1rUq!tRp&_%9+iS@dwHmP~MDqd#-DebUh@g~3WYMNB;eFslP!0&{V3w*FS zJ@A#*(ba(FIKQ1B46XyPO>`bGQ2Y+Y7t#U()eKA()-kuI=3g?}xGEv_!^ zt*SspOh|tq#76wr63%&OH0>l*jtlvyj}tIY1EzJ)Ns zGp*buW{|BaPsuqj6@Zu>u+oyn7}6QveKB3jMCCA)qV?>H`-o1LJ2%85|Ew4XTh3ld z*A5|Z67Zy4s`2ejY`dR;~jab*<9gM zhy4}axI()`zgFR(cl;wwwR9Ukr93G_wT*0avzKN+MVP1%`Q5t({tSptRgIZTOOplL zjd+fiYOp*zvlX!%H$^F$*z7SrrOa^bEXYq}-@pEAzEs;GA48%5^j50=lkBX2^QPCg zulK3x`Tpra3&0HbRN*0Yb`q6G zrw`#AEs0$;2bxUyzR)BKqm`qcbc>Igx6utO2e+mU0d6u9R5|@yi$BQOcaez-KSNK4 z{{g-s>%F05ulf=et2FxEwO-A!ZV~GvnE~c8I$_*apG*Mg9|`+b1YPqimUx00ccGp% zlnDWGBx(58DG&45qIr_{i9zdyEV-88BaE9{%eQqT%4q5Jtf-3gOxEO#Y#3Lb`y4Jq zKYx-V07Qle&rN5M#8Mb(6nQ8K8Wjd1aLqr3urkml6GUz&YSnwWZ9K}Iyr46kJzy_$ zoz6iye8(>Z$|AMvXr_vqOMo$X*)h$>Dgrr_wmDl}YPJn`222|fbZkbj*@*7BgigOd zEefPIHfZad2YJ7I9+rPWL6y!I}9EQ)fF&>H( z?!wOBw$C9{a^&dE;YQyt2e!!W7c`qyf2Y4lcf`uLfQvSmnv1Q}(yya0$zDlJls~Rs zW!*4rq4yl~H@H8=S- z0!;8TXN3_)ERb3+Jn`lASKaPq5=>A-f-LVDx?~b#K199AW=|sJX`T@7)mHwv2DaT}!YE@* z$AO`ys3`t)$%q7xQ|0(OMlH%F3xcWz8DHm&c$wp5;Qy(NQ~5w#hWCfcugdEMq+WT! z*Dye~mk&gWT|n}H&)`nesZ7x<3&8R4XJ528O^;u>r6y|Y>bA>WXC!#WH^rqCw~E~Y z&*4o|0q3=v3jEpgVH20Un!h|I2$3Q>gT}lTCx#g9rZ-I`b|u#|bTNRv{7hG`W#Orh zAw_e%vz5rOAf}SlSk-6(>db=D$iXG+u?21=EF z)%b8}bB10`Z;k34Z^Eh4_02ePSmY$-Wjuf?`E{ia} z#FmRVvLGa$z|vhux!hmqA$r#rLg=5gvX(u72)6GMne%_3-J<}dkz_YIpWk!0Mkc}w zy_=qe&mLD|&poTI0Bl4_#u1m(kSZ{h+Q5^yzyJZ`t&-lQW{Ew-_l)3mb6*D8dc!>> zpTu7$p|z&*<^AOiH|4%B7C}V4h{~t~3{DydClMY-gzQf3dy?>~2I3jP|>iw{QEM0PW49_;7Q28$ZgIAjkA@ zdAq*r{F|eWM+bR`QFta7suRkF;B!h|m1C)K_2f z{W&#Sv{6^;>d2~aft9{kstq1#B;o;fW&?&tg*~l=$5s&N!)8|PvY^auTajI)Svq;L z)^BaPy$KRR2B_CXL+K$43KHuRT)myXZfxx~2Ig!+q3apOg^sa%W+w-sicD41;JC#9 zI{0lRHNX<^iJjKQ-4+`7hhg2fb8+MKZu~RlEB-Q^QE=}{Ffzf(x0n0RLBGi9 z+pr2AxY^KQ7#~G~n%j0WSwaaXoa>r)j}u z0Xne%W%>iT*3(nl`bY4+o%w=ByrliRS|LLNne{ZMY;Cn+(~Zy~z%Xo%p*LtrxJ6G- zYBLSkBY&mhp9_~OxUwW^vykKCKIcE3NZZAS;Cdbs;qF6(6_?6ty-lt+auKPIkNV{9 zEO^sRI7l4*=Sui(Qh|xGjZAnkZWjUYsnD^qLVU3Q1R}svX%QGLG$bU5G4I!gdbkl1 zhlSQDtCE|hMN2gIWpvKqt?1LeLQIGiT zWU!k)Fe{T7D~Q^B?s6_wsKfylf_MJitY*{8Rsa$4i;70@rPqkI-7PlG){0D`MY z4>jNqHRPu{Qo3(Z5X;O-GAFD_>>+#W5=j&}iOF~u(zd@=XJrIStTX_abJ8o}?3$^l zvrAz(6r9m#;RxqLAtDK2VkxYmN!*qe2skVY*OKO%tslB@-e3kS;Zpe+|T8gAS6(f>W*~ zSFTMi(xndO5KN_8lac~NV)-r&7@IYe`>ftZ8(J7Oo_U9HDVI5;Yvjkrl$(LHpZ5&5 zlwS2^$nj;5>3{vBg4u-&OOk^vhl9dTkF@9U4xeJnQ}l4Mp=LUd^~^LEkTwPu0KhWiDXDwQ)U3@vwN&A$or1CgsG*D z;dzu?Uc;zgr|8#BfxwP1PDZSW`~E6V_k9)iJ9mRYDT{EDB?zWh2}_zswWTC%MQ3Zt zNO;T#9YNg8_m%lwM2XzV8K7@r2IDS~+?W!V{fHEspF-sxM#zjR&#{W%VM4}(bEehO z8jdghYsNsQ)oumQsPVIfI%4F>!&hAL$5LEctjSJ?#rj|Vr`|;unBkbZ!!{ci{8&}R zlz|%fVs%JAf>3hoOp#} zFtm3nJSH3{D%;fYCfm`%A_JcqYi%M-#_p=x*WHynpD9u@5-CkwI?5BRi5yKswAeOHE#;!bUsTl?|EbC@baR#icih#E|%t6;vY z6eE4n-U1cCvCr1=y3NqZ!SVXa@z#;-VC5bTAImpRk3V}hw{~{S)6LJz?$qPZ5<-|5 z){FIg%qMbak^2vodwciRx=r8i&W2;JZ6Dohz)u^UP${=d>O2zWqRNB==aUVq+6iTk zPf7;N<TvdC(C3p#3y30l|K~WQwIE_uhb@DPlptYaq1T1;@+_?owoxqzr;H(UV$ zL19ix;j3WRqLZ#l=-_(6aUZ{ykUE=%m4t2;++G37lMerh$D;G8ndB_D(r-Z~hiEl9V*&=`1sj+0KwIlbLIuK9D24R5#A-+V$_)g?Y_&lNk zs*ZmEx%G7_A%)u-zX87qA|!dICS|6*21cZWN*aoQ`sNa4H6+?=5vM~a-=FGJ z(@<@(fO`WQp&tvtCURv++2cCEZPtZEz#W{(-%w^8E#)fDM(w#L(Qm;CtIDDxqme0F z*B!+Und-tlWpF3*$4|dil+WlaZ}dvLG97Bo%Jd7{^I_vw|IeO~3tVN!;A`RF<)0LC zkQea6S7=7@bQR^LEQKUv5kphJJ%qWFle!uKfT%?Jk^$IT?5#CgoB%5iGw8;$7GSiT zKD=bIy^P{L(W3dW*H(9Us#*X~RV^~98dF{=^gL>@P?~wAUM0x?HNN6;mwJ23K2@ux zbBprtUMS70KyeQlP$(&XW&HV#sW!s(gwjbaxQdOq74x(+J9AF*y?W$;g-xZZYUIEg zpk22#b1u%B{&TL%j~B^U9iCoP#k(nI=#^}HzR=)Mh!8Qny9e=Emimwy0%fKTKNzwn zF#u*52BH&rm%fV`l?m4*Z*5+{-$$|J^e1g%9<^2Mg|VH4BmH~Wn*qAbr(>UZh3$R( z?WlfWHL0*4ofE-@7kzicn}Hm*SM#SBV3eqEa*`}JIrP+j6GN}# z-IQN(mMCXxESsQ1-Ga9HFl{iC1)_RGxO9xyC64y{*K`CnVn#(~vwKB4F7t-ayE98C zh*#GFN>p#X>T=0S40b0(;jQ$rHfLLewQ*A3tCnDR{fbTc(6JS%jm%fd6QZ1&@67UI1!LCqGc?F1 z>nt){D~hV>+sNKm4ouShU!EZvU~cpN@Hrc5U@3pFGS`=5N;qG&tlsGmD=-{?3njMC zzjMA~8*;&x!;2eF4}X@i!+*)XFF593%kJvW*`BC;-$v>*?Fg1@$YveleO}&pzn3OV zGk$XnBjBX${1@c^v_4ZyWMX^3fPfTJ{E)PyP~SOz?m0#HsmQ;N zAY5o(k2Y8f8G?&`L^GXHHd?X=drTAwN>&dbL3GwS(!|oQCm&aYLM=i21W$wsmXCDz z;y%k#wr`7vTtPeIX5$clU2R_fQV*Vpg&i*g2wsnbzZ#aE=z2&@iI7^xSuD4z+l_j~ z4*qf+42cuyX_bk`D#Rm3TKm3UX!Koh#8Sc=I8OQrd%~c5#o!`aT(#up*$i{hM~20a zI7<%!i5Kyi{IOn$aqojk1e5>=t1Cc(Pp(l{h)rJ=r(` zv~nSlB~MB3#=M5h%~W(I$u2)8&d4VWGMj7Ym?{TuF&D z|DafwE+^@H@}@t_-Y}x4E^+CF15nhJ4h?Vg0Jb_z6-aGS*eFQ)BgV;2eWbSQrRTm| zp0wHXp{4iaDI8zFCa*m4re}zn3V9x<#F?gw1&*z*=%r-GDE{b0M596Rt6_}*1Y9&N zWS(j?oi{tAB}sJA4Zdx_l3d6j;g4)6EYYKql1=`OjVdubf-%XS-S+CI$WL`dX`sU+ zKCX{BxJ0ncPaoCzB!61rqO||{w$&SvUb{u=hKuT<%9O+~I<*e3-vo z@(0ENIc3_5D|Jz6_@OywnK1POK%J;SHRZ-IYnwNodt-Zv5aKHhEUDpClW1}@j{I|@ z^YJ@Rk5RSd#>#j_un*7Wf+FgDw>a@8i~xe5Sw9-PsjtbQ<&12r-l=R{UTVWFIw{f+ z)@VsARmCoMmUFf;qvFsMY;;rt6Fa$NA#?wTSLhzllyQsXt>!9oLWraS_=%C z+F1R8aTWjz*D`RHn4~zsgPa0)3{?sGimC1ZZ^JC=SleN!Dv21R8_d5kvy3U8fi)Z0 zyPRrru_9qZf{b+3FY#vCKd2ug{diJEc6!GQ{I>etCz?&S4`7X!aQrGKIB$0A|B?FL ze$%OGkomn)_d90^IHn;AfF>~=?8nG;ny~aDcaEY{CIoxZvP6-AZ(5~&UBXBF%&qjZd7ohcx0a<^ev8Fz`Ry(Ku>~fF*S5?I52``B~kd*fUT=pSmGp$O-PT{nZ z$Z4$6RE3Q%}MLMN~DESUP}J?=18tjA%eCtiNgy%fk>cgLUpI z<*(zoyj$+!>e%%kPn~1{IBei(~r$EUHQ8Jfrmw5ChQfAz)?C2)$x)%;z8WWaR zLij4Nlb=-QO{z)^)_0oZQMAR8FF6D> z+557#Vay!sCR`)o>EYXmO~edL^?pkq28ymq7c^=wA(zYg(h%oYVkE6Dx=`mA-w6a2 zJ&&;wfVXEzf_0*f+_vnY5re7pML`MlBtNsfy?LMl&W|FOP*K^zN{8ctd=-b;f z=!0+pe%Ef;45!bfx$6C3f*KYb3p_ftZ5Rzz9f6Z(`QEt~9j_PyQA1U>{d{o!3#{NH z4`hBkzEg6=omJo*ew$a;Y#Aku%YG^LROc*HLW#2$5iPrLH+fP`(^;E+G6o;2Y|z&# zs(n$x*r5dkeRUn$!*?;GSDG3SFh0sIteQ}ODVT7;>LxUq#vY5hf3wP~PG}eC?(-5< zlvjKg3uB+NHR8}{O{%PGJ-;710b_MD=~5G=VjOUatQ?~8c>qvSIrXJb7>hFqUfcIl8GiNmUtPK25`@-wy(Wg zZe*7Apj`LvF68Q+Wfu1SXSWEI$m9W;9v0gdDS~PKxyanpSgG2B^w71`aFN!e_S{^uXG6*WrBH_d()TkZbo-*t?Hyl z2!Yce3Q*kKk=j_Nn%0L3@T7MOfzwk_Oh#RrluxEuaCkk+>%pm|J2Rdx<5yLIS3!W? zL69w&;BcJm@TVgPgHz)F2{J<~x5N77x>A%PtvV!=dLq|B&-qN({hKshUKkt~?B-Xx zl`uFny;W^DmQiVs7S1n0M9PEm?&+J<8G@Ww(BocEt+=kb_4bCO&IjZ_iJ6y->4U=H z=2Jc|N&vNr{z)mSB`IJJ3K|QYE$?Pu8?8_-aJi9^ zoPM#R-r+|bf>UsKq%V=Cn90*q&BPIS`;{*pJpwk6)EU|4x)x}ESVu$K<6VQFG%4|q z+#&-RwQQ(sA`#$CGr4_L*@H5fzQVv1$Q6AV2}*m1xzTyze=wW2bnDhsI+zWcriFC; zLv}n2=JPEmyrT0Fj0hVu9B>8MW^qG&O?*puLkvnZ!4^GbHK0Cw2fqA85HlfH0InG1 zp}}vlWF2-y&nCD3xx=qPD7;RGk2sQ8c3xnp7>n8!mQE}RPOSQ3B@2}jX6{`!vt=?N+RI|M5+=c5rzWkT%{9NTfQXtrp=c@x}tR1RRiD*MDRNA?5@r&Fx zzIx)pc37iv6QcA(*=E>tT6&@=I2Qn!Bh6r5yR9X$@Iy|lAhW4j0_L!mh3~ZZp(X3b z>;=R(%bou-SB^+Q*L5OPSf4?aR+K%M7M6QZgAy_7l$NDU4AA?Ky4v8IREbQ$t5)$O z1w2EP`WBQoaSoURKAL*}}xv?{TnE{Lz0S_iwMH1x!1qKpP02zRd2#QBe zd0k`78Yv`mo55^fgy|V9aubRz;W@HaY;p1+&%@ij3E=PQU2z^8M<#&)Sq>FqH;f-r6qKycMYDOuZPENU8fAM< zpS=6Z=y#Ehj&Iwn+KJBVYy`j&foQki$PohfIV~6N4gn}*U1;q59+TK-e9|ibuWb7%wdC+>082VOHL1(v~q#Gnm*Yej&y^n(w0;l)gSF z)H#5p{vuz$Sk)EZ#1n&qsX0C+&dQ!;gGoj0Int*NVli1Cv8#}F_yt#d!wvW7Lp zZf_~TxW^9i6Jw|$Up|UPjqR^_CP<+cK-Kk=05!{oKL%=Bm))+keR^uk%? zWWia30(%^>ynJdxB+3B$GHg$9wfK-ih;vq*0>a^5%8ZL<8AS#62Mp$AqJ&eGleWi9A2Vz)P)-hN5pl7S zxl+}?O3BS8TT|OW{dtZyr(6soU2S3OY6;fJ^=d(3!hVb3)(HMf5_NlpQ)!V|$Vvf+ zEw7(+G@ta#<>G-)Wag2ZE{kd=i(K0*V)w)Q07=#{JbnQq`5x4q8+j1$gW?lK`PEpP z2TDvX%};K8BtJcGu>L_U{Mg9SVsW0%tF{jzi~ox-)}`&orXT0N{<)pcmyqeH4?dJv zX;{7GpVlCt=#^Vdv|IH>j^bG1XI%j5yc%l7{+zHab&Y0ChwnEj-*O0MVst*FiRQghQqdhr~0xU_)WQaNCFQ&=rSoA zOrl3B1#+$6!ZKnUG9+A%{b1jtzU|08enh^v&8}?&@IOz0JNA=_5oX=s4m0G1QO#Q> zYoO|&zWv+p6ehDxCtPdI<*2tc^}1})-eLM6xLD#^$#>u{04WQ1wTyB`6Clgc=ELWd z9j|@xM~bS~v{atk>CH_8>K&?WYJMv|R9>Bcg&t&?;c@alE3SnGgH;jB;TmBn?o1Bu zqvRkUA%7$3fc>R0ERiQ&s*ksXNwI-(ZAbXjc{9`IQ^mg7V&-0E9nlEJA(UWR0Zsw? z&k{NnToB3qIK;clgD$4lG>2j)eU69FxIVFJ1T!2et@zhBSIz)g_y;)UiceqhdXi=}=~MZxU}F2f3~%#^rMZ4d2HF)aukT;) z+9yVzC#TIPx!Q+xhi|1rjy|OxLfsgJO^7VVlOOuN^&r0$<%Dda@Uis^)CP^@f!)kz zVO9Ko6JqZZJe!M(!v5CcTZ0pN5k5_J1Xo$me_pC>{w1D$gQ{r@M*6DUkH!dk>atRD zSlXBIqy&jH5f@R@ODamk`VL*j1it>S7~&75pxhn=5Rfdc|HKeeraSvVp{Hv}gA;=G zw0lT{0}&)X!HD)+ww(44h@BVswGQbw{J32Q0YH8tNt#Cp=sR9@7PYrZbQNkC-p`S# z7@|-3|0xggy*hqBrz>cHs{o$=n<^WgV(>2}79-*o{1cfhY79y%t~aeQLLa023LGjp z{;z3l!6bDX+Yh!TU=8EvZSpaX;wHnGG2!$tx83I_DHbCc%MPIEOH&!1!W|Fh<7=k$ zx;*W>xEsuyn?g$689Hhfdbg} zRm5FL-Fd9z3?KC{vL!TvXrXbwAUTy53Ok4jOA%wUOKb*u?;0i4U4jJ7PO{$2UU!(Z?Ddlp~JA9v+J@kqC4sG6kuY`OD%L zC=;_9;<88t(B$LX)H?vxXzQLT-pT%Mwr_q?aH)p_x#v*QrUlA?R|XMWhNUDc`G+ZS z$uAMC$4{)H-T!sgjB&r!Jdoa~1+ESl_-z-dj9GCA?q#;ZJ8@`_v4SgtN88`=+>R+lB7*NB+Qz2;;YV?athj!9nmAB}siY_zPS`f!v4l90Zv!9@m?@p*lK^Rh#(juU&>-+4D6k&cnMwZ=JJ^o5ji|4c#(>XW4k22I& z+wSu^S{qDEqFTC4umI7_ew+JC6~HH;%SmlSWmM{gE=oukZpO!PDx`L$|A zxL3sBPwss<*LLC{1jZk@M@V=@LuVl3F5Z5C_x1m*Du;%b`8(&tv-?gsM6_h)Ir9Oh zpRjkd7jzjb#*7AbNn)MohQJvugn-XTaMXL(MZD3!k`czTwPVQDVWed&{TTfFkz7Ie z^%)Roh-Zvsn^L}U+WdIP(EaD!BF*6KxchtORmoA}vMvl$5x)h}EVRN3N_D@&;Fp3U z?Hbfs#OD^r>;J0%RM)06JyW~m#iEh~P%c*apVM7+4InMI+Axn>~Xjt~HoO;1q`0y}( zkIZh40q63CoQ9s%-3CdH{l^Iiv8`DEJM-MxpEt{fwW!z&baITjMgS_KbTix3`V>RD zzEU>iB7G?w@N+yuZThkkgBmWqA|Nf2)Gsa?3{%$joE8_DKsfPW*~I2QRmIX8`^iju zU*;Yhn0Ld52WpUoc?*Gtn$0*OGKYf>N*vLt5vM63rl`vZ6oOy>{h$w0Z}&9uq2I;B zlE;GTa$vH}&S!5B2*BPrxU-U0?%KB#I(QBQeqE>cNCzn}Y$&PHWnrFpN!{h|Grn<{ zMi&3*Z_4r?`mye)>KmIgYSy434&aoWZVEUX1a(gs0{7xe{c+$`K`u_I`o9$9#m zZXt|uYI3?;+R*gZ?7W0Kt!A-{=5dS!Pp|`*!51m45eELN8Nc!l?tiY$1JDPdJO2iy z93nZt`M+?SNNM`uB%nL#r2k@J0p0&9uhX@yQIxddS2k;GRnGsfydCPvpV<~Vv7&qg z!~uY|q95d$C$f@vml3uc!^vU`>DXikHj*3U24Wog)fD3ELNB864aQ?D$dO{f4e(PAO6dyOUE(G4q5 zOlkgT!ljLZ0SNX%%61%ug>KZx&0p|8PE`&n*oD8b;;-CyLJa;1<10{A0a-qXV^Upu z`+w5KY*eA-Qrwm{B7quRfsK$xBi_L=#uf}XBh=7L@x3V`Q z0M%O!);5l!Vky6XgnyyEgtUpx+1E(M6D8INDb%K&{M>y-RMzA=#s-#4nMg)9)S*S< zwn<=Bra;q_Sl#NFL))qv*=g_FW+G9VSRZ@KrNY_jaKhB-=z1K&&kLCk&mbwspX6N1 z3z?Z29&vey;Kb(dIazPtM4f?8vITeD%S~Y62lP@;+w-<_HOFQUm*D~uxJ<(c!vr7q z|Do%xqUzeVZBg8v;1=B7-5r9vI|O%U;_fzq;O_1aAh-mV;O_1&m#lTpy=Cw6Ui%z# ze9bm`?X}fr!PJPR@*f1aub}_w`%^p*?HVACKDZX3=6}y+qQT#Ld0+$l4T&UN`|rJ+ zG9Ai?;EsoffI#4j(`PvHqApR@nZuI|rKhCD{pE6rP~ zvxDr8X*{SHPGr~KQZAp4nh_-Qr@T9GA~6e88BrSkBoMKfKK%%OyQeYHMGnafS`oS@ zW8dT{m~t-b@y5bbL#}gMxG&fSN=q*e{-6YTIKf4b7MKe3D=biW$IH%^PlZYgqNb5} zdKx)AB@?_EisI|O3?q8ailY4swIP3@7R)3lj~<-bVQ%8EzBbt!++}2)1Cj8*Tq<U2Ab4sC{)!!83sTDxi6 zol{!pqjJ8Bj5EpG??9KLGTnNsX!;2=BbqDtGP8#wsFjP>zIUvFpfOLK@wSPM2! z);TR5mInH93iqVL)A3Ug2ZVWN4VP{Jm_@em@n!>E6k_h1(#Kn~UEuQ%WH889LPA-` zR?0r%*5VUxq2qpjlMjF+Z@Nv69$tajwKA(j$f@N?Q?L8rmgb0Hm{yq8lOWA4)Vh-S zidu&&f?(E{2J>jRzfZ4?3d?SX)eE<~pKkFAl{>OWNfBb7^vC}ere+e_RcbFoWd>*fLg{bb48mbZsTN{e`}4n{g-9~|++p%LMj8pYWdcqH_%Hlw zT1%OM667wju|d&18pD=IvPUbbHzniN)45-x6x%7W7bk7(VuDv-H8@ z0sxqBGHYyd^E(iq&;=nrG<7>s>qh-p6%3UeWnAOPLi2yAW1PP}XYXI?sLuv}0Jzgw z$M*$oIej3(2ceEl4DbgtMh{fz&qO)D(*Ny7k4*@}%)>AK#!|BK;`p1|TIWe_ReA9% zwz;+yDW-ThcjcVn+Ib|=6QBUhI*JW@4fnl!h2I=me;d1IF+=TiL=ApQo_$uN%|~0_ z^+B|EYy2oyGdw95g;+S~Z2gx+%Z1YXSg4Kky#{4(?MejG=~2HT!O1X~Zru9p7w~FU zxSwOt3&M&_&Ipa{KGNj8@xT7K z&%hV7k#g!NDHeB}TPf8dHbG{>+qsGfgWwqdSbs3Lxm<*jV`y*Y5f8k2^nLpM!f_L- zS)g?&Jt$gnb-M{SQ{(O(@N!o{Ff-J3vep5NGY9{waqIIuj`w9|3?@JrU+2v$Y3_L< zgu*`20TV*LzFWTbOmQ+{Temfi4*vo2!GaLu1##+T{D=NpwKphydSw!WR#gz6)gGw3 zZv}MZiquD?rn0Jr>bJQLAe03-J-~g$CzKsc*QqVMltAUk!%pbrptv^m?c2yoc-@6= zTlS_SDs?-In8CFo&nfNM0@9Y%;h+ly>n?*2Nf?pkr4aeeY7i^oqiMegk->UM@KhTo zF>|ksg+K2W*>3uyiwo9zND~<*A!O2R=!98ZXd>Kk5Dzyn+e>-$RjcrG2o`nENZfBA zI@%RX2~WQTGFhRCxPutdve@OK}x1RTZcQQ2$qwbP*AiEs*1|E<-U7L&e%O{ou+kL|ngX4?_ z*HC5;@JjaD1I_&Y%ixD;UNOMhF{A{ceg-morXVl?B83&zyf3hm{uybXMV*WXg81$a z)Ry?hlaO9cN55Az5N5x>v7&ZaYQz!h)S(mfh;6WJ-D;63KbxW#y z#SFNaVY{ofH{gU9`odSB5L(jhgkg2%MARrsK?+YDIZ8zSQf+0W0|xL$nDfo(XPuwg zY@<+l1bUlFiViGKmL)lCjwXh%Kh?O(h$S#H=vP$P512}$cu5d=AXq$l@bS^X*s>dj z?*V1yg;TwHh#Gh(43*(@3=LS#S8#ieUqd$(T4_$xUxLm8k69J1e%*7j_Sv3Wsinrx9~yEIr*3Uyv3O3*XWF%USyx(z zK~C|``6${NwHS*9{?2*9Y<|{Nn+N*qshzh}@N{z>TWg7odXyp=wO3-o&mck8xF6i{ zC%%BpVw4V<}zwNiWd2qtv8;Ft(0N zLsvW7;CxV1AtEl=dj2%!hc|a&r92HZ=DT&!!eAv_smTGXQda@kPW@*`QLadnrhF?Y z_zv&G=f7uG#wLex+Q{q#Sqr$TN#;r~lano?Ra5bhe<3QuW3m@_Zj_M8u71lBZao!Y z{Q_Vt84mak=ng$SFzR_{Ex;Ki;((!3{!wvum2RkNx=xhxb27+VLq=8Aty5hy^xiY; zS9u{ChxZ*Iu1y}SpitWQ5HyCaSKk7|(!3?;Cdc)**d6i-Lh%|dFMFM|5D0?-E^wyO zVkGHt4?^i!ZmmWCLhz*C9hTTtzT2KKrdin9MZsKjM4Kj$qGsk)u3C=BDO4mP=knET z=@Jfi5^PDYx};Jw)tNGN3XFpR@dBilayS=PMSuWs%MEXK;FHVW^;C4!TnhPaM+vY+l)YX#Y$IiqzCB$|iUm(QxUHhS}l>_e; z6_nz_vi#&P9`P~Oo#y$EfTKARMctMG@h-hcb>BVO$8}4iv03{f*_#&m$rf&RpTEgcw;$7m>{@c>64C?t(y-N z(qF7y<=>)4y>;!-0m@1RuVC;kAp`kH`Lpe@ed6T&$5cPb9XVI>CxZsk!hW1x2^gFM zF3(Qp+K-pmwgWYfOET?>RO~ls@NLBCB--_6W+Y!^hH%M`HSV=i z0``K|`?6sXFR^;c5Bg*3vkf{ayF|>Y56|RXxgCFMMTD*UYUDh1rYp*o%0a zvz{^#@wJ{vAN`Ig3lbk0(W4YLQ8*a<&kwx)on4=m$H9uH&mQRfL{IB04~Q>@*);%R>fL*Iz|K zngFKmr|xbiFK>fKTSf|s8p=5?+Gj*a+C$K1CfM1HE0j!+SpE7#R}fLVjC7y#s+`^f zBC+R-S)`w8F$!EwKSe%mDk@8QxiaGla=>v!l9e!@KJJY_@fkmXk8qnW2RW^=n`y#^?4R^~3 z>4n=^WDc+FwMO^*<47Z0-WRgvd_$ZIL>Zr)6cn;QK4`N4b4kp9us-IJm$%O)F-=vg zs4bWrFrhLh>hOCusDZH-?;{r&nmUEQ7S}gF)(Ds$&e4WE0DaAs=E&9h0iQ8z+VH`h zu6sAx>gE&erXjO%L6yGI=6(7JAzmlt(hpNn?s(hNSTo&#l|Cehe*#w7kcCu(d7V+`TxP@>pt1M zi47Bs&cAFP|NocG*K7P$BVId=py>ay`CBmzK054f3&i-NnNKysyKn~P_|vmGdO?j} z{M?pXtulT32U;!~8l(-A0Zcwd^jez`@_=p-cR6-6nYCuQ`A^^Ke-iqV$J-#IHJQr? zG;KwO$e&Y7h5cWgsgoVBF%H?Gz1GWR$G#eDvgn=zYDeeuN3@-3_HYm;B8F&El?yFBBmJ{T4ya!a{en` zJ^7~xVfy?idmVDoOCKU#3co44gP-hUooaJkjT3n&l}L3|JpZXjqlI5Tk52^$sxnfcoZL5-1JzD(4pY6V+}P5cIjEFFXSeGI(_VRS77vy2U&6D zP5<@@HmxhZZVzog^$Kn!yZWp)X^+=p#uZhXkF$NfqkLKHmM2p9zedhka2Y1>4-gh$ zt3PpcA?a?5r^x|&{T-#}MV1=R&zsPf+FO|#qehE-O-#IhU-?7)d4zXtJwxVGwpDF} zvx6wemZZt*Z8sP4%{G`lvSg9U`c-&LK@ovdjhE)ETxZ8wfjK{Q3acpKAEJChxd#$WuNI|Amui=wV1JUxcx ziZd1~={ss>n%8DAy$06KW63e_{Nf=Cb&`B(^r|n835L*?KTh_Qn53?MslZp~lChksZhD(v>MkV zoe|@dM_(h8gc;n;oNpk_CpPbJfe1)*H2*dRNjNS6pL)t$r@kv!*-T~#PM3TbX|@v) z=@}0JK(vH}Y9im2i;7B#KJ$<|G#sABjC@d-M+2>F6=cpcwe8n(5T8NZ6zvR^^i-z^ z&qR&dIN61?izyom6UTSP!pyrZJNShpcqy$jBiQ&x)@WVuoc{d7xLshg%>g$Qna7zV&JMshMIR$nN79fIVReyaW5W52bpOA|dR!jNkN zSn6U$=r3}R*ZYH>hpN;3e9wLtyzShpyVBC|)H+PV8_jJ-TkxUVwiSc|(S;HB(#~Xh zlYoUn=rvtKo2b6}f;(DX^0Bxl$Xf@vIrnop{grb=+Roi6+yiT!qPoMHb22?H1fxxB zA!Va6JfdQn*Cc0^cpzp^d_CoM>lIZ8c;{-npF%W3t%Q_JTLh^=*?`q`0G0FMe`&ny zqW6Wcc@bpytI6@TCM52O%rHO}%$ZZtS)REQY(8mU=d%84NtqBKuP6A7*x&fp%(lz7 zI)8WN5k0grrHOQFVjhN)AQd*yu8Dvba#tLociv1s1<@WHNtdl?_0gHOFnb^lm^0V; z{$dzOq-Dla5o!cOP|Q_2ggQ6 zQ`RwK)7kP%mOJmt)K%I=(jYrK;Cq>EmAP$&Tf*iqbVu*PG@;$H@vuc$67m{7HFnkC z$Yt_ZW(lK@sUzW~2Jw03i2KDH$Nt>NQdMK0%@D!C+A;#+f?<{fFkf)-(K!jnUuGgO z7_n@PPwPFLz8CG&PlP6rqfMYw#Vd&U$IEZJx5HE=HPsP&y3wakvl3L31J1%wh_D-r zR2q|g`V!IPX{)JK%?=H<&{n9zFp98;=YE3~C(>5>ME}+ z<~v_qGxYw@6F*XN4_ed3-B#eG}RiGVw5CC{8^_6TVo81)u@87cRiEHV%pWA8I`-s z@;PH^7%g)0gD3JO^L>TLKY(^Qo8$>?6>n@En#DnW`o}c$15xis#G?ZG6^_h7kvebQ zO;Q?}(-QG5CcPuH$XO~W%$**~NXp8|Nxj@+!i4~^v{+s%6tU~25`YI7oVmk38_cP5 zNt)DbH};?j-K|akQ<*1=c-MOvv79rGeNYZ3T8VL+hBoF1r6X{$ z;Y<4ZXvO6EnL!vV6AXwmzWeq)AhPkzGzev+@1&aqqOnzcCg-@{yue>e;RBt;k;BkyUD^xlpVnLTqsePvv>fe zzI8Mi9#8WX3InjUVDChLU@7*~YMV@q`8FL$y^m6}eZtv@&6f#X}B8c2CReYW{hsh)aqdwUZ2D-e>_3#ZkO4;!3_2Z@6!@U{T(8p!o`P_XAXk9G?6%NOQwpg zkS#Vkh34X9O2fjalo>Iy@a5AGonu5#2=_Y>z%5J~E~SEmH#)JYRqOcwxSNEe6)uYJ zI$IT^IslmC-vf|GiXTG;WY_TLUKnoXGrzxiI2*l_t&zTS?fA@0t&djx zgyklwVEx_WOxJ6;!^_KaV0b(Hrm7FharGxm)c|ldx|~;$QTa5ChY_ELo1vbxn#;a~ z==FSlJKmAU?DKX%ZfKdA>4$y4p^h;l+}Gr?IwBQF^@obVFLyc}dX!JGK_X`%*}C&= z<~(qqKpvZAHKE5dEPK{hO^>4fY%`+62W;%vIGx@gkemU1X|#5AjKNrBH6n2004j4* z9v6@!<8#(S3r^39!j`jlLqKqrMQO@3>)nXgUTwG%y4{UV2+Dx6pd-FqNkD5(o}OIC zQa#)>FRctb!=lw!_E3!C$g&w>W`5RI>%}$erB1>n2dXG)>oi%4W;0sz{YZu_k#ibF ziXaGwNK4Mm-8N8L6}SxSt^)18gmzx+egV)$wj%j6ua(s&9xRMB8L|wp565oK%Ky;M z(T*+9^;NV+ax7KSq27$GyQdg0wiAnA+u&ZPvBo!Wjx{+QNv%oZXFCd%#m#V{T51i8TA8>KH;JH$!l-*}Yt^1b02)E<>o57{mCrpsQxHy?nJlSz!7XyH! zh$3(zq!=+GHc5<0pGMTeENI69WOc5`CHD;}?b_a-?77#c(o-Y}_WsyFGQy z?^%mGqO#%@YDGclr&w-$`Hb=n^mD+NTWuZZJgSt^42WVFSD^=bc=o)H}|v2J^v@ ztVg>3a?jrkqi*&H<-$^T?DB{5aWnM>zmDV}4|x9CGD{Eovb`b0Esvwg`DGdaxlSkO z>*7U2zS&Xk@6+jrh(MP5(B(yvU|{)1MY_*0np#PyZw%PGnrWu=eYp(lcKBSCj(`xU{<^vjxt@Z9 zN8TqE{)-6PTT*6O`RT`i52p4yIey#seVsp5gYw%M)^H`>h27ysrn+tvnLAHDNKc1q zmQSeIW<}fC6C~$r=k3Tf1(3prV&1)1c-3PsMJLSpejRRQcroBy`(+t`)Rb+ou=FXT zsF}WCdi6{29#u$Z{J1Gmo_<|}@Ok4HG?IRY@O`g#Ihg&jiLuvc%1!982WD^$l}#x! zHuoLP<4Kv{ot42}k&vgiF?h24IK3YF16=vV zU*UFYm{P;8R4jJ%UbPDVmY~};s4ngh1X5yCUZKe$vraP&oay`QXHnX%{UpubP#lY1 zIcn}oFm9Bq1nIrTBFM`Fuu4~q2_qT-fjP?G;bTr`zy?}Uhu6m}6PS-ncbv`jJ{x)M z_x>mfAu)i~I%&1*dN9b0#TQ(V(70}fGhhs+zW}KQ=Se44d+m<_JdR%{-4g3vTG8Pq zJk!hCkr%!UR#_=qu%%E1To`uk=+1TZ+-Fs7GY>9(-+l3EjV!^z&tV^_RP@oddn&~B zn6NQ-qMZjRFwgt7lrfYU{bIkKXi6`=ygg|i!==}!WI(A|yVoa%`0&D#+ECpX`5EvR z%-OKo%Q^QtLh@SzRQ7pC#eBvzS;ma^CN=Tpi|h}n^HnuFQU{*0B+ag?q?yQx+ZN8p z)wyR<7{=Wkl@q=C#|uKJLW|g|+gO1%QClAzrS4x zkF(4dBL?4C4vuFi*qahdbsCz-M0+CKbUG*a7dB(nN6It<#^3ohus}v9Dg^dqxh1t7 z)qd&jy6IPq^NC9yzsVdq0KU%`xW0^*S2Q^O*w_q1P)yQa^G~0h9Z~tcRZF$b8J0U5 zN1m3mgNecKSQRFR)#vyWygeRZfkHAW6j7GEF_I5*E;wLLBBKj2nflk#? zQOYezBq($bu=QmmKWC_DB6vz2;c+A}coHN-WF$`mf^73e5I0-nj zFI%pRAsWoqm>*~wL?SPd?1CliQLW?S3rSJ`5&CGcYET4Uv{td^sU=hCb9?GVZ+9W{ z2>Lbka}zvwAZnoo-D&ViO`1?kz@20^Z_C}cYgsHv0GB`^kTF~BXkO=M2SyHN5QOnS z6qn*2&MCclZA<*G$o0;9XPv6I)oOyFzquw^r=k051nL#f5Rd%3 zir;3lwcYNI=c!E9f8(w(%M2g*lk; zK*vB%izuUf-~WXHDJrP`G2LtV0~q5g8-WX9C1-7JI2!sN=Kq`ZWF$uig8> zL8L#H^=6zihjIca6b!Bl*hXSYbHvu^&CuUhv5vFUP=2G|#-4HNCh{6C9hQe+g!?U4 zRJgYm@!n$Jg@;u}kvQO%w>;GJ)q~&L-MGlIQYrww>a7_oQ8`s;;Hh4JPK{uXmucC@f#6iWQVMTE}2%N7wtX8jdc`inVPBci1wu9dId zEZzClD3Nl{-uJpeGZHns`}WO_oKvJ~=&aTQMAcogSjFvOX?!y@$@Ko|Y-OE@f~F`_ zad)zNvx>VqGUMoNz!Glk;+&XheB88!lyF_)_-{-8(x`Nk*#N1;X1RUQ^mAxU0V_>C zUjj5}CWswOK0${&hxm<Qjjt zV!n5a&qTz@lRb}@yoLVA8STw8$&y(X!DJJ0ZMhL3e+6G1z)uH#&0032a*eK(3SLHc z5jo=C&<<&bG%ScXa)`*XF)EE)BSPRm_Hc_>`&hl{J>&mnQa}9X1ZFuH9WVS(dVMT& zoFB0<81bE{O%65^GQtaDaSp<8H;fa8}``)9>!)N_!;_Ew+#hpO&ArjZGpkWa> z!_bR&YJ9tXMB(FjJ0F|;_1ApPBmlbl4-6eugW|U@R|pD{9s1ObME6h|wJlHSTTR7@;aYA@9qY6*5xjL)ynAn@w?|L{BmUGS8$hQ$_ z?W()*DXRoDsQmTnBdZ6jm@*D4^%5bjqxm>(=GFOIY=&+`67hbGt;m|zo%0vgD3@)k zhwOwpQ2l^-%7JlBhFP}}rsSI+Np)(~>d0$Y$J`Gc_SdPJ)cc5{tcrktt! z30p4?-)pYo>6&xoo~{~F^FWtBn?q6KL#1XM86N=6NBEs-C2 z%(}p4O$M>63jmk%>_)OAizYiwF$uC9-c1P=2^aX&mi6a1>s|)t(x-%2vZOMm&TYOY zda}k_V{5az=cac=yH^3xnEG){PCUcc7SM7V0u0KL?O zL<#`TGtDTkG42j&LtbIR)vYFIFn4GSHJcyx*1FmSv7v|k8?3%%Lpr6=n)`l4n-uB@ zb-)&C6@U2elfW|O%32C%M|tya-%u-MU2#I-{2`cZ4Oz+MxRP*2guBI}rjiC7yzOcm z6=RE`ORTZ%3oV9@gq;>(;1OT39+HvY^_Kw@!8k9+GQbcxn?tguTP^dzrfTZN^lr*S zmWU>3@H9h0u@%npQB;I{JuS;D=Ph#8xw;Z>Yj;|g?XPikuAPTpmI@IE*`MX{d!Drh6zlnC)C?7mz`R4<8o@TIfCYC5ZESNvuc1>c~V0!>g zsR1eEmV3p)mlVH*-L6(uccdSKrTymMqC2mZKL1X+m1a?9r;ZpPgh(9y1**4X#eqjfNf{;y1=X*r6e;Di4MW`)T zCpBMcv_t1OxN}tz@tNLn|H`fp-53RgE>uSd5~f3UACpb|vFfOw_3lu@=0~!?T9LO6 z;$DrvF0rKsNAme`irTKa#5yYr|HO_uPyi>P43=n~&gMtTQGF+&9c!e3pMHM4Jz_+| zvx2i&+?;V<#O`hB3BA^^-C*ZUAn$?lI@Y95uxwd%LTs;Uk_G&biNSq2`)&h3Q5sjz z5&E1g_6Anf`$_~Bg5HP)nNUj2HG5s)v`pc9u{?#aA&&ma1V3nIy|0BrM8~3A~DinF=-qqSSMdOQ*nCF zQ9K%GrMTXgN2C$y0P=8%f13bu}OGu_UUe-iMs;=Ql*x|C&;VXR?hZG?}Jf!~_^6O*{6XBBJ zpwxP||H#`cc2h0ur@}Yh+hi&FbtZ;H3lJaYF$lXX)E_=1XB#^E14mYh3QXl`VW(~f zaY^@2(g*kqg6=#yTid)4hRAxq4vtf0t4RW~)23=LsrrP7Rm8px2hm61!AcMwx|I|F zK>m}#sIs8l6aWolK8rsK{-n082wM` zfzna3zqwJ|5-Zt_pNUDg7Mv@(i@1ZV8{9+T@;anST75GIMGmHNl0}#b3adSRn#11A z;0rlCc3D_)y1WB@$*7&p=u_E!<#k9eR`*e{c6MRVKZgNSf=nV?{CKm`w>5?#MOD^D z6mQXK>L<};FH^52=;OL0@QCc#ax=M(Q?%42%CrUXiKw1&LfL0FQdWymmONC>iI(h@=L zj8yP$8GQkmbh$c&tPG9~u6)FtUEb{_7P=6p=A$8Nj`u9gFVX}Jc)HrH@FLz`qcdiV zNiod@{Apz{o1f0#p!=Ye_3<4=%l1_=_g}k?WkafU4ef*%TL9+fw!}5mHR8?cg(eS} zv_>F!xFW`qQ+94{JZ^fo8V(H=fd?=V4}AS_WaAR%A5{?bOg*s3dn9;wbfnJueyQyl zvXDT|MRaC^(+}b#xEIyyY(;Px^5|ar@LwhQ`_-IXhd{@;&vvQ9&l~Qq?P=QnWuEW) zR-eo>9_G&+{Hj`sPHd8P`$Mq~Ed9J6Xt11dkL`EK*jW+Ok2iDtTxow0TUW}pGBozs zgY>JL=ppn>M>>AeWS8AfowFoX-AhT(#@f1=7PKAR0x*ok=Y85*2=^LKzAIG`I5;@VTXqKD! z+3+9LLty${BZ2dlecKp=;XWS|>Bv5|1LbWIO=LxW8yfnrJw;cFrP-i(?uBgFO~*}B z2$%^*GZq1fK1;wiKm04Ek*E;83Sru-PR~&10Boz`gD6FDFug#B`>Sw;VBN~MqT(s4 zFN9)%ejq85PzGmV&Uer)@?Bj_jdRw=rsBEM!rkD5Jf&h15(6L`7t}9t5fIYc%@$G73hNRYS0F)F}iEG zklmXj>vMH!uNK7rde)9>hy&H$M!Ig^{eBOZt8%JfzT3*z8shyb1m|)?^CNvpSzV-i zu|Zx~M$3F%dKI$QU+1-+uamhnzFR~CFhl>5Aggq$rW;t5xaLn^BD&JEDapzo6s7ID z?C%xYw?F148|HISIg!q_VD>Y2XB9Tl3|i49DCs-t6Sho#m@F0^K`J~y4n5Y>1Y}T8 z;%mx_nT@DG;@}>66~VduLTIc!Lz=ONTI}haaC%7OPD7lgGmUO{*8kDmFMdWuMNxB@LBUfRd zQ2FiM*VxuOr3c2gs1#af%)^u$3%8F>9u?F+YJl+Qa-xs2bBB)Wz|E|34PUlI`FLOM z`31UIZQ0#IC|*%HJjhzSVu36W@G8gRz~t)JwM=N7aD#bzX}dSP{m}nauRIC3{BWuY{O1|6fLqNNAZhi}(-cllX^~*y3fpq|yU0{uQ z#gGctO2m2%cXYE90SWp`K=$KjE|1)y>u1@|g6K=%9MhDsB_Iu#LQoD7;P?m`_S&9w zcbdoxjP5;5S>Lc_U4N63ey>ljqB4l^(DolI5BkV}r81p3qm9j1JEf$`*$Al&QudRVjypt?51U2> zRnx9yKFKF=Pfa*v#5#Nf5m4vh>cR5NaT*GQMlA7E1BHeGHiQ25-#2D-EnJ3m^ES^@ z*!F=Y%qTA&GOs+rMIc=vqFche6kMAh(}(|6Au)D)COip5Nd;E|ooq2q1uuaT;cxXd z$*|wtN9O8USTtkXE@3Oik6q#HH74d5@(&$zqw!L1ayxq%li6YkN8p5M&0cZdD7P>@7vBU!Isqn+=W$Zk2?OiHsIbRC4V z9R^h@+noYS2GY#HHtLMETYmgezuh_5tSkngZo>t_1q+E*z}~f{P3$N7Zn2rSnReP$ zyfmEJg+ZF{ISvnIkd$OJ0EHrZIkfyZv*xsi2l@oFKWVssL_xhwyXi z`s&IG0+^;eGWlVIWc@S8WXW?w^f>b+-RMr1glN@rT>G(oPUQ-U4DhlX3T%g}Gb2Ev zIYRudvpH?{nPH)b14z0R1{DGQ)K}K*Z%d$sG$%+p=@pH|u&Qt<;+wh$5pGwon|By? z;hBclvbi+HGlqV)j|dF+Akoa3BixhjZ<@!x$eOhWW7kAjGV7Va)$UWjys4R zs7m{-ntwXie~>&Tckrh4%_g;!b{@smSen}u3I?gkGd;bfI?ln=#;q)#ahxg$S710x zkl_Vgc=-+?5-_T66&>i6Z_;X^eBkXJ$*mWYq(Fv2?uc}UutV+287FLd8yIRkgkFrS z6fYb6=SO9gWeu4v>2RZ}LF!wXUc55|-Uk)or z4!+Wz$mC`vqp$A|=OcZ;$)LveRH9p&MIV2B3n%Yh%uLcQx2$IKE>wn%)WRtk^BF8E zcK*x-`Q21ty*+aKxSM}|KVZ1pNeO>~wKEwtLbm=WN2cr>5C&I2X`*_&43-S=$)wNW z6HM%pE1ULup!^CT;sdqHRz#dG6jKLIxFfu-hvw~QRRh>CuaE6S2t@Qy7*&OT_6bKmucRs5z_`M*g?s z09QD@0d?K3S~S69b>XtfNkwCQ20oZW1X%0SP#o7`;(kcpA~7q=&ERf-48rMLHQh5p zktN9w(M`J&ntWTAzTbiMWfW?G9iBc>B0(tk9m{&L$R$gi?j1eomBIz9vY+L@O`Phd z=+7TbU&5v>lR4Wxac|CN3Rq3P&G#L-SS})Zzugb%mpqgKrZ0McX!+pO0Ozx@^WQ@^ z&wyLqIm&x`%|SNK4f{5dJ0#m#21JJA_sds4^-LUrAUBkI9pM^``zie3Esz*{oAKox zv51s54DB@CUm3KvVXH<$gNXCgKdr4Zb|Ytb-7;P7{|k!dM4mG&KPhbtA_$1Uzr!u< zEP%RM;FQ3I5GXX@ZT@G;pOXCw2Z|r#)Q1CWuy#3yM4|?QY(8SyS{T9^MXtF2FBC9| zVq5ZhQ$m#3+L2b(~G*-N%VJS)sbVe1tXd=N(B^>Un43kfUAZrOA@C-cVH@2)j=LktM-FxExQNfS7G{rD zI9V2?Y1LncomrV|u;n68xSodzjRz?qyG_91?>4&9vHQalxne><1^9^Y2z9*cXrqPP}YeHDL!u<2y|}tAh}A1jgj~ zFB`LZak;)IG9%fH%p0>h^Rmarm_-S5%TkuN`E0~~fQ^4hMNiq zM~!UeLJ8wYK>+HK_cT*k504A9>yKHTJgZ+r{VZV63cAWPCg@ECAvAAjct6;;iiSMRpzP zXHlRifYd>Ul=M;?oD^Fy4qm#W9$v);^C8T|5bo0{4&(lCmAC`;?uzWh0;p2SRh%J) zDm0cS*d98rWzU0BV=lm#710Ydj?(IN7~bXYtiP&E19iA67-<=31S~m^Y)ifG2hy0v zb>L%9tgF4NSglv`4waMa0nj-a9=*l>XVR+xXaCUIYvZ3`Gsn(zoyF%}j7f|aD(w6p z&J}JI3lmEC%TrnvrktPLq^pfqB9`k|dn@&~mGY02nv9eVb2HoKKGL6j%#!(O*2O)U zy~ANZMhdGq5%=e@U;7_X`aJ}L{nFB|FI2~zD7y4m?2v}~Nd?glfO)Q7K73oz za2(K+jsSiq0sJ)R`_f;lQrG#! zt1o`YQy)DzBINUMCfwugx{bXJ4fLW7IF=}eOu_!CRzD&bpv1}5XI~!(5)b4L?ug~yek7m;#kWGcFCNg(|OUQNnBZ!d@Q~j%$w_@h~|RMG%SP#v?jf;7aR0<^qp|%EJ=9$ME5o? zd#`H&w_chzxR_SoV-TTT-^sRKSr7nAG(`k>VjBbqh&B+!QRz(aVH|a$lkBg=hwaMm z;$_J_e^lw_)2*cZvyFH#z!FiGQ#Uim>1jbcTIt5slcCXmNnC7@HW6%!Y&3(*saG(y z^d}Zwi#!eVpQMZ(nd8`}(x%7FMKv(dwTR#{_Sd%oKfCl4jp0DTgS#GyQn@o1^l_ntB^mrL;N?@@l*5&nE)Q zTXgZDLz!75CQQ$AS6g)6{DT3bsno03r&pxcVyJn&-@eV#eGv~rnUL0BJJ+vsP>e{I!6nxHJ4zg zOaRjvx}yJJ>Ux{!Xx-3?OZDWJ?1Lv>;wzeUCa$4Ys%~8+T4k%t4j0d5dHgj?a-=>| z&TSTNX==qq^m8k@X|oAHD)L2?g`j{+7BWLw3_>idXZh^QNN5B!0bv!3u%uXgM&1+# z51DNv7Ah(ov~?;H0{8m4VdvV&m7B)zQC@y39b~*Mya#+Xw+aeOS(M1&u2nL0%Ury&@!_SZG&$03knfz6LZ- zjjF<=Qk@u8RSO1FYGs$we)LL=idfcD%VbDqx9ai_OA9~EF{=~h5eC9+$Y9e+@WWTw z3sAk}Ob9{9vw82UUw^8ezL#q*1R;EGEom>pEoifgWB~EGxp=IvAFAOg6lm4KFGWi> zpC;UAc%wSfQOcwQSR2epFxz~%gL3{TCM4bGExoD<)WhM^@m{#EqdBCAte&V<9dj?= zTlwx;)+`RJa^VW{%CZs(PRp+j(-*8Q6u>{a6^Rg`dcZu2gKwd%)Gx%0!Iic1;s-Z3 zN!>-cA_D#KU$_U`L&Ty7%&r7i0o7}{t^{WXmn>*iI1+&C-m)G1c3{?CE?A_djYYn? zy`I&n4pBFpW+ag^G2K{)zj_!xgG?*rC~bB$G-X-_wUAXa5ET>2=B3(*>$MYh`J0k)V&GcB z{?Cn0oSQpgEPdSZ75AcACW|E9h!veV7gnqR#yaA4T^+WC2)L9KY*p>e^-8JF+{F^- zN*1Hd_1n;6r4srzWw0XG&_N~mI3V3+;Gh(#y+L9k{_mt09Jx(qh}Ep$qv05nLCj@$ z57XB|SqU5ehpcamjzsIWjcr>U+qP}n>WlP_m=`6aYR&xBWJ+sdlM!<;A^(q|nhKJ`JP+P3LdpxKs@ftqtM3sV=$sUm1w*nCS_auc&Sm5?KBA z-@8{64h0QNuLDO1g#lL8eKlFtr`AGkPpnHoh1SH*FhYF8;L$i*6H%ROvH5%>2T-1c zyBC_hWFGm&(-WuII~PeLe(Ts)g)L%^Vtaj-cK%>4JV!QgVwb0&DafN3Eg+$!E8g$Y zzLihRoPq%0m;%7^U-+*Dv}j*?wInC?=zXnidEEk^lFni$dLgC;cTWJY8sE(*>AoIS z2>AN&o4aRoazsnXkU7LXUR zm!*d)GlCbdHRobo^GN{KNuY`>+u*vL4xwd=L*2xh!nUE#gjH+aNs%rZBf+kJ5yA@gh#Hvz4xE1Z>G@4n-9SI&*Q_IQyajaYu#-{;4Dlx7$RB-~9Z7Lh%$_ z%kHp}BF``ME!^--@}9V1K+0#uX4m^|c73b25$}~{tsz}+ss+b-EZSX{Ub8rdhcJV#( zY)bisS{O6hkEqrw!<~(B{*f)~@6%WJo%6`ap~$+FU2j$t7S1qfw%cL~0Ixv7hyJ%o z>Q!pzd6(=&>L;B5Wi z#*YyG*rw(mD#@BE*LiNfXpg~L1u02qkxD@0cw&kmwD48y1_>dy?8KF)*zkbOYG#Ad;m7X;%c<7zBGdviqj#(7` ze#d0T7k;afsCic!=%J&*=)}Xgh!GSCHp)szycLBlZt_Zi(+@U*^vunVOM?H=jo!`DK8tw}#x;VIjg=~o|jD>fwD;?;Z* zs7tJy`Mrr4to-^N#;l^CEkv+kr`(=hes=SPyeU5M6AIQp+rSA^>gqV5t9Ud#BIfat zGK#JL&iE&S;3ef-d$6CU01g7up98vflm2=6$WR`1-JhzET>3WA8s8z3@XM_3ZA)x4 zX%(wi?RsF^mn>RsGN+7#$=oBx(SGKY@6jpuyEa6+RG-s!cBwe_%J=a5 zhg6tHXOUnjUSq{VCK+4B4U8VHx+7 zhG8>{ZK1h}3dPZ+82W_YtFK5H8#XPMbIOMc>6&&7!JzX;xPU%1S{tFsqm@5Z5E>FQ zdtkOmjg20z^IP3tvQX+px`?0 zx@>wGp24z$^cxa9Sfe<)czd-7rEr*QME(GAmCZUDtwF66T9v7O1Oa&ZCRJ{YiU=%@i@pbP^$Xlh?fB-^~YLlfy$ikCS*H%$9v>mLB%O>cdAxQ`X)A$0gP;8Sy) zidF)pinQ=c?zk5ZA9ldXSRUYngutNDFIY;u+Qu&+c67y$>`K)WYAR(HwI89apo&;W zR49QPiK}H48|Q}%`Dq}SzjXRzwCj4uXIprK4-5gKW9Of&idctD0cI1dl83L-{)DsuQC6&dc!{LS!>l3;|Cr8Vt-PH^l(x`-`B%;tT>^8?dYKK%kLO-TBJs+&)-ON4E@V6GjZXx)E>>f>r-{#IjZf~In^@Vozerv zT{vtP&1JX`XJxxY7^`?|^vd1}WV#Ywm&?}I*1yY1a-8K_cHY=E``4^<2ke>TJHdqi zzK&n(Kp-bRLDJHfLK9#sMfm(`L|g^V0ifF?e=RuR}b*)FIB?o3$4XZ{qSTUa{&0Ale=J7x$BCdLZrVCg{wkK&{aX5Bau*$Bq)SFNQ{;8 zp3g-P4^Kj2{VGllW9mU8dpVvdr+{Gq_rZ)*Y$f9CCa{gmBMDeDTZvrqM3tX?PCBfk zFL$zTzKEF%fRKlykPkpx(8&Q(YNfFcmrh1+erWxk69qWAoGnuZf{XW>w~>;BTl25z zW8knwHxIfRI2p&GZ$hdvbbok=f-qv`)Om+WdZ zre@m#*4YcnB4?d7N_IW#okOG!@h@r3`5s#z2LLO>nJ4FnO=gFsAMZkPNS@BZmir0f z!^w_a-M_(#!;Y-628AB;@;jeL6qRC9vI?#M`1S8*$0mz>?_WD_fz}^lPKX<@SNNKW!}1j zT8%P+S2^y%!RU**uEVrnxR-Hr_(n)$Y&Yg*X!@EJXK`PyjPifWQk%1qm7f&0HgOI; z)VHx}upk*l{L*BNfJ&o7LVtZyzW86|0%J(96I?tHkh^T4P}@JAB{~EIusrgsP!PTT zMfQN({Bs@r3Kv!&WVpCqN>ncg}syrj0?#72>uN)aWL^~C&7J)C!Socb+1bhHPHUN2ABZEo;bNf zj3gQj;a$@Hqi${AGh+#HVr=9WeM+zF0Ly|mUHk}h}p#@ z^9|Fd(c$9WI5H;0YMaJ~MoJ|@^Hb#dJRd_DFTO*c=L!N{MIkYMM{Ck8#9RkRBH%$f zk@-nt($YfCuQ>@HljXTUa`cA+#~)@|F3N;$;mY8v zapo6l@foKR=1xp^=(G+I37JupHxy^Z+rsV9QEJ;az2AbiM3(7d&ja@ePk%ajNqx!X zPN{5Q^XL7N&*<5syne#!aXQD8Tfg3O2oaKYL7g2BnW__D2rKK{)kY&7nWORDS>JYG z6mT`NVmD(Nt7hb^oa%1_^n5e0g!;K=X@V^|t(K;|uN+rQ-Yy#oCEltYWFHtDV*7hO zl%8|Z@SA$928SmY`jUM{lkQA0SNx5W9E9&Ds35J*nw*Tpq0mHBj=6fzUx|YH=n#dL zNA?Ud|pJ^rCHYA}JDI8p+H#nHRI@@ojB+SfKv~!4S;v?wN$;cibfwcX zUP`@}way^<&A2&*2v26B#P9gy-AyfU_-6aCIvn@TAXmZO=2G%HN3?A4 z7|=buN&H9YrdUb9Q(l@^RAl+HcK&_iMyUUK;%VCWS{VOtG7?mxv5VI*E0lxny|_ft z)a)A6-_itb{5|fGKbQ>EaidK$qrd;tnJG_Fb1(g(&Y&XrFB-(0Xebn*{2Mq9;Ge~R z#^M)pa83FPIe7BXpKU?dB-@d~3FzV=eQ= zS2R6I&bDW-S5&s zdhJYh`PDBt#IzD8wQg8X8c#P7$NBq^`pwPzg27K!s?|p#6jrIK+x}ozsd;$c|BRNL zMh2H<^jovegTZDRKp*4Z_3^L;SoT8-sDWMGhrg=;_}zv!Rl2`Pm`j1Qx;S$ZA`QKl z?e%(YeCoS#3*r+l12X&EFXgk+tF9oknN^@IK%*`>etLt5w2y)8p&9SMrQz|#IMV$| zCyTX=*?|PLkZcr?tTDijR|}2-5f#Z6q%KFpjw{iodB87fsI>?RM*Ei7zB6*b^|?7s+e_b+3{d+`1mI|jPpD-n9aQUHMPI=W zdB=Db*V|JkhUB#m$9qK|F#t?WY3E8T-ls>i47muYh= zzDk8Q;Wy^It96HANd_@JH(pC(P}#&#ol5m{;>ZS)jcQbAJis*>fSC&!-if?vqotAy zl!gSk&Qs7-}>;d&ZIJ*7;UbdeaNarINFB z>m{uTivKNS}n9Sd5ndh zUc!zG0E9F4V>Zd_4|#5y*;ytQV}nE-)9|2@^P49q)sZv`NlcM3u_jbpYQSA;@(+!v zz8t;QiRl6!yXC*PUMt|=3{^=Bv&ErRFtptp`Pj1qHyDpbyrj)=%irO$Cv143&u#A; zNzzttTPg-5N{ebVfHa2AVuGR0PpOjxs-d#+0Dg_%!`UmtTfV`oHkFiq#g(thYBlQd zdBrCxX#8(Kb*!EFE*1{1*xAvh#uX+*0kH3eOGSa*z{*#cn)NyLM|-~d#0qQkv}&a} z(DRH0312|hC76pzP!dJZrX**1q^$d7GiSCMHXPZ4&L~;67$fQ>oQ_K4Bi2Y%m7)*@ zAd{Ycjh&1b5b}ggHm3w1W+&7J(h$QzKUMB%hEAa#Ge^=!495|RV!FeTH#>eJHj1FG z)l0;cblWvhKSZv;aBlXxjTHuY2VtqVE|~~*Llqz6x2yvkDg99+7T_i3HjaAO+0Pmnz!;BU_ZCpEw)A}xKO+IV;nff?N)Tc({XM2E1j^= z5>9v`*8l1Ynk3;*eSB9OYfPkZFFrAR?$aV_>a?Cu(2KQAu(g2WS`+iw2+RO>KnarTw2|Xj zlk?RGeA_zZxfF$p*prT>3O5k|fK4z12au2O@y_X7bHG%CSJI81$#$?t;|o7T6mFpw z?~tIl%0!D{DM`^k5DH!9bgV6BlXM-)YSD!u>4%!mE(I=-M(5(u0CRi%9Pw3idcSo%!_(dcU`+3{#`J#v$om zbQ?Bqb=r0ZADFcJ!9)W{@{lPR?>Kii_Ob(TT7xoEK&V)ig&_~&{~iRGahYQPNaG_7 z|04gVk<%U(aEArbf4WN6ymQ`i&J>m(y4c99uTy!peudRh}V! zh|P!t`BElVgfG(9x-CSPERsai`i#1T+{eLUTB?==PkSa2^10q(+=TqELHzf)@Y+0a zWW=^=1JYtiT7Zy5iqN|-^C2@iXbJLH*U9OaD2}_?QbFfoqb{6NhXO+;5;mS$qW(;q zFS5la(X#ES5@M)Ke66<725t59P}axW&1i_ng`=QnB#wc~aR%`f)6RmfKbq@xZs-X@ zIwM9t*`boTnVTTU!fFF9LW!mP9JZ^y&X7_`N@lHtOMn}pscFjh`VX&9Q|{K|tfzJ~ zskZwn4}sQG17xPxWvTV0HwUFxJ?#9+tg=ZxZ0P=vhf+V@zekz@U5LWVtrn0ueA#F1 zqEeeN+_Oh9mOm0+dpSw1=TkK)AP@(r;~FZRXQ-bwoCKKQLi5yu@{&bV^qFA9;eWz& zDnpFHNdWd1c7kLQs3fk09dEAe}b^-_j!HmRuoXDZj z{XPX$=aJ$bGm3&oZ4U%!;Zu`R0XO2=^Tp@XOG@135GlW-K=?8OLTQMka(3CdJ@_9m zY&_l~<&gASWgtk54ceCaAw;jmnRoBJdeYEgh5*SXf5lgs27Y^`oP3U3$k2k%`%8bC^yPKW88pJ8SpS-^oVGMB0{X3d}oG$bDQL_h=!``bOKZnEgVj{k^( z;~ja++Y3*t_>Sv06I-3LP+Gk3A}d?!keaM=*g&;K`4pisUNrT+RRii{b`YGpHEL!naeD>g2TRfFxy!&B=CBs}70-Ut1#DyCiP zarUGHJW`pyN|ud>k=BO*6;bgbJ#U+!6}pD6e9rTi7_AxF5-mDU3>+x6CLZ`5jerKzt+XzJyerGiId1xo!99JRT#6~-ew?vOca)!pf z7h&hthZKMWDeP#M)`LO{lsBo`3s*~|-alg>nFmS3)V1ITJDqclbFZx@P)R4nvuOap z_DPJ*%7Vzaf-vb1hc`u}N1x=}o5faLXP&)~=+ zd=@=a>yK$u^k3er7+=>B;#gw=pEAI%Q4gX)LKp@}Y%>JoC-$hr<_ljaW7TADZOLy{1{8ZO>#q|#BfW7K3)Vx-~tJ=AU}2O zEC<_$o-dVhQ2fwd<6Bkn$*{Lf8S%H;Db8pflK+-$isqpKNjUcG_7jzMDY*mCa&lWD zST>BB&sirG;5IBsxIpB|*UvE$zT6otFk4>90fA*g)E%{vt4QwjYZ=3&7`9K5un%U{ zKWo9ctV9-|qnPS>+l5G(yhj~}(1Q%N(BRrgGu{X`sr)^tS~FYWMGeRu+d6Le#@@H_ zb9(5fmt>KV8FVO?6_1^Cqe&rPJ;b&+?$i=l^~X(KsKujhnOB*M_ThM@VpuphN$w-We;Mk;_a1>U|5vW*Lrephs*?wNP z1y9r*)kL>%DN^wgt8aGfhSQj(R`gwNP=tHFklSo7?9xz>kNTgZ>7ovR9Ip1a3&dZA zDMtBe9iD2_`HwhZy6`4390iOxs-z?Mf_^JprqUC~W8aV#?WAYHQTQIUn&pP} z{ULr#k2bcE<91u*Bz-ak^90|48;a1m>w99 zpc)&ZADm@Zr$P155`NVKX|mO(Mn#D*AZQqR9(w5#d1>K{q`T6> zl!vT67cnTqLWmGGZc-}F=`9mV?|PxTXe9(PVTU}X_yg6Ow@XDH}CGLUa+uhcR z8A8|>y^}ImykgB`nRz{#YjF!k-!fLmS$Vg|Sl!zQeHh1AqL0~hh7213#c7ER>eI%A zae66BA0C5}Yy6x5tu*huhjaQ8C>Ntiid(yau5{kZq0c|iPyR(|$K}#d}pEUFBWXFfB>*Vciwh)b^PBBw6%a!>_O8poA&#nAy6d zFD-R7$p;5XZ;!#i#djXBF{Xz$Wog{T-ZsB?ytkV+Xj~1DD&oPJ!}qHT#XqJ`%hTew z3B`7~2rSv&#MHK_h=fDwS=D`Vh32*qlU^d3`zxai^mv>Q4Cx%k0h+S%HvM3x^tn68 zIS!nDC!5Fqllhh1pDx5QdzfldnjbvYT@4|DY6L5Kh6)7X4vC`lka39Esb@DM71>VFG~S(;y5_M8}>?*;G3 zh8PBDv9AH^HftL4K|Q6L0eQii8D+Grk>HoVAXXKtjp9E2ra_Yul4>+yO#fzYzxi%) z4I?FwXwk?0I64S~VQ1lEq?(@Q&fBIM_>{z2;1mrsBOOIQ3^JLCf-xKfJwWT9bHoE$ z9z8YzR%^;0?Awfn4Y=Y&n`-bh>9L-j25ZUVJ!M|f;Ue2*VL6pBQi0_h&2e~g7~pz< z_^@Sflg&*IdB-dkTP(2ewAobjEtMzL%}BvvbkFBzhxDE*GJHxyD4Y8 z->XK%!*A$m$j5An7wvG%3}2&{?rP|;6q`S@#D}Vkk15L?0-{S&Br$o+6u%V~W~A%@ z1mnMzrO{xHFZgB@Esnr^oAk`^{>%(*x)5XUX_3!C@U!a`x!TTmT_0}0i`z4+GrXh1 zXOU9q=F;hp@Un@r?(laj>%PLGLd+j9apz$fKMS74DJP0@`wwiS(DnwT~=MHU+b?&Ajikf>lm z$W(G_!&aSP=h3-8VSB-><4}Y`dhY@)5}xaA>fT_ zMr-{tplF7(uubrKXIY+>BIz~^colAXXNor%Ld-u@cy6$O5GnkHAgn?{Dn>TcBI0Tt?JWV>SILmB z^9}nyul3gC_@nOEeU5?o?|d8q@BfD@atDJ~y)7g)Z2 z*EioD;HViIxbD+-8ct0l@UZE%l0X`B*5}+UP~y|lnj~*SZ4P3}RR5b?qee9Zmq$)J z!C^Fo(QGl(|Ii@qnc@jR2VpjII_ z5v5bP?1Q0jJjf^@QFQbzM_?$*VC<7Hv#4`^E60OVemV}iGj6(9Z-;U+WnoTbj`U13 zAsjKxK-}SiZV_iW#IfJ3M8}0VAR}x)!aIaAHVG5r2B#2w<6Ii3j|zcL64zSVke%4= z>}p~8T_GNG`JLZ=W`(+bOcvKYsd4wY6$nIyU<2&~j-x`bQ1?j+Vm>0IA%R0f$CwoK zi|PY=xfN&1bH=1T7YMJUd1OlPT)PTiXn^Es5UcIX3n?l-(AOc`(+kL5BQ;{_k-VZ-v$;&GCU?1Zim+?nUc!s8THGV1ejKZ4W2i1%6 zkv6^~c-)Vt9lPlgBr7CYkbzw)m4v2DerW-e$UXPpP#$6%DZT-U`>T&SkIdcRHGZxQ zGsgo;pD*W7wkp|3dE~D@7=6Ta59X8xn=TA7Ul{z`={}%3KbPZPK{sBK!ysfWr1)(m z4c+?qA}ZE0yeb#l_FIg6PvlD6)wk+b?&LyZx2`z>;~7^s43DpF%K?rF$?o+JJ2fwt zH4jKYV!g`v%I*=NW6d`*Hs?#m!qn#)vS!-nxF`2TjtHpXi;(SxP9CV|*k`x-=+FPb z8SsxC@?^Z!0s5muxC6FM*7m@qW*Mjq%S6isNHJP_1AHiVeiT=a1G;OIh5vvxyd5m0 zwGqAD+)a2|>U*S%=bAe0dsici=g_rp?e8BzO5NW?g#eOq-6~6aY7_QxU3!@-zO2nx z0+r&cQubokE{Lb`H_^qB^zxMSolyB|H=>E#U`Cp!EBLN-2XL3fYqlLZh#Lf_}6E^Jqs;8h(|CN5rL7r*lS=CS;D z3gYgk{JppZf=hOD+p}XH;T%0T1e9uDe(!k zPQzEsZW|xRIl!2dN?&Vyrq8V~bM#FBoFumosYfQSx6J&~SdeD%qTNH7NcF7U;zM@q zNs|*{gAcIM;Vq`WyGr-%$E1HTpwoigl5d~hbWHLgi2YvIQ3riPWm9Tq?P12S2`ifN zesoQ0Mb(k3qBEtE`LK58F_ko%uS;%mgW2^5L%u0r1^|VWfgI72110$&Nhm|vcJ-ADiM?~f=_JOaLBN81iO!}YcKT6`!9+L62ZgF( z=T%9xtn;@-dRtuA( z1=0VPiMA`ry6?o@_b}P*3(jiZ>A2jm{ykezQ;+$V{L=dn(Y{d?B&6YIiY7BN2NQmO zm`<=_^wbOJhT8#M_+oGWpCzQ${0(H)^g6f1pxr_cLVz9vX@b`)VIw!|b>Nu5UY^ zQchi*(T6+evuUZX$6I)Fm=J~j+$3F(jl^i*jepMj8gf7i3zcYsm0b|J{P(F}*7rq> z;Z-{JzGiULbx`k$Z*v=bGb%T;BS|b)=zz0H5a5MK{WgA+57&E!2$K4uFgj%}l-P^H zu6P$=%{mdnTBlG@`OpLNaJfx~gzo-!oVxs1m&!be37JO6$Xd_mt@R&XukD4=r%sr- z#`4}JEUylh!jye{U3pzEBy87U_X@V3hK&j-+c%BCc|E&+_}^6OqNU)})HfrGk^rc9 znt>SyOUy&|^im%A%XG-G`uB{gU!@A7=U*{cmKmFVztGMYlX8C45+lo#LQo< zIbAN4FO z#2Wm+PymJ~z^lD4Vz;j%89ERO7XlUV&+0#8P|GfUmlNf~U-dKCLINm0`3kdcx2RW$ z=0IE$5Q~*&7^-X@v^vQ-uprZ7X7u4>M-@npB3e!S3VD9>d^5qehbyHw7>Mu1K6Ag! zVA-Qt5f^V{s4U#Iw(<@ygoap!lSeyVtnw_Gu&3bKc6S7@hfG1o0Svu_*jrxI?Ds4|1RSiwod0zYjRgQo2!v!E<4pe|TCa7KFLt#SW@AEUNbZzw9d)p;h$Lcd5gZHhdNc*#t;`&ry+Ju;sl*ADBAmangU0g^C zLw}O|t!m1sHiiTs^W&#>?0Y8a`ICfn;km$MjIF5RwMrA9dvVq?a7Nxh=oYGh<^dLI zCTg}3tM=!y#gQ!aB){zLDQ@h56O2-em&MY{i*%mT;RLM5Jek(5Za}tJCfwH9jJe|! zStzb*Gf3kEBw6Hj9n#^S-Ka0MQSJ^p?ypZ7EysbH4RL^TF=NYp9fEMxZFL-rC79mQ zO?`!Xl5g1_heA8AENcTh4}1=;QQAXs|we3?z%2PScB;r;tOAWehbhre{xN!_I?4&+#`M*?8Ye zqa^48J8VD;Z2bik$|emqxS>SoKK(;X#YviekAExk?^sJ`zn2E7ifweKH!bb*eX=pck1aU4QJqC;JZEX4LM<{1!@sGG#VpsIq8Q&9=c)2impMc%VVmsdSxyJzW#4WutB+0t4i48cp`;Z!d{NPKrs% zR_ye}dvYxqB0xsPO^-rRh|MX7ZQgI?J#3Bc_xsZRaU=1xoK4UO{B$|f!PvU89-v13XXKBMtS2hy!#Ct-O?Tu-NZhLiQ$3StGttlY1u zg;n9-ico9HolA|)rx)tQcJui!zKrn3`>s{=C(+@-GcGgAEzO63cZ#|0n}yY?T5`lm zo(37f+}#0F^~i$luhLNHZEUKb7(9zxcJq{*Xd}ZySFvGagy8|xnp$66+%4V>Q>yEO zq6%0vX79AwajRq$Yp`EDevSe-h(m0C6>(4kR1Ft?*f?6t_Cxha_M6DqT_-y2J=4u- zTzo&cHZPVO(`@kVFy+^sD};qRW2TPfhEnhVKT8Lb8h0RK;dJofl^dL>?QB&HLVjWD zC8<;Lxu}=PoJ3fa>CUnB^@g1~lA}mu^v(LaqpEN?Bj3&GM&`jOp+g5xj3gfg$yBmffuE4k2PeliX`@#9HA+BUlC0mxi7S4v%rSxJ6AGsrvd{3 z%yEWU{RDj+$UjUZ&lg?q?svZ<;4J`OuXoa=&%`2D%m|%7?B}uEA-LPgtZ`I)c2v~i zF81ZNqR(U#%tV4O?hkjF>f<@;KdEzU^X0DA;ie^?!pEAzB>ut%oH!3*Tkbdx0mu7x zVwlP?iWi0U25z*uGoA429J%-I14H`(xW)1Gd`I_dfa+&9*W%G=_3ZqN$#O;}Rj)Lt z0?x0mY$$SjzFJndqY&)K)N;P!4(W;?n>>3GrUz$=;a^L&d`DkPnVUP0RGLedC11Zg zHd}WkXr~{`0;8+&z>CSclVf^6xmUIj( zD)}m^#RAVGy{0qf2&M8!q54#Ta+7iLb9Hnme9jXuj?x2Gn)byMVv~a&GL3Q>JF|A} zI_v5(n`Y8r#quH-ZP$0(HmPV4u96~`=Cl(QzY@wNcZ4Ecg&Z$@poliQRac|s;4e*d ztH9ox3Qcqi6O9xbjxW2gUL&uLZcdq8LpdU>3uU4Z(W=*Bx!OcIL`k1*i#QD{C)YT{ zuh#Ufgd>jGr1ppA{N&1NxnBMu;(CK^tj*`pN1f|;jEnki`c1sw-BlyLo7{H-%jfkF zmv6I;!cDxy55tv}(AhiBbj$0ff(;W%T<4vTmzJLPE9eCU3p+5(76jG3&)=f-5` zN<+jdI*htl$R=38<5#nM;0`1>ezL(IoaKk5h299g3y)VdONxvVR<|;B-T9#~s)+5e z+!pNiBhh<-M2x>JE}a3iI65)kcze7v3Nt4h>1o~5ctp;~$9`nBRY8+ZaZf&N9p7n|IdJND3OgL@8BEz2d|Ac0OIKqpe zp^mySF}pAIQX{glr3W!jShQ20D_J7-(%g1uv;l@WsZq0tTdSd?_a{_aG7`!`m!GJI z&Sc8kC;DA$BUJn$d$5^L`oQ&oBR}$m>IsTW+30xuNnP6_Hux#Q!6K#W1Ksc_RZ#5C zQbye0gP4|p9sB**3b|upVI7jCLQ-hmc(Zd>j`!ywfGKYl*%eo}>6=J2B_p1&`bf-g z%I#%&y}y+qqEzg`Gtq5^f{jA%SV&?hmfy;ZBJ}3L#3UP#C|*ZltQyB(P!_}Nolezp zdFv~G97xQ17o>MZ(PFWv)lyNdrz{_cfX=To!g1(3*(@ZUW^%{r0SxIEyWpZ!EpzhJ zJYU<%0d{ll)aQCO#0KK`>9QBCepAy(@mEIbs6#+)I7!Gjr(qM>GWz`_Y3>xtUi1_S z&fd)&{fU&zAL2rinTI59LTVG~0-M#zvMwf?nRR+dI`HSP@#{X;5hJXMS_kq&F)5fF#Dcacea46yb4BwQ#A_JPH>>Q-klr!XG`?$4^8pzLM6wjppm%Uo@wes7(C8l$*&5>CUbgPI3P8aQB(-?7L4AExIDt za~|3qB#G?0ore^4Ggs982zZ9wTie|yy<;9`p0*?i64A%IfI2W2@LSX+*GyQKC}&oE zz)UpjsI(gDglC~dxVuuW5Y@~5=AwE#p`v9#cYw{a=Pv{S9s*w64OXaT6GzQyf?Rht zywW}YFzZMysFmZOpQ$+TotLEb(rI`cxnz90JWUdWj8PY*J)aJixvNQWlAVTE!Ybkp zCYW&-3esR<2hV_As+}T7eXF1*v^D&8fH0hjkt7&dFAxL6Br@4H8Xc;D?Q8zMNLNs3@0et1(V1M$JMcuLVxMHn zR#(CoEbEyNjYD{wIdKqk2BJE4=D?bF=RR)bfMagbvJP#1Rna2GKDKF#El7pGz+2h%iR`y^+oPJgu_K57Qslg z;FBlX zEw@qM%h(l#@Zp)Fb%2zH(|`?|Ug)8X>u+AsHU<5qOpSPd&%>|PFrW&bwvvEqhPv~p zK-@}l^RV66-zKk32RN?AQE@Hdn98E6$1Jp_qAqh9kIQ|)FtWzqc#20b{ypSVbk8Ci zAtryXUa=Y3P!PsGWkT9Eaw^e~O5@hP1w?S8r7v+IuQqi93B-*CjH;iTC+^-^A1jw! zK3P!1GGWH5kEw0~cu92o70Xwkm|lYW0& zNKV8@?Qb+s5TZqQC1U~4wO{ZIFpmcLVfve&wLbojf;{d`?Nx%L-`mQA)xOHcXH31x zCkC9Qa)6&@N?Iz{kWl_C0r&b=h!S_~cuY za(;p$z|iI`YKT?6-MfZl2C+sMZy%ub;k#W%q-OV56J!!fnBK)<3(a}Kc0r2r^uXoz zHN6msBJ5)YIzfZIvF|p&`wdO&R74Hcr6W=EIF;O;JHSOaEo-#tVVr`k= z{<`H;(YGT|Qmuj#fil!b@W&-_F?t-(G(dF}kdzLB5dt4EaTusZ2cZLc3#_DrUim1THJa6&Y0;v8%o{#1GUv(&T zdXd_UR<$6;Dx^Un9l^ZAPX5clYlCtZS!?G0Gl}x752@2*;d)pG9fbz1yCc6iubH)= zY`vKf^~S*WEJJ?;$7UJ1GAqG1P?V;DSx)I#v=syFHwp8M#D~9l_1<-GM1a%Lgn28Y+HQ?(EZQG9m)RT zJwLyNx6!$ug)zdH+zVTeP__3a`1UDtOZ`?bhAJfX8)}zi`hfb+*Ag9B10w1xZf&Op z0pa^^t}j~`CR^5I#~jRml5nWNsaPoZ=2%9EAF$%#)ed}F%~|00TrKq(T%0b4J6Y)5 zq$vJ5^nbSESpE!P>>9@iWjG>V;|~5FEt~oO>KJqwM)E)bZU}wA_pfH$uq*g?WU`2% zqEcI{v!V1CQ^a6zc9f;L=ul&IJ^O`H_k@%RqnE4s#4P0I|HIWg1!wZbZM(5;+qRvF zZQHi-#I|j7f{8uB#I|kQJO91E+Vy^KA9QuClRj8os~7Iyb=l($*U`DgZQY+}*4t9% znl&7G9korn(99x1`U&UfNe+L(S$$-0v6QDuC&`ErMkeHB)Wjsc^BIXCv)Z=jB0&}> zE?aHSa+9-8g1=Ib1N^#nq+3V!5jbwuu&)GU$}Ct!i3xtl?$IXsW@?G^U=&>qnJ$}R z4gkc8H(XWof)v(4`~@5!u+D`fbE$Fm_IDpYSw}k0VRms~Z3hH?2egyyA%O$Niyu}_ zz-eUcA7&`ewoNT+q68|#Jpu)MN{+j-j4Zj#7~y^~NXUQkfRPg2>kj6^`ASdMhY(sS zC8h1 z_w3qLn^3nu49*khuD;8k(+4`p`#5}_^JyPy(XBAEWZcD3yQ<<(za)-+N&MW0BI67- zb7&=NQo4HqUh|m7V7H4NP{OCf9lO11M_K~}JSY4CNJvZEI#Or=8hn-c`MJzgkl#SO z>tYU>1Ub9ENhG(`*jBmNZYf3=$&H&mjO|dmR@lUYO^1H1^S)`f)giJEm&moH+hnu# z*<)2fyQw^Ah&@tF4`sQ{7bC60V|4YP(vn?;S(9f2q%P^_p|sm;aD-^vMiH^51qG$zr{;ATTf2!O(l#7j@yq8D%+l)hgdBU7 zb^1MypCXwBRs9INu$p_hBA!=oC|xG4|62g_`vo=O=vR|2ZjYg~%uyrDl(`qo7!xLk z)ym)8St^)d>U1m@O z;1aC52bWTL#Xt18d5y-4{gDd`O|@2AOu4m$fN}oB_`%1#20#DE5)~*jF zJJNK;>Cr%Yj^wtHNAQfCFoD2LwuSZJyW$_&s*n9Q9$=|A6UVOS=$TBBYUhp3dD<)$ zQ0HZJWge>Md&||j>M+AzyXPLuVHl2BAaxV_XT<~K)79bOt)n_nM^cG43ZN&(sc{<% z>#+aA@fG;h7QTrCMGyN<6x-Y`?lLpHzQUpiaYaIDyT&4WfU}YUkhkvoAG$%SLdbe~ z@Eni=>U5zrFnIv=|A{2ks@wbriv1L@`tFae8JguoT#?Zkf&`O1UvOWns8WX#(>LzR zm10?MF2VoyTlPXbDX5tXNx@ow-f+3_xk$L>i>#4FMcL4EiIsQitbVzqml>R-j`zQd zB-+w!QpL?jJxd$+@E!U37Nd2cQLs%wbW15L*T9YTsrku4djh*j4K zzFKN_7nX3rWM;f~zrAa2O-*aPX=%K3UhbvyT%`4)yJ#lbF&SwL^z&9g<<2|YlYn%V zl?1~9TAC_VZ7B?oSgHaJR8vAUyARrh!2k-e?x-;$x@UkJ`B>Of2WWGGR$yT zP1;-h$jwO_)F8MBqCcHGn|Uw@%k)}V>7U9((4@KopEY;(!O`q)VFG?(Jv%x~#-YLY zGobaGpk27gVRr-P&{K`w;qVuP#k)JMfE%$oO=%3=)1qSRsj^s38?ZslWW0jA}mt&vn zv#$$Z+gCp}J_33~l$s$D(=z$f#n)7eZC)UpK5XE2Ofs>Xs?&^=s=zz<01Dp!lXm*w z*!tmLWo!0>$!XR9k0m&Z1xB9^l?8?i_^<81>k`jKWnJ>_U40Xv=-VTTAa0YHFw(e2 zgU}XTe^&sq>f@Lq^A8l`Uy^hZ^cMX0XNL~~PWK0h^XmG7{cpak)6>(d)8&Viu8c7K zBZ_s|gsC?I8U^8@VE60IV`BfljXd zMoX^2^-gg-VQ`C!_u9F=ZaZh)q5oKo42E1yZ$kpPz2kxTKK!kH)@$IObh4|9*nIOD z9uI=^<8H+3r?^aygtmN+v7KiIhL40?GW!huU!$hQKH6uFXs<>~f&qa`!fgDAE5lmg zv981j0m8uVi1u7jmMy7{fL4L9hI2|=S2S`--##-nsGCbNBiqV<5Q&SywNMPi8{>RH9X7glh5SJ?77xxy)0-?Xb6L|;1wy>Msej??7 z7lcqJ15|NONtOGGO?K_KjoP|GsT;x`mCqk-YkT3ygzZJS-d{NeKshRgxmD}(rh|uJ z5bsCRc1sv%1FC$mkgv=@;?v{hmSFg`Ko33voB$WUWzld8=1XDzA9#uE^%pgrF@XXr z&c7Ox2y#S8uZ{DSQ%@*LCD3Nat#r7k2eBOT+cpjdHk?Sn@@x*vy-ae537`?DZ03>S zNIb*&-?oZP7Lm8PfH;eGC%lOW@d!|V?Z3#;P0aMq@^r=6(Kux4AkG4h!N@QyNX9cg zl3`>nq6zK9qZw(TPx4><$uwAew0fKl3DFSmd;6W9mE*R~{ z=2}+!)1H7@kOlA{;LKjRWXcFGs3ET5CHCT3cGlw?QWdkpOC07mDznzn)lwg&VZwAU=1%hZbBaHEr6-^IG1noQ@nw3(@p@(Z$)C)(3$>B!`W zP4BWwU`nYRv&>F9q{6^-KvPQTb?lrn24A2ID?UK9QTYt}5+#laXHv&*BWW54ak`2I!lc zsDe48Qd|sEXPJ@rDCrhUr8@ft;inM9^j8Xh#@w{!30Dz2`UdZfJ!Teh2c~yiGb}3u z@!?X=0w_g`(~jJ1@wU7T-Dayv@9;eobgoHEP{=1D$l>7}pFaA)A=`$Y`3i(;4y)AY zAS{y6`ppa(2Qg*^QI-Ef0(lQKM3<_ljYl9mW|KVwed&nqV8YYryshgmXFN*Q#(n%+ z^L9=s0(yY{QNj%m>m0XG5?D;h3WUu=^Ry7i0Pq)G5$NM;d;H)QtLes`J_lVC0}Nbi zdN1$^5#pa92!$Nu6rQ#&2|;!TJ2|hn2`kO95SXKloP{qgaU}g7hMPR*BUgwjUUr6# z%CsRQq1+RF5Mrxld~@D<90RruGMKq0$2;$bfC?9P z0}9;sW6FPffMJ*19sd>x%a(tQO^`lCC%gKWUuGyMPG>R-7W5Z!K?LTxkIc7Yu(!@M z=eFBOp!JQh^)j7zy&Ll>T7#D{e?G>5-^W>4%{nU~p;NyNl|j7yh-hMkT&5-&fR7*K zKRH74{1=gbgwDDLL7DP8Y9X!LVWTe)8Suw-Oyb}`NwZLydAnnEMY_m}D=1O;*d;y~ zUXg}NRdeDN4lf`QU5=Gjo+trP#QwyIfwK#4h3EmLe1Na7y{I=dOhp@L5%3RxgmbzRyw0dS8<|?m*&1g|uvcd4dPD_rdP)47ARwy@+Gu3no1H8(2H)O(Q4%R2 zReZ|vASVNg?<2+RT`47Ij^oHQ3~*I$8^N7fD5($cbyRghcbV`9vU80e-oXW5w>Tde zb_LZB7S4nVv~lv%d%V+G!3JUPGhEmgn1g2zc1cs{qi({I*kl7$C&)?6tEv$|?F4`;KAWTITQ@T%P)yEqThGU57V91InyLq_|=C(_m(aZh~u58bF92O#7COwVzUAfAw&{~e*pb1O1+eJ(9VUqz9V;F_H8E;H zC_xR2-%P116S>AcwgAT@VY0`Y8K1P$Kft=Y8%+NaFzvy#W9M3|7Iss_M~5gJhn@9v zK#(5xSJ2L!-h9ArdO(SKeDSOGCnB@Vf9sAK66P!^qCug_>LJiw(ps{}oriJq#e^$M zVSCVt4Qnpq4}c8PD#Gmh3>O?52IF+_nfw@cq5#?E)eSvBcl3N6LO!-Dw<7=J^|zXZ zi62ht9q0GYgR=WL1+v|h*MtHt19bJY9Hs(eT2pk8^I3=*8Ad6P1Gbvea7-bRINK*M z^j;qsGyRg(>AIxv-aAgPBauZ39=|=6z5q$omEm6ufEcb$O^6v~wvvFev*a!NOUF90ejX(k6{t2E%orhmi03lW1VLLXBs?h+VBKDvx1 zN!3SR<4VUdq|YXaVW!Hgx4gTF;V9&BZ(A+e>o{$H32lG_v&R{2VrtEl$|vNR95SOt zt@@uC;PWL|r7!*EDWiwd0i*)f`c;>?m2t&n3 zIVfdH*0dXz;OHRRpq`QM8F!(e$6p@B>f=vGZdBY-v&xnnd8oNUPyOn%tE{Z=_iYr; z7G)z$DRrgKb74>PTZ^q3=+QN5t=S0w#FXbnkl?rU)hiC6!-DYsA<1OdEtpe7Q4+t+ zy2k5c0koG{NJ!Ar1}z$+ z5!*k;hN)B?TzvzAIEL!4!onJK|VHU?Tdhc-7FB&Dm;=MfNN5^yP9eY9b5H43^8Z z8jv0!ul6Z&r(t_o#kHCOvVe_I>mXofd*F1U3NTFE(8dJJY125XvD-Z=kG|H4dFxrs z=0|$I?a!WcBwR%$<9?zAgAJNu~Cq8kxDQMVm^&!gGTHn$=5VaImc_l zCYg>lkKYy~Q0?BRozSpvuTANZm0%>meCainVE6zdOzdaXhBuixkf8YiSRJ2R;OgFm z>>gjynW*apxy;1kqek(b9ox?+5vMDlj3yDgRW8az>6z!?;rSUWM{K=?gs+b*`@`XbjoTlPJn4#r|B@T)h1ViJ?~u@F~^kWehuk0$`Ju5VN>aF-!izq zM9sG7;Y=&qLuy!f>(tVutY0=a=bTDpH}`l9WwSIAB^$n{0-UzF_P8wl%>31Z##Pxm zhQ3)Hl)S}Otn49`7qq=!Ikl;M8xJ&^NJ@#2v0^*cugPvj*9K2Qu=LGpFk%2(H6cee zAq6=}PX;Ae9t9X_3a~6)$R*r}`M?Q2T7jqJqP>(%-eZ(f}zgdfHBy5P!mY%eJE z+lc<&$m+EJnP`R8#_te+5pntfpko}m$56LLg+M*%rn(L5^6M|y|NC4BeB1ZA015~w zk~lfPi9CI#28;`^?!3;0;-{eY1^jn!_~2IBzNbkmRPb$EU9#JGLiOM#kC!yv=r&RH(5ldv2sJa6q^h5P>9hDmtqx%z!QzJOzw`!POzseW|ue!qKXJ^Imlz8;}o^h=9LKjfQF$*D|#`tapKbB#q44L=E!;)laH z(kHS`x>%kAZ;aPx-1X?gp=auq!$Qt%)>rIMGfIFK);k28>T09{!o)0;fh$!{(ianA|x|Ks(c)zpo+ih{4oE;-l;S9%V0?6`# z&FC-0uvW#dVYpFOlaI+(cwBV0%UJQcz=Ehj{CavoS=@f0H&fZ(kLSYLaWt87(A9?x z|GI;~ELzO*@+4Ey5-EQH^u}X=3#u`$`^*1%(vS^1PQC*Y@WGvR(S!XlOXyxkr--*H zyIK4EXJBzaRlstu&zOsT`7<7CSP>+|PWK@)f&w~D+FrJhG#)2F({1LX#RkLZUw2{J z(~Klw)}<~!GjBESR!%lD_)fLr%eSz;fj2WLhGBHf)m`^&_31ZrOB@Nv7ZPI>Xnu}U zqoJ}>zN{G=rS~wKk`f)i{13zFi5dx2^fx&c61*nJqy|pjcGj0xSl1$!YH!WesB%uD zTr9F>fuIy=)T0*PBxr_ICXs*(wfy<#uHhtLFNvo$SE3ixvR0dgl0BkmUJ?cJP|K0P zEz9nn>_-N$C~J@>Fo{2~oG|G%(r8%Gf%Y3eGPqlO&?GAPGX19${9d6qbD0bRES^;5 z;ritQb|}JjD4_f0q|1YoNwM^3Yf7bOPBITJTzLQdX|g@9cvrs}CuB`M(QI0Y=#ziyOD)OY#- zy0PPu;xHL5d#|6wgAtRj9GxB6upbfQAvcu>-GNzRJ27^a=z+KPgo!X<=3>JoHGXyQ zdMWjN4|IQ-KL0Hd#KOZveE$nrvvkO?QUJ6DT7f(#82^cz5ihWaJ(UK?kYAy8GjG$2urzF6hykm zH~#v3=u#1#7TX}Cdczg2C$-L3(89BfV6>biiSbfKGxp9tey)C;XDr*P$cF%M^uG>c z;grouqIh{nW(uP5C4|ce#4~sjp2ZlY`I|tyg2CEa=avt?RnU8yj_W@h*w3;a`3Xde zY$YculkjPTBE3jI6}`YU`jlh!F%WhM53?-}EZc zoedK0iQTy45`>RZz5|@EBKxslOdy6V6gOJJ9x850pPCF}BPFb#_(xO3Lt7c49^JQe z2Tu>E#TBW@;q@*E7wpj}G#*QPTMVW(!EXnuwJZIuGmfxoS%&Ce44ET!ciE$N&??)o zJ`#1FE`{p!_3=Uc!95v3MG|Q-<~^lkTb9aU6ZDf7V#`U*#VGZ?hw@;}Owk6v2pVbf zk1*P47P5?R@U9styz%Wqsfb2YKW|lM`mAqczx8YC8Lb{y(Mzx6d1)L|SA{DIk4?g) zdT@-9=uW$j>{|&Yc#!uRh@IB)4bQf`gu zQFRF2&3)NkaFPyi^Pygb9{jF*_}&<_r^73QEXA<2?D4k=CXNxAj|TDAKVC^;u0-H2 zGCEgoQ0BcI4Zh(UjI6d(;qY8)!#S0@Ov0d}Y)+HLXjjP3T!aSy*1LA7UXx#{zGV~o zAk;1%S>Qy$0XOqoWLR3QslV|8!J>+%M1+X@izF*)`NKH@Qq^e7DN(dTObWu^F^Sn( zD?l^qT<`XneVar;UzO8LNYgzDUNwE9y=jrv9KjAN^!Y11g%{hony`MWJFfK@7nU^z zU1wx<$|dOYi6KK3;kG(r%Io!=Q*#;L1gq#A*D_ua7x|8|x9^~bh4ov)Bq8OjkJCiS zPEwUTRP)$?7`D?P8mF}MA$ppqYhK{!&?>HxFUSxs3lNsHE0o4UO+~>B^Bt6eEZ0>c z3ERyigr}lcJd_i;zXnWndH0H_(3*WE59H?I>VA!>M^aP};fuFmG*tXXhrl1wCow-} z6$4SS5(tiuX`&3a*~^wwfLVw1zhKT^1bo9UjG_bpHkE_az4<0RZ`|~a+XdaJP?Tb; zPgmUN)TEQrQoS7okrS&oR_vbiReXg&@i|ts>CyZGp~GyKF4@iiB2GWe@WlTR&APf(>qk65szT z=rSS*@P+&-B(s1`Z^#G!e`hp=>9q+EFzIkDU>JaJhczy=@9v*~AY-F=kuu^+hm}d@ zuXeSwQ~U6=tt-f=1Svcwu<)i__lNOs|7j^GsQ`lHC22cbz{l3{{nmZcB@=SbQN!=t za2=Xipw7>Tt!>o)D~JVy8S185#UxFd4vNGBFvXxGGrZrD$dhT+5!PjN@OK2Em=ibkUQ;s9XTj>EeePz&TV&5sPBZ(S&glC84 zkEJQi6C+%!@(4%Bls)g@2s-JC4Z?jl68K7LfJ8-FV&R~uY3~HxPh9Ox#Asbg?*NcI z4*n6!O}g&6nG)9U(bU7~Ga7G}(mw45)nQs?U%Q`zgnj&pbpJR^oHV=Bc&zta1veL1 z`Po4IzBcnE1{x_0Zr)(A?3jHi=CYbU$&~hwgX^lLGon~QEFg04c_M{mue|)w#87<`B(>r2ac_0D zDfmT4_SAYP2n3oOT-FbQ64i(3AI{cBLQ^7mpxk>{t2$AbP}-=pb0H~kK@LE|NVh#L z6(CwLcP+BFVdpl>mz?1hlaXXB@^^gv)DkX97rllbO5^^Xn*Vg$EtQ)=OSxPd`Gw`Ltc7&#TZ}E z0_z)%Y5X#z;JSb|H5rHr4mIE-o!)gx6;VyrY`uRDg!Xrd1xt_UpQd{OJ21zmS}B%E z?{k%{z=2|3x23!2xG;HPV)XD`IDm}K6jZM>Fg3?wS0cI1RZy&Ngk zjy8+QgUX&Gi3a1OiiyH-@G<#ey#Y2`$LxDPpA8q_PPx1 zwnx}!s!|Z(;z}~fsY((a;fsA}vapnQ79{`g+I##kVwQC74lsQHAbyPl>+8G39}-iH z9Gja^$|u{ME}5!%POcjlN3S%J*feNYHaOPyxZ}OwW7~!jj0?qZzF80{?(^;Qldpc$ zYRqI3%%i*9heT;Qk_Xz$cQD8QJn@A#Q>m3BRZ~)oz>x$Sf?EDYMAowCcUiQV2%8%F zv;mLsL-SpIt|b$|@-6r+X9HEX$BM7mI8cyT{;&OJ{eGR~2y`vtr}v+&y{L|(ENL+l zc#Ya&)h4jkQZmFU0lYVa6hA(R6IRiP!3;z_e%hQGReO|Tek4u$6nP-)vTz_ z7PO|CREJM^go|4$1l#lxAKLdqH;Y;${qi|XQ_aC7%~H4k@3pzD!0f<8gH>9aKb)%D zt4$pyXl%J129`qNVnm?_51?sm?2%VLD@ zSv3BwMiC+`$ zectk@IvC3Up>3tVdJaVVqQ|w4# z@neXJpw6rlg|>RSsEMWI>oyXbj9^EJN?0v3zNBo^p(|*s86t?3yfM!tNio6_*nR{& zF3Vbg`z9K=qdxbgIeDnqFlc)-&>F+&O<3`dkg;l4qb3tiQlUfT!s z{q0FZ1`EVP5Pl`M=AZ9MP4OOXUJyhU&6wl>TG^?h{1QH5!!fmH<>{W*ru8Z;{2~Ou zXWwt8Z}clzGroIK!B?5Ne9w)@OWZr`S{*I$f2eK6vDvuDIf?@F9+^SF5&znbR1 zjgtuEYEE}94}u22s6@95_mh$A zIMH6cEy|DyV`~#XZcnz5{KCom4EIog2C+WivTlHG3R+e-_$lnvC0S}SA*pj~I|1_SXde%N(jsaQ>jf(AnKX1IT@NSTQl zy`dobi%hrP7Id!At>C|3}>vo1*kz4lHy#@r{rU4P63;!RWjU{WhV@%Mu)) zqykrjsxe4(^M_1@fKK%F?wj0K0i#Elq;$Du<-ot z0q#_EsI5>;rB6+&GqRq`8rUF)oB5OwFUgmtN~;lJ^Fj?GvPpl?Lp37a>00azYAl9gq?seBLy+0T5XnR8g1jo z#dN_tGcIefng$JZkX=NjT{6!s6>-AD;;b~{Oce%0X=^g5ZtOx2H(1p-D7_|)VnK0q zbp0AS&rtPVkAv1@7{WQXsOv+@Bh#+%!c0RzQKfYf7zRY55k~F&-Ik2eDGaJr0-82w zS^g$DrCUfUzke&pet={wwM3<~^3Hi&uu~Zq8zH zwgQu*Xr^j8yS1P5VR2Vh&s7QwkwBIVB?_hz>M7RL8bMjH5r^uMjY1`{$v|T^GBxyJ z{|)mrL~J`gHGFfDl8H87OiAIi4{McNU-Gz_^IA=7z;bVpQRqJYIcuxOxoN}N<+O?W zjO$%MyM|ygn*J6^TPL@Go(!YiZBdY7RfKXkr%pCSM#}i$r*z5qfA0s1Epy>&{Cs8t z>A&-VDgN6JL{0}JLLjEI4*YD*}6slOMl;~1rQ zXHJH<$dr7aJCCm#?Ox?79to*Q?uysd_9GN3}0I&n5TrE_D zO6eEC##6SmP4Rz=c8R0`Z~JY8MJ4w1Qdcf&mY)U%Orn990%+V;@ytJQSgd1H*iJDtMc; zO1|#MX&fQ}kR5T%Ya(qw9P3Vdw*e~(?;pEkUst@?%*ke`BsQ`D0E{ZoDm0M;+f%0o z(z3|7W_~Nu8*E`EwO9`)@BJ0tMQngaB$-2-wVr${eGJ>;Hm_DI+cp=g&xaKgMao=veF3s13tJ5aif=_~fxpf-t zC)8S)G%}}RQajM3iy>_wB#kQMPxUlZ^r?ieSMr5<|JO(7buBrP-aZKC0{G8J_Z2q? zV4@<4RFzGRlM6Oerj~WxlWP`9Rz%NyTFU|tU$y7l`g*sev_j2NH*+=6KEJx#aPf#| zbb2FQN@X*TduOA-)6*0tC5eyE=)Z=Y`;>y%v3=r>YbQeF+C!_R62H;g2$nR2_IO54 zB;weVo`F9Cs>*@&saGKienAhdTsDc0`7)ny2P{3##(+ ztq;h@@w3ZmklzUf3}Zeh9Wy5~y7>Ic1Y*E^q(b#7l*kO&TCEC6*fVT)+42~cu9VT` z(j6`Z?-ef?x;RRvQSYG7WWD@={vC){b}2RWjwaPEC-hmAJ=PE6-ZuHH&Rp8)f1nDz#UtA{AQ?GUqdF`%b z&>HwIRCOifl>~&j!($>y=6Z^(NxM06?NOusil&AfkpC0>4i8EW;V4i_TK%;wleR0#yK?DDp&tdwVH=-w*`Bq0y{`wGIttyfm2NcsA z)&eUcaIh%e!7s3r`3IzJ9=!DRe`Uq%;RoMnfPCQyLnjdaLZ6F|4#)hnu-crS`Vn899uRqMsJ%b-n&fk#WfLhh<*a zq!-v&bV~v4!d+zF9qN>Fg89arjD_Wf98GFh6=#qpyNG3A&$_m+=oV)e^}4tF`Ror! z@<)Fgpg+U#pXgCH!WHBc7jWwSi{+z8nM-Na^7k>T2pIXXHXlk2CT_bA(aJ#h0P2E6 z8_=Wn0JuWx!kqJxMKAj5SAw(|6Ff>f70ttTX=&7Zkh{{AuRh4f4VWQ#|7m>LMo$ zJZ4V39X2hzlNI~J_GoU!xKD7n5fap+e{v;B?Zj<^O{09#gRPneCI(qJNG73%P^QHG z{I7b`Aj-Fmu5C|L?9c_|G*sv`u@9UqeL_hruAl8CGxxI{x>hL=9QgPnfDv zHyme!tTC4*>S?oKGwe%C#w*I~{cEb7bEM5uy2?v!@5W7>Z0y6I=ASPDxz7}o9|C22@S`z8l1)O6>66F@3$Zi5~} zXlX5b0Zc|g-$x4u8&z;)HXax{4l?oY@K-m_Mu~O)(#i_vzV_vuWGXGeM49%c zkzMD!hhTT#M$Eg}FZus7VlAt-b-{pqThIDIHn;8u1K{5SDvp^ZO%=DIk<87)E?XP`0p zXPSUV{mysk(j*ejhmj??S6Hs`Hq0 z%J2m>!PNdsA`1|5Rl+uM9AWD}_#;-0cNw*bs zT2>atB?2d}5V%cYsYW;gw%c(uJtLdx9&{C5meSPgw+wLTRFRp?8B^4KZCdcs@#3>} zjPLb`j`^r`GH#gS&`)K@w8m#!$8R_uvHWPy@%7J%wWZqF2Seg*J#(W$-edPK z{TqU<9l(ZDfKdI>fhg>1UMEirmD8lk@B!Ox7Bj`a>H6%0Ph%m@38cg7>65OTYnHeB%^cPzwSl0c*uYj6=fJtT&2N0VMbV)5KW%;S)3G-gfW%~^OBY$e4%r(YBE!3@oO`ly<}g z7z0k?47YuhYVvMCvH8vyw~d5EV_Orag`)UXGzP*I%+JFk@s7T@!632>fDpzD2QrA|bvsctN8Lu6G1Nt<5T{z-Pso=)j>_g_EX6i@rxHW5y*#2>$ytl;G2*t#ij z*a$rUe0zN+zE>{n-`0%|3=1XAly=c`bSds%N?nx)(Xc< z9uX)r5fOuhamRm{ywrA8j#WS3TpSyA5P`HWOZkcwEelH{1T$%Y&zup({S(9_!$FP4 zy$<3AxSwxNm3{F6B$bm&zOp^LG7_nLx}nNZlYB8_nz-77%j)+%rGqNIYChktF255Z z$biwY68O0VkIC{Hq|SPUp?y#p6$#|egY)FJhx^H5ra04+tq!NJN7=eU8#F@iRoKES zNl-^`-wqt%vq>e~%b}quJbawc5}m{;9*+e^Y}AyW%E82b*b86i8Eg}Z2z#blNP@{^ zq^;E=UYNSbWD#p6W|72AFIjkHrp%Fmh&?(z45W!0c11Tl6`OsGG#0E*%PL!+>@*m- zFBm4a$>}5_>FGVwBLyM)ZM-htD9p%aEc0x%2~#G}>}WxMvQy(M^kzPcUTSqycKN_H z#&J6~%x!YOtt~jx-wMu zNBtu3%k#^${twOd`~24O#r!uoU=FhOmMvzW<`4jnHnVjNQ{)ryYx-nMGyyHBZwG&r z!E$~QV_@Cd?x@WhDsh%;3wnC(k~s!qW^O2l%p_#yw&!cDIDSOndiyly(@-FPODW6I z_u~}RJZw(5IYWL(l$n2Tmw%)UOAykV$8*(bAuQ9*!GmYX@I_*iwjWr>w1mQwbSO77E|#}82C-7^et%o1t9zUmb@J%<>eu;Dr}G@ zLFO=4yO(gL*U#=3g~~5V<%JbeNN=aQ|F%eguJ0cX4~8+6@W5E6_?M^dLBzL_0EJ9k^1qq&bmXkjVp1MQAs;T zQL+_NhZmX6VnyhihSa%dDk>uqp%Ms&%vb)k>UHI^yU3XF9SvE-O+t|6@;5$Gxnmx& z-Mq%Sz#RjV<%wasXXYWvuMm zKy-J3cOaWDFSMz!Tdj!P(&7_1LT!r}9Pd7jI8i3G07KH(>;?#kIRRvf?k`9rqMAgq zb_xICYZ||?g?ojC;j8R{8dm={pkdrjT!l<30R@JKNK#b&#t-6s76Dufc0>8|d67Uu z6+^f4bFItGd*Xp8q4H?zgvuEqtS3G%oc99?mrsEhS+kriRungWBfo)D{z6i6-iI%a z$w@Auue{6iG?Eb7@fWi@2^mt|)U{teN>SmEc~uSAm?yZbY8acHpm@sj2s#C+p6B^0 zbo*f4_tX$g&1{y4QUp}c+)Jb>Mq`%g*7u3qiBxa&F%EV@)kR|dBG~nTBG3%K1%C^P z2w4S}x*wcMz3ko&KPpQ+=q4O)%)BDV+`Bn4!8QaQ zoFLHRXo(%mP?xVx6Jjc2%!CCsP?^6x{=>6L6#rD{yq_>u@ka&mBjRCbB^UNW5yr;G zDiCcOl0<|C{88l?(%j_0_}+zyAK3+-+#oRG zck5x7GaUN$muYOq2C2@1m^W&bGDF(cS7O6z2w;EB|GoxXo=LTDjtL`bz=7gnHO;v` z>K!oJpzo>Y-OKY>>Fma{z|X{AmWCwjr~$ew2n1<$}38nHN9!!Iay)g`y{!rN4`fL>g%f*Nye+d#CP0-~1EvxZtXzSSZb~a{D z0KZ5@KURS8UGfAf>v&}m#zJP?I-?7HU@B*X$UatTm5Mso*NxA0^4Gy$sj>G^11{CJ zLXf6i26a()T3Js~VN{5C;c+NG!tN!hvFMe$c(Hxq0)R-R<+qB!D(lxBc(qL1R;vAM z9a?r=&N6f58v&k|T3uqbM1X~ac0_g>Kr-!)jDhaYy4r1wBHI9SDohx@_5IkEcS@#C z63xwbiz4_%1*}qV?lKhgw!IGNp9Yr=(JhhUI0iQ<WT0pA5p$5ELIc z>~>&-`sGZ+lK_46=OP&c=`?e`br}j;oXVnsEi-?TqlGnxyMFlgo+*3~g50K#uK_bL zM6+4hN{_oE)mCpjMdjfs&H3#yps-S7vAH8hiSmfgu~Z3^*i1A9adsz>kGgciZ z1cpi-f94KCE;XzwTuI*v(PUbCIB5QjBU61@RAy_)r=(e?X4>2!@%!e!DvWK-w|yDj znks|C!<**~Bv#%A_mOd}z-|M9bUe+Ams)(=i^JJIo9r#%hyQaA2|SMga0?q1SmL1Z zy_ZhY9g37O+?M(({7`{>K!&W$iV-I+ejy5%(=e2blPTpm3&`P|2xzNTs|<`FotJMj z88aw)aPu${T{(uEYAJ}jEnnSKwBqh{OF^?-CkVne_898N0+D8c6y^#*@KZ$|j}dE+ zENI6WzihCcT7d2P@{>{fHdV~^iS#n~cG!Yl3K8a+ZvhGEX3 z2$4(*;DwD(P(a#w>MB!)Pc<6g=-)dLQpsI?J!;TOnP06V40SEjt69cnp04Ymlv42u zUNkuLnI`B!Doexb*M+0jf>VoCrY2nuuGD#fyd4{v&^4D@*?m<4@R*QQoA8QXi2&@e z$5KAsfb-AezRY(wra5X1Y6}~vc>!b+(;!h#ML8^l_n~taM}x+Opk-b`*qV;ioA+!6 zr$D0%A?bcfR&@#ewcDRq(x%OK`s;?mZ2Y=~YS}R;Y-IIU6_!(bzUIA{`o+qIBO|_wblW{at3XU@Yn4({?)y#OKV$B2khn<+*oAS9ZDNl z_6?pbs$o4f@p@jMQG_cVxUgIaC94%1sD@jl$P-q$`-J@bLU+?%pdPXt@~?D0nN{VG zLQ|lhDN1@TSB%%1l)4|ZCh1t-3t;0IB1JTx*SaqXB=P`=akuxvS^;61D68wn%WDy} zSPDesSUEiP`wGzt0$gIX=}@<^wBl!}TS_HFQR6P6l8+r#cm}68mv(z?@98wSV?cNO zg9x43wXp*y1_4!fWF|-WtB5*i0$>9apv*+gBJc+}kaOvrMc1Oy)i1&{a$*UOORZ=z zVdyi@Xwm|@|26)2%M?3RBgoHu2XeG#;kkQw23(C6^2w-jc@HmL?Z2=Dj&fH#=^p}g zvk?YDII7nLmmd(}^wTYMMdSqT;rW^ zsX)5#QDS!L(TWN5YB*%Cdj@gZNFcplj#&aHy! z!73O?j}Bb6!$va^psp9h9KCwgLCE-0K~8`<$)aGVnj6m;|M1*rH~UGiVxy74qCGgU zzqSfHs>6@TtIuD9Kt)5aI5@Pfbs=-=M5|?$EAf-RbF_oq%I44#RoRFr{k*@(4Ez`4 zWLcxBUC~sXH?iNOm|4(>lHpSICX`QK#O-y*27LDr#GTTk-7n+RXt| zH*0gJ9TD|W=DeB+je1A-zv_6LUH@fLg*~&y)GFEI=ppC4$@D|Z5_=PUo1vQ8;ga)Gw3Cis-fc1}p{kvm#EYsYce{Q>|^cJl1Ub zOI4Bzmr$$%!jaiu2p7}OEjQxMq9Y}sG% z%~>*&+|-S@(oRIg#vi+LR-*5Ef#N`0wflYuKjc3>CaYMSng{^5Z_howx62v?Sf!Mr z?Grwv(oJGHEL#Y_TZAs+WPf&M;G{nvsM#w5?!+d{=1`y$s=EMG4cqr?rUZ(X;8nb$ z&6T^f9HE9$oMm3A41BJwY^F0^Q4(`-r+s(z+}$BuTnRKf+ZL3!R%z?Q z_OU6eTe~ms)dNyDWnY`CZ>+t3e{8V5sv@+|^|quQuC`?A8~(u)Ilj3u53qiC^JeC< ztJCTRF+d2&|C^+O!n;I#W%LU>o&`(x%%JcujBtgLFXq4EJ6=5#X{MbENltw@JIfV9 zEF#t&cAQ#@`)T0ReP2ei*o%31CHP-&9Ffx8pv#omWw`(%bdt{d)s56CI%iG2!{nIB zooMwg<|hVjqY3kko;-NQ$A4ljt&`1)Pww1$;H}5WJ1gp1P2~yIA9}%%%T9D;IAS{R zvOy2_w{_CuGI#n)ccqR_2XvS?^;rR#R67Is@;}1RUgQ%DJygxb33`UY zW*$iMKITYB5ZT5`rFW(A>~43)YypWxj}IqBSY(2EEcN7wJTa57HiR)1#YMl_M-PX{ zIxfX*A>4tY+@|>4GvFQCg31>Pl(+su3`T4t^E{oO5a>@bkJOx6?j~LCF4Acr-RF)S z7eau&3!;)inGq@bN%cR1%3;j+)cIF?WTz9Y-z|L}+_HRd-h$eWnN_P?6=Aa(S zB}s^{<@byIve@DJ&n$&5+q2)aR5B{|a%Q<@&knt>$?VKTApzIik zjM*IpJt!e!M9Y8e5Gw6v7&cB1?NCb9v6P4gi4=^;(}oveTH^r;c^PoW%`j57 zFx8lf&BMSY3YK(=mUQV07JhKi?Mti__FQ#bPP*;1i^*N$_@d+5G!+T_TZ(|9Og@eo z){(QbCG1L?Wr9L)VN{TAzJQ!O1iOZL&Two96q(G}hIe>l1*J5p^eQi1My3P??OD_Gnl>HTRY68oP?6)luN@ZO8oS zrBV}jg|tsNHk5Uh)7Q#x5q<8ft!AJxlalk1C~hk>-XXq*_0yn@By7>4;e}98BdD)P{$W zqRBLV3&wyl#J3!>yg&7xieh@^BZLOHEg#-UhL4atQ*`=Iy(CNsD;3~S)WchY%@)ofv>DBHA$vwBTi4V?eD2h4#RFm#$>CY47SdEX%0|q1LZVc*J4*oQdOy9~qM7 z{pDjw8%FI}UjEuv{_2!R;>|@A5uT=MuIE0{fYAq{2vvC(bR%pm*gkAXa;=Z%GT4AV|sD+7u5dlaKbu#^*;&zz%=!1i&>B6tghJ{J~+nj8vWDpiMfYs z4H4e$J-UXR`8<2JIl?Fg;1*A6GftcdeoX3XDC*}S?-QlpYUenQwJdd|2trl@rn_VW z9X$ZPLK2B}g4Oue}&8%pmR3#DFu#jAD=*bl!2ru`pWJ~kY^=?(;YP@Of& zyUu|TxhcUDKkziL&dsr* ze5Qj`;LmRjywGQ=G1OdO&Ru!z%6I{IkbOkHO@No4XQ^Kz6>l-?4cAudt=dL{LEA~% zK%Lc~w5$PW=r)f;$tUqa! z!<^2RTA~4t(dc+9$?<>^xs^CBX#7!9nB5*$u1s_6sGTG0MsE76)dut~Up;^q1X?t*ESS7hog-}})fCjErR;^xL3&5JTzgP$RY*|JzJ2ddUS<0 zz%v&l?E^QJMrc;9k>@#F*;a@q;9^WGgaJlZ9NX6UFS7gSk$v~p#l^>^z1M@$Q~2ucna}&5^Vh{4 z=a)y-+UJVrfp>ikiHFz`Nsd`x1VbF7H^Tt5but5Y)NjcD zO}UVPmcgH1{V}WdXG;Cs`V$fNKP+T}PcYb2!CNpiz<-YZQ>n;JImtyIL~sJfCkoEYPZO|l5xeBd|k5_Nkn*RC=%EO4g!mkCNgLJ z?Fubo)rsSK6gFCSQ>SF&D)B7bUe}4T(n;W9)DV7;^)PATq~5a6sZl z1I!))7jW3EO_MJ2^6%Q&E%~|j_}8nY9MF~#a*Xn&|Ld3=Oh2!5~?Z>Vf?Wy?t813UO!z zB7=y6+_Dj8t2mm$j2XCX_mu5@<4DcFO`IA=;#rJRREKRmB zKRk(ftL`U>PaU$v_z5)kWr;(N!nneXTTnk7a zY?o3I9|@rYr0Bz+lX!WK8~Z84rG1hMe<&}Vpl*>MUh+FVu^{XOU;-u9;ZxXCQ-FEY zYKlTrWj z77+SH5@CRE2Ti9OM}+?uJ3v5COyo8ZkSj)Yq8IaB+LJ?kz2v-;;Ug>m9oz1I)OJiQLwO5tju&7IMS8Pckv9}Y zftd)lQ-o4Wn`TJ>pW}o?2RH(T(62xWLUWR@#Cy0N1Y+iI{4gU4VogZ1AWOSF01ZNY z->sME)?prGV4|fct1L0p6EsxryP=9ff+wZG0dgFn{0gv7n^)>N+nHzvcbyQByL z6yKJ6scOp$0=ov=anu^P1rFjyNW$&cum*!2IFq(e++g3>Ots{K0}i69C2v?=JA5x! zk@H7}Q6iR11$RGz3Mu0s7l7{8H0;q5SamJYJiYtXaY85VY?Fb~>W2e@7v_pz_V*^z zC8#l#eFB}64^hh-(|pXcW%G}+nf^k>q75%BqSiX$_tt^E(Gut|S;uDC}uj*@)A6DM9R2Z}i^`fe$q=Tjg^&u*3yraD=*blKRDrq5&aew?H+AQ$1n&L+s`YE-XWo? zP7unRGT=MC&4~WWNK1wbg!7os2rWxuCbcw&>IW6J-i(tydmSB8pDuy%#g_0+#=}tK!*!%gRog;ww>W!+fyqh&BPf}HOjL@KS+lBhuW zAW#UdJZKs;uM&w>DRIRUa+r8&kYawzf$v?{<#I)ZO-PH;??hyAstj|^jSP&}tG zus5dU6Z+$%+9ns5^!3+NnG+2qi@Q$b5lJHQ&}!uWRR+&Vlw2i7~5(pDBx365~@V%eLtk(FSWC*-C3{ucR*X!#p#YX z1fr_)2p=#<^K?;Hgq8%iO+cod zt$=iRYkH!r(_TNQ?f_hCGaobA;6O=vfmZ{p_u{B?iJS$GVT)-{zvB!(v`0uam*PSmcfnqJ8i}1`ym_s(-jT&D%#Fg?;KuT{l`EV55vU zjLPkCJDP1+Ritp>sN4}#$bZeBZ~%?;B1GtTHG(Xa`qDit!c-A7KuK3`c$@y3??&vw&)d^aLH{?T->s9A~T!=$L@H!J{C@30>80RN)O&0WqF zmC)<|j_7L-n57;a^AhFF9aFJAQhdrUOy!rr1kX4ION%;blgmD;f1ZEFGypVv=%{M0 znCR?aEdAvHfZmXOb?!3+AV5T<;NB;uCf`enE`9^YdLJRf)hqhOdnhS{2Bb4!xfc3> zSSc7JdOgqd&Hi#hYqffcgZooM1AYLz-C)I1x*K2xiVhX<&kN=s#D-6t8YqPbGO1Cx z-8$#H+i{&`R$`=6xs|R&0~EmP!yf#QSBxawsQj0Y(o|VwSMtIh&ANC0rwQH2!v!wO zGcLE>=DJJEuI<`;@3$||HqS6zT;^pOkM1jNCWZt1>izc1pOm&nv#CT(8f~fGw1Hld!QvOD*otCg+ zL)UhlAIRwP*(N()_nB1b)o6_*>SP<$WMuw3S!Gb~zvC30pbEGd%feQRpP zjLmM*P3VP9`Z4f<6XotbK<x-N z#+kBviUWfnoo6IXUyz`V-aP8PmY8U$qSTwK_DT4|v*Y9TjPG$*!ik73-F^&cCkM&y z=qDo1VSY2{10Vx$q0G9(B%o~QzDMgkgQ~Q%cE}{rHeYwoX&B}G#sK#}Y zcBs(^*hS{#rqHaU=0*yj{W4JUZ|bKTZwLw&A=T34k4TdOCn)krnOiwD-2~SscQ^td zs~iRt=6lW1_4+HMF#)gh6{0}LmeCm zcon~SHhUM)_uFWLo+LbvOsfwwL;KU`ATPB{#MSaO50u*U#C+*B-aYgqg^ZRdkM_ze z&UBg6KdhM!hzcjZE~nAysu@>(OlK|!Chy1YfPderp;X2*z~MKur=4$XB` zJT~6US$}##KJZUYyn?MkuWv9(RlIgmXg1MD#>5eT*(d|%z><7Lj4m*+Rt6x0NeVT3 z�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

snmoG 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%0AT(%R4jvYWUB;%<#- z1#XoaX+n)+Rsz??k5oT|+v&o8I$$Fnfm0^v3J5fsTp0fd642gJ_t`L(h;UiOkp2~K z_kP~(CN9O{n>v;VbWJBQ^kp#xX+n&xI%(B?>k?e5hQ*T(Z<_7uGK3|y8(kI@5#1cq z!WB>X?P~4Z6vQuexZTfy!9tpL>{ftzXUvYIM>g7}$2vN-*@wPa0&X`SLVrh`l(p~R zZ>=-JeeO7xO1+9+i`iiQ1wI(xD|z*<$nrz!biv^B<#U+>lq8rqvDLMpMtBD?AAaRX z9kdeYCQEwsNwL4Htw&oi5mrbTW7Ipb`-PL(KF;i@MT%)b;32f{;q^Db3g5q)ktd=< z+2VAj`zpD~43ZO_{43AtE!9=N1L+Ut1_ME%2}#ojMLG>Ew-DQrT#vm^M%U^bc5LNd z!uh2hxs2rn+;b{TMPLGi1D}4-=LhP`I;;gcR{8~Y8Z%>JLl6H|&kR&JcFwOC3m01Z zcdJDe?k!evz}yHbt{MucR+b%3Z|s$mUwP+J{lRPJG4JrHNn`a)_x>HdxTm7#qWKuZ z!s?PC_hM4k;g5!^(HW1-iyI;gd^CCm%T_S4QCHKz@Rl;`YcBwbE-``@E|O|})2p0!?0Mu9ZAt54fg%9Bp6y^ez_A(6#TNcYPlR4K}RXe}R zy9Hz_BNjfm4!@y`+)KZzBLo>EUF4k6cR!D?Y#)veKtPt%OFat?i}5{$RmIl>GP?k0 z1D&2CgKS7ix5+w(7<>q3$u%s-adT8=QnH0W^-^EE`Cs#a3$voO5Q2`wvkFi*Fs4W` z;7k59YqWHJV+)69huuS&#YH|ZeV+a$ZgU2gL7mZtjv**AlO7gIIcSm{y}ZBH`}hB; zogPpJY~CBT2E;CSjQ;aTTA>s6V!#EgoTNS#Ut8J=%H{CJgFCDFreOXOKw%q48K9QO zPU5Q`(|MTr{U8E)IF49u=kw!mme28*|_g~)c~ zl9zd`F$=KZ`dOlzwKznIb?9(O8n4p=FK!Oe@5Kwq4@>j;RKeTfTwOh$A8de|h~Tzd zlpzJiS{ufyby+p{*r?_mjnbaeYt`J6p3Ccq!@flRax+GqhEdsQC(e}J0oMx1g4S|- zny^n9iZK0M+s)pb5+}R}{RN-Qq6ue`At3ziePNLa2lobO&Sxgh>U$QY;G`H87d907 z*!>H4D4Bl`p4@JUL27*&y$hsy-Q{9nK)j*m#m_+TA1Mtuj4K7GAQ)VMvq^U!6vw)| zD?~?mzqzGFSiso^x~`JCGsHJpPa#Cp30jykeqJJ&4v-?7h8=>bnw9mG^43E?Z(5?g zfM8rPu?viw){O3e(LOx3CckKl_t>DI;zb*A-M>N5Ib*1uiz?q(^8p^kGK&#t%?<-P z6q&GpXv@?qasu<~bfkVKuJh-4Nh1>7E32bz(}@pk$dJd(74X55CD)1!Y($e6K~XW- zNwMzG%*Qs9UF7wPBu}na+?XL=;c$Ij>B?f$a;f5XOUTtQgWc5N4H(y$s+^~`oasiG zntCkvEQHr9Gu?$S83PbLL7vN2W2Sc+imRoaHjAzIzo8V3d7LB>T{aR$Rt|VeD*59% z;qcuoW5azUY}CDIhdO$QMgcy1TE^z(i|XTxtLkaZX-z?g-T>*D979MPan3^EQU$aEOm2%1;WGSQ=^KU0 z(⪼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

  • vBnw8ZdZWbz(Fq}QP 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�haf9VpfuG>KJmlKKLz}$(Ul=EJeIbF#{VX62 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 z
  • 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

    3mfeeHHY)>?dw?VLiisNuAJR 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 diff --git a/srcjar/fr/README_SWINGJS.txt b/srcjar/fr/README_SWINGJS.txt new file mode 100644 index 0000000..95b1753 --- /dev/null +++ b/srcjar/fr/README_SWINGJS.txt @@ -0,0 +1,3 @@ +BH 2019.05.15 + +Note that this version of VARNA is from VARNA-BH diff --git a/srcjar/fr/orsay/lri/varna/VARNAPanel.java b/srcjar/fr/orsay/lri/varna/VARNAPanel.java index e60ceb2..2a88044 100644 --- a/srcjar/fr/orsay/lri/varna/VARNAPanel.java +++ b/srcjar/fr/orsay/lri/varna/VARNAPanel.java @@ -735,10 +735,14 @@ import fr.orsay.lri.varna.views.VueUI; /** * - * BH j2s SwingJS Added PropertyChangeListener for returns from VueUI. + * BH (early) j2s SwingJS Added PropertyChangeListener for returns from VueUI. + * + * BH 2019.05.15 flashes white background solution: replaced during-paint + * setBackground() with g.setColor();g.fill(); + * + * BH 2019.05.15 initialization shows popup menu raw creation objects solution: + * moved menu creation out of paintComponent() * - * - * * * The RNA 2D Panel is a lightweight component that allows for an automatic * basic drawing of an RNA secondary structures. The drawing algorithms do not @@ -755,3774 +759,4325 @@ import fr.orsay.lri.varna.views.VueUI; * */ -public class VARNAPanel extends JPanel implements PropertyChangeListener { - - /** - * SwingJS uses a PropertyChangeEvent to signal that a pseudo-modal dialog has been closed. - * - * @param event - */ - @Override - public void propertyChange(PropertyChangeEvent event) { - Object val = event.getNewValue(); - switch (event.getPropertyName()) { - case "value": - _UI.onDialogReturn(val == null ? JOptionPane.CLOSED_OPTION : ((Integer) val).intValue()); - return; - case "SelectedFile": - case "SelectedColor": - case "inputValue": - _UI.onDialogReturn(val); - break; - } - } - - - - private static final long serialVersionUID = 8194421570308956001L; - - private RNA _RNA = new RNA(); - - private boolean _debug = false; - - private VARNAConfig _conf = new VARNAConfig(); - - private ArrayList _VARNAListeners = new ArrayList(); - private ArrayList _selectionListeners = new ArrayList(); - private ArrayList _RNAListeners = new ArrayList(); - private ArrayList _basesListeners = new ArrayList(); - - UndoManager _manager; - - // private boolean _foldMode = true; - - private Point2D.Double[] _realCoords = new Point2D.Double[0]; - private Point2D.Double[] _realCenters = new Point2D.Double[0]; - private double _scaleFactor = 1.0; - private Point2D.Double _offsetPanel = new Point2D.Double(); - private Point2D.Double _offsetRNA = new Point2D.Double(); - - private double _offX; - private double _offY; - - private ControleurBlinkingThread _blink; - private BaseList _selectedBases = new BaseList("selection"); - private ArrayList _backupSelection = new ArrayList(); - private Integer _nearestBase = null; - private Point2D.Double _lastSelectedCoord = new Point2D.Double(0.0, 0.0); - - private Point2D.Double _linkOrigin = null; - private Point2D.Double _linkDestination = null; - - private Rectangle _selectionRectangle = null; - - private boolean _highlightAnnotation = false; - - private int _titleHeight; - private Dimension _border = new Dimension(0, 0); - - private boolean _drawBBox = false; - private boolean _drawBorder = false; - - // private Point _positionRelativeSouris; - private Point _translation; - private boolean _horsCadre; - private boolean _premierAffichage; - - private ControleurInterpolator _interpolator; - /** - * If comparison mode is TRUE (ON), then the application will be used to - * display a super-structure resulting on an RNA secondary structure - * comparison. Else, the application is used by default. - */ - - private VueMenu _popup = new VueMenu(this); - - private VueUI _UI = new VueUI(this); - - private TextAnnotation _selectedAnnotation; - - /** - * Creates an RNA 2D panel with initially displays the empty structure. - * - * @throws ExceptionNonEqualLength - * - */ - public VARNAPanel() { - init(); - drawRNA(); - } - - /** - * Creates an RNA 2D panel, and creates and displays an RNA coupled with its - * secondary structure formatted as a well-balanced parenthesis with dots - * word (DBN format). - * - * @param seq - * The raw nucleotide sequence - * @param str - * The secondary structure in DBN format - * @throws ExceptionNonEqualLength - */ - - public VARNAPanel(String seq, String str) throws ExceptionNonEqualLength { - this(seq, str, RNA.DRAW_MODE_RADIATE); - } - - /** - * Creates a VARNAPanel instance, and creates and displays an RNA coupled - * with its secondary structure formatted as a well-balanced parenthesis - * with dots word (DBN format). Allows the user to choose the drawing - * algorithm to be used. - * - * @param seq - * The raw nucleotide sequence - * @param str - * The secondary structure in DBN format - * @param drawMode - * The drawing mode - * @throws ExceptionNonEqualLength - * @see RNA#DRAW_MODE_RADIATE - * @see RNA#DRAW_MODE_CIRCULAR - * @see RNA#DRAW_MODE_NAVIEW - */ - public VARNAPanel(String seq, String str, int drawMode) - throws ExceptionNonEqualLength { - this(seq, str, drawMode, ""); - } - - public VARNAPanel(Reader r) throws ExceptionNonEqualLength, - ExceptionFileFormatOrSyntax { - this(r, RNA.DRAW_MODE_RADIATE); - } - - public VARNAPanel(Reader r, int drawMode) throws ExceptionNonEqualLength, - ExceptionFileFormatOrSyntax { - this(r, drawMode, ""); - } - - public VARNAPanel(Reader r, int drawMode, String title) - throws ExceptionNonEqualLength, ExceptionFileFormatOrSyntax { - init(); - drawRNA(r, drawMode); - setTitle(title); - } - - public void setOriginLink(Point2D.Double p) { - _linkOrigin = (p); - } - - public void setDestinationLink(Point2D.Double p) { - _linkDestination = (p); - } - - public void removeLink() { - _linkOrigin = null; - _linkDestination = null; - } - - /** - * Creates a VARNAPanel instance, and displays an RNA. - * - * @param r - * The RNA to be displayed within this panel - */ - - public VARNAPanel(RNA r) { - showRNA(r); - init(); - } - - /** - * Creates a VARNAPanel instance, and creates and displays an RNA coupled - * with its secondary structure formatted as a well-balanced parenthesis - * with dots word (DBN format). Allows the user to choose the drawing - * algorithm to be used. Additionally, sets the panel's title. - * - * @param seq - * The raw nucleotide sequence - * @param str - * The secondary structure in DBN format - * @param drawMode - * The drawing mode - * @param title - * The panel title - * @throws ExceptionNonEqualLength - * @see RNA#DRAW_MODE_CIRCULAR - * @see RNA#DRAW_MODE_RADIATE - * @see RNA#DRAW_MODE_NAVIEW - */ - - public VARNAPanel(String seq, String str, int drawMode, String title) - throws ExceptionNonEqualLength { - drawRNA(seq, str, drawMode); - init(); - setTitle(title); - // VARNASecDraw._vp = this; - } - - public VARNAPanel(String seq1, String struct1, String seq2, String struct2, - int drawMode, String title) { - _conf._comparisonMode = true; - drawRNA(seq1, struct1, seq2, struct2, drawMode); - init(); - setTitle(title); - } - - private void init() { - setBackground(VARNAConfig.DEFAULT_BACKGROUND_COLOR); - _manager = new UndoManager(); - _manager.setLimit(10000); - _UI.addUndoableEditListener(_manager); - - _blink = new ControleurBlinkingThread(this, - ControleurBlinkingThread.DEFAULT_FREQUENCY, 0, 1.0, 0.0, 0.2); - _blink.start(); - - _premierAffichage = true; - _translation = new Point(0, 0); - - _horsCadre = false; - this.setFont(_conf._fontBasesGeneral); - - // ajout des controleurs au VARNAPanel - ControleurClicMovement controleurClicMovement = new ControleurClicMovement( - this); - this.addMouseListener(controleurClicMovement); - this.addMouseMotionListener(controleurClicMovement); - this.addMouseWheelListener(new ControleurMolette(this)); - - ControleurDraggedMolette ctrlDraggedMolette = new ControleurDraggedMolette( - this); - this.addMouseMotionListener(ctrlDraggedMolette); - this.addMouseListener(ctrlDraggedMolette); - - ControleurVARNAPanelKeys ctrlKey = new ControleurVARNAPanelKeys(this); - this.addKeyListener(ctrlKey); - this.addFocusListener(ctrlKey); - - _interpolator = new ControleurInterpolator(this); - /** - * - * BH SwingJS do not start this thread - * - * @j2sNative - */ - { - _interpolator.start(); - } - - } - - public void undo() { - if (_manager.canUndo()) - _manager.undo(); - } - - public void redo() { - if (_manager.canRedo()) - _manager.redo(); - } - - /** - * Sets the new style of the title font. - * - * @param newStyle - * An int that describes the new font style ("PLAIN","BOLD", - * "BOLDITALIC", or "ITALIC") - */ - public void setTitleFontStyle(int newStyle) { - _conf._titleFont = _conf._titleFont.deriveFont(newStyle); - updateTitleHeight(); - } - - /** - * Sets the new size of the title font. - * - * @param newSize - * The new size of the title font - */ - public void setTitleFontSize(float newSize) { - //System.err.println("Applying title size "+newSize); - _conf._titleFont = _conf._titleFont.deriveFont(newSize); - updateTitleHeight(); - } - - /** - * Sets the new font family to be used for the title. Available fonts are - * system-specific, yet it seems that "Arial", "Dialog", and "MonoSpaced" - * are almost always available. - * - * @param newFamily - * New font family used for the title - */ - public void setTitleFontFamily(String newFamily) { - _conf._titleFont = new Font(newFamily, _conf._titleFont.getStyle(), - _conf._titleFont.getSize()); - updateTitleHeight(); - } - - /** - * Sets the color to be used for the title. - * - * @param newColor - * A color used to draw the title - */ - public void setTitleFontColor(Color newColor) { - _conf._titleColor = newColor; - updateTitleHeight(); - } - - /** - * Sets the font size for displaying bases - * - * @param size - * Font size for base caption - */ - - public void setBaseFontSize(Float size) { - _conf._fontBasesGeneral = _conf._fontBasesGeneral.deriveFont(size); - } - - /** - * Sets the font size for displaying base numbers - * - * @param size - * Font size for base numbers - */ - - public void setNumbersFontSize(Float size) { - _conf._numbersFont = _conf._numbersFont.deriveFont(size); - } - - /** - * Sets the font style for displaying bases - * - * @param style - * An int that describes the new font style ("PLAIN","BOLD", - * "BOLDITALIC", or "ITALIC") - */ - - public void setBaseFontStyle(int style) { - _conf._fontBasesGeneral = _conf._fontBasesGeneral.deriveFont(style); - } - - private void updateTitleHeight() { - if (!getTitle().equals("")) { - _titleHeight = (int) (_conf._titleFont.getSize() * 1.5); - } else { - _titleHeight = 0; - } - if (Math.abs(this.getZoom() - 1) < .02) { - _translation.y = (int) (-getTitleHeight() / 2.0); - } - } - - /** - * Sets the panel's title, giving a short description of the RNA secondary - * structure. - * - * @param title - * The new title - */ - public void setTitle(String title) { - _RNA.setName(title); - updateTitleHeight(); - } - - /** - * Sets the distance between consecutive base numbers. Please notice that : - *

      - *
    • The first and last base are always numbered
    • - *
    • The numbering is based on the base numbers, not on the indices. So - * base numbers may appear more frequently than expected if bases are - * skipped
    • - *
    • The periodicity is measured starting from 0. This means that for a - * period of 10 and bases numbered from 1 to 52, the base numbers - * [1,10,20,30,40,50,52] will be drawn.
    • - *
    - * - * @param n - * New numbering period - */ - public void setNumPeriod(int n) { - _conf._numPeriod = n; - } - - /** - * Returns the current numbering period. Please notice that : - *
      - *
    • The first and last base are always numbered
    • - *
    • The numbering is based on the base numbers, not on the indices. So - * base numbers may appear more frequently than expected if bases are - * skipped
    • - *
    • The periodicity is measured starting from 0. This means that for a - * period of 10 and bases numbered from 1 to 52, the base numbers - * [1,10,20,30,40,50,52] will be drawn.
    • - *
    - * - * @return Current numbering period - */ - public int getNumPeriod() { - return _conf._numPeriod; - } - - private void setScaleFactor(double d) { - _scaleFactor = d; - } - - private double getScaleFactor() { - return _scaleFactor; - } - - private void setAutoFit(boolean fit) { - _conf._autoFit = fit; - repaint(); - } - - public void lockScrolling() { - setAutoFit(false); - setAutoCenter(false); - } - - public void unlockScrolling() { - setAutoFit(true); - setAutoCenter(true); - } - - private void drawStringOutline(VueVARNAGraphics g2D, String res, double x, - double y, double margin) { - Dimension d = g2D.getStringDimension(res); - x -= (double) d.width / 2.0; - y += (double) d.height / 2.0; - g2D.setColor(Color.GRAY); - g2D.setSelectionStroke(); - g2D.drawRect((x - margin), (y - d.height - margin), - (d.width + 2.0 * margin), (d.height + 2.0 * margin)); - } - - private void drawSymbol(VueVARNAGraphics g2D, double posx, double posy, - double normx, double normy, double radius, boolean isCIS, - ModeleBP.Edge e) { - Color bck = g2D.getColor(); - switch (e) { - case WC: - if (isCIS) { - g2D.setColor(bck); - g2D.fillCircle((posx - (radius) / 2.0), - (posy - (radius) / 2.0), radius); - g2D.drawCircle((posx - (radius) / 2.0), - (posy - (radius) / 2.0), radius); - } else { - g2D.setColor(Color.white); - g2D.fillCircle(posx - (radius) / 2.0, (posy - (radius) / 2.0), - (radius)); - g2D.setColor(bck); - g2D.drawCircle((posx - (radius) / 2.0), - (posy - (radius) / 2.0), (radius)); - } - break; - case HOOGSTEEN: { - GeneralPath p2 = new GeneralPath(); - radius /= 1.05; - p2.moveTo((float) (posx - radius * normx / 2.0 - radius * normy - / 2.0), (float) (posy - radius * normy / 2.0 + radius - * normx / 2.0)); - p2.lineTo((float) (posx + radius * normx / 2.0 - radius * normy - / 2.0), (float) (posy + radius * normy / 2.0 + radius - * normx / 2.0)); - p2.lineTo((float) (posx + radius * normx / 2.0 + radius * normy - / 2.0), (float) (posy + radius * normy / 2.0 - radius - * normx / 2.0)); - p2.lineTo((float) (posx - radius * normx / 2.0 + radius * normy - / 2.0), (float) (posy - radius * normy / 2.0 - radius - * normx / 2.0)); - p2.closePath(); - - if (isCIS) { - g2D.setColor(bck); - g2D.fill(p2); - g2D.draw(p2); - } else { - g2D.setColor(Color.white); - g2D.fill(p2); - g2D.setColor(bck); - g2D.draw(p2); - } - } - break; - case SUGAR: { - double ix = radius * normx / 2.0; - double iy = radius * normy / 2.0; - double jx = radius * normy / 2.0; - double jy = -radius * normx / 2.0; - - GeneralPath p2 = new GeneralPath(); - p2.moveTo((float) (posx - ix + jx), (float) (posy - iy + jy)); - p2.lineTo((float) (posx + ix + jx), (float) (posy + iy + jy)); - p2.lineTo((float) (posx - jx), (float) (posy - jy)); - p2.closePath(); - - if (isCIS) { - g2D.setColor(bck); - g2D.fill(p2); - g2D.draw(p2); - } else { - g2D.setColor(Color.white); - g2D.fill(p2); - g2D.setColor(bck); - g2D.draw(p2); - } - } - break; - } - g2D.setColor(bck); - } - - private void drawBasePairArc(VueVARNAGraphics g2D, int i, int j, - Point2D.Double orig, Point2D.Double dest, double scaleFactor, - ModeleBP style, double newRadius) { - double distance, coef; - if (j - i == 1) - coef = getBPHeightIncrement() * 1.75; - else - coef = getBPHeightIncrement(); - distance = dest.x - orig.x; - switch (_conf._mainBPStyle) { - case LW: { - double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) / 5.0) - * scaleFactor; - if (style.isCanonical()) { - if (style.isCanonicalGC()) { - if ((orig.x != dest.x) || (orig.y != dest.y)) { - g2D.drawArc((dest.x + orig.x) / 2., dest.y - - scaleFactor * _RNA.BASE_RADIUS / 2.0, - (distance - scaleFactor * _RNA.BASE_RADIUS - / 3.0), (distance * coef - scaleFactor - * _RNA.BASE_RADIUS / 3.0), 0, 180); - g2D.drawArc((dest.x + orig.x) / 2., dest.y - - scaleFactor * _RNA.BASE_RADIUS / 2.0, - (distance + scaleFactor * _RNA.BASE_RADIUS - / 3.0), (distance * coef + scaleFactor - * _RNA.BASE_RADIUS / 3.0), 0, 180); - } - } else if (style.isCanonicalAU()) { - g2D.drawArc((dest.x + orig.x) / 2., dest.y - scaleFactor - * _RNA.BASE_RADIUS / 2.0, (distance), - (distance * coef), 0, 180); - } else if (style.isWobbleUG()) { - Point2D.Double midtop = new Point2D.Double( - (dest.x + orig.x) / 2., dest.y - distance * coef - / 2. - scaleFactor * _RNA.BASE_RADIUS / 2.0); - g2D.drawArc(midtop.x, dest.y - scaleFactor - * _RNA.BASE_RADIUS / 2.0, (distance), - (distance * coef), 0, 180); - drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, - false, ModeleBP.Edge.WC); - } else { - Point2D.Double midtop = new Point2D.Double( - (dest.x + orig.x) / 2., dest.y - distance * coef - / 2. - scaleFactor * _RNA.BASE_RADIUS / 2.0); - g2D.drawArc(midtop.x, dest.y - scaleFactor - * _RNA.BASE_RADIUS / 2.0, (distance), - (distance * coef), 0, 180); - drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, - style.isCIS(), style.getEdgePartner5()); - } - } else { - ModeleBP.Edge p1 = style.getEdgePartner5(); - ModeleBP.Edge p2 = style.getEdgePartner3(); - Point2D.Double midtop = new Point2D.Double( - (dest.x + orig.x) / 2., dest.y - distance * coef / 2. - - scaleFactor * _RNA.BASE_RADIUS / 2.0); - g2D.drawArc(midtop.x, dest.y - scaleFactor * _RNA.BASE_RADIUS - / 2.0, (distance), (distance * coef), 0, 180); - if (p1 == p2) { - drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, - false, style.getEdgePartner5()); - } else { - drawSymbol(g2D, midtop.x - scaleFactor * _RNA.BASE_RADIUS, - midtop.y, 1., 0., radiusCircle, style.isCIS(), p1); - drawSymbol(g2D, midtop.x + scaleFactor * _RNA.BASE_RADIUS, - midtop.y, -1., 0., radiusCircle, style.isCIS(), p2); - } - } - } - break; - case LW_ALT: { - double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) / 5.0) - * scaleFactor; - double distFromBaseCenter = DISTANCE_FACT*scaleFactor; - orig = new Point2D.Double(orig.x,orig.y-(distFromBaseCenter+newRadius)); - dest = new Point2D.Double(dest.x,dest.y-(distFromBaseCenter+newRadius)); - if (style.isCanonical()) { - if (style.isCanonicalGC()) { - if ((orig.x != dest.x) || (orig.y != dest.y)) { - g2D.drawArc((dest.x + orig.x) / 2., dest.y - - scaleFactor * _RNA.BASE_RADIUS / 2.0, - (distance - scaleFactor * _RNA.BASE_RADIUS - / 3.0), (distance * coef - scaleFactor - * _RNA.BASE_RADIUS / 3.0), 0, 180); - g2D.drawArc((dest.x + orig.x) / 2., dest.y - - scaleFactor * _RNA.BASE_RADIUS / 2.0, - (distance + scaleFactor * _RNA.BASE_RADIUS - / 3.0), (distance * coef + scaleFactor - * _RNA.BASE_RADIUS / 3.0), 0, 180); - } - } else if (style.isCanonicalAU()) { - g2D.drawArc((dest.x + orig.x) / 2., dest.y - scaleFactor - * _RNA.BASE_RADIUS / 2.0, (distance), - (distance * coef), 0, 180); - } - } else { - ModeleBP.Edge p1 = style.getEdgePartner5(); - ModeleBP.Edge p2 = style.getEdgePartner3(); - Point2D.Double midtop = new Point2D.Double( - (dest.x + orig.x) / 2., dest.y - distance * coef / 2. - - scaleFactor * _RNA.BASE_RADIUS / 2.0); - g2D.drawArc(midtop.x, dest.y - scaleFactor * _RNA.BASE_RADIUS - / 2.0, (distance), (distance * coef), 0, 180); - drawSymbol(g2D, orig.x, - orig.y-radiusCircle*.95, 1., 0., radiusCircle, style.isCIS(), p1); - drawSymbol(g2D, dest.x, - dest.y-radiusCircle*.95, -1., 0., radiusCircle, style.isCIS(), p2); - } - } - break; - default: - g2D.drawArc((dest.x + orig.x) / 2., dest.y - scaleFactor - * _RNA.BASE_RADIUS / 2.0, (distance), (distance * coef), 0, - 180); - break; - } - - } - - public static double DISTANCE_FACT = 2.; - - - private void drawBasePair(VueVARNAGraphics g2D, Point2D.Double orig, - Point2D.Double dest, ModeleBP style, double newRadius, - double scaleFactor) { - - double dx = dest.x - orig.x; - double dy = dest.y - orig.y; - double dist = Math.sqrt((dest.x - orig.x) * (dest.x - orig.x) - + (dest.y - orig.y) * (dest.y - orig.y)); - dx /= dist; - dy /= dist; - double nx = -dy; - double ny = dx; - orig = new Point2D.Double(orig.x + newRadius * dx, orig.y + newRadius - * dy); - dest = new Point2D.Double(dest.x - newRadius * dx, dest.y - newRadius - * dy); - switch (_conf._mainBPStyle) { - case LW: { - double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) / 5.0) - * scaleFactor; - if (style.isCanonical()) { - if (style.isCanonicalGC()) { - if ((orig.x != dest.x) || (orig.y != dest.y)) { - nx *= scaleFactor * _RNA.BASE_RADIUS / 4.0; - ny *= scaleFactor * _RNA.BASE_RADIUS / 4.0; - g2D.drawLine((orig.x + nx), (orig.y + ny), - (dest.x + nx), (dest.y + ny)); - g2D.drawLine((orig.x - nx), (orig.y - ny), - (dest.x - nx), (dest.y - ny)); - } - } else if (style.isCanonicalAU()) { - g2D.drawLine(orig.x, orig.y, dest.x, dest.y); - } else if (style.isWobbleUG()) { - double cx = (dest.x + orig.x) / 2.0; - double cy = (dest.y + orig.y) / 2.0; - g2D.drawLine(orig.x, orig.y, dest.x, dest.y); - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, false, - ModeleBP.Edge.WC); - } else { - double cx = (dest.x + orig.x) / 2.0; - double cy = (dest.y + orig.y) / 2.0; - g2D.drawLine(orig.x, orig.y, dest.x, dest.y); - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, - style.isCIS(), style.getEdgePartner5()); - } - } else { - ModeleBP.Edge p1 = style.getEdgePartner5(); - ModeleBP.Edge p2 = style.getEdgePartner3(); - double cx = (dest.x + orig.x) / 2.0; - double cy = (dest.y + orig.y) / 2.0; - g2D.drawLine(orig.x, orig.y, dest.x, dest.y); - if (p1 == p2) { - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, - style.isCIS(), p1); - - } else { - double vdx = (dest.x - orig.x); - double vdy = (dest.y - orig.y); - vdx /= 6.0; - vdy /= 6.0; - drawSymbol(g2D, cx + vdx, cy + vdy, -nx, -ny, radiusCircle, - style.isCIS(), p2); - drawSymbol(g2D, cx - vdx, cy - vdy, nx, ny, radiusCircle, - style.isCIS(), p1); - } - } - } - break; - case LW_ALT: { - double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) / 5.0) - * scaleFactor; - double distFromBaseCenter = DISTANCE_FACT*scaleFactor; - Point2D.Double norig = new Point2D.Double(orig.x+(distFromBaseCenter+.5*newRadius)*dx,orig.y+(distFromBaseCenter+.5*newRadius)*dy); - Point2D.Double ndest = new Point2D.Double(dest.x-(distFromBaseCenter+.5*newRadius)*dx,dest.y-(distFromBaseCenter+.5*newRadius)*dy); - if (style.isCanonical()) { - if (style.isCanonicalGC()) { - if ((norig.x != ndest.x) || (norig.y != ndest.y)) { - nx *= scaleFactor * _RNA.BASE_RADIUS / 4.0; - ny *= scaleFactor * _RNA.BASE_RADIUS / 4.0; - g2D.drawLine((norig.x + nx), (norig.y + ny), - (ndest.x + nx), (ndest.y + ny)); - g2D.drawLine((norig.x - nx), (norig.y - ny), - (ndest.x - nx), (ndest.y - ny)); - } - } else if (style.isCanonicalAU()) { - g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); - } else if (style.isWobbleUG()) { - double cx = (ndest.x + norig.x) / 2.0; - double cy = (ndest.y + norig.y) / 2.0; - g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, false, - ModeleBP.Edge.WC); - } else { - double cx = (ndest.x + norig.x) / 2.0; - double cy = (ndest.y + norig.y) / 2.0; - g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, - style.isCIS(), style.getEdgePartner5()); - } - } else { - ModeleBP.Edge p1 = style.getEdgePartner5(); - ModeleBP.Edge p2 = style.getEdgePartner3(); - double cx = (ndest.x + norig.x) / 2.0; - double cy = (ndest.y + norig.y) / 2.0; - g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); - if (p1 == p2) { - drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, - style.isCIS(), p1); - - } else { - double fac = .4; - drawSymbol(g2D, ndest.x - fac*radiusCircle*dx, ndest.y - fac*radiusCircle*dy, -nx, -ny, radiusCircle, - style.isCIS(), p2); - drawSymbol(g2D, norig.x + fac*radiusCircle*dx, norig.y + fac*radiusCircle*dy, nx, ny, radiusCircle, - style.isCIS(), p1); - } - } - } - break; - case SIMPLE: - g2D.drawLine(orig.x, orig.y, dest.x, dest.y); - break; - case RNAVIZ: - double xcenter = (orig.x + dest.x) / 2.0; - double ycenter = (orig.y + dest.y) / 2.0; - double radius = Math.max(4.0 * scaleFactor, 1.0); - g2D.fillCircle((xcenter - radius), (ycenter - radius), - (2.0 * radius)); - break; - case NONE: - break; - } - } - - private Color getHighlightedVersion(Color c1, Color c2) { - int r1 = c1.getRed(); - int g1 = c1.getGreen(); - int b1 = c1.getBlue(); - int r2 = c2.getRed(); - int g2 = c2.getGreen(); - int b2 = c2.getBlue(); - double val = _blink.getVal(); - int nr = Math.max(0, - Math.min((int) ((r1 * val + r2 * (1.0 - val))), 255)); - int ng = Math.max(0, - Math.min((int) ((g1 * val + g2 * (1.0 - val))), 255)); - int nb = Math.max(0, - Math.min((int) ((b1 * val + b2 * (1.0 - val))), 255)); - return new Color(nr, ng, nb); - } - - private Color highlightFilter(int index, Color initialColor, Color c1, - Color c2, boolean localView) { - if (_selectedBases.contains(_RNA.getBaseAt(index)) && localView) { - return getHighlightedVersion(c1, c2); - } else - return initialColor; - } - - public static Point2D.Double computeExcentricUnitVector(int i, - Point2D.Double[] points, Point2D.Double[] centers) { - double dist = points[i].distance(centers[i]); - Point2D.Double byCenter = new Point2D.Double( - (points[i].x - centers[i].x) / dist, - (points[i].y - centers[i].y) / dist); - if ((i > 0) && (i < points.length - 1)) { - Point2D.Double p0 = points[i - 1]; - Point2D.Double p1 = points[i]; - Point2D.Double p2 = points[i + 1]; - double dist1 = p2.distance(p1); - Point2D.Double v1 = new Point2D.Double((p2.x - p1.x) / dist1, - (p2.y - p1.y) / dist1); - Point2D.Double vn1 = new Point2D.Double(v1.y, -v1.x); - double dist2 = p1.distance(p0); - Point2D.Double v2 = new Point2D.Double((p1.x - p0.x) / dist2, - (p1.y - p0.y) / dist2); - Point2D.Double vn2 = new Point2D.Double(v2.y, -v2.x); - Point2D.Double vn = new Point2D.Double((vn1.x + vn2.x) / 2.0, - (vn1.y + vn2.y) / 2.0); - double D = vn.distance(new Point2D.Double(0.0, 0.0)); - vn.x /= D; - vn.y /= D; - if (byCenter.x * vn.x + byCenter.y * vn.y < 0) { - vn.x = -vn.x; - vn.y = -vn.y; - } - return vn; - } - else if (((i==0) || (i==points.length-1)) && (points.length>1)) { - int a = (i==0)?0:points.length-1; - int b = (i==0)?1:points.length-2; - double D = points[a].distance(points[b]); - return new Point2D.Double( - (points[a].x - points[b].x) / D, - (points[a].y - points[b].y) / D); - } - else { - return byCenter; - } - } - - private void drawBase(VueVARNAGraphics g2D, int i, Point2D.Double[] points, - Point2D.Double[] centers, double newRadius, double _scaleFactor, - boolean localView) { - Point2D.Double p = points[i]; - ModeleBase mb = _RNA.get_listeBases().get(i); - g2D.setFont(_conf._fontBasesGeneral); - Color baseInnerColor = highlightFilter(i, - _RNA.getBaseInnerColor(i, _conf), Color.white, - _RNA.getBaseInnerColor(i, _conf), localView); - Color baseOuterColor = highlightFilter(i, - _RNA.getBaseOuterColor(i, _conf), - _RNA.getBaseOuterColor(i, _conf), Color.white, localView); - Color baseNameColor = highlightFilter(i, - _RNA.getBaseNameColor(i, _conf), - _RNA.getBaseNameColor(i, _conf), Color.white, localView); - if ( RNA.whiteLabelPreferrable(baseInnerColor)) - { - baseNameColor=Color.white; - } - - if (mb instanceof ModeleBaseNucleotide) { - ModeleBaseNucleotide mbn = (ModeleBaseNucleotide) mb; - String res = mbn.getBase(); - if (_hoveredBase == mb && localView && isModifiable()) { - g2D.setColor(_conf._hoverColor); - g2D.fillCircle(p.getX() - 1.5 * newRadius, p.getY() - 1.5 - * newRadius, 3.0 * newRadius); - g2D.setColor(_conf._hoverColor.darker()); - g2D.drawCircle(p.getX() - 1.5 * newRadius, p.getY() - 1.5 - * newRadius, 3.0 * newRadius); - g2D.setPlainStroke(); - } - if (_conf._fillBases) { - // Filling inner circle - g2D.setColor(baseInnerColor); - g2D.fillCircle(p.getX() - newRadius, p.getY() - newRadius, - 2.0 * newRadius); - } - - if (_conf._drawOutlineBases) { - // Drawing outline - g2D.setColor(baseOuterColor); - g2D.setStrokeThickness(_conf._baseThickness * _scaleFactor); - g2D.drawCircle(p.getX() - newRadius, p.getY() - newRadius, - 2.0 * newRadius); - } - // Drawing label - g2D.setColor(baseNameColor); - g2D.drawStringCentered(String.valueOf(res), p.getX(), p.getY()); - } else if (mb instanceof ModeleBasesComparison) { - - ModeleBasesComparison mbc = (ModeleBasesComparison) mb; - - // On lui donne l'aspect voulue (on a un trait droit) - g2D.setPlainStroke(); // On doit avoir un trait droit, sans arrondit - g2D.setStrokeThickness(_conf._baseThickness * _scaleFactor); - - // On dessine l'étiquette, rectangle aux bords arrondies. - g2D.setColor(baseInnerColor); - g2D.fillRoundRect((p.getX() - 1.5 * newRadius), - (p.getY() - newRadius), (3.0 * newRadius), - (2.0 * newRadius), 10 * _scaleFactor, 10 * _scaleFactor); - - /* Dessin du rectangle exterieur (bords) */ - g2D.setColor(baseOuterColor); - g2D.drawRoundRect((p.getX() - 1.5 * newRadius), - (p.getY() - newRadius), (3 * newRadius), (2 * newRadius), - 10 * _scaleFactor, 10 * _scaleFactor); - - // On le dessine au centre de l'étiquette. - g2D.drawLine((p.getX()), (p.getY() + newRadius) - 1, (p.getX()), - (p.getY() - newRadius) + 1); - - /* Dessin du nom de la base (A,C,G,U,etc...) */ - // On créer le texte des étiquettes - String label1 = String.valueOf(mbc.getBase1()); - String label2 = String.valueOf(mbc.getBase2()); - - // On leur donne une couleur - g2D.setColor(getRNA().get_listeBases().get(i).getStyleBase() - .getBaseNameColor()); - - // Et on les dessine. - g2D.drawStringCentered(label1, p.getX() - (.75 * newRadius), - p.getY()); - g2D.drawStringCentered(label2, p.getX() + (.75 * newRadius), - p.getY()); - } - - // Drawing base number - if (_RNA.isNumberDrawn(mb, getNumPeriod())) { - - Point2D.Double vn = computeExcentricUnitVector(i, points, centers); - g2D.setColor(mb.getStyleBase().getBaseNumberColor()); - g2D.setFont(_conf._numbersFont); - double factorMin = Math.min(.5, _conf._distNumbers); - double factorMax = Math.min(_conf._distNumbers - 1.5, - _conf._distNumbers); - g2D.drawLine(p.x + vn.x * ((1 + factorMin) * newRadius), p.y + vn.y - * ((1 + factorMin) * newRadius), p.x + vn.x - * ((1 + factorMax) * newRadius), p.y + vn.y - * ((1 + factorMax) * newRadius)); - g2D.drawStringCentered(mb.getLabel(), p.x + vn.x - * ((1 + _conf._distNumbers) * newRadius), p.y + vn.y - * ((1 + _conf._distNumbers) * newRadius)); - - } - } - - void drawChemProbAnnotation(VueVARNAGraphics g2D, ChemProbAnnotation cpa, - Point2D.Double anchor, double scaleFactor) { - g2D.setColor(cpa.getColor()); - g2D.setStrokeThickness(RNA.CHEM_PROB_ARROW_THICKNESS * scaleFactor - * cpa.getIntensity()); - g2D.setPlainStroke(); - Point2D.Double v = cpa.getDirVector(); - Point2D.Double vn = cpa.getNormalVector(); - Point2D.Double base = new Point2D.Double( - (anchor.x + _RNA.CHEM_PROB_DIST * scaleFactor * v.x), - (anchor.y + _RNA.CHEM_PROB_DIST * scaleFactor * v.y)); - Point2D.Double edge = new Point2D.Double( - (base.x + _RNA.CHEM_PROB_BASE_LENGTH * cpa.getIntensity() - * scaleFactor * v.x), - (base.y + _RNA.CHEM_PROB_BASE_LENGTH * cpa.getIntensity() - * scaleFactor * v.y)); - switch (cpa.getType()) { - case ARROW: { - Point2D.Double arrowTip1 = new Point2D.Double( - (base.x + cpa.getIntensity() - * scaleFactor - * (_RNA.CHEM_PROB_ARROW_WIDTH * vn.x + _RNA.CHEM_PROB_ARROW_HEIGHT - * v.x)), - (base.y + cpa.getIntensity() - * scaleFactor - * (_RNA.CHEM_PROB_ARROW_WIDTH * vn.y + _RNA.CHEM_PROB_ARROW_HEIGHT - * v.y))); - Point2D.Double arrowTip2 = new Point2D.Double( - (base.x + cpa.getIntensity() - * scaleFactor - * (-_RNA.CHEM_PROB_ARROW_WIDTH * vn.x + _RNA.CHEM_PROB_ARROW_HEIGHT - * v.x)), - (base.y + cpa.getIntensity() - * scaleFactor - * (-_RNA.CHEM_PROB_ARROW_WIDTH * vn.y + _RNA.CHEM_PROB_ARROW_HEIGHT - * v.y))); - g2D.drawLine(base.x, base.y, edge.x, edge.y); - g2D.drawLine(base.x, base.y, arrowTip1.x, arrowTip1.y); - g2D.drawLine(base.x, base.y, arrowTip2.x, arrowTip2.y); - } - break; - case PIN: { - Point2D.Double side1 = new Point2D.Double( - (edge.x - cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.x)), - (edge.y - cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.y))); - Point2D.Double side2 = new Point2D.Double( - (edge.x - cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.x)), - (edge.y - cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.y))); - Point2D.Double side3 = new Point2D.Double( - (edge.x + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.x)), - (edge.y + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.y))); - Point2D.Double side4 = new Point2D.Double( - (edge.x + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.x)), - (edge.y + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.y))); - GeneralPath p2 = new GeneralPath(); - p2.moveTo((float) side1.x, (float) side1.y); - p2.lineTo((float) side2.x, (float) side2.y); - p2.lineTo((float) side3.x, (float) side3.y); - p2.lineTo((float) side4.x, (float) side4.y); - p2.closePath(); - g2D.fill(p2); - g2D.drawLine(base.x, base.y, edge.x, edge.y); - } - break; - case TRIANGLE: { - Point2D.Double arrowTip1 = new Point2D.Double( - (edge.x + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.x)), - (edge.y + cpa.getIntensity() * scaleFactor - * (_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.y))); - Point2D.Double arrowTip2 = new Point2D.Double( - (edge.x + cpa.getIntensity() * scaleFactor - * (-_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.x)), - (edge.y + cpa.getIntensity() * scaleFactor - * (-_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.y))); - GeneralPath p2 = new GeneralPath(); - p2.moveTo((float) base.x, (float) base.y); - p2.lineTo((float) arrowTip1.x, (float) arrowTip1.y); - p2.lineTo((float) arrowTip2.x, (float) arrowTip2.y); - p2.closePath(); - g2D.fill(p2); - } - break; - case DOT: { - Double radius = scaleFactor * _RNA.CHEM_PROB_DOT_RADIUS - * cpa.getIntensity(); - Point2D.Double center = new Point2D.Double((base.x + radius * v.x), - (base.y + radius * v.y)); - g2D.fillCircle((center.x - radius), (center.y - radius), - (2 * radius)); - } - break; - } - } - - Point2D.Double buildCaptionPosition(ModeleBase mb, double scaleFactor, - double heightEstimate) { - double radius = 2.0; - if (_RNA.isNumberDrawn(mb, getNumPeriod())) { - radius += _conf._distNumbers; - } - Point2D.Double center = mb.getCenter(); - Point2D.Double p = mb.getCoords(); - double realDistance = _RNA.BASE_RADIUS * radius + heightEstimate; - return new Point2D.Double(center.getX() + (p.getX() - center.getX()) - * ((p.distance(center) + realDistance) / p.distance(center)), - center.getY() - + (p.getY() - center.getY()) - * ((p.distance(center) + realDistance) / p - .distance(center))); - } - - private void renderAnnotations(VueVARNAGraphics g2D, double offX, - double offY, double rnaBBoxX, double rnaBBoxY, double scaleFactor) { - for (TextAnnotation textAnnotation : _RNA.getAnnotations()) { - g2D.setColor(textAnnotation.getColor()); - g2D.setFont(textAnnotation - .getFont() - .deriveFont( - (float) (2.0 * textAnnotation.getFont().getSize() * scaleFactor))); - Point2D.Double position = textAnnotation.getCenterPosition(); - if (textAnnotation.getType() == TextAnnotation.AnchorType.BASE) { - ModeleBase mb = (ModeleBase) textAnnotation.getAncrage(); - double fontHeight = Math.ceil(textAnnotation.getFont() - .getSize()); - position = buildCaptionPosition(mb, scaleFactor, fontHeight); - } - position = transformCoord(position, offX, offY, rnaBBoxX, rnaBBoxY, - scaleFactor); - g2D.drawStringCentered(textAnnotation.getTexte(), position.x, - position.y); - if ((_selectedAnnotation == textAnnotation) - && (_highlightAnnotation)) { - drawStringOutline(g2D, textAnnotation.getTexte(), position.x, - position.y, 5); - } - } - for (ChemProbAnnotation cpa : _RNA.getChemProbAnnotations()) { - Point2D.Double anchor = transformCoord(cpa.getAnchorPosition(), - offX, offY, rnaBBoxX, rnaBBoxY, scaleFactor); - drawChemProbAnnotation(g2D, cpa, anchor, scaleFactor); - } - - } - - public Rectangle2D.Double getExtendedRNABBox() { - // We get the logical bounding box - Rectangle2D.Double rnabbox = _RNA.getBBox(); - rnabbox.y -= _conf._distNumbers * _RNA.BASE_RADIUS; - rnabbox.height += 2.0 * _conf._distNumbers * _RNA.BASE_RADIUS; - rnabbox.x -= _conf._distNumbers * _RNA.BASE_RADIUS; - rnabbox.width += 2.0 * _conf._distNumbers * _RNA.BASE_RADIUS; - if (_RNA.hasVirtualLoops()) { - rnabbox.y -= RNA.VIRTUAL_LOOP_RADIUS; - rnabbox.height += 2.0 * RNA.VIRTUAL_LOOP_RADIUS; - rnabbox.x -= RNA.VIRTUAL_LOOP_RADIUS; - rnabbox.width += 2.0 * RNA.VIRTUAL_LOOP_RADIUS; - } - return rnabbox; - } - - public void drawBackbone(VueVARNAGraphics g2D, Point2D.Double[] newCoords, - double newRadius, double _scaleFactor) { - // Drawing backbone - if (getDrawBackbone()) { - g2D.setStrokeThickness(1.5 * _scaleFactor); - g2D.setColor(_conf._backboneColor); - - ModeleBackbone bck = _RNA.getBackbone(); - - - for (int i = 1; i < _RNA.get_listeBases().size(); i++) { - Point2D.Double p1 = newCoords[i - 1]; - Point2D.Double p2 = newCoords[i]; - double dist = p1.distance(p2); - int a = _RNA.getBaseAt(i - 1).getElementStructure(); - int b = _RNA.getBaseAt(i).getElementStructure(); - boolean consecutivePair = (a == i) && (b == i - 1); - - if ((dist > 0)) { - Point2D.Double vbp = new Point2D.Double(); - vbp.x = (p2.x - p1.x) / dist; - vbp.y = (p2.y - p1.y) / dist; - - BackboneType bt = bck.getTypeBefore(i); - if (bt!=BackboneType.DISCONTINUOUS_TYPE) - { - if (bt==BackboneType.MISSING_PART_TYPE) { - g2D.setSelectionStroke(); - } else { - g2D.setPlainStroke(); - } - g2D.setColor(bck.getColorBefore(i, _conf._backboneColor)); - - if (consecutivePair - && (_RNA.getDrawMode() != RNA.DRAW_MODE_LINEAR) - && (_RNA.getDrawMode() != RNA.DRAW_MODE_CIRCULAR)) { - int dir = 0; - if (i + 1 < newCoords.length) { - dir = (_RNA.testDirectionality(i - 1, i, i + 1) ? -1 - : 1); - } else if (i - 2 >= 0) { - dir = (_RNA.testDirectionality(i - 2, i - 1, i) ? -1 - : 1); - } - Point2D.Double vn = new Point2D.Double(dir * vbp.y, - -dir * vbp.x); - Point2D.Double centerSeg = new Point2D.Double( - (p1.x + p2.x) / 2.0, (p1.y + p2.y) / 2.0); - double distp1CenterSeq = p1.distance(centerSeg); - double centerDist = Math - .sqrt((RNA.VIRTUAL_LOOP_RADIUS * _scaleFactor - * RNA.VIRTUAL_LOOP_RADIUS * _scaleFactor) - - distp1CenterSeq * distp1CenterSeq); - Point2D.Double centerLoop = new Point2D.Double( - centerSeg.x + centerDist * vn.x, centerSeg.y - + centerDist * vn.y); - double radius = centerLoop.distance(p1); - double a1 = 360. - * (Math.atan2(-(p1.y - centerLoop.y), - (p1.x - centerLoop.x))) - / (2. * Math.PI); - double a2 = 360. - * (Math.atan2(-(p2.y - centerLoop.y), - (p2.x - centerLoop.x))) - / (2. * Math.PI); - double angle = (a2 - a1); - if (-dir * angle < 0) { - angle += -dir * 360.; - } - // if (angle<0.) angle += 360.; - // angle = -dir*(360-dir*angle); - g2D.drawArc(centerLoop.x + .8 * newRadius * vn.x, - centerLoop.y + .8 * newRadius * vn.y, - 2 * radius, 2 * radius, a1, angle); - } else { - g2D.drawLine((newCoords[i - 1].x + newRadius * vbp.x), - (newCoords[i - 1].y + newRadius * vbp.y), - (newCoords[i].x - newRadius * vbp.x), - (newCoords[i].y - newRadius * vbp.y)); - } - } - } - } - } - } - - public Point2D.Double logicToPanel(Point2D.Double logicPoint) { - return new Point2D.Double(_offX - + (getScaleFactor() * (logicPoint.x - _offsetRNA.x)), _offY - + (getScaleFactor() * (logicPoint.y - _offsetRNA.y))); - - } - - public Rectangle2D.Double renderRNA(VueVARNAGraphics g2D, - Rectangle2D.Double bbox) { - return renderRNA(g2D, bbox, false, true); - } - - private double computeScaleFactor(Rectangle2D.Double bbox, - boolean localView, boolean autoCenter) { - Rectangle2D.Double rnabbox = getExtendedRNABBox(); - double scaleFactor = Math.min((double) bbox.width - / (double) rnabbox.width, (double) bbox.height - / (double) rnabbox.height); - - // Use it to get an estimate of the font size for numbers ... - float newFontSize = Math.max(1, - (int) ((1.7 * _RNA.BASE_RADIUS) * scaleFactor)); - // ... and increase bounding box accordingly - rnabbox.y -= newFontSize; - rnabbox.height += newFontSize; - if (_conf._drawColorMap) { - rnabbox.height += getColorMapHeight(); - } - rnabbox.x -= newFontSize; - rnabbox.width += newFontSize; - - // Now, compute the final scaling factor and corresponding font size - scaleFactor = Math.min((double) bbox.width / (double) rnabbox.width, - (double) bbox.height / (double) rnabbox.height); - if (localView) { - if (_conf._autoFit) - setScaleFactor(scaleFactor); - scaleFactor = getScaleFactor(); - } - return scaleFactor; - } - - public synchronized Rectangle2D.Double renderRNA(VueVARNAGraphics g2D, - Rectangle2D.Double bbox, boolean localView, boolean autoCenter) { - Rectangle2D.Double rnaMultiBox = new Rectangle2D.Double(0, 0, 1, 1); - double scaleFactor = computeScaleFactor(bbox, localView, autoCenter); - float newFontSize = Math.max(1, - (int) ((1.7 * _RNA.BASE_RADIUS) * scaleFactor)); - double newRadius = Math.max(1.0, (scaleFactor * _RNA.BASE_RADIUS)); - setBaseFontSize(newFontSize); - setNumbersFontSize(newFontSize); - double offX = bbox.x; - double offY = bbox.y; - Rectangle2D.Double rnabbox = getExtendedRNABBox(); - - if (_RNA.getSize() != 0) { - - Point2D.Double offsetRNA = new Point2D.Double(rnabbox.x, rnabbox.y); - - if (autoCenter) { - offX = (bbox.x + (bbox.width - Math.round(rnabbox.width - * scaleFactor)) / 2.0); - offY = (bbox.y + (bbox.height - Math.round(rnabbox.height - * scaleFactor)) / 2.0); - if (localView) { - _offX = offX; - _offY = offY; - _offsetPanel = new Point2D.Double(_offX, _offY); - _offsetRNA = new Point2D.Double(rnabbox.x, rnabbox.y); - } - } - - if (localView) { - offX = _offX; - offY = _offY; - offsetRNA = _offsetRNA; - } - - // Re-scaling once and for all - Point2D.Double[] newCoords = new Point2D.Double[_RNA - .get_listeBases().size()]; - Point2D.Double[] newCenters = new Point2D.Double[_RNA - .get_listeBases().size()]; - for (int i = 0; i < _RNA.get_listeBases().size(); i++) { - ModeleBase mb = _RNA.getBaseAt(i); - newCoords[i] = new Point2D.Double(offX - + (scaleFactor * (mb.getCoords().x - offsetRNA.x)), - offY + (scaleFactor * (mb.getCoords().y - offsetRNA.y))); - - Point2D.Double centerBck = _RNA.getCenter(i); - // si la base est dans un angle entre une boucle et une helice - if (_RNA.get_drawMode() == RNA.DRAW_MODE_NAVIEW - || _RNA.get_drawMode() == RNA.DRAW_MODE_RADIATE) { - if ((mb.getElementStructure() != -1) - && i < _RNA.get_listeBases().size() - 1 && i > 1) { - ModeleBase b1 = _RNA.get_listeBases().get(i - 1); - ModeleBase b2 = _RNA.get_listeBases().get(i + 1); - int j1 = b1.getElementStructure(); - int j2 = b2.getElementStructure(); - if ((j1 == -1) ^ (j2 == -1)) { - // alors la position du nombre associé doit etre - Point2D.Double a1 = b1.getCoords(); - Point2D.Double a2 = b2.getCoords(); - Point2D.Double c1 = b1.getCenter(); - Point2D.Double c2 = b2.getCenter(); - - centerBck.x = mb.getCoords().x + (c1.x - a1.x) - / c1.distance(a1) + (c2.x - a2.x) - / c2.distance(a2); - centerBck.y = mb.getCoords().y + (c1.y - a1.y) - / c1.distance(a1) + (c2.y - a2.y) - / c2.distance(a2); - } - } - } - newCenters[i] = new Point2D.Double(offX - + (scaleFactor * (centerBck.x - offsetRNA.x)), offY - + (scaleFactor * (centerBck.y - offsetRNA.y))); - } - // Keep track of coordinates for mouse interactions - if (localView) { - _realCoords = newCoords; - _realCenters = newCenters; - } - - g2D.setStrokeThickness(1.5 * scaleFactor); - g2D.setPlainStroke(); - g2D.setFont(_conf._fontBasesGeneral); - - // Drawing region highlights Annotation - drawRegionHighlightsAnnotation(g2D, _realCoords, _realCenters, - scaleFactor); - drawBackbone(g2D, newCoords, newRadius, scaleFactor); - - // Drawing base-pairs - // pour chaque base - for (int i = 0; i < _RNA.get_listeBases().size(); i++) { - int j = _RNA.get_listeBases().get(i).getElementStructure(); - // si c'est une parenthese ouvrante (premiere base du - // couple) - if (j > i) { - ModeleBP msbp = _RNA.get_listeBases().get(i).getStyleBP(); - // System.err.println(msbp); - if (msbp.isCanonical() || _conf._drawnNonCanonicalBP) { - if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) { - g2D.setStrokeThickness(_RNA.getBasePairThickness( - msbp, _conf) - * 2.0 - * scaleFactor - * _conf._bpThickness); - } else { - g2D.setStrokeThickness(_RNA.getBasePairThickness( - msbp, _conf) * 1.5 * scaleFactor); - } - g2D.setColor(_RNA.getBasePairColor(msbp, _conf)); - - if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) { - drawBasePairArc(g2D, i, j, newCoords[i], - newCoords[j], scaleFactor, msbp, newRadius); - } else { - drawBasePair(g2D, newCoords[i], newCoords[j], msbp, - newRadius, scaleFactor); - } - } - } - } - - // Liaisons additionelles (non planaires) - if (_conf._drawnNonPlanarBP) { - ArrayList bpaux = _RNA.getStructureAux(); - for (int k = 0; k < bpaux.size(); k++) { - ModeleBP msbp = bpaux.get(k); - if (msbp.isCanonical() || _conf._drawnNonCanonicalBP) { - int i = msbp.getPartner5().getIndex(); - int j = msbp.getPartner3().getIndex(); - if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) { - g2D.setStrokeThickness(_RNA.getBasePairThickness( - msbp, _conf) - * 2.5 - * scaleFactor - * _conf._bpThickness); - g2D.setPlainStroke(); - } else { - g2D.setStrokeThickness(_RNA.getBasePairThickness( - msbp, _conf) * 1.5 * scaleFactor); - g2D.setPlainStroke(); - } - - g2D.setColor(_RNA.getBasePairColor(msbp, _conf)); - if (j > i) { - if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) { - drawBasePairArc(g2D, i, j, newCoords[i], - newCoords[j], scaleFactor, msbp, newRadius); - } else { - drawBasePair(g2D, newCoords[i], newCoords[j], - msbp, newRadius, scaleFactor); - } - } - } - } - } - - // Drawing bases - g2D.setPlainStroke(); - for (int i = 0; i < Math.min(_RNA.get_listeBases().size(), - newCoords.length); i++) { - drawBase(g2D, i, newCoords, newCenters, newRadius, scaleFactor, - localView); - } - - rnaMultiBox = new Rectangle2D.Double(offX, offY, - (scaleFactor * rnabbox.width) - 1, - (scaleFactor * rnabbox.height) - 1); - - if (localView) { - // Drawing bbox - if (_debug || _drawBBox) { - g2D.setColor(Color.RED); - g2D.setSelectionStroke(); - g2D.drawRect(rnaMultiBox.x, rnaMultiBox.y, - rnaMultiBox.width, rnaMultiBox.height); - } - - // Draw color map - if (_conf._drawColorMap) { - drawColorMap(g2D, scaleFactor, rnabbox); - } - - if (_debug || _drawBBox) { - g2D.setColor(Color.GRAY); - g2D.setSelectionStroke(); - g2D.drawRect(0, 0, getWidth() - 1, getHeight() - - getTitleHeight() - 1); - } - } - // Draw annotations - renderAnnotations(g2D, offX, offY, offsetRNA.x, offsetRNA.y, - scaleFactor); - // Draw additional debug shape - if (_RNA._debugShape != null) { - Color c = new Color(255, 0, 0, 50); - g2D.setColor(c); - AffineTransform at = new AffineTransform(); - at.translate(offX - scaleFactor * rnabbox.x, offY - scaleFactor - * rnabbox.y); - at.scale(scaleFactor, scaleFactor); - Shape s = at.createTransformedShape(_RNA._debugShape); - if (s instanceof GeneralPath) { - g2D.fill((GeneralPath) s); - } - } - } else { - g2D.setColor(VARNAConfig.DEFAULT_MESSAGE_COLOR); - g2D.setFont(VARNAConfig.DEFAULT_MESSAGE_FONT); - rnaMultiBox = new Rectangle2D.Double(0,0,10,10); - g2D.drawStringCentered("No RNA here", bbox.getCenterX(),bbox.getCenterY()); - } - return rnaMultiBox; - } - - public void centerViewOn(double x, double y) { - Rectangle2D.Double r = _RNA.getBBox(); - _target = new Point2D.Double(x, y); - Point2D.Double q = logicToPanel(_target); - Point p = new Point((int) (-q.x), (int) (-q.y)); - setTranslation(p); - repaint(); - } - - Point2D.Double _target = new Point2D.Double(0, 0); - Point2D.Double _target2 = new Point2D.Double(0, 0); - - public ModeleBase getBaseAt(Point2D.Double po) { - ModeleBase mb = null; - Point2D.Double p = panelToLogicPoint(po); - double dist = Double.MAX_VALUE; - for (ModeleBase tmp : _RNA.get_listeBases()) { - double ndist = tmp.getCoords().distance(p); - if (dist > ndist) { - mb = tmp; - dist = ndist; - } - } - return mb; - } - - public void setColorMapValues(Double[] values) { - _RNA.setColorMapValues(values, _conf._cm, true); - _conf._drawColorMap = true; - repaint(); - } - - public void setColorMapMaxValue(double d) { - _conf._cm.setMaxValue(d); - } - - public void setColorMapMinValue(double d) { - _conf._cm.setMinValue(d); - } - - public ModeleColorMap getColorMap() { - return _conf._cm; - } - - public void setColorMap(ModeleColorMap cm) { - //_RNA.adaptColorMapToValues(cm); - _conf._cm = cm; - repaint(); - } - - public void setColorMapCaption(String caption) { - _conf._colorMapCaption = caption; - repaint(); - } - - public String getColorMapCaption() { - return _conf._colorMapCaption; - } - - public void drawColorMap(boolean draw) { - _conf._drawColorMap = draw; - } - - private double getColorMapHeight() { - double result = VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE - + _conf._colorMapHeight; - if (!_conf._colorMapCaption.equals("")) - result += VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE; - return result; - } - - private void drawColorMap(VueVARNAGraphics g2D, double scaleFactor, - Rectangle2D.Double rnabbox) { - double v1 = _conf._cm.getMinValue(); - double v2 = _conf._cm.getMaxValue(); - double x, y; - g2D.setPlainStroke(); - - double xSpaceAvail = 0; - double ySpaceAvail = Math - .min((getHeight() - rnabbox.height * scaleFactor - getTitleHeight()) / 2.0, - scaleFactor - * (_conf._colorMapHeight + VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE)); - if ((int) ySpaceAvail == 0) { - xSpaceAvail = Math.min( - (getWidth() - rnabbox.width * scaleFactor) / 2, scaleFactor - * (_conf._colorMapWidth) - + VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH); - } - double xBase = (xSpaceAvail + _offX + scaleFactor - * (rnabbox.width - _conf._colorMapWidth - _conf._colorMapXOffset)); - double hcaption = VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE; - double yBase = (ySpaceAvail + _offY + scaleFactor - * (rnabbox.height - _conf._colorMapHeight - - _conf._colorMapYOffset - hcaption)); - - for (int i = 0; i < _conf._colorMapWidth; i++) { - double ratio = (((double) i) / ((double) _conf._colorMapWidth)); - double val = v1 + (v2 - v1) * ratio; - g2D.setColor(_conf._cm.getColorForValue(val)); - x = (xBase + scaleFactor * i); - y = yBase; - g2D.fillRect(x, y, scaleFactor - * VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH, - (scaleFactor * _conf._colorMapHeight)); - } - g2D.setColor(VARNAConfig.DEFAULT_COLOR_MAP_OUTLINE); - g2D.drawRect(xBase, yBase, - (VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH - 1 + scaleFactor - * _conf._colorMapWidth), - ((scaleFactor * _conf._colorMapHeight))); - g2D.setFont(getFont() - .deriveFont( - (float) (scaleFactor * VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE))); - g2D.setColor(VARNAConfig.DEFAULT_COLOR_MAP_FONT_COLOR); - NumberFormat nf = NumberFormat.getInstance(); - nf.setMaximumFractionDigits(2); - nf.setMinimumFractionDigits(0); - g2D.drawStringCentered(nf.format(_conf._cm.getMinValue()), xBase, - yBase - + scaleFactor * (_conf._colorMapHeight+(VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7))); - g2D.drawStringCentered(nf.format(_conf._cm.getMaxValue()), xBase - + VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH + scaleFactor - * _conf._colorMapWidth, - yBase - + scaleFactor * (_conf._colorMapHeight+(VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7))); - if (!_conf._colorMapCaption.equals("")) - g2D.drawStringCentered( - "" + _conf._colorMapCaption, - xBase + scaleFactor * _conf._colorMapWidth / 2.0, - yBase - + scaleFactor - * (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7 + _conf._colorMapHeight)); - - } - - public Point2D.Double panelToLogicPoint(Point2D.Double p) { - return new Point2D.Double( - ((p.x - getOffsetPanel().x) / getScaleFactor()) - + getRNAOffset().x, - ((p.y - getOffsetPanel().y) / getScaleFactor()) - + getRNAOffset().y); - } - - public Point2D.Double transformCoord(Point2D.Double coordDebut, - double offX, double offY, double rnaBBoxX, double rnaBBoxY, - double scaleFactor) { - return new Point2D.Double(offX - + (scaleFactor * (coordDebut.x - rnaBBoxX)), offY - + (scaleFactor * (coordDebut.y - rnaBBoxY))); - } - - public void eraseSequence() { - _RNA.eraseSequence(); - } - - public Point2D.Double transformCoord(Point2D.Double coordDebut) { - Rectangle2D.Double rnabbox = getExtendedRNABBox(); - return new Point2D.Double(_offX - + (getScaleFactor() * (coordDebut.x - rnabbox.x)), _offY - + (getScaleFactor() * (coordDebut.y - rnabbox.y))); - } - - public void paintComponent(Graphics g) { - paintComponent(g, false); - } - - public void paintComponent(Graphics g, boolean transparentBackground) { - if (_premierAffichage) { - // _border = new Dimension(0, 0); - _translation.x = 0; - _translation.y = (int) (-getTitleHeight() / 2.0); - _popup.buildPopupMenu(); - this.add(_popup); - _premierAffichage = false; - } - - Graphics2D g2 = (Graphics2D) g; - Stroke dflt = g2.getStroke(); - VueVARNAGraphics g2D = new SwingGraphics(g2); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - this.removeAll(); - super.paintComponent(g2); - renderComponent(g2D, transparentBackground, getScaleFactor()); - if (isFocusOwner()) { - g2.setStroke(new BasicStroke(1.5f)); - g2.setColor(Color.decode("#C0C0C0")); - g2.drawRect(0, 0, getWidth() - 1, getHeight() - 1); - - } - g2.setStroke(dflt); - /* - * PSExport e = new PSExport(); SecStrProducerGraphics export = new - * SecStrProducerGraphics(e); renderRNA(export, getExtendedRNABBox()); - * try { export.saveToDisk("./out.ps"); } catch - * (ExceptionWritingForbidden e1) { e1.printStackTrace(); } - */ - } - - /** - * Draws current RNA structure in a given Graphics "device". - * - * @param g2D - * A graphical device - * @param transparentBackground - * Whether the background should be transparent, or drawn. - */ - public synchronized void renderComponent(VueVARNAGraphics g2D, - boolean transparentBackground, double scaleFactor) { - - updateTitleHeight(); - - if (_debug || _drawBorder) { - g2D.setColor(Color.BLACK); - g2D.setPlainStroke(); - g2D.drawRect(getLeftOffset(), getTopOffset(), getInnerWidth(), - getInnerHeight()); - - } - - - if (!transparentBackground) { - super.setBackground(_conf._backgroundColor); - } else { - super.setBackground(new Color(0, 0, 0, 120)); - } - - // BH 2018 was lt, not lteq here - // SwingJS sets the minimum panel size -- probably incorrectly -- to the size for VARNAPanel - if (getMinimumSize().height <= getSize().height - && getMinimumSize().width <= getSize().width) { - // Draw Title - if (!getTitle().equals("")) { - g2D.setColor(_conf._titleColor); - g2D.setFont(_conf._titleFont); - g2D.drawStringCentered(getTitle(), this.getWidth() / 2, - this.getHeight() - getTitleHeight() / 2.0); - } - // Draw RNA - renderRNA(g2D, getClip(), true, _conf._autoCenter); - } - if (_selectionRectangle != null) { - g2D.setColor(Color.BLACK); - g2D.setSelectionStroke(); - g2D.drawRect(_selectionRectangle.x, _selectionRectangle.y, - _selectionRectangle.width, _selectionRectangle.height); - } - if ((_linkOrigin != null) && (_linkDestination != null)) { - g2D.setColor(_conf._bondColor); - g2D.setPlainStroke(); - g2D.setStrokeThickness(3.0 * scaleFactor); - Point2D.Double linkOrigin = (_linkOrigin); - Point2D.Double linkDestination = (_linkDestination); - g2D.drawLine(linkOrigin.x, linkOrigin.y, linkDestination.x, - linkDestination.y); - for (int i : getSelection().getIndices()) - drawBase(g2D, i, _realCoords, _realCenters, scaleFactor - * _RNA.BASE_RADIUS, scaleFactor, true); - } - - if (_debug) { - g2D.setStrokeThickness(3.0 * scaleFactor); - g2D.setColor(Color.black); - Point2D.Double t = this.logicToPanel(_target); - g2D.drawLine(t.x - 3, t.y - 3, t.x + 3, t.y + 3); - g2D.drawLine(t.x - 3, t.y + 3, t.x + 3, t.y - 3); - g2D.setColor(Color.red); - t = this.logicToPanel(_target2); - g2D.drawLine(t.x - 3, t.y - 3, t.x + 3, t.y + 3); - g2D.drawLine(t.x - 3, t.y + 3, t.x + 3, t.y - 3); - } - } - - public void drawRegionHighlightsAnnotation(VueVARNAGraphics g2D, - Point2D.Double[] realCoords, Point2D.Double[] realCenters, - double scaleFactor) { - g2D.setStrokeThickness(2.0 * scaleFactor); - g2D.setPlainStroke(); - for (HighlightRegionAnnotation r : _RNA.getHighlightRegion()) { - GeneralPath s = r.getShape(realCoords, realCenters, scaleFactor); - g2D.setColor(r.getFillColor()); - g2D.fill(s); - g2D.setColor(r.getOutlineColor()); - g2D.draw(s); - } - } - - private Rectangle2D.Double getClip() { - return new Rectangle2D.Double(getLeftOffset(), getTopOffset(), - this.getInnerWidth(), this.getInnerHeight()); - } - - public Rectangle2D.Double getViewClip() { - return new Rectangle2D.Double(this.getLeftOffset(), - this.getTopOffset(), this.getInnerWidth(), - this.getInnerHeight()); - } - - /** - * Returns the color used to draw backbone bounds. - * - * @return The color used to draw backbone bounds - */ - public Color getBackboneColor() { - return _conf._backboneColor; - } - - /** - * Sets the color to be used for drawing backbone interactions. - * - * @param backbone_color - * The new color for the backbone bounds - */ - public void setBackboneColor(Color backbone_color) { - _conf._backboneColor = backbone_color; - } - - /** - * Returns the color used to display hydrogen bonds (base pairings) - * - * @return The color of hydrogen bonds - */ - public Color getBondColor() { - return _conf._bondColor; - } - - /** - * Returns the title of this panel - * - * @return The title - */ - public String getTitle() { - return _RNA.getName(); - } - - /** - * Sets the new color to be used for hydrogen bonds (base pairings) - * - * @param bond_color - * The new color for hydrogen bonds - */ - public void setDefaultBPColor(Color bond_color) { - _conf._bondColor = bond_color; - } - - /** - * Sets the size of the border, i.e. the empty space between the end of the - * drawing area and the actual border. - * - * @param b - * The new border size - */ - public void setBorderSize(Dimension b) { - _border = b; - } - - /** - * Returns the size of the border, i.e. the empty space between the end of - * the drawing area - * - * @return The border size - */ - public Dimension getBorderSize() { - return _border; - } - - /** - * Sets the RNA to be displayed within this Panel. This method does not use - * a drawing algorithm to reassigns base coordinates, rather assuming that - * the RNA was previously drawn. - * - * @param r - * An already drawn RNA to display in this panel - */ - public synchronized void showRNA(RNA r) { - fireUINewStructure(r); - _RNA = r; - } - - /** - * Sets the RNA secondary structure to be drawn in this panel, using the - * default layout algorithm. In addition to the raw nucleotides sequence, - * the secondary structure is given in the so-called "Dot-bracket notation" - * (DBN) format. This format is a well-parenthesized word over the alphabet - * '(',')','.'.
    - * Ex:((((((((....))))..(((((...))).))))))
    - * Returns true if the sequence/structure couple could be - * parsed into a valid secondary structure, and false - * otherwise. - * - * @param seq - * The raw nucleotides sequence - * @param str - * The secondary structure - * @throws ExceptionNonEqualLength - */ - public void drawRNA(String seq, String str) throws ExceptionNonEqualLength { - drawRNA(seq, str, _RNA.get_drawMode()); - } - - /** - * Sets the RNA secondary structure to be drawn in this panel, using a given - * layout algorithm. - * - * @param r - * The new secondary structure - * @param drawMode - * The drawing algorithm - */ - public void drawRNA(RNA r, int drawMode) { - r.setDrawMode(drawMode); - drawRNA(r); - } - - /** - * Redraws the current RNA. This reassigns base coordinates to their default - * value using the current drawing algorithm. - */ - - public void drawRNA() { - try { - _RNA.drawRNA(_RNA.get_drawMode(), _conf); - } catch (ExceptionNAViewAlgorithm e) { - errorDialog(e); - e.printStackTrace(); - } - repaint(); - } - - /** - * Sets the RNA secondary structure to be drawn in this panel, using the - * current drawing algorithm. - * - * @param r - * The new secondary structure - */ - public void drawRNA(RNA r) { - if (r != null) { - _RNA = r; - drawRNA(); - } - } - - /** - * Sets the RNA secondary structure to be drawn in this panel, using a given - * layout algorithm. In addition to the raw nucleotides sequence, the - * secondary structure is given in the so-called "Dot-bracket notation" - * (DBN) format. This format is a well-parenthesized word over the alphabet - * '(',')','.'.
    - * Ex: ((((((((....))))..(((((...))).))))))
    - * Returns true if the sequence/structure couple could be - * parsed into a valid secondary structure, and false - * otherwise. - * - * @param seq - * The raw nucleotides sequence - * @param str - * The secondary structure - * @param drawMode - * The drawing algorithm - * @throws ExceptionNonEqualLength - */ - public void drawRNA(String seq, String str, int drawMode) - throws ExceptionNonEqualLength { - _RNA.setDrawMode(drawMode); - try { - _RNA.setRNA(seq, str); - drawRNA(); - } catch (ExceptionUnmatchedClosingParentheses e) { - errorDialog(e); - } catch (ExceptionFileFormatOrSyntax e1) { - errorDialog(e1); - } - } - - public void drawRNA(Reader r, int drawMode) throws ExceptionNonEqualLength, - ExceptionFileFormatOrSyntax { - _RNA.setDrawMode(drawMode); - Collection rnas = RNAFactory.loadSecStr(r); - if (rnas.isEmpty()) { - throw new ExceptionFileFormatOrSyntax( - "No RNA could be parsed from that source."); - } - _RNA = rnas.iterator().next(); - drawRNA(); - } - - /** - * Draws a secondary structure of RNA using the default drawing algorithm - * and displays it, using an interpolated transition between the previous - * one and the new one. Extra bases, resulting from a size difference - * between the two successive RNAs, are assumed to initiate from the middle - * of the sequence. In other words, both prefixes and suffixes of the RNAs - * are assumed to match, and what remains is an insertion. - * - * @param seq - * Sequence - * @param str - * Structure in dot bracket notation - * @throws ExceptionNonEqualLength - * If len(seq)!=len(str) - */ - public void drawRNAInterpolated(String seq, String str) - throws ExceptionNonEqualLength { - drawRNAInterpolated(seq, str, _RNA.get_drawMode()); - } - - /** - * Draws a secondary structure of RNA using a given algorithm and displays - * it, using an interpolated transition between the previous one and the new - * one. Extra bases, resulting from a size difference between the two - * successive RNAs, are assumed to initiate from the middle of the sequence. - * In other words, both prefixes and suffixes of the RNAs are assumed to - * match, and what remains is an insertion. - * - * @param seq - * Sequence - * @param str - * Structure in dot bracket notation - * @param drawMode - * The drawing algorithm to be used for the initial placement - * @throws ExceptionNonEqualLength - * If len(seq)!=len(str) - */ - public void drawRNAInterpolated(String seq, String str, int drawMode) { - drawRNAInterpolated(seq, str, drawMode, - Mapping.DefaultOutermostMapping(_RNA.get_listeBases().size(), - str.length())); - } - - /** - * Draws a secondary structure of RNA using the default drawing algorithm - * and displays it, using an interpolated transition between the previous - * one and the new one. Here, a mapping between those bases of the new - * structure and the previous one is explicitly provided. - * - * @param seq - * Sequence - * @param str - * Structure in dot bracket notation - * @param m - * A mapping between the currently rendered structure and its - * successor (seq,str) - * @throws ExceptionNonEqualLength - * If len(seq)!=len(str) - */ - public void drawRNAInterpolated(String seq, String str, Mapping m) { - drawRNAInterpolated(seq, str, _RNA.get_drawMode(), m); - } - - /** - * Draws a secondary structure of RNA using a given drawing algorithm and - * displays it, using an interpolated transition between the previous one - * and the new one. Here, a mapping between those bases of the new structure - * and the previous one is provided. - * - * @param seq - * Sequence - * @param str - * Structure in dot bracket notation - * @param drawMode - * The drawing algorithm to be used for the initial placement - * @param m - * A mapping between the currently rendered structure and its - * successor (seq,str) - */ - public void drawRNAInterpolated(String seq, String str, int drawMode, - Mapping m) { - RNA target = new RNA(); - try { - target.setRNA(seq, str); - drawRNAInterpolated(target, drawMode, m); - } catch (ExceptionUnmatchedClosingParentheses e) { - errorDialog(e); - } catch (ExceptionFileFormatOrSyntax e) { - errorDialog(e); - } - } - - /** - * Draws a secondary structure of RNA using the default drawing algorithm - * and displays it, using an interpolated transition between the previous - * one and the new one. Here, a mapping between those bases of the new - * structure and the previous one is explicitly provided. - * - * @param target - * Secondary structure - */ - public void drawRNAInterpolated(RNA target) { - drawRNAInterpolated(target, target.get_drawMode(), - Mapping.DefaultOutermostMapping(_RNA.get_listeBases().size(), - target.getSize())); - } - - /** - * Draws a secondary structure of RNA using the default drawing algorithm - * and displays it, using an interpolated transition between the previous - * one and the new one. Here, a mapping between those bases of the new - * structure and the previous one is explicitly provided. - * - * @param target - * Secondary structure - * @param m - * A mapping between the currently rendered structure and its - * successor (seq,str) - */ - public void drawRNAInterpolated(RNA target, Mapping m) { - drawRNAInterpolated(target, target.get_drawMode(), m); - } - - /** - * Draws a secondary structure of RNA using a given drawing algorithm and - * displays it, using an interpolated transition between the previous one - * and the new one. Here, a mapping between those bases of the new structure - * and the previous one is provided. - * - * @param target - * Secondary structure of RNA - * @param drawMode - * The drawing algorithm to be used for the initial placement - * @param m - * A mapping between the currently rendered structure and its - * successor (seq,str) - */ - public void drawRNAInterpolated(RNA target, int drawMode, Mapping m) { - try { - target.drawRNA(drawMode, _conf); - _conf._drawColorMap = false; - _interpolator.addTarget(target, m); - } catch (ExceptionNAViewAlgorithm e) { - errorDialog(e); - e.printStackTrace(); - } - } - - /** - * Returns the current algorithm used for drawing the structure - * - * @return The current drawing algorithm - */ - public int getDrawMode() { - return this._RNA.getDrawMode(); - } - - public void showRNA(RNA t, VARNAConfig cfg) { - showRNA(t); - if (cfg != null) { - this.setConfig(cfg); - } - repaint(); - } - - /** - * Checks whether an interpolated transition bewteen two RNAs is occurring. - * - * @return True if an interpolated transition is occurring, false otherwise - */ - - public boolean isInterpolationInProgress() { - if (_interpolator == null) { - return false; - } else - return _interpolator.isInterpolationInProgress(); - } - - /** - * Simply displays (does not redraw) a secondary structure , using an - * interpolated transition between the previous one and the new one. A - * default mapping between those bases of the new structure and the previous - * one is used. - * - * @param target - * Secondary structure of RNA - */ - public void showRNAInterpolated(RNA target) { - showRNAInterpolated(target, Mapping.DefaultOutermostMapping(_RNA - .get_listeBases().size(), target.getSize())); - } - - /** - * Simply displays (does not redraw) a secondary structure , using an - * interpolated transition between the previous one and the new one. Here, a - * mapping between bases of the new structure and the previous one is given. - * - * @param target - * Secondary structure of RNA - * @param m - * A mapping between the currently rendered structure and its - * successor (seq,str) - * @throws ExceptionNonEqualLength - * If len(seq)!=len(str) - */ - public void showRNAInterpolated(RNA target, Mapping m) { - showRNAInterpolated(target, null, m); - } - - public void showRNAInterpolated(RNA target, VARNAConfig cfg, Mapping m) { - _interpolator.addTarget(target, cfg, m); - } - - /** - * When comparison mode is ON, sets the two RNA secondary structure to be - * drawn in this panel, using a given layout algorithm. In addition to the - * raw nucleotides sequence, the secondary structure is given in the - * so-called "Dot-bracket notation" (DBN) format. This format is a - * well-parenthesized word over the alphabet '(',')','.'.
    - * Ex: ((((((((....))))..(((((...))).))))))
    - * - * @param firstSeq - * The first RNA raw nucleotides sequence - * @param firstStruct - * The first RNA secondary structure - * @param secondSeq - * The second RNA raw nucleotides sequence - * @param secondStruct - * The second RNA secondary structure - * @param drawMode - * The drawing algorithm - */ - public void drawRNA(String firstSeq, String firstStruct, String secondSeq, - String secondStruct, int drawMode) { - _RNA.setDrawMode(drawMode); - /** - * Checking the sequences and structures validities... - */ - - // This is a comparison, so the two RNA alignment past in parameters - // must - // have the same sequence and structure length. - if (firstSeq.length() == secondSeq.length() - && firstStruct.length() == secondStruct.length()) { - // First RNA - if (firstSeq.length() != firstStruct.length()) { - if (_conf._showWarnings) { - emitWarning("First sequence length " + firstSeq.length() - + " differs from that of it's secondary structure " - + firstStruct.length() - + ". \nAdapting first sequence length ..."); - } - if (firstSeq.length() < firstStruct.length()) { - while (firstSeq.length() < firstStruct.length()) { - firstSeq += " "; - } - } else { - firstSeq = firstSeq.substring(0, firstStruct.length()); - } - } - - // Second RNA - if (secondSeq.length() != secondStruct.length()) { - if (_conf._showWarnings) { - emitWarning("Second sequence length " + secondSeq.length() - + " differs from that of it's secondary structure " - + secondStruct.length() - + ". \nAdapting second sequence length ..."); - } - if (secondSeq.length() < secondStruct.length()) { - while (secondSeq.length() < secondStruct.length()) { - secondSeq += " "; - } - } else { - secondSeq = secondSeq.substring(0, secondStruct.length()); - } - } - - int RNALength = firstSeq.length(); - String string_superStruct = new String(""); - String string_superSeq = new String(""); - /** - * In this array, we'll have for each indexes of each characters of - * the final super-structure, the RNA number which is own it. - */ - ArrayList array_rnaOwn = new ArrayList(); - - /** - * Generating super-structure sequences and structures... - */ - - firstStruct = firstStruct.replace('-', '.'); - secondStruct = secondStruct.replace('-', '.'); - // First of all, we make the structure - for (int i = 0; i < RNALength; i++) { - // If both characters are the same, so it'll be in the super - // structure - if (firstStruct.charAt(i) == secondStruct.charAt(i)) { - string_superStruct = string_superStruct - + firstStruct.charAt(i); - array_rnaOwn.add(0); - } - // Else if one of the characters is an opening parenthese, so - // it'll be an opening parenthese in the super structure - else if (firstStruct.charAt(i) == '(' - || secondStruct.charAt(i) == '(') { - string_superStruct = string_superStruct + '('; - array_rnaOwn.add((firstStruct.charAt(i) == '(') ? 1 : 2); - } - // Else if one of the characters is a closing parenthese, so - // it'll be a closing parenthese in the super structure - else if (firstStruct.charAt(i) == ')' - || secondStruct.charAt(i) == ')') { - string_superStruct = string_superStruct + ')'; - array_rnaOwn.add((firstStruct.charAt(i) == ')') ? 1 : 2); - } else { - string_superStruct = string_superStruct + '.'; - array_rnaOwn.add(-1); - } - } - - // Next, we make the sequence taking the characters at the same - // index in the first and second sequence - for (int i = 0; i < RNALength; i++) { - string_superSeq = string_superSeq + firstSeq.charAt(i) - + secondSeq.charAt(i); - } - - // Now, we need to create the super-structure RNA with the owning - // bases array - // in order to color bases outer depending on the owning statement - // of each bases. - if (!string_superSeq.equals("") && !string_superStruct.equals("")) { - try { - _RNA.setRNA(string_superSeq, string_superStruct, - array_rnaOwn); - } catch (ExceptionUnmatchedClosingParentheses e) { - errorDialog(e); - } catch (ExceptionFileFormatOrSyntax e) { - errorDialog(e); - } - } else { - emitWarning("ERROR : The super-structure is NULL."); - } - - switch (_RNA.get_drawMode()) { - case RNA.DRAW_MODE_RADIATE: - _RNA.drawRNARadiate(_conf); - break; - case RNA.DRAW_MODE_CIRCULAR: - _RNA.drawRNACircle(_conf); - break; - case RNA.DRAW_MODE_LINEAR: - _RNA.drawRNALine(_conf); - break; - case RNA.DRAW_MODE_NAVIEW: - try { - _RNA.drawRNANAView(_conf); - } catch (ExceptionNAViewAlgorithm e) { - errorDialog(e); - } - break; - default: - break; - } - - } - } - - /** - * Returns the currently selected base index, obtained through a mouse-left - * click - * - * @return Selected base - * - * public int getSelectedBaseIndex() { return _selectedBase; } - * - * /** Returns the currently selected base, obtained through a - * mouse-left click - * - * @return Selected base - * - * public ModeleBase getSelectedBase() { return - * _RNA.get_listeBases().get(_selectedBase); } - * - * /** Sets the selected base index - * - * @param base - * New selected base index - * - * public void setSelectedBase(int base) { _selectedBase = base; - * } - */ - - /** - * Returns the coordinates of the currently displayed RNA - * - * @return Coordinates array - */ - public Point2D.Double[] getRealCoords() { - return _realCoords; - } - - /** - * Sets the coordinates of the currently displayed RNA - * - * @param coords - * New coordinates - */ - public void setRealCoords(Point2D.Double[] coords) { - _realCoords = coords; - } - - /** - * Returns the popup menu used for user mouse iteractions - * - * @return Popup menu - */ - public VueMenu getPopup() { - return _popup; - } - - /** - * Sets the color used to display hydrogen bonds (base pairings) - * - * @param bond_color - * The color of hydrogen bonds - */ - public void setBondColor(Color bond_color) { - _conf._bondColor = bond_color; - } - - /** - * Returns the color used to draw the title - * - * @return The color used to draw the title - */ - public Color getTitleColor() { - return _conf._titleColor; - } - - /** - * Sets the color used to draw the title - * - * @param title_color - * The new color used to draw the title - */ - public void setTitleColor(Color title_color) { - _conf._titleColor = title_color; - } - - /** - * Returns the height taken by the title - * - * @return The height taken by the title - */ - private int getTitleHeight() { - return _titleHeight; - } - - /** - * Sets the height taken by the title - * - * @param title_height - * The height taken by the title - */ - @SuppressWarnings("unused") - private void setTitleHeight(int title_height) { - _titleHeight = title_height; - } - - /** - * Returns the current state of auto centering mode. - * - * @return True if autocentered, false otherwise - */ - public boolean isAutoCentered() { - return _conf._autoCenter; - } - - /** - * Sets the current state of auto centering mode. - * - * @param center - * New auto-centered state - */ - public void setAutoCenter(boolean center) { - _conf._autoCenter = center; - } - - /** - * Returns the font currently used for rendering the title. - * - * @return Current title font - */ - public Font getTitleFont() { - return _conf._titleFont; - } - - /** - * Sets the font used for rendering the title. - * - * @param font - * New title font - */ - public void setTitleFont(Font font) { - _conf._titleFont = font; - updateTitleHeight(); - } - - /** - * For the LINE_MODE drawing algorithm, sets the base pair height increment, - * i.e. the vertical distance between two nested arcs. - * - * @return The current base pair increment - */ - public double getBPHeightIncrement() { - return _RNA._bpHeightIncrement; - } - - /** - * Sets the base pair height increment, i.e. the vertical distance between - * two arcs to be used in LINE_MODE. - * - * @param inc - * New height increment - */ - public void setBPHeightIncrement(double inc) { - _RNA._bpHeightIncrement = inc; - } - - /** - * Returns the shifting of the origin of the Panel in zoom mode - * - * @return The logical coordinate of the top-left panel point - */ - public Point2D.Double getOffsetPanel() { - return _offsetPanel; - } - - /** - * Returns the vector bringing the logical coordinate of left-top-most point - * in the panel to the left-top-most point of the RNA. - * - * @return The logical coordinate of the top-left panel point - */ - private Point2D.Double getRNAOffset() { - return _offsetRNA; - } - - /** - * Returns this panel's UI menu - * - * @return Applet's UI popupmenu - */ - public VueMenu getPopupMenu() { - return _popup; - } - - /** - * Returns the atomic zoom factor step, or increment. - * - * @return Atomic zoom factor increment - */ - public double getZoomIncrement() { - return _conf._zoomAmount; - } - - /** - * Sets the atomic zoom factor step, or increment. - * - * @param amount - * Atomic zoom factor increment - */ - public void setZoomIncrement(Object amount) { - setZoomIncrement(Float.valueOf(amount.toString())); - } - - /** - * Sets the atomic zoom factor step, or increment. - * - * @param amount - * Atomic zoom factor increment - */ - public void setZoomIncrement(double amount) { - _conf._zoomAmount = amount; - } - - /** - * Returns the current zoom factor - * - * @return Current zoom factor - */ - public double getZoom() { - return _conf._zoom; - } - - /** - * Sets the current zoom factor - * - * @param _zoom - * New zoom factor - */ - public void setZoom(Object _zoom) { - double d = Float.valueOf(_zoom.toString()); - if (_conf._zoom != d) { - _conf._zoom = d; - fireZoomLevelChanged(d); - } - } - - /** - * Returns the translation used for zooming in and out - * - * @return A vector describing the translation - */ - public Point getTranslation() { - return _translation; - } - - /** - * Sets the translation used for zooming in and out - * - * @param trans - * A vector describing the new translation - */ - public void setTranslation(Point trans) { - _translation = trans; - checkTranslation(); - fireTranslationChanged(); - } - - /** - * Returns the current RNA model - * - * @return Current RNA model - */ - public RNA getRNA() { - return _RNA; - } - - /** - * Checks whether the drawn RNA is too large to be displayed, allowing for - * shifting mouse interactions. - * - * @return true if the RNA is too large to be displayed, false otherwise - */ - public boolean isOutOfFrame() { - return _horsCadre; - } - - /** - * Pops up an error Dialog displaying an exception in an human-readable way. - * - * @param error - * The exception to display within the Dialog - */ - public void errorDialog(Exception error) { - errorDialog(error, this); - } - - /** - * Pops up an error Dialog displaying an exception in an human-readable way - * if errors are set to be displayed. - * - * @see #setErrorsOn(boolean) - * @param error - * The exception to display within the Dialog - * @param c - * Parent component for the dialog box - */ - public void errorDialog(Exception error, Component c) { - if (isErrorsOn()) { - JOptionPane.showMessageDialog(c, error.getMessage(), "VARNA Error", - JOptionPane.ERROR_MESSAGE); - } - } - - /** - * Pops up an error Dialog displaying an exception in an human-readable way. - * - * @param error - * The exception to display within the Dialog - * @param c - * Parent component for the dialog box - */ - public static void errorDialogStatic(Exception error, Component c) { - if (c != null) { - JOptionPane.showMessageDialog(c, error.getMessage(), - "VARNA Critical Error", JOptionPane.ERROR_MESSAGE); - } else { - System.err.println("Error: " + error.getMessage()); - } - } - - /** - * Displays a warning message through a modal dialog if warnings are set to - * be displayed. - * - * @see #setShowWarnings(boolean) - * @param warning - * A message expliciting the warning - */ - public void emitWarning(String warning) { - if (_conf._showWarnings) - JOptionPane.showMessageDialog(this, warning, "VARNA Warning", - JOptionPane.WARNING_MESSAGE); - } - - public static void emitWarningStatic(Exception e, Component c) { - emitWarningStatic(e.getMessage(), c); - } - - public static void emitWarningStatic(String warning, Component c) { - if (c != null) { - JOptionPane.showMessageDialog(c, warning, "VARNA Warning", - JOptionPane.WARNING_MESSAGE); - } else { - System.err.println("Error: " + warning); - } - } - - /** - * Toggles modifications on and off - * - * @param modifiable - * Modification status - */ - public void setModifiable(boolean modifiable) { - _conf._modifiable = modifiable; - } - - /** - * Returns current modification status - * - * @return current modification status - */ - public boolean isModifiable() { - return _conf._modifiable; - } - - /** - * Resets the visual aspects (Zoom factor, shift) for the Panel. - */ - public void reset() { - this.setBorderSize(new Dimension(0, 0)); - this.setTranslation(new Point(0, (int) (-getTitleHeight() / 2.0))); - this.setZoom(VARNAConfig.DEFAULT_ZOOM); - this.setZoomIncrement(VARNAConfig.DEFAULT_AMOUNT); - } - - /** - * Returns the color used to draw non-standard bases - * - * @return The color used to draw non-standard bases - */ - public Color getNonStandardBasesColor() { - return _conf._specialBasesColor; - } - - /** - * Sets the color used to draw non-standard bases - * - * @param basesColor - * The color used to draw non-standard bases - */ - public void setNonStandardBasesColor(Color basesColor) { - _conf._specialBasesColor = basesColor; - } - - /** - * Checks if the current translation doesn't "kick" the whole RNA out of the - * panel, and corrects the situation if necessary. - */ - public void checkTranslation() { - // verification pour un zoom < 1 - if (this.getZoom() <= 1) { - // verification sortie gauche - if (this.getTranslation().x < -(int) ((this.getWidth() - this - .getInnerWidth()) / 2.0)) { - this.setTranslation(new Point(-(int) ((this.getWidth() - this - .getInnerWidth()) / 2.0), this.getTranslation().y)); - } - // verification sortie droite - if (this.getTranslation().x > (int) ((this.getWidth() - this - .getInnerWidth()) / 2.0)) { - this.setTranslation(new Point((int) ((this.getWidth() - this - .getInnerWidth()) / 2.0), this.getTranslation().y)); - } - // verification sortie bas - if (this.getTranslation().y > (int) ((this.getHeight() - - getTitleHeight() * 2 - this.getInnerHeight()) / 2.0)) { - this.setTranslation(new Point(this.getTranslation().x, - (int) ((this.getHeight() - getTitleHeight() * 2 - this - .getInnerHeight()) / 2.0))); - } - // verification sortie haut - if (this.getTranslation().y < -(int) ((this.getHeight() - this - .getInnerHeight()) / 2.0)) { - this.setTranslation(new Point( - this.getTranslation().x, - -(int) ((this.getHeight() - this.getInnerHeight()) / 2.0))); - } - } else { - // zoom > 1 - Rectangle r2 = getZoomedInTranslationBox(); - int LBoundX = r2.x; - int UBoundX = r2.x + r2.width; - int LBoundY = r2.y; - int UBoundY = r2.y + r2.height; - if (this.getTranslation().x < LBoundX) { - this.setTranslation(new Point(LBoundX, getTranslation().y)); - } else if (this.getTranslation().x > UBoundX) { - this.setTranslation(new Point(UBoundX, getTranslation().y)); - } - if (this.getTranslation().y < LBoundY) { - this.setTranslation(new Point(getTranslation().x, LBoundY)); - } else if (this.getTranslation().y > UBoundY) { - this.setTranslation(new Point(getTranslation().x, UBoundY)); - } - } - } - - public Rectangle getZoomedInTranslationBox() { - int LBoundX = -(int) ((this.getInnerWidth()) / 2.0); - int UBoundX = (int) ((this.getInnerWidth()) / 2.0); - int LBoundY = -(int) ((this.getInnerHeight()) / 2.0); - int UBoundY = (int) ((this.getInnerHeight()) / 2.0); - return new Rectangle(LBoundX, LBoundY, UBoundX - LBoundX, UBoundY - - LBoundY); - - } - - /** - * Returns the "real pixels" x-coordinate of the RNA. - * - * @return X-coordinate of the translation - */ - public int getLeftOffset() { - return _border.width - + ((this.getWidth() - 2 * _border.width) - this.getInnerWidth()) - / 2 + _translation.x; - } - - /** - * Returns the "real pixels" width of the drawing surface for our RNA. - * - * @return Width of the drawing surface for our RNA - */ - public int getInnerWidth() { - // Largeur du dessin - return (int) Math.round((this.getWidth() - 2 * _border.width) - * _conf._zoom); - } - - /** - * Returns the "real pixels" y-coordinate of the RNA. - * - * @return Y-coordinate of the translation - */ - public int getTopOffset() { - return _border.height - + ((this.getHeight() - 2 * _border.height) - this - .getInnerHeight()) / 2 + _translation.y; - } - - /** - * Returns the "real pixels" height of the drawing surface for our RNA. - * - * @return Height of the drawing surface for our RNA - */ - public int getInnerHeight() { - // Hauteur du dessin - return (int) Math.round((this.getHeight()) * _conf._zoom - 2 - * _border.height - getTitleHeight()); - } - - /** - * Checks if the current mode is the "comparison" mode - * - * @return True if comparison, false otherwise - */ - public boolean isComparisonMode() { - return _conf._comparisonMode; - } - - /** - * Rotates the RNA coordinates by a certain angle - * - * @param angleDegres - * Rotation angle, in degrees - */ - public void globalRotation(Double angleDegres) { - _RNA.globalRotation(angleDegres); - fireLayoutChanged(); - repaint(); - } - - /** - * Returns the index of the currently selected base, defaulting to the - * closest base to the last mouse-click. - * - * @return Index of the currently selected base - */ - public Integer getNearestBase() { - return _nearestBase; - } - - /** - * Sets the index of the currently selected base. - * - * @param base - * Index of the new selected base - */ - public void setNearestBase(Integer base) { - _nearestBase = base; - } - - /** - * Returns the color used to draw 'Gaps' bases in comparison mode - * - * @return Color used for 'Gaps' - */ - public Color getGapsBasesColor() { - return _conf._dashBasesColor; - } - - /** - * Sets the color to use for 'Gaps' bases in comparison mode - * - * @param c - * Color used for 'Gaps' - */ - public void setGapsBasesColor(Color c) { - _conf._dashBasesColor = c; - } - - @SuppressWarnings("unused") - private void imprimer() { - // PrintPanel canvas; - // canvas = new PrintPanel(); - PrintRequestAttributeSet attributes; - attributes = new HashPrintRequestAttributeSet(); - try { - PrinterJob job = PrinterJob.getPrinterJob(); - // job.setPrintable(this); - if (job.printDialog(attributes)) { - job.print(attributes); - } - } catch (PrinterException exception) { - errorDialog(exception); - } - } - - /** - * Checks whether errors are to be displayed - * - * @return Error display status - */ - public boolean isErrorsOn() { - return _conf._errorsOn; - } - - /** - * Sets whether errors are to be displayed - * - * @param on - * New error display status - */ - public void setErrorsOn(boolean on) { - _conf._errorsOn = on; - } - - /** - * Returns the view associated with user interactions - * - * @return A view associated with user interactions - */ - public VueUI getVARNAUI() { - return _UI; - } - - /** - * Toggles on/off using base inner color for drawing base-pairs - * - * @param on - * True for using base inner color for drawing base-pairs, false - * for classic mode - */ - public void setUseBaseColorsForBPs(boolean on) { - _conf._useBaseColorsForBPs = on; - } - - /** - * Returns true if current base color is used as inner color for drawing - * base-pairs - * - * @return True for using base inner color for drawing base-pairs, false for - * classic mode - */ - public boolean getUseBaseColorsForBPs() { - return _conf._useBaseColorsForBPs; - } - - /** - * Toggles on/off using a special color used for drawing "non-standard" - * bases - * - * @param on - * True for using a special color used for drawing "non-standard" - * bases, false for classic mode - */ - public void setColorNonStandardBases(boolean on) { - _conf._colorSpecialBases = on; - } - - /** - * Returns true if a special color is used as inner color for non-standard - * base - * - * @return True for using a special color used for drawing "non-standard" - * bases, false for classic mode - */ - public boolean getColorSpecialBases() { - return _conf._colorSpecialBases; - } - - /** - * Toggles on/off using a special color used for drawing "Gaps" bases in - * comparison mode - * - * @param on - * True for using a special color used for drawing "Gaps" bases - * in comparison mode, false for classic mode - */ - public void setColorGapsBases(boolean on) { - _conf._colorDashBases = on; - } - - /** - * Returns true if a special color is used for drawing "Gaps" bases in - * comparison mode - * - * @return True for using a special color used for drawing "Gaps" bases in - * comparison mode, false for classic mode - */ - public boolean getColorGapsBases() { - return _conf._colorDashBases; - } - - /** - * Toggles on/off displaying warnings - * - * @param on - * True to display warnings, false otherwise - */ - public void setShowWarnings(boolean on) { - _conf._showWarnings = on; - } - - /** - * Get current warning display status - * - * @return True to display warnings, false otherwise - */ - public boolean getShowWarnings() { - return _conf._showWarnings; - } - - /** - * Toggles on/off displaying non-canonical base-pairs - * - * @param on - * True to display NC base-pairs, false otherwise - */ - public void setShowNonCanonicalBP(boolean on) { - _conf._drawnNonCanonicalBP = on; - } - - /** - * Return the current display status for non-canonical base-pairs - * - * @return True if NC base-pairs are displayed, false otherwise - */ - public boolean getShowNonCanonicalBP() { - return _conf._drawnNonCanonicalBP; - } - - /** - * Toggles on/off displaying "non-planar" base-pairs - * - * @param on - * True to display "non-planar" base-pairs, false otherwise - */ - public void setShowNonPlanarBP(boolean on) { - _conf._drawnNonPlanarBP = on; - } - - /** - * Return the current display status for non-planar base-pairs - * - * @return True if non-planars base-pairs are displayed, false otherwise - */ - public boolean getShowNonPlanarBP() { - return _conf._drawnNonPlanarBP; - } - - /** - * Sets the base-pair representation style - * - * @param st - * The new base-pair style - */ - public void setBPStyle(VARNAConfig.BP_STYLE st) { - _conf._mainBPStyle = st; - } - - /** - * Returns the base-pair representation style - * - * @return The current base-pair style - */ - public VARNAConfig.BP_STYLE getBPStyle() { - return _conf._mainBPStyle; - } - - /** - * Returns the current VARNA Panel configuration. The returned instance - * should not be modified directly, but rather through the getters/setters - * from the VARNAPanel class. - * - * @return Current configuration - */ - public VARNAConfig getConfig() { - return _conf; - } - - /** - * Sets the background color - * - * @param c - * New background color - */ - public void setBackground(Color c) { - if (_conf != null) { - if (c != null) { - _conf._backgroundColor = c; - _conf._drawBackground = (!c - .equals(VARNAConfig.DEFAULT_BACKGROUND_COLOR)); - } else { - _conf._backgroundColor = VARNAConfig.DEFAULT_BACKGROUND_COLOR; - _conf._drawBackground = false; - } - } - - } - - /** - * Starts highlighting the selected base. - */ - public void highlightSelectedBase(ModeleBase m) { - ArrayList v = new ArrayList(); - int sel = m.getIndex(); - if (sel != -1) { - v.add(sel); - } - setSelection(v); - } - - /** - * Starts highlighting the selected base. - */ - public void highlightSelectedStem(ModeleBase m) { - ArrayList v = new ArrayList(); - int sel = m.getIndex(); - if (sel != -1) { - ArrayList r = _RNA.findStem(sel); - v.addAll(r); - } - setSelection(v); - } - - public BaseList getSelection() { - return _selectedBases; - } - - public ArrayList getSelectionIndices() { - return _selectedBases.getIndices(); - } - - public void setSelection(ArrayList indices) { - setSelection(_RNA.getBasesAt(indices)); - } - - public void setSelection(Collection mbs) { - BaseList bck = new BaseList(_selectedBases); - _selectedBases.clear(); - _selectedBases.addBases(mbs); - _blink.setActive(true); - fireSelectionChanged(bck, _selectedBases); - } - - public ArrayList getBasesInRectangleDiff(Rectangle recIn, - Rectangle recOut) { - ArrayList result = new ArrayList(); - for (int i = 0; i < _realCoords.length; i++) { - if (recIn.contains(_realCoords[i]) - ^ recOut.contains(_realCoords[i])) - result.add(i); - } - return result; - } - - public ArrayList getBasesInRectangle(Rectangle rec) { - ArrayList result = new ArrayList(); - for (int i = 0; i < _realCoords.length; i++) { - if (rec.contains(_realCoords[i])) - result.add(i); - } - return result; - } - - public void setSelectionRectangle(Rectangle rec) { - ArrayList result = new ArrayList(); - if (_selectionRectangle != null) { - result = getBasesInRectangleDiff(_selectionRectangle, rec); - } else { - result = getBasesInRectangle(rec); - } - _selectionRectangle = new Rectangle(rec); - toggleSelection(result); - repaint(); - } - - public void removeSelectionRectangle() { - _selectionRectangle = null; - } - - public void addToSelection(Collection indices) { - for (int i : indices) { - addToSelection(i); - } - } - - public void addToSelection(int i) { - BaseList bck = new BaseList(_selectedBases); - ModeleBase mb = _RNA.getBaseAt(i); - _selectedBases.addBase(mb); - _blink.setActive(true); - fireSelectionChanged(bck, _selectedBases); - } - - public void removeFromSelection(int i) { - BaseList bck = new BaseList(_selectedBases); - ModeleBase mb = _RNA.getBaseAt(i); - _selectedBases.removeBase(mb); - if (_selectedBases.size() == 0) { - _blink.setActive(false); - } else { - _blink.setActive(true); - } - fireSelectionChanged(bck, _selectedBases); - } - - public boolean isInSelection(int i) { - return _selectedBases.contains(_RNA.getBaseAt(i)); - } - - public void toggleSelection(int i) { - if (isInSelection(i)) - removeFromSelection(i); - else - addToSelection(i); - } - - public void toggleSelection(Collection indices) { - for (int i : indices) { - toggleSelection(i); - } - } - - /** - * Stops highlighting bases - */ - public void clearSelection() { - BaseList bck = new BaseList(_selectedBases); - _selectedBases.clear(); - _blink.setActive(false); - repaint(); - fireSelectionChanged(bck, _selectedBases); - } - - public void saveSelection() { - _backupSelection.clear(); - _backupSelection.addAll(_selectedBases.getBases()); - } - - public void restoreSelection() { - setSelection(_backupSelection); - } - - /** - * Stops highlighting bases - */ - public void resetAnnotationHighlight() { - _highlightAnnotation = false; - repaint(); - } - - /** - * Toggles on/off a rectangular outline of the bounding box. - * - * @param on - * True to draw the bounding box, false otherwise - */ - public void drawBBox(boolean on) { - _drawBBox = on; - } - - /** - * Toggles on/off a rectangular outline of the border. - * - * @param on - * True to draw the bounding box, false otherwise - */ - public void drawBorder(boolean on) { - _drawBorder = on; - } - - public void setBaseInnerColor(Color c) { - _RNA.setBaseInnerColor(c); - } - - public void setBaseNumbersColor(Color c) { - _RNA.setBaseNumbersColor(c); - } - - public void setBaseNameColor(Color c) { - _RNA.setBaseNameColor(c); - } - - public void setBaseOutlineColor(Color c) { - _RNA.setBaseOutlineColor(c); - } - - public ArrayList getListeAnnotations() { - return _RNA.getAnnotations(); - } - - public void resetListeAnnotations() { - _RNA.clearAnnotations(); - repaint(); - } - - public void addAnnotation(TextAnnotation textAnnotation) { - _RNA.addAnnotation(textAnnotation); - repaint(); - } - - public boolean removeAnnotation(TextAnnotation textAnnotation) { - boolean done = _RNA.removeAnnotation(textAnnotation); - repaint(); - return done; - } - - public TextAnnotation get_selectedAnnotation() { - return _selectedAnnotation; - } - - public void set_selectedAnnotation(TextAnnotation annotation) { - _selectedAnnotation = annotation; - } - - public void removeSelectedAnnotation() { - _highlightAnnotation = false; - _selectedAnnotation = null; - } - - public void highlightSelectedAnnotation() { - _highlightAnnotation = true; - } - - public boolean getFlatExteriorLoop() { - return _conf._flatExteriorLoop; - } - - public void setFlatExteriorLoop(boolean on) { - _conf._flatExteriorLoop = on; - } - - public void setLastSelectedPosition(Point2D.Double p) { - _lastSelectedCoord.x = p.x; - _lastSelectedCoord.y = p.y; - } - - public Point2D.Double getLastSelectedPosition() { - return _lastSelectedCoord; - } - - public void setSequence(String s) { - _RNA.setSequence(s); - repaint(); - } - - public void setColorMapVisible(boolean b) { - _conf._drawColorMap = b; - repaint(); - } - - public boolean getColorMapVisible() { - return _conf._drawColorMap; - } - - public void removeColorMap() { - _conf._drawColorMap = false; - repaint(); - } - - public void saveSession(String path) { - /* - * FileOutputStream fos = null; ObjectOutputStream out = null; try { fos - * = new FileOutputStream(path); out = new ObjectOutputStream(fos); - * out.writeObject(new FullBackup(_conf, _RNA, _conf._title)); - * out.close(); } catch (Exception ex) { ex.printStackTrace(); } - */ - toXML(path); - } - - public FullBackup loadSession(String path) throws ExceptionLoadingFailed { - return loadSession(new File(path)); +public class VARNAPanel extends JPanel implements PropertyChangeListener +{ + + /** + * SwingJS uses a PropertyChangeEvent to signal that a pseudo-modal dialog has + * been closed. + * + * @param event + */ + @Override + public void propertyChange(PropertyChangeEvent event) + { + Object val = event.getNewValue(); + switch (event.getPropertyName()) + { + case "value": + _UI.onDialogReturn(val == null ? JOptionPane.CLOSED_OPTION + : ((Integer) val).intValue()); + return; + case "SelectedFile": + case "SelectedColor": + case "inputValue": + _UI.onDialogReturn(val); + break; + } + } + + private static final long serialVersionUID = 8194421570308956001L; + + private RNA _RNA = new RNA(); + + private boolean _debug = false; + + private VARNAConfig _conf = new VARNAConfig(); + + private ArrayList _VARNAListeners = new ArrayList(); + + private ArrayList _selectionListeners = new ArrayList(); + + private ArrayList _RNAListeners = new ArrayList(); + + private ArrayList _basesListeners = new ArrayList(); + + UndoManager _manager; + + // private boolean _foldMode = true; + + private Point2D.Double[] _realCoords = new Point2D.Double[0]; + + private Point2D.Double[] _realCenters = new Point2D.Double[0]; + + private double _scaleFactor = 1.0; + + private Point2D.Double _offsetPanel = new Point2D.Double(); + + private Point2D.Double _offsetRNA = new Point2D.Double(); + + private double _offX; + + private double _offY; + + private ControleurBlinkingThread _blink; + + private BaseList _selectedBases = new BaseList("selection"); + + private ArrayList _backupSelection = new ArrayList(); + + private Integer _nearestBase = null; + + private Point2D.Double _lastSelectedCoord = new Point2D.Double(0.0, 0.0); + + private Point2D.Double _linkOrigin = null; + + private Point2D.Double _linkDestination = null; + + private Rectangle _selectionRectangle = null; + + private boolean _highlightAnnotation = false; + + private int _titleHeight; + + // BH SwingJS issue here is that we are using _border already. Hmm. + private Dimension _border = new Dimension(0, 0); + + private boolean _drawBBox = false; + + private boolean _drawBorder = false; + + // private Point _positionRelativeSouris; + private Point _translation; + + private boolean _horsCadre; + + private boolean _premierAffichage; + + private ControleurInterpolator _interpolator; + + /** + * If comparison mode is TRUE (ON), then the application will be used to + * display a super-structure resulting on an RNA secondary structure + * comparison. Else, the application is used by default. + */ + + private VueMenu _popup = new VueMenu(this); + + private VueUI _UI = new VueUI(this); + + private TextAnnotation _selectedAnnotation; + + /** + * Creates an RNA 2D panel with initially displays the empty structure. + * + * @throws ExceptionNonEqualLength + * + */ + public VARNAPanel() + { + init(); + drawRNA(); + } + + /** + * Creates an RNA 2D panel, and creates and displays an RNA coupled with its + * secondary structure formatted as a well-balanced parenthesis with dots word + * (DBN format). + * + * @param seq + * The raw nucleotide sequence + * @param str + * The secondary structure in DBN format + * @throws ExceptionNonEqualLength + */ + + public VARNAPanel(String seq, String str) throws ExceptionNonEqualLength + { + this(seq, str, RNA.DRAW_MODE_RADIATE); + } + + /** + * Creates a VARNAPanel instance, and creates and displays an RNA coupled with + * its secondary structure formatted as a well-balanced parenthesis with dots + * word (DBN format). Allows the user to choose the drawing algorithm to be + * used. + * + * @param seq + * The raw nucleotide sequence + * @param str + * The secondary structure in DBN format + * @param drawMode + * The drawing mode + * @throws ExceptionNonEqualLength + * @see RNA#DRAW_MODE_RADIATE + * @see RNA#DRAW_MODE_CIRCULAR + * @see RNA#DRAW_MODE_NAVIEW + */ + public VARNAPanel(String seq, String str, int drawMode) + throws ExceptionNonEqualLength + { + this(seq, str, drawMode, ""); + } + + public VARNAPanel(Reader r) + throws ExceptionNonEqualLength, ExceptionFileFormatOrSyntax + { + this(r, RNA.DRAW_MODE_RADIATE); + } + + public VARNAPanel(Reader r, int drawMode) + throws ExceptionNonEqualLength, ExceptionFileFormatOrSyntax + { + this(r, drawMode, ""); + } + + public VARNAPanel(Reader r, int drawMode, String title) + throws ExceptionNonEqualLength, ExceptionFileFormatOrSyntax + { + init(); + drawRNA(r, drawMode); + setTitle(title); + } + + public void setOriginLink(Point2D.Double p) + { + _linkOrigin = (p); + } + + public void setDestinationLink(Point2D.Double p) + { + _linkDestination = (p); + } + + public void removeLink() + { + _linkOrigin = null; + _linkDestination = null; + } + + /** + * Creates a VARNAPanel instance, and displays an RNA. + * + * @param r + * The RNA to be displayed within this panel + */ + + public VARNAPanel(RNA r) + { + showRNA(r); + init(); + } + + /** + * Creates a VARNAPanel instance, and creates and displays an RNA coupled with + * its secondary structure formatted as a well-balanced parenthesis with dots + * word (DBN format). Allows the user to choose the drawing algorithm to be + * used. Additionally, sets the panel's title. + * + * @param seq + * The raw nucleotide sequence + * @param str + * The secondary structure in DBN format + * @param drawMode + * The drawing mode + * @param title + * The panel title + * @throws ExceptionNonEqualLength + * @see RNA#DRAW_MODE_CIRCULAR + * @see RNA#DRAW_MODE_RADIATE + * @see RNA#DRAW_MODE_NAVIEW + */ + + public VARNAPanel(String seq, String str, int drawMode, String title) + throws ExceptionNonEqualLength + { + drawRNA(seq, str, drawMode); + init(); + setTitle(title); + // VARNASecDraw._vp = this; + } + + public VARNAPanel(String seq1, String struct1, String seq2, + String struct2, int drawMode, String title) + { + _conf._comparisonMode = true; + drawRNA(seq1, struct1, seq2, struct2, drawMode); + init(); + setTitle(title); + } + + private void init() + { + _popup.buildPopupMenu(); + this.add(_popup); + setBackground(VARNAConfig.DEFAULT_BACKGROUND_COLOR); + _manager = new UndoManager(); + _manager.setLimit(10000); + _UI.addUndoableEditListener(_manager); + + _blink = new ControleurBlinkingThread(this, + ControleurBlinkingThread.DEFAULT_FREQUENCY, 0, 1.0, 0.0, 0.2); + _blink.start(); + + _premierAffichage = true; + _translation = new Point(0, 0); + + _horsCadre = false; + this.setFont(_conf._fontBasesGeneral); + + // ajout des controleurs au VARNAPanel + ControleurClicMovement controleurClicMovement = new ControleurClicMovement( + this); + this.addMouseListener(controleurClicMovement); + this.addMouseMotionListener(controleurClicMovement); + this.addMouseWheelListener(new ControleurMolette(this)); + + ControleurDraggedMolette ctrlDraggedMolette = new ControleurDraggedMolette( + this); + this.addMouseMotionListener(ctrlDraggedMolette); + this.addMouseListener(ctrlDraggedMolette); + + ControleurVARNAPanelKeys ctrlKey = new ControleurVARNAPanelKeys(this); + this.addKeyListener(ctrlKey); + this.addFocusListener(ctrlKey); + + _interpolator = new ControleurInterpolator(this); + /** + * + * BH SwingJS do not start this thread + * + * @j2sNative + */ + { + _interpolator.start(); + } + + } + + public void undo() + { + if (_manager.canUndo()) + _manager.undo(); + } + + public void redo() + { + if (_manager.canRedo()) + _manager.redo(); + } + + /** + * Sets the new style of the title font. + * + * @param newStyle + * An int that describes the new font style ("PLAIN","BOLD", + * "BOLDITALIC", or "ITALIC") + */ + public void setTitleFontStyle(int newStyle) + { + _conf._titleFont = _conf._titleFont.deriveFont(newStyle); + updateTitleHeight(); + } + + /** + * Sets the new size of the title font. + * + * @param newSize + * The new size of the title font + */ + public void setTitleFontSize(float newSize) + { + // System.err.println("Applying title size "+newSize); + _conf._titleFont = _conf._titleFont.deriveFont(newSize); + updateTitleHeight(); + } + + /** + * Sets the new font family to be used for the title. Available fonts are + * system-specific, yet it seems that "Arial", "Dialog", and "MonoSpaced" are + * almost always available. + * + * @param newFamily + * New font family used for the title + */ + public void setTitleFontFamily(String newFamily) + { + _conf._titleFont = new Font(newFamily, _conf._titleFont.getStyle(), + _conf._titleFont.getSize()); + updateTitleHeight(); + } + + /** + * Sets the color to be used for the title. + * + * @param newColor + * A color used to draw the title + */ + public void setTitleFontColor(Color newColor) + { + _conf._titleColor = newColor; + updateTitleHeight(); + } + + /** + * Sets the font size for displaying bases + * + * @param size + * Font size for base caption + */ + + public void setBaseFontSize(Float size) + { + _conf._fontBasesGeneral = _conf._fontBasesGeneral.deriveFont(size); + } + + /** + * Sets the font size for displaying base numbers + * + * @param size + * Font size for base numbers + */ + + public void setNumbersFontSize(Float size) + { + _conf._numbersFont = _conf._numbersFont.deriveFont(size); + } + + /** + * Sets the font style for displaying bases + * + * @param style + * An int that describes the new font style ("PLAIN","BOLD", + * "BOLDITALIC", or "ITALIC") + */ + + public void setBaseFontStyle(int style) + { + _conf._fontBasesGeneral = _conf._fontBasesGeneral.deriveFont(style); + } + + private void updateTitleHeight() + { + if (!getTitle().equals("")) + { + _titleHeight = (int) (_conf._titleFont.getSize() * 1.5); + } + else + { + _titleHeight = 0; + } + if (Math.abs(this.getZoom() - 1) < .02) + { + _translation.y = (int) (-getTitleHeight() / 2.0); + } + } + + /** + * Sets the panel's title, giving a short description of the RNA secondary + * structure. + * + * @param title + * The new title + */ + public void setTitle(String title) + { + _RNA.setName(title); + updateTitleHeight(); + } + + /** + * Sets the distance between consecutive base numbers. Please notice that : + *
      + *
    • The first and last base are always numbered
    • + *
    • The numbering is based on the base numbers, not on the indices. So base + * numbers may appear more frequently than expected if bases are skipped
    • + *
    • The periodicity is measured starting from 0. This means that for a + * period of 10 and bases numbered from 1 to 52, the base numbers + * [1,10,20,30,40,50,52] will be drawn.
    • + *
    + * + * @param n + * New numbering period + */ + public void setNumPeriod(int n) + { + _conf._numPeriod = n; + } + + /** + * Returns the current numbering period. Please notice that : + *
      + *
    • The first and last base are always numbered
    • + *
    • The numbering is based on the base numbers, not on the indices. So base + * numbers may appear more frequently than expected if bases are skipped
    • + *
    • The periodicity is measured starting from 0. This means that for a + * period of 10 and bases numbered from 1 to 52, the base numbers + * [1,10,20,30,40,50,52] will be drawn.
    • + *
    + * + * @return Current numbering period + */ + public int getNumPeriod() + { + return _conf._numPeriod; + } + + private void setScaleFactor(double d) + { + _scaleFactor = d; + } + + private double getScaleFactor() + { + return _scaleFactor; + } + + private void setAutoFit(boolean fit) + { + _conf._autoFit = fit; + repaint(); + } + + public void lockScrolling() + { + setAutoFit(false); + setAutoCenter(false); + } + + public void unlockScrolling() + { + setAutoFit(true); + setAutoCenter(true); + } + + private void drawStringOutline(VueVARNAGraphics g2D, String res, double x, + double y, double margin) + { + Dimension d = g2D.getStringDimension(res); + x -= (double) d.width / 2.0; + y += (double) d.height / 2.0; + g2D.setColor(Color.GRAY); + g2D.setSelectionStroke(); + g2D.drawRect((x - margin), (y - d.height - margin), + (d.width + 2.0 * margin), (d.height + 2.0 * margin)); + } + + private void drawSymbol(VueVARNAGraphics g2D, double posx, double posy, + double normx, double normy, double radius, boolean isCIS, + ModeleBP.Edge e) + { + Color bck = g2D.getColor(); + switch (e) + { + case WC: + if (isCIS) + { + g2D.setColor(bck); + g2D.fillCircle((posx - (radius) / 2.0), (posy - (radius) / 2.0), + radius); + g2D.drawCircle((posx - (radius) / 2.0), (posy - (radius) / 2.0), + radius); + } + else + { + g2D.setColor(Color.white); + g2D.fillCircle(posx - (radius) / 2.0, (posy - (radius) / 2.0), + (radius)); + g2D.setColor(bck); + g2D.drawCircle((posx - (radius) / 2.0), (posy - (radius) / 2.0), + (radius)); + } + break; + case HOOGSTEEN: + { + GeneralPath p2 = new GeneralPath(); + radius /= 1.05; + p2.moveTo( + (float) (posx - radius * normx / 2.0 - radius * normy / 2.0), + (float) (posy - radius * normy / 2.0 + radius * normx / 2.0)); + p2.lineTo( + (float) (posx + radius * normx / 2.0 - radius * normy / 2.0), + (float) (posy + radius * normy / 2.0 + radius * normx / 2.0)); + p2.lineTo( + (float) (posx + radius * normx / 2.0 + radius * normy / 2.0), + (float) (posy + radius * normy / 2.0 - radius * normx / 2.0)); + p2.lineTo( + (float) (posx - radius * normx / 2.0 + radius * normy / 2.0), + (float) (posy - radius * normy / 2.0 - radius * normx / 2.0)); + p2.closePath(); + + if (isCIS) + { + g2D.setColor(bck); + g2D.fill(p2); + g2D.draw(p2); + } + else + { + g2D.setColor(Color.white); + g2D.fill(p2); + g2D.setColor(bck); + g2D.draw(p2); + } + } + break; + case SUGAR: + { + double ix = radius * normx / 2.0; + double iy = radius * normy / 2.0; + double jx = radius * normy / 2.0; + double jy = -radius * normx / 2.0; + + GeneralPath p2 = new GeneralPath(); + p2.moveTo((float) (posx - ix + jx), (float) (posy - iy + jy)); + p2.lineTo((float) (posx + ix + jx), (float) (posy + iy + jy)); + p2.lineTo((float) (posx - jx), (float) (posy - jy)); + p2.closePath(); + + if (isCIS) + { + g2D.setColor(bck); + g2D.fill(p2); + g2D.draw(p2); + } + else + { + g2D.setColor(Color.white); + g2D.fill(p2); + g2D.setColor(bck); + g2D.draw(p2); + } + } + break; + } + g2D.setColor(bck); + } + + private void drawBasePairArc(VueVARNAGraphics g2D, int i, int j, + Point2D.Double orig, Point2D.Double dest, double scaleFactor, + ModeleBP style, double newRadius) + { + double distance, coef; + if (j - i == 1) + coef = getBPHeightIncrement() * 1.75; + else + coef = getBPHeightIncrement(); + distance = dest.x - orig.x; + switch (_conf._mainBPStyle) + { + case LW: + { + double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) + / 5.0) * scaleFactor; + if (style.isCanonical()) + { + if (style.isCanonicalGC()) + { + if ((orig.x != dest.x) || (orig.y != dest.y)) + { + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance - scaleFactor * _RNA.BASE_RADIUS / 3.0), + (distance * coef + - scaleFactor * _RNA.BASE_RADIUS / 3.0), + 0, 180); + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance + scaleFactor * _RNA.BASE_RADIUS / 3.0), + (distance * coef + + scaleFactor * _RNA.BASE_RADIUS / 3.0), + 0, 180); + } + } + else if (style.isCanonicalAU()) + { + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, (distance), + (distance * coef), 0, 180); + } + else if (style.isWobbleUG()) + { + Point2D.Double midtop = new Point2D.Double((dest.x + orig.x) / 2., + dest.y - distance * coef / 2. + - scaleFactor * _RNA.BASE_RADIUS / 2.0); + g2D.drawArc(midtop.x, + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, (distance), + (distance * coef), 0, 180); + drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, false, + ModeleBP.Edge.WC); + } + else + { + Point2D.Double midtop = new Point2D.Double((dest.x + orig.x) / 2., + dest.y - distance * coef / 2. + - scaleFactor * _RNA.BASE_RADIUS / 2.0); + g2D.drawArc(midtop.x, + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, (distance), + (distance * coef), 0, 180); + drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, + style.isCIS(), style.getEdgePartner5()); + } + } + else + { + ModeleBP.Edge p1 = style.getEdgePartner5(); + ModeleBP.Edge p2 = style.getEdgePartner3(); + Point2D.Double midtop = new Point2D.Double((dest.x + orig.x) / 2., + dest.y - distance * coef / 2. + - scaleFactor * _RNA.BASE_RADIUS / 2.0); + g2D.drawArc(midtop.x, dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance), (distance * coef), 0, 180); + if (p1 == p2) + { + drawSymbol(g2D, midtop.x, midtop.y, 1., 0., radiusCircle, false, + style.getEdgePartner5()); + } + else + { + drawSymbol(g2D, midtop.x - scaleFactor * _RNA.BASE_RADIUS, + midtop.y, 1., 0., radiusCircle, style.isCIS(), p1); + drawSymbol(g2D, midtop.x + scaleFactor * _RNA.BASE_RADIUS, + midtop.y, -1., 0., radiusCircle, style.isCIS(), p2); + } + } + } + break; + case LW_ALT: + { + double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) + / 5.0) * scaleFactor; + double distFromBaseCenter = DISTANCE_FACT * scaleFactor; + orig = new Point2D.Double(orig.x, + orig.y - (distFromBaseCenter + newRadius)); + dest = new Point2D.Double(dest.x, + dest.y - (distFromBaseCenter + newRadius)); + if (style.isCanonical()) + { + if (style.isCanonicalGC()) + { + if ((orig.x != dest.x) || (orig.y != dest.y)) + { + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance - scaleFactor * _RNA.BASE_RADIUS / 3.0), + (distance * coef + - scaleFactor * _RNA.BASE_RADIUS / 3.0), + 0, 180); + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance + scaleFactor * _RNA.BASE_RADIUS / 3.0), + (distance * coef + + scaleFactor * _RNA.BASE_RADIUS / 3.0), + 0, 180); + } + } + else if (style.isCanonicalAU()) + { + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, (distance), + (distance * coef), 0, 180); + } + } + else + { + ModeleBP.Edge p1 = style.getEdgePartner5(); + ModeleBP.Edge p2 = style.getEdgePartner3(); + Point2D.Double midtop = new Point2D.Double((dest.x + orig.x) / 2., + dest.y - distance * coef / 2. + - scaleFactor * _RNA.BASE_RADIUS / 2.0); + g2D.drawArc(midtop.x, dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, + (distance), (distance * coef), 0, 180); + drawSymbol(g2D, orig.x, orig.y - radiusCircle * .95, 1., 0., + radiusCircle, style.isCIS(), p1); + drawSymbol(g2D, dest.x, dest.y - radiusCircle * .95, -1., 0., + radiusCircle, style.isCIS(), p2); + } + } + break; + default: + g2D.drawArc((dest.x + orig.x) / 2., + dest.y - scaleFactor * _RNA.BASE_RADIUS / 2.0, (distance), + (distance * coef), 0, 180); + break; + } + + } + + public static double DISTANCE_FACT = 2.; + + private void drawBasePair(VueVARNAGraphics g2D, Point2D.Double orig, + Point2D.Double dest, ModeleBP style, double newRadius, + double scaleFactor) + { + + double dx = dest.x - orig.x; + double dy = dest.y - orig.y; + double dist = Math.sqrt((dest.x - orig.x) * (dest.x - orig.x) + + (dest.y - orig.y) * (dest.y - orig.y)); + dx /= dist; + dy /= dist; + double nx = -dy; + double ny = dx; + orig = new Point2D.Double(orig.x + newRadius * dx, + orig.y + newRadius * dy); + dest = new Point2D.Double(dest.x - newRadius * dx, + dest.y - newRadius * dy); + switch (_conf._mainBPStyle) + { + case LW: + { + double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) + / 5.0) * scaleFactor; + if (style.isCanonical()) + { + if (style.isCanonicalGC()) + { + if ((orig.x != dest.x) || (orig.y != dest.y)) + { + nx *= scaleFactor * _RNA.BASE_RADIUS / 4.0; + ny *= scaleFactor * _RNA.BASE_RADIUS / 4.0; + g2D.drawLine((orig.x + nx), (orig.y + ny), (dest.x + nx), + (dest.y + ny)); + g2D.drawLine((orig.x - nx), (orig.y - ny), (dest.x - nx), + (dest.y - ny)); + } + } + else if (style.isCanonicalAU()) + { + g2D.drawLine(orig.x, orig.y, dest.x, dest.y); + } + else if (style.isWobbleUG()) + { + double cx = (dest.x + orig.x) / 2.0; + double cy = (dest.y + orig.y) / 2.0; + g2D.drawLine(orig.x, orig.y, dest.x, dest.y); + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, false, + ModeleBP.Edge.WC); + } + else + { + double cx = (dest.x + orig.x) / 2.0; + double cy = (dest.y + orig.y) / 2.0; + g2D.drawLine(orig.x, orig.y, dest.x, dest.y); + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, style.isCIS(), + style.getEdgePartner5()); + } + } + else + { + ModeleBP.Edge p1 = style.getEdgePartner5(); + ModeleBP.Edge p2 = style.getEdgePartner3(); + double cx = (dest.x + orig.x) / 2.0; + double cy = (dest.y + orig.y) / 2.0; + g2D.drawLine(orig.x, orig.y, dest.x, dest.y); + if (p1 == p2) + { + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, style.isCIS(), p1); + + } + else + { + double vdx = (dest.x - orig.x); + double vdy = (dest.y - orig.y); + vdx /= 6.0; + vdy /= 6.0; + drawSymbol(g2D, cx + vdx, cy + vdy, -nx, -ny, radiusCircle, + style.isCIS(), p2); + drawSymbol(g2D, cx - vdx, cy - vdy, nx, ny, radiusCircle, + style.isCIS(), p1); + } + } + } + break; + case LW_ALT: + { + double radiusCircle = ((RNA.BASE_PAIR_DISTANCE - _RNA.BASE_RADIUS) + / 5.0) * scaleFactor; + double distFromBaseCenter = DISTANCE_FACT * scaleFactor; + Point2D.Double norig = new Point2D.Double( + orig.x + (distFromBaseCenter + .5 * newRadius) * dx, + orig.y + (distFromBaseCenter + .5 * newRadius) * dy); + Point2D.Double ndest = new Point2D.Double( + dest.x - (distFromBaseCenter + .5 * newRadius) * dx, + dest.y - (distFromBaseCenter + .5 * newRadius) * dy); + if (style.isCanonical()) + { + if (style.isCanonicalGC()) + { + if ((norig.x != ndest.x) || (norig.y != ndest.y)) + { + nx *= scaleFactor * _RNA.BASE_RADIUS / 4.0; + ny *= scaleFactor * _RNA.BASE_RADIUS / 4.0; + g2D.drawLine((norig.x + nx), (norig.y + ny), (ndest.x + nx), + (ndest.y + ny)); + g2D.drawLine((norig.x - nx), (norig.y - ny), (ndest.x - nx), + (ndest.y - ny)); + } + } + else if (style.isCanonicalAU()) + { + g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); + } + else if (style.isWobbleUG()) + { + double cx = (ndest.x + norig.x) / 2.0; + double cy = (ndest.y + norig.y) / 2.0; + g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, false, + ModeleBP.Edge.WC); + } + else + { + double cx = (ndest.x + norig.x) / 2.0; + double cy = (ndest.y + norig.y) / 2.0; + g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, style.isCIS(), + style.getEdgePartner5()); + } + } + else + { + ModeleBP.Edge p1 = style.getEdgePartner5(); + ModeleBP.Edge p2 = style.getEdgePartner3(); + double cx = (ndest.x + norig.x) / 2.0; + double cy = (ndest.y + norig.y) / 2.0; + g2D.drawLine(norig.x, norig.y, ndest.x, ndest.y); + if (p1 == p2) + { + drawSymbol(g2D, cx, cy, nx, ny, radiusCircle, style.isCIS(), p1); + + } + else + { + double fac = .4; + drawSymbol(g2D, ndest.x - fac * radiusCircle * dx, + ndest.y - fac * radiusCircle * dy, -nx, -ny, radiusCircle, + style.isCIS(), p2); + drawSymbol(g2D, norig.x + fac * radiusCircle * dx, + norig.y + fac * radiusCircle * dy, nx, ny, radiusCircle, + style.isCIS(), p1); + } + } + } + break; + case SIMPLE: + g2D.drawLine(orig.x, orig.y, dest.x, dest.y); + break; + case RNAVIZ: + double xcenter = (orig.x + dest.x) / 2.0; + double ycenter = (orig.y + dest.y) / 2.0; + double radius = Math.max(4.0 * scaleFactor, 1.0); + g2D.fillCircle((xcenter - radius), (ycenter - radius), + (2.0 * radius)); + break; + case NONE: + break; + } + } + + private Color getHighlightedVersion(Color c1, Color c2) + { + int r1 = c1.getRed(); + int g1 = c1.getGreen(); + int b1 = c1.getBlue(); + int r2 = c2.getRed(); + int g2 = c2.getGreen(); + int b2 = c2.getBlue(); + double val = _blink.getVal(); + int nr = Math.max(0, + Math.min((int) ((r1 * val + r2 * (1.0 - val))), 255)); + int ng = Math.max(0, + Math.min((int) ((g1 * val + g2 * (1.0 - val))), 255)); + int nb = Math.max(0, + Math.min((int) ((b1 * val + b2 * (1.0 - val))), 255)); + return new Color(nr, ng, nb); + } + + private Color highlightFilter(int index, Color initialColor, Color c1, + Color c2, boolean localView) + { + if (_selectedBases.contains(_RNA.getBaseAt(index)) && localView) + { + return getHighlightedVersion(c1, c2); + } + else + return initialColor; + } + + public static Point2D.Double computeExcentricUnitVector(int i, + Point2D.Double[] points, Point2D.Double[] centers) + { + double dist = points[i].distance(centers[i]); + Point2D.Double byCenter = new Point2D.Double( + (points[i].x - centers[i].x) / dist, + (points[i].y - centers[i].y) / dist); + if ((i > 0) && (i < points.length - 1)) + { + Point2D.Double p0 = points[i - 1]; + Point2D.Double p1 = points[i]; + Point2D.Double p2 = points[i + 1]; + double dist1 = p2.distance(p1); + Point2D.Double v1 = new Point2D.Double((p2.x - p1.x) / dist1, + (p2.y - p1.y) / dist1); + Point2D.Double vn1 = new Point2D.Double(v1.y, -v1.x); + double dist2 = p1.distance(p0); + Point2D.Double v2 = new Point2D.Double((p1.x - p0.x) / dist2, + (p1.y - p0.y) / dist2); + Point2D.Double vn2 = new Point2D.Double(v2.y, -v2.x); + Point2D.Double vn = new Point2D.Double((vn1.x + vn2.x) / 2.0, + (vn1.y + vn2.y) / 2.0); + double D = vn.distance(new Point2D.Double(0.0, 0.0)); + vn.x /= D; + vn.y /= D; + if (byCenter.x * vn.x + byCenter.y * vn.y < 0) + { + vn.x = -vn.x; + vn.y = -vn.y; + } + return vn; + } + else if (((i == 0) || (i == points.length - 1)) && (points.length > 1)) + { + int a = (i == 0) ? 0 : points.length - 1; + int b = (i == 0) ? 1 : points.length - 2; + double D = points[a].distance(points[b]); + return new Point2D.Double((points[a].x - points[b].x) / D, + (points[a].y - points[b].y) / D); + } + else + { + return byCenter; + } + } + + private void drawBase(VueVARNAGraphics g2D, int i, + Point2D.Double[] points, Point2D.Double[] centers, + double newRadius, double _scaleFactor, boolean localView) + { + Point2D.Double p = points[i]; + ModeleBase mb = _RNA.get_listeBases().get(i); + g2D.setFont(_conf._fontBasesGeneral); + Color baseInnerColor = highlightFilter(i, + _RNA.getBaseInnerColor(i, _conf), Color.white, + _RNA.getBaseInnerColor(i, _conf), localView); + Color baseOuterColor = highlightFilter(i, + _RNA.getBaseOuterColor(i, _conf), + _RNA.getBaseOuterColor(i, _conf), Color.white, localView); + Color baseNameColor = highlightFilter(i, + _RNA.getBaseNameColor(i, _conf), + _RNA.getBaseNameColor(i, _conf), Color.white, localView); + if (RNA.whiteLabelPreferrable(baseInnerColor)) + { + baseNameColor = Color.white; + } + + if (mb instanceof ModeleBaseNucleotide) + { + ModeleBaseNucleotide mbn = (ModeleBaseNucleotide) mb; + String res = mbn.getBase(); + if (_hoveredBase == mb && localView && isModifiable()) + { + g2D.setColor(_conf._hoverColor); + g2D.fillCircle(p.getX() - 1.5 * newRadius, + p.getY() - 1.5 * newRadius, 3.0 * newRadius); + g2D.setColor(_conf._hoverColor.darker()); + g2D.drawCircle(p.getX() - 1.5 * newRadius, + p.getY() - 1.5 * newRadius, 3.0 * newRadius); + g2D.setPlainStroke(); + } + if (_conf._fillBases) + { + // Filling inner circle + g2D.setColor(baseInnerColor); + g2D.fillCircle(p.getX() - newRadius, p.getY() - newRadius, + 2.0 * newRadius); + } + + if (_conf._drawOutlineBases) + { + // Drawing outline + g2D.setColor(baseOuterColor); + g2D.setStrokeThickness(_conf._baseThickness * _scaleFactor); + g2D.drawCircle(p.getX() - newRadius, p.getY() - newRadius, + 2.0 * newRadius); + } + // Drawing label + g2D.setColor(baseNameColor); + g2D.drawStringCentered(String.valueOf(res), p.getX(), p.getY()); + } + else if (mb instanceof ModeleBasesComparison) + { + + ModeleBasesComparison mbc = (ModeleBasesComparison) mb; + + // On lui donne l'aspect voulue (on a un trait droit) + g2D.setPlainStroke(); // On doit avoir un trait droit, sans arrondit + g2D.setStrokeThickness(_conf._baseThickness * _scaleFactor); + + // On dessine l'étiquette, rectangle aux bords arrondies. + g2D.setColor(baseInnerColor); + g2D.fillRoundRect((p.getX() - 1.5 * newRadius), + (p.getY() - newRadius), (3.0 * newRadius), (2.0 * newRadius), + 10 * _scaleFactor, 10 * _scaleFactor); + + /* Dessin du rectangle exterieur (bords) */ + g2D.setColor(baseOuterColor); + g2D.drawRoundRect((p.getX() - 1.5 * newRadius), + (p.getY() - newRadius), (3 * newRadius), (2 * newRadius), + 10 * _scaleFactor, 10 * _scaleFactor); + + // On le dessine au centre de l'étiquette. + g2D.drawLine((p.getX()), (p.getY() + newRadius) - 1, (p.getX()), + (p.getY() - newRadius) + 1); + + /* Dessin du nom de la base (A,C,G,U,etc...) */ + // On créer le texte des étiquettes + String label1 = String.valueOf(mbc.getBase1()); + String label2 = String.valueOf(mbc.getBase2()); + + // On leur donne une couleur + g2D.setColor(getRNA().get_listeBases().get(i).getStyleBase() + .getBaseNameColor()); + + // Et on les dessine. + g2D.drawStringCentered(label1, p.getX() - (.75 * newRadius), + p.getY()); + g2D.drawStringCentered(label2, p.getX() + (.75 * newRadius), + p.getY()); + } + + // Drawing base number + if (_RNA.isNumberDrawn(mb, getNumPeriod())) + { + + Point2D.Double vn = computeExcentricUnitVector(i, points, centers); + g2D.setColor(mb.getStyleBase().getBaseNumberColor()); + g2D.setFont(_conf._numbersFont); + double factorMin = Math.min(.5, _conf._distNumbers); + double factorMax = Math.min(_conf._distNumbers - 1.5, + _conf._distNumbers); + g2D.drawLine(p.x + vn.x * ((1 + factorMin) * newRadius), + p.y + vn.y * ((1 + factorMin) * newRadius), + p.x + vn.x * ((1 + factorMax) * newRadius), + p.y + vn.y * ((1 + factorMax) * newRadius)); + g2D.drawStringCentered(mb.getLabel(), + p.x + vn.x * ((1 + _conf._distNumbers) * newRadius), + p.y + vn.y * ((1 + _conf._distNumbers) * newRadius)); + + } + } + + void drawChemProbAnnotation(VueVARNAGraphics g2D, ChemProbAnnotation cpa, + Point2D.Double anchor, double scaleFactor) + { + g2D.setColor(cpa.getColor()); + g2D.setStrokeThickness(RNA.CHEM_PROB_ARROW_THICKNESS * scaleFactor + * cpa.getIntensity()); + g2D.setPlainStroke(); + Point2D.Double v = cpa.getDirVector(); + Point2D.Double vn = cpa.getNormalVector(); + Point2D.Double base = new Point2D.Double( + (anchor.x + _RNA.CHEM_PROB_DIST * scaleFactor * v.x), + (anchor.y + _RNA.CHEM_PROB_DIST * scaleFactor * v.y)); + Point2D.Double edge = new Point2D.Double( + (base.x + _RNA.CHEM_PROB_BASE_LENGTH * cpa.getIntensity() + * scaleFactor * v.x), + (base.y + _RNA.CHEM_PROB_BASE_LENGTH * cpa.getIntensity() + * scaleFactor * v.y)); + switch (cpa.getType()) + { + case ARROW: + { + Point2D.Double arrowTip1 = new Point2D.Double( + (base.x + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_ARROW_WIDTH * vn.x + + _RNA.CHEM_PROB_ARROW_HEIGHT * v.x)), + (base.y + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_ARROW_WIDTH * vn.y + + _RNA.CHEM_PROB_ARROW_HEIGHT * v.y))); + Point2D.Double arrowTip2 = new Point2D.Double( + (base.x + cpa.getIntensity() * scaleFactor + * (-_RNA.CHEM_PROB_ARROW_WIDTH * vn.x + + _RNA.CHEM_PROB_ARROW_HEIGHT * v.x)), + (base.y + cpa.getIntensity() * scaleFactor + * (-_RNA.CHEM_PROB_ARROW_WIDTH * vn.y + + _RNA.CHEM_PROB_ARROW_HEIGHT * v.y))); + g2D.drawLine(base.x, base.y, edge.x, edge.y); + g2D.drawLine(base.x, base.y, arrowTip1.x, arrowTip1.y); + g2D.drawLine(base.x, base.y, arrowTip2.x, arrowTip2.y); + } + break; + case PIN: + { + Point2D.Double side1 = new Point2D.Double( + (edge.x - cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.x)), + (edge.y - cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.y))); + Point2D.Double side2 = new Point2D.Double( + (edge.x - cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.x)), + (edge.y - cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.y))); + Point2D.Double side3 = new Point2D.Double( + (edge.x + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.x)), + (edge.y + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * v.y))); + Point2D.Double side4 = new Point2D.Double( + (edge.x + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.x)), + (edge.y + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_PIN_SEMIDIAG * vn.y))); + GeneralPath p2 = new GeneralPath(); + p2.moveTo((float) side1.x, (float) side1.y); + p2.lineTo((float) side2.x, (float) side2.y); + p2.lineTo((float) side3.x, (float) side3.y); + p2.lineTo((float) side4.x, (float) side4.y); + p2.closePath(); + g2D.fill(p2); + g2D.drawLine(base.x, base.y, edge.x, edge.y); + } + break; + case TRIANGLE: + { + Point2D.Double arrowTip1 = new Point2D.Double( + (edge.x + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.x)), + (edge.y + cpa.getIntensity() * scaleFactor + * (_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.y))); + Point2D.Double arrowTip2 = new Point2D.Double( + (edge.x + cpa.getIntensity() * scaleFactor + * (-_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.x)), + (edge.y + cpa.getIntensity() * scaleFactor + * (-_RNA.CHEM_PROB_TRIANGLE_WIDTH * vn.y))); + GeneralPath p2 = new GeneralPath(); + p2.moveTo((float) base.x, (float) base.y); + p2.lineTo((float) arrowTip1.x, (float) arrowTip1.y); + p2.lineTo((float) arrowTip2.x, (float) arrowTip2.y); + p2.closePath(); + g2D.fill(p2); + } + break; + case DOT: + { + Double radius = scaleFactor * _RNA.CHEM_PROB_DOT_RADIUS + * cpa.getIntensity(); + Point2D.Double center = new Point2D.Double((base.x + radius * v.x), + (base.y + radius * v.y)); + g2D.fillCircle((center.x - radius), (center.y - radius), + (2 * radius)); + } + break; + } + } + + Point2D.Double buildCaptionPosition(ModeleBase mb, double scaleFactor, + double heightEstimate) + { + double radius = 2.0; + if (_RNA.isNumberDrawn(mb, getNumPeriod())) + { + radius += _conf._distNumbers; + } + Point2D.Double center = mb.getCenter(); + Point2D.Double p = mb.getCoords(); + double realDistance = _RNA.BASE_RADIUS * radius + heightEstimate; + return new Point2D.Double(center.getX() + (p.getX() - center.getX()) + * ((p.distance(center) + realDistance) / p.distance(center)), + center.getY() + (p.getY() - center.getY()) + * ((p.distance(center) + realDistance) + / p.distance(center))); + } + + private void renderAnnotations(VueVARNAGraphics g2D, double offX, + double offY, double rnaBBoxX, double rnaBBoxY, double scaleFactor) + { + for (TextAnnotation textAnnotation : _RNA.getAnnotations()) + { + g2D.setColor(textAnnotation.getColor()); + g2D.setFont(textAnnotation.getFont().deriveFont((float) (2.0 + * textAnnotation.getFont().getSize() * scaleFactor))); + Point2D.Double position = textAnnotation.getCenterPosition(); + if (textAnnotation.getType() == TextAnnotation.AnchorType.BASE) + { + ModeleBase mb = (ModeleBase) textAnnotation.getAncrage(); + double fontHeight = Math.ceil(textAnnotation.getFont().getSize()); + position = buildCaptionPosition(mb, scaleFactor, fontHeight); + } + position = transformCoord(position, offX, offY, rnaBBoxX, rnaBBoxY, + scaleFactor); + g2D.drawStringCentered(textAnnotation.getTexte(), position.x, + position.y); + if ((_selectedAnnotation == textAnnotation) && (_highlightAnnotation)) + { + drawStringOutline(g2D, textAnnotation.getTexte(), position.x, + position.y, 5); + } + } + for (ChemProbAnnotation cpa : _RNA.getChemProbAnnotations()) + { + Point2D.Double anchor = transformCoord(cpa.getAnchorPosition(), offX, + offY, rnaBBoxX, rnaBBoxY, scaleFactor); + drawChemProbAnnotation(g2D, cpa, anchor, scaleFactor); + } + + } + + public Rectangle2D.Double getExtendedRNABBox() + { + // We get the logical bounding box + Rectangle2D.Double rnabbox = _RNA.getBBox(); + rnabbox.y -= _conf._distNumbers * _RNA.BASE_RADIUS; + rnabbox.height += 2.0 * _conf._distNumbers * _RNA.BASE_RADIUS; + rnabbox.x -= _conf._distNumbers * _RNA.BASE_RADIUS; + rnabbox.width += 2.0 * _conf._distNumbers * _RNA.BASE_RADIUS; + if (_RNA.hasVirtualLoops()) + { + rnabbox.y -= RNA.VIRTUAL_LOOP_RADIUS; + rnabbox.height += 2.0 * RNA.VIRTUAL_LOOP_RADIUS; + rnabbox.x -= RNA.VIRTUAL_LOOP_RADIUS; + rnabbox.width += 2.0 * RNA.VIRTUAL_LOOP_RADIUS; + } + return rnabbox; + } + + public void drawBackbone(VueVARNAGraphics g2D, Point2D.Double[] newCoords, + double newRadius, double _scaleFactor) + { + // Drawing backbone + if (getDrawBackbone()) + { + g2D.setStrokeThickness(1.5 * _scaleFactor); + g2D.setColor(_conf._backboneColor); + + ModeleBackbone bck = _RNA.getBackbone(); + + for (int i = 1; i < _RNA.get_listeBases().size(); i++) + { + Point2D.Double p1 = newCoords[i - 1]; + Point2D.Double p2 = newCoords[i]; + double dist = p1.distance(p2); + int a = _RNA.getBaseAt(i - 1).getElementStructure(); + int b = _RNA.getBaseAt(i).getElementStructure(); + boolean consecutivePair = (a == i) && (b == i - 1); + + if ((dist > 0)) + { + Point2D.Double vbp = new Point2D.Double(); + vbp.x = (p2.x - p1.x) / dist; + vbp.y = (p2.y - p1.y) / dist; + + BackboneType bt = bck.getTypeBefore(i); + if (bt != BackboneType.DISCONTINUOUS_TYPE) + { + if (bt == BackboneType.MISSING_PART_TYPE) + { + g2D.setSelectionStroke(); + } + else + { + g2D.setPlainStroke(); + } + g2D.setColor(bck.getColorBefore(i, _conf._backboneColor)); + + if (consecutivePair + && (_RNA.getDrawMode() != RNA.DRAW_MODE_LINEAR) + && (_RNA.getDrawMode() != RNA.DRAW_MODE_CIRCULAR)) + { + int dir = 0; + if (i + 1 < newCoords.length) + { + dir = (_RNA.testDirectionality(i - 1, i, i + 1) ? -1 : 1); + } + else if (i - 2 >= 0) + { + dir = (_RNA.testDirectionality(i - 2, i - 1, i) ? -1 : 1); + } + Point2D.Double vn = new Point2D.Double(dir * vbp.y, + -dir * vbp.x); + Point2D.Double centerSeg = new Point2D.Double( + (p1.x + p2.x) / 2.0, (p1.y + p2.y) / 2.0); + double distp1CenterSeq = p1.distance(centerSeg); + double centerDist = Math + .sqrt((RNA.VIRTUAL_LOOP_RADIUS * _scaleFactor + * RNA.VIRTUAL_LOOP_RADIUS * _scaleFactor) + - distp1CenterSeq * distp1CenterSeq); + Point2D.Double centerLoop = new Point2D.Double( + centerSeg.x + centerDist * vn.x, + centerSeg.y + centerDist * vn.y); + double radius = centerLoop.distance(p1); + double a1 = 360. * (Math.atan2(-(p1.y - centerLoop.y), + (p1.x - centerLoop.x))) / (2. * Math.PI); + double a2 = 360. * (Math.atan2(-(p2.y - centerLoop.y), + (p2.x - centerLoop.x))) / (2. * Math.PI); + double angle = (a2 - a1); + if (-dir * angle < 0) + { + angle += -dir * 360.; + } + // if (angle<0.) angle += 360.; + // angle = -dir*(360-dir*angle); + g2D.drawArc(centerLoop.x + .8 * newRadius * vn.x, + centerLoop.y + .8 * newRadius * vn.y, 2 * radius, + 2 * radius, a1, angle); + } + else + { + g2D.drawLine((newCoords[i - 1].x + newRadius * vbp.x), + (newCoords[i - 1].y + newRadius * vbp.y), + (newCoords[i].x - newRadius * vbp.x), + (newCoords[i].y - newRadius * vbp.y)); + } + } + } + } + } + } + + public Point2D.Double logicToPanel(Point2D.Double logicPoint) + { + return new Point2D.Double( + _offX + (getScaleFactor() * (logicPoint.x - _offsetRNA.x)), + _offY + (getScaleFactor() * (logicPoint.y - _offsetRNA.y))); + + } + + public Rectangle2D.Double renderRNA(VueVARNAGraphics g2D, + Rectangle2D.Double bbox) + { + return renderRNA(g2D, bbox, false, true); + } + + private double computeScaleFactor(Rectangle2D.Double bbox, + boolean localView, boolean autoCenter) + { + Rectangle2D.Double rnabbox = getExtendedRNABBox(); + double scaleFactor = Math.min( + (double) bbox.width / (double) rnabbox.width, + (double) bbox.height / (double) rnabbox.height); + + // Use it to get an estimate of the font size for numbers ... + float newFontSize = Math.max(1, + (int) ((1.7 * _RNA.BASE_RADIUS) * scaleFactor)); + // ... and increase bounding box accordingly + rnabbox.y -= newFontSize; + rnabbox.height += newFontSize; + if (_conf._drawColorMap) + { + rnabbox.height += getColorMapHeight(); + } + rnabbox.x -= newFontSize; + rnabbox.width += newFontSize; + + // Now, compute the final scaling factor and corresponding font size + scaleFactor = Math.min((double) bbox.width / (double) rnabbox.width, + (double) bbox.height / (double) rnabbox.height); + if (localView) + { + if (_conf._autoFit) + setScaleFactor(scaleFactor); + scaleFactor = getScaleFactor(); + } + return scaleFactor; + } + + public synchronized Rectangle2D.Double renderRNA(VueVARNAGraphics g2D, + Rectangle2D.Double bbox, boolean localView, boolean autoCenter) + { + Rectangle2D.Double rnaMultiBox = new Rectangle2D.Double(0, 0, 1, 1); + double scaleFactor = computeScaleFactor(bbox, localView, autoCenter); + float newFontSize = Math.max(1, + (int) ((1.7 * _RNA.BASE_RADIUS) * scaleFactor)); + double newRadius = Math.max(1.0, (scaleFactor * _RNA.BASE_RADIUS)); + setBaseFontSize(newFontSize); + setNumbersFontSize(newFontSize); + double offX = bbox.x; + double offY = bbox.y; + Rectangle2D.Double rnabbox = getExtendedRNABBox(); + + if (_RNA.getSize() != 0) + { + + Point2D.Double offsetRNA = new Point2D.Double(rnabbox.x, rnabbox.y); + + if (autoCenter) + { + offX = (bbox.x + + (bbox.width - Math.round(rnabbox.width * scaleFactor)) + / 2.0); + offY = (bbox.y + + (bbox.height - Math.round(rnabbox.height * scaleFactor)) + / 2.0); + if (localView) + { + _offX = offX; + _offY = offY; + _offsetPanel = new Point2D.Double(_offX, _offY); + _offsetRNA = new Point2D.Double(rnabbox.x, rnabbox.y); + } + } + + if (localView) + { + offX = _offX; + offY = _offY; + offsetRNA = _offsetRNA; + } + + // Re-scaling once and for all + Point2D.Double[] newCoords = new Point2D.Double[_RNA.get_listeBases() + .size()]; + Point2D.Double[] newCenters = new Point2D.Double[_RNA.get_listeBases() + .size()]; + for (int i = 0; i < _RNA.get_listeBases().size(); i++) + { + ModeleBase mb = _RNA.getBaseAt(i); + newCoords[i] = new Point2D.Double( + offX + (scaleFactor * (mb.getCoords().x - offsetRNA.x)), + offY + (scaleFactor * (mb.getCoords().y - offsetRNA.y))); + + Point2D.Double centerBck = _RNA.getCenter(i); + // si la base est dans un angle entre une boucle et une helice + if (_RNA.get_drawMode() == RNA.DRAW_MODE_NAVIEW + || _RNA.get_drawMode() == RNA.DRAW_MODE_RADIATE) + { + if ((mb.getElementStructure() != -1) + && i < _RNA.get_listeBases().size() - 1 && i > 1) + { + ModeleBase b1 = _RNA.get_listeBases().get(i - 1); + ModeleBase b2 = _RNA.get_listeBases().get(i + 1); + int j1 = b1.getElementStructure(); + int j2 = b2.getElementStructure(); + if ((j1 == -1) ^ (j2 == -1)) + { + // alors la position du nombre associé doit etre + Point2D.Double a1 = b1.getCoords(); + Point2D.Double a2 = b2.getCoords(); + Point2D.Double c1 = b1.getCenter(); + Point2D.Double c2 = b2.getCenter(); + + centerBck.x = mb.getCoords().x + + (c1.x - a1.x) / c1.distance(a1) + + (c2.x - a2.x) / c2.distance(a2); + centerBck.y = mb.getCoords().y + + (c1.y - a1.y) / c1.distance(a1) + + (c2.y - a2.y) / c2.distance(a2); + } + } + } + newCenters[i] = new Point2D.Double( + offX + (scaleFactor * (centerBck.x - offsetRNA.x)), + offY + (scaleFactor * (centerBck.y - offsetRNA.y))); + } + // Keep track of coordinates for mouse interactions + if (localView) + { + _realCoords = newCoords; + _realCenters = newCenters; + } + + g2D.setStrokeThickness(1.5 * scaleFactor); + g2D.setPlainStroke(); + g2D.setFont(_conf._fontBasesGeneral); + + // Drawing region highlights Annotation + drawRegionHighlightsAnnotation(g2D, _realCoords, _realCenters, + scaleFactor); + drawBackbone(g2D, newCoords, newRadius, scaleFactor); + + // Drawing base-pairs + // pour chaque base + for (int i = 0; i < _RNA.get_listeBases().size(); i++) + { + int j = _RNA.get_listeBases().get(i).getElementStructure(); + // si c'est une parenthese ouvrante (premiere base du + // couple) + if (j > i) + { + ModeleBP msbp = _RNA.get_listeBases().get(i).getStyleBP(); + // System.err.println(msbp); + if (msbp.isCanonical() || _conf._drawnNonCanonicalBP) + { + if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) + { + g2D.setStrokeThickness(_RNA.getBasePairThickness(msbp, _conf) + * 2.0 * scaleFactor * _conf._bpThickness); + } + else + { + g2D.setStrokeThickness(_RNA.getBasePairThickness(msbp, _conf) + * 1.5 * scaleFactor); + } + g2D.setColor(_RNA.getBasePairColor(msbp, _conf)); + + if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) + { + drawBasePairArc(g2D, i, j, newCoords[i], newCoords[j], + scaleFactor, msbp, newRadius); + } + else + { + drawBasePair(g2D, newCoords[i], newCoords[j], msbp, newRadius, + scaleFactor); + } + } + } + } + + // Liaisons additionelles (non planaires) + if (_conf._drawnNonPlanarBP) + { + ArrayList bpaux = _RNA.getStructureAux(); + for (int k = 0; k < bpaux.size(); k++) + { + ModeleBP msbp = bpaux.get(k); + if (msbp.isCanonical() || _conf._drawnNonCanonicalBP) + { + int i = msbp.getPartner5().getIndex(); + int j = msbp.getPartner3().getIndex(); + if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) + { + g2D.setStrokeThickness(_RNA.getBasePairThickness(msbp, _conf) + * 2.5 * scaleFactor * _conf._bpThickness); + g2D.setPlainStroke(); + } + else + { + g2D.setStrokeThickness(_RNA.getBasePairThickness(msbp, _conf) + * 1.5 * scaleFactor); + g2D.setPlainStroke(); + } + + g2D.setColor(_RNA.getBasePairColor(msbp, _conf)); + if (j > i) + { + if (_RNA.get_drawMode() == RNA.DRAW_MODE_LINEAR) + { + drawBasePairArc(g2D, i, j, newCoords[i], newCoords[j], + scaleFactor, msbp, newRadius); + } + else + { + drawBasePair(g2D, newCoords[i], newCoords[j], msbp, + newRadius, scaleFactor); + } + } + } + } + } + + // Drawing bases + g2D.setPlainStroke(); + for (int i = 0; i < Math.min(_RNA.get_listeBases().size(), + newCoords.length); i++) + { + drawBase(g2D, i, newCoords, newCenters, newRadius, scaleFactor, + localView); + } + + rnaMultiBox = new Rectangle2D.Double(offX, offY, + (scaleFactor * rnabbox.width) - 1, + (scaleFactor * rnabbox.height) - 1); + + if (localView) + { + // Drawing bbox + if (_debug || _drawBBox) + { + g2D.setColor(Color.RED); + g2D.setSelectionStroke(); + g2D.drawRect(rnaMultiBox.x, rnaMultiBox.y, rnaMultiBox.width, + rnaMultiBox.height); + } + + // Draw color map + if (_conf._drawColorMap) + { + drawColorMap(g2D, scaleFactor, rnabbox); } - public FullBackup loadSession(File path) throws ExceptionLoadingFailed { - - FullBackup bck = importSession(path); - Mapping map = Mapping.DefaultOutermostMapping(getRNA().getSize(), - bck.rna.getSize()); - showRNAInterpolated(bck.rna, map); - _conf = bck.config; - repaint(); - return bck; - } - - public static String VARNA_SESSION_EXTENSION = "varna"; - - public static FullBackup importSession(Object path) // BH was String - throws ExceptionLoadingFailed { - try { - FileInputStream fis = (path instanceof File ? new FileInputStream((File) path) : new FileInputStream(path.toString())); - // ZipInputStream zis = new - // ZipInputStream(new BufferedInputStream(fis)); - // zis.getNextEntry(); - FullBackup h = importSession(fis, path.toString()); - // zis.close(); - return h; - } catch (FileNotFoundException e) { - throw (new ExceptionLoadingFailed("File not found.", path.toString())); - } catch (IOException e) { - // TODO Auto-generated catch block - throw (new ExceptionLoadingFailed( - "I/O error while loading session.", path.toString())); - } - } - - public static FullBackup importSession(InputStream fis, String path) - throws ExceptionLoadingFailed { - System.setProperty("javax.xml.parsers.SAXParserFactory", - "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"); - SAXParserFactory saxFact = javax.xml.parsers.SAXParserFactory - .newInstance(); - saxFact.setValidating(false); - saxFact.setXIncludeAware(false); - saxFact.setNamespaceAware(false); - try { - SAXParser sp = saxFact.newSAXParser(); - VARNASessionParser sessionData = new VARNASessionParser(); - sp.parse(fis, sessionData); - FullBackup res = new FullBackup(sessionData.getVARNAConfig(), - sessionData.getRNA(), "test"); - return res; - } catch (ParserConfigurationException e) { - throw new ExceptionLoadingFailed("Bad XML parser configuration", - path); - } catch (SAXException e) { - throw new ExceptionLoadingFailed("XML parser Exception", path); - } catch (IOException e) { - throw new ExceptionLoadingFailed("I/O error", path); - } - } - - public void loadFile(File path) { - loadFile(path, false); - } - - public boolean getDrawBackbone() { - return _conf._drawBackbone; - } - - public void setDrawBackbone(boolean b) { - _conf._drawBackbone = b; - } - - public void addHighlightRegion(HighlightRegionAnnotation n) { - _RNA.addHighlightRegion(n); - } - - public void removeHighlightRegion(HighlightRegionAnnotation n) { - _RNA.removeHighlightRegion(n); - } - - public void addHighlightRegion(int i, int j) { - _RNA.addHighlightRegion(i, j); - } - - public void addHighlightRegion(int i, int j, Color fill, Color outline, - double radius) { - _RNA.addHighlightRegion(i, j, fill, outline, radius); - } - - public void loadRNA(String path) { - loadRNA(path, false); - } - - public void loadRNA(Object path, boolean interpolate) { // BH was String - try { - Collection rnas = (path instanceof File ? RNAFactory.loadSecStr(new FileReader((File) path)) : RNAFactory.loadSecStr(path.toString())); - if (rnas.isEmpty()) { - throw new ExceptionFileFormatOrSyntax( - "No RNA could be parsed from that source."); - } - RNA rna = rnas.iterator().next(); - try { - rna.drawRNA(_conf); - } catch (ExceptionNAViewAlgorithm e) { - e.printStackTrace(); - } - if (!interpolate) { - showRNA(rna); - } else { - this.showRNAInterpolated(rna); - } - - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (ExceptionFileFormatOrSyntax e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void loadFile(File path, boolean interpolate) { // was String BH StringJS - try { - loadSession(path); - } catch (Exception e1) { - loadRNA(path, interpolate); - } - } - - public void setConfig(VARNAConfig cfg) { - _conf = cfg; - } - - public void toggleDrawOutlineBases() { - _conf._drawOutlineBases = !_conf._drawOutlineBases; - } - - public void toggleFillBases() { - _conf._fillBases = !_conf._fillBases; - } - - public void setDrawOutlineBases(boolean drawn) { - _conf._drawOutlineBases = drawn; - } - - public void setFillBases(boolean drawn) { - _conf._fillBases = drawn; - } - - public void readValues(Reader r) { - this._RNA.readValues(r, _conf._cm); - } - - public void addVARNAListener(InterfaceVARNAListener v) { - _VARNAListeners.add(v); - } - - public void fireLayoutChanged() { - for (InterfaceVARNAListener v : _VARNAListeners) { - v.onStructureRedrawn(); - } - } - - public void fireUINewStructure(RNA r) { - for (InterfaceVARNAListener v : _VARNAListeners) { - v.onUINewStructure(_conf, r); - } - } - - public void fireZoomLevelChanged(double d) { - for (InterfaceVARNAListener v : _VARNAListeners) { - v.onZoomLevelChanged(); - } - } - - public void fireTranslationChanged() { - for (InterfaceVARNAListener v2 : _VARNAListeners) { - v2.onTranslationChanged(); - } - } - - public void addSelectionListener(InterfaceVARNASelectionListener v) { - _selectionListeners.add(v); - } - - public void fireSelectionChanged(BaseList mold, BaseList mnew) { - BaseList addedBases = mnew.removeAll(mold); - BaseList removedBases = mold.removeAll(mnew); - for (InterfaceVARNASelectionListener v2 : _selectionListeners) { - v2.onSelectionChanged(mnew, addedBases, removedBases); - } - } - - public void fireHoverChanged(ModeleBase mold, ModeleBase mnew) { - for (InterfaceVARNASelectionListener v2 : _selectionListeners) { - v2.onHoverChanged(mold, mnew); - } - } - - public void addRNAListener(InterfaceVARNARNAListener v) { - _RNAListeners.add(v); - } - - public void addVARNABasesListener(InterfaceVARNABasesListener l) { - _basesListeners.add(l); - } - - public void fireSequenceChanged(int index, String oldseq, String newseq) { - for (InterfaceVARNARNAListener v2 : _RNAListeners) { - v2.onSequenceModified(index, oldseq, newseq); - } - } - - public void fireStructureChanged(Set current, - Set addedBasePairs, Set removedBasePairs) { - for (InterfaceVARNARNAListener v2 : _RNAListeners) { - v2.onStructureModified(current, addedBasePairs, removedBasePairs); - } - } - - public void fireLayoutChanged( - Hashtable movedPositions) { - for (InterfaceVARNARNAListener v2 : _RNAListeners) { - v2.onRNALayoutChanged(movedPositions); - } - } - - public void fireBaseClicked(ModeleBase mb, MouseEvent me) { - if (mb != null) { - for (InterfaceVARNABasesListener v2 : _basesListeners) { - v2.onBaseClicked(mb, me); - } - } - } - - public double getOrientation() { - return _RNA.getOrientation(); - } - - public ModeleBase _hoveredBase = null; - - public void setHoverBase(ModeleBase m) { - if (m != _hoveredBase) { - ModeleBase bck = _hoveredBase; - _hoveredBase = m; - repaint(); - fireHoverChanged(bck, m); - } - } - - public void toXML(String path) { - FileOutputStream fis; - try { - fis = new FileOutputStream(path); - // ZipOutputStream zis = new ZipOutputStream(new - // BufferedOutputStream(fis)); - // ZipEntry entry = new ZipEntry("VARNASession"); - // zis.putNextEntry(entry); - PrintWriter pw = new PrintWriter(fis); - toXML(pw); - pw.flush(); - // zis.closeEntry(); - // zis.close(); - fis.close(); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public void toXML(PrintWriter out) { - try { - - // out = new PrintWriter(System.out); - StreamResult streamResult = new StreamResult(out); - SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory - .newInstance(); - // SAX2.0 ContentHandler. - TransformerHandler hd = tf.newTransformerHandler(); - Transformer serializer = hd.getTransformer(); - serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); - serializer - .setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "users.dtd"); - serializer.setOutputProperty(OutputKeys.INDENT, "yes"); - hd.setResult(streamResult); - hd.startDocument(); - toXML(hd); - hd.endDocument(); - } catch (TransformerConfigurationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - public static String XML_ELEMENT_NAME = "VARNASession"; - - public void toXML(TransformerHandler hd) throws SAXException { - AttributesImpl atts = new AttributesImpl(); - hd.startElement("", "", XML_ELEMENT_NAME, atts); - _RNA.toXML(hd); - _conf.toXML(hd); - hd.endElement("", "", XML_ELEMENT_NAME); - } - - public TextAnnotation getNearestAnnotation(int x, int y) { - TextAnnotation t = null; - if (getListeAnnotations().size() != 0) { - double dist = Double.MAX_VALUE; - double d2; - Point2D.Double position; - for (TextAnnotation textAnnot : getListeAnnotations()) { - // calcul de la distance - position = textAnnot.getCenterPosition(); - position = transformCoord(position); - d2 = Math.sqrt(Math.pow((position.x - x), 2) - + Math.pow((position.y - y), 2)); - // si la valeur est inferieur au minimum actuel - if ((dist > d2) - && (d2 < getScaleFactor() - * ControleurClicMovement.MIN_SELECTION_DISTANCE)) { - t = textAnnot; - dist = d2; - } - } - } - return t; - } - - public ModeleBase getNearestBase(int x, int y, boolean always, - boolean onlyPaired) { - int i = getNearestBaseIndex(x, y, always, onlyPaired); - if (i == -1) - return null; - return getRNA().get_listeBases().get(i); - } - - public ModeleBase getNearestBase(int x, int y) { - return getNearestBase(x, y, false, false); - } - - public int getNearestBaseIndex(int x, int y, boolean always, - boolean onlyPaired) { - double d2, dist = Double.MAX_VALUE; - int mb = -1; - for (int i = 0; i < getRealCoords().length; i++) { - if (!onlyPaired - || (getRNA().get_listeBases().get(i).getElementStructure() != -1)) { - d2 = Math.sqrt(Math.pow((getRealCoords()[i].x - x), 2) - + Math.pow((getRealCoords()[i].y - y), 2)); - if ((dist > d2) - && ((d2 < getScaleFactor() - * ControleurClicMovement.MIN_SELECTION_DISTANCE) || always)) { - dist = d2; - mb = i; - } - } - } - return mb; - } - - public void globalRescale(double factor) { - _RNA.rescale(factor); - fireLayoutChanged(); - repaint(); - } - - public void setSpaceBetweenBases(double sp) { - _conf._spaceBetweenBases = sp; - } - - public double getSpaceBetweenBases() { - return _conf._spaceBetweenBases; - } + if (_debug || _drawBBox) + { + g2D.setColor(Color.GRAY); + g2D.setSelectionStroke(); + g2D.drawRect(0, 0, getWidth() - 1, + getHeight() - getTitleHeight() - 1); + } + } + // Draw annotations + renderAnnotations(g2D, offX, offY, offsetRNA.x, offsetRNA.y, + scaleFactor); + // Draw additional debug shape + if (_RNA._debugShape != null) + { + Color c = new Color(255, 0, 0, 50); + g2D.setColor(c); + AffineTransform at = new AffineTransform(); + at.translate(offX - scaleFactor * rnabbox.x, + offY - scaleFactor * rnabbox.y); + at.scale(scaleFactor, scaleFactor); + Shape s = at.createTransformedShape(_RNA._debugShape); + if (s instanceof GeneralPath) + { + g2D.fill((GeneralPath) s); + } + } + } + else + { + g2D.setColor(VARNAConfig.DEFAULT_MESSAGE_COLOR); + g2D.setFont(VARNAConfig.DEFAULT_MESSAGE_FONT); + rnaMultiBox = new Rectangle2D.Double(0, 0, 10, 10); + g2D.drawStringCentered("No RNA here", bbox.getCenterX(), + bbox.getCenterY()); + } + return rnaMultiBox; + } + + public void centerViewOn(double x, double y) + { + Rectangle2D.Double r = _RNA.getBBox(); + _target = new Point2D.Double(x, y); + Point2D.Double q = logicToPanel(_target); + Point p = new Point((int) (-q.x), (int) (-q.y)); + setTranslation(p); + repaint(); + } + + Point2D.Double _target = new Point2D.Double(0, 0); + + Point2D.Double _target2 = new Point2D.Double(0, 0); + + public ModeleBase getBaseAt(Point2D.Double po) + { + ModeleBase mb = null; + Point2D.Double p = panelToLogicPoint(po); + double dist = Double.MAX_VALUE; + for (ModeleBase tmp : _RNA.get_listeBases()) + { + double ndist = tmp.getCoords().distance(p); + if (dist > ndist) + { + mb = tmp; + dist = ndist; + } + } + return mb; + } + + public void setColorMapValues(Double[] values) + { + _RNA.setColorMapValues(values, _conf._cm, true); + _conf._drawColorMap = true; + repaint(); + } + + public void setColorMapMaxValue(double d) + { + _conf._cm.setMaxValue(d); + } + + public void setColorMapMinValue(double d) + { + _conf._cm.setMinValue(d); + } + + public ModeleColorMap getColorMap() + { + return _conf._cm; + } + + public void setColorMap(ModeleColorMap cm) + { + // _RNA.adaptColorMapToValues(cm); + _conf._cm = cm; + repaint(); + } + + public void setColorMapCaption(String caption) + { + _conf._colorMapCaption = caption; + repaint(); + } + + public String getColorMapCaption() + { + return _conf._colorMapCaption; + } + + public void drawColorMap(boolean draw) + { + _conf._drawColorMap = draw; + } + + private double getColorMapHeight() + { + double result = VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE + + _conf._colorMapHeight; + if (!_conf._colorMapCaption.equals("")) + result += VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE; + return result; + } + + private void drawColorMap(VueVARNAGraphics g2D, double scaleFactor, + Rectangle2D.Double rnabbox) + { + double v1 = _conf._cm.getMinValue(); + double v2 = _conf._cm.getMaxValue(); + double x, y; + g2D.setPlainStroke(); + + double xSpaceAvail = 0; + double ySpaceAvail = Math.min( + (getHeight() - rnabbox.height * scaleFactor - getTitleHeight()) + / 2.0, + scaleFactor * (_conf._colorMapHeight + + VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE)); + if ((int) ySpaceAvail == 0) + { + xSpaceAvail = Math.min((getWidth() - rnabbox.width * scaleFactor) / 2, + scaleFactor * (_conf._colorMapWidth) + + VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH); + } + double xBase = (xSpaceAvail + _offX + scaleFactor * (rnabbox.width + - _conf._colorMapWidth - _conf._colorMapXOffset)); + double hcaption = VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE; + double yBase = (ySpaceAvail + _offY + scaleFactor * (rnabbox.height + - _conf._colorMapHeight - _conf._colorMapYOffset - hcaption)); + + for (int i = 0; i < _conf._colorMapWidth; i++) + { + double ratio = (((double) i) / ((double) _conf._colorMapWidth)); + double val = v1 + (v2 - v1) * ratio; + g2D.setColor(_conf._cm.getColorForValue(val)); + x = (xBase + scaleFactor * i); + y = yBase; + g2D.fillRect(x, y, + scaleFactor * VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH, + (scaleFactor * _conf._colorMapHeight)); + } + g2D.setColor(VARNAConfig.DEFAULT_COLOR_MAP_OUTLINE); + g2D.drawRect(xBase, yBase, + (VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH - 1 + + scaleFactor * _conf._colorMapWidth), + ((scaleFactor * _conf._colorMapHeight))); + g2D.setFont(getFont().deriveFont((float) (scaleFactor + * VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE))); + g2D.setColor(VARNAConfig.DEFAULT_COLOR_MAP_FONT_COLOR); + NumberFormat nf = NumberFormat.getInstance(); + nf.setMaximumFractionDigits(2); + nf.setMinimumFractionDigits(0); + g2D.drawStringCentered(nf.format(_conf._cm.getMinValue()), xBase, + yBase + scaleFactor * (_conf._colorMapHeight + + (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7))); + g2D.drawStringCentered(nf.format(_conf._cm.getMaxValue()), + xBase + VARNAConfig.DEFAULT_COLOR_MAP_STRIPE_WIDTH + + scaleFactor * _conf._colorMapWidth, + yBase + scaleFactor * (_conf._colorMapHeight + + (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7))); + if (!_conf._colorMapCaption.equals("")) + g2D.drawStringCentered("" + _conf._colorMapCaption, + xBase + scaleFactor * _conf._colorMapWidth / 2.0, + yBase + scaleFactor + * (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7 + + _conf._colorMapHeight)); + + } + + public Point2D.Double panelToLogicPoint(Point2D.Double p) + { + return new Point2D.Double( + ((p.x - getOffsetPanel().x) / getScaleFactor()) + + getRNAOffset().x, + ((p.y - getOffsetPanel().y) / getScaleFactor()) + + getRNAOffset().y); + } + + public Point2D.Double transformCoord(Point2D.Double coordDebut, + double offX, double offY, double rnaBBoxX, double rnaBBoxY, + double scaleFactor) + { + return new Point2D.Double( + offX + (scaleFactor * (coordDebut.x - rnaBBoxX)), + offY + (scaleFactor * (coordDebut.y - rnaBBoxY))); + } + + public void eraseSequence() + { + _RNA.eraseSequence(); + } + + public Point2D.Double transformCoord(Point2D.Double coordDebut) + { + Rectangle2D.Double rnabbox = getExtendedRNABBox(); + return new Point2D.Double( + _offX + (getScaleFactor() * (coordDebut.x - rnabbox.x)), + _offY + (getScaleFactor() * (coordDebut.y - rnabbox.y))); + } + + public void paintComponent(Graphics g) + { + paintComponent(g, false); + } + + public void paintComponent(Graphics g, boolean transparentBackground) + { + if (_premierAffichage) + { + // _border = new Dimension(0, 0); + _translation.x = 0; + _translation.y = (int) (-getTitleHeight() / 2.0); + _premierAffichage = false; + } + + Graphics2D g2 = (Graphics2D) g; + Stroke dflt = g2.getStroke(); + VueVARNAGraphics g2D = new SwingGraphics(g2); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + this.removeAll(); + super.paintComponent(g2); + renderComponent(g2D, transparentBackground, getScaleFactor()); + if (isFocusOwner()) + { + g2.setStroke(new BasicStroke(1.5f)); + g2.setColor(Color.decode("#C0C0C0")); + g2.drawRect(0, 0, getWidth() - 1, getHeight() - 1); + + } + g2.setStroke(dflt); + /* + * PSExport e = new PSExport(); SecStrProducerGraphics export = new + * SecStrProducerGraphics(e); renderRNA(export, getExtendedRNABBox()); + * try { export.saveToDisk("./out.ps"); } catch + * (ExceptionWritingForbidden e1) { e1.printStackTrace(); } + */ + } + + /** + * Draws current RNA structure in a given Graphics "device". + * + * @param g2D + * A graphical device + * @param transparentBackground + * Whether the background should be transparent, or drawn. + */ + public synchronized void renderComponent(VueVARNAGraphics g2D, + boolean transparentBackground, double scaleFactor) + { + + updateTitleHeight(); + + if (!transparentBackground) + { + g2D.setColor(_conf._backgroundColor); + g2D.fillRect(0, 0, getWidth(), getHeight()); + } + else + { + super.setBackground(new Color(0, 0, 0, 120)); + } + + if (_debug || _drawBorder) + { + g2D.setColor(Color.BLACK); + g2D.setPlainStroke(); + g2D.drawRect(getLeftOffset(), getTopOffset(), getInnerWidth(), + getInnerHeight()); + + } + + // if (!transparentBackground) { + // super.setBackground(_conf._backgroundColor); + // } else { + // super.setBackground(new Color(0, 0, 0, 120)); + // } + + if (getMinimumSize().height < getSize().height + && getMinimumSize().width < getSize().width) + { + // Draw Title + if (!getTitle().equals("")) + { + g2D.setColor(_conf._titleColor); + g2D.setFont(_conf._titleFont); + g2D.drawStringCentered(getTitle(), this.getWidth() / 2, + this.getHeight() - getTitleHeight() / 2.0); + } + // Draw RNA + renderRNA(g2D, getClip(), true, _conf._autoCenter); + } + if (_selectionRectangle != null) + { + g2D.setColor(Color.BLACK); + g2D.setSelectionStroke(); + g2D.drawRect(_selectionRectangle.x, _selectionRectangle.y, + _selectionRectangle.width, _selectionRectangle.height); + } + if ((_linkOrigin != null) && (_linkDestination != null)) + { + g2D.setColor(_conf._bondColor); + g2D.setPlainStroke(); + g2D.setStrokeThickness(3.0 * scaleFactor); + Point2D.Double linkOrigin = (_linkOrigin); + Point2D.Double linkDestination = (_linkDestination); + g2D.drawLine(linkOrigin.x, linkOrigin.y, linkDestination.x, + linkDestination.y); + for (int i : getSelection().getIndices()) + drawBase(g2D, i, _realCoords, _realCenters, + scaleFactor * _RNA.BASE_RADIUS, scaleFactor, true); + } + + if (_debug) + { + g2D.setStrokeThickness(3.0 * scaleFactor); + g2D.setColor(Color.black); + Point2D.Double t = this.logicToPanel(_target); + g2D.drawLine(t.x - 3, t.y - 3, t.x + 3, t.y + 3); + g2D.drawLine(t.x - 3, t.y + 3, t.x + 3, t.y - 3); + g2D.setColor(Color.red); + t = this.logicToPanel(_target2); + g2D.drawLine(t.x - 3, t.y - 3, t.x + 3, t.y + 3); + g2D.drawLine(t.x - 3, t.y + 3, t.x + 3, t.y - 3); + } + } + + public void drawRegionHighlightsAnnotation(VueVARNAGraphics g2D, + Point2D.Double[] realCoords, Point2D.Double[] realCenters, + double scaleFactor) + { + g2D.setStrokeThickness(2.0 * scaleFactor); + g2D.setPlainStroke(); + for (HighlightRegionAnnotation r : _RNA.getHighlightRegion()) + { + GeneralPath s = r.getShape(realCoords, realCenters, scaleFactor); + g2D.setColor(r.getFillColor()); + g2D.fill(s); + g2D.setColor(r.getOutlineColor()); + g2D.draw(s); + } + } + + private Rectangle2D.Double getClip() + { + return new Rectangle2D.Double(getLeftOffset(), getTopOffset(), + this.getInnerWidth(), this.getInnerHeight()); + } + + public Rectangle2D.Double getViewClip() + { + return new Rectangle2D.Double(this.getLeftOffset(), this.getTopOffset(), + this.getInnerWidth(), this.getInnerHeight()); + } + + /** + * Returns the color used to draw backbone bounds. + * + * @return The color used to draw backbone bounds + */ + public Color getBackboneColor() + { + return _conf._backboneColor; + } + + /** + * Sets the color to be used for drawing backbone interactions. + * + * @param backbone_color + * The new color for the backbone bounds + */ + public void setBackboneColor(Color backbone_color) + { + _conf._backboneColor = backbone_color; + } + + /** + * Returns the color used to display hydrogen bonds (base pairings) + * + * @return The color of hydrogen bonds + */ + public Color getBondColor() + { + return _conf._bondColor; + } + + /** + * Returns the title of this panel + * + * @return The title + */ + public String getTitle() + { + return _RNA.getName(); + } + + /** + * Sets the new color to be used for hydrogen bonds (base pairings) + * + * @param bond_color + * The new color for hydrogen bonds + */ + public void setDefaultBPColor(Color bond_color) + { + _conf._bondColor = bond_color; + } + + /** + * Sets the size of the border, i.e. the empty space between the end of the + * drawing area and the actual border. + * + * @param b + * The new border size + */ + public void setBorderSize(Dimension b) + { + _border = b; + } + + /** + * Returns the size of the border, i.e. the empty space between the end of the + * drawing area + * + * @return The border size + */ + public Dimension getBorderSize() + { + return _border; + } + + /** + * Sets the RNA to be displayed within this Panel. This method does not use a + * drawing algorithm to reassigns base coordinates, rather assuming that the + * RNA was previously drawn. + * + * @param r + * An already drawn RNA to display in this panel + */ + public synchronized void showRNA(RNA r) + { + fireUINewStructure(r); + _RNA = r; + } + + /** + * Sets the RNA secondary structure to be drawn in this panel, using the + * default layout algorithm. In addition to the raw nucleotides sequence, the + * secondary structure is given in the so-called "Dot-bracket notation" (DBN) + * format. This format is a well-parenthesized word over the alphabet + * '(',')','.'.
    + * Ex:((((((((....))))..(((((...))).))))))
    + * Returns true if the sequence/structure couple could be parsed + * into a valid secondary structure, and false otherwise. + * + * @param seq + * The raw nucleotides sequence + * @param str + * The secondary structure + * @throws ExceptionNonEqualLength + */ + public void drawRNA(String seq, String str) throws ExceptionNonEqualLength + { + drawRNA(seq, str, _RNA.get_drawMode()); + } + + /** + * Sets the RNA secondary structure to be drawn in this panel, using a given + * layout algorithm. + * + * @param r + * The new secondary structure + * @param drawMode + * The drawing algorithm + */ + public void drawRNA(RNA r, int drawMode) + { + r.setDrawMode(drawMode); + drawRNA(r); + } + + /** + * Redraws the current RNA. This reassigns base coordinates to their default + * value using the current drawing algorithm. + */ + + public void drawRNA() + { + try + { + _RNA.drawRNA(_RNA.get_drawMode(), _conf); + } catch (ExceptionNAViewAlgorithm e) + { + errorDialog(e); + e.printStackTrace(); + } + repaint(); + } + + /** + * Sets the RNA secondary structure to be drawn in this panel, using the + * current drawing algorithm. + * + * @param r + * The new secondary structure + */ + public void drawRNA(RNA r) + { + if (r != null) + { + _RNA = r; + drawRNA(); + } + } + + /** + * Sets the RNA secondary structure to be drawn in this panel, using a given + * layout algorithm. In addition to the raw nucleotides sequence, the + * secondary structure is given in the so-called "Dot-bracket notation" (DBN) + * format. This format is a well-parenthesized word over the alphabet + * '(',')','.'.
    + * Ex: ((((((((....))))..(((((...))).))))))
    + * Returns true if the sequence/structure couple could be parsed + * into a valid secondary structure, and false otherwise. + * + * @param seq + * The raw nucleotides sequence + * @param str + * The secondary structure + * @param drawMode + * The drawing algorithm + * @throws ExceptionNonEqualLength + */ + public void drawRNA(String seq, String str, int drawMode) + throws ExceptionNonEqualLength + { + _RNA.setDrawMode(drawMode); + try + { + _RNA.setRNA(seq, str); + drawRNA(); + } catch (ExceptionUnmatchedClosingParentheses e) + { + errorDialog(e); + } catch (ExceptionFileFormatOrSyntax e1) + { + errorDialog(e1); + } + } + + public void drawRNA(Reader r, int drawMode) + throws ExceptionNonEqualLength, ExceptionFileFormatOrSyntax + { + _RNA.setDrawMode(drawMode); + Collection rnas = RNAFactory.loadSecStr(r); + if (rnas.isEmpty()) + { + throw new ExceptionFileFormatOrSyntax( + "No RNA could be parsed from that source."); + } + _RNA = rnas.iterator().next(); + drawRNA(); + } + + /** + * Draws a secondary structure of RNA using the default drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Extra bases, resulting from a size difference between the two + * successive RNAs, are assumed to initiate from the middle of the sequence. + * In other words, both prefixes and suffixes of the RNAs are assumed to + * match, and what remains is an insertion. + * + * @param seq + * Sequence + * @param str + * Structure in dot bracket notation + * @throws ExceptionNonEqualLength + * If len(seq)!=len(str) + */ + public void drawRNAInterpolated(String seq, String str) + throws ExceptionNonEqualLength + { + drawRNAInterpolated(seq, str, _RNA.get_drawMode()); + } + + /** + * Draws a secondary structure of RNA using a given algorithm and displays it, + * using an interpolated transition between the previous one and the new one. + * Extra bases, resulting from a size difference between the two successive + * RNAs, are assumed to initiate from the middle of the sequence. In other + * words, both prefixes and suffixes of the RNAs are assumed to match, and + * what remains is an insertion. + * + * @param seq + * Sequence + * @param str + * Structure in dot bracket notation + * @param drawMode + * The drawing algorithm to be used for the initial placement + * @throws ExceptionNonEqualLength + * If len(seq)!=len(str) + */ + public void drawRNAInterpolated(String seq, String str, int drawMode) + { + drawRNAInterpolated(seq, str, drawMode, Mapping.DefaultOutermostMapping( + _RNA.get_listeBases().size(), str.length())); + } + + /** + * Draws a secondary structure of RNA using the default drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Here, a mapping between those bases of the new structure and + * the previous one is explicitly provided. + * + * @param seq + * Sequence + * @param str + * Structure in dot bracket notation + * @param m + * A mapping between the currently rendered structure and its + * successor (seq,str) + * @throws ExceptionNonEqualLength + * If len(seq)!=len(str) + */ + public void drawRNAInterpolated(String seq, String str, Mapping m) + { + drawRNAInterpolated(seq, str, _RNA.get_drawMode(), m); + } + + /** + * Draws a secondary structure of RNA using a given drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Here, a mapping between those bases of the new structure and + * the previous one is provided. + * + * @param seq + * Sequence + * @param str + * Structure in dot bracket notation + * @param drawMode + * The drawing algorithm to be used for the initial placement + * @param m + * A mapping between the currently rendered structure and its + * successor (seq,str) + */ + public void drawRNAInterpolated(String seq, String str, int drawMode, + Mapping m) + { + RNA target = new RNA(); + try + { + target.setRNA(seq, str); + drawRNAInterpolated(target, drawMode, m); + } catch (ExceptionUnmatchedClosingParentheses e) + { + errorDialog(e); + } catch (ExceptionFileFormatOrSyntax e) + { + errorDialog(e); + } + } + + /** + * Draws a secondary structure of RNA using the default drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Here, a mapping between those bases of the new structure and + * the previous one is explicitly provided. + * + * @param target + * Secondary structure + */ + public void drawRNAInterpolated(RNA target) + { + drawRNAInterpolated(target, target.get_drawMode(), + Mapping.DefaultOutermostMapping(_RNA.get_listeBases().size(), + target.getSize())); + } + + /** + * Draws a secondary structure of RNA using the default drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Here, a mapping between those bases of the new structure and + * the previous one is explicitly provided. + * + * @param target + * Secondary structure + * @param m + * A mapping between the currently rendered structure and its + * successor (seq,str) + */ + public void drawRNAInterpolated(RNA target, Mapping m) + { + drawRNAInterpolated(target, target.get_drawMode(), m); + } + + /** + * Draws a secondary structure of RNA using a given drawing algorithm and + * displays it, using an interpolated transition between the previous one and + * the new one. Here, a mapping between those bases of the new structure and + * the previous one is provided. + * + * @param target + * Secondary structure of RNA + * @param drawMode + * The drawing algorithm to be used for the initial placement + * @param m + * A mapping between the currently rendered structure and its + * successor (seq,str) + */ + public void drawRNAInterpolated(RNA target, int drawMode, Mapping m) + { + try + { + target.drawRNA(drawMode, _conf); + _conf._drawColorMap = false; + _interpolator.addTarget(target, m); + } catch (ExceptionNAViewAlgorithm e) + { + errorDialog(e); + e.printStackTrace(); + } + } + + /** + * Returns the current algorithm used for drawing the structure + * + * @return The current drawing algorithm + */ + public int getDrawMode() + { + return this._RNA.getDrawMode(); + } + + public void showRNA(RNA t, VARNAConfig cfg) + { + showRNA(t); + if (cfg != null) + { + this.setConfig(cfg); + } + repaint(); + } + + /** + * Checks whether an interpolated transition bewteen two RNAs is occurring. + * + * @return True if an interpolated transition is occurring, false otherwise + */ + + public boolean isInterpolationInProgress() + { + if (_interpolator == null) + { + return false; + } + else + return _interpolator.isInterpolationInProgress(); + } + + /** + * Simply displays (does not redraw) a secondary structure , using an + * interpolated transition between the previous one and the new one. A default + * mapping between those bases of the new structure and the previous one is + * used. + * + * @param target + * Secondary structure of RNA + */ + public void showRNAInterpolated(RNA target) + { + showRNAInterpolated(target, Mapping.DefaultOutermostMapping( + _RNA.get_listeBases().size(), target.getSize())); + } + + /** + * Simply displays (does not redraw) a secondary structure , using an + * interpolated transition between the previous one and the new one. Here, a + * mapping between bases of the new structure and the previous one is given. + * + * @param target + * Secondary structure of RNA + * @param m + * A mapping between the currently rendered structure and its + * successor (seq,str) + * @throws ExceptionNonEqualLength + * If len(seq)!=len(str) + */ + public void showRNAInterpolated(RNA target, Mapping m) + { + showRNAInterpolated(target, null, m); + } + + public void showRNAInterpolated(RNA target, VARNAConfig cfg, Mapping m) + { + _interpolator.addTarget(target, cfg, m); + } + + /** + * When comparison mode is ON, sets the two RNA secondary structure to be + * drawn in this panel, using a given layout algorithm. In addition to the raw + * nucleotides sequence, the secondary structure is given in the so-called + * "Dot-bracket notation" (DBN) format. This format is a well-parenthesized + * word over the alphabet '(',')','.'.
    + * Ex: ((((((((....))))..(((((...))).))))))
    + * + * @param firstSeq + * The first RNA raw nucleotides sequence + * @param firstStruct + * The first RNA secondary structure + * @param secondSeq + * The second RNA raw nucleotides sequence + * @param secondStruct + * The second RNA secondary structure + * @param drawMode + * The drawing algorithm + */ + public void drawRNA(String firstSeq, String firstStruct, String secondSeq, + String secondStruct, int drawMode) + { + _RNA.setDrawMode(drawMode); + /** + * Checking the sequences and structures validities... + */ + + // This is a comparison, so the two RNA alignment past in parameters + // must + // have the same sequence and structure length. + if (firstSeq.length() == secondSeq.length() + && firstStruct.length() == secondStruct.length()) + { + // First RNA + if (firstSeq.length() != firstStruct.length()) + { + if (_conf._showWarnings) + { + emitWarning("First sequence length " + firstSeq.length() + + " differs from that of it's secondary structure " + + firstStruct.length() + + ". \nAdapting first sequence length ..."); + } + if (firstSeq.length() < firstStruct.length()) + { + while (firstSeq.length() < firstStruct.length()) + { + firstSeq += " "; + } + } + else + { + firstSeq = firstSeq.substring(0, firstStruct.length()); + } + } + + // Second RNA + if (secondSeq.length() != secondStruct.length()) + { + if (_conf._showWarnings) + { + emitWarning("Second sequence length " + secondSeq.length() + + " differs from that of it's secondary structure " + + secondStruct.length() + + ". \nAdapting second sequence length ..."); + } + if (secondSeq.length() < secondStruct.length()) + { + while (secondSeq.length() < secondStruct.length()) + { + secondSeq += " "; + } + } + else + { + secondSeq = secondSeq.substring(0, secondStruct.length()); + } + } + + int RNALength = firstSeq.length(); + String string_superStruct = new String(""); + String string_superSeq = new String(""); + /** + * In this array, we'll have for each indexes of each characters of the + * final super-structure, the RNA number which is own it. + */ + ArrayList array_rnaOwn = new ArrayList(); + + /** + * Generating super-structure sequences and structures... + */ + + firstStruct = firstStruct.replace('-', '.'); + secondStruct = secondStruct.replace('-', '.'); + // First of all, we make the structure + for (int i = 0; i < RNALength; i++) + { + // If both characters are the same, so it'll be in the super + // structure + if (firstStruct.charAt(i) == secondStruct.charAt(i)) + { + string_superStruct = string_superStruct + firstStruct.charAt(i); + array_rnaOwn.add(0); + } + // Else if one of the characters is an opening parenthese, so + // it'll be an opening parenthese in the super structure + else if (firstStruct.charAt(i) == '(' + || secondStruct.charAt(i) == '(') + { + string_superStruct = string_superStruct + '('; + array_rnaOwn.add((firstStruct.charAt(i) == '(') ? 1 : 2); + } + // Else if one of the characters is a closing parenthese, so + // it'll be a closing parenthese in the super structure + else if (firstStruct.charAt(i) == ')' + || secondStruct.charAt(i) == ')') + { + string_superStruct = string_superStruct + ')'; + array_rnaOwn.add((firstStruct.charAt(i) == ')') ? 1 : 2); + } + else + { + string_superStruct = string_superStruct + '.'; + array_rnaOwn.add(-1); + } + } + + // Next, we make the sequence taking the characters at the same + // index in the first and second sequence + for (int i = 0; i < RNALength; i++) + { + string_superSeq = string_superSeq + firstSeq.charAt(i) + + secondSeq.charAt(i); + } + + // Now, we need to create the super-structure RNA with the owning + // bases array + // in order to color bases outer depending on the owning statement + // of each bases. + if (!string_superSeq.equals("") && !string_superStruct.equals("")) + { + try + { + _RNA.setRNA(string_superSeq, string_superStruct, array_rnaOwn); + } catch (ExceptionUnmatchedClosingParentheses e) + { + errorDialog(e); + } catch (ExceptionFileFormatOrSyntax e) + { + errorDialog(e); + } + } + else + { + emitWarning("ERROR : The super-structure is NULL."); + } + + switch (_RNA.get_drawMode()) + { + case RNA.DRAW_MODE_RADIATE: + _RNA.drawRNARadiate(_conf); + break; + case RNA.DRAW_MODE_CIRCULAR: + _RNA.drawRNACircle(_conf); + break; + case RNA.DRAW_MODE_LINEAR: + _RNA.drawRNALine(_conf); + break; + case RNA.DRAW_MODE_NAVIEW: + try + { + _RNA.drawRNANAView(_conf); + } catch (ExceptionNAViewAlgorithm e) + { + errorDialog(e); + } + break; + default: + break; + } + + } + } + + /** + * Returns the currently selected base index, obtained through a mouse-left + * click + * + * @return Selected base + * + * public int getSelectedBaseIndex() { return _selectedBase; } + * + * /** Returns the currently selected base, obtained through a + * mouse-left click + * + * @return Selected base + * + * public ModeleBase getSelectedBase() { return + * _RNA.get_listeBases().get(_selectedBase); } + * + * /** Sets the selected base index + * + * @param base + * New selected base index + * + * public void setSelectedBase(int base) { _selectedBase = base; } + */ + + /** + * Returns the coordinates of the currently displayed RNA + * + * @return Coordinates array + */ + public Point2D.Double[] getRealCoords() + { + return _realCoords; + } + + /** + * Sets the coordinates of the currently displayed RNA + * + * @param coords + * New coordinates + */ + public void setRealCoords(Point2D.Double[] coords) + { + _realCoords = coords; + } + + /** + * Returns the popup menu used for user mouse iteractions + * + * @return Popup menu + */ + public VueMenu getPopup() + { + return _popup; + } + + /** + * Sets the color used to display hydrogen bonds (base pairings) + * + * @param bond_color + * The color of hydrogen bonds + */ + public void setBondColor(Color bond_color) + { + _conf._bondColor = bond_color; + } + + /** + * Returns the color used to draw the title + * + * @return The color used to draw the title + */ + public Color getTitleColor() + { + return _conf._titleColor; + } + + /** + * Sets the color used to draw the title + * + * @param title_color + * The new color used to draw the title + */ + public void setTitleColor(Color title_color) + { + _conf._titleColor = title_color; + } + + /** + * Returns the height taken by the title + * + * @return The height taken by the title + */ + private int getTitleHeight() + { + return _titleHeight; + } + + /** + * Sets the height taken by the title + * + * @param title_height + * The height taken by the title + */ + @SuppressWarnings("unused") + private void setTitleHeight(int title_height) + { + _titleHeight = title_height; + } + + /** + * Returns the current state of auto centering mode. + * + * @return True if autocentered, false otherwise + */ + public boolean isAutoCentered() + { + return _conf._autoCenter; + } + + /** + * Sets the current state of auto centering mode. + * + * @param center + * New auto-centered state + */ + public void setAutoCenter(boolean center) + { + _conf._autoCenter = center; + } + + /** + * Returns the font currently used for rendering the title. + * + * @return Current title font + */ + public Font getTitleFont() + { + return _conf._titleFont; + } + + /** + * Sets the font used for rendering the title. + * + * @param font + * New title font + */ + public void setTitleFont(Font font) + { + _conf._titleFont = font; + updateTitleHeight(); + } + + /** + * For the LINE_MODE drawing algorithm, sets the base pair height increment, + * i.e. the vertical distance between two nested arcs. + * + * @return The current base pair increment + */ + public double getBPHeightIncrement() + { + return _RNA._bpHeightIncrement; + } + + /** + * Sets the base pair height increment, i.e. the vertical distance between two + * arcs to be used in LINE_MODE. + * + * @param inc + * New height increment + */ + public void setBPHeightIncrement(double inc) + { + _RNA._bpHeightIncrement = inc; + } + + /** + * Returns the shifting of the origin of the Panel in zoom mode + * + * @return The logical coordinate of the top-left panel point + */ + public Point2D.Double getOffsetPanel() + { + return _offsetPanel; + } + + /** + * Returns the vector bringing the logical coordinate of left-top-most point + * in the panel to the left-top-most point of the RNA. + * + * @return The logical coordinate of the top-left panel point + */ + private Point2D.Double getRNAOffset() + { + return _offsetRNA; + } + + /** + * Returns this panel's UI menu + * + * @return Applet's UI popupmenu + */ + public VueMenu getPopupMenu() + { + return _popup; + } + + /** + * Returns the atomic zoom factor step, or increment. + * + * @return Atomic zoom factor increment + */ + public double getZoomIncrement() + { + return _conf._zoomAmount; + } + + /** + * Sets the atomic zoom factor step, or increment. + * + * @param amount + * Atomic zoom factor increment + */ + public void setZoomIncrement(Object amount) + { + setZoomIncrement(Float.valueOf(amount.toString())); + } + + /** + * Sets the atomic zoom factor step, or increment. + * + * @param amount + * Atomic zoom factor increment + */ + public void setZoomIncrement(double amount) + { + _conf._zoomAmount = amount; + } + + /** + * Returns the current zoom factor + * + * @return Current zoom factor + */ + public double getZoom() + { + return _conf._zoom; + } + + /** + * Sets the current zoom factor + * + * @param _zoom + * New zoom factor + */ + public void setZoom(Object _zoom) + { + double d = Float.valueOf(_zoom.toString()); + if (_conf._zoom != d) + { + _conf._zoom = d; + fireZoomLevelChanged(d); + } + } + + /** + * Returns the translation used for zooming in and out + * + * @return A vector describing the translation + */ + public Point getTranslation() + { + return _translation; + } + + /** + * Sets the translation used for zooming in and out + * + * @param trans + * A vector describing the new translation + */ + public void setTranslation(Point trans) + { + _translation = trans; + checkTranslation(); + fireTranslationChanged(); + } + + /** + * Returns the current RNA model + * + * @return Current RNA model + */ + public RNA getRNA() + { + return _RNA; + } + + /** + * Checks whether the drawn RNA is too large to be displayed, allowing for + * shifting mouse interactions. + * + * @return true if the RNA is too large to be displayed, false otherwise + */ + public boolean isOutOfFrame() + { + return _horsCadre; + } + + /** + * Pops up an error Dialog displaying an exception in an human-readable way. + * + * @param error + * The exception to display within the Dialog + */ + public void errorDialog(Exception error) + { + errorDialog(error, this); + } + + /** + * Pops up an error Dialog displaying an exception in an human-readable way if + * errors are set to be displayed. + * + * @see #setErrorsOn(boolean) + * @param error + * The exception to display within the Dialog + * @param c + * Parent component for the dialog box + */ + public void errorDialog(Exception error, Component c) + { + if (isErrorsOn()) + { + JOptionPane.showMessageDialog(c, error.getMessage(), "VARNA Error", + JOptionPane.ERROR_MESSAGE); + } + } + + /** + * Pops up an error Dialog displaying an exception in an human-readable way. + * + * @param error + * The exception to display within the Dialog + * @param c + * Parent component for the dialog box + */ + public static void errorDialogStatic(Exception error, Component c) + { + if (c != null) + { + JOptionPane.showMessageDialog(c, error.getMessage(), + "VARNA Critical Error", JOptionPane.ERROR_MESSAGE); + } + else + { + System.err.println("Error: " + error.getMessage()); + } + } + + /** + * Displays a warning message through a modal dialog if warnings are set to be + * displayed. + * + * @see #setShowWarnings(boolean) + * @param warning + * A message expliciting the warning + */ + public void emitWarning(String warning) + { + if (_conf._showWarnings) + JOptionPane.showMessageDialog(this, warning, "VARNA Warning", + JOptionPane.WARNING_MESSAGE); + } + + public static void emitWarningStatic(Exception e, Component c) + { + emitWarningStatic(e.getMessage(), c); + } + + public static void emitWarningStatic(String warning, Component c) + { + if (c != null) + { + JOptionPane.showMessageDialog(c, warning, "VARNA Warning", + JOptionPane.WARNING_MESSAGE); + } + else + { + System.err.println("Error: " + warning); + } + } + + /** + * Toggles modifications on and off + * + * @param modifiable + * Modification status + */ + public void setModifiable(boolean modifiable) + { + _conf._modifiable = modifiable; + } + + /** + * Returns current modification status + * + * @return current modification status + */ + public boolean isModifiable() + { + return _conf._modifiable; + } + + /** + * Resets the visual aspects (Zoom factor, shift) for the Panel. + */ + public void reset() + { + this.setBorderSize(new Dimension(0, 0)); + this.setTranslation(new Point(0, (int) (-getTitleHeight() / 2.0))); + this.setZoom(VARNAConfig.DEFAULT_ZOOM); + this.setZoomIncrement(VARNAConfig.DEFAULT_AMOUNT); + } + + /** + * Returns the color used to draw non-standard bases + * + * @return The color used to draw non-standard bases + */ + public Color getNonStandardBasesColor() + { + return _conf._specialBasesColor; + } + + /** + * Sets the color used to draw non-standard bases + * + * @param basesColor + * The color used to draw non-standard bases + */ + public void setNonStandardBasesColor(Color basesColor) + { + _conf._specialBasesColor = basesColor; + } + + /** + * Checks if the current translation doesn't "kick" the whole RNA out of the + * panel, and corrects the situation if necessary. + */ + public void checkTranslation() + { + // verification pour un zoom < 1 + if (this.getZoom() <= 1) + { + // verification sortie gauche + if (this.getTranslation().x < -(int) ((this.getWidth() + - this.getInnerWidth()) / 2.0)) + { + this.setTranslation(new Point( + -(int) ((this.getWidth() - this.getInnerWidth()) / 2.0), + this.getTranslation().y)); + } + // verification sortie droite + if (this.getTranslation().x > (int) ((this.getWidth() + - this.getInnerWidth()) / 2.0)) + { + this.setTranslation(new Point( + (int) ((this.getWidth() - this.getInnerWidth()) / 2.0), + this.getTranslation().y)); + } + // verification sortie bas + if (this.getTranslation().y > (int) ((this.getHeight() + - getTitleHeight() * 2 - this.getInnerHeight()) / 2.0)) + { + this.setTranslation(new Point(this.getTranslation().x, + (int) ((this.getHeight() - getTitleHeight() * 2 + - this.getInnerHeight()) / 2.0))); + } + // verification sortie haut + if (this.getTranslation().y < -(int) ((this.getHeight() + - this.getInnerHeight()) / 2.0)) + { + this.setTranslation(new Point(this.getTranslation().x, + -(int) ((this.getHeight() - this.getInnerHeight()) / 2.0))); + } + } + else + { + // zoom > 1 + Rectangle r2 = getZoomedInTranslationBox(); + int LBoundX = r2.x; + int UBoundX = r2.x + r2.width; + int LBoundY = r2.y; + int UBoundY = r2.y + r2.height; + if (this.getTranslation().x < LBoundX) + { + this.setTranslation(new Point(LBoundX, getTranslation().y)); + } + else if (this.getTranslation().x > UBoundX) + { + this.setTranslation(new Point(UBoundX, getTranslation().y)); + } + if (this.getTranslation().y < LBoundY) + { + this.setTranslation(new Point(getTranslation().x, LBoundY)); + } + else if (this.getTranslation().y > UBoundY) + { + this.setTranslation(new Point(getTranslation().x, UBoundY)); + } + } + } + + public Rectangle getZoomedInTranslationBox() + { + int LBoundX = -(int) ((this.getInnerWidth()) / 2.0); + int UBoundX = (int) ((this.getInnerWidth()) / 2.0); + int LBoundY = -(int) ((this.getInnerHeight()) / 2.0); + int UBoundY = (int) ((this.getInnerHeight()) / 2.0); + return new Rectangle(LBoundX, LBoundY, UBoundX - LBoundX, + UBoundY - LBoundY); + + } + + /** + * Returns the "real pixels" x-coordinate of the RNA. + * + * @return X-coordinate of the translation + */ + public int getLeftOffset() + { + return _border.width + ((this.getWidth() - 2 * _border.width) + - this.getInnerWidth()) / 2 + _translation.x; + } + + /** + * Returns the "real pixels" width of the drawing surface for our RNA. + * + * @return Width of the drawing surface for our RNA + */ + public int getInnerWidth() + { + // Largeur du dessin + return (int) Math + .round((this.getWidth() - 2 * _border.width) * _conf._zoom); + } + + /** + * Returns the "real pixels" y-coordinate of the RNA. + * + * @return Y-coordinate of the translation + */ + public int getTopOffset() + { + return _border.height + ((this.getHeight() - 2 * _border.height) + - this.getInnerHeight()) / 2 + _translation.y; + } + + /** + * Returns the "real pixels" height of the drawing surface for our RNA. + * + * @return Height of the drawing surface for our RNA + */ + public int getInnerHeight() + { + // Hauteur du dessin + return (int) Math.round((this.getHeight()) * _conf._zoom + - 2 * _border.height - getTitleHeight()); + } + + /** + * Checks if the current mode is the "comparison" mode + * + * @return True if comparison, false otherwise + */ + public boolean isComparisonMode() + { + return _conf._comparisonMode; + } + + /** + * Rotates the RNA coordinates by a certain angle + * + * @param angleDegres + * Rotation angle, in degrees + */ + public void globalRotation(Double angleDegres) + { + _RNA.globalRotation(angleDegres); + fireLayoutChanged(); + repaint(); + } + + /** + * Returns the index of the currently selected base, defaulting to the closest + * base to the last mouse-click. + * + * @return Index of the currently selected base + */ + public Integer getNearestBase() + { + return _nearestBase; + } + + /** + * Sets the index of the currently selected base. + * + * @param base + * Index of the new selected base + */ + public void setNearestBase(Integer base) + { + _nearestBase = base; + } + + /** + * Returns the color used to draw 'Gaps' bases in comparison mode + * + * @return Color used for 'Gaps' + */ + public Color getGapsBasesColor() + { + return _conf._dashBasesColor; + } + + /** + * Sets the color to use for 'Gaps' bases in comparison mode + * + * @param c + * Color used for 'Gaps' + */ + public void setGapsBasesColor(Color c) + { + _conf._dashBasesColor = c; + } + + @SuppressWarnings("unused") + private void imprimer() + { + // PrintPanel canvas; + // canvas = new PrintPanel(); + PrintRequestAttributeSet attributes; + attributes = new HashPrintRequestAttributeSet(); + try + { + PrinterJob job = PrinterJob.getPrinterJob(); + // job.setPrintable(this); + if (job.printDialog(attributes)) + { + job.print(attributes); + } + } catch (PrinterException exception) + { + errorDialog(exception); + } + } + + /** + * Checks whether errors are to be displayed + * + * @return Error display status + */ + public boolean isErrorsOn() + { + return _conf._errorsOn; + } + + /** + * Sets whether errors are to be displayed + * + * @param on + * New error display status + */ + public void setErrorsOn(boolean on) + { + _conf._errorsOn = on; + } + + /** + * Returns the view associated with user interactions + * + * @return A view associated with user interactions + */ + public VueUI getVARNAUI() + { + return _UI; + } + + /** + * Toggles on/off using base inner color for drawing base-pairs + * + * @param on + * True for using base inner color for drawing base-pairs, false for + * classic mode + */ + public void setUseBaseColorsForBPs(boolean on) + { + _conf._useBaseColorsForBPs = on; + } + + /** + * Returns true if current base color is used as inner color for drawing + * base-pairs + * + * @return True for using base inner color for drawing base-pairs, false for + * classic mode + */ + public boolean getUseBaseColorsForBPs() + { + return _conf._useBaseColorsForBPs; + } + + /** + * Toggles on/off using a special color used for drawing "non-standard" bases + * + * @param on + * True for using a special color used for drawing "non-standard" + * bases, false for classic mode + */ + public void setColorNonStandardBases(boolean on) + { + _conf._colorSpecialBases = on; + } + + /** + * Returns true if a special color is used as inner color for non-standard + * base + * + * @return True for using a special color used for drawing "non-standard" + * bases, false for classic mode + */ + public boolean getColorSpecialBases() + { + return _conf._colorSpecialBases; + } + + /** + * Toggles on/off using a special color used for drawing "Gaps" bases in + * comparison mode + * + * @param on + * True for using a special color used for drawing "Gaps" bases in + * comparison mode, false for classic mode + */ + public void setColorGapsBases(boolean on) + { + _conf._colorDashBases = on; + } + + /** + * Returns true if a special color is used for drawing "Gaps" bases in + * comparison mode + * + * @return True for using a special color used for drawing "Gaps" bases in + * comparison mode, false for classic mode + */ + public boolean getColorGapsBases() + { + return _conf._colorDashBases; + } + + /** + * Toggles on/off displaying warnings + * + * @param on + * True to display warnings, false otherwise + */ + public void setShowWarnings(boolean on) + { + _conf._showWarnings = on; + } + + /** + * Get current warning display status + * + * @return True to display warnings, false otherwise + */ + public boolean getShowWarnings() + { + return _conf._showWarnings; + } + + /** + * Toggles on/off displaying non-canonical base-pairs + * + * @param on + * True to display NC base-pairs, false otherwise + */ + public void setShowNonCanonicalBP(boolean on) + { + _conf._drawnNonCanonicalBP = on; + } + + /** + * Return the current display status for non-canonical base-pairs + * + * @return True if NC base-pairs are displayed, false otherwise + */ + public boolean getShowNonCanonicalBP() + { + return _conf._drawnNonCanonicalBP; + } + + /** + * Toggles on/off displaying "non-planar" base-pairs + * + * @param on + * True to display "non-planar" base-pairs, false otherwise + */ + public void setShowNonPlanarBP(boolean on) + { + _conf._drawnNonPlanarBP = on; + } + + /** + * Return the current display status for non-planar base-pairs + * + * @return True if non-planars base-pairs are displayed, false otherwise + */ + public boolean getShowNonPlanarBP() + { + return _conf._drawnNonPlanarBP; + } + + /** + * Sets the base-pair representation style + * + * @param st + * The new base-pair style + */ + public void setBPStyle(VARNAConfig.BP_STYLE st) + { + _conf._mainBPStyle = st; + } + + /** + * Returns the base-pair representation style + * + * @return The current base-pair style + */ + public VARNAConfig.BP_STYLE getBPStyle() + { + return _conf._mainBPStyle; + } + + /** + * Returns the current VARNA Panel configuration. The returned instance should + * not be modified directly, but rather through the getters/setters from the + * VARNAPanel class. + * + * @return Current configuration + */ + public VARNAConfig getConfig() + { + return _conf; + } + + /** + * Sets the background color + * + * @param c + * New background color + */ + public void setBackground(Color c) + { + if (_conf != null) + { + if (c != null) + { + _conf._backgroundColor = c; + _conf._drawBackground = (!c + .equals(VARNAConfig.DEFAULT_BACKGROUND_COLOR)); + } + else + { + _conf._backgroundColor = VARNAConfig.DEFAULT_BACKGROUND_COLOR; + _conf._drawBackground = false; + } + } + + } + + /** + * Starts highlighting the selected base. + */ + public void highlightSelectedBase(ModeleBase m) + { + ArrayList v = new ArrayList(); + int sel = m.getIndex(); + if (sel != -1) + { + v.add(sel); + } + setSelection(v); + } + + /** + * Starts highlighting the selected base. + */ + public void highlightSelectedStem(ModeleBase m) + { + ArrayList v = new ArrayList(); + int sel = m.getIndex(); + if (sel != -1) + { + ArrayList r = _RNA.findStem(sel); + v.addAll(r); + } + setSelection(v); + } + + public BaseList getSelection() + { + return _selectedBases; + } + + public ArrayList getSelectionIndices() + { + return _selectedBases.getIndices(); + } + + public void setSelection(ArrayList indices) + { + setSelection(_RNA.getBasesAt(indices)); + } + + public void setSelection(Collection mbs) + { + BaseList bck = new BaseList(_selectedBases); + _selectedBases.clear(); + _selectedBases.addBases(mbs); + _blink.setActive(true); + fireSelectionChanged(bck, _selectedBases); + } + + public ArrayList getBasesInRectangleDiff(Rectangle recIn, + Rectangle recOut) + { + ArrayList result = new ArrayList(); + for (int i = 0; i < _realCoords.length; i++) + { + if (recIn.contains(_realCoords[i]) ^ recOut.contains(_realCoords[i])) + result.add(i); + } + return result; + } + + public ArrayList getBasesInRectangle(Rectangle rec) + { + ArrayList result = new ArrayList(); + for (int i = 0; i < _realCoords.length; i++) + { + if (rec.contains(_realCoords[i])) + result.add(i); + } + return result; + } + + public void setSelectionRectangle(Rectangle rec) + { + ArrayList result = new ArrayList(); + if (_selectionRectangle != null) + { + result = getBasesInRectangleDiff(_selectionRectangle, rec); + } + else + { + result = getBasesInRectangle(rec); + } + _selectionRectangle = new Rectangle(rec); + toggleSelection(result); + repaint(); + } + + public void removeSelectionRectangle() + { + _selectionRectangle = null; + } + + public void addToSelection(Collection indices) + { + for (int i : indices) + { + addToSelection(i); + } + } + + public void addToSelection(int i) + { + BaseList bck = new BaseList(_selectedBases); + ModeleBase mb = _RNA.getBaseAt(i); + _selectedBases.addBase(mb); + _blink.setActive(true); + fireSelectionChanged(bck, _selectedBases); + } + + public void removeFromSelection(int i) + { + BaseList bck = new BaseList(_selectedBases); + ModeleBase mb = _RNA.getBaseAt(i); + _selectedBases.removeBase(mb); + if (_selectedBases.size() == 0) + { + _blink.setActive(false); + } + else + { + _blink.setActive(true); + } + fireSelectionChanged(bck, _selectedBases); + } + + public boolean isInSelection(int i) + { + return _selectedBases.contains(_RNA.getBaseAt(i)); + } + + public void toggleSelection(int i) + { + if (isInSelection(i)) + removeFromSelection(i); + else + addToSelection(i); + } + + public void toggleSelection(Collection indices) + { + for (int i : indices) + { + toggleSelection(i); + } + } + + /** + * Stops highlighting bases + */ + public void clearSelection() + { + BaseList bck = new BaseList(_selectedBases); + _selectedBases.clear(); + _blink.setActive(false); + repaint(); + fireSelectionChanged(bck, _selectedBases); + } + + public void saveSelection() + { + _backupSelection.clear(); + _backupSelection.addAll(_selectedBases.getBases()); + } + + public void restoreSelection() + { + setSelection(_backupSelection); + } + + /** + * Stops highlighting bases + */ + public void resetAnnotationHighlight() + { + _highlightAnnotation = false; + repaint(); + } + + /** + * Toggles on/off a rectangular outline of the bounding box. + * + * @param on + * True to draw the bounding box, false otherwise + */ + public void drawBBox(boolean on) + { + _drawBBox = on; + } + + /** + * Toggles on/off a rectangular outline of the border. + * + * @param on + * True to draw the bounding box, false otherwise + */ + public void drawBorder(boolean on) + { + _drawBorder = on; + } + + public void setBaseInnerColor(Color c) + { + _RNA.setBaseInnerColor(c); + } + + public void setBaseNumbersColor(Color c) + { + _RNA.setBaseNumbersColor(c); + } + + public void setBaseNameColor(Color c) + { + _RNA.setBaseNameColor(c); + } + + public void setBaseOutlineColor(Color c) + { + _RNA.setBaseOutlineColor(c); + } + + public ArrayList getListeAnnotations() + { + return _RNA.getAnnotations(); + } + + public void resetListeAnnotations() + { + _RNA.clearAnnotations(); + repaint(); + } + + public void addAnnotation(TextAnnotation textAnnotation) + { + _RNA.addAnnotation(textAnnotation); + repaint(); + } + + public boolean removeAnnotation(TextAnnotation textAnnotation) + { + boolean done = _RNA.removeAnnotation(textAnnotation); + repaint(); + return done; + } + + public TextAnnotation get_selectedAnnotation() + { + return _selectedAnnotation; + } + + public void set_selectedAnnotation(TextAnnotation annotation) + { + _selectedAnnotation = annotation; + } + + public void removeSelectedAnnotation() + { + _highlightAnnotation = false; + _selectedAnnotation = null; + } + + public void highlightSelectedAnnotation() + { + _highlightAnnotation = true; + } + + public boolean getFlatExteriorLoop() + { + return _conf._flatExteriorLoop; + } + + public void setFlatExteriorLoop(boolean on) + { + _conf._flatExteriorLoop = on; + } + + public void setLastSelectedPosition(Point2D.Double p) + { + _lastSelectedCoord.x = p.x; + _lastSelectedCoord.y = p.y; + } + + public Point2D.Double getLastSelectedPosition() + { + return _lastSelectedCoord; + } + + public void setSequence(String s) + { + _RNA.setSequence(s); + repaint(); + } + + public void setColorMapVisible(boolean b) + { + _conf._drawColorMap = b; + repaint(); + } + + public boolean getColorMapVisible() + { + return _conf._drawColorMap; + } + + public void removeColorMap() + { + _conf._drawColorMap = false; + repaint(); + } + + public void saveSession(String path) + { + /* + * FileOutputStream fos = null; ObjectOutputStream out = null; try { fos + * = new FileOutputStream(path); out = new ObjectOutputStream(fos); + * out.writeObject(new FullBackup(_conf, _RNA, _conf._title)); + * out.close(); } catch (Exception ex) { ex.printStackTrace(); } + */ + toXML(path); + } + + /** Added for Jalview */ + + public FullBackup loadSession(String path) throws ExceptionLoadingFailed + { + return loadSession(new File(path)); + } + + public FullBackup loadSession(File path) throws ExceptionLoadingFailed + { + + FullBackup bck = importSession(path); + Mapping map = Mapping.DefaultOutermostMapping(getRNA().getSize(), + bck.rna.getSize()); + showRNAInterpolated(bck.rna, map); + _conf = bck.config; + repaint(); + return bck; + } + + public static String VARNA_SESSION_EXTENSION = "varna"; + + public static FullBackup importSession(Object path) // BH was String + throws ExceptionLoadingFailed + { + try + { + FileInputStream fis = (path instanceof File + ? new FileInputStream((File) path) + : new FileInputStream(path.toString())); + // ZipInputStream zis = new + // ZipInputStream(new BufferedInputStream(fis)); + // zis.getNextEntry(); + FullBackup h = importSession(fis, path.toString()); + // zis.close(); + return h; + } catch (FileNotFoundException e) + { + throw (new ExceptionLoadingFailed("File not found.", + path.toString())); + } catch (IOException e) + { + // TODO Auto-generated catch block + throw (new ExceptionLoadingFailed("I/O error while loading session.", + path.toString())); + } + } + + public static FullBackup importSession(InputStream fis, String path) + throws ExceptionLoadingFailed + { + System.setProperty("javax.xml.parsers.SAXParserFactory", + "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"); + SAXParserFactory saxFact = javax.xml.parsers.SAXParserFactory + .newInstance(); + saxFact.setValidating(false); + saxFact.setXIncludeAware(false); + saxFact.setNamespaceAware(false); + try + { + SAXParser sp = saxFact.newSAXParser(); + VARNASessionParser sessionData = new VARNASessionParser(); + sp.parse(fis, sessionData); + FullBackup res = new FullBackup(sessionData.getVARNAConfig(), + sessionData.getRNA(), "test"); + return res; + } catch (ParserConfigurationException e) + { + throw new ExceptionLoadingFailed("Bad XML parser configuration", + path); + } catch (SAXException e) + { + throw new ExceptionLoadingFailed("XML parser Exception", path); + } catch (IOException e) + { + throw new ExceptionLoadingFailed("I/O error", path); + } + } + + public void loadFile(File path) + { + loadFile(path, false); + } + + public boolean getDrawBackbone() + { + return _conf._drawBackbone; + } + + public void setDrawBackbone(boolean b) + { + _conf._drawBackbone = b; + } + + public void addHighlightRegion(HighlightRegionAnnotation n) + { + _RNA.addHighlightRegion(n); + } + + public void removeHighlightRegion(HighlightRegionAnnotation n) + { + _RNA.removeHighlightRegion(n); + } + + public void addHighlightRegion(int i, int j) + { + _RNA.addHighlightRegion(i, j); + } + + public void addHighlightRegion(int i, int j, Color fill, Color outline, + double radius) + { + _RNA.addHighlightRegion(i, j, fill, outline, radius); + } + + public void loadRNA(String path) + { + loadRNA(path, false); + } + + public void loadRNA(Object path, boolean interpolate) + { // BH was String + try + { + Collection rnas = (path instanceof File + ? RNAFactory.loadSecStr(new FileReader((File) path)) + : RNAFactory.loadSecStr(path.toString())); + if (rnas.isEmpty()) + { + throw new ExceptionFileFormatOrSyntax( + "No RNA could be parsed from that source."); + } + RNA rna = rnas.iterator().next(); + try + { + rna.drawRNA(_conf); + } catch (ExceptionNAViewAlgorithm e) + { + e.printStackTrace(); + } + if (!interpolate) + { + showRNA(rna); + } + else + { + this.showRNAInterpolated(rna); + } + + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } catch (ExceptionFileFormatOrSyntax e) + { + e.printStackTrace(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public void loadFile(File path, boolean interpolate) + { // was String BH StringJS + try + { + loadSession(path); + } catch (Exception e1) + { + loadRNA(path, interpolate); + } + } + + public void setConfig(VARNAConfig cfg) + { + _conf = cfg; + } + + public void toggleDrawOutlineBases() + { + _conf._drawOutlineBases = !_conf._drawOutlineBases; + } + + public void toggleFillBases() + { + _conf._fillBases = !_conf._fillBases; + } + + public void setDrawOutlineBases(boolean drawn) + { + _conf._drawOutlineBases = drawn; + } + + public void setFillBases(boolean drawn) + { + _conf._fillBases = drawn; + } + + public void readValues(Reader r) + { + this._RNA.readValues(r, _conf._cm); + } + + public void addVARNAListener(InterfaceVARNAListener v) + { + _VARNAListeners.add(v); + } + + public void fireLayoutChanged() + { + for (InterfaceVARNAListener v : _VARNAListeners) + { + v.onStructureRedrawn(); + } + } + + public void fireUINewStructure(RNA r) + { + for (InterfaceVARNAListener v : _VARNAListeners) + { + v.onUINewStructure(_conf, r); + } + } + + public void fireZoomLevelChanged(double d) + { + for (InterfaceVARNAListener v : _VARNAListeners) + { + v.onZoomLevelChanged(); + } + } + + public void fireTranslationChanged() + { + for (InterfaceVARNAListener v2 : _VARNAListeners) + { + v2.onTranslationChanged(); + } + } + + public void addSelectionListener(InterfaceVARNASelectionListener v) + { + _selectionListeners.add(v); + } + + public void fireSelectionChanged(BaseList mold, BaseList mnew) + { + BaseList addedBases = mnew.removeAll(mold); + BaseList removedBases = mold.removeAll(mnew); + for (InterfaceVARNASelectionListener v2 : _selectionListeners) + { + v2.onSelectionChanged(mnew, addedBases, removedBases); + } + } + + public void fireHoverChanged(ModeleBase mold, ModeleBase mnew) + { + for (InterfaceVARNASelectionListener v2 : _selectionListeners) + { + v2.onHoverChanged(mold, mnew); + } + } + + public void addRNAListener(InterfaceVARNARNAListener v) + { + _RNAListeners.add(v); + } + + public void addVARNABasesListener(InterfaceVARNABasesListener l) + { + _basesListeners.add(l); + } + + public void fireSequenceChanged(int index, String oldseq, String newseq) + { + for (InterfaceVARNARNAListener v2 : _RNAListeners) + { + v2.onSequenceModified(index, oldseq, newseq); + } + } + + public void fireStructureChanged(Set current, + Set addedBasePairs, Set removedBasePairs) + { + for (InterfaceVARNARNAListener v2 : _RNAListeners) + { + v2.onStructureModified(current, addedBasePairs, removedBasePairs); + } + } + + public void fireLayoutChanged( + Hashtable movedPositions) + { + for (InterfaceVARNARNAListener v2 : _RNAListeners) + { + v2.onRNALayoutChanged(movedPositions); + } + } + + public void fireBaseClicked(ModeleBase mb, MouseEvent me) + { + if (mb != null) + { + for (InterfaceVARNABasesListener v2 : _basesListeners) + { + v2.onBaseClicked(mb, me); + } + } + } + + public double getOrientation() + { + return _RNA.getOrientation(); + } + + public ModeleBase _hoveredBase = null; + + public void setHoverBase(ModeleBase m) + { + if (m != _hoveredBase) + { + ModeleBase bck = _hoveredBase; + _hoveredBase = m; + repaint(); + fireHoverChanged(bck, m); + } + } + + public void toXML(String path) + { + FileOutputStream fis; + try + { + fis = new FileOutputStream(path); + // ZipOutputStream zis = new ZipOutputStream(new + // BufferedOutputStream(fis)); + // ZipEntry entry = new ZipEntry("VARNASession"); + // zis.putNextEntry(entry); + PrintWriter pw = new PrintWriter(fis); + toXML(pw); + pw.flush(); + // zis.closeEntry(); + // zis.close(); + fis.close(); + } catch (FileNotFoundException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void toXML(PrintWriter out) + { + try + { + + // out = new PrintWriter(System.out); + StreamResult streamResult = new StreamResult(out); + SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory + .newInstance(); + // SAX2.0 ContentHandler. + TransformerHandler hd = tf.newTransformerHandler(); + Transformer serializer = hd.getTransformer(); + serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); + serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "users.dtd"); + serializer.setOutputProperty(OutputKeys.INDENT, "yes"); + hd.setResult(streamResult); + hd.startDocument(); + toXML(hd); + hd.endDocument(); + } catch (TransformerConfigurationException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SAXException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public static String XML_ELEMENT_NAME = "VARNASession"; + + public void toXML(TransformerHandler hd) throws SAXException + { + AttributesImpl atts = new AttributesImpl(); + hd.startElement("", "", XML_ELEMENT_NAME, atts); + _RNA.toXML(hd); + _conf.toXML(hd); + hd.endElement("", "", XML_ELEMENT_NAME); + } + + public TextAnnotation getNearestAnnotation(int x, int y) + { + TextAnnotation t = null; + if (getListeAnnotations().size() != 0) + { + double dist = Double.MAX_VALUE; + double d2; + Point2D.Double position; + for (TextAnnotation textAnnot : getListeAnnotations()) + { + // calcul de la distance + position = textAnnot.getCenterPosition(); + position = transformCoord(position); + d2 = Math.sqrt(Math.pow((position.x - x), 2) + + Math.pow((position.y - y), 2)); + // si la valeur est inferieur au minimum actuel + if ((dist > d2) && (d2 < getScaleFactor() + * ControleurClicMovement.MIN_SELECTION_DISTANCE)) + { + t = textAnnot; + dist = d2; + } + } + } + return t; + } + + public ModeleBase getNearestBase(int x, int y, boolean always, + boolean onlyPaired) + { + int i = getNearestBaseIndex(x, y, always, onlyPaired); + if (i == -1) + return null; + return getRNA().get_listeBases().get(i); + } + + public ModeleBase getNearestBase(int x, int y) + { + return getNearestBase(x, y, false, false); + } + + public int getNearestBaseIndex(int x, int y, boolean always, + boolean onlyPaired) + { + double d2, dist = Double.MAX_VALUE; + int mb = -1; + for (int i = 0; i < getRealCoords().length; i++) + { + if (!onlyPaired || (getRNA().get_listeBases().get(i) + .getElementStructure() != -1)) + { + d2 = Math.sqrt(Math.pow((getRealCoords()[i].x - x), 2) + + Math.pow((getRealCoords()[i].y - y), 2)); + if ((dist > d2) && ((d2 < getScaleFactor() + * ControleurClicMovement.MIN_SELECTION_DISTANCE) || always)) + { + dist = d2; + mb = i; + } + } + } + return mb; + } + + public void globalRescale(double factor) + { + _RNA.rescale(factor); + fireLayoutChanged(); + repaint(); + } + + public void setSpaceBetweenBases(double sp) + { + _conf._spaceBetweenBases = sp; + } + + public double getSpaceBetweenBases() + { + return _conf._spaceBetweenBases; + } } diff --git a/srcjar/fr/orsay/lri/varna/applications/VARNAEditor.java b/srcjar/fr/orsay/lri/varna/applications/VARNAEditor.java index 818cfda..1495bcb 100644 --- a/srcjar/fr/orsay/lri/varna/applications/VARNAEditor.java +++ b/srcjar/fr/orsay/lri/varna/applications/VARNAEditor.java @@ -2,7 +2,7 @@ VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr - paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France + paper mail : LRI, bat 490 Universit� Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -86,574 +86,574 @@ import fr.orsay.lri.varna.models.rna.RNA; public class VARNAEditor extends JFrame implements DropTargetListener, InterfaceVARNAListener, MouseListener { - /** - * - */ -// private static final_long serialVersionUID = -790155708306987257L; - - private static final String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA"; - - private static final String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...))))).."; - private static final String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...))))).."; - // private static final String DEFAULT_STRUCTURE1 = "((((....))))"; - // private static final String DEFAULT_STRUCTURE2 = - // "((((..(((....)))..))))"; - - private VARNAPanel _vp; - - private JPanel _tools = new JPanel(); - private JPanel _input = new JPanel(); - - private JPanel _seqPanel = new JPanel(); - private JPanel _strPanel = new JPanel(); - private JLabel _info = new JLabel(); - - private JTextField _str = new JTextField(DEFAULT_STRUCTURE1); - Object _hoverHighlightStr = null; - ArrayList _selectionHighlightStr = new ArrayList(); - - private JTextField _seq = new JTextField(DEFAULT_SEQUENCE); - Object _hoverHighlightSeq = null; - ArrayList _selectionHighlightSeq = new ArrayList(); - - - private JLabel _strLabel = new JLabel(" Str:"); - private JLabel _seqLabel = new JLabel(" Seq:"); - private JButton _deleteButton = new JButton("Delete"); - private JButton _duplicateButton = new JButton("Duplicate"); - - private JPanel _listPanel = new JPanel(); - private ReorderableJList _sideList = null; - - - - private static String errorOpt = "error"; - @SuppressWarnings("unused") - private boolean _error; - - private Color _backgroundColor = Color.white; - - private static int _nextID = 1; - @SuppressWarnings("unused") - private int _algoCode; - - private BackupHolder _rnaList; - - - public VARNAEditor() { - super("VARNA Editor"); - RNAPanelDemoInit(); - } - - private void RNAPanelDemoInit() - { - DefaultListModel dlm = new DefaultListModel(); - - - int marginTools = 40; - - DefaultListSelectionModel m = new DefaultListSelectionModel(); - m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - m.setLeadAnchorNotificationEnabled(false); - - - _sideList = new ReorderableJList(); - _sideList.setModel(dlm); - _sideList.addMouseListener(this); - _sideList.setSelectionModel(m); - _sideList.setPreferredSize(new Dimension(100, 0)); - _sideList.addListSelectionListener( new ListSelectionListener(){ - public void valueChanged(ListSelectionEvent arg0) { - //System.out.println(arg0); - if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting()) - { - FullBackup sel = (FullBackup) _sideList.getSelectedValue(); - Mapping map = Mapping.DefaultOutermostMapping(_vp.getRNA().getSize(), sel.rna.getSize()); - _vp.showRNAInterpolated(sel.rna,sel.config,map); - _seq.setText(sel.rna.getSeq()); - _str.setText(sel.rna.getStructDBN(true)); - } - } - }); - - _rnaList = new BackupHolder(dlm,_sideList); - RNA _RNA1 = new RNA("User defined 1"); - RNA _RNA2 = new RNA("User defined 2"); - try { - _vp = new VARNAPanel("0","."); - _RNA1.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE1); - _RNA1.drawRNARadiate(_vp.getConfig()); - _RNA2.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE2); - _RNA2.drawRNARadiate(_vp.getConfig()); - } catch (ExceptionNonEqualLength e) { - _vp.errorDialog(e); - } catch (ExceptionUnmatchedClosingParentheses e2) { - e2.printStackTrace(); - } catch (ExceptionFileFormatOrSyntax e3) { - e3.printStackTrace(); - } - _vp.setPreferredSize(new Dimension(400, 400)); - // - - // BH 2018 this will NOT be a clone in SwingJS - _rnaList.add(_vp.getConfig().clone(),_RNA2,generateDefaultName()); - _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true); - - JScrollPane listScroller = new JScrollPane(_sideList); - listScroller.setPreferredSize(new Dimension(150, 0)); - - setBackground(_backgroundColor); - _vp.setBackground(_backgroundColor); - - - Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12"); - - _seqLabel.setHorizontalTextPosition(JLabel.LEFT); - _seqLabel.setPreferredSize(new Dimension(marginTools, 15)); - _seq.setFont(textFieldsFont); - _seq.setText(DEFAULT_SEQUENCE); - _seq.setEditable(false); - - - _seqPanel.setLayout(new BorderLayout()); - _seqPanel.add(_seqLabel, BorderLayout.WEST); - _seqPanel.add(_seq, BorderLayout.CENTER); - - _strLabel.setPreferredSize(new Dimension(marginTools, 15)); - _strLabel.setHorizontalTextPosition(JLabel.LEFT); - _str.setFont(textFieldsFont); - _str.setEditable(false); - _strPanel.setLayout(new BorderLayout()); - _strPanel.add(_strLabel, BorderLayout.WEST); - _strPanel.add(_str, BorderLayout.CENTER); - - _input.setLayout(new GridLayout(2, 0)); - _input.add(_seqPanel); - _input.add(_strPanel); - - - _tools.setLayout(new BorderLayout()); - _tools.add(_input, BorderLayout.CENTER); - _tools.add(_info, BorderLayout.SOUTH); - - _deleteButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _rnaList.removeSelected(); - } - }); -// _duplicateButton.addActionListener(new ActionListener() { -// public void actionPerformed(ActionEvent e) { -// _rnaList.add((VARNAConfig)_vp.getConfig().clone(),_vp.getRNA().clone(),_vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); -// }}); - - JPanel ops = new JPanel(); - ops.setLayout(new GridLayout(1,2)); - ops.add(_deleteButton); - ops.add(_duplicateButton); - - JLabel j = new JLabel("Structures",JLabel.CENTER); - _listPanel.setLayout(new BorderLayout()); - - _listPanel.add(ops,BorderLayout.SOUTH); - _listPanel.add(j,BorderLayout.NORTH); - _listPanel.add(listScroller,BorderLayout.CENTER); - - - JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,_vp); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(split, BorderLayout.CENTER); - getContentPane().add(_tools, BorderLayout.NORTH); - - setVisible(true); - DropTarget dt = new DropTarget(_vp, this); - - _vp.addRNAListener(new InterfaceVARNARNAListener(){ - public void onSequenceModified(int index, String oldseq, String newseq) { - _seq.setText(_vp.getRNA().getSeq()); - } - - public void onStructureModified(Set current, - Set addedBasePairs, Set removedBasePairs) { - _str.setText(_vp.getRNA().getStructDBN(true)); - } - - public void onRNALayoutChanged(Hashtable previousPositions) { - } - - }); - - _vp.addSelectionListener(new InterfaceVARNASelectionListener(){ - - public void onHoverChanged(ModeleBase oldbase, ModeleBase newBase) { - if (_hoverHighlightSeq!=null) - { - _seq.getHighlighter().removeHighlight(_hoverHighlightSeq); - _hoverHighlightSeq = null; - } - if (_hoverHighlightStr!=null) - { - _str.getHighlighter().removeHighlight(_hoverHighlightStr); - _hoverHighlightStr = null; - } - if (newBase!=null) - { - try { - _hoverHighlightSeq = _seq.getHighlighter().addHighlight(newBase.getIndex(), newBase.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); - _hoverHighlightStr = _str.getHighlighter().addHighlight(newBase.getIndex(), newBase.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - - public void onSelectionChanged(BaseList selection, - BaseList addedBases, BaseList removedBases) { - for(Object tag: _selectionHighlightSeq) - { - _seq.getHighlighter().removeHighlight(tag); - } - _selectionHighlightSeq.clear(); - for(Object tag: _selectionHighlightStr) - { - _str.getHighlighter().removeHighlight(tag); - } - _selectionHighlightStr.clear(); - for (ModeleBase m: selection.getBases()) - { - try { - _selectionHighlightSeq.add(_seq.getHighlighter().addHighlight(m.getIndex(), m.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); - _selectionHighlightStr.add(_str.getHighlighter().addHighlight(m.getIndex(), m.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - - }); - - _vp.addVARNAListener(this); - } - - public static String generateDefaultName() - { - return "User file #"+_nextID++; - } - - public RNA getRNA() { - return (RNA)_sideList.getSelectedValue(); - } - - - - public String[][] getParameterInfo() { - String[][] info = { - // Parameter Name Kind of Value Description, - { "sequenceDBN", "String", "A raw RNA sequence" }, - { "structureDBN", "String", - "An RNA structure in dot bracket notation (DBN)" }, - { errorOpt, "boolean", "To show errors" }, }; - return info; - } - - public void init() { - _vp.setBackground(_backgroundColor); - _error = true; - } - - @SuppressWarnings("unused") - private Color getSafeColor(String col, Color def) { - Color result; - try { - result = Color.decode(col); - } catch (Exception e) { - try { - result = Color.getColor(col, def); - } catch (Exception e2) { - return def; - } - } - return result; - } - - public VARNAPanel get_varnaPanel() { - return _vp; - } - - public void set_varnaPanel(VARNAPanel surface) { - _vp = surface; - } - - - public JTextField get_seq() { - return _seq; - } - - public void set_seq(JTextField _seq) { - this._seq = _seq; - } - - public JLabel get_info() { - return _info; - } - - public void set_info(JLabel _info) { - this._info = _info; - } - - public static void main(String[] args) { - VARNAEditor d = new VARNAEditor(); - d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - d.pack(); - d.setVisible(true); - } - - - public void dragEnter(DropTargetDragEvent arg0) { - // TODO Auto-generated method stub - - } - - public void dragExit(DropTargetEvent arg0) { - // TODO Auto-generated method stub - - } - - public void dragOver(DropTargetDragEvent arg0) { - // TODO Auto-generated method stub - - } - - public void drop(DropTargetDropEvent dtde) { - try { - Transferable tr = dtde.getTransferable(); - DataFlavor[] flavors = tr.getTransferDataFlavors(); - for (int i = 0; i < flavors.length; i++) { - if (flavors[i].isFlavorJavaFileListType()) { - dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); - Object ob = tr.getTransferData(flavors[i]); - if (ob instanceof List) - { - List list = (List) ob; - for (int j = 0; j < list.size(); j++) { - Object o = list.get(j); - - if (dtde.getSource() instanceof DropTarget) - { - DropTarget dt = (DropTarget) dtde.getSource(); - Component c = dt.getComponent(); - if (c instanceof VARNAPanel) - { - String path = o.toString(); - VARNAPanel vp = (VARNAPanel) c; - try{ - FullBackup bck = VARNAPanel.importSession((File) o); // BH SwingJS - _rnaList.add(bck.config, bck.rna,bck.name,true); - } - catch (ExceptionLoadingFailed e3) - { - Collection rnas = RNAFactory.loadSecStr((File) o); // BH SwingJS - if (rnas.isEmpty()) - { - throw new ExceptionFileFormatOrSyntax("No RNA could be parsed from that source."); - } - - int id = 1; - for(RNA r: rnas) - { - r.drawRNA(vp.getConfig()); - String name = r.getName(); - if (name.equals("")) - { - name = path.substring(path.lastIndexOf(File.separatorChar)+1); - } - if (rnas.size()>1) - { - name += " - Molecule# "+id++; - } - _rnaList.add(vp.getConfig().clone(),r,name,true); - } - } - } - } - } - } - // If we made it this far, everything worked. - dtde.dropComplete(true); - return; - } - } - // Hmm, the user must not have dropped a file list - dtde.rejectDrop(); - } catch (Exception e) { - e.printStackTrace(); - dtde.rejectDrop(); - } - - } - - public void dropActionChanged(DropTargetDragEvent arg0) { - } - - private class BackupHolder{ - private DefaultListModel _rnaList; - private ArrayList _rnas = new ArrayList(); - JList _l; - - public BackupHolder(DefaultListModel rnaList, JList l) - { - _rnaList = rnaList; - _l = l; - } - - public void add(VARNAConfig c, RNA r) - { - add(c, r, r.getName(),false); - } - - public void add(VARNAConfig c, RNA r,boolean select) - { - add(c, r, r.getName(),select); - } - - public void add(VARNAConfig c, RNA r, String name) - { - add(c, r, name,false); - } - public void add(VARNAConfig c, RNA r, String name, boolean select) - { - if (select){ - _l.removeSelectionInterval(0, _rnaList.size()); - } - if (name.equals("")) - { - name = generateDefaultName(); - } - FullBackup bck = new FullBackup(c,r,name); - _rnas.add(0, r); - _rnaList.add(0,bck); - if (select){ - _l.setSelectedIndex(0); - } - } - - public void remove(int i) - { - _rnas.remove(i); - _rnaList.remove(i); - - } - public DefaultListModel getModel() - { - return _rnaList; - } - public boolean contains(RNA r) - { - return _rnas.contains(r); - } - /*public int getSize() - { - return _rnaList.getSize(); - }*/ - public FullBackup getElementAt(int i) - { - return (FullBackup) _rnaList.getElementAt(i); - } - - public void removeSelected() - { - int i = _l.getSelectedIndex(); - if (i!=-1) - { - if (_rnaList.getSize()==1) - { - RNA r = new RNA(); - try { - r.setRNA(" ", "."); - } catch (ExceptionUnmatchedClosingParentheses e1) { - } catch (ExceptionFileFormatOrSyntax e1) { - } - _vp.showRNA(r); - _vp.repaint(); - } - else - { - int newi = i+1; - if (newi==_rnaList.getSize()) - { - newi = _rnaList.getSize()-2; - } - FullBackup bck = (FullBackup) _rnaList.getElementAt(newi); - _l.setSelectedValue(bck,true); - } - _rnaList.remove(i); - } - - } - } - - public void onStructureRedrawn() { - // TODO Auto-generated method stub - - } - - public void onUINewStructure(VARNAConfig v, RNA r) { - _rnaList.add(v, r,"",true); - } - - public void onWarningEmitted(String s) { - // TODO Auto-generated method stub - - } - - public void mouseClicked(MouseEvent e) { - if(e.getClickCount() == 2){ - int index = _sideList.locationToIndex(e.getPoint()); - ListModel dlm = _sideList.getModel(); - FullBackup item = (FullBackup) dlm.getElementAt(index);; - _sideList.ensureIndexIsVisible(index); - Object newName = JOptionPane.showInputDialog( - this, - "Specify a new name for this RNA", - "Rename RNA", - JOptionPane.QUESTION_MESSAGE, - (Icon)null, - null, - item.toString()); - if (newName!=null) - { - item.name = newName.toString(); - this._sideList.repaint(); - } - } - } - - public void mouseEntered(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mouseExited(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mousePressed(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mouseReleased(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void onZoomLevelChanged() { - // TODO Auto-generated method stub - - } - - public void onTranslationChanged() { - // TODO Auto-generated method stub - - } + /** + * + */ +// private static final_long serialVersionUID = -790155708306987257L; + + private static final String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA"; + + private static final String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...))))).."; + private static final String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...))))).."; + // private static final String DEFAULT_STRUCTURE1 = "((((....))))"; + // private static final String DEFAULT_STRUCTURE2 = + // "((((..(((....)))..))))"; + + private VARNAPanel _vp; + + private JPanel _tools = new JPanel(); + private JPanel _input = new JPanel(); + + private JPanel _seqPanel = new JPanel(); + private JPanel _strPanel = new JPanel(); + private JLabel _info = new JLabel(); + + private JTextField _str = new JTextField(DEFAULT_STRUCTURE1); + Object _hoverHighlightStr = null; + ArrayList _selectionHighlightStr = new ArrayList(); + + private JTextField _seq = new JTextField(DEFAULT_SEQUENCE); + Object _hoverHighlightSeq = null; + ArrayList _selectionHighlightSeq = new ArrayList(); + + + private JLabel _strLabel = new JLabel(" Str:"); + private JLabel _seqLabel = new JLabel(" Seq:"); + private JButton _deleteButton = new JButton("Delete"); + private JButton _duplicateButton = new JButton("Duplicate"); + + private JPanel _listPanel = new JPanel(); + private ReorderableJList _sideList = null; + + + + private static String errorOpt = "error"; + @SuppressWarnings("unused") + private boolean _error; + + private Color _backgroundColor = Color.white; + + private static int _nextID = 1; + @SuppressWarnings("unused") + private int _algoCode; + + private BackupHolder _rnaList; + + + public VARNAEditor() { + super("VARNA Editor"); + RNAPanelDemoInit(); + } + + private void RNAPanelDemoInit() + { + DefaultListModel dlm = new DefaultListModel(); + + + int marginTools = 40; + + DefaultListSelectionModel m = new DefaultListSelectionModel(); + m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + m.setLeadAnchorNotificationEnabled(false); + + + _sideList = new ReorderableJList(); + _sideList.setModel(dlm); + _sideList.addMouseListener(this); + _sideList.setSelectionModel(m); + _sideList.setPreferredSize(new Dimension(100, 0)); + _sideList.addListSelectionListener( new ListSelectionListener(){ + public void valueChanged(ListSelectionEvent arg0) { + //System.out.println(arg0); + if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting()) + { + FullBackup sel = (FullBackup) _sideList.getSelectedValue(); + Mapping map = Mapping.DefaultOutermostMapping(_vp.getRNA().getSize(), sel.rna.getSize()); + _vp.showRNAInterpolated(sel.rna,sel.config,map); + _seq.setText(sel.rna.getSeq()); + _str.setText(sel.rna.getStructDBN(true)); + } + } + }); + + _rnaList = new BackupHolder(dlm,_sideList); + RNA _RNA1 = new RNA("User defined 1"); + RNA _RNA2 = new RNA("User defined 2"); + try { + _vp = new VARNAPanel("0","."); + _RNA1.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE1); + _RNA1.drawRNARadiate(_vp.getConfig()); + _RNA2.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE2); + _RNA2.drawRNARadiate(_vp.getConfig()); + } catch (ExceptionNonEqualLength e) { + _vp.errorDialog(e); + } catch (ExceptionUnmatchedClosingParentheses e2) { + e2.printStackTrace(); + } catch (ExceptionFileFormatOrSyntax e3) { + e3.printStackTrace(); + } + _vp.setPreferredSize(new Dimension(400, 400)); + // + + // BH 2018 this will NOT be a clone in SwingJS + _rnaList.add(_vp.getConfig().clone(),_RNA2,generateDefaultName()); + _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true); + + JScrollPane listScroller = new JScrollPane(_sideList); + listScroller.setPreferredSize(new Dimension(150, 0)); + + setBackground(_backgroundColor); + _vp.setBackground(_backgroundColor); + + + Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12"); + + _seqLabel.setHorizontalTextPosition(JLabel.LEFT); + _seqLabel.setPreferredSize(new Dimension(marginTools, 15)); + _seq.setFont(textFieldsFont); + _seq.setText(DEFAULT_SEQUENCE); + _seq.setEditable(false); + + + _seqPanel.setLayout(new BorderLayout()); + _seqPanel.add(_seqLabel, BorderLayout.WEST); + _seqPanel.add(_seq, BorderLayout.CENTER); + + _strLabel.setPreferredSize(new Dimension(marginTools, 15)); + _strLabel.setHorizontalTextPosition(JLabel.LEFT); + _str.setFont(textFieldsFont); + _str.setEditable(false); + _strPanel.setLayout(new BorderLayout()); + _strPanel.add(_strLabel, BorderLayout.WEST); + _strPanel.add(_str, BorderLayout.CENTER); + + _input.setLayout(new GridLayout(2, 0)); + _input.add(_seqPanel); + _input.add(_strPanel); + + + _tools.setLayout(new BorderLayout()); + _tools.add(_input, BorderLayout.CENTER); + _tools.add(_info, BorderLayout.SOUTH); + + _deleteButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + _rnaList.removeSelected(); + } + }); +// _duplicateButton.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent e) { +// _rnaList.add((VARNAConfig)_vp.getConfig().clone(),_vp.getRNA().clone(),_vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); +// }}); + + JPanel ops = new JPanel(); + ops.setLayout(new GridLayout(1,2)); + ops.add(_deleteButton); + ops.add(_duplicateButton); + + JLabel j = new JLabel("Structures",JLabel.CENTER); + _listPanel.setLayout(new BorderLayout()); + + _listPanel.add(ops,BorderLayout.SOUTH); + _listPanel.add(j,BorderLayout.NORTH); + _listPanel.add(listScroller,BorderLayout.CENTER); + + + JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,_vp); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(split, BorderLayout.CENTER); + getContentPane().add(_tools, BorderLayout.NORTH); + + setVisible(true); + DropTarget dt = new DropTarget(_vp, this); + + _vp.addRNAListener(new InterfaceVARNARNAListener(){ + public void onSequenceModified(int index, String oldseq, String newseq) { + _seq.setText(_vp.getRNA().getSeq()); + } + + public void onStructureModified(Set current, + Set addedBasePairs, Set removedBasePairs) { + _str.setText(_vp.getRNA().getStructDBN(true)); + } + + public void onRNALayoutChanged(Hashtable previousPositions) { + } + + }); + + _vp.addSelectionListener(new InterfaceVARNASelectionListener(){ + + public void onHoverChanged(ModeleBase oldbase, ModeleBase newBase) { + if (_hoverHighlightSeq!=null) + { + _seq.getHighlighter().removeHighlight(_hoverHighlightSeq); + _hoverHighlightSeq = null; + } + if (_hoverHighlightStr!=null) + { + _str.getHighlighter().removeHighlight(_hoverHighlightStr); + _hoverHighlightStr = null; + } + if (newBase!=null) + { + try { + _hoverHighlightSeq = _seq.getHighlighter().addHighlight(newBase.getIndex(), newBase.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); + _hoverHighlightStr = _str.getHighlighter().addHighlight(newBase.getIndex(), newBase.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + + public void onSelectionChanged(BaseList selection, + BaseList addedBases, BaseList removedBases) { + for(Object tag: _selectionHighlightSeq) + { + _seq.getHighlighter().removeHighlight(tag); + } + _selectionHighlightSeq.clear(); + for(Object tag: _selectionHighlightStr) + { + _str.getHighlighter().removeHighlight(tag); + } + _selectionHighlightStr.clear(); + for (ModeleBase m: selection.getBases()) + { + try { + _selectionHighlightSeq.add(_seq.getHighlighter().addHighlight(m.getIndex(), m.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); + _selectionHighlightStr.add(_str.getHighlighter().addHighlight(m.getIndex(), m.getIndex()+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + + }); + + _vp.addVARNAListener(this); + } + + public static String generateDefaultName() + { + return "User file #"+_nextID++; + } + + public RNA getRNA() { + return (RNA)_sideList.getSelectedValue(); + } + + + + public String[][] getParameterInfo() { + String[][] info = { + // Parameter Name Kind of Value Description, + { "sequenceDBN", "String", "A raw RNA sequence" }, + { "structureDBN", "String", + "An RNA structure in dot bracket notation (DBN)" }, + { errorOpt, "boolean", "To show errors" }, }; + return info; + } + + public void init() { + _vp.setBackground(_backgroundColor); + _error = true; + } + + @SuppressWarnings("unused") + private Color getSafeColor(String col, Color def) { + Color result; + try { + result = Color.decode(col); + } catch (Exception e) { + try { + result = Color.getColor(col, def); + } catch (Exception e2) { + return def; + } + } + return result; + } + + public VARNAPanel get_varnaPanel() { + return _vp; + } + + public void set_varnaPanel(VARNAPanel surface) { + _vp = surface; + } + + + public JTextField get_seq() { + return _seq; + } + + public void set_seq(JTextField _seq) { + this._seq = _seq; + } + + public JLabel get_info() { + return _info; + } + + public void set_info(JLabel _info) { + this._info = _info; + } + + public static void main(String[] args) { + VARNAEditor d = new VARNAEditor(); + d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + d.pack(); + d.setVisible(true); + } + + + public void dragEnter(DropTargetDragEvent arg0) { + // TODO Auto-generated method stub + + } + + public void dragExit(DropTargetEvent arg0) { + // TODO Auto-generated method stub + + } + + public void dragOver(DropTargetDragEvent arg0) { + // TODO Auto-generated method stub + + } + + public void drop(DropTargetDropEvent dtde) { + try { + Transferable tr = dtde.getTransferable(); + DataFlavor[] flavors = tr.getTransferDataFlavors(); + for (int i = 0; i < flavors.length; i++) { + if (flavors[i].isFlavorJavaFileListType()) { + dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + Object ob = tr.getTransferData(flavors[i]); + if (ob instanceof List) + { + List list = (List) ob; + for (int j = 0; j < list.size(); j++) { + Object o = list.get(j); + + if (dtde.getSource() instanceof DropTarget) + { + DropTarget dt = (DropTarget) dtde.getSource(); + Component c = dt.getComponent(); + if (c instanceof VARNAPanel) + { + String path = o.toString(); + VARNAPanel vp = (VARNAPanel) c; + try{ + FullBackup bck = VARNAPanel.importSession((File) o); // BH SwingJS + _rnaList.add(bck.config, bck.rna,bck.name,true); + } + catch (ExceptionLoadingFailed e3) + { + Collection rnas = RNAFactory.loadSecStr((File) o); // BH SwingJS + if (rnas.isEmpty()) + { + throw new ExceptionFileFormatOrSyntax("No RNA could be parsed from that source."); + } + + int id = 1; + for(RNA r: rnas) + { + r.drawRNA(vp.getConfig()); + String name = r.getName(); + if (name.equals("")) + { + name = path.substring(path.lastIndexOf(File.separatorChar)+1); + } + if (rnas.size()>1) + { + name += " - Molecule# "+id++; + } + _rnaList.add(vp.getConfig().clone(),r,name,true); + } + } + } + } + } + } + // If we made it this far, everything worked. + dtde.dropComplete(true); + return; + } + } + // Hmm, the user must not have dropped a file list + dtde.rejectDrop(); + } catch (Exception e) { + e.printStackTrace(); + dtde.rejectDrop(); + } + + } + + public void dropActionChanged(DropTargetDragEvent arg0) { + } + + private class BackupHolder{ + private DefaultListModel _rnaList; + private ArrayList _rnas = new ArrayList(); + JList _l; + + public BackupHolder(DefaultListModel rnaList, JList l) + { + _rnaList = rnaList; + _l = l; + } + + public void add(VARNAConfig c, RNA r) + { + add(c, r, r.getName(),false); + } + + public void add(VARNAConfig c, RNA r,boolean select) + { + add(c, r, r.getName(),select); + } + + public void add(VARNAConfig c, RNA r, String name) + { + add(c, r, name,false); + } + public void add(VARNAConfig c, RNA r, String name, boolean select) + { + if (select){ + _l.removeSelectionInterval(0, _rnaList.size()); + } + if (name.equals("")) + { + name = generateDefaultName(); + } + FullBackup bck = new FullBackup(c,r,name); + _rnas.add(0, r); + _rnaList.add(0,bck); + if (select){ + _l.setSelectedIndex(0); + } + } + + public void remove(int i) + { + _rnas.remove(i); + _rnaList.remove(i); + + } + public DefaultListModel getModel() + { + return _rnaList; + } + public boolean contains(RNA r) + { + return _rnas.contains(r); + } + /*public int getSize() + { + return _rnaList.getSize(); + }*/ + public FullBackup getElementAt(int i) + { + return (FullBackup) _rnaList.getElementAt(i); + } + + public void removeSelected() + { + int i = _l.getSelectedIndex(); + if (i!=-1) + { + if (_rnaList.getSize()==1) + { + RNA r = new RNA(); + try { + r.setRNA(" ", "."); + } catch (ExceptionUnmatchedClosingParentheses e1) { + } catch (ExceptionFileFormatOrSyntax e1) { + } + _vp.showRNA(r); + _vp.repaint(); + } + else + { + int newi = i+1; + if (newi==_rnaList.getSize()) + { + newi = _rnaList.getSize()-2; + } + FullBackup bck = (FullBackup) _rnaList.getElementAt(newi); + _l.setSelectedValue(bck,true); + } + _rnaList.remove(i); + } + + } + } + + public void onStructureRedrawn() { + // TODO Auto-generated method stub + + } + + public void onUINewStructure(VARNAConfig v, RNA r) { + _rnaList.add(v, r,"",true); + } + + public void onWarningEmitted(String s) { + // TODO Auto-generated method stub + + } + + public void mouseClicked(MouseEvent e) { + if(e.getClickCount() == 2){ + int index = _sideList.locationToIndex(e.getPoint()); + ListModel dlm = _sideList.getModel(); + FullBackup item = (FullBackup) dlm.getElementAt(index);; + _sideList.ensureIndexIsVisible(index); + Object newName = JOptionPane.showInputDialog( + this, + "Specify a new name for this RNA", + "Rename RNA", + JOptionPane.QUESTION_MESSAGE, + (Icon)null, + null, + item.toString()); + if (newName!=null) + { + item.name = newName.toString(); + this._sideList.repaint(); + } + } + } + + public void mouseEntered(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mouseExited(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mousePressed(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mouseReleased(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void onZoomLevelChanged() { + // TODO Auto-generated method stub + + } + + public void onTranslationChanged() { + // TODO Auto-generated method stub + + } } diff --git a/srcjar/fr/orsay/lri/varna/applications/VARNAGUI.java b/srcjar/fr/orsay/lri/varna/applications/VARNAGUI.java index e62503f..80075f9 100644 --- a/srcjar/fr/orsay/lri/varna/applications/VARNAGUI.java +++ b/srcjar/fr/orsay/lri/varna/applications/VARNAGUI.java @@ -2,7 +2,7 @@ VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr - paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France + paper mail : LRI, bat 490 Universit� Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -94,698 +94,698 @@ import fr.orsay.lri.varna.models.rna.RNA; public class VARNAGUI extends JFrame implements DropTargetListener, InterfaceVARNAListener, MouseListener, AdjustmentListener { - /** - * - */ - private static final long serialVersionUID = -790155708306987257L; - - private static final String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA"; - - private static final String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...))))).."; - private static final String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...))))).."; - // private static final String DEFAULT_STRUCTURE1 = "((((....))))"; - // private static final String DEFAULT_STRUCTURE2 = - // "((((..(((....)))..))))"; - - private VARNAPanel _vp; - - private JPanel _tools = new JPanel(); - private JPanel _input = new JPanel(); - - private JPanel _seqPanel = new JPanel(); - private JPanel _strPanel = new JPanel(); - private JLabel _info = new JLabel(); - - private JTextField _str = new JTextField(DEFAULT_STRUCTURE1); - Object _hoverHighlightStr = null; - ArrayList _selectionHighlightStr = new ArrayList(); - - private JTextField _seq = new JTextField(DEFAULT_SEQUENCE); - Object _hoverHighlightSeq = null; - ArrayList _selectionHighlightSeq = new ArrayList(); - - - private ZoomWindow _zoomWindow; - private JLabel _strLabel = new JLabel(" Str:"); - private JLabel _seqLabel = new JLabel(" Seq:"); - private JButton _createButton = new JButton("Create"); - private JButton _deleteButton = new JButton("Delete"); - private JButton _duplicateButton = new JButton("Snapshot"); - - private JPanel _listPanel = new JPanel(); - private ReorderableJList _sideList = null; - - - private static String errorOpt = "error"; - @SuppressWarnings("unused") - private boolean _error; - - private Color _backgroundColor = Color.white; - - private JScrollBar _vert = new JScrollBar(JScrollBar.VERTICAL); - private JScrollBar _horiz = new JScrollBar(JScrollBar.HORIZONTAL); - - private static int _nextID = 1; - @SuppressWarnings("unused") - private int _algoCode; - - private BackupHolder _rnaList; - - - public VARNAGUI() { - super("VARNA GUI"); - RNAPanelDemoInit(); - } - - private void RNAPanelDemoInit() - { - DefaultListModel dlm = new DefaultListModel(); - - - int marginTools = 40; - - DefaultListSelectionModel m = new DefaultListSelectionModel(); - m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - m.setLeadAnchorNotificationEnabled(false); - - - _sideList = new ReorderableJList(); - _sideList.setModel(dlm); - _sideList.addMouseListener(this); - _sideList.setSelectionModel(m); - _sideList.setPreferredSize(null); - - _sideList.addListSelectionListener( new ListSelectionListener(){ - public void valueChanged(ListSelectionEvent arg0) { - //System.out.println(arg0); - if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting()) - { - FullBackup sel = (FullBackup) _sideList.getSelectedValue(); - _vp.setConfig(sel.config); - showRNA(sel.rna); - _seq.setText(sel.rna.getSeq()); - _str.setText(sel.rna.getStructDBN(true)); - } - } - }); - - _rnaList = new BackupHolder(dlm,_sideList); - RNA _RNA1 = new RNA("User defined 1"); - RNA _RNA2 = new RNA("User defined 2"); - try { - _vp = new VARNAPanel("0","."); - _zoomWindow = new ZoomWindow(_vp); - _RNA1.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE1); - _RNA1.drawRNARadiate(_vp.getConfig()); - _RNA2.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE2); - _RNA2.drawRNARadiate(_vp.getConfig()); - } catch (ExceptionNonEqualLength e) { - _vp.errorDialog(e); - } catch (ExceptionUnmatchedClosingParentheses e2) { - e2.printStackTrace(); - } catch (ExceptionFileFormatOrSyntax e3) { - e3.printStackTrace(); - } - _vp.setPreferredSize(new Dimension(400, 400)); - _rnaList.add(_vp.getConfig().clone(),_RNA2,generateDefaultName()); - _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true); - - - JScrollPane listScroller = new JScrollPane(_sideList);//,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - listScroller.setPreferredSize(new Dimension(150, 0)); - - setBackground(_backgroundColor); - _vp.setBackground(_backgroundColor); - - - Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12"); - - _seqLabel.setHorizontalTextPosition(JLabel.LEFT); - _seqLabel.setPreferredSize(new Dimension(marginTools, 15)); - _seq.setFont(textFieldsFont); - _seq.setText(DEFAULT_SEQUENCE); - - _createButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - RNA nRNA = new RNA(generateDefaultName()); - nRNA.setRNA(_seq.getText(), _str.getText()); - nRNA.drawRNARadiate(_vp.getConfig()); - _rnaList.add(new VARNAConfig(),nRNA,true); - } catch (ExceptionUnmatchedClosingParentheses e1) { - JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE); - } catch (ExceptionFileFormatOrSyntax e1) { - JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE); - } - } - }); - - - _seqPanel.setLayout(new BorderLayout()); - _seqPanel.add(_seqLabel, BorderLayout.WEST); - _seqPanel.add(_seq, BorderLayout.CENTER); - - _strLabel.setPreferredSize(new Dimension(marginTools, 15)); - _strLabel.setHorizontalTextPosition(JLabel.LEFT); - _str.setFont(textFieldsFont); - _strPanel.setLayout(new BorderLayout()); - _strPanel.add(_strLabel, BorderLayout.WEST); - _strPanel.add(_str, BorderLayout.CENTER); - - _input.setLayout(new GridLayout(2, 0)); - _input.add(_seqPanel); - _input.add(_strPanel); - - JPanel goPanel = new JPanel(); - goPanel.setLayout(new BorderLayout()); - - _tools.setLayout(new BorderLayout()); - _tools.add(_input, BorderLayout.CENTER); - _tools.add(_info, BorderLayout.SOUTH); - _tools.add(goPanel, BorderLayout.EAST); - - _deleteButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _rnaList.removeSelected(); - } - }); - // BH 2018 SwingJS can't clone, as it does not implement serialization - if (/** @j2sNative false && */ true) - _duplicateButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _rnaList.add((VARNAConfig)_vp.getConfig().clone(),_vp.getRNA().clone(),_vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); - }}); - - JPanel ops = new JPanel(); - ops.setLayout(new GridLayout(1,2)); - ops.add(_deleteButton); + /** + * + */ + private static final long serialVersionUID = -790155708306987257L; + + private static final String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA"; + + private static final String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...))))).."; + private static final String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...))))).."; + // private static final String DEFAULT_STRUCTURE1 = "((((....))))"; + // private static final String DEFAULT_STRUCTURE2 = + // "((((..(((....)))..))))"; + + private VARNAPanel _vp; + + private JPanel _tools = new JPanel(); + private JPanel _input = new JPanel(); + + private JPanel _seqPanel = new JPanel(); + private JPanel _strPanel = new JPanel(); + private JLabel _info = new JLabel(); + + private JTextField _str = new JTextField(DEFAULT_STRUCTURE1); + Object _hoverHighlightStr = null; + ArrayList _selectionHighlightStr = new ArrayList(); + + private JTextField _seq = new JTextField(DEFAULT_SEQUENCE); + Object _hoverHighlightSeq = null; + ArrayList _selectionHighlightSeq = new ArrayList(); + + + private ZoomWindow _zoomWindow; + private JLabel _strLabel = new JLabel(" Str:"); + private JLabel _seqLabel = new JLabel(" Seq:"); + private JButton _createButton = new JButton("Create"); + private JButton _deleteButton = new JButton("Delete"); + private JButton _duplicateButton = new JButton("Snapshot"); + + private JPanel _listPanel = new JPanel(); + private ReorderableJList _sideList = null; + + + private static String errorOpt = "error"; + @SuppressWarnings("unused") + private boolean _error; + + private Color _backgroundColor = Color.white; + + private JScrollBar _vert = new JScrollBar(JScrollBar.VERTICAL); + private JScrollBar _horiz = new JScrollBar(JScrollBar.HORIZONTAL); + + private static int _nextID = 1; + @SuppressWarnings("unused") + private int _algoCode; + + private BackupHolder _rnaList; + + + public VARNAGUI() { + super("VARNA GUI"); + RNAPanelDemoInit(); + } + + private void RNAPanelDemoInit() + { + DefaultListModel dlm = new DefaultListModel(); + + + int marginTools = 40; + + DefaultListSelectionModel m = new DefaultListSelectionModel(); + m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + m.setLeadAnchorNotificationEnabled(false); + + + _sideList = new ReorderableJList(); + _sideList.setModel(dlm); + _sideList.addMouseListener(this); + _sideList.setSelectionModel(m); + _sideList.setPreferredSize(null); + + _sideList.addListSelectionListener( new ListSelectionListener(){ + public void valueChanged(ListSelectionEvent arg0) { + //System.out.println(arg0); + if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting()) + { + FullBackup sel = (FullBackup) _sideList.getSelectedValue(); + _vp.setConfig(sel.config); + showRNA(sel.rna); + _seq.setText(sel.rna.getSeq()); + _str.setText(sel.rna.getStructDBN(true)); + } + } + }); + + _rnaList = new BackupHolder(dlm,_sideList); + RNA _RNA1 = new RNA("User defined 1"); + RNA _RNA2 = new RNA("User defined 2"); + try { + _vp = new VARNAPanel("0","."); + _zoomWindow = new ZoomWindow(_vp); + _RNA1.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE1); + _RNA1.drawRNARadiate(_vp.getConfig()); + _RNA2.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE2); + _RNA2.drawRNARadiate(_vp.getConfig()); + } catch (ExceptionNonEqualLength e) { + _vp.errorDialog(e); + } catch (ExceptionUnmatchedClosingParentheses e2) { + e2.printStackTrace(); + } catch (ExceptionFileFormatOrSyntax e3) { + e3.printStackTrace(); + } + _vp.setPreferredSize(new Dimension(400, 400)); + _rnaList.add(_vp.getConfig().clone(),_RNA2,generateDefaultName()); + _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true); + + + JScrollPane listScroller = new JScrollPane(_sideList);//,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + listScroller.setPreferredSize(new Dimension(150, 0)); + + setBackground(_backgroundColor); + _vp.setBackground(_backgroundColor); + + + Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12"); + + _seqLabel.setHorizontalTextPosition(JLabel.LEFT); + _seqLabel.setPreferredSize(new Dimension(marginTools, 15)); + _seq.setFont(textFieldsFont); + _seq.setText(DEFAULT_SEQUENCE); + + _createButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + RNA nRNA = new RNA(generateDefaultName()); + nRNA.setRNA(_seq.getText(), _str.getText()); + nRNA.drawRNARadiate(_vp.getConfig()); + _rnaList.add(new VARNAConfig(),nRNA,true); + } catch (ExceptionUnmatchedClosingParentheses e1) { + JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE); + } catch (ExceptionFileFormatOrSyntax e1) { + JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE); + } + } + }); + + + _seqPanel.setLayout(new BorderLayout()); + _seqPanel.add(_seqLabel, BorderLayout.WEST); + _seqPanel.add(_seq, BorderLayout.CENTER); + + _strLabel.setPreferredSize(new Dimension(marginTools, 15)); + _strLabel.setHorizontalTextPosition(JLabel.LEFT); + _str.setFont(textFieldsFont); + _strPanel.setLayout(new BorderLayout()); + _strPanel.add(_strLabel, BorderLayout.WEST); + _strPanel.add(_str, BorderLayout.CENTER); + + _input.setLayout(new GridLayout(2, 0)); + _input.add(_seqPanel); + _input.add(_strPanel); + + JPanel goPanel = new JPanel(); + goPanel.setLayout(new BorderLayout()); + + _tools.setLayout(new BorderLayout()); + _tools.add(_input, BorderLayout.CENTER); + _tools.add(_info, BorderLayout.SOUTH); + _tools.add(goPanel, BorderLayout.EAST); + + _deleteButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + _rnaList.removeSelected(); + } + }); + // BH 2018 SwingJS can't clone, as it does not implement serialization + if (/** @j2sNative false && */ true) + _duplicateButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + _rnaList.add((VARNAConfig)_vp.getConfig().clone(),_vp.getRNA().clone(),_vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); + }}); + + JPanel ops = new JPanel(); + ops.setLayout(new GridLayout(1,2)); + ops.add(_deleteButton); if (/** @j2sNative false && */ true) ops.add(_duplicateButton); - - JPanel opspanel = new JPanel(new BorderLayout()); - opspanel.add(ops,BorderLayout.NORTH); - opspanel.add(_zoomWindow,BorderLayout.SOUTH); - - _zoomWindow.setPreferredSize(new Dimension(-1,200)); - - - JLabel j = new JLabel("Structure Manager",JLabel.CENTER); - _listPanel.setLayout(new BorderLayout()); - - _listPanel.add(opspanel,BorderLayout.SOUTH); - _listPanel.add(j,BorderLayout.NORTH); - _listPanel.add(listScroller,BorderLayout.CENTER); - - goPanel.add(_createButton, BorderLayout.CENTER); - - JPanel vpScroll = new JPanel(); - vpScroll.setLayout(new BorderLayout()); - _horiz.setVisible(false); - _horiz.addAdjustmentListener(this); - _vert.setVisible(false); - _vert.addAdjustmentListener(this); - vpScroll.add(_horiz,BorderLayout.SOUTH); - vpScroll.add(_vert,BorderLayout.EAST); - vpScroll.add(_vp,BorderLayout.CENTER); - JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,vpScroll); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(split, BorderLayout.CENTER); - getContentPane().add(_tools, BorderLayout.NORTH); - - - setVisible(true); - DropTarget dt = new DropTarget(_vp, this); - - _vp.addRNAListener(new InterfaceVARNARNAListener(){ - public void onSequenceModified(int index, String oldseq, String newseq) { - //System.out.println("Sequence changed: Index:"+index+" ["+oldseq+"]=>["+newseq+"]"); - } - - public void onStructureModified(Set current, - Set addedBasePairs, Set removedBasePairs) { - String result = ""; - //System.out.println("Structure changed: "); - for (ModeleBP s:addedBasePairs) - { result +=s; } - //System.out.println(" Added: "+result); - result = ""; - for (ModeleBP s:removedBasePairs) - { result +=s; } - //System.out.println(" Removed: "+result); - } - - public void onRNALayoutChanged(Hashtable previousPositions) { - //System.out.print("Layout changed, bases#: "); - String result = ""; - for (Integer s:previousPositions.keySet()) - { result +=s+" "; } - //System.out.println(result); - } - - }); - - _vp.addSelectionListener(new InterfaceVARNASelectionListener(){ - - public void onHoverChanged(ModeleBase oldbase, ModeleBase newBase) { - if (_hoverHighlightSeq!=null) - { - _seq.getHighlighter().removeHighlight(_hoverHighlightSeq); - _hoverHighlightSeq = null; - } - if (_hoverHighlightStr!=null) - { - _str.getHighlighter().removeHighlight(_hoverHighlightStr); - _hoverHighlightStr = null; - } - if (newBase!=null) - { - try { - int i = newBase.getIndex(); - int[] shifts = _vp.getRNA().getStrandShifts(); - _hoverHighlightSeq = _seq.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); - _hoverHighlightStr = _str.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - - public void onSelectionChanged(BaseList selection, - BaseList addedBases, BaseList removedBases) { - for(Object tag: _selectionHighlightSeq) - { - _seq.getHighlighter().removeHighlight(tag); - } - _selectionHighlightSeq.clear(); - for(Object tag: _selectionHighlightStr) - { - _str.getHighlighter().removeHighlight(tag); - } - _selectionHighlightStr.clear(); - int[] shifts = _vp.getRNA().getStrandShifts(); - for (ModeleBase m: selection.getBases()) - { - try { - int i = m.getIndex(); - _selectionHighlightSeq.add(_seq.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); - _selectionHighlightStr.add(_str.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - - }); - - _vp.addVARNAListener(this); - - new Thread(_zoomWindow).start(); - } - - protected void showRNA(RNA rna) { - _vp.showRNAInterpolated(rna); - _zoomWindow.repaint(); - } - - - public void addRNA(RNA r, VARNAConfig cfg) - { - _rnaList.add(cfg,r); - } - - public static String generateDefaultName() - { - return "User file #"+_nextID++; - } - - public RNA getRNA() { - return (RNA)_sideList.getSelectedValue(); - } - - - - public String[][] getParameterInfo() { - String[][] info = { - // Parameter Name Kind of Value Description, - { "sequenceDBN", "String", "A raw RNA sequence" }, - { "structureDBN", "String", - "An RNA structure in dot bracket notation (DBN)" }, - { errorOpt, "boolean", "To show errors" }, }; - return info; - } - - public void init() { - _vp.setBackground(_backgroundColor); - _error = true; - } - - @SuppressWarnings("unused") - private Color getSafeColor(String col, Color def) { - Color result; - try { - result = Color.decode(col); - } catch (Exception e) { - try { - result = Color.getColor(col, def); - } catch (Exception e2) { - return def; - } - } - return result; - } - - public VARNAPanel get_varnaPanel() { - return _vp; - } - - public void set_varnaPanel(VARNAPanel surface) { - _vp = surface; - } - - - public JTextField get_seq() { - return _seq; - } - - public void set_seq(JTextField _seq) { - this._seq = _seq; - } - - public JLabel get_info() { - return _info; - } - - public void set_info(JLabel _info) { - this._info = _info; - } - - public static void main(String[] args) { - List icons = new ArrayList(); - //JOptionPane.showMessageDialog(null, ""+Toolkit.getDefaultToolkit().getImage("./VARNA16x16.png"), "Check", JOptionPane.INFORMATION_MESSAGE); - icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA16x16.png")); - icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA32x32.png")); - icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA64x64.png")); - VARNAGUI d = new VARNAGUI(); - d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - d.pack(); - d.setIconImages(icons); - d.setVisible(true); - } - - - public void dragEnter(DropTargetDragEvent arg0) { - // TODO Auto-generated method stub - - } - - public void dragExit(DropTargetEvent arg0) { - // TODO Auto-generated method stub - - } - - public void dragOver(DropTargetDragEvent arg0) { - // TODO Auto-generated method stub - - } - - public void drop(DropTargetDropEvent dtde) { - try { - Transferable tr = dtde.getTransferable(); - DataFlavor[] flavors = tr.getTransferDataFlavors(); - for (int i = 0; i < flavors.length; i++) { - if (flavors[i].isFlavorJavaFileListType()) { - dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); - Object ob = tr.getTransferData(flavors[i]); - if (ob instanceof List) - { - List list = (List) ob; - for (int j = 0; j < list.size(); j++) { - Object o = list.get(j); - - if (dtde.getSource() instanceof DropTarget) - { - DropTarget dt = (DropTarget) dtde.getSource(); - Component c = dt.getComponent(); - if (c instanceof VARNAPanel) - { - String path = o.toString(); - VARNAPanel vp = (VARNAPanel) c; - try{ - FullBackup bck = VARNAPanel.importSession((File) o); // BH SwingJS - _rnaList.add(bck.config, bck.rna,bck.name,true); - } - catch (ExceptionLoadingFailed e3) - { - ArrayList rnas = RNAFactory.loadSecStr((File) o); // BH SwingJS - if (rnas.isEmpty()) - { - throw new ExceptionFileFormatOrSyntax("No RNA could be parsed from that source."); - } - - dtde.dropComplete(true); - _vp.getVARNAUI().UIChooseRNAs(rnas); - return; - /* - for(RNA r: rnas) - { - r.drawRNA(vp.getConfig()); - String name = r.getName(); - if (name.equals("")) - { - name = path.substring(path.lastIndexOf(File.separatorChar)+1); - } - if (rnas.size()>1) - { - name += " - Molecule# "+id++; - } - _rnaList.add(vp.getConfig().clone(),r,name,true); - }*/ - } - } - } - } - } - // If we made it this far, everything worked. - dtde.dropComplete(true); - return; - } - } - // Hmm, the user must not have dropped a file list - dtde.rejectDrop(); - } catch (Exception e) { - e.printStackTrace(); - dtde.rejectDrop(); - } - - } - - public void dropActionChanged(DropTargetDragEvent arg0) { - } - - private class BackupHolder{ - private DefaultListModel _rnaList; - private ArrayList _rnas = new ArrayList(); - JList _l; - - public BackupHolder(DefaultListModel rnaList, JList l) - { - _rnaList = rnaList; - _l = l; - } - - public void add(VARNAConfig c, RNA r) - { - add(c, r, r.getName(),false); - } - - public void add(VARNAConfig c, RNA r,boolean select) - { - add(c, r, r.getName(),select); - } - - public void add(VARNAConfig c, RNA r, String name) - { - add(c, r, name,false); - } - public void add(VARNAConfig c, RNA r, String name, boolean select) - { - if (!_rnas.contains(r)) - { - if (select){ - _l.removeSelectionInterval(0, _rnaList.size()); - } - if (name.equals("")) - { - name = generateDefaultName(); - } - FullBackup bck = new FullBackup(c,r,name); - _rnas.add(0, r); - _rnaList.add(0,bck); - _l.doLayout(); - if (select){ - _l.setSelectedIndex(0); - } - } - } - - public void remove(int i) - { - _rnas.remove(i); - _rnaList.remove(i); - - } - public DefaultListModel getModel() - { - return _rnaList; - } - public boolean contains(RNA r) - { - return _rnas.contains(r); - } - /*public int getSize() - { - return _rnaList.getSize(); - }*/ - public FullBackup getElementAt(int i) - { - return (FullBackup) _rnaList.getElementAt(i); - } - - public void removeSelected() - { - int i = _l.getSelectedIndex(); - if (i!=-1) - { - if (_rnaList.getSize()==1) - { - RNA r = new RNA(); - try { - r.setRNA(" ", "."); - } catch (ExceptionUnmatchedClosingParentheses e1) { - } catch (ExceptionFileFormatOrSyntax e1) { - } - showRNA(r); - } - else - { - int newi = i+1; - if (newi==_rnaList.getSize()) - { - newi = _rnaList.getSize()-2; - } - FullBackup bck = (FullBackup) _rnaList.getElementAt(newi); - _l.setSelectedValue(bck,true); - } - _rnaList.remove(i); - } - - } - } - - public void onStructureRedrawn() { - // TODO Auto-generated method stub - - } - - public void onUINewStructure(VARNAConfig v, RNA r) { - _rnaList.add(v, r,r.getName(),true); - onZoomLevelChanged(); - } - - public void onWarningEmitted(String s) { - // TODO Auto-generated method stub - - } - - public void mouseClicked(MouseEvent e) { - if(e.getClickCount() == 2){ - int index = _sideList.locationToIndex(e.getPoint()); - ListModel dlm = _sideList.getModel(); - FullBackup item = (FullBackup) dlm.getElementAt(index);; - _sideList.ensureIndexIsVisible(index); - Object newName = JOptionPane.showInputDialog( - this, - "Specify a new name for this RNA", - "Rename RNA", - JOptionPane.QUESTION_MESSAGE, - (Icon)null, - null, - item.toString()); - if (newName!=null) - { - item.name = newName.toString(); - this._sideList.repaint(); - } - } - } - - public void mouseEntered(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mouseExited(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mousePressed(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void mouseReleased(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - public void onZoomLevelChanged() { - if (_vp.getZoom()>1.02) - { - Rectangle r = _vp.getZoomedInTranslationBox(); - _horiz.setMinimum(r.x); - _horiz.setMaximum(r.x+r.width+_vp.getWidth()); - _horiz.getModel().setExtent(_vp.getWidth()); - _horiz.getModel().setValue(_vp.getTranslation().x); - _horiz.doLayout(); - _horiz.setVisible(true); - - _vert.setMinimum(r.y); - _vert.setMaximum(r.y+r.height+_vp.getHeight()); - _vert.getModel().setExtent(_vp.getHeight()); - _vert.getModel().setValue(_vp.getTranslation().y); - _vert.doLayout(); - _vert.setVisible(true); - } - else - { - _horiz.setVisible(false); - _vert.setVisible(false); - } - } - - public void onTranslationChanged() { - if (_vp.getZoom()>1.02) - { - int nx = _horiz.getMaximum()-(_vp.getTranslation().x-_horiz.getMinimum())-_vp.getWidth(); - int ny = _vert.getMaximum()-(_vp.getTranslation().y-_vert.getMinimum())-_vp.getHeight(); - _horiz.getModel().setValue(nx); - _horiz.doLayout(); - _vert.getModel().setValue(ny); - _vert.doLayout(); - } - } - - public void adjustmentValueChanged(AdjustmentEvent arg0) { - if (arg0.getSource()==_horiz) - { - _vp.setTranslation(new Point(_horiz.getMaximum()-(arg0.getValue()-_horiz.getMinimum())-_vp.getWidth(),_vp.getTranslation().y)); - _vp.repaint(); - } - else if (arg0.getSource()==_vert) - { - _vp.setTranslation(new Point(_vp.getTranslation().x,_vert.getMaximum()-(arg0.getValue()-_vert.getMinimum())-_vp.getHeight())); - _vp.repaint(); - } - } + + JPanel opspanel = new JPanel(new BorderLayout()); + opspanel.add(ops,BorderLayout.NORTH); + opspanel.add(_zoomWindow,BorderLayout.SOUTH); + + _zoomWindow.setPreferredSize(new Dimension(-1,200)); + + + JLabel j = new JLabel("Structure Manager",JLabel.CENTER); + _listPanel.setLayout(new BorderLayout()); + + _listPanel.add(opspanel,BorderLayout.SOUTH); + _listPanel.add(j,BorderLayout.NORTH); + _listPanel.add(listScroller,BorderLayout.CENTER); + + goPanel.add(_createButton, BorderLayout.CENTER); + + JPanel vpScroll = new JPanel(); + vpScroll.setLayout(new BorderLayout()); + _horiz.setVisible(false); + _horiz.addAdjustmentListener(this); + _vert.setVisible(false); + _vert.addAdjustmentListener(this); + vpScroll.add(_horiz,BorderLayout.SOUTH); + vpScroll.add(_vert,BorderLayout.EAST); + vpScroll.add(_vp,BorderLayout.CENTER); + JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,vpScroll); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(split, BorderLayout.CENTER); + getContentPane().add(_tools, BorderLayout.NORTH); + + + setVisible(true); + DropTarget dt = new DropTarget(_vp, this); + + _vp.addRNAListener(new InterfaceVARNARNAListener(){ + public void onSequenceModified(int index, String oldseq, String newseq) { + //System.out.println("Sequence changed: Index:"+index+" ["+oldseq+"]=>["+newseq+"]"); + } + + public void onStructureModified(Set current, + Set addedBasePairs, Set removedBasePairs) { + String result = ""; + //System.out.println("Structure changed: "); + for (ModeleBP s:addedBasePairs) + { result +=s; } + //System.out.println(" Added: "+result); + result = ""; + for (ModeleBP s:removedBasePairs) + { result +=s; } + //System.out.println(" Removed: "+result); + } + + public void onRNALayoutChanged(Hashtable previousPositions) { + //System.out.print("Layout changed, bases#: "); + String result = ""; + for (Integer s:previousPositions.keySet()) + { result +=s+" "; } + //System.out.println(result); + } + + }); + + _vp.addSelectionListener(new InterfaceVARNASelectionListener(){ + + public void onHoverChanged(ModeleBase oldbase, ModeleBase newBase) { + if (_hoverHighlightSeq!=null) + { + _seq.getHighlighter().removeHighlight(_hoverHighlightSeq); + _hoverHighlightSeq = null; + } + if (_hoverHighlightStr!=null) + { + _str.getHighlighter().removeHighlight(_hoverHighlightStr); + _hoverHighlightStr = null; + } + if (newBase!=null) + { + try { + int i = newBase.getIndex(); + int[] shifts = _vp.getRNA().getStrandShifts(); + _hoverHighlightSeq = _seq.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); + _hoverHighlightStr = _str.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.green) ); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + + public void onSelectionChanged(BaseList selection, + BaseList addedBases, BaseList removedBases) { + for(Object tag: _selectionHighlightSeq) + { + _seq.getHighlighter().removeHighlight(tag); + } + _selectionHighlightSeq.clear(); + for(Object tag: _selectionHighlightStr) + { + _str.getHighlighter().removeHighlight(tag); + } + _selectionHighlightStr.clear(); + int[] shifts = _vp.getRNA().getStrandShifts(); + for (ModeleBase m: selection.getBases()) + { + try { + int i = m.getIndex(); + _selectionHighlightSeq.add(_seq.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); + _selectionHighlightStr.add(_str.getHighlighter().addHighlight(i+shifts[i], i+shifts[i]+1, new DefaultHighlighter.DefaultHighlightPainter(Color.orange) )); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + + }); + + _vp.addVARNAListener(this); + + new Thread(_zoomWindow).start(); + } + + protected void showRNA(RNA rna) { + _vp.showRNAInterpolated(rna); + _zoomWindow.repaint(); + } + + + public void addRNA(RNA r, VARNAConfig cfg) + { + _rnaList.add(cfg,r); + } + + public static String generateDefaultName() + { + return "User file #"+_nextID++; + } + + public RNA getRNA() { + return (RNA)_sideList.getSelectedValue(); + } + + + + public String[][] getParameterInfo() { + String[][] info = { + // Parameter Name Kind of Value Description, + { "sequenceDBN", "String", "A raw RNA sequence" }, + { "structureDBN", "String", + "An RNA structure in dot bracket notation (DBN)" }, + { errorOpt, "boolean", "To show errors" }, }; + return info; + } + + public void init() { + _vp.setBackground(_backgroundColor); + _error = true; + } + + @SuppressWarnings("unused") + private Color getSafeColor(String col, Color def) { + Color result; + try { + result = Color.decode(col); + } catch (Exception e) { + try { + result = Color.getColor(col, def); + } catch (Exception e2) { + return def; + } + } + return result; + } + + public VARNAPanel get_varnaPanel() { + return _vp; + } + + public void set_varnaPanel(VARNAPanel surface) { + _vp = surface; + } + + + public JTextField get_seq() { + return _seq; + } + + public void set_seq(JTextField _seq) { + this._seq = _seq; + } + + public JLabel get_info() { + return _info; + } + + public void set_info(JLabel _info) { + this._info = _info; + } + + public static void main(String[] args) { + List icons = new ArrayList(); + //JOptionPane.showMessageDialog(null, ""+Toolkit.getDefaultToolkit().getImage("./VARNA16x16.png"), "Check", JOptionPane.INFORMATION_MESSAGE); + icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA16x16.png")); + icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA32x32.png")); + icons.add(Toolkit.getDefaultToolkit().getImage("./VARNA64x64.png")); + VARNAGUI d = new VARNAGUI(); + d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + d.pack(); + d.setIconImages(icons); + d.setVisible(true); + } + + + public void dragEnter(DropTargetDragEvent arg0) { + // TODO Auto-generated method stub + + } + + public void dragExit(DropTargetEvent arg0) { + // TODO Auto-generated method stub + + } + + public void dragOver(DropTargetDragEvent arg0) { + // TODO Auto-generated method stub + + } + + public void drop(DropTargetDropEvent dtde) { + try { + Transferable tr = dtde.getTransferable(); + DataFlavor[] flavors = tr.getTransferDataFlavors(); + for (int i = 0; i < flavors.length; i++) { + if (flavors[i].isFlavorJavaFileListType()) { + dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + Object ob = tr.getTransferData(flavors[i]); + if (ob instanceof List) + { + List list = (List) ob; + for (int j = 0; j < list.size(); j++) { + Object o = list.get(j); + + if (dtde.getSource() instanceof DropTarget) + { + DropTarget dt = (DropTarget) dtde.getSource(); + Component c = dt.getComponent(); + if (c instanceof VARNAPanel) + { + String path = o.toString(); + VARNAPanel vp = (VARNAPanel) c; + try{ + FullBackup bck = VARNAPanel.importSession((File) o); // BH SwingJS + _rnaList.add(bck.config, bck.rna,bck.name,true); + } + catch (ExceptionLoadingFailed e3) + { + ArrayList rnas = RNAFactory.loadSecStr((File) o); // BH SwingJS + if (rnas.isEmpty()) + { + throw new ExceptionFileFormatOrSyntax("No RNA could be parsed from that source."); + } + + dtde.dropComplete(true); + _vp.getVARNAUI().UIChooseRNAs(rnas); + return; + /* + for(RNA r: rnas) + { + r.drawRNA(vp.getConfig()); + String name = r.getName(); + if (name.equals("")) + { + name = path.substring(path.lastIndexOf(File.separatorChar)+1); + } + if (rnas.size()>1) + { + name += " - Molecule# "+id++; + } + _rnaList.add(vp.getConfig().clone(),r,name,true); + }*/ + } + } + } + } + } + // If we made it this far, everything worked. + dtde.dropComplete(true); + return; + } + } + // Hmm, the user must not have dropped a file list + dtde.rejectDrop(); + } catch (Exception e) { + e.printStackTrace(); + dtde.rejectDrop(); + } + + } + + public void dropActionChanged(DropTargetDragEvent arg0) { + } + + private class BackupHolder{ + private DefaultListModel _rnaList; + private ArrayList _rnas = new ArrayList(); + JList _l; + + public BackupHolder(DefaultListModel rnaList, JList l) + { + _rnaList = rnaList; + _l = l; + } + + public void add(VARNAConfig c, RNA r) + { + add(c, r, r.getName(),false); + } + + public void add(VARNAConfig c, RNA r,boolean select) + { + add(c, r, r.getName(),select); + } + + public void add(VARNAConfig c, RNA r, String name) + { + add(c, r, name,false); + } + public void add(VARNAConfig c, RNA r, String name, boolean select) + { + if (!_rnas.contains(r)) + { + if (select){ + _l.removeSelectionInterval(0, _rnaList.size()); + } + if (name.equals("")) + { + name = generateDefaultName(); + } + FullBackup bck = new FullBackup(c,r,name); + _rnas.add(0, r); + _rnaList.add(0,bck); + _l.doLayout(); + if (select){ + _l.setSelectedIndex(0); + } + } + } + + public void remove(int i) + { + _rnas.remove(i); + _rnaList.remove(i); + + } + public DefaultListModel getModel() + { + return _rnaList; + } + public boolean contains(RNA r) + { + return _rnas.contains(r); + } + /*public int getSize() + { + return _rnaList.getSize(); + }*/ + public FullBackup getElementAt(int i) + { + return (FullBackup) _rnaList.getElementAt(i); + } + + public void removeSelected() + { + int i = _l.getSelectedIndex(); + if (i!=-1) + { + if (_rnaList.getSize()==1) + { + RNA r = new RNA(); + try { + r.setRNA(" ", "."); + } catch (ExceptionUnmatchedClosingParentheses e1) { + } catch (ExceptionFileFormatOrSyntax e1) { + } + showRNA(r); + } + else + { + int newi = i+1; + if (newi==_rnaList.getSize()) + { + newi = _rnaList.getSize()-2; + } + FullBackup bck = (FullBackup) _rnaList.getElementAt(newi); + _l.setSelectedValue(bck,true); + } + _rnaList.remove(i); + } + + } + } + + public void onStructureRedrawn() { + // TODO Auto-generated method stub + + } + + public void onUINewStructure(VARNAConfig v, RNA r) { + _rnaList.add(v, r,r.getName(),true); + onZoomLevelChanged(); + } + + public void onWarningEmitted(String s) { + // TODO Auto-generated method stub + + } + + public void mouseClicked(MouseEvent e) { + if(e.getClickCount() == 2){ + int index = _sideList.locationToIndex(e.getPoint()); + ListModel dlm = _sideList.getModel(); + FullBackup item = (FullBackup) dlm.getElementAt(index);; + _sideList.ensureIndexIsVisible(index); + Object newName = JOptionPane.showInputDialog( + this, + "Specify a new name for this RNA", + "Rename RNA", + JOptionPane.QUESTION_MESSAGE, + (Icon)null, + null, + item.toString()); + if (newName!=null) + { + item.name = newName.toString(); + this._sideList.repaint(); + } + } + } + + public void mouseEntered(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mouseExited(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mousePressed(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void mouseReleased(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + public void onZoomLevelChanged() { + if (_vp.getZoom()>1.02) + { + Rectangle r = _vp.getZoomedInTranslationBox(); + _horiz.setMinimum(r.x); + _horiz.setMaximum(r.x+r.width+_vp.getWidth()); + _horiz.getModel().setExtent(_vp.getWidth()); + _horiz.getModel().setValue(_vp.getTranslation().x); + _horiz.doLayout(); + _horiz.setVisible(true); + + _vert.setMinimum(r.y); + _vert.setMaximum(r.y+r.height+_vp.getHeight()); + _vert.getModel().setExtent(_vp.getHeight()); + _vert.getModel().setValue(_vp.getTranslation().y); + _vert.doLayout(); + _vert.setVisible(true); + } + else + { + _horiz.setVisible(false); + _vert.setVisible(false); + } + } + + public void onTranslationChanged() { + if (_vp.getZoom()>1.02) + { + int nx = _horiz.getMaximum()-(_vp.getTranslation().x-_horiz.getMinimum())-_vp.getWidth(); + int ny = _vert.getMaximum()-(_vp.getTranslation().y-_vert.getMinimum())-_vp.getHeight(); + _horiz.getModel().setValue(nx); + _horiz.doLayout(); + _vert.getModel().setValue(ny); + _vert.doLayout(); + } + } + + public void adjustmentValueChanged(AdjustmentEvent arg0) { + if (arg0.getSource()==_horiz) + { + _vp.setTranslation(new Point(_horiz.getMaximum()-(arg0.getValue()-_horiz.getMinimum())-_vp.getWidth(),_vp.getTranslation().y)); + _vp.repaint(); + } + else if (arg0.getSource()==_vert) + { + _vp.setTranslation(new Point(_vp.getTranslation().x,_vert.getMaximum()-(arg0.getValue()-_vert.getMinimum())-_vp.getHeight())); + _vp.repaint(); + } + } } diff --git a/srcjar/fr/orsay/lri/varna/applications/VARNAcmd.java b/srcjar/fr/orsay/lri/varna/applications/VARNAcmd.java index 7b16c61..f3b8999 100644 --- a/srcjar/fr/orsay/lri/varna/applications/VARNAcmd.java +++ b/srcjar/fr/orsay/lri/varna/applications/VARNAcmd.java @@ -479,6 +479,7 @@ public class VARNAcmd implements InterfaceParameterLoader { BufferedImage.TYPE_INT_RGB); Graphics2D g2 = myImage.createGraphics(); vp.paintComponent(g2); + g2.dispose(); try { FileImageOutputStream out = new FileImageOutputStream(new File(filename)); ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next(); @@ -492,7 +493,6 @@ public class VARNAcmd implements InterfaceParameterLoader { } catch (IOException e) { throw new ExceptionExportFailed(e.getMessage(), filename); } - } public void saveToPNG(String filename, VARNAPanel vp) diff --git a/srcjar/fr/orsay/lri/varna/controlers/ControleurInterpolator.java b/srcjar/fr/orsay/lri/varna/controlers/ControleurInterpolator.java index a77bac6..f26a6a4 100644 --- a/srcjar/fr/orsay/lri/varna/controlers/ControleurInterpolator.java +++ b/srcjar/fr/orsay/lri/varna/controlers/ControleurInterpolator.java @@ -2,7 +2,7 @@ VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr - paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France + paper mail : LRI, bat 490 Universit� Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -576,17 +576,12 @@ public class ControleurInterpolator extends Thread implements ActionListener { _d.addLast(d); @SuppressWarnings("unused") + // BH SwingJS no notify() Runnable interpolator = ControleurInterpolator.this; - /** - * BH SwingJS no notify() - * @j2sNative - * - * interpolator.run$(); - * - */ - { - notify(); - } + if (/** @j2sNative 1?true:*/false) + interpolator.run(); + else + notify(); } public synchronized TargetsHolder get() { diff --git a/srcjar/fr/orsay/lri/varna/views/VueUI.java b/srcjar/fr/orsay/lri/varna/views/VueUI.java index e8d7fd1..addffdc 100644 --- a/srcjar/fr/orsay/lri/varna/views/VueUI.java +++ b/srcjar/fr/orsay/lri/varna/views/VueUI.java @@ -1194,9 +1194,9 @@ public class VueUI { BufferedImage myImage = new BufferedImage((int) Math.round(_vp.getWidth() * scale), (int) Math.round(_vp.getHeight() * scale), BufferedImage.TYPE_INT_ARGB); // BH j2s SwingJS: was BufferedImage.TRANSLUCENT, which is TYPE_INT_ARGB_PRE ?? no transparent background? - Graphics2D g2 = myImage.createGraphics(); AffineTransform AF = new AffineTransform(); AF.setToScale(scale, scale); + Graphics2D g2 = myImage.createGraphics(); g2.setTransform(AF); _vp.paintComponent(g2, !_vp.getConfig()._drawBackground); g2.dispose(); @@ -1223,19 +1223,16 @@ public class VueUI { scale = 1. / 100.; else scale = jpeg.getScaleSlider().getValue() / 100.; - BufferedImage myImage = new BufferedImage((int) Math.round(_vp - .getWidth() * scale), (int) Math.round(_vp.getHeight() - * scale), BufferedImage.TYPE_INT_RGB); - Graphics2D g2 = myImage.createGraphics(); + BufferedImage myImage = new BufferedImage((int) Math.round(_vp.getWidth() * scale), + (int) Math.round(_vp.getHeight() * scale), BufferedImage.TYPE_INT_RGB); AffineTransform AF = new AffineTransform(); AF.setToScale(scale, scale); + Graphics2D g2 = myImage.createGraphics(); g2.setTransform(AF); _vp.paintComponent(g2); try { - FileImageOutputStream out = new FileImageOutputStream(new File( - filename)); - ImageWriter writer = ImageIO - .getImageWritersByFormatName("jpeg").next(); + FileImageOutputStream out = new FileImageOutputStream(new File(filename)); + ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next(); ImageWriteParam params = writer.getDefaultWriteParam(); params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); params.setCompressionQuality(jpeg.getQualitySlider().getValue() / 100.0f); -- 1.7.10.2