From 409228285e64b1bdf28465333cc82c07aea9c0b1 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Mon, 2 Apr 2018 05:52:37 +0200 Subject: [PATCH] upgrade JSch to 0.1.54, closes #48. Upgrade ADAL. --- .../Jars/adal-1.14.0.aar | Bin 0 -> 353082 bytes .../JavaFileStorageBindings.csproj | 4 +- src/java/JavaFileStorage/app/build.gradle | 6 +- .../src/main/java/com/jcraft/jsch/Buffer.java | 9 +- .../main/java/com/jcraft/jsch/Channel.java | 135 +++++- .../jcraft/jsch/ChannelAgentForwarding.java | 2 +- .../com/jcraft/jsch/ChannelDirectTCPIP.java | 11 +- .../java/com/jcraft/jsch/ChannelExec.java | 2 +- .../jcraft/jsch/ChannelForwardedTCPIP.java | 2 +- .../java/com/jcraft/jsch/ChannelSession.java | 2 +- .../java/com/jcraft/jsch/ChannelSftp.java | 56 ++- .../java/com/jcraft/jsch/ChannelShell.java | 2 +- .../com/jcraft/jsch/ChannelSubsystem.java | 2 +- .../main/java/com/jcraft/jsch/ChannelX11.java | 2 +- .../src/main/java/com/jcraft/jsch/Cipher.java | 2 +- .../main/java/com/jcraft/jsch/CipherNone.java | 2 +- .../java/com/jcraft/jsch/Compression.java | 2 +- .../com/jcraft/jsch/ConfigRepository.java | 2 +- .../app/src/main/java/com/jcraft/jsch/DH.java | 6 +- .../main/java/com/jcraft/jsch/DHEC256.java | 37 ++ .../main/java/com/jcraft/jsch/DHEC384.java | 37 ++ .../main/java/com/jcraft/jsch/DHEC521.java | 37 ++ .../src/main/java/com/jcraft/jsch/DHECN.java | 187 +++++++++ .../src/main/java/com/jcraft/jsch/DHG1.java | 126 +----- .../src/main/java/com/jcraft/jsch/DHG14.java | 107 +---- .../src/main/java/com/jcraft/jsch/DHGEX.java | 155 ++----- .../main/java/com/jcraft/jsch/DHGEX256.java | 312 +------------- .../src/main/java/com/jcraft/jsch/ECDH.java | 37 ++ .../com/jcraft/jsch/ForwardedTCPIPDaemon.java | 2 +- .../main/java/com/jcraft/jsch/GSSContext.java | 2 +- .../src/main/java/com/jcraft/jsch/HASH.java | 2 +- .../main/java/com/jcraft/jsch/HostKey.java | 37 +- .../com/jcraft/jsch/HostKeyRepository.java | 52 ++- .../app/src/main/java/com/jcraft/jsch/IO.java | 2 +- .../main/java/com/jcraft/jsch/Identity.java | 2 +- .../java/com/jcraft/jsch/IdentityFile.java | 3 +- .../com/jcraft/jsch/IdentityRepository.java | 2 +- .../src/main/java/com/jcraft/jsch/JSch.java | 42 +- .../jcraft/jsch/JSchAuthCancelException.java | 2 +- .../java/com/jcraft/jsch/JSchException.java | 2 +- .../jcraft/jsch/JSchPartialAuthException.java | 2 +- .../java/com/jcraft/jsch/KeyExchange.java | 170 +++++++- .../main/java/com/jcraft/jsch/KeyPair.java | 177 +++++++- .../main/java/com/jcraft/jsch/KeyPairDSA.java | 2 +- .../java/com/jcraft/jsch/KeyPairECDSA.java | 391 ++++++++++++++++++ .../java/com/jcraft/jsch/KeyPairGenDSA.java | 2 +- .../java/com/jcraft/jsch/KeyPairGenECDSA.java | 37 ++ .../java/com/jcraft/jsch/KeyPairGenRSA.java | 2 +- .../java/com/jcraft/jsch/KeyPairPKCS8.java | 363 ++++++++++++++++ .../main/java/com/jcraft/jsch/KeyPairRSA.java | 2 +- .../main/java/com/jcraft/jsch/KnownHosts.java | 85 ++-- .../jcraft/jsch/LocalIdentityRepository.java | 54 ++- .../src/main/java/com/jcraft/jsch/Logger.java | 2 +- .../src/main/java/com/jcraft/jsch/MAC.java | 2 +- .../java/com/jcraft/jsch/OpenSSHConfig.java | 36 +- .../src/main/java/com/jcraft/jsch/PBKDF.java | 34 ++ .../src/main/java/com/jcraft/jsch/Packet.java | 2 +- .../java/com/jcraft/jsch/PortWatcher.java | 2 +- .../src/main/java/com/jcraft/jsch/Proxy.java | 2 +- .../main/java/com/jcraft/jsch/ProxyHTTP.java | 2 +- .../java/com/jcraft/jsch/ProxySOCKS4.java | 2 +- .../java/com/jcraft/jsch/ProxySOCKS5.java | 2 +- .../src/main/java/com/jcraft/jsch/Random.java | 2 +- .../main/java/com/jcraft/jsch/Request.java | 2 +- .../jcraft/jsch/RequestAgentForwarding.java | 2 +- .../main/java/com/jcraft/jsch/RequestEnv.java | 2 +- .../java/com/jcraft/jsch/RequestExec.java | 2 +- .../java/com/jcraft/jsch/RequestPtyReq.java | 2 +- .../java/com/jcraft/jsch/RequestSftp.java | 2 +- .../java/com/jcraft/jsch/RequestShell.java | 2 +- .../java/com/jcraft/jsch/RequestSignal.java | 2 +- .../com/jcraft/jsch/RequestSubsystem.java | 2 +- .../com/jcraft/jsch/RequestWindowChange.java | 2 +- .../main/java/com/jcraft/jsch/RequestX11.java | 2 +- .../com/jcraft/jsch/ServerSocketFactory.java | 2 +- .../main/java/com/jcraft/jsch/Session.java | 161 +++++--- .../main/java/com/jcraft/jsch/SftpATTRS.java | 8 +- .../java/com/jcraft/jsch/SftpException.java | 2 +- .../com/jcraft/jsch/SftpProgressMonitor.java | 2 +- .../java/com/jcraft/jsch/SftpStatVFS.java | 18 +- .../main/java/com/jcraft/jsch/Signature.java | 2 +- .../java/com/jcraft/jsch/SignatureDSA.java | 2 +- .../java/com/jcraft/jsch/SignatureECDSA.java | 35 ++ .../java/com/jcraft/jsch/SignatureRSA.java | 2 +- .../java/com/jcraft/jsch/SocketFactory.java | 2 +- .../jcraft/jsch/UIKeyboardInteractive.java | 2 +- .../main/java/com/jcraft/jsch/UserAuth.java | 2 +- .../jcraft/jsch/UserAuthGSSAPIWithMIC.java | 2 +- .../jsch/UserAuthKeyboardInteractive.java | 2 +- .../java/com/jcraft/jsch/UserAuthNone.java | 2 +- .../com/jcraft/jsch/UserAuthPassword.java | 2 +- .../com/jcraft/jsch/UserAuthPublicKey.java | 21 +- .../main/java/com/jcraft/jsch/UserInfo.java | 2 +- .../src/main/java/com/jcraft/jsch/Util.java | 54 ++- .../java/com/jcraft/jsch/jce/AES128CBC.java | 12 +- .../java/com/jcraft/jsch/jce/AES128CTR.java | 12 +- .../java/com/jcraft/jsch/jce/AES192CBC.java | 12 +- .../java/com/jcraft/jsch/jce/AES192CTR.java | 12 +- .../java/com/jcraft/jsch/jce/AES256CBC.java | 12 +- .../java/com/jcraft/jsch/jce/AES256CTR.java | 12 +- .../java/com/jcraft/jsch/jce/ARCFOUR.java | 12 +- .../java/com/jcraft/jsch/jce/ARCFOUR128.java | 12 +- .../java/com/jcraft/jsch/jce/ARCFOUR256.java | 12 +- .../java/com/jcraft/jsch/jce/BlowfishCBC.java | 12 +- .../src/main/java/com/jcraft/jsch/jce/DH.java | 37 +- .../java/com/jcraft/jsch/jce/ECDH256.java | 36 ++ .../java/com/jcraft/jsch/jce/ECDH384.java | 36 ++ .../java/com/jcraft/jsch/jce/ECDH521.java | 36 ++ .../main/java/com/jcraft/jsch/jce/ECDHN.java | 146 +++++++ .../main/java/com/jcraft/jsch/jce/HMAC.java | 2 +- .../java/com/jcraft/jsch/jce/HMACMD5.java | 2 +- .../java/com/jcraft/jsch/jce/HMACMD596.java | 2 +- .../java/com/jcraft/jsch/jce/HMACSHA1.java | 2 +- .../java/com/jcraft/jsch/jce/HMACSHA196.java | 2 +- .../java/com/jcraft/jsch/jce/HMACSHA256.java | 2 +- .../java/com/jcraft/jsch/jce/HMACSHA512.java | 2 +- .../com/jcraft/jsch/jce/KeyPairGenDSA.java | 2 +- .../com/jcraft/jsch/jce/KeyPairGenECDSA.java | 96 +++++ .../com/jcraft/jsch/jce/KeyPairGenRSA.java | 2 +- .../main/java/com/jcraft/jsch/jce/MD5.java | 2 +- .../main/java/com/jcraft/jsch/jce/PBKDF.java | 59 +++ .../main/java/com/jcraft/jsch/jce/Random.java | 2 +- .../main/java/com/jcraft/jsch/jce/SHA1.java | 2 +- .../main/java/com/jcraft/jsch/jce/SHA256.java | 2 +- .../main/java/com/jcraft/jsch/jce/SHA384.java | 49 +++ .../main/java/com/jcraft/jsch/jce/SHA512.java | 49 +++ .../com/jcraft/jsch/jce/SignatureDSA.java | 2 +- .../com/jcraft/jsch/jce/SignatureECDSA.java | 186 +++++++++ .../com/jcraft/jsch/jce/SignatureRSA.java | 2 +- .../com/jcraft/jsch/jce/TripleDESCBC.java | 12 +- .../com/jcraft/jsch/jce/TripleDESCTR.java | 12 +- .../com/jcraft/jsch/jcraft/Compression.java | 2 +- .../java/com/jcraft/jsch/jcraft/HMAC.java | 3 +- .../java/com/jcraft/jsch/jcraft/HMACMD5.java | 2 +- .../com/jcraft/jsch/jcraft/HMACMD596.java | 2 +- .../java/com/jcraft/jsch/jcraft/HMACSHA1.java | 2 +- .../com/jcraft/jsch/jcraft/HMACSHA196.java | 2 +- .../com/jcraft/jsch/jgss/GSSContextKrb5.java | 177 ++++++++ .../JavaFileStorageTest-AS/app/build.gradle | 3 - 139 files changed, 3199 insertions(+), 1054 deletions(-) create mode 100644 src/JavaFileStorageBindings/Jars/adal-1.14.0.aar create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC256.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC384.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC521.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHECN.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ECDH.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairECDSA.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenECDSA.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairPKCS8.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PBKDF.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureECDSA.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/ECDH256.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/ECDH384.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/ECDH521.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/ECDHN.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/KeyPairGenECDSA.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/PBKDF.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/SHA384.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/SHA512.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jce/SignatureECDSA.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jgss/GSSContextKrb5.java diff --git a/src/JavaFileStorageBindings/Jars/adal-1.14.0.aar b/src/JavaFileStorageBindings/Jars/adal-1.14.0.aar new file mode 100644 index 0000000000000000000000000000000000000000..e3e4c25e2736f702dfd80b483af18ec48eb35ae5 GIT binary patch literal 353082 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%0D*-r z%PRtrq_HOy2UiW5`29>{wdAYqpFNO5%jXbWdr$hKd3-}}wyFH&fvDuejhbS;BrjcJ z8GCM)_VPZdfz>VKyhRFPt97qkYO{4s#-3gr5UTT%R{xUSZJ_?sw49xq5l}-TkMxy< zyWA934|uEKFE01NWs{6aEI#`l?H-o2k+inZ7?YXaX5EAU+ceh49F#F52#(ugB?96=@X`-m24tohs6C)kZ${) zRQi|D?*Rm`*{sL=f}3Tp#T5s^t|zn-r^-q;m)Q#lJJVnJZ5xf~udGOKB~}OpaU??A z+gzQxdG+QHqJkA~no(GyDx~YMqyIl+pfoxQr}k(dePO(MibIwf1d3)ZK}(Vc>E+Pw znm7TF@@RPsff;e3TG4#<2cc>sGf^Zp>b=(J6f$t$m%C&kx)6JXnX)N%E?Ji2B&^@3 zCg+ZpW2CQH_J2bPBwP$g(c6W8>&Fb?scc1j&2@`z^U!u^t2MD32%1LbdC~sk zA*h1_GV*jgoU9Cg7`i%q;$5~|*M9lz{A_I#Mu+{ye4`+4+&T*CMj#~FC{t=tZW11B z?8cjk3wW^GUzJ;}-UhvXM$9-Q#fn6oJ-NOI)}Ok?$ zy8q{CHp$^Dw62zV1$-841e_+9;0O@SsYuGW>M_|57mmDXszbce`z)Th6^;tctNz8 zHhHZoQcBeD=i&xVLhka|yJ+;53_f2v3#4lAd74oJS0A?>__+Wkl$&@nBE22^EP=`9ZWC42f}uo`nT(!5%$`fgAJiov62{W zB|Bp212+e0)r7mi=``>MKZB(Gj7ABH8S(ZK-UX5NSFHoydyy~*nH z((+U;DxfyFZklZD{mW^;0s7op%!;7*6vy#RRTDA;^yBD3?V^jaH0{$Ye~Y>D z=B_J|6oJZ>YVnDKzb(wXG%jM_SL{BHyuRG>dQS%BPbvpc?=lwlET)8PE77M0Rqk1V z07tQ&BM2QUll-o-`lL=|FT%A6>DM|T7wvH38jGqpmV9tDW`}ZX)Ji)XHl?Z6uq$F7 z3t>mu!EC_NX!q||)=)CQc1riO-Cbuy)F&x$dPCX4n9rcLbpKIEh11{J?0($rHdJh} z8)EnnmS~Cnj=Kl zdpo^rqKG~fPU73~F9@kD@lq-D0T;Js9D95Q9yL61-Hp}`sKB{+(n*+zXHTdgJZpr^cS5?w#r3`J0crkf!v0Ts(z%Z@=g%-Pqj*GxdzEH`%;_gWyTykafl4KWEh9AT8)n4S@Fmdut^uT^3P=b1H_~T>5)fkL($coA)u78=nd2U~^JFnd z?Th}MjyE;B#RA}SN;V5mHc#KN8B-GNR7^#!j6PxhD034PQ}yn#|Mrj^`jkeaNWv*^ zPDu;56a2sT9kKC^dI#DCa#MG5H`E$1oDV znEcRGvbzsrNB$dg^MW-~U<8F3@TvP-dyL0k1vX3~{ioEK zpe|?p>amq}^B3r9-^&DvsN6I18R3N4rjt1f%D*Li%`X@hmDZI zz7j9)SeiYRzM{hpxLG4#ZOG-)=z zJOVzx)bxGIzz*+_WgISlak!B#dQ$`$F$>#lm_r(Z* zDgK%--_S2_MzOkSby9SD3+hu>)g#Z2-L~z&jycn~hhhhRsIs|y!H62?+SoOHTkjhAT5C&pzkwvU$Ej?B(=a+65vjh|RV9pik5)7pjsLyET-d-DUIQSLmT|&~Tkr zqpP5LYwKIDxzWgFov`ebf0i?6rADxoG*a>|+jceGcnw2H@biJN{Qkon3o*Y-H|xv$ zhif1lXL}V*KDwg@bcS~y!%DV82k>aakWL|DVc#7{-f2|#mu`h`KOf2W;*}1dgh#Ml=w=Rm`;rT44ZddCi?ZVF}QN_vWR^w zYc$}A8?jL|HK>H2gx5?EA3d+k*6hO$>amjw!f#L1wF?Zss;E1QtJzw6j||1c9Q!Dv zukzMla=Bah&A{+3^Uyco6+Ykx&N&YTHv3+$eXk`%m=u?3YgsY7>)QXa7ARqGUgQ#_ zV4SYMRZDu0$qv0_TbNj)L8RW43`~d2G4fAd!r@A34nsDdJmcFv>s0OfNW2fBrRSs{ zO-LJu^)6GoeiSUrT$o?;v-;al;2<-|!>6++s|_=*{Ri8{v5r|MAQxH~2#F&h1l~wc z7H#eyjS0!NeRT7RBYg+1zwiirUd$8e$Tb@R`AO2%D;X3m8VIPn{|M*q*QPKl7?U{B z=Jca#cS1E`b%^`BWy%lg&HM8C?Veu9_mWzp;ci|ghes;JKs!Yi9@+pegiXo!spk3| zf9>03Kj5iP;B$S_F75o$99{WD6z-cU*>Ds1bKtroo4-8qOVt0$+$I;Hrd~s98wr7P zVfd%`_c0&pCZkH;CyN9ukJQXj-V3)>ao?ue9Z}W083v*b>M4ULVFRCnFt|(FXYsK2 z>VY zJidUWBEAv+l%eY@xryYN!S3qI$n#{uEpar`ZgTVjo}(bZwq@X-_%FjJL(9_nKxX~! zsw%pK3%)b#mA8I?tAYeBL{fwr8#yK6AFSAs>UE_c-~0^u+oB zI9zP&kZ$Gb5efFGB!T|&Dz^F%Be+64pE3vJSs{(1mH9Iv;-+@xJ)v2F`5gC8mfVeN zNZD@|!^bI|w|3ldb$_)-I}}AA@$wNqWjSTIkS%eEAKz#r^^rLky3}v6_xa(&z34f= z(ZRKW3Efvh{lLB0wRW0g=@{SZX3=@<@q);Xnyrt1S)sc}1sQ%@Q>EQFPhW>F*YDE5 znni!C%6_s961dzLlB2TyeO&8c*WwOcL1O@_m{DmTo_)7WU0h}d5+lRuaX#{C7^U1o zWiE@_uVTlvx`e4ZMXyF2R_a)e86@nm+q0Y=)%lQSI~O;~EL@foYk_zt?nM-2?uS@%8)dKaz@J><-q5@)^;a#qXh3-#9t*z zwT&cJ+?bMii$DD`_1NXHqu{S|lqbnZLeEdzJ`*2%)7>yfl|Q4l(P z;)c7zrQ>vvFMr6Y^Z#v&AS;_6N0%yJV2oJ?G*tf0gOxR!uT(`<4C z!chq0@;zKgg zlYr?Zn}1>;Xt}i3H?Is(#ck2eU%KY0q!iO_{wQFvI)0&0#G0O2nBplQW|Hz{>@;I` zRC!PZUNR9lr^*-p4)vLy5`6H5`rYuQAdNSz&H#FIS#i2uF;-UlGp$b3d0xZ--dvy?=R*9G?g(3f+I zF8|5UBicdhEDyC1Ho{vjj<%}pbl$$vHsiMqwvTt|Ujye}N`lWTgeK9+2szLswzcT~ zVTVS9nK{`i_6tR5k$D%>{uBk4H$WO^?rRc^o;2P7Wfe0}ptz^(4kV9pPL-*tEZjlb zz(SnVa!)+IzTa+^XMpd33pg`1{!-QxQ8w(7oVwj|COZ5C3tNdd(+bWRW!^>HKPz0n zI6h}6*L42@-L}2#>IjvjM}FA!(Ju$?k@@2yT8)=~?Jvm#%Rj*!{2;KG4rmW7m_8n2 zpG`hrt3GD2y!AW9rb^$8=3f$LD(D{hEj=EVRH%q<8_qZFAy-Wz{ioug{p%LD{ZjZ# z2YrO631W9O+&z4DrE(3@%$Q{Kud9`4>5V0O;(B1gPH>rV&n9G$L4SB>CxA${$$$8~ z+f$ob!@Q9Cxmj~U`t1%NHHO%TKBf|ME|M3N!jrTBwA#QULHIMKyH@DAB12Pj;=)4w zcobS2r#oRS*u1&@rh&KJHhKb72g%w$`wn-+{wK~IQppWDgd)-IYs91PeNgOid%D}$ zrLhynpGM>p2~)Dq*>>=}&WpX6{~I(Ac25--PGm`2he@HZ8Yn$rM0!P-Z+fa|oCLhr zffBQRaPEG9D25&#-|FkFm3Wvn%hj3oRiXP+SSAuS#O^f48hifB)-SE02GzcOn*CfFAh-mdDALL4SO9{x@5U!sTB z84~B_fCJyi$@gaJSrX5}z{*6GWkO`q@_OZpr-Tk)>fFc-c1eg9bJ@3j%>njmMuz0e zF3+Y$00kWM3_-NUBIRVX+Yk1NwrBJrbt7j+Zh(pG{pppL_CYpu{^jf$9S>8U;xvgi zS}6>4_XdN*5qX9PzAjbmZ6tSfF^}C|>6RPtr#{jrqkYWr%5Gjtkny%9a^Qc94`7ED zO;9wh@Y-JaW5lN%GM^;hZFyhcSExsHFHW@Bq=#U&`$dK(Pelg~Uf0v9DqF8yf8U*|;JFn8kIDtCtQSJr|bxoZQcCMo- z`n~|;TIY9w4ycpyp(M6We0|~bm&|(>ZfRZdOJr=_rYsdKbvqhW!nXFj*><2J(_)j| z>rz9`L8~`Ms3)z|NSVf6t%DkB>fzE zy>;}535=*`gMkJ4Fv`+!>iKdq_z(!mX5O1zxI(lzcxnK)Oy+a!IA&Lee>Z!Z^pT@c ziQF5~kf{!%vJdl5GSd%4lT{h?$i$|)H(m*G^yjRpFt3WiJW8~mU!9(@eWqE6(s!s` z%@<2fBRW%J$%$OwvjX%R;{3PTL2u=|?wDbhnd96P#47#HMKnnTeVtYywh`>WVlQ6- z*0$}6zs`59K-D(n=g1W#%|$bpguZdR>CcKhzpqC>^4K~A-*W4hC8*;V{un^Cv5N-m znG5k*7r!YN0^AsmBUr_qpgzl0dr zSfr=pj(B}1C`Y|7530}g&aZ94zRvUwJkwd$9ETEi5AMD}2Kg#^cAWx=v!FGHo$ELkNm9P_;?nsLNC>?8^`{mw(90{7P1q_mw_wCSB3Je(XgonTuJRs#s z&-XcD$LC&jH&A_A?s!7o$%P@33izmXCt9*7jdeAro8`_#nqaHH>=X8TN8YR05?lmigIYLBwsnt_@q51tQO{co6g~x zKG*rjde2qD7fUOVJ%OdU$nxVl&m>?B|BhHk&g_&k{itp|i-9Tduit@wWY26oii!F- zbBY+JMeih~F0Uz{UB4>^2;XM9-t>&}HsDBis7wi60P`)*qZgRfE{7vQ=I_wG9{9|r zn$6AK5O7k-%Awa}avS3wIC&Qaix3*@-EAeFglh%}nb8;$%hu1rrRB?MYCe+ov2nno z3`+zeYBZEn;DoUBU zWGz3`xc2AY0g1f@SnXdZ)L&7v%Snb!rM+g+U}OM(^nr37&mB966Eh)lxP;dNAKf@j zp?%I%-PPE4h22D9Crh)j(fkWoy@^deM8FB)U)mL8+>+)f{cH_G*>ezK!!%IRcil7M z5&m|`TQ@Aezn!-zhCSHhVhu&lKK`uw!;atc7SdFxf>eq;#?` zrv2+-94V?(e~VHy@CSnA*BWWv{#FD*TtyxTbIW7L1l91KkFf6B_Iv8i{Tw(xB;7k4 zAn2&lw>%<~uokly)YP;AB4QAJmzMol)STokX>VAbcEn%v34V3qmHMMV$)PNs2Sw|I zyIt!j$h~C+RYUuM5udhE`7&8VK)J6es922&)Do*WlyQ-O4gtB|bvSnyHCpIsuQ~81+=@ zI<{#L&#QMXlk*3xWx%sH^E+K$RO>H-=5;)g28TGzlkKB-fjmavW*-Fo4QY%;B%Q^5 zSjmIClDX?wT{uSZ_+UPa<@Ha;cpbP9AR8^jin*Hv*}`Ly>^R*{Z1;0u^|tXR{fR&& z1`=WB`+GCalHA{GJe;iPYH~qYhuA=eH~%oezsMm-!Ap z=B{fk&cAQ!3EAxNNR;0Qk9&@fET)43{Wgm8&R8COBwSd3Q_9$-8>F!|rAl)@2LgiF zI|n|rSDXKBVfB0*ZGu;&jgcGv0ETW{C~_vS5FP3h&#PG9oF5&P9JZxZjN^t6qj_s!q~sJNF!UEbisvK|x}`(MA1jXH?{-^K zTj+Iq2o8kOs7AVh?Ao*!3!1^|XeaJOh&GtIJdq+Cbj{Dw= zD$18KKK7`lU{5K7piratOr`#|T}ooQI(Mi0ZQBkE!|P_06maJ!wT(+h(WzsX-VkSG zeR{KB{>jX|+YQe-_+!VuUgxFXp+KqZ=DYR1au!b0nwv-n#V<9bDf*n)XVSLLJ~c58 z{uI`ZOy2utlstmhg9cxFwxO=P(iF74VaXJr*Wq%u1TKMgXnk@X1+Kw=-+!c>Z6as~ z@l$AgN>=SWSXdR5eh7iCwcE|>_js2R6p_?fQW!{!ancwbEFSP^<#WaI(4H1pX(?Qe z3MMztSGy#6zkb6%t@{0UP+Y3j==VYqZpfoc;z6(cCdKXb#ibap&?!R-`34{UCs-iN zDeymNd8Z)Vx~)q$xzgrJ+qP}nwr$(Cjg`hqJM&H3wr#V%UGc|>I=kZRI2BcOF)rrK zxN1-9v$g1R-eD2|0qy?B#e)C$j|Ki~u|P>#a4XZ3XVLm&WXkCBqX&Vg(|Z`N5uG$e zP&9%ug9Z>&ikO+8;wD8Qq(wuCi&iQGPnt?ANuk}C62j)UQz%mYkn`}~owsw-l{dow z(D8EPtH1Kq!?yybFqcU|7OL^Es>y~4%99=y2chCZgYygE0K|s6aIN8t2^<&#I6VWJ zh>xq+p(;l#Akqd#Q%sEx0PH%*^_$1bk6q(etkbj?zXi5lo2}p4e;Gc`-u@wjg)tB! zyiB0LYr};n270vsH^X!D2FZ*d_Ijr*WPjUJWk42)S?(JE{B#4`O2Zd{71cln5|T8s zo8ivtod+ZWCW;$?EQ-|S1J%UrNfPI31q1a+m>5%boI_H{ucN%))Q=5+!;3fiYw0@{GEX9o=e z*fc(!5e<|Vz_c)BtFyx5!r}n_D`pi86{*7^KEQ&Zj?Q*sr$h{mF^#1!nbT>fuBm6~Xv)VJ zWcaaKBH0>_oo_v1*Ai4tfBbH>h52Obxou;$Zi!9I{U?LM>3u4^>#)-*J1=YZWmSVm z66bEm?Cq6-vAW;?c-;BA@0x)e=3_Yqt0$pLdcoYJY+OW{2OOeYadfQY0@MYR_o5b> zw$EPXLiQ2Yv)I+drsJ=N)p3oVro2L9Rzk*~y{|r2p`;4ku7@FLHn_;EQCZNDTQf(m z!QhvZDLX1Ljg|8B#*-#qw)QJY&!GuSMhk~5C)wEcp)r9k1+h;sJCQJixPZC-`(nD_ zKTLhVxNVpSuq^>45Rj)3^$S!S7HATuc?ALVQHn_5x{$vxsprw!4mppwf^rSG>krI> zWcDN#o=CiaBnf~q6&|B5A=?;|*d6OtIa*#dg4}H<0(otZgQN_Fs070F*Qpt1{c|fT z5yp~BkYRskfc(|~m%mqqE2CMSGb{2;$K+1JAH!agqUhLQR(nEc=w_dL1EW_4{P}Vb zM`E!qt6hWD+0@E|&R1B%_sy&DVKymq$WM9J&{e$FyGCYzhWoyL0*vsc$TNtxrMU7W z5XJ;$Ln&79+CRo!?#w3on08_j)FRWU_adB5Vz0& zXYy@#XvJ9tT%Qw)Ev=*9&``7R+ma6XWa*I}F#NcB9nQItbL7X3ws6j&+2$Wi$XS@Q zm5uwPDGT7))tX)>b_K&|S>3f+n9Y3DWtP(rYX;fa0fXyull^TUH`l^@dha1(S(#CF zu*u{ z#QH@83R?`i7&y(;m!xhV4dE~c9m6xZp-ZVZD-%e<4|`JNPW;;g(+2XohlJlfh67P| zlb1f96iJ>;Q35Y;_T9uE*)x#_6N#XyO=UIzOyouR$sBD&Ni}MjT<Lzi>SW;yN9!A;fp z@PkbKs-q}(MZNAk{YBmPVP-hb1xMrWZfYhL>Q?hM9-@$wm+)?bOE-mhaSFJu)^R>8qDX5PkXC1n%XL||uie+3(sa$| zCaKh?da-$gkzNU>VxRHiH(6_8o>C6%K8hPrq$D*IodUcL}Ov znL8%|Q4hLWtdOTz%|HTc13bUO`78Vm#>ZXZ1r2cbjY{x$6AC^=!+#CV$*@mYTjdDslq@4x&cbUtKP4Ajl89u3%P8lQ9Ad4pJ+I6Ar!$XNn&u|AK>k@$%kUY z#s&0PsK{LVGgESXUdnOJ{>d3azhYJJcD5F+I8@SL9`T|y<~Q|87r#fl-r?w9(s!Xj z+bb39e6r&Ym+@e8Mxm!2xJP9;7f%Xz-+Sx_<7VN2bNbV;t|}8-1>ZEy1@e_*w6mhe z>93lz0k7)q3^^-hfoT60N4Q=+^KjmG2gK}&=+D7-y23`RfyjR1a^6<$@aen(XS_cY zuy@lquy|M_c=v|M`}BOG>W=32Rk8(zl{Lcrik(ttT}o#6C%Z9(buVlh9bwe9Id=a{ zflWMY)sN0|3%E=Y8k$Xk2*~? zU&eYPOU*8fAtAN6F>khP>8ZI(yfX{ej|22)?#O%NUfW9P(HRs_6;$TI$qM_)rb6s4 z0^=W14mY0ShAE+%yERt+C=Isp zeAP>T(hTS5xT0o|M$KuuJkFdS@Yv7O+{Vm_bZ_)TFNUc#MmWg&tFfblIEhz?2JBPC zE_)Xq5__};d9pctItAosBJ6zahYh|2v;@L&s{`fS{uXX8@vJ>mi}pYuCz%XrS;30z z{4w*v;z4z~sr))p(A5q=IdfIkNA%~pN}$4EZWHaJ8o09-v@$cXe=rf8JtWzQS-Z_a ze5;7+xLu1XqD5k_s@8mJ?FGd(XGP(H2Xlw6KxGsELro8G!{bVn5AfD}W&}Zf1Pz}9 z{vmZh4kRZi(6Go<%1pzk2{sA;mM$Fj zHENeo-1=BZ$eS7wln9fMp#JbPXD4^ZscMMKw7T&bdi941y&4wXUtMrR8m%rt)_5qMzF`1@pHM+?EBexL7-a|R-BwTX;O zN{uCR<#HbVbFPx-sl^*xY}LqwGD7?$zT<-rLE`tiKySAF30p2bw@3HM2K4ZYCvziK zVt8|jf=p|PK6XYPs{d8iLjjNF3dR@tNL1_-RF*B;dze$CW)AIqBLdCrOEO7LoSmZm zyf@dMB|$2Y9Tk7#4b^cr9e*dbIw2;_SXA!DVkt771m6*#1jy}OLNXp|MUn#*UOJ9- z#!iwqECQP+=#}qD+H7RQ+(hw;~Y=)e=BvTS>r2ZWErcrc>r zw|t|kkM~XF>`oUVg`?#8a2Zbad#bp>2$-@9H~4U4lF4y!hmF@lsT!&CGB-#It0FsK zf&j$4)wTH4Aj^uV#Q+KIDwr@XO|S}}AuOv_aYlYjP{`e#*O9sXpLnwH+qzv0`wbkv zX`{iLZDpa4A*}!y;ba*HzK&c0g^?|!@5l~;wLRY~@g<&QfilY2t2$HPgJLjgm4meaB%`%{`>>GVXozHrSONs0imy$_L_ z9eSh+&#b)9@2ij*9m%jbsl(jnmFM$Cag4b5bX+M9kLrH+$Faz&3z9)sC#!P#yzIE^ zI&U022Lw`mLk5Qg*%r1K$L=HXW2t6Y7}*Y6d^&T@#}QL#|F$o!*w*6KJpuRoK_Ay~ zH>XjThjxeu8GNN?yV8-X3V%LbySZnF5X!Y9t4F@r*X|*qRgp7p4dTSy%afIK{@2w) z4$U{00^P}UYu#}fE8}PChe#?M@9g8d)$S)xtsOKaNEf0Mev4#%O0sy;p+k_IfP?ew z@7^)?&>xl^6-`3U0#wY1x&)lf9p(|V%+lkedPVSrrm@fx+3LwkIcXFKUw3m;ro-vz z`C|-E+Jk)QWYZs|VGvha(`K~!64;%&6niw`YwAiiFM5A5?t6iR4Jylf?NRcg_BBf! z_m3^bUp5SYg9BJ0{y+o8EU;KTB|CMD_0TPbne81jU$+}vr4x%8=ZhE5Uh$zRbkcjc z-{a}9oU-|6jqdUAK+wGVwIFyF-iuI$#&W>Q&LdTsJyB%YtUWlKVXvPAlFh+uBT}~2 z#Y9gpw2~gqxWZ!{dGNge^2gdd4n8M5)v?8lhz+}xl687J%crhL=eqcYosFII6CL+8 zpZcsjKDJKI$K{XXx`^r8--DcS>TR0G1r6SUR2V!)37M(Rf3Ch>R?Wr6^I}b*q;%T8 zt#Eax0Iy9S_1DU9>#8_x82G(X!k1<(lezjA6VYEr4x9D8WDgE60q{3d=Abpr#ZmC; z^X{vJFYGxu$znLsiXM#$UfZnDM&zi4306C+mYv4uLgk9#madO)^_#HSh52i5@eQHB zcxfqmz5?*nu>S;`o_;+fp3>i?zkN?Alb{ei8=utvt!Rw}hy(6u7a$u;wRi z*by8i@B98jn*+-b#SILD$fs_^H~8k&IzX-jy`JtM?wR1_2b>E)>To8|Ax5lDi-A)0 z4yO}{YO1A#-UwMQ>P_FB;Mp$3rVd{sFjX53d7v+XdDW?|e0f4Xlz=Aj^lK2`k~&1? z4nLZX%!$7S+C`mbv*uMmz34*Ummu)7)v>Yxq+CY*X3{(%ej+=^<}!GPBKM=x%h(J} z&VOt}e^+G}+IjOr7k=8pUe~N=g74|%pdnmqqFmIml(7}I5uK}wdclYa%Z6xP%r34| z&yIQ==Z~#ScX8ni)Bez(TLXziesbiM*> zh(sH^a@IfZl`nB@l6V8RtHzmRr3J}riTYSos9ki+S9KO+_K%e3mBkZ$lQ>B{ww}k# zV(iQIW)eo!L~K>ZJ$FNeyEKiU7&PD8CWMr}ZRL-{38;HDyK+di!^fbh^6}Y{n9S2? z5E44;5uNjH?Yuwx%LLALz*dsd`H8G-MVz`#WSn`5y#=Evd2^j+(tE_k8;e_ScOV+k z%jao9QN@^4o4^Wt&(WFNiT<$Zy+Ci{B}D9%K#=s<@lfNOYNeP0kK)+8VW31el`;ZP z;?&5*p&}>ccs*ek3Qw%OlP%sf;g2$7Uj2<4e4(nSWFNcGxd!~RTAAN}jL>&jfLQ8D zALUMo|290=HR~xsB3-vgh7pqt(N1rJBS$LJqLb!PfA_=d5>e#xxI9m2(V=Yq)iw4p zjLPFq(Mu4;QoYZQ;d^T4FFG+Qhsy3fdMF$4xb#F%D_(W1oe1nndR-ghuE~*i{usNEchs%u`SZWu!w|m&FZ?Za`j#BK(;Ul4 zK6gy&H0N~IYsQ{X**P_BfNDf=V6ZY*CnPosWVcOJY)^FPML#fG9vnS){~(rC+wuOlQ~W>TdO@Z%ITrH>i%{pK>?t7TD4$yK8tdz1i-3 z&1-%=z2ndC51KJ@fN7KwyDtb!I0Fkt|4iG{`Fpe0%5?7>QD#5OMs;u$1x``HB7}b-~ZT3 z8?&sVv$I`{ac`J;#EQv8=diej4(PoQgrlBW6~Yrh04DM+aGyXKyrN%eUwPx0Pta zAVZh&Vzy3`Z6#egc8PV5x*yST691U~I2=(up~%G1ZWE*=Lao)=G1;T#7Yfh-ez!G7l$$22kC2qdy2Nn+76q!n@4+TU;5 z#lbI?Q*sVR+?N0*K?L=fycWU|Q$`k;F)tly(!|(#@g@NvmMR4j;%q9MAT&S1$74ic z2!)pn;B*VLn;gMknvKT1c@uQsXgW_!T?Lbbjfn$`zysuMj4PcH z3~4%(GUVfcl)u&~*{+4+adUOXo5K2p)Gq^}_>lhGzvA1bjno?q^&1Qk>_FI0FZz~v zI2*w*-h#m>kx50TaTVSU6QNS*RF@^DT<4vNsTG&gDK1Dm&eBHaP3-pEfPhQ$`z96; z6#}^1q|aqLmKZmMr@L=>u231!>Yej@rfsm8YgK1O(0H2oV(%^FZ1*h6UFBT8NOUe1(}vCaWW9D}VA zLhzRfB59^YMA8*CBpfAe*p{~RY0Ys>jexEBvd~!}sfjrSFUO2DR3U;!Lbykwrj%{k z$1->6n-3y^oy*!oV!h&9->?12>FFNNlb`MExxaOMcO(I<)v6+xt*HgLtq*(fe4A$j z5TZB(x}>j&*XVbKJ|cbMqA3|6_y>REANKGtuF)LvuTMe%Ik&(_`F-S~MP3Shd&oY} z2$31_;kq3A1H?J|6g#(n0!F}aP#Q2>BQ-*3@Wpg6(Qeyd#>39G;y`y8jgXS|%l={a2XQG~9YKL3F!w`CH}0uzaZ3_6Ysmbe}hMpV#Jqowi$T zzOUSfodX1-?+E_(TXSIly`Ueeefu`?!JRt<;GaY9pP}7|cRC}7aJqB|Q+pw~XAkbj zl&nijBZsGt=91dWh2K;{PE2|8i*4+~=}8?c?;<7-@5NgANski^dP5k|lxIz8Mt|Uj zn*8j0v7{|6YqVd+oi?dQjzV5sjP?niKA61hI~&=HOC)uIx6I^3=a(|7tF-2e%D;xN zmr5$_jYd`0th~&4W(2;@abe|p(bX}{!WT=Bryp+=l@vYYh4%86jGTqg-@7v4!@%+-_c-~z@-ashv3j*pUg=T1uxYf^=R?ZKE|q;xm`Gy zSI7`B_0Vta-|<#4lz+XVJH2QgeAO#2d2=c=+x1i~p!6*Vj0H%VBZnbT8mrYKy~W0T zvt(W?JP%=_$1D)nanCU*%^UkkQ+2e;%DGrq_>uN>^RnbkCQ6c0?5=|;89f4}AbNE%d-w82r5;|88WNlZPCf(irLaq7*2Y%6H zD|jHd-Xmd}SbeT&qXMf%gRZ8!!AMxI(9|?okVLHK;6D22XkC$##L&dtI!&HiM%9dM3{@4xS?NI(iK|71rmUr^N0%nAkATG?4Atpa z6@t4;xrgi`wHhitHa>ipf#D!EK<%O0XN@cv1ywC!1b=KokzcLsEG9dcni4|MB5m`F zIxQn07&f*h(apcWTHCwCR(r9yjMq~11re1Oda27pC(^qEWnCdR{8JQPWsA6+w`VZH zN3=uGfG#qXLD8r*M)J|Vtj|o+hE4tBsx7b5PtY=1Ji6~#!iLT{`N#&Z`H$GgquyFS z@D*cJ@d$x*RZggR#3&CB3=bobO~R@V&Y={Yfd-T9JcG)b&rZc%tCm!n{W=*+^m{-ro=w1!Y!{BCBl!5_^U>C|89>GUqtYm6au-63K~`MRDH$_VC3ynFAi9GZ zOofPq4H7)GO~YVX{a;E}o-n1&xmYl-hZ<4I5v9sP*W$tHy>SnT-z_OKX?KR4CyJB} zXqP%+f6M7@khRCy)g6K8>~hLDB-?=5r8okzF~=t#S*vGV;#2z^167%AC?G9e90)We zd3D=)Gw91m4~~@>GF6nmLuBrxVXDQ9nycfu^!vf%4PCFZ!?CimCM`Fn#(13AOFK$A z5t1~qJsHl&dMYMT`yhw(-0}w19Nm{NOf2P~0&CJ%vGDR9*0dsPj4ysK=N8swDX%MN z6&i;p~>Z+khGp^I)G%vsH^7|RtLA#ao4 z;los0t>37;05yIJ<;vNXrh|10NAs1CenRT;32w|{K*)@~iXZ3#td6aw6+PFmQ+MAN zSmof2sQXX}x=s1-_mDB4gXgzWHvI9+kEBe4_?2RkQ^0rhd%CRQF0abE zyo-lz&+lGyYiIUe$DfX(uGD$Q?*wDeM0e))QrH)Oc9Jy1L zwkJU`<#$>$m>ZZ-qHW+aT|Ph7CQ^)>8#s5zK%#}ZcL6c-I#NN5rkS_T6eH0|O+Bl5 z%s9u0g34GlSv5WFXsB{EDv4EVx0JaH048s_f2s;j(`c)}%4efkoA|0)$HH9)M7H-nX5m?N{w+r9y^tsg&xG;{+-`9$*woI)a zno@ARk5|hTp9gXkXte~Uj*eY!j@0u>0iEU426@=Ifn7JUbk^&UaYsp$eFK_kw^yP5 zG&-)%jL}vttwQk)AC%_!=|gJtT+qpfgr$D%W|i6r8O5I(Y}tft##?`BG3`rqH_S5y zmt3$!6rFwt@kNYh2+Xd~P|DVHDwWJYmIdmKLk;|){?AN<=M1mmxmYf?!O75e?<3C?h>egp;teoqT?4*=z8jMmMv zI6ri@-<4eabFjI1bszoNw?V=tEYbv!u7HnMVgi;H@q`s+zZf~J&g1&uAZsuRqlcL$ z3mjP$YXzaEM`)^tc&Y)~md(SP2*167jM0hPCo_g5jS?A^B_JTCI_89_b?zS?r`@le zW*}F1!ip48@k0fe&CzQ=8tyryxWozYL@m*iynn%IPP)us4cW*!qdGTcXuBgD>7rj7 zrYtSS8Eg|ya>c#niZ>X5naVqU;f8&)B3jy%w8pYL6yi*2fb(ZLFtQPcsELevZ%B;9 zIkH`iZ#2PlE5K#D?KwRrg2Oj53i`PfgenTY>}HW&GG{1B0ifo&VIdgAg2 zR23ON{EQW9ub5E|NG(|mmj6lsRNFIZC78|&la{_%nS9^IajdXC(of=KC30PYg&r{K z%R3wNcbJ3h7bG1=$atiozI|b7;(;kJ_=00wi(lLX;a?fMLp;J3R)k*Sz zc74w0Gdyu-st*&j8WZ>F)?;>b(WhKgY38K!t_OG(EPXdM$?jIFh$E<7la3>X;$2e9 z9Y;$7WzVc4i}@aZWTTezvE3L^g6PGx;bi4eXe_->)8A!WmWH>o+-C9nP|HlkxSP^D zzDZIH+Ck8e5JQ!H!NyxcDoq6J<&;b&T5KH?+?Dj-?`Z|6s8o`gi4pJ#(K4c{$oDILK4 zKC_!CI#5ixFPa`^)R4T~wrBVP>M?I>CmI-hc%?JFRrBfziTVNlS0sYh2VXCQ1p+$8 z{ZEmI>Hl9O`mY>B!uan=NNr0UTNL#Nj)bOq1Krp%S|yum9g%M!d>L9J6v&n(MG8ct zX?e^{0-deXkbk~NE&nq3Ct`-Tyab1L1Y_sZpQp#O>n~Vfl8VyZvv3YY!;zt3c94k`Kk0c#=#-TZARJBpP&?s*Hiyv)KkC`3Ck?TLn>Q{LwB7 zn&spKYb%MSf`fKTex-(pm?*k5RhpwPygJF7%#i7(VtwVVGq^rOPKCqY^bb8pMVt45 zC(N+<4qd4f*sTU#??VSh)toBvdn|`VOhH)*}`2q z+gzSOXUwJ)Qz&vvrxi3hfQhi|dzn24k+ppUFK_pZjhI(+pUW0ARaooL?21L}VwB<0 z)rVxKN((KBKv8+gpPQ)P!P#zsfi+A`o}z#&Tr*6I0h;wH+xdFf8!mu-gBe)%!@d9A zV#8PCdg~;j)Vil&csd)6;{^RtNb(V9GDl*QYNOVj^&ZCcF$F39#OO|to61fj5@;dbOdvaeh7uE6*@BJB;mEm zKErd*Vt3SXHj(`A@EdS97MK%B+o?8sO}y9URs@#XA~jdg$p~7tB}D;+=|6b@i_O4_ zA`r|rWo&DzT@*lu177}Dh6o9T)0KtQ9NXKj)Kko=)-Wj5Gp@J zS~Hh)=oDo7-tV741M1n3-f(CLgb08)&nhu`OC z!eS>$yL8aehb9azPahQ{wF(jqI?ZnyPa#L0<7^L6TC&@&R+Y$w+nQ2Y@B3q=8FgYx z^IF%e;rdFigaq-Rsu*-Cj16#;5q9ws+it$&IqwS^6)P@7knbbQRx!d^$Ovg!z$*+T zb2@UfYA(|Tq<Ap)A8D0kPYWTib+JRZxlJ>H{*+1~HL1`9rJak;D$y36=)-({VG>jb zo|{^3irKPk_rjs$uZl_gIAGV@UC*)!-PPW*4cwJmc;iUGBiRy57DRx}IrrNs!Wx4? zdMQEZD#y$-JF5fmAt9>pzCezqm78t~ilJHWkrSz!u$Y~q!niqfhkhGf7chT^RC@-c z;dbduWsoNKdRTpjD3{dNS=cu;|+%B#w zVC_Q*mvRYiL$6g#)D{Ren;2C%>wtiu^F`P@fS}U#&R`C?!R^BK*jI%6Qhn#1y(dRU z>tdJ6)`!t~<{Peno15@JwpXGT>Y8Bj3SN8$lLPGh%kU_qF}x$dfPgY!{tp@+)4v;@ zy0$Z_DC##^Cj$d4B7jx|b+I5@mJJ)kgAhqK9cWHAC|f`V)s<;u3|_`8sXe41Ek5li z`shokfL`sWpS*HZsG_uPAOC*p{$efE#stF+Em`X2jJdqm`JH>KoZJ8NX`v1X{-Aqm zHCS+shd%qD(Nj>ETW`?;_BR^+7$0>u3YH4&*l`I?-n;`A084L}T4~&JH697B7<0kl zSDlou9@_yG*0g!rijvqM!*b^4O9<2^DF*pTuK{|wHjL2X0$TTe4W{{)y~)xM&>5#=ixsjf89<9U z?8Ck#fO1u6C?)7>&6P_&knfUXU}8P&21dW%U@KyBX!c&@unAfIgun09-B_XNbD9sF zS9W*QGdRr{d<5+?!@|tS`Eg5j(O=VMg%kX)S{u=X)tu9aB_|(gJA}~~CKEONGM|}8 zI*xk0jpRg6vTmlUM#&IQnBX!) z^xz$`EY8mQNH5{V#zfR~t64_b?bo!hFOB8N&&a&W)n$Z>TP3BrE+<*PbB)ltOK!mJ zS@mUla3JeyF|u2wFU)!_2W%rY2h=BouBDSW2cBdOP9#Z0{dFT)<+t`* z!l4immWGugMZW17Sm4wyQ@d3`F-EO=Axg{pW)k}xc&|37G(oh>}gELCm zrpAI)016>>R&5|Isx~B-I%8T@tl^qTEa&U`W9l5IyH)hO)jGnF)7<0jI_e#*CHj@% z+!#sJ^U~ylv1J!!{+lxLI|kJ^PS2+w;wRl_(tpTPU7=5v<2CMYZ&o>RcoQsgKMs#jvRlPF5e8iNx$s0y>NEu%pa)MiAuz zSlQ5G5+kU#K^&$T_>Lr0Z44O?g^LHsgLNX3LkGIE(05AA0tc}%K3>voeGDQWVH!VW zz5Li~Q%2ZrX0r!aeyXL1O0}Qd@X1|9%*b5`;!n`*w7L)T6Ao z(nb{S9(Ed2fEL=5k1xJpSBelc~fjG$8C1I%}ffPm67vqx1t0 zz?ef}p6ttH*d;cF*%p>>1i6xi$;5%=X=#Ne5b; z$OBhS_p1MA7{=;?LfCav68rF`#1b1cGZP9RYl)IZIB=w(BgVRd`oPnm)fQ3sH_5hh zOmuT$rt%8Aw(R3Lry;}6J*C*UnZS0TpnJw$ZiQZ(wmnUd1OVk7()`0Rs1L zb@q1|q`)arolVM^5==6iEhiqP#+}>poTiX+G#@m5<=J3R=#F~ve%n*EdJKG}Tf<9r z2Slha-<2af@R{8UWO(&k<9=T#dxp)nod)9p^aXz9h`Z%Iohqny zV8TQ0LLu!lSjtx@ItdTuex62Xbcal*wnj|K*NWAjg8FA#oy1#aaQ=}EWWU1Q^w-oN z{gcU$*pMBnSKL}D5Apt+I|%Tb{dnl_5PoIjiV_>l^E4ku4#$Dnvy3O{lEN6_ePsL`r@9vAVdSmikIE$=-{Mvp?4g=c|4ya02nCK#gS=Du%S)oqyKwYX4Za z)XrmL+%{2c@S?G+FqzKZV#Lp*+131^e4)WL&F2`OgN|1U;@pk0eosMyN#QQqFc~0~ z*UOwjyQDH|_VjGUWB#HnWPO>62vzrwA9pk8S=tu(j^C;xJGO{5Tww)CFel2y#qSf6 z9c2DwoQj^xBH9XP?hlMJKSiF$;cJ;ZErq9v(`w|3eoI8omx<@DwblUE-6T36`xfvX zX0JINjaZjHuGN<`{PUD6RLY79rnVh*-lbZJ9nF~?V^`I;)9#|aAV_1mPn*r+)x(_4 zL}NUByT#1Ny=89NRiP8$70L5EWg^dsx@6WYEmb0&A`#2hEe(s+H#wS2{;aO1p65)a z^4T#QO9l!%!cggvg>B?kAQ5i7D1}Sko+i^_%SW@?_0mTxvPDsG9s)N(Zb84zWHCx) zo(ZooTkTNTYTQ*W5?%geMf)`!7A{g}G zu77**wa>tc$I<^&!e-Z@$i2(n!Ged?L*6LB(3~^77QtzBL6_NIa2+d7pL)5phd=r# zi$fM}mN=xVH!+2tj^@3IRi|q*T1~sK;TNkEXNoe`=BSd(86)&khtQdlLll*%$>8M= zEqL@s!{vfkCq+x|xBWJ;DGzDw0d29Gm!utT>4^>XVnv3L1V$y?JJvD%@K9} zl4UVzDD}H2Dza_5a?4Upj>E;cl~ICh`e)>VxILq6x}ssPgHINPhKxj=7e8rl2j2g3 zGk3fIA2pKG$V+FjC+z7^K;LVbu+R+?ce*E$FpCIgHjHA3^Rtdv_LF?g$U{6CE#|p> z7haXqs}rZ)i6Gk!ucE$C)pmu@(8ir_twDP!4~nN7j?wO z6T^p3w(Z>8hg6CB7UhZRbVM*bxkF7l#Yp@6>>~y{OCOc>;_#dh((i8s5sQ3Xn!f7$ zQzo*H9Oi_of)x4vBWQ#J5Ns@E5UR&2#suJoETP!qPuYdbSmJ+v{rAtz%=9!CB_M!+ zLXrQ|z!v&n8`#2zHa13v#?}&sb|yBaPXANOQ>wCIw;+JXi(Ss>3g-x*-GsrE*o+Q- z4**j|ii#3|CP=Nk$$pw|b9JkrN4iy)P|?AA1>%Edv<@Od6s1i(%3W*E$;|!x+Y<15HPLY2&O;dV!2_T=;V|5Fudj4qL4G0+T>G{EZO%o$(X~M zh3|&^kjkB;ZzP*3UtltizVQvpmbI$)eR2g`%YeDA2{$%imullI1fKM&4I;A zTh=HNR3l9%_|?kP9?)1)u!4@Aa>gHH-VzQe{5lRsFvwRRReX!dgeFUf3vAdP_`982 ze?1ezSRD#udMK(xq)B>XnnP40$cEACm~?M#>iG%uFAZ8opjyI!00G^A{a@7JzX$LC zM}y%RZDDPJLTwlf32m~t{h-Jyq7)#3DM5>BzB{YZf3M7H-skxRf@TDZ_V4>3ZWSXm zQB*33l%!2O&E4FlGdI@x{e6Fccaa9TtlA9Ivf*tuopy~J;aeR?hIO%fV!dIffz|z} z8ikHvw**sS01YwoB+}bQgeQ)p#~@B+R|$2f)I`GpShj z7B^@s4ak(iA6nLl&uBADiHy~9r18%%nNc++@`z7YPqC*dpm%vFbNT9lW$Tax=pd(?GAo_Z~)Hn=_nndF2mo|y_Qsm7(kbhJtJa*b1vmA2!`wbD~q2Ii| z?oZMmA3!E_90jhhv2TF+KhbuJKLDyGl)CgpRfkx!bm4+SUMty#?)m^{&)U@E^Vh#r z$T_9R1NV;#&;O$e1^%~G_-`8QPSciOR6rd0G4E7xYt<2<+ZGkkMX!(c02grtr`Kc! zE}nxpDD>`=YSr~(#56W4>dDM_CG}YnA+g#oM)0FJ$hmgX3~duVu$yPjbu;s0HZQw+ z!O!mn!5mluQ^J%H0x(j-RdD2q;E*SAL@HC}4F5(0NU|7+YsEKJb<)5-u3wt*zB;h*>gQd1vcfeo!DGM)Ecy5OnEi6Y?Oy!Xnc=if>+_Q+AiQ5 zXUN#6NQ=B~Ys22SUI7Bo@D()~E3 zmkmAmY?dy+N>`7~ze$ z)(~5ZwdtTM%&ch^$TqjhT!9Nq-BC~&9z#{e;&k9}=Z%NVS8v_{GF?^25OceOJ`6px z(azCZu9xva0dvt;N{g-dL7lrPmC)wvYfccMA?W}~*_^BQ7Z=)U3r<_&b|(vUqE_Iu zZ+E#B&;@@N^vqs$&sip+1)`j--=`rx>lN3w7u;#v*~3Q`tIm{rO5+Q#2*hU|z^-V``6rQIfI z0KTMVRatDyamWwJl~7QZ6d-v>3b6};W6)Lh5=+INLS;IA#NOmHZLux!#T~zBF;DRw z@;{8#d#(wbsQ8u0i0i~I)bew6JTOSy<8kUp5VNtts4d}#97bDENeFumv;=U35=B@f zZ``BKAfAE*^iYRrfnD2RhmiBC1OoI-skC!vQPo-#(wMNUfrpV`H^X1r-EVDmE{%2<= zzsvok$9tyRyxqL>AL)`5{O8t>qZF%Tc6-42-_em_51SA(X^fl?kr zS$7wC;Z?jx8Z|;lSLWme76UaplMa)@?98YIW>YOY7>-dK!}<3j4+bpCgKh@751nI# zMnSZ&u0ue^Ks?~JVHPpGQzTJikUy$j7AlxxX~+me22r|kNJ-Hwf*97Zgl=4yL6pYW zf?20XNaehUN*af>Qa6F#%A;-FMv*+teDBN%yj5!~-m6x7sI>SEz}Uf&#*J$p@e5-T zWyG1kmr$)!q}XELjM){5L4^6oZf*!`nDG>uJR(#_Ya$+zcxT*pqs@I4@k+;+$UXAb zq=-joQZyc(u7-KgOW4LCGIpON{WbBGG5NtHokKLIGCIG_pp+xF%HJwt;m!BgO3qlq z%>Miu-5v9tb2^9kXHX~2p`(9Av@@Jz9^tfklCD97zT*gtr(Q4HpeU>WJ3z$0KQKSt z@rXUFV^$8177a}b=Fc-yem>4l!)jm=C_w+K057si;}u(kw5INtnkzh_Aa3en({dj4b_>-?lc<;V}f>8qLqFsmD5K9rg-i ze5;Ok<0{-`7}0ySFN?8BiZ?r?O}9$AeT;vDxqq|yqkH{=Alzjh@$&l%0rswtj*n@O zKT|g!b6;85$1KACY~LA!hqA1F5MzHQ>@{B6hw^)ZRsU??`noNA=nxx&M|^embqC9c ze&Q%O3{1F)FqE*AkX6_WlW8HLgAh*F>^D<3m-GTD#Asj#j>#w?-B}tZ3pM9rLVFm_ z@X%fdj^SwH<~fjXTu~{3IJOh)51&H19>%A19P1&6aGd)Xlv5EM`R{uIVL7%#RN>>Z zB=m1~r!2yU%&p!<(?Xa;HTt5Q>G!cYbYoyOq%qMk8B-axt;I>FUCP-XD;A{D9xfn- z@FobP;y9)g(ZFhqH>-s3N~JD`RPEa}4`FGTjU8861$_Ag(@Tm^#XT1}9Z~Dx+l(1$ zb7qR?(8VqvJAB#N@AGZ2zOr)M*f{aTw3z6->240!RB4&R_l+ zX_o%Bkqx+Dvh{xO!2n*4kP^2k}{B?PP(?@2>D#Cqp72* zyddAv(9~Ab(tvG{uv|rg4vWSfvWd+@9RF9Vs?J$Bubu=wW(kz|G9Vi0!mff*+^5SpNN-sC6J{2^_hw$WgJmGH( zP4ij?;rMz}Qyz}o6{Hw&1jn*J3JZZAG~x4u`%X(q-O}hT8Q?^vKU_2KDvC{toSE#T*5&Ez6C=K_+iyh94c>G;fEkN ziO%o?0ls&>LI}abk22_$(bo?1+%rdEqGxD=hAQGR=Ym0FM>`e25UGAF4*ZbqKg$1*z!yCcL^i(iZRfi_ ze(#-MLpLC*9zz3Uf7A(s-ASe-XvE7;E6;{Op~WQ(mPCb``e?D6zzl<3mXAqG+oOM4 zGM@X@Nfeftl_G_I&~=b)AjnrqrldH$1AH>$w$2fCLeLo1&O=82^32AtevG~RE#kse zAlII@X%A-i5mjH4qfKNo%nGG|31(p)cgivmxahe zGR$kj6Y(|#%Zo4;LdnBW&PQVM{DDNx5n_l*~(8bh-d5+6F4B$aq(9h9wD3^*B9z@ak>ohR!g&BEuA& zKKwoXj}fmLcDwFmPB4L$x$q6Yrc7a z_Ffph#Xk__d#b`U!h)=ef5Z7q7Cqc&GuJR3-8>EE8yyKQ7%At5HS~oY?n)ST@$T0G}jQz=%6IksNx?x(H-PA!4^55Owge4QP=4|0QSP?DFOl76Sqbi16L(dMJ zbi8G;dA3xIAsFvP89f~}G-@%MWV(|gu>VUsYMvDDqtr!MkzPFF(XcA7@q0U>?*ok- zL_Zj>rZ2?RR6EXZ4@t&RCEnUViuSK(9hE5%lX=V!`>cICB|Ui;5b# zS6V|!gQ$M9qWoMvTb_$@ex1%TKjX^WD=#C=pq#_0nT`&ftnq7Gb=Ddd%nBs`Z{>Ca z=lSVX6HMeLs07Ip(#Skicz2TJwQDi>ojz2}GNX8(Wf-!tnOp;1A>hC&|Ikp79RCd~ zu^*ncbYgLmO??RomW_%o8O_{CQUyTkK!JXr=rAKGlS_M{A3ZW8`-F_zvHsH0Sc;_Z z)ZlBLV#Pt64SK;`G6}EKRWRw&!I`8z#;*lp61#@krU|^w?YVYDRi4N%8L?ecqk{tV zCfOxca%Sjbgu(COuiQcfC1ie{yWM~;rQyeCtXq)a9&Ue)aB%Fs>$JQ&#I@hRIuLZe zSehvQ*IF`uEUGoV-{xh%y=YA2c^3->r{vK{?6r=?V=c5N*WfpnPqyBGT)_0+$dx0c z5p!_D*C1_&=xWApq<_}*PWl6i-)Dsj{zV^L>-T$#+r*NKe-0P_Z2i{>=&c7Mzy9A; zV)DO~#P$Idl$$VCaC8VRE)L>hWf*sd3}PkYbanq^a*cBmS?w4anJ#=ks{< z@Nk-8fAW+=<_O(h8V5l1u_uaEJs`EZWQ&lia>I;0{ejdV<3aq1kW)Ym^L6_i38nIm zk~yd62({7f*TWQ=h*WORSSg2CZuwYF#v|j4iYv(?s+>wL)hz8n#vtKV&nR7`R-mK4 zdLHLdeAP3P>f>=F$>IL|fmSJp&TquW*LK3`h(Sg>!US^hgJ~a&w^Q%pL0c(@VwOVq zR619QH*e$PNQFMdt^0X?)7?GD6LR z!JnMLW2U;_Jc$KK*N=2hMIcOTdOyrf(!xeq!NI{qN7P0ZX!b!9CAUv0JgDbsolQsA zY~u3R4r!z`y;w0Xr7JFw%~zvKR8T=u!NdPhpS{XSKf|%|3oLxWjnX9N0IuT;Px=(D zq${3)gK6IOuo;-dYJ%)`n9*vl1 z0e!`!l&bRxptEB#(RmC2CUrY!ww~}(?<#%ez!^#GT1|Q#|3ngs{O(5_&rj{*s10mu z#c{CXWjQ-OR^OwuvVcKJ4C~)9y^zXJO>JAol-TCNeAZltv}eFguU)!0Pj+E+(v{FQl45-k|C}YDJAk9aTRct1K z{t?{Cr2Ou72?*ynkR{(Co=ch?Kb3tK*X?1b>*|&e6Ye4X6#=rbF(#P}!L++H*TMkn zB>9*V!@e<54M8BTE;i^%qC!Qn8{9-fN9o&{E2xk(KV&5ao%9b5ZY^7pw#wvE)|m`r z_DgywBbO6W3{9=L=8 zT}LKsQf?yCm2K>^nh;=#*ENxSi}H>hFsk@~L9rC87ELMR*vO|fbP^9ErS?!o&)6}= z4mS8kv*S3ve1OyWnNG5k0(iYCnoY=bCC+De=3*n|x2uy`qS1?}uw^1r%+q=T9yQxJ z#8&YG4eIn|AK62If5Jrl&1-Wi@E(JOeGMnKuRNUZjm1k-Kqy=|mQ#W_Z#&Potl|Qm zCTMKvW0O}mOT5K@vVp(8$H$odxyimGfHN+o5_6bMydIJGuoWM%HKs(zWA$T|cmD>HwoAE@3sXwrQq6U6&n*o(D^(&I_#Ur|Z*SXYJMcSmsEaOfDneS9m;?%czQ|(=Fv;yA#YtD`bRH8foiw!vt)N|zLg2mh{b7Co` zbA1rv(NU6_k#CZoAw5Zs=`${ynIS1AfzwBQgk?iGa39ei73U81giJm_JLO7cyQT_( z{cWv*1xKS%1gY9W}cW34%ZeV;8%gyUt=7whyxS0yvG&2RV znJLF;-LEF*EXSU;2TFg|)g^<vUCll`RqrLBP0@oxp zSsuT=tiw@M*1~1*;9&wy7Y$^{CafGTp?BV7Y6;v*81dvuudu4swLc3vv9b?H;V&UH zW>776PkPZLypod@R|&iFB-ut)-9x_vMrPDsaV;hPRf}7a!nQSsmyE!p&uY1wgtfJ$ z5Q{;ilUs=6f}vwdvn>=q*ydJU=qgk-f997G_5d`0tltr<{v}@A+qOfOl^obnf)aK` zo_|;B4?D10X$p{m2iMs?*m7OuJ(5cLHd~;X&NfZu(ev=6J{@`)enJl|5v5Eb0GMy( zKy@B&I3OAv0qW&e^HIxBC&0p~M3vxm*b%v#B?7Cx{*Kz96%=3Ma3%Yrb;GC;g$_<6 zW8*K5UiRRMEvdeidO^s@X|w5c?o;8-^pX)KZ4+|H2U5pwg(8k z1=ECg)7peDoQMQrDctpLRb8oqx{~K0udGf(%9owdHr9VA$C}2_*-eg;|K#v#1Xw06 z4Wj+B3pE3#Y{40$x5TtysMMu86^&e{#}HI{mOL|}Oti0N=5KyV*du-70$8QFbTlP0 ztMO#e&4Z5{Tt`)BcCgAbxvbGn6XeRK4~gKVSc0knS^wsiP97sBFNK}V0_nBBpBfmE zwZLg^7uFYEJY=UwS<)Kp;vC@1&=T1TQ$N&qi+logajhRiFNldoqP-)9Iq4kav)pBm z{OeW1LBCp5&RxNUQL`*z+#kLrnPv`(UCP3jCGJncoOzs!`jngjmWGz0;UF4|&%g$j zFwKJ=X~Y1QqV==Kp~g0;)S=-7lZ7R8i{URyre;NWU9mVROqT!s2|14xpH`O z(nkZ{$f%Fv4SwUwb-SP}IODPy7gpF4#r<-Mq%>g;X)ZU{_x!CbuBG8Vq+Mv{64O4X zHvPAAQfDC?QpEy+;tdqbFxQ4I8}IROqSCeV?P&gPf0Wn5ynvf`FZ=!7?ip*|=nFM8#LEuVjX;UfaKG(}tmcH8208z()WwL7!r=Ib%4F)H z!3Sv2g*31nKv!Dy^4cW3)tflGds)J4#FWpl8uTU~UXj0WCjzYE*3?{XL;-tILXbe{ zBOtW{fqZYhNQDFAeGaY&sc|xe4JtQ#omQi8En|O-*fulY)_)n#@Z1o$*4P01^?BnU-?~pb_KP{!u#6p;FB429#EA zf1#?s{u*$5EaIBo(Ur2~?B*w2G_W8p z%M1zBPN|#s&bjgnnwpCIA-k)pN=m943PK>R`MiOJt161$S5t6<1bKTh3R$Hb4z>{i5$?PNWfFjQrS_} zRF#v^SCKalF3Zh56f`{M3mz2tM_dg<1yHXADJL5hnOWKk8vYC0Rn+7;K0L01S}jgQ zS#>#ujz&vmNaeiIzK8-@1tK?wK|?$7?=le|;PkQ0=`|nP%bIeO17I^tn#zYEAj$_= zEH-%A^olk_S^lVyRju$Va$zfYJ*n#L&YjviH3@Za5U-%J;RzDuquBbbH-`c%gu;M# zG~dcu<$uF0LI$?FZCjg#N=Uj4Sz{*0i?txrsL>%Qr69(O-u}sHKw0d41Q%nd?3ZR1 zlwu5H?3L@Fe+I^$nIJu8i&9A8mi<|(c60Qy;cEO!cz?4^a$hs=FnFJY_G>ER8*6DB zS??>-w|uAo)gK>Cc_TE_Nc1rsMU#DtpY$A^5BhI{jTFY4XDf=8VAJUP^m9xCA0n5& zCCh?x)hHQ<&ZVgDwk@OA(bmyyY%*XfM`vePPM)l=q_a`d1xy4eU(J7xclBUB3W`J& z*Q(CoVp!iO}JL;#nQ+C@EjF3I+q#l2F)2u?&N>AG;U(gWDh*s$* z-SVr5q2G_BlO;t~T2rS)d zAk^brr|_L*tApL64&)j2w^8@>CMyn`xaFg3Zz`23a3iEKyA1r6ZFA2vZ4K@tbdl7z zyU&q~7LwUETPlfhX*5p}LaMHUg%;YacnWJ1vh0zz)DL58>Jg5Wv}J-m&yV==>9=P; zhkQN~!Gt$>3~4;K{-$rvhHFrmsH`P=>Liop&fPu- zOiDb{R(~ybPu<-Z7fD+chf6&W>NnS=P*ojl&lg>65vPdUDGfr=!=S3Btf9^4WW?84 zT2fI_QC)3lHuIJOo*$8z<40cm2~7WO%5Z@dr4~i4qdheSZl`cLZWj68Sb%_eN`>`0~-FSQ|Z% z8x}rEOxz8Bd-qKB!{dSKQoxuM;v@(y&g(}~iqUuR09E4MhT3}TW(fj0@PNf>6qQ^Z zJ&^(Q2R0?iv`xF(3KUg-lIv{nkis8*`&ZDjy;{gAZMR1*KXrwrUMiFC4m(wnipE~L z8f2DZp6DECzO+QIi}%u+Z7){T zP*v*!AcwtFQt?&PG?gY_WeST?%i?$#dsY#PQTLX4LZ+o=Z9n%Hwo{-#eVukD1}EiJ z*N7!NIICUu)-Lx5M%?Y~e4j*7CYeZHz$?+*6WVgG0_Ce-pPSdi|{ z=XjoldXUpP=7o#8wZHp7CvWPWThCH25p9_>CjD0@-B-TLG32+KBf z1e#$SUHj&`zVPyFNb-EwPHuh zUMz*&Y4IWQq~L-mD;Dm9D&)xoh)5jRlAVBFkr8D_#qctnVb9j4zU#nN5m%y)z4ZS9 zZjH9vd!lq0t8(h_Zst4mgBTL+@2-O4JNN#5&|@~^JpnMUXNtusqUve3Ar@w{_pXEL zmD^E9Y(nol^@V(NdnlYP%IMSFF=UYEqVFY$ssH8Psl##2$@FUJLsj`3=@$;zm$P9( z3>qeV&X?uuYoHj53B*|SPN#uNrACIA0eakQJI;u6IaI=9 zFAv-rf4D*CSRTHH7r_6WTmqzZpp?*MzEHw$fxSO(=I6mc-_B-oSHqMfav~i6hY>6g z+WV%#$ur|>O_u1d=`I+A^cv`4Ij|?U|S#xh(vi zXF|=cq6H0XXr^S7U0}ILL3>^Hm^}p44?OY%06El40`*23@g6;tmM#Jll|UHe2UL!v zK_(dNO^J6A{a%ppwa*@Jb_2wOJEwYowoI`Q{$0dB_mB%6Z-|Q&hg5@e*vEVrz!`O? zenx*0B-)wRwxhEIM#eu~s8C&sBE@4+Pt9-@L?#kc1yJvR0+6%231Ol9%XH~S!k_jr zrbybHJHzPLYC(&6Fv+7RM4_$;rMl?GqvpxCWPz>s!xQag@BeclFT33u5Glo`{9wFw zJ1G-#GT!A!gUez=v1A)Ec&^flb+QAb18|nd>f=Pp5RqR*DjuT zv{6VFND(&r#>|V=NtAi&dS$vG+rmoF8Xd+-5K~~1QM;ptsG&Bfa`8>b3oob8J$&A% zPs>L@%;b~SCg_QXA1rx?iMnu*A$KjcXL0bNWDm+KY_A&({strHiJq~CfEaSRXY7ve z3(wG3yHByNOf^@b?>2D*Jmg%6pVkI~aN zerHF!^95o5}XwMptbh5>{P7*7U3 zalujML0}w6&rcNOV~oc5@gRY4VXishXZpkKiNdd@Il*p*c*X6*G2wmOIG?ut)#A*d zRXP%A^OTD#?IRbiHmy5P12XR{KQbgA+wp7j6KdWV5t(~}p-7{KZiAm()BINzE&i~e z-E-Idpm?WmA&cXhQ^}}b#=J2mY7|LZA?_!tvw>!pQh)*;VAGXV=xB ztT?r!u*)3p;&|CJ8lpTGW#5r73l?Ji#Cl;O&{9;;gP_oiou~|8RuyOvh$d*lg(iNs zU|JbK(Wwa31fkUN_j{>d$~#myB$r8Di9@PrS}8eHD}u@lqi05tW2INSgLojwbXxb> z>4$5M^-3ok;M|jEO0}*ldye`%FjwiLxKEI~lVPnU+Gxv}02QDMl#h}860wU;miTGi*H3f%_hLUHysYw zDe_ZyF-t)2gtH@3r>(f<%<>skJwV=3?jl)+vD>R2;*tJ^1-aI8g+#r*IQwQ}^$}%G z8XMWXbKP9llm6CVABl^3J2u7q+r;h0ljX+OM*DKMp*nXo4gX`C1D692o+BtYoX&_X zr^X4}n8(?OYc#DmEdgO8QNoLBv1b$Wb%ac)`a#h?t2ff%;7^8=Nl5bhLRuQNjdGj< zcYB;-b29S9Hc$46)@eN6#k+fQ9Beu5(qH@TpunMY+V>}8{{87vP2>y40CK$ow+nP6 z{()gg)*dqfB_K6ksuTF)&J*%bH4MoG>wX;_9sYoV>q^6}kpc!VbUlTS2|;rYPn=OQ zmH@KB5og3?iEtDT6Dpk8=4_UwZqE)kpvXAsbKhXRMBk$D8T~NNps@cR-eL4@O#ww- zi`P<}E{(Q02JP8vt`MmDW&yigll}TBf&I=nfxyVmctwxK3r`(c=WOdWFLOF|?K$EE z8(^vTXQ>RCD||nHRr%fs>C!_bobe?wy~1G4+$};kQ1fc0ksfgupQtjTqk7G`A*;M4f;-(=uQ0 zkUjOsEU7D&pZm`pO63P9yW}!^eUzhk)+VFu@oWK24agchGd-B%*@l zhB$GlM-J6J9XPA^@Xz*dGqj)5g z8}LY}*Wr-VL1|4e492CY7}V#mqnNXs3_4pZ}IC`RYAYkit6g za{oNBffv7`o#}Z3e_P$65!iipFoQ$34m95J@}@TRnFgRX_8~SJgrz}{40%(c@T=3q z2ZGlla*H5olcM)88&Yji$NcjW;ri004Wu~xt}63C6(#E;tk93;gl-&m%%WC3h&M#b zA&eP(EnkCC+?ut1rc7|h`1Y_3F*Dbjs)Hl<0nsU2-y=f>+pimxX)$S3**3L>)Z%$iI@D`;Y z{Djf6_vQU6o_$x(K(qTT=i8YS@3<{Gf&Q?ayAbhdZTmw1ruJQTMgO+NLAd)3#(|S| z`@_-8b@=-Nc#E~O@A>T2W+L7FM(f>vzo~uCPQ2Y2w0l74Eq^u6H~aSl`vUs_J4FAs zlA3wDGpQHq;m9}09X~)?bt|-wbAxq*wGf`5djnWHOI{4edcxiaPhWC%r?|-30oa%;EbiZz+^gzv7Qpan-78_A7t=A) z97}Lp8Esn6Q^KYCQ%XLI_G6fB6)7vuN$dm<+W zm+^2zAV^8l#71Vv2N_U|@-_cA8M%=)wU&Z*noId@0lPhjlpuZ}=;yFimLGBNv*t!J zkqUugX~UyC8{{)&QnAh@PUo#dX$y*icMf2CbWm*0;H8zXzGdSlmWd&h3m_|Af^uZ7^3hJvnR5+VDZw?hYEzz zjFopF?;xu6dmUK5X=@9A{Aw-@J#+ru`qzHo#;Lg#hB7Rh#$Zc!dg0mtwOOaR6)ql$ z*QV)gDDQ00xhBbeK+h|BHPAT3=kDKz!GQD{-`$2$i}reWeemjD>kgTVh;W!YMDo_+ z4l95vx0iZAMKsiC*yFAXIs`*Zs*7qCnL2!YFngeRU(qJmMQ)4ahvXL78v!wVd0=zT zabNGQ5b@F|_*Nav$xjc9onf5vM1$Bqo_Jo1mCU%+jo(xC$Q+(u93(gcCYR zrCnQa_iF-O;>;NhOg%G!dB+ME7D)Ua55REX?U5qG=n4(IV}ovK*mqjGt9|1RuJ+PL z=n>R|C=hG*D_kJN{X?*q`Ia(~+#~v83#HLEe@ERTOvV8S5;)i`PYQg$BV8XRLxsl} zg#Us78)!Ecx9fi`v&EDgLVM#6wi^VaGyV!QJw|TrllsE^h0<66DLtUz72wL@U6Awe zeb7+%&sDHbrRy!K`^CC2ung^kJO(zK+}z_nzA+uwv8VE_Vbsin8)dlLHLjFy_HQ}# z3f(ePI^_3Y3J#NAD_*fYOv#ecQ{+)D{#BGLTTpvryFIi}S>eyQW<}TnaZ;9PMRjiI zmjL&OW$xO|>uzS09<_Vbhf;~CCE_$gSh{F?r5VfD!|;U}ZdpdZLrc02rn3Acf)_2u zwM8;NZL>57WMyM>yKum!OMwd?gL|5`FngRl%mrDi8fpe4BB`>|fCPQo2RVG5a$Ex$ z1`)b(n)A$fqIPxKv!5phcG?5DqS@UrW-3cxzv%y4cpA$j-44PNF$g0GmFNSA8ZaGA zprTTxv$$Y^TIVS34|s0`SFD$C&G+t6wN0S6a|E-q2`457%L^YmIj2$NI@{bW9kDPQ zh>4C9j`vcE-6JZV>W10Ikio~pl!c8og!O5j5BGj9aCw6aPq*s~u&Elh?F|#ii(>hn zK7l``@gcwp2slS#I}(Z#Vz>H>Ey7nkGfb?))lQTx{X=bo{dp6_J7Ew|`lzrO2648- zVOoXg!H|>_@oMjlcY0-uMdXMmlJS;dmNtoBk@iXq*^I|DF=;RLbF|?_pXlRh@`P%F zur&}y=Q;&z0!%$%vj}5@%dGz?8IxquXYTQO>dD;FHINyQd|HMksllXXJNIfLsgxn3 zs8rO-D9?E6+72hVcCZ^Eh)A02By;PwL4YqL7WDLojFnKXAKXxaC90y#rv*cFf}ul~ zAODFctd_}|1)Q2XhOjhhL0+{$4P;Y+uQ$%12C7u7gtI^$Anvyi;R`<=!?W}PVu?qRm6=eXgt$8RWNMYZpSFM_mg;z5Uvo%RjgmbG>qb$!?$RmLlkzpy93a6 zfIMZloxx+q7U{Qe0T&?GFb2{t<6?q_E?B-icn_)57Qa$As1DxQ(*j}4{JHF4 z4zKl#Gz8KT9{H0LS$zi3a(UiKWQf0-cQk1=uwFvzY$Q~ZZEnmI4ZjFIsxS7huxTxl zt#8<_Z;(qbxLS2qU#BG0IrVsvNwn;zSHaZoQ{_QX-mDf zGe(`768YDT&FWclRv&`UEAL0ee43oq9-Y=6pH^c3j0CT{14dW1-SPcs1pFuj^xXEr zyoCpMJNH`DycBM96LM2sz5-!>!|XcT-?X@Ut_KA6b6vU$4)u(0dM74t+wOF{*K(RW68n7^~c_8^FJq|xZ#$`lK!vnzCzh0(Yzx{%MYr;&+L zVXm1uGoL92MVnd0Z%!^);hA>#X% z@`0`prlVO?aN!d?4VLN6=9ElY#jZ}YXyYp5f%wz+8zMh)BX~HosWo~U7EIXS0niSO zB$yJ#^l-jT^@zHU?PL_e<~w?)+QwPc5klLX*_Ilrfi970F&YCCcBF=A6NRkwZkB(p z(*PkAFJ@EZ6Y#2_^=!NitCE5EZU?2VoG7sa9ug|)ob3LJsk~(JDuznMraLDrOX_11@z<7gZCWvA&HB0AYF&s!I@Tn-e@)x2ewwiQ$ zv2$x}p#e5yQ}D$4o3Xex{B(60-pY765~K@GRJKqP{LC&=Mg5E*g|RES^m9RRFu%hk z()4=8PxzABNzMDTp!o^M#MbKzmmpHM1W|c<8jf=Dp%v+_;w9Ul6f9~E9urf=P~n*? zsYm%Fdz*GP&*>!~mf?ZHagnI}y8DCogDKvMt_v`*GPD?+a$sk+jWOKndA6XArgW-! zr|M`H3GVQZcZgDYMY-j)I=mPPcaq0hu}B9;~sRLZ4x z_Uv%uhI7JDMdN?MuIQn>3>J&iSwCZOXaZaKt(coNX(EJ5a_}?QDVM1ABH@e~@r9W?5wO0Xkc%n$G7Ebpv>z zRjf+95N3xNnZ!3u~hgH9A0Z!If1wc_!N=XtJT;xY-N!xSnjw8jyEhM#!67J0$1m9 zWTCthwX{w1c{q%Kwlz23iEYFa8)iv_%~Q!Vh)5NM%|;Zy?{RBlc1ff_U_&nqFt!W! zvQS%6T0gZ8ljxbrnuCgK@Rt$>EN|dykk+nYQS; zyM}Ys&Y6N!J=fpUPQU<1IBgz91n4hK?O%cTi$WxX4*8O?-un6=GC}>i&Bsy0s@XVxD<|?)O*kDWvf5^ z91B2(pw6@yVn!KSb#?eh6JD-nfWOm(@r=zRirmZ3(!ktjsXd zs3!@9J8~Xl?~$!He+e{LWG*{W?``AEJ$V1a`FwACvb;SynNV)H}y@il=vpY)M*-? z%en6wi(psE+W;{?+;@FiE`c?Bi~1;Eo}#}FmTDNvr}*R4A}Yy7s5I-{ig<7^3)uS~ zwZ{R?qTo10q73tCfTNEHAr~W|54b~QtEXlPWSSVOi5Ro#3<~{75XObn69rUjmpJbP z`-s*TkP7+o%(0M#6*&vu*#&W*O$*N1)A%j{3b3YW%~QBD&7C~84FR)39hRr1Cnwu*ynSdj z`c$CGU05yQ_psL#4GKAtV0eu_%~L&2GnbR4kpu!_sfUFw?KV@ElnD(lh39_itO${5 z?F=e|vFoy23({0=#*7IGYosHG=TWDwN^UIranAfej`RUNH^S6|>k$pWZj3joY zvhr4vrbd#bRV3)=AZyDBVSGvg`eO8)3f+6vN#%qM0$b>Zyu3U%>+`jBq_g(;XCzWD zA)WngADwPklQz3jfw|`5*iYA+Q;+}uy4m=iHN%yAJ2jmFDj;YS37 zPn7!b33gfJ)2~_v=NtHtYKFCCoTt#uR^%FQIf>(oDpqy&KmF$xEZ0rOwwKC!&A9p} zkG9!~{7!V4f25zA6Zabe3s_1Ih-vt^CbNez%tDQ(fKaOQd~TYt_G-?9Uu1e-WL__m zMcU;f-22~?`0E|KcoP6TG8S-5;1B&+_@s=me+LcU>jvCx-}?${G;rlt138CQq2JYu zYP?qzRy!RK^x%FvF<$-ee0#j0lFJUPLfv4Gs(Hhq8L~x87O|FcgqCgHo-r+REN1vD z9*%6dp|&@@ksG_{DE1$62ClY^7~NN(bjy%?M|v-p*>OB97)@iE*-`1+Z9iN0an&G<#pTT9Eqmil> z?tceES-sT@?=zCUw{L6U+u02Kvl&|8^rQ~eM_NBPc}wfEz|`I<00zgl z9@Bow&niadcPguD9MOg8mx?{+jtomao9?L-LD# zz`9y4iVwjtC&;59S?P@8Ng$fH&M?x_)Vm+o?B;|bAFflYLlxeMc_&2d_<++ycoP zD&8Q|2d_YGU+KA|cL?B+(+9+_pujtg<1AX1nbEpj_K_tb1X&Ho!3wj@LFlVl2~i4$#h(cd3XvI8WEWbBxBD#~c+V(=5;+Wwkb>J1*$JN=r_Or3jd`zv zH%hG6d^qx9`C{bL%-PU$0V`5-aCY?7wS7OQ%QJ3^XMs;ehlmEW|9jnISz9%cqh-m^ zEpGfbC$YWmTV{;xC-Ghx-pTEi%u|m|@ov-nu%Kyvy7sRE7fXOW-UEj7vFnNb z%kqh-y=%A+%^wwOSg&2xuH3ST zow0#mTSm5LNnc|Q2j3@x?DBQLfNnu`PIGSHLy!P-=@4YM_xRz z`H2+{SbdCbP^`2s#PfmbhRR&$?f9oB!cSH=)xBG!PQ-dnNPuD$_L@tD|1(AfiXk546*k(U2^t;M@-TA6{{l>fH_#Bds<%Qm3wQ&8D-PVMz zaD_Ms5YWZwGil@fw|WT8q)io4X{>!c$_Av^B?!A3F?|W_PO?L4x;oiL^v_dnCfe}D zlxgc|wC0cP2wkHC%?@&()_uz#+rdo`^+>n3`|utK0vgCpTk!mzFR1L5DvA7KDh)0$dL%2_el3&Wl<2OMhGt-_j&q$W3fKIytGZH z!66RyTttUR0`Otaqu*~q1hEtDGFALk@c((|C!>9Dikbzz)9?n2oRYnP7vPYBqNJ7? zS&~*`7smUJE=13>At%YOo?2foww$tV#?PflWTZ=o$!V6@*g6nbWJHuvvEd;pXY8Lz zF3-yr{=I#0Q$Jy!zG$Ap;~}H19U@>LBH65J?#SmkmBO^-=8k4b=(Us(aw$z;AYCGJ z7QUP@5o5LbizjIX49-$s5~?hXaXDbx+^Et@R#jsz=Rv+^Q}0;Dw4WQDF)0n<)-%@UTqxfvOg#B9EKTsy40Anl}G$zc#9ojZPME zkx@_>$nq7JwY^kqq>o_6H)EW50~Q^1C2g*n6O&KU!(x?&^8dMS?b6xa1WD zUb8Z2MLL};H*V*s{ES21@RY-zrIq@5knnK3QYLj}$&~UQ z9PoB+GFTGf!Pb4T#Z#umfmCW}GFB^tf)cs*iA%C&jiN;&?*yr{N74FsHm90onvKpT z8&?fy-FmweXhwLX(Sc@OzHv#lPM(`j4`@jZj;Ez@&ydWhjB_Ms71WwtaTi>`JU*q1 zgJO&gk7zH^`wu?;D&vlfY-_=vwdN+#6JRJ77LquZ+n-#xHqKSROW9eWN)g_Y%@YVqv@Yf`)YRmLR}!g>U7DsP}g*stDNWBG;HE*Bcx9IRpkNQ6Y3odhtb24 zh*II=_jsdjyc$p?KX;QWyxS+9`$EZfZ3#p)ZYkfhVybs(pR?nQ>7L7i54FFhoR)rx zJX0XRKwaCochIuoOQF}ew}?7g(oV2!JyK2S#djJKA2|BxIs2G@ok2rPN%{o=57 z)vwf6Zku|}4edYR-&+fksYKx4)VNg^9Iv4{nfVuSV)35a#Z5^mpeswVxO{Xd_W@|Az=7MJZ(W9Z2DPABC|M>ZRA!xJdT?AbA=mK|aK+7)4vOc`NHuBIwv z(v;_eSZYy}dwWw=%WzXvpUbsgc=<&~xF}96XIWRT8v7nLQxN}zwvG`UTfkHb;_ql@ zdcmpE`l&9Go+m_^X(MaBo{`yrsh6KCiv1sA~F2< z8phwfl`mi6SBpy6SQpBV$G%x5gIxiL{h%z7;^ebs_T$#9Y#*7p$x1~vG#C_fWwpa? zxL|+k6Or)uX=E^@2HSps5d_0rVu(^)OGX2wxDK(i;d%e=%_#L;M@a6D+^Z-x=ACA92RT(GpWmg^W+`f4q@ z`gR;Ye8_t8X^2K86~V(xu$XA@X2Niz?p7b7V7qz)2$`QZfA< z3r~g#1Hm`^(P;kVgRP`nQ<&F^dM|2kW2%n9qsw85Sf4LaHBJj8Nz~nib+`IA%xED0cZwaA z_p-F4X5NE&uyS=W>>t*{O9U<2oTnnYuiQQ$Oiu8W_{{JQF><`Qm$o~AIJV=5^;h?s zpT9dQ56pOZh<|<@yAngbhx!l`)gC8}_wK$U5KD6uen+_(2Mc@1*FEhbS8*p|U5nc5 z2tsWBm=FHutLlx9NF(=DHc{nE9Njbdo`|LY)Tx3NXH@t$AS^Gi}899J!TmG?j-gB#g3kppFr4W94(66b$Uhr>ty(2Rl>SSVAsmv zRN%AWq?d9!W6V)DPa1qG#Q1rX|$Q2|MY?(_Yaln@$vaDig(13o?EQXXjm~No- zi#}0v(8_zAqTJM5j<%M9z75Ng1-An>6a6S7^4#2i_ELHz>bGR?50zQhq#AN28XBO4 zB@Tvg?ul>|?GAjp2c>_>o?c+}cBty+%uD`i?Axyca*Nn3tT?m0YswvXcC7Ai$C_#W zHE~^u&8*^>^!wh)MB|#QrX^8b$aVGKt{K3NmzGH$Qo*b-9 zs7n(t@5(3zJRu8D?dYML-;i954J9{kBpv+}Zxq57c5A|Z-qsoLMy0mogQ!|bhw#c566P&+%FN=; z1;obPkA84~@KlBgbX&NVYt&)aBqzB@2iB*V5BMq=FViF3A$*B*8aiyNGiW#bl>o!p zAx~&DKgxxR@|6809j@-=;OP4rOE=%M6Iwwf(I?D~+AnQ`Hl!qIfJtY5ohiN{A{* zy1D%?(_f&Tk4f%m(~d6L8Wn}VKgCm-K@uMx`V7@iY+bLkKPi+GO2nv?Q-zMy%@$Pr zF~b4kozC!2D0_%x=-)SaOUugss>#Wt`Ks!@8oj-e2K2VyOoKYQ9ZtRkJ@fXjt!=IS zXMJEle%jBHayHwKomaUV)TD|?EEXD?nx00bMQ@|soHIfQQ$eRI zzYh=NN{tgkiQ_@XA3HLKh$+`Cv#Bgvkzy{hX&h2kD!Ts#u{(`R)`Rg>>+UD!IK!!` z8*$754pn;I&wU9PqVzn8eG8b}v^=qW4H$ariex@R(S{UKOlvwBM*h?hT|^GK85-Aw zP+@8`3a|-G1p|NPh!0}3+;TFXv8d7n3>Aw;lC~R0OdQTVqYr#c6vJxmp(z!MYNO=D zu&kiipcZu^6_^eNT8>n4pB=HCzAJ6S5>ZLrjX!3bfzNQ_Kt|ALkU*~f`&`Yg0=0I^ zsk%!>$^+FaPF|e_bPN!2M%4``<_pXTLs!lSH{y&shm2WjC?p*@8DGmKBxRbaUel#0 z1p~7LkwuL|$}BE4F5Q9JH9u57%|O{KH}p!*={xuvOeTX5MGP%{r@}<4tb?{oS4u?^ zzP3w53JDbrwn3EzZA?aJP1+?zlm6h6++$Lfh6^x-NOrSySC3kq>XD&SX@V<;0A_`8 zO?tly(Mg3v-b`r_D0eJ-sqK=Qk}JDeylX|>k;3=OBr0V?Mo@8(S*}27p8(NG^G*SC zR?Q_h#X1#`5W0~rm^lK$-YhzNp)&flt3=I81*U-UruSiw$)xMlpSYqjs@^4~W~BtX z!8|eez{F@XbSh8O$n@$Be#jY#@3$e6s@w@+HfZ1eO5sfcl!Qj5^~Q|k;#_LD!NqjY z0dywxWqTC|Ddo16_DK*)HSd%#Z`5wHQoK_EiJ{}^y_q9#*q3T|ftX|}x8W&hDbGn? z^(XSFgll(YsmaK}sxZp*FZeNui~zj}Ln`4Sla3Ug7-a^4)I^1hzusVr+%*lD0A`l{ zg(+s1ezoL~6thtKwl{?}>A5%*FU>z@Bon8%@{p0LuX>l7+L#jT3B$_x0vqGZ0Fa#M zknz_atdZ*z-|s;*Qg>sG*-^diPT8Rb3&A+ky$E6UH|#1>@6dwb5VzItpfUf$p6w|j zRA6buZPhzU%%Iv`LuwHkFfHXF?RV7br;gXKJ*%M7tqn|loP=*?j#t9Yl|tAFZ4LJw z9ll{9zCl9K*@F`0-mcCZ$egM$y`LDVPazzn zyF*Z>Wz2^SX-LF5c1{S_&$rARwJzHs64g0+TBhV``(_?;{5=5=!Ye5n|KJlgm~OO_ zGlY+_mw`T72NE@A`m5J2=SIIO*8-v^fccv&^CwaGnNl&th6^3FjWd#v(X5>V(7pCi6q(x+irJ3lKMU}2*=KHp4i$fKI0_u zZm<77hYz3WbSq7<2S5L_bE|**#5th|>$`$;X;aw*S!_BZZIh#47%%$$N{4jG;G^cY zN`ObYHww*ApwfZBzscp`AQF~ld|Dyu@o#XoPh-8rJsIC=#=gY|cWj>k)xHOO{>+vy zp;y0m=!^hSe8R?ii^~6qmmSy$#z1VK97eF*T4%)5ox?`NYeC@s91vB^+F>_XT6KGn za}E#{Srv@jz$di0F2TaIIH66y$ltt$MKV%kavq6KR6*qOG4In!2M)6Q` zw8$wkZskf1bdyO^!K*87GG_#5wBLHXB<$~;Q?w%5#qvy2M_VUUX|uF?byytWk}7fY z;*t2!2B^n?Aotx`z~*mY z+M}JZsmBr=A${R}b{3~c22@3S{dAUaAsfio}@o^I=+N0pKS1^Ge73cJMDTLaUl9 zh2mQ1RvBA{ZQRiuSq#7aA#1^Bu|4EoF_C#yIj-tV5A*AGTg#_9&cJTM5KEgou@hb?pfHq=hLt#Gs6C4>-}q?$jWIoo#H#Cz!dZ z@2^#v!NVqhhk-={uzjiwz?@#uZtV|C9Ba$(htJ~;NCAijzaO+%k`*71QnR_rrCrSZ z-Thq|3a*War>#@ZoZj;Y*@^Jh#S%ffwEnrX4eQfjjsEoE!-5|-`ks}KmIBP^Z*Zx$ zjEg%Prk3X51Z+F0TbVr;bm>oEv-r;g`O6?7f?`!*lr z4v*zU{)I8~UE!0Eaq}M$eC9jwy-xm9>9YX#c@st?RGGcRt@jJd3*7S}b$?Qj$AriP z>)Anr$WH164FsB0;mm?odONj^&2e6Qp)M0ym@vZ zTkie>5HRi9wcyCp;JBPEM;voF5A|whV~lL}eY=BZ;fv4{+ur;sus1R8p6gcdtvgw^ z0#=YDV|?9?`W14jN8{*oH(_L-OuKB30@&A$i<*6Sda!g`EtpO6Sw5F;{sZGm_z*0X zHd%i0D-tXqf~fRp$(fs)kNcYa>$uFmHe}TQP$&Rwv79P*d`B7^NSqn(?(tahNbV}-MkHk#fn(nhfL z)T*~;u>yrg#EP$4^{WfkMY3QUAh2dxq-~fL#By2;);bl`U9`6JOYI`QzAPR(adN#7 z_>r&UL$Xmm>Dq0Zhc665LMuD{s+`Iz(a@Rll}!3dxYzz{=pMFYwC*{w$J4L`d!ief3h4BdyL6JALPkE-e*WyV4<{md!R9CnXDhNjbXZh0FU z?dB|IL5k1Ewyf5ub)w6J(la0b?`y56oybcV%W>_c)q1U>1snOKL#KIC@#DwWxZ$j5 zgqm5`%FHw=(?vjgPhq*cXwLn@vMxz(>T<@sjUaXd+Kw8_pGIZzS~>T}_ zIXS+V^+LI>T@AbZK91ZNZ<>96xt#EHsvG*RWuna%UcZE$H}cH4amHm#ACCaE6k2#R z253^|sp;k5d@JIT)EVf4472%CwQS}^_Sq=t*}@99UDN%QLaA|%E!*y&bWLv@XT&t3 zB0v{-;LqG-kN|Lo;A$XXJYT`$RXtyjwcrGsCDm$M;Ul3U5FDHB9+91o;6X^mp_?a^ zh%+LV-HeH(Nm{WZHcb3-6)9^C`?M|h8xJ>ce7dNNrV;kU1D(-eMLHl@fcck_PIj}# z2Buc*ejeF=1nCmYM&)d=Sm?uO3*a82#WOCeu~u=JmnZc*!G0qBMq(VQfjMUH3ZygR z^*9EJAuTAdtFAX1?NYW5g4Q8*g{qAo)k|SqGGLr7xJ7(@HE@A_;IF1uH{vEcmVj_k$mBL9z#?JtDu}pALB^UGNqlG~y zR*I!{Nn=x4vnM}oaN*<^VJ)E502~$f$crD^d!3nCy zwgJg$cVk+=`;c?3c?APDVgDwSXaZztTh7{-TWR~bJGDlipH31>ePe~1-LY@UZb9qi zqDZ>TN%Do(QAJxT)p?Ir)RMK^;Hzn3|NXB{Pckh)VutS4SQCBVk>)l}?%C*{@fR

$3UL8`O(`vjJHeD^F~S@LK8U_4Y7p@%*Gbcb4AGQPFwbq`s1Kth;PkH$90T z+u-#9C=vVSM%ceCrA8d-~~0L%}cE8kygmGm61uUldr>;iH6&uk|?u3F0(U#%P! z=Y>Uvc$KitQ|6U%U%l32M}rwROD_4B5fdAtjBWzf4y_Ebt+DJT3;ra6zc63v=q?;A zdgy#NemopOOdCjqA}(K88x4;buZnA~?M1vPE`UV#=D{6Vti||*#;qiwM)<~0%qGSL zpqW4 zwfdWSOrXSOycVvthr0-Uu`fCSW}?+;sy%dx_vpK`avyXTEQZ8-g)XEh3KRy7%8T73 zAwAxTGBEW-v7q>CyKLVtNInWyNVwLe8%GU$0z%-Ji0MBZyh$DWzxPbNl4@S;!^T+Qs|BrLr|=74}wm znRCALyN+L&JvGW&Hi(*I)&6JUYT2r#xI z_Tgm=dVp3IeUE=o6wY2u-`Sczyi4wOTSwQFSiLR~2sW11OZX7F_ zv1nX#%=y1|?5DaPPg1K!(_vSq2wxY#NlpKD$ood!5JlWBPL!jAjCRm)LX@hJo*)10 z1KB_s{zTKg!C1^u^9`3FrhyP6*UHLBtZ?*f9IP`u4RUnl<<)vHHqaGFLWo89gIkZV zhs(?UaxQDJQ}uubNDur?xIoBB_{LRG&0fP^!QRkhd|(CC=W<%&`{kNDw!l?T4@L%B z+X>1atP#%60qVyfTm=o_uRuJzUYUbYLe{xX!-FzH)&)S<7$cWa6_^32ZQm<(&_>v> z0Qfyd#I;=srUCNWZx(@ZfgN_eiU(JOH-7;YV?A8kbzoB9lU=X!!3QDP-{)UrQC!!H z&y8c!T*B30c3`6YW*Ha(*gi(fEnEh+1@>?Ymw_i>jlb%FJfZRObL^Nl zcV9W!6XA6Fy@UAQ5wXJF_b0o?>e+sD?a>Y@Cjz%?T-~A`uz@_{(uv? zF@|PO(wFyO<|;?n^&luRySL#8iz~X8?rU9DNNnZysC(MlFdDdFswtFgZgce$;~oFs zJbaBrdL>O<_ltS~Mw=&6AueSBT>?9-euM)?TeD_-#s#3(m5+9Pc)XW1B`~x^Ymj#H zqT+OIc31ss$1E??s=mrkE*}3d$AQ(oP6`d~*8Mr++P|>UbS0tSUk0DUr&EzvT(aV9 zoT?*TqF1N=Ag5XX-=PT4o>6@Fphbe7(Jws_T{UdRIJ3O!ba||b|KQqPCWP5V3m61B z7>_6Nbb>o29$Q#F`3mKUk^94q|AYBMD20O!^xyVR_uUdBcLtp2hIi&pzh=P0^heE- zWJ>oZvZ(*6Da2cHEbo~Vyd_|Nlx0sid$x1`x)7s4yOfohtz;_DwwyQSA)r1B?+&|= ztzb>>&a=R;fW~1r9hN<7DLjjBy3AfU>mO1CiU8rU8#}~vp_vBKL5Aa1k1>y5ip|SRnYv^4YAMkDQsDA{j5PWB3rjF=Lh=@MAh16aczF8NTOqHrcizHmNrw zHR)Sto8|_EfpU>M2+T;WwjGFV>Mco4Nx8>z*pHb(`asuXf#Zwp4uXSe6p*q>U@`lk zV9d(|Xag8?ObxsR;@CACT=r{~S zX4bdB2lCH)p#+g}XJjR^2j#u69JoLbj(H%oKuSJt#G2Uh+VoQp zf)`&hjhEd&@@{#655YNZ;0T)5vFn?8M>%#ToC0-Z^-sT(n0LLfKz@Vz&57*;Ghh5b z{no_RfrT$`pdb@s=fHt?@naD#tt=6VxBUE3GWae8na%z;Xv5WS@+o~B#G#dK%<+#C62$rSxS#VM z5~QE7X8NDWC-3n;+gkR2aWC4Se@@?~|5<%~z#GY^3n*w|?nx&d^dBHKTDb46mf4}Ym;CjoBQ zxI*J;;a}K{5!5;1&*mT`SQR(Tprq<>uFWa1FZY--*q8I?oWXvA8?7QsvTYq)hMAT@ zUR>_+Seq{B_Nf2a0kO8&61hDStomG2h;SRNib`}X@-8DsYxzg!i0xW?_Slx0T)Co% zDmwSzmx<485;*pq_;R?%`EtsnqKGn@th!40mt{Kl_?C%pY_#z6oo<`0%1Xcl8ARv0 z2i{yLQkg`Ax-FA)-{PHkYptdUrLnktH~)_0B$Xf#$?|fwSk;xp;1g}3TPlL)TJdu? z|4!!o=Q6*O-NcFPdGLR;7S~VW9uzw+wP)cw)-;W#+343XmrHL*t(sZ2Dz2F+wNC$B zGWfPQE&cO|B0RaB5BrO;cob!P`=}~Bi$0U&>MZU!MSRmJV)%#So;aJsT(C^Oswaj|xV{2wYLje7}V75VAT1tghNn+C!W&sSEjbb9xSY{pyg*Hjn zAuj!Ua)k~_)IsyOX?RWt_F%RJ+zLui^QbO-i=!*c5V5{NuuBp%ixl4~ZYBk&Z4?I{ z;^4|Hmd{)-p5+`zgn_$i1~(+8zZu#12iKc|seM!kK5BJ8FkIXbj6P)A4)|so!%Qm8 zw~5O$gwYNl+>_B4jB`n2E|BJ1$7LlaHjmTB$XMS;3Abzq5Sex{KT;6e$33AZw2Z#N zk8kXYhvT$A!w=fW6@IU69i2t@Z-0gn`^_vYe!H>X0guxDOk6aF8ziA)87D&d%>j%T zzSRCqG(@QHAA#OFx&p7*{!ArEmAMMjVE3rdUaPUdc9FZ3F6V~Y#qv8voITUBGq-8<=CrY%}aFJ*nA4|$LP}4 zxDR0resIJpLm#g70G%s~0w$hlekXE9Y>jDK=NF!6eUp+-toE2Ulb%(CA0r2i>VgsO z!f<}0^3M!GBz@>N11tMN{Br)^X=4&C^Pe?Xa0(}u_T9Tg{popQ`zIau8M_SM#jl}~ zeiUh4hs?RL;@@H6v-Ss9-Pvd9aw8sVDTYR9db;Q=sqt0YaWgfnLv2?B|Ejd1glcY> zIxeBw)U6}XYFve=S3iboJ|H;MzJBG+JP~HcSzQS_9T&h2@2{)*|qd188Sk?;43wi z7`K6c;Hy1|js(CHMuwe^s7jKkON))`!2d{6k@BE&6%6-wF+&bBrnr#?_eb@q4*_|!6{ppg(S1s$rGjn5v;b(oLTyZ1KF!V(Sb9OaeFMBD&#Qit(-2gm(i;7 zo3;*eJm$vlF@3wi4F5n2VanKf4~N*B76m`8Do4!7$wKP3@2pe32RUvbqO45P7N#Vy2zF7EO5 zmS?wA)>@l~xNo@%*x8WoG@(Y%v(W4LTYeH^RHek%{@fs&+r_8b4~1=J6t$xx>Wt?9 zIzAwXi|ikaHZf|RGioBZ=?YCY$aC8yARMCjlc+OX8O6VxYIdI=y6^zW?Inxd^z_Zx zylzh(I#aXm!-qZ&dd`ME6%WSf+}L%lfp|Vi%Cb#4z-R+|-I$%LUd+e;wfD~-?qY^+ z4>TcF-5f10mWZ0KoR_EDfPYJlsJCXSt6Zo7iE69g^{z=!>R9si29B?Rv87FZEmnN| zUn89MBqKQ!qhBRb6kQXkr3^B8q8aMnWLe46Q?b+(5w5CT>WI;X!gW*ZNb1s)Lb^h) zX1HOwK@&1l5H&TByt8LDwS^x@ueUm1V?AvM!&x3Cnov8AK}JFj2yb{NBt`1GV98%9&(T)`o zk9YdklGzvRX`_voQ|aaDcdDz*u`cw>@ic(E>frwVi7CVog6w;SJco4}niyY5J6Xw4 zg!Xa2h*1Vr0R0GkW<&KxYrwk!)lSgUxW4OVF^mc0~VS>jP=11mV zj@<^=x>%&v7e*V(6-S&_W6=t;AJJF0t7Gj0o|n}oPdLv3+IU51&v<119nZTPuQeL$ z#DRm(fY`rkE>unVGaWH;s!ifHL+}CX(g+89AB4oCR0+wW_{_;veS@z4%0VbNc>}Ze zk334r6&z$K8Moa&M@vg2%PsN&tnT~eZiQjU*>Bn>U+hS`S0!-j3|Q&z*m+v_UY686? zelSLF{!|&n-4@T<8mO1#B35@S2|4X{2i|+U{<}**fWhK`Tk>Xh9@uX7R zCTlDCm+^~{9pU-u4<9xeRh5*oU!=Dl?et4s^Gtx0kZ!WRkpTvv$Qt#u(Xh{ zb$2oKFt_<%^ZV(VhUyzq*g}j`xJ{$hUr|~;C!}Kr@yl#wWL)x-Oro)%9m!SZ6C3}; zsoLq+Q*nwHzR|v}XA0lbvrhj7dAu%y?nUksJ+j)psW(iJBkZJVw)}1i{ASk-ugHS_ z-7yBEHDQdxDA;x4M1*dr=8dO0T#vZmEfCJL+dRwg5Ug!3xQImJTbTiZqd2Uz#Cc+! zHZ!jIZL?QyWyBN6Q`#9aGEF-({^WYC(dn0)_dI4;yBM(nLNenwYmcpTSKlE*_6B$-sx1%$_FkqztOJ^f=XNf-gu<~a7q z;D7ZRg;}34Ppq`NYs}2|itz|wF^Fc{`-x_wIffxVPzv zd5k`?n$mP$X}BjK@mzV;dWII@C!b_VG`n7{@?C0D-0NQ3m3X91NTZA~7S5-xTHp)v zEJbI7MfDXvP=(r}P$O?9@Vd($Yq$i*Z=v_A0zJ`G3GjM|NRbn7M73}8Cj;M4lo6y3 zlwg|WmKyG0J?v=zehFiVxi~Fiq)o_`F~dB_D!$l9Jx(6Od??%}EjZ|#r4jd>S*SHN zpooN(iax^`DqYV-=5@ij!D>Mju%Yaf+T8bGq-K*tOjyD}@SiAm&hw|=!P}NjjEo6D zwhiw`i};YV`9&yF$@mXzbTVGbFu%TAz!}{S=rrG8%`WNhhg184QL1VTZx44E<=HnSb$k#>i$6g}%C*lUO;3S_AgOB+o`g4fJ z0z5$Zo$&ilE(GbXxO$3FTe2L@Ylha=74GyN0c8sYprFH?VbUvx^3{}#ALGQqiC0S7012#_vBaIPz59EcdNXI2evOSiZ9O@3C{MDA0`orGPS-_h!fK*_R@i^Myn{L%> zlt3UAZ&2+XEn&gJ?E;j5OB~mub;@g(zhKb;o}R_R5%~PR z6SN4XB?(#v`?At>Kp6+~)qHECwsXTdLHBFA{AK4A3yzJA zP?q?4Bd;J-&N;QA?b!0f7o$G7PTcUg_T3e+3MYfK9jffRoX!9wu~8*pp|r< z1OxkJq#`FFPl*-NW?Q>7eFcH$aySkxp6a&!Sc%e5LL_BOr~J&V+spPf3yV_)?t}vp zSGpkmFKII#ZQtUrQj=~y^Vc>*Of<9WYO3b%JhzR_57jWP4~ng+0zEh2YXS=bk5 zYZ%#!!7m=k5p5=ys&iX?dNb?#sxj7IsC$Z*81eF2;H}E3YS{>tT^K8f3a+WI3g8R-X*EDVZ^yv9w4{J9-Tj zl}v=f82bL_A(8ee%;r2|j##$2>jM2cA>4P1wpP`QwyeD7O(7msW@T!_wo=Vip6)Xt z*H;*f^!cg?8hdw{-*7W($?xXA{V4v*P9DzRs$RgOYlKxy7|U?vJE=$oSC_?Y)isk) z5Ad*L$|tmhw918js3CkI8`Ef>oU&ctgu|QZlkxz^)>toQU8^Hb(5FxEa&;3Y&ZB=yDRr zNqGv6{;>#7gO<3~Q5FMPz{Zk3f@QK}pSkcy+dv=n&1z&>9JgwDjGGZW@?fwKCM_YK z$Hnuqw?(c(OkenFRu|G&=$KZlCarZ2HEvzdbrKv3@~%P18nv7jyVXcDT<&W#F^M5# zx9<;)`bdj&6jgEtl-h9tdY8ZGIe)oTEu(`gX&i9!AR&wBk(F~J7UGMs0$RxgBuWI0 zY<~*MP`+}?=M%f(z|PXGcBqT1lKG;jvW9*wO5vc{^`<-8b0&Akb&0A)-ba<)W;!O- z8^{aUC}I}g=E1I3S{KLkj?2oQ3|UI(h)Rp7gxYg=bkf(wsqm2vxz<{ zosiRxqLKqP*okr_8bkHX|Y+yc^|xZ-byF@_ED=&JF! zuTU`OQlnZg;IYY8YBIHyMe|pGUP%DN1=E#iuuwU7NGf&|RF$F=R2=9TQ!=X1o@fCr z@m`}+7S!AR!uHT_ykzP;A_dflZ3k=E{tLV8Rj6n5iq zfGZBXTouuG)*DBLpQA4T-osl`gPMdN7L)o#O}Bt~!e&jUhB0g8ITl>>9^^Ulp>J&B zOxV(d`*f~cv?*bK|DumaOO8AY!IN#GU$$CM6f{Q~=x;MdJdnupCE!eX)L&K%WeF_n z+A^kBm6(rGC=y#oAB-ZDxjIE~JCvJe>&jr|N9r(9YFGERz)$wDd#4=cYg@4F;b#OX zHj>fc`Wj5J8^+))Wq)C@<#)5l*LDbH5ulrLFL)VgNLcRRx1MF(Gmn%67SsER&T)HH zi;%?Cxn`)2Eo1hx@m*-SRcg3D?v3IjTHo-OeIJQAVrXbnH)Pa8Jw$$fsCy|cwF5>M zv@aveAMoJiTXGX-W=9^otTLw?FDK>X0)8D$0~X=a>kia5KUF6E=RynkZgK&Kz`EPn zKNA^I?>7(G=Nan$>3M+PdIp-c7INgB0;vqDSUAJkT|QnHxzl4Qez6{O3^&x?a7ch$ z#YRvkf8}3;b%JO<+=j!Ya%?||v+h62S|paWyS@0F-hb$o5v#dUWsUxPMcPh5N9&=t zw?a^k22su%nYu^&%PVRNTBR$*63FAUj^;31>tSdwS@HXfy9K)Ws3d(%r2jZNZ%;&A zxO;4|AxH9ARCuV_8GrYr935Yh{#52u{tc?UqVpW(Vf107u~4wTvr?2(D&LAB;CfQQ zz>AZu&)3l>7Z!Fz5I}Cuw^Cfm&!Bs3KsDt)X z2%A-zsHk1261j~PKZ=Lkhr>IhL?xtz{so_!J8kc&jId85Y+gxQ041*o87|Ua+G)4L zKzFqr?^P-71{J2Jl=B_=zD;B%;_-Lowyb>U7@wV25d(Iff|#Cqc`X9@z=`Yo9zf88 zNs2jxO^4P@Afp(;&}NVWG>+)ouco`6GIyfijeetOW7l$DAS|DlxmsZ=v6)HCW*G5{ka!2jt4 zzV;DDYj`YMZg<)27$z>eBjLD?)zk>Y>0F!Tqb`@#5pn~h2F3XuQ^#iWwq^O`+H4nQ>6=4Ak;)x3klq2IHSK{-4 zgoDPRWu@kr88ZkUzY_18ok$X}pD%xN{<&^2qtD^rc9?E1JYm$+jhJP{d){x`K~m5e z6B^9P{0AkK3d~8e-B#SoIpv~;a6&t1g#~n8+X+XK`}p1e2X4Z_9}^_913m_T$8FYc zoz`52nzb6>`@*2r1@(~SHc~Hur3}o$X$evcR;{t3E8iEqE0oU^{wX~(PV66D!SY?t z;7?2D?Y-n>QyjsxeEQUd?ss+iJwgAZS(`!mZRcVznI8GF`MUA1x?L0 zHL|Dk8cKkJF&!X}tUlxO-G<~s@&drBmkOwlT-~|;jd!S-U%Nil83^MoJdwNWc5Qs7 zZTS17jwuFpX9LxL2+}?c;YqP=gvM4o_ABx5%r(OJdggEVdEBkURCJ-&*HBV_A%EIktg@2c zSHB==D7pqMH!+VX=k)!1K#c2FdI{AjBf`FVm)!Zw>pc-2e^q!&ZsnmBLswgPO3ht5 z{7X-|LUU0egzz=E_eq&Xz~iCqW|$-76XvbafDL0db@%4wPE zeW|39RIP&UoJtKPR!_pNyLerOS!EQE4$%wcG7n_&#H=)ex?H zB08fcx?l+KC9h^R_{-&}!R3LFD{JnnuoO5DRRQhRYeN|dkYwr~?HZKDn7B(I7<&T7 zHyStqz$ou~3YImyB2!0zxuCle77YaB>~D3KR^i@}NlciH##_JLQV2)Qa&oUwa<*GM z_wRy@<5*t}cma;9@pmgKvlI(12ljVC7kwZte*|t;_n=I%mj?9pzVjWF7VLIt&A~p` z`<;-8dCz3`o9Pn>jpyz0|E+YBo5(p1B11uS6aTm5i2J`JN1h%w|H+MP%}qUQot;F@ zJ#4*fJ$$Ix|KGZb#)i|vPjsQ&Z~;XW1bUQAwVaHfsjWc2Jw0?aqMy~+Ka0@;TdNxu z`rde#o(#fBF=C_8WCPOVV@?vJgrs-7`2;rx2`8ZEr^3R1D2M%~h&!tCMs%_`{?*QW zN$R*C{F|d{sK`r9cKnM?4yL0+)e*468ijA^$^u+B(1k^-0=og%&jz0PLRd0O0Yhx2 zz8tl+?0n4HWci0A zuL&OL^a3^Pk(&hxU$uMFTw~VeM1lB1d;UcR#!=y)>1;w*Yc4+n3`mfIfnQlRI>UQ` z6jlVs(r=EoOUU1N!>hOVlimC@I{cXg0_YQ_-UR5}pWLYqj57Ew>3SBYA|pJBh*n!& z(VlFH0n*Y|HR3>#*4u$GaY2gx@k@MhQ<8Pz9nR`>8nofolewGOoySUm>`mRDp_c9%t5GjMaZ z>Org z2x<@MSfv*tNiR8kGk^I-6HGMIWLT*OeGEoDzt8QbEwXM7Tz=n^zAJ)f!ezy#RWe=b zC-;nXaJ~EC2AwaFQ)>#O-~dZNw7<|Whr!h!<+3*k;g=P9V_NuSM97;O&A&;JUDV@a zK*{`xp-2t5#rvP2j&T3#Y5Nrls^{DPzd_CMzk+&82}>0Fvpi@c0|qggLWDxEt#v?5 z(%CKt{VRejBVJMpfOjk5YS9wT+uFYOR`h-n?sg1`9Xtegn;j1ZwX?GiNb;^_yY~r+ z?C@J#1%14Lu?ExyX9tJE1e*a_(uk5siFbf_S}S^8oeq_D71KYb1;}w5$V$VSCo^3h z&^XmA>wCQix2R8fzh$1n8_K5IG(HPzj((m$ak~YO2UJ}kFU@E5T`)&3_MO8=o<-h| zPM!8LhpKNs!e=|uW%@Cb%9JDyq!mq=kiGQ5KMIjXhA!rV?{I5I*3~|%VmC>Ly{ZO3 zlzv%^6UcyPZ0FS8$m|#ng4llPv^{7`4F5uQU*Y2@jc790>E(yz2KGoyNG;dESGRfj2ed?KU?O`=w2)L3njvXKN;^%o zEzr$}b)_W;w3x`NFwj2zt?G$7D5FH#q zgjta7mPhb)RKOIFRLl1WJDf^)HaWVH@drAV+fFB;Wc>^|+z@93nV?2fV*$q!^s~rD zUw`t@uV?bIB-b|hOL$Q~5GmM_{MD)=foVJW*JS16RLTVEwk4Lj7hw=Y$ zFsonxh(wS@>Xhf7FJ(20*=NGCBme(cd&d}EfN$M%_wL@k+wR@AZQHhO+qT{Pwr$&Q z+qP}n*8I7TxHu1EJSFS(y7~Uv zVK*v2i1Pi#mw51cNg@o6RGLmPxq1El+&c50TX|zj@8{D4ueb4awHG?b9fhvsO=GdK zm|4`GCFBT2RneUyCbd3em?a5TTW-%3v$g=xZ$;5rQ@n(-JddExb{iVN_9ry6wWw0N zwtLUJ`y{wR5g7qBplID?;4|7^rTMF5$@!`m{tL%MLZi`GhP7&mr}@Htyt&xX$8JgW zy1TMldw;I7=A;5OpiMB>thD71l1a}o1dNK#jK+@DwnHF|N2!2B&G|+{Jq@T@?M8oa z2?f0am;=qN$y7@Iy1n(tmfP7j?Lyv=xnQ~Bn3yi#vDV^7XgudC!xNK&}L`LLL}IP4xyGu>rw~m_s}g)(OOSJ#!*{hMD&{w+IU+|%az*d2~(7A zxx?-z%=t>KOiKOXatBu>iH`-AHw_e7P&OU!mFJZVa$fa< z+xcRqspY~I{}u>`147lUsgeq14H8UmaktS{J%3e{G&O51z)s=t(Q8dD>)+)Kn_B;+sr(%t36$~*hpSNYg1-*Tgyr@udBaIM5$SADO4(4gNZ^ZZPC^$`k{`H z(IWzXB)EQ=6fi%`R4s*-B(AeJ}nTxzAcA#Gq@+f-2=rr;Ojsb zHFbekWaNj`0?1txt4$<;(<^6nM+x8If=AYOgn#|R@d?~$aWKW?FAsn%gR6_7GTI)TcMo&@PNL3@`!Pm&@4tw>R6BiYyY_Moy=1c(? zv*2ElF$8H0Hc(97p(#Q;M67cHL>=x~K|ih3M(b0c0yN{n1BUS-nBz{?`TvRe81jeJ za!FH(f!d^@6BYN&Br>GEvP%i=Qb^Y1J-LN`Z}$%N{Feyrai6h=4XyYsY?=Bke}< zL+TyFQ*TMLd`D40^zTUJ2IYi&p`F7=qM#FDbm9utH#Q@$O&4g6xYA0I{=Y){=9>4; zMn1ALZ*PUP#n;4Wsab(mw^}9Q7HU^nu+YpE6HPYivN^NIz*LucsDJf?^v)HZRHwqN zfvNVgeSe5CXjf9O+%83I?HflI{$_+2cyBAjd?{CoE{{2B$=H;KaJ&6g5o(3C)i|t> z+_hw^FG{i7s*83*r9Q}s{(#yRQtbOsSE!5p%g8H#OTep`cMuSW0ux%P@<(Or6GVt( zg@IkJGP5N0D;MLBg}kU&EFDF%Rb1&kPf4Ia6@xRLjwMpr&~{k9#Vxk&U!jR^JU1oy zHUW}T9_EHLpt!?UgW{qcOugB&Kjy=zEfCSivpZ=?j@|9Nz>vo;JQtEIagSDKj&PtD zb0Gg2C?D4-P1Lej>_y}oEWouzT`0Acv!_d)+Bi<;5VpRTAgFph z`;)`2K&9*e&{$bRDNJ3=pZ_Qb!bPMLw6s86K*-A$CE^hxe%HZ=3{?w{TyVp=n)(8j z!+(P370~%9g|PkzD6!K?|Hskym8$Kwhd- z9{l@4*u+O{%exm1%?ockG>4SVFHDd#EN00aLTaBd)-x|>Nxr!^FIMCE*OQ6wjJ2STU5TWdIRWJAf6{(vakGU?m9(x zjB{7K;NSo4fF)9o7R~>obNo>Mlg^3#|DkjLtIDbW-wni`F@{7Fpz3dMVKi7E0Rc2f zATa{0RD3c^ur(a$vU3BM1UM_x#H96a+@~_NY890l|2ZuL*zohUH3jOJCE2bDgU6#9v8nK9j@syby-% zUI*+v?znV6w}be0;|O)p?!X5i`-)7ke6B3jGE3mV4l*h>U>wC)RG84!sHK|Gp{{hN zD0RjWAjD$2`E&oVz)qaDfJP!glQWRumdUMmF)Kw;wwRtiDQI1+Ty8ZpyTp`Ox#9>V z^NqBb*ucCA5S1`W!&|klr(IqsPW>yUlI7X1LsZ$fi7dZ6Q8wdMOC(6k%$tXSiQnH2 zwh&gCuv9h5C>Om_Wty%V#8Z7tvoNpk^_G~r@|43j%*@z6IHk+1 zNRHkh*m5=JVc_AiWY+_Nmyi8pKTIH8ijsR4w3| zRzZTJIxK);Qfdi)^d+eoa%3~18bGOBK@TTpzD6&q@uO<3ooztnlE`AhB+#nBwNkAP z&etj$k@%Kpb$U~dD_@sTazjfCK`%)!FCVa;ilp>ZjwxNVRCOa&iE4lN^nU*gE+<7% z+R{(EkTwdl1ne5;X5g|cC|;GwoZEIECnNzJ`|B=`i)uQq8AtfW=l5(^u9&s1i2g8k znWdSXPFX51y)UI*&?5h;WfBuVV$ z_!$HHvOKJmLiI>76_A-1GkU?;kiw&zHX0`EZ+mit-_-k(jOmlD&Agf!zEkrMCAurH z8<0eS930g_fNQuWa??1=6*6Xk9=~m>@&kD~+CslrbPSTJTzo6=W})9kgz|LPK{ccn)u z-eAle>ty5#=nR`O9BPubW*vyGZ<9B5T8&5wwPGwfmzu4{w& zj>vXwI$Y57RM`nnwY2!#?0sGX_EcUki91x@bfhKzcv1hz<;gp~IHj{uu4nqNDnXb@ z*O<6Q!T3=B2gXcRFy8Jr10z>*Hfe)mI*oCZu`B1p!gPT%hD1k6l<)#&QvFbo#kh!b z?!tu>InQ}`Zc-x@c=<{TvZ@SzuY6x}!Q)7){LZg(!x9wYgqA)9Kzp%sW%u&2eeq<9 zy%nVfzp2z5L8D1$nc;*plfxHNlt6HjseS!}(xf?0em2{uMc zH2|q*a$3JqM3tyfQ&o6_zs}*RErBF+3Rh%>*7=a8JkIfN{2FFU%HC&Qqs;IahfmRx zIS|UsX47XWKd>k2neq-;ft-Ih%fmyNaCEVL6;=MFsr*DCrXgy*bQcfXeSxfU#)zw6 zHhxL1O4sO8C2lIvqH7GxxY0XpTIRQcwE39=X_RefF~?wJX0}~~;XSf0N6}0H_ftHP zI-kIv_Rz+907?6&El|ky7>=X-j_7Zofdf?=kme>GxGXQ!yvKI&oUXB@w^{Vsp{(+gudCU|vll%Q4w0iQ8brf zbmdOK+#uzmq<6e$Tm?O-oDbZecU60*_!FTt!^ae8Sca zt&hHK_UcRP6%vfq13ax-agRn+ySGvHN^F{~T})N~udQv>@hoj2TAEnHIE7+tp7v%vzq>rCVE_Z+K{g{8 z6eGiKNP~5JDh__#uO-Joc1)%gCsBgEnbO1Y zzjI4F@+`zwXb}?9oI1o+kU-D9Z}rvKWygC{O-tci?@RaxLBW z0sgYr)CLn_=e+Y(`*jf_PUtVBTkmi;Kpf~B6dx+zgl6W!vrVDv0ihJ9uQ_5MT{}iM z_A*_C9^9IZNp@RbG=Xp0{BSINw*>ekn54xU%<_gtepyWfqqerM6JP{&w7jKV& z`>)2{Tw4H)CJ+y*J$|NK64?_%VK7{LTX9at`D72@vn)AG_dNUeo{cqPewT<6MvIYH zELQI zskKfdyQ0n7Ta=7lvLR0(&zmua4q2b= ztigmhpgf-%dQam1qjVQBXBcKr0|k0U0pOAI`7Oc>K}SH`DJ^l#!3Hb}l4)Yygb)#e>`P6#NJu_<}VrZjWp-FHxh3wd(L=vPa{ML6R(R zGr(Ko_4EsW|9bocll+GNFDt}S009>R^Xr!t-v4BUc>a&A(0>ojRyJ_5`d{Z{V?w&4 z96fctk)@BB_Sa`kv`Hq#BL_x;2?G%D3I3Aq4VO$@$5&aq9$bTmi&<5hH>+CBX;zCZ zwUnt)K}b<97ZSQJEvwpGtO;pV^DHedH{N_PajnJchzI-PP5O2HeBJoo{IJRSI{pOx zqSs2VB{=S_E(7keqHHR?B@X3Uf1A@TGK6{2!aC{rn*)18JTT#$1aRR_`XH`j7U!xD z$kAel8ECPi4w$iP^TkFWIoJ`&?iP(hGy8MPX&?6;IB{TxfBM@XxVW? zLYbVY_iY*cBwv-z`x&#!52$e_T(YVUBsg=b4k)DeuyN!}_K(}^exIDN>y0cpYxlCt ztvC?m>XsWN$1ZK^9QI>sR~;aQ>W+U{xl|d=r=F?L9Dr}Hod(vg4i?e63Gn3fov>Z3 z78q5AQn_1_(ADh6RJv#v9%$mM+m;L2}|*|7g5T0JV5S>qIaD?|6&|2%WuGu`YbZ(%f#gP!Sg(kME) zJMkvHhK9Kp(FO94(A_WOf}%5Vg5CCB8dBVtFs(B}=*t>wODb2;A?CmWSH$1Tgs0h4$7@@r)UooKH*wA>F5q8t z;?xZcy2lTH#=SxG%BmW;whclL1bXOjql0bS1=%|r=l>HJb^zN=kAow^UbBq`Crl); zZeBe&{vI@{!x~x)hPAIFk`7m+V`6&>Fa6PYfYYb`Egjs@H>Y(L_m}PO0Z*rkFFkfN z9X~l8`u;Ws72@K#xW6%1CoeiHRtFbb+MMc6Xnd0E;0<*3qeu{U3z-TjGC?Uz!x&8K zyJ4odMDt!9Mm5}XeY9bwgWwlq!)#)|8E8 z%Mx0@NESF~VaoxPrcGRuAjtSUoY2fEb+>TW)_+x4?wipwl%mj7kVY>ffIb%k*$1r{I|J;^f<0Tr z^vaS+D5x`xMFWdr2Y3HrVDufoXOf{UNmr(UUsEZSEx78t;Fd9J23?z<;PI8PSSiL$ zI2g6mI02L;=u@A%_5e@QKc)jXR28AeWDrAB#V7o9ejz6(s{Tjm(?ebg^A?%;?ExCxcj&3*YAw-IT@;b91|WtgxU{CLgZdk5=A3H1Hykn6Y+O<|LaIh0yR zi78c#@QYa_eU8{|iGQsby_nr~2Ea&c#(|jEBptDDteHNpOiVFb#>c|oAVQk)1F@o| z!9_6lgnLH`>Yb*QXE(8l!3{xsz%l#-oapcHEXvB{DemzGW3zH%W*hd2N3HSnZ8}AZh+1zLn#3O#M?qhp4K?=i*R z^nzpYvP`?UulXP^hP5DWeOut0aBk?gI*(gUF2xPv1U+)_M$h)kMgWTOijOyz@1tv zlxyQSg~1bVg9GIDmB4vp_*iZ+KGOsEM$A|~LjrmRN5q`~x^`I*&%^Cs(bh(87hH~|=Ua?fC zqQJYs_=Ik$3EFJpJ33J+x)|x*EyO59Aff2C;qud8Z@D-H&0w?QF;JIz%z?2?K@=XHlM{K3?9$@x(ZLkkk+34f-Q~ zZL!e1f2U}A+B4V72cof=`TFlDEwVewY&Uo9mAhz5QLLj_i*QaR)}}MYkKwk~xb1M$ zkLmX26&~~_A`asfu3Ku1G{{@Av7$7DUHX`8f+M?==Lw=MQqE_l*Ke-})*J6fD586) zHGR$THo+Um`T)CYy;3!7et8gt>Z)(*P&~^O_LC0UVE$KpO!u^Y*+}S{zdBF=R4h< z^&apqq%PAa_mij2XIYz~?}%n&)z&P}=i0uq0tXW$n)~6S*BL@=$;o`9RWMD5D@o zIfbndMsYOju8#YRzuBl_GQ+sK5JqV<8%i7_hyhrpJb>MC9SSrj46Tf_>{QP~dcrvN zE6+Gw0?ueV1_cAhiLXqW_}8*ZFWO7;eLArR22nUh#pNA$aC^~ix{Doqzi#WAVJDro zhm92Mu#&Yhu4$jdU{RBHB~^CDc!sJK*UcKgBXK7PS5~qznFCqr0NCI_d^Fn^gOZFn znnKaq7{wY%x;*;wcvdK*M7s1IqmRH4^V8MwtsyCLRKB!A$vkYod}r0xLDB)NNrq!! zNtQYJLh^5+^n4V;EXK#pdJK7PbVMNtIO1^oMc8R zlkvl5M%O=HGMvqfO6ex#N8^`CN&2=|P@*!5-Q^Ty7~^B(6rC=y`B{`iN55K05fPWL zjgH|GW>A|^K0C}uUpBe}@+VbB&yEv>_k7%^{QvG51asupml-+~mFpyu$p3I%`bQQp z%+Full)*HMnXk^J|4z%T%2N$C+S1WUAm4(s>{tGXA1n2bVQ(tKw;Fdw=4UsMUmidxD@72NPpK@Ba)0Q46u8I#xLHJ5(#vo`}9Tn@Z5eLAt6DeT+;Oh58(gk>r2=uXPQ9l_GwbPAjsxb){F`x^tx9C zDEkz3scyH5p%wWck2&iV_{_69F!i@Pqa78tDbrR|r6zYTmcEF~Lxdz#X{NHWtkhIn zSKC-xSK4YSFD$PvuB$e-ds>(r05U{uqB1i!G&56{m=*7w4vivcpiFgs*jf~yn_T4` zcPSm4+R82SS%(SB`)H9Z~4s^e=mFGR%Pk3?zCh-=S zW{s;?tc!o)9gvCnGRI~ljikMtN zNRl1rAr8~n--x%#8BD{!6z4_v)V%jhjyH7#cn(I4G~feLLE2Nr#o2w~J0#v8EsLpQ z14H*EHZfvzz~ycgx>mX+W%2pTg6>MDiE)Qs4eW<0BlHLOlV_vV_4al_pZYi|3D>A@ z!~0prL_N}ZIt`Gv9l8eV>F1~Q9K6epny+Af-ij60mL^qJ)fJfc)|ta?kCZa4!>{a` zk(8H;KTOLi8W{&R-dLyg(b>UddZpD0F683m8XU;gs~grWZeiYYLeQ@haV{bBMTGXf zwRCHD;@RF591L4C;Ad66CL7xl*dH6Q8kaMVA08!U4c%-pcPX8T$WcUd$IBV^+>%lk zaT-ywe{ctcX|t$spH`?jEg!dnD**w7l=c=VYuc{CvdUdAF&rBaER&mtD5UZ z(+OwB3|?~MFQ~OOYmLS*OARY{icrXr@j^QBg_SOEXv;h&<6y^W>Juh5+)6%9ajo~# z@F*uUsZF$-l03He_;6D>y78>wg>+e8PU^v{{=%U?K8kyIE>nL$v1-nL%qB|yw;_fY zzSr8B0K#I`(C=32PcuH9EeFbq!tO^FpR3*~vmdyqI(>W9TnqupP_lci*kXd0FBxzR z`55nqC>Dh}M>4yItvmg)=!V=eKlmlT&-n z*pITb5gPsvuhfnXb47tmh#7R$v%ew`ZBVxDgcnkR%8=qPoO4y?p#C56Wq|IlHKSRB>1Etms3=c?9Z(LRQW=mKS*yGSOoKG@ zKm|h%_dyJL73KlwIYJ6`{XJK5@;Zv$?XSUNLa&c-KLRiKcw^rc`8jYc2AToWF z=l)Y1`ewo6Hizd;TJ#$QuRf*z9mq;aPlJ6B^--DMq&WUc5YCR{&;5WddXk8Ni(U2_ zyjZV@2#Y~)lIZ%4dV5}NhzVKgJPx2M3!Ymy~ zt59t0OICjw?1epuaA}hZ*2y^ck`O|yM9J7kg|i3NghJjzd0OL7s)DnVo{ud(2A7PriK;C$Ju(|Cb?;J%`IteF>( zY?an;yzIVHx@pI}1R!Jp<|Z&{x&qtZP@V>&pkrn9kbMh7k2^Y>f6r<2yJ2VMX}VV! z=-8C#SO>uB|CEH|nxmXZ$#yNb!KqE`oftDKBMWf+SGMVE(6L6h$MMb!Pp8g&z|#WK zbwq2E_uv${X#$zHrtXN~xY>y5)_a!1kc=$TXu+PS><#!hBz`MJNGADL+@T+<%yvZ> zuC&$YX+Y~j3CMd;M3-I@g_)+4AfnTh?6p`Cg5Fb)2M_C7Dwzh?&jO9l(#>Cw_E-d? z-js-r3-eBsH8pFNXw-rsk^rIwBIuFsY=PT4FhrxJ3U&hl-Y<-41l>?lLo52}z~7of zY`fa^INc;Q0l}}Nozyi!Y=cj?CBQX?E)03F9su|YBl@k?M%0dD(&N8Ra9v^&$XB9H z;$-IN_0)2+^lfr^zR)|&PQf3{vDHYv;Hy~NQlvGgpQn&wu_x(Sg1E^;Yd4diBY%~c z$(9aIkSI#!xc59yCilqr>>hKxXq`rA%jbT>=gDkbl_WJ|REZm1#e}Od-d_XUYmn;e z(9J6X^&Qh)(iMpW&jMc=0Hhb{7wY@BP_SD94dRy)oVuJ}sZ#vBtBFUvLWBhA8waMi zt&cHU9-Retoq&(3i6gjAJp!JiwOibW7@tjM9i@XdL4Pz0Re`PFzqlQ*gIv(x*-EWstk>j$~o?M z4jG|lv>tXbaUk@xK@`y{cWLABQLrehCUR3yt|n{%*n&3Q0w%!ZMR4v=Ph12rToDlK zdAJHXKn2IKhPl?~t@(f$c^b2E;;U^S-W^+q)?$Cr_M|R1Rc;;(d2D$8moFeg&>Ul!YBEb)!?vvT0HmgO6?UCN0 zhun+pb?pDzB*G2LUcCM%*Bi7?;U2vHwQu1r$_+ZB_>uL>(Mg^oBGegfG$_Tc))_4| zM71jTmAtQFja+LG_R5n(^zE-#@N9U;sY|ili#3!96zdFum;VTVW%^d`jG+tf*_T@E zru+`Di*&nHx~nOOdP%C^*Bh6 zJA62dm9Q(tB}2V;C9(GMs%b#&kPiZ-xuYt~31S8f5T)1j(m{8ci*n^6 z_wU0RDm1c6dW7jzQ1Gkxa6P1n^kswmgSsur7{c;jnI-FC1ueNeEV;siehMe{`4Zx6 zar+*l3(BSZNPpq^Yf^=65AxQFluq8|R}^!_D6X1)pz(8E6G*aUJJ#;b;sk&b3w(Tp zegf$|%pSG6M-D_+QZrqcXdG{pWI2_Fg6dEh?JCG-aB2t^8w9SOShH(Tx0o=Nv2nnnu+pSO;y0%mQm55ZAEvmL~ig~TsxWmnF68@p- z74L6Hvdigp_6|zlu=-`=HQQ<;VKfF(M(&!cK8v=&5rjAoA}m_ajGOGUALjwbjE_NJsgV%1IySxwm`xy4cdfZk{J6x5O3Gx!`Mv=ARj*53FWPT?MP% z*2V4`+K`^g=G$1!zj$R62#cI3mO)J!g7arM${uy4(95>-zGY@ZQ4YppKLJ00FKz-m zx;4B$Y*^k`glY5_MCF7=-(Ma?qSS;^Z?oN9lPz{a93dj`Lb|_guRCwDcY?#+cT z&0<~f3EUBQCBt^PAc05QL`3-Kd@1s|y``J;^SYK379-VQsd>J*&F~7DaeveyaDjpA zc1m8L&3wP$b)$4i{PIu!`$xyp;*eL4f4_bWv;I%TYN7w{#cD+pCl~Ag?afZ|n(YEV zN~j;1#TKcpRZ2s0_Ad?b>>{>2K?UW2U=&p00&RP?beJn<-S{izBMo=R__BE5E{Hq% zAO=~Id={muCleFy&q?kL_Dr2Js1I>kbL8mBkX7b@wGfP%PiiKY3qKW5#2Tnd$QsTprnE#1xW%io;%Qz^4>Fza_KD4Ee_`Of)|SO#^QTK#$vm)52PXOJl7oN(at^* zOg+qsx=1R1W<}eKHvdW>>;1Ygr{Y=heFsqyU#?-1k&SWD0p}iNAr=tBDk)=|91UZu zz!D~g`kdmoQ*mvgdvw0Oxlo^*JzI)kW{x360Wi!PW+>QLR&jGAC~X%K<_B!yBTPZ7 z_vn;sjt=@_FksRIfIGy5u8a4L+it+!7trw)e^3dDs%anBkU1lo3 zE6c5`?=bk|Jg@|dVuahQGOlv1l?oJ zKlXQewA=gpHe}rgf!f{+5kF3S(*NPyt?kAO=FA6{Z}wKG0?Hl|CC~~09VS&2u1uSy zZBCm&s;ynb6;cxcBV*h?NX(G_Vd`LDPME1x!ak&oMqT(O97|eaMVPuh2qQDOI7nTZ zb`^Lsq@8LX6i<+EKA*(5`K;I+yna$#W*!!SE4l1ZmdB+05k5II>GMd1i#iI!b# z(Y}70g4MiW`OlRhQLTO=={fp|XQ{b;Kq@&Y<{3qXd(D)#)v+OJPYb(9CA8$_O29hg2nJtNszE z+#8e*9s7_|he%yCZIVxIFyQHd1DZYJqHwrYf5z#`pg-xexnV6SIEzC*DXk}S5N!pzkfyL}lNNT%p$7Z$v4~fu$3cfSO>I2x4o9fn~wAn}J#yO-z%T9cKoa*&D z(WSjPGW4a*y^8|hz8k)_7p09oJ1CU#3LwQb#pEuC5M#MZBgI`AOkEg6-j_f_{mXKP z;>R;6&3B1{C<9YZ49oPVXCFn5Nh{X=PKCC6c!(+El{1c`BErsmKXdazix%^NnytYw z(nuS7Wza2azaztanxvboyEX#Pd_QdSO)SG*7n#m{Uqt3p9hqaHx`Uf>?wU*@$3$2q**I=|~Y4GOt;fCezugs?cvfun*u7LOzr4>m4M zOUjUUAj`2v(TG6W4DRanRh=_?ZE9E6Ll&L4^8U50ZxTm_avz#C&oAEifp4t#9M&JO z&3ZFk&3ltGj+?t8XXH4+)!z-G=UzvMe(UV&F1TlE7q-H-3rh&38mD4wW@AxnZBkZi zR!d=1R$XaUTS{4Bsj;)OsJ68f=+z949{1-%d43(x;^FzyecKDe^YzEqnph!1cRBF_ z=O*F7^;46OVn2Ows}>kNw|RDb6Ev`+XGOIYn=JqmNY_5Ras`3tnT_GzOmB7DM?8gy zmOixv^Yq=O=)=dEpFP}VAeycbar^j?$n^26&0;~Rym9k@g>lH=(A>bg zv3b#*zJ!KD47uP0Yy))l#OM*AE}>H0xxq>n7L@wC!lk?6~6Eoh`@&JnL3cHmLoV+xM}t{5^cwYL#nY8>D7u|L ztkkTM?DW8`at`tOIV6n(83}ioVYe2>lgA)1Au-n)Xe9DN!-} zx{Z_Smsdz62ajp-T3Hh0W2*WYxu?FE_CkYOH0Nz8?O84)#^6&5Huy)-(EeDhQOZ62Lb zz`H)Z%=^1DNE+=ygGt<4SO_oi`_&CpRw(Gm5j|W#xP73HIZt$_gGt`V<4&)%jd7I) zlb}C7lWVUAmpsp%zptvNB}3V@n)RaL_tQyJHWG0nxvmlEvw8#)n4TFsS$rAbtwAx) zF3w>@b7o*`1!#5}!+Cn6HQ-knd`d^*lDM~%9p{oSmYU}nQkG_&Cvl)y&%NL?Fr3!H zfn%I3+$TEbS9Hp{XfiD$Hx`RO+>0$ZPW_nU3wy;4ku`J?bChfjbKeht);~m-nkW?T z_pJ%xDh6a9LZ>sW(R!IWMi6(6F^?@^mNhL}sQTK>e+z@BTF}dIvUBnnz)#`cvU$7< zNmi;SziU*?OIH^hAhIU&)o~GPYN=!{O2 zk;8KMO$+f;nMR)@g0k{hVq{wbOE*62Wze7<3y`Z0Az5Xe1Ch_lRy&BnznQ^%EDCnz z$`%Z7=FvY@$iluMm5HD{ScG^_j0(N?XIC?b}`D|L`dCL}zu zyflmLCrCN3o)PI&ayQQp1gg*lrjv`Mg209yKb`jx7}g)MMh<7?_Y}lqV-kZH!Ig;s{lt>{pLdsK~psyK&F+50uS0ta-2PLXz6nuccMLdo{h2ORhrUNZ?Gae@%7fH9NSqtPUv9hEoUDe4 zv84wXoHa+ZrF)b(Y)t;BFm^aO|MldDInwoW$lp*9fwsTN!WmkgP`DgrG*z#889!2=pCc zaHF);#WpHLyI7$820bU}cD$d#stjV|ij2;tD)!~|V<=B|j(oxf4CW{|Z~(+DEONp@xPSVTd){@VCMw{&*GKQhmHT($y!qi*-dTsXL${UAy);Ah~+N1l@7`s9igt zm9Q#}eaV%nT(K~j+R91A+HTCbO>sK!OZHL7*{@_`0q7&y#M2H>wS860P$?S2z~(61 zmNC>Rooe;^K_OA6A`o#V7jC$4ZUa|$Kym%j?9~=TyV3wQ#o=Hr#44CmGrPAsFGQ_4cSDAs+{WCIC0y^ymg+DZGbZ28Z)?Fc3`0`MR*H_#2EHXq`gSf^f-_h zpM9oXALiV+fMjB%j(tuuY^A+O{~gi*VlWqB!krQOcmq|Z$c)4#+Tpz+4!C~rzs@dv z$iC)jLX4mktlyBe2cR&IO|@I6&}dsN9sScievhM=8ZX+Ym|*otQL;5EC;H)`s&6Ks zLsK0aMP4XSy!vqVXyF!1JsHQ5U8|XRKtF+TTOeiP(P$_FDyQP6(CCN6loXiPbG4nA zQWamcG;l|9eev*!*fwuO*OZX9i$yxdv6f{k9Go3z6>J!3{iu-fJtk=`O$}%heYH-Z zW_m#j^>+%*KfBmAJT_#fXC83~bZeyQwncGo1Opb^FZ)ds>G0BZjeXrN=E-JOj%?Qo z4|q3gjS$8HtLPU%ZF^QWFbowhAKN7ay*s>x)4vfKi55?;Zaq9V1wLMTODA+C-kFOD zB{4tr^Cx98ZQQ6l+G80u5AEKrQ_OkeI{C}A5||uTFs{eH_2a)nk;b|VGA|z$+$y7^ zI(D)gZH0P!*f|Q_`IFsxR|M)LbSAO@%Fn-B7*1U!9f1T;nZ{{Y07Pfu;IadJl|0T$)ts!9iy)$cHAqR8WAmnP_7w@tO>)M=v)Q zr4&HfWxT5$I|=Rlp0LFcZ9)nmG7(H%;-O(dlee5a(++h(MW5TfU-XIbE?bPLHMgvR+%F{hOU1i3`DIF^y(u5e5v4S#dII`xN!O;SMZ>6m7TruwQ`rG-v$y%)Knn>kh0)U5x6 zcuP(bCxvuPRugCQ>pRcoSuRodp#HGT-rB@P-9A1~p?O*ou`S5(iu2Iw zC*%w37;<{&smy+2-6iy5<7EBOuR2>je_v|k(ws(H&t^l zBP?k4{^RhdrYt781BrT4kT;b$z|Jo&B0Si)1#S&?R$VmlAf4O<4O?N}xvT@tGAQ~^ zV}1it>PPAn{EgsthIC>H~`>$IqwbWIss#aBZuM&wv?MCkz^8$J)vd!Sp z!n5^Ke6L)D>R5!QO$`e@FplIC)I7~1J&J)GYQA108TP@)OR$b3L7T?iK^)urt&w1( z7w7mQxzDD8h^SF_E>B+-+-VS1VZA&{5vpQr~YX-sn3Rv@=u4=+v9g#R9LV>=L;>WVH8l9@dKa{N;x?G!3L*snDxf73v{)7VK8R zsqfZcXN=)w1j8c5MoKjFBF>*z6?Kv+Bqa$InD-#2Uf>ixgI>#JI z2F?nL1g0PH9}b+*51^zdatH}s{M)QAFimd0lcAZXuJGegnGdVEPiw)5t>cuXvM2dd zZiv-ga5yaP;ub*0%9crPy-MtSN?Fz|Wp|H>jdX=K_d9jr0S#ka| zJ@+2zC(kk8^CR75N!lB10` zf1(s*e>nxoSHT`a)*59>%0(V>cNrG<6wX-YC!G~#P0FsJY~gD_uk5XeVr}De8I#Zr zr$x`MwMZtqEC8s{+9JXk826EYN9MqdRX?|be|mjtZmBPH5}sEQ;iOiSG|2iP?UwyaeTyFrNcQ+Ys02;-3CAFeBuY%8#RG*OebYn zXh-nS8%Jmd|Hrr!J}0;KQxrmy^$SfDEnxg|CdBV9ax#o2Iu3wfj6vCym5qPeuZew$KP=V0tIa# zS_KmqDLQXUM?#XeNbWl5l>HS|L3vW3Lehp8S zWMlzKoW^4rWq0Ei%^Yo>ukqkCbrVVdu< z>3;PMPb;^Bs!`if98^DR&+NHtL|plGqI3T4$}c9cvX^nDZQrbk>f@)OGecLUF@vxB z{d+L;Qu&GGX7T!Y)t|F^5dnhw$lTD71#{cdhS2SrFL2T`OHg7gCBk3B%Ao+b&TZ)< z!}met37vMZ=7i8W73}4F=PW#J7V!RgZ^htSvPa<3Mb6|r`H|KqqEvuL20a!cA4m9$ zFyqreGt@rDMLBNj;p$b%?=U;<Eus^LZ=8!QYl!XGRQ)>;=4!hy=B3}3_c!M`fAL6(G*R_>yj5`|OVn~kwB2!Kz( zejb^{>4w+O^Du%}uK#LTr#a9ONxd7^1)`b?js=s|J>tr@Sflay5}RTYhOo!5hm%a5 zDcO6_#Gfmnohw;+{E9hO!a7&7^Y|5au2jUQbs64|8}@KK0c~Oe$%Te<)`CY6p8rvY zZzr;f8W^_v!vr#utggL}Lcej&7^C)q#+Dax4aUd@a{W<^>tV*-5OSIf-;Nv~3wHx$ za7}7A+YZqRcAC)z^AO$5L+Kn$OXWD<@5Ct>Cfvy4XCZAntzl!vIJ2^JR`0&DQ#G_)Jo8?*ni2?OFDfM#M1|765*sdVWn9~ zF05l}Z+t~b$)ZUvk&L`W%iiVf+paFiCXTpFs>!%{F?~l;d+-{yVl0=qZO>?d^znV_ z8`3bfOmg+CqYA8~K4&a#g%394DhOI!)5j~Di=@vSH=!eXoy4VRHF?UnwSq{47BYZ+ zP2ZfzHlwO!)X3CE zYYt}Z^F7D6L4D9)1-1?kf`o1`yXcYoU-zM&mEMq*-=IPPL`3^U@`(}UY#2FgIGoxM zOzoHpN7jpGNQz0p>6Eo)CrFl~S*$<40w0UOgzkGM9 z8sL}05?DD91yW6VWQWTU>9y(piKQnEw&aItJy<*BtO@1dhnXo^KS(HASBU_ZXoJ}3 z7ir6SR~hv%VG{OnM3s z%(>3Zjq=0Kkx{|P|Mazh2m^uN`idZCFlC6sz!WRx*~ECC7itvbs#gbgZTPPHmqms5gTY6Gvdky%Q5RP_xNZ=;I#r%9J!VQ z(sH-Nmk?-a+M{wcRe1&oDPH>FS7VGyX=~^AgNpU#z1L3%hogRgHyENks%EKS=7G@? z3)dI&U_1z{%9rqCe3p?#fJKo^CYWQyV%}#D?G2h#y@sLzx)`y4na-OAWJM-cCq(|h z)Zsl&_$94m7mp4HV=ycW`8IV)}wpa1rRb zDMNQisqrX63wMZ*D2fzG!3sY;=x2N+th;;Mm`eUE1$j(1B!_vQ2S)tuEMORpd z5n_qM-!Y`O&BhCKNacl(h4(AP#OHjIXXNM^{%%ol!ywcwS`?LM6*|)T=QkZk+ztCX z2_f@>%R#9beeDr2Eu~bMsgb!~Y;OT>eOM1H zFni&Hpdxb6TZ^ugy{x^Cy>$&cw-|Ci0#dX~Gi+BIk7j&dJPyXNIHaHR7iWanJjq?k zIHF##nd{&tU7#|c$LIz_JV9=ct_`}!!DVW0-$)td+)shh~FTusb@f6JVRji zu=u~!?u&s?e8lVT1k({$2Kc+uK@%a`EHPYu~9$WOb}<;Nk- zjs*IOoJbYBcL1oR`B4b{U`>@NsA>>gSCsYdIwYonN-GII#6IM%u;rg%wF&0Ba+Stg z{#(mYD>sd%=w zh(pF9sEk(oDP2FtI;v;uv+}dtU_K3vlwJGGATi_fA-ScSkqRGNP=f0bwT)JCrUlJ)XFPo4M1rebC5!YsPfxdQ{ zXU(RveA}{avKIqWiKIKZS}O4)wgeSQ+<_V4=LFpKLb|4}JVehfI z5!-Tab8Sbm9s8R+30bSt$FvsdZF6=WA`W`9f=M?`s1uZtg9N`_qaY6wbh%1F1~QHj zSexX3l z!B~lzFv|KK$WZL_PcHWtc|^C2Fsuy-3x3{!&TT)k#;yX4Us)&&?b2vZrWG2^lm~^@d}u+Uu0;T3s)6o%!G^;f|o|hrjuJ625J#YZG|p-QL84@ZM9HE zb-2hc`1DDZgew)WU>utk>8Hiwt)=4)mgTYl%0~x;hpK(a?IO5D!hTT?TL!EZDo>d%`e-@z5dp#Ac+$kr(7exxG(z~(#H}i1?y|M?V+dkm(Iz9O zY{zlz(1+VO?vM-rcsgz7esiwjZJLz2spp}dF}<-k;8^$AyMNy;k-G9*HCiuhvCTHJ za^ad*OC_{0JFr!)--*~I^y0?yJ{C+jZobr15p8Z~f7*zBt&#+=hjrY>?lX$M+o{BQ zkZ5)xq?jgfML+E^h}x!!pQgm|K)=`}UjTtllny_3ec0oo)*2h770Q$b({A8w3iMKm za!r`nR&;ZWjK<;z(6A-u)c8nMty$Dd`)xD6QV+V=QXKCl17?$q3a@N4@5_G)g}5-D znd4we%nF3uNqSZAoRd%oQc*A1Y8y(E+qbVh%C7-NZ-v(YT4VIL4zN|__ASmE>h4}B zitNeuB~>GL3IuHLZL%2OUChbXX1gE`1Ch%QH}7F{t&jV|9Ytc`?_`+Agi#e6jl!}a z?hbWn67LG+kNf%Bzt9~G@W@o+TWQMbBJ1oYbeHfC8jDzq>=~thB@c-Haik)hII%CC zZOzP&74C_{t36n&L})ocR{-ZJJB?{BWE3o`9!qfGDBDkt7zXW+)thQq$J*0BqqNBD z?zsF6O+4&Cfy?jd6WlA4Sj5}LAStweT?8j3W#utcy47fF3^(0MyUwwv_Cw`2g%zQZ zzyVms{7DlSFI)nxuOk2Syc9{Vn20U-A{)Axe8{>;=(@{uH{|^sP%7`5+SKOd8TvCo z^twJ+FVgCp7bqU|hZU2NVILyaN%dYMt8fBK!k`ZasN_mDJaJHVDl0KZeDHmwDtaJv z$WXHOybKPeEY1NW*W}FtQ(MnZ6S?*{nBYw2NhE{m0w*+>M{O8u;^XrU^}*I}$lKH3 zD@%iE>?3+}PGKEJU2bj~;a?=#Q|Mf-U9VdKy9Y)3#)z$S=PnKOS!Z%#D^19iSac7` zjSeKw5M`he4)1$&DSOZbt5pigmh9+vdU3k8r1XOq| z75E>&xwFW1+cpdC@NVodeZCN58D&9Ju9>?_-aW7R`9ieyYeyMHsfx~YcA?Li$>5sJ z*nAk8tyM4D)-R(|r`@e5XQlk@U=*Yq3N42hJFQ>^QAa*a7QWA2&jD648#?#hd++=V z$nISXpys}hEYstlsQWB2;qR56Csym#b?I^Q4x~KCuH(Y>+%qe)GGj5XRSc32{JGK< zC2^hAEtBIBZ9N7eiK*OSQeS?S-OoBWfe`*>Iyk3$s=2=pCjj^ON+%C1OZban~DLMG7L3}#W>Andvu|3j&$bG z4;A@u;db+!`+0N`M$eO}mu~K&o6T*#oiD2c)>xDbY9M?EejNsr@|f0;HF+J%`M9PG zwiiIJME-Ti@6ppqxJy1VqEYlP6f~+{y6R1C(Sn{1_g zoU9N#s4N%34u%f)6f~}bq5I$-*{ZQg6dc$&Byr7R5gtbim2WAqz$tN2YBswcHW$bR z+Y$azE@;J~PeEc9DOZ=z$nft~Cll{?iAn+-5Lu&oM>fpyoDN=ANUFb5Zfe5Jx}L`1 zjSl=bC^+&ctUeVFnNeWr4nWh`upnoy}35W*I@qwK!Qz4>d(I( zx(5Fz0Py@@1Hi%F#ns5()rCStMEpM?@KeuaK@u};CX7NOmK2gkLFWak$)_m}p(Jls zMPl19&^ROINYT4!ZB(uyhG8yc)99tvYbitj9_GIFp4;_Bwtp%t5MhMfM(Fw~*X1$W z*(MR`hA;nuMp7if&}IQxksQ#q-(xmI1pS7l!Uo_sZQ(j{*$Fm4 zP5!eL1HS7wSW$B*-yWH@&P~GHSmj+pdhC8ojvxf zL-L(X(`>1_8L6nEeXNstO~=Sh-Qc^&&9|mq+kE_`&myt;l#e{(RK`st8 zHK_js$kI@bV$i(lV;#kJzTS9M#jgQeKIhD`pGW`Th?riWVqAdVqs*tY4kU`+`O?ZL z2zRCB1MjoG&k4edUg@`B6oe6UxXIc@!0v_Gt^;7?wKDp__{{Bl^j~Yg2|hza3qcw* zJhMGV4HE|nwLH^3XAZCQb2EHEzLgK_y%{$j)%!u0tgy_D#|lNfZxgmhx;3MH7W~lq z77hafzMD0EsyF&680>b&c2mBj+Akdc``-h0U!^1@h%aAup#CZLr2qTa6Log5F>|I6 zv$aw)vo*7mu{U@4k60{8nzF}WMFoD^i+RA&GSWhU2Z|EpJC4GWDv}ga*;Yy`|F{f` z*ce}HD~~oIuWh{^hKqzi=@SEMv_d6-L+&%<@6EUY2);dRoG^dMHCY+lqDys}8N?nO zcf!1S+GbsRwRp>hi8_}-{YL+ANI7V|aysdB8K!$Q0Q3#hA(R|sksYAni}K+&)XMs? z-pq z=gi=B0y{Yfh;N5~boQWYN~ZOgKh5(sua0i2cE-jR=j3Wv817++vi#Vy?@T8VJNY!I zG9p^RUG}d&v~;CXks^>uag|6fuHzCj31l~#2~`Mb4x?Il%VD07a(NmF+UN-R{;Pdz zSdLg+)#e@4Xr0o}exG$~b~2@(bAnX*S-m+=N`Unf#CvNjbE z%b_8kYMR5)AM-n>EU)g~3A;hWxrC+Rx=qpRlI%;Cn(SULd$Pi2VWZ+Y6915bS6Je* z@WHK37CPhGvMO$0? zRR$q2KLi%s@=GzJM;$7hY@Kufw1~FzLaFz4&Q-T&W{cGV*B1Sjcl^@_%KN=XJ%IBq zfnU1sDcfa6;9Nf`{{1>pD)JQa-Gbh(5XSjFmytvGnyB~*WgZ4{o&W1If+ERm!oH^> zN%MvM%5UU(7}7+Ynxm%dmVHj&K=)XJm!Gzah<|(}xT-T%Fr}3s*Qx&Kb2oL@S+{yk zOBM$Hy-Cl!R=&|gL$@W4P7Ajt%V6Kb@$~Vj82DD*cqM68iWRREF}9^gAv&c@t)<3P zCau^FTHs?bx`Zl&gqls}XsVA|e%6SDmGwYCL%L^ns)A~Ez=z4^c%d#jeML&u8$f8c z!Ztms=I9gy{8G-;Osv&aM)P(2`{RU>BJEKog={kDjyCYo{7?F1FX;~~vE*pp7mi0% z`sHG%=G4Pmyg+xVM@k7XGAyyFIg9$cGsI+5=X+izI2m=*DV3;ZT2CseJSkT8SbN+C zIvrSz{%r$8Z)!RUcD=A7W_XUI@x$m;(&f5fR#p1wFrJ(uW+yocb+ytdLV*abQa1HG zrKa`b!v3YSL`gcSZLi^kgiSH}Vu|4d%2hw86uFWr!j1wh*pEtGP?&B|+L(@7IiYXt z1nzfN_9gzwVR8colkh@Iqmx>fdZ6#<9JhuoOSR_FD#E;%c>eo&g|)hJb>9v*T0ch@ zjkdcL|ev%O&+l0Aw!LvBu`vxNGQOD^hvrbg-kjGUzK10~^u!+eni*woY zzL473DNiDc^9Km+uPX-vPnGg}gd}CsF*u~eS)66s(~I)@B&e#2+22$zvScWg)t%VL zxMv3zW*mDoWZ1*w;ap98NUT$>mpQg7GE$tixf$GF{HB|dZOgexEi?y<86@5QK(!n- zn`^Jg^QwNLU;dCH%G)!jzRjjPnEu4~nCH`xSz#dTAbgk1C$~9BG9?!zYAaJS(`nJd z?8Q38hO^LIOyHOo{WI*0ccPv-@Q^A$aLq!0j+-$aLbXp7G<*%!q0kkwVhO=TmSp*R z#JW)k*7e!ToWAvqT+tOTCu0AS_+F@*2Hz&KP{x=yw^pc8cUkk1d9BybUd3NK>oY3I ze4vVtQ#<*-P*?X4Z_$jt``Mm0tkal2OUBx8Pg!q$Jc444CDnL|`AhEs1`S?|n#VIb$bC&ryo1Rs(XfM0VvHg%^Qm-+|}8yLW7#aRhSa62vjI7wHWO~oGj zm6Lklw(T`j>Mq(N_)OsWma-|AEc!s-MEC?zxjS?o2fwym*n zM2b+1{?iY)cTAOY(`pfig=;@Zt=mL6kUCY+CYDe(6HwS3Gqw2h;;s9RLdq5{OZWHu zeh~reRtpA)ansyG7g~BxhoaG5KirP~NId3XQ&TRr>zk!L?)DqN^9gRp5*=)7!6#dzrFv~KP1AY^KUW&(G7MAoyo_8Gi% z*LigI8H=f^hbNjb#~6GWK4#3=0R%J{Kkd?F8ZSD+{D|(@SlzPfkW1L*8eC$>$&f&h zVk0OWn3Rex81UK?e9LTW=09R+l*@Ny5DM#N)@@@M--3g6%fg)*ZML*^>Mo&&Tp#$V zp?fFtmjI7o`#HgU)pLu{tKBoWG#2&F4OX4KTHSUAqKFazfA_II9F{DUc$e^AtNB({ zOfyHz&C|X&ty_+HhzVTB=Mb`g=g3OKUYFAxxC``bHc@xGc4dKn5Nt{It;XS*W1)6> zJsr}|K4ZT#TE#PqVt=n|WsGg^KLgosk<65NRAraJ=IiCP8W$h@-O&f#C+eUq_@?ix%e z`M@GjA`aM(4wR^ybb{mWzoF3Dd)5bG0_gymCP-B-y3lzit6#DRf9%2o)j?2k%t01B zJ&=A}z!@;1w1bmC8$uysTNi$W8kfy4-w3(;T?l7__2QU=ad_+lHwe8A^A3=o;elXn z6Hc&KPF=7)<2UGlj02lp97iAG=TO34SRWxEGjwmrL0ZsFH_|ovJ-p(FEU1#lkMo(6 zuowG{FU|nP4+7{gl-Jioxc~Wsgm#y9xBYiqxD0@W&6EDa!CaK|yTjnClC7{qna6HM zk%xJ-LmWrl*KH80ooOYM{e%DBxn3gBV}T@h5I~UsB=QZM8KNmv^8e^azSlmmn*Sv- zJLvz!Yxw_HyvD=je-fKyo9_!sxWG>-rb-vspa2>=8V@HdWs}A9pU$NUlHr$JKCOfu z5SVh&cHw@E1{u!-D7)cof|pDh$!PaeV}Ei^c22g5g?fEq>LRH<5e-?xj|eqzB^f_z zMlP*Q!Z%tT!`Nfe;)gSo1ont4+zC5A_T<9Q1VBYv&rW&(#&W|Hqxtm}L<|9p)~cwbS^5p#eu%L0Uc{Vy_+`9fZ?0+$--)S;0vq)rW3FfKoNFp>C=}Z6 z+$z&_op$BMarh`i*(bfgah7gi>lyS;QTCb6+UnKuuU#~(qTl5vdhBkB1`aHT-ki4d zfJv6O@rSKv&cVKM>l`B`l+2_|b$4H@7R5(1Ev(mE`AjUHfy(Gvg|<5$T;g^#F?)JM zK?ycf8r&Xcu`LW`iZM{v1tj%ZwXY>fmqc*qe9CFXeQ)@>tw*a9TDLqd^Yr28lGiEYT52bqu!R#BsM{txW7;W z5D}Uca^1C1ZWN6kuSY(6286XQ8YUG{YYzAcU>ID90J8Io_y`Op52@niQuQS6;dRuT z2LH}3!QnJBw7jHWO;dBun%=v=p}m^bwnT8mc~W_Ozt`>a(P1ijML%Y_`}e4=a$c-hImspc2~a`4%Ro{?#h^)nC$BA?E>eK5QwMXYFwQz zluWSNa6d7ZR&qPO57bGjDCe9FR9bKeO1i96QZ12EV*((53+o_yf-%|njr2{iEN`&p z_Z+(HDMHZU-dqHU*((z@%{S4T%24jT{scvecnTlMqX=lSsNT_^xseI^j$`E$!8N<{ zlr)b&_X8QNaGjHFc_*J3zSs4kynnM(KGRt&nYU)XkD+J8T^i8b$wPWd%gms?h44pX z*~UuLe^29{vV0@Er7^9Sa(wic2pXTEtEG0Cc5Sj4dF}=)0fymlrDJBwU7>M&QiWhp zOuif1BGDEb=>QYkshs6*qC_G_SbHoJ%zTE5(4VQNJEx^Wqjr@67 zwKrt67f0L{g=+qHih2U3-s=4|wd_Am&jkN_pDLJ{S{bQ%I-30tk50%A3S$Z+3(k)$ zF27Xl&WCnbLW+n>(0~=FY>3LWvMG$X%krrvMebU(qw79{`TYc_8qni(w4ZFd5T8uv zthAosd;zXHB@A}NDiHiYY}V-Av3jjG>RjpW{(9em_%I!_R!{N-MZzU3;2eUlJRo;bAt7B9)4s{JN&Jf%j3 zctn6EE9j$zdeoAFUQc{Of%cQ{9MbD*$_({fdCT4AX$2aOSH+s^#$PTh^C2 z!#PbbM5IGy5(X91ekzo;^$=vwuSO%7$a#HV(T&;@%7QM;yMCbJ>Lz9d?~@o|+EQO}aw2aoyH42*{Q0 z=r_BdQt>-$+@VMu3cK1gwv3)sOGztU&IPt?fsCHOAAu;CKo)`;YwHeqrpd*Q0&c>U zS<@Gd!m)yZhFgOdQH_e8aT(+9FRBN%vyEQ0KbAY1r4d zks35Rt&c&9q7+$TGg}$A(SVqNoY-38&|kpCpjc|p)R1L9xQrkar)Ik}nJTq5uT025 zOy+f^s`a2`H06|ewd%dFsN`u-=;EKY;wrJAtVuFwTr)=2a+rsQ5H7gRM8#b^fnb&Zv&w%CL} z(w(Yr8AqvuYjaOD{A=P~s}R8?qo5$(vUQ_rvL$f^5TuHCKE?muHCKjS9eboO+;W|j zdVIX48g}V>8;@b|ILYu(Cat&Qrt8G- zmtZMdO+SJxd6FScZ@pz}HJeX>gr&!3S4Q(DrM0~e_T64itpiY=gJiYZ56CIM3*emp z5R4{t=mj=(qP^(XUP|yEi1K8(^765o(OJ!RXL8cQY85|r@t7y<{CYL&T|e=|9N805 zdFWDHItO%Hn@`CCeE|~S|-+e(;ZA(-Qw^~6&Jpv>wOwz z86oBwc)5H={7KK}oq5tG?38&RBL;Q8zA&j~6pV z8#6S0qvY+-l%%RI6~57hLm(^>z*lSfE5LXA8<8?TNQ##J*W}ArAWrenx3-%S76euSz^0S3 zYrQP_DK&~HG3B&t_v*Ez(Q!wgBDyAj7H#jzjUc+-jknQyAj5faJp2F;?c>I?gP5?U zCAdGV_<56TvKrL|cxJv;9RmoljSR#9P~7zd1@&3=fZ+b%A8NZ%1pWL^G^o;lQ3vg)o&|1GkKkh1D)Vo zkOCy(8lT|*%4kL1F6M@iU%qt0{!>O1|KDb`f4|!kb1?nS!c?L>rU)*A>MOtyd_WRG zKt(9<3x?`US&X7BBt)3Zw5AwO$CAyJS^(+uXly8$cvlL~M%cu7zaLPpIpM9owB&Hj zT>FK|@su=}2*;c05ijb}e)XcsA?yid>MEdMKI4WG#kht_WCy>TDoxzlDn+ZtcJv^W zW;cM;pE9KhDQxmaW;DU>cfBEv+ux!z>_agb5O19LxPTTfW^an`Pu1v7hhhAbiSSLJ zms2vUdE0@WQl9=;hAhHyEApN{ePZ-fTxdPu&Z!T`kF1iTq#?N}Tiw$l7w5-Oywu&J zpDw*Q=4yY5qbK0o7!S^+tA>aFnKiET(PQMmfst5(A=`XdPl!St#)0_IJJp9r_`(%X z5XIme;u%HQc4)RR1t%~L84|68|~#|W&)&8&Pam+ zXjme_fqlj#bB8p^Q+N4D|~4r67__wk4I3zOR{i+`j2lJM@T<=29T=>s_Km z^pP$Hi18&4;#XnrQ<{ryzImmEH&m4|+|<7*AX%coI@ezte*WVdbfN#9t6Uuap8gLG zm^Ae-@u<)l4l6xTSvlE2(LY$yvl7)&SahQB=BOHa-&PeZHRp!#PSvK{8i=-|vCt8| z1`zee2e%yrIASvxvUltVSWM^OO#z9og}wj+HW)b^rv{J^xbc?rLi#5n!o{co#ZIsy;+g?sJTOC(c*+ zOwP7>`1j4aHq@JHJ^W1laAiyKWRRqFUi8e_+bUA~o*3RFp>Ln|4-zYeFrdK+6WI;6=uj`S&= zY^v_HUE@V_5GNq2`q4HF0`fK$WQlDZn}h z&ai)kpGRuH^vvMYIYK{lV%;U%rEzel#_D3F!>k0X!PVOIgL!OeuvG)HOp)srHw&=u zqSvUsELm?A8qO-?F0DA>WeNQsuBj#()b!VbPyZOy9RD>^{u3TQf2b}fp#ncA7)yRu zMv(zTl);+!$Y3KTL%4=5=h>Rf?rB{t<53aea*O%=81k}j`cZbnoj04Jh%9^}m`_%= zu0AhvbGCdwZypE&)cI!$apE}-IZyFZVT0pry$T!Lerph~NQBrwOM2ic5HLopS~ zWpnSd@HJqIu!^wqs?udcD^R&g!qf-)YT$QdO7`FiR#>9&msi&!7we{F&Xxmxc9N8< z_Gn47(&s#J#jAEmEUP|oWh8L9qrxt)2tqYSa(|~H0V(8H%l3n3ebETdm$W?lZ`cPM z1DEPy_r>;FO`)@NyH(xf!c5j2bSu;Qv0*ZfL`y7Fo;JOzn-am!CEd@D3hg@Lw5y$? z5L@6DBpOW@FEed=wp)>7GSz82IVV`RDzr%wmJniMZh~97`=ULbBkvHxLwXMXY@%); zn6|sQQ>ZHt{$VTUwuSvvqG7K0=Y8GBU?yW&iv`IG-Qm;447AoWiL2r$?48Thnxc9m zp?MpDUY*c1v#Y}xml7zM+s%)Oo&FR{@J{Z1CCy`kGP?NgPcK#0fQG>}zs0)3DgJ}D zL=Qu9RfhJ%1|QCbmibhk$%wKfu8iNeL9zLFr+2+T$kbF&LyXxFm(k%??UDeY48v3sxf)7?F4r$QdLjn$=(bd1TPBKdx8nB37LNh+C39pTz9G6-Grnr&G$pu-_ng!<*l--o-q4?!N;{+0F2^LcNa6Z;sYUHVV=@;_I zcw|^6n?_OPvUI-rfxti-Iz`0OaL@eTbmS=$85s~1Ru_r3wU?2o_XB08JCRJcS5$Uj za2$yj^q5cm@Z_)3n37M44ELpviF7`~3*TNc`=E3dFoTDv?-RBaxS~XvnZOgxXYt-6 zh&eCV{@~W??g^j|LlnzUp%}i4+DarXig8d27BM=xLi2h=We;NM#wNTvRUn>k}aVey|}aRSKOlV0h>T!A;H^vNx(DoQMyB zkGyqCL+ST#%3gis`?U5qhAjS3yzjq`q5qsdlxS?I5J;g448mhaHdmt#O~K(v@rZ(p zlV~DH!=|EB8h(@BU2R9M1Y>0Ayw!*GoPjw+xkW06m!(9Z75YQEljI;>V$rN&3Snl~ zuJ&zV;cUUT)Z5Gb^W$lz_Y1=TO&n>}sF6Cdjq|e-GBIVsfEPHi33=cK4VBUWweue< z@L(Fb-|W0Tf&oUhR4jpvv|EYudRR~BhX)8)8+3GZ6^QF_+zVYsnBPN=Smhng9-Tf` zXNfkNpSt-^n)z#;*n9nI3DYrgp(%#Y;(hkejrUYSu9x5pPdC|ZZ92^iV9C!mIiA}5 zh7zukd(ps0`_+FN?mYQOskM6-8;84M?RomlV3r7fR~}EL%tlJ?tZ~HC=!`M`k<0Ti zKjT%D?yJA$xDc)9!0k$rNFQbfutEGZEfg`(inNT3Pd`o@U%6lsvmLBaCaST+Pi;FO zzJ@EKW5k8#wyXGH@<41yPGQY32phIEN~7s@+NgN$VA6%VW*goZcu-)@Ups+h8}y-| z8BB?i@?77Kb%d#~!y*E@<4Uq;g};TIDA*GnMwfM1N*kgopq257oeg}-?7($(deGcs z0|CQ4b%1kS?&&P?$_v?I-x{=P@!>}zy`PBfQ#T0o^&~RN_0g&J>orD1ws5ufD{2?k zZSl;Un|%cMk}MTQhzIyJ2b@T?COTsHC~EwRAgmsZo7gaio1Ca?PR9$YS>*+i;wI)2 z2>#iG!43Q~XRVAEVr- zQBCn7>ILg#=kI0H7#cT(6>0_a3QZFxEl2%Ni0ri+saM~SwU0Jh%aam;Ubj#ATC>DOXwHpSm(6goBh*@e_DJl`74c1 zpDr}KaKm!J`I04Twp?mdanyv96j7s{8ELQ?H{&G6A1)--)AzLi)A8pT)uu1@IZ4uz z_qj#&-R~z?xz=0t{s~eMWQI}tZ?r5g*ry6qX7u13s@%}*oTenwC)lRtoJx zj?FL>4@qO3V`6ZCO<|!(+MyJq7<%$_Wl7eu7!&RGICV2{3A2V^lk%zh5KjiwR-fI- z>LlqjMd`A@wKkrpocRRjl<3 zc&$R_VXn@S!;UUOG4}~mhN*+KO%p_}o3ml{x#AeWDSMa)c%{dUK1**r3iu^s6sN>I z$!{u4PMI=`zrFS6znf7eisS8m;wtmdbDy@Xb5C< z)+s7=aswuja9oC&m@<94l?#_&f;TcczCpcfQx!&{2)_I+@!NRtRAGYmMkm|f+D|6i ziCa?=B^$9JV3+0SbY_wTlP)`x-h){deOR3Hi7ke-M6G?yOqzJK|JEp z+!CL#AANlXo%M)#TJYC^&bzXC6Rpg03bx~1nJ>m@=E?=xNKYUyZ+SNH(=iHSV%idQ zIGfq_lSvCVOV#GPOaXdCC|->XDPqvI<()xB9gHae_ER_U+f)zZjtr~w2w*sWBG*@a zFAYAdMHN|!sr0h)d`Djf))b_Q;%xlfbb88fd}}zrNw^TBmu#vNr!=W-c^53T+j)P3 zhy78uLQIZ)=0PoQuZn5LEk#C*7reOrsEc_E{7R9yn#iTqrfl~9GtcR4q9w{WN7k*2 zelqgvMGL7e3=jGE3EcJP#(MQx#1Ss%;wO|6uu=V6)>;;zPTW5ZC2V7q%wz)+ zGrGlTS_S8~|HQ0jABP#%*hUeLoO?}+7nsJ6PT|r=qBWgMdNv$T507x`??xJz4bXTTkUKy^UQc*2{2@{e2ede2@|t;UXLq*eyIehhQdr;wEBN-7&_CPp5e3|^zWRkDBsRucx_g@(OLnl_p`>zrT`Ts=5 z`TxhLs+p^+k+H3rq?@aov)TV(r6nr=2eKX;4JvdyWE#pG{7qqXq*Pr2oW+4d#b;tN zJM!s@K=)Diu#0K@H_d0$eF&jGVu`j!i5^*b#H`6}@0m^StBh}VCvQ)90UiKVNw6i< z8L=+ddeQXNImu4w0;Nh1*x}Mk+5vevf(Kp#cXely4p#CzMtX@&w8+OBN-bB2oG^ey zx;^~~e_LKV!(R2cl!@AWj6`O|Pf!8nB@4cF#_FPLw#~zG;xkjBR=VGPiFa}FLBs8Kq#7_cE3^ikYNNwp zNZO=aL+I3TdKs_>JC+?sZWTM36e1z1aCMk<<)}TF+-jF9-CWxpch)Vn1`_9=6(Bds zvR?Qs-t2p%qcI8seTb-%PHtl1d1v)+^TY&F?1| z^H*poQtwXNF>(k0K)(jnKJt%OyPrMAN$=w{U}o}-Ie20KhV%oz?<;M^2&ebRD|<*a z{~v4b7~|Wse)~37+x>0Zwr$())wZ$P=4#uvZQHhO+q%EK@4YYX{wF)<qrBGxZ}c=$U3JMn^%=oF1XXiS3}|ojM}T+^12>-7?jGUG^AfAAOpC>i*l* zvBY?&Tj@j5l=2M*J37#!pm z?2~FeYx08=Ix8!ur~3=&7Drojlh%Ll zHbY;$&1bh%8-0`KGsj7yU=;FF~P$?5kT;vvw;#|j+*rA)MkQ~hzAx2M3 z0@~8mq8O`Mgcy@^f5wvJ9akt?#C*V4#tMirsoj0k>3x&sk#fFac4RlP9*Qi5#RSR;hj*i4bZ4`YqGxn)78F zGspYqt_HZ5=MD~ibFd+kA-KYM?sVVT0ewcT?K*&lZ!(y5K$TC($b`=R9w%x_@l669 zwjd_Np=Dg$!mAO+(G9+fCuBXQXoACIvM3^y?x5@so-UcWSN=G8n?8t3AGs5KQt_-w z`FM$iSNpJ8saG*f@dHiNOulFLu$fh-UwAOx@4*NQKjikrb~jA%@MB9aJl+}CK8Q~g zs;u&RFuCs795I9=XU)TaH?O(``n?im3rgMTTm-7q`bjYLJESZn{8Isxds;1DSAL%_M+;nDVxH|VqFnY zb9C|d#EI1>dw8Xya|-Oj4eidkd)%8&V}@M;;%ZSlbo`6zM&(Tm-FjD74sRE|^_2|I zS&;jtxIK4VmC)6cLdy4CvSY5J**CiC>6*kCq zKQBJ92XB=hU-htl$kxUe=)Pfpl81X_b$O)~d_pnYqUm;)USCeXd33wwbG`(Q=*>Sx z(Y<1N3hz_O3e+@gMT zj_l^YdQ`t*&_6RFSihyCe!|^8n}&BB?^@pMSiZH1ZI4l@A&V2 zin6~mr+)f>%I|tCK5wvm#SeaRU49l{dsx1!hj$iUKNc@Rf2sSCVQjUL1yP~Mawuep zpy{f#n>!2AE0XD`j2FjOhZ|r;5S$nWkvXa`#xIgY^xc~J(j0FfKGMgG>?84mc9Egn zi&F)5n=j&1 z+cng%oWj`9*hGthRQ%Ciun^v?7zx(*@_JTTqdYzhHA09Yz0wecNV$hqM^7jVTY30gIYvQvodmnf>fsHf$mdmEQe5x7{orXfPd5J8 zY3a+KgjP?5_3o(ehR;5{cYD)fM(nGr*c$5x(Si)5xgh#7Xls#zks0E#K1H?eXPARm z3IjuXU8S7aMk(rbBmXIiWan{bN7g`Qdp(9$;I`QJ>qw02aIeJU3n&%4;SktjkO&OWF zFt|h)EVlgeZB^uZv?~Zz6@v08iYzXiqC9tD^8tDD@>0xQlz2or3V?N-zu*d%QQeU1 z!jt%Akiq?oZy@XUun{xnoh9TrebZGj(iaDP1W-6&jxQs$u`&G$Vg(afrf`n1;Pl@2n%tO!@87i6 z-YBL|6+a^5^5FS)KN+3hBf#t2KkROtm>9nIVJ2S%Kx`Gfr!daqm`-1MCJ)98zO?*C z-%VVI=a6<~BKZS^;o(1D_n2I#T4sYSb=o0cX@DseG0cf?e(I!zxwxGla>)bYSuD1@ zA92{6NFkp1pBppJ)9&4=AC_`?@N_#Lkkn6#-uDS#K74Y}9gUBCEhmD%Q|T?i>zJ?d zN_d!NU5z68i6|w(qwwGb-WFI46wOsnEuq3!cM?I#(cX0o(TZAxcCz1c{L9S?@1YAh z8e_)0kne_9x{WUJ%`xNlJSY{=c2G-7%wDdkZ<00~H0Vs?nhx3=T9zt?)W>EF!^5pj z&fz&(+$ffz-Rr8Xjn@lvZtp}%^2$RTN$h2vnyBI9=%qv{E`NhV{XKK}7+OD#ZH)e! zre<>+^&qs-W9#_3@aSaSAED_v0|H5f*BjEdeS46&VSG|wLZO?fhAVg~@8yj1$9DjC zE!Z8wi2>e4Xh5Paa0y5ev*cyqC&a&?ZlvT3QwokHj)=x8)a^OS|r z25KA*7J^hL{jpJOMws$HFT8sQ6`xS5dlettK&UIeOzD6x_wrho%*0Qubue5jtxoR( zzC}ziDbRX7m0txpL5)#WL(Ul=*IpgWj4dxCqRg!LNjd9UwhSWkY|AYoUc8d~)J!y! zu!K&bb62|G&$3ZS{BfZYiq|o{lURxQ38#E`3)&x0b*zO(^@$3iOZTQu2pcTng|)+l zd5PPLRYu6v8J2S(QEG&~l_)t5A(?(iidr%$+~qT!Cq4zZh$wztjm9 z0XIL@CA|A355Q-e(!#?}U{)|(PMg`wphpr2i?;lov0IqY;)c3Yf_f-Mw(6DCh-VD= z!;+{3=m5b-tgpCh0TwD@=Q#P}anE*48SLEzk9L4K__-Hhr`RlSmmeXYDQuWBshoRe z5!vw#-}JQVy*>o1$a$BfZ21Ei_duMjFGP7FujArD9uQN<{G{CGm=QDT)z!B-OXQp2 zUKoT7i`e*%!W+E`BNEusUW-Gl+M7jp-MTXkObENaXeB*+&cJH{;h?{hWW} z(xLA{4+Ap4W){;@R`~DlLeq}8(xS2~+R+-$u=y`z}eVQg{Tkc?(aT%<7AGyBC*sR0`^xplzF z98PyOkcGQqB{lN4(t;+XE1jj#M1NhiWt-}bGSWGNWfk0qpu8hwh^6%_d;UC~Eke5Z zlg`w=#P~f>77At#TNqW|wliBsS2;6%Mt(z?b-=V~otLW2a&Su5crFKMf$DHvZKAO5 zYD%xIoCyqujBLCX0QQ~zJpeT>${{_0MqEI+CyG|yt5^wLdCgUUWQ396zrZpew7YY)bTFctO0^()2(%BrjnBw=w+RDTtEFC;jL^o zWmt#f+1+VaKw4O0IGxFP?-4%j&#b9KQByL0VR7H?SM4;RP=9o${v&}k6U(BI2NPPm zAH;+`D1^PXxPwv4Ie2{5t}&i`z7MOI7hz(UN9FiOk+R%bk+xhR_KcNsA^(W4-Q7WJ z2RYjMem<Q~_JGl;HY zX*wuz>GLQ)Y@t7|zazY+>P^n+f{YDv(1Rqg1AX*Rf*B{0GjMObv#wChTSam?r$s|iTv=__s<2be6IJgL z%~n#YibwCDsB5R_qmwF)xGx^0)Y8qQw|~wVE=~wHg5)t9&BF=|=sWpmj_A0*(BxVW z>ggFYm;@wn{o$eP%m^0!fA`<8st0$P-m336O#@Aol>(Z|Ki#A$xITzK66n~VWfG2y zA#Pr&878RU=r3$qEOL7~$eW`+vAB+d#NLHAI`2zscQ$-0zzAuNWzc~gfXTSFeXPii zwlO)zj!3+P20~!$i{xzx{Bn`0`+ONrPB!!RYu@BcVIfXh=fqA)gEO|f^#JG=cC7i1296Peu#i_)rC{t+?(E*T4jkFMyZ7$dQ=S@vjE693((1BMAXsM zBdk;$s_34TPycYqmT9+xTmXgm|7?RyL)!ihrHDNdkqK3!FB+K{1vs%k9EbcC9FY9g> zMbANRVNB&Ah>PtWVYAz|l|U__R&PsMx!8wyNTIr39^&2q4gSF7qYMf)#-Mw#&lm4G z;D|3KcpBS}B4z|mIJA6r0iSD6^hL(Xyz}?1L(%f8+ifvtlzG$!V@F!hDxLQ<2`)<& zL$LQtSb@_>X?6(s4k%D^L@!eCt@tIPSu_zW>7K=Fo;ITsVK?ob>K!~q-Im)Z^(|L` zUoT6|XTqwS1~a%Hvtw|Yi?R2LLUBk$*DLO^Wl<~X-X-WOq$@sLaWV}aRh6f(VPz=A z`HrEljYU!}cY}z$4exLZ5!Q|a-iymq+Dj7^;*SI5hw+hh92NYMV<{PO=W4`xi6DlmkMde#@etCZL;0nO}VL{xOBIa!0 zVe)v8vE3_}PVr7v*DK2Lnw-Ll+vIPZDyTODIur|ZyPJ|1u1!COZ#WTL+L?S}CPjJf zo1nZQX(%#ojZWU(@72KJoQ$)GOh;x)%F#0NZx>AP^kp<@PwpfCIVCIB!PJ9KTsGw# z*4(D3GyB2ic?nmLz4>%-Z5z3BL&2XgUWa<4_$i}>a%Yllz=gPYv1-v{#LriJ4ca(v zR1N>xGaL*!Gk6o!E-kT=T!;OFitq7#uiE>2!@$Y{K*W#C__t&tc1|fAWVDVa zQxCFaMS>}TsaK4>P6&Ktan$q8rL0W1l{di6ox`x1vAfNjW}ZadhhbTZqcwQIxuQ~Y zw1hv%LiH~9S!%M0=p9;zCUf?080MfR_BKU{R|w;FdyEG${+3_l6$xw_kd2^|Ktkl~ z%P8@8lt0C}X_s%rkX*Ws%IzNh5PZruzYF!wVB zrJl3lX1FC+@K2<7AtGoN-J%7usc^!pUxk=~-SyExMc5^l<{PkQT;!ArFUipw?o5Fd z;J$tw2P;DhzCDj5(_WDxM9QqUn=u+s*6&0;?h(Rdauu9adyH>06e%cOiDobA!<{6Ni^(qM=`%N`b2w@zdEo9*&VMSzJ1tLhB)Si zcSbCK@X!B}Lg}l8z{BDk($k7W1^NwuD86qy2^(XMBMH}{;*Sp%awO_}v^6dHYp8Q% zze0tLO6H)xA@coE686>>HIbewPfu1`{60= zHkm8tZyRkigSRa0CaXd+TbNPN7@KOG?8!6O(A{>!+ zk?wJh7!WMTh1)JlH0`jv5_9cAoTM^k5SL0f1deN~W{QuEC8+EDt4LfmYA`6GAnuIz)Qgg3AyCY21p^*hmziPs3v`o1N!d`K)mS6ym?i&~PkNrE#!vYK7ZAeD`h zg{!bEFOT!X3``vwDdHhN5AQap8SV%yv)||OCD{{Sna#S9^ zo?gzDmTJa@;SaiImWkv~fos&5<&K@U<0~>>m3B5P(i9&^SHU(+`pd*zgkMjrMB{3h zmOAboiBeT;b`9tB8Y=zmB_ILX)R;_=uB(JRwcRT@g@5)up~tYukZEsceKxF5&*vWk zF*Pxq?IQn-C3wAZuvOug<(2Yu6Ivec7@ci7Pg@&1diObEGtVQk-0BlRPjLLT;@0LE zJ&=^xj3hA*EBa#dDy^`vt?mm`-@cd;d0+R=JEjGWOxEs)YQoLdaxm2z;<Ax<_>-S!z5--mtkqWCC>NhD4oE;v1G!geoa0ouCSsJyfI(1# zKFpw^wzNu7Rmsk>Uz)&HTP_$t!KjhAi6djn$Jb$)4rJmW-ntFs*Gn5+wZ5R%QUUM1 z=l(V4!@tJH>qKEryO`>f6{!Z-bJfp4fy{hhF|~;mK3+O>{LtYQXPPfawrOPm{p|_> zI%UW{s*USS#m?ct4xTAkOC4nX#LXEY%UR?2Oqt-R=fS%;%N`*c{SbNJ3zJQDrOzO` zQ8xK<`!rXH4uiLBOyq6UjC zVloaMo5wK@nV8ohQJ2U+P7~3M7U49HWDy}0#WTr26`ydkMnII!BLxQ#(w(K+J(|uj zj^!K0i;j>az*9|$`%}f|E6ap8rx~WFX6GA{;tHk|BQ|1_^_sBt$uvTyn>`VPF5o;3HH>8~={H@EA0$9{<@?n{=G1Q;XbsFeP~TX9GbQsB{^?S{uDd9>+xf>@F^JH)#EDd2>F+dPj?hv*(h>($lZm)Fkno6S)OsY?s9;LQG;nabok3na1WAxNc0k$XD;TEFugSfqgKaclkt@zMNh7(3( z?0nSI=mSe_21@}jEC^;b$mM^N+~8DOsE^>J2}s5nRc5vljkGrIF0I^cjU zsSWtef%-$M?_FEFdFFr@vfz=odGJ`;Ra@Fy@YJ^t@`x(^OU>k||EzE+{LqI^2~;K! z=QyZt63m?jTeNThhYeOv_|VD$&1y(8}a3jER*7^}F!lY<(22HLW)Jl0F3YiZe9#s=Lx}70dYh{CN*bda9}WDvzE z@JdD;@DKEOLm7{&O3)jl`rg-p)SdQ#M6VLcH?&Ji>|D{myUhERoNgaN9|#f>$>)j@dSAYKslT4LmstI;_YXW5_# zfUai4;1JkVF@WgLhS6UANWV!;@B|)A3NIR+Ck=U{I8h?0GjgRRA?6?*Ixhl<&&;=WOi3-c*1F3o` zZqMe4y4dUNWrk$Yu0r&h$@cmz{hBHHTFtr_A@yp?DG!u`JD3W!FSfAi zLLOzKJ-;e+7IiflGrJ1SjJeJ~H~SqN@=Uk?jEA-UVQ!A!Ylvb+dQuxsJv)v2*yHLC zslKOl-H5sFF)@opBb;H3xo!*7uthV?CcSpu%&=i&(7e%a-4eX^uU<6M4hW3(YZc*+ zMG?yh1z4Mku(_e)yen*T^NoZMG&wtSGw;L@wbZ`RSC-jV*wG_q1LPbqW_Lc6`!$7W znA~vm{S?n!*zIvP?7%u!;3ysDS;LSNY{XioB6VfC7!DQk z!vIkX`NhIPfQFKFEh?Ekwg}HuB5+=CBg1b5&Q9Rrd$H8s8Gp)7sBt&ufMpO=FI1KX zR(n3XV7hL!{!g9O)S4EdNJ{%`Ov6OME=60|St9S+|O)Wc+ z<_Ty<7fr(9YT$p`BI1D|ATxr5BVkEUV+kIR2qQbw($ZU?M4~IZi-Bhk<8S2FtB;IR z0u{Z`MYQ*Wll;R?$MMUV>}Lf0oqwRPIZskIh^z@z){8aU6aqg`3MwUi;qG7!QYcM=vfQ$stIx3im-7-$h;ZjE`KGKfqKzTjxd! zJL?c|N6{jL7Z@zf`P@7uI#+h;vcnT5mB{b9`uE?2So`c9(VudG6Uhp>thTtX!c#h2A< zFsY(Rr${8JY6R-oC@~yxM(KttmV*X{GPz(T*XO2A8K*Q*E0~R#Voml(*OgUR*xjz!M1X_=&J^x;|c*`b$Q zqrCP+^}*8HQLACX4m*L(YFntYGSQ#Cu@+T&n`4k8N;fKsJA7x+-FAgxEmQ@a%>8ch z1w2YSBP5^jgyHN&5V``0c_WrZ<5n1Wl*Xi2rYN$~ge zt2BLrcvDOA#!DTy#h$WF!LoE~=U&Z1)*QZ$ufDW(iP;-pEh}|B1ZtVc!sa}KrPf!W z>IO>`4$2)6nca&<4$#c51iaCJ9-_rq_LrtJlp7yG8YKf4NF}IRG7yyOM`}bXED2<5 z0E6YD$ss){5Mt%Zu?RJAKrDxmnWNL%`)h!03|c}-C-en_4ZFZZUZG)Z&@wb<=pUxt zWrIRby3xa&&$2;*d^q=P`3XS(2IeCpT=7&)elZ}k)qv_IF3G)s(Ws;B=`TR+Slj## zo0uZd9x^Sbkh_Gp$s><%F&x)+up@QnJ`5=0?BTu~9te*Y+7WA&$TN#mQ5=PbPTZ;|X+(+FNLvr<3{?$twz@X$@km{*l-ijD50y{2(Gd`rILDekS)e5OK1aA&NFDP}* zBh>-t9z?ZITZLH(lb5W^F=4O{`|@z1-FKBZ%)gGjBnWY_Q z0C?$l6x)(GOTCk0$cym7HVO-#u^vNn!0mM`<7?A3?vd2C#NBh2J(#6u^oQXK-3w{x z-h4sr2V(h&35nhdYFF)viZhCObF$S=?*;~}>@y!!j?mXiHW$zu2DOE}dnN`251evz zpQ@u-ncrYn4MKHs8nGRSi^~-7Z9Bc3HKpzbOhakGSEH|S^xyl`2)q_7$_g=>Q`<{# z+R!)+FD#Th*!_DO48m;TjaNLw2axrV2oCMe$kon(<~w0$QT`CJJE}}_9}u5AEa!+E zp%^#ZYNVb<)3Bn_B|T$=Je1GVnVvyBvCQ*b*allFYePL#2t~(WM^4+q#zHGvlp2%J zQ-S~*++pODBJtG%6fJ!^3SpSAaVGmt7{Kh8FVNfW;G5sxFZ*9PNF%>#p67z>A3^Kk zHbSX9Bl*Bn-{EBh2Jy^BCMow+3!_=iXQ0dw!N_x8S9*cDpydB>dHVsEwMfzDCH z>pz*{gG<=VQSOFjZ-Vx?49@V}OFk~Jw`y|)Qh7Ow%_zr2Mmhu@qxU3D=#sgPuW}64}gAg(+ux}iX1Y!)h>DG zB6Jf3#(^@BzKx^X)Wm}GIiqy5huc(u zOzF6w>bC>uz&qCyT?O^;yjx|2wkOEOf#mxf){*YWR}+qluhx#2?ct$uvItG75bz5P z$Fm!lKvhi0jHw%JJ_b0yUNRf%CTbe&QgP|oUk-Jhvjqj!KaUQ(JLisc>?t04%O+c{ zraEZqT33~6@I&_=7i3IxPUc`EUvw@KhXfrrMs^jbX?yVGNIifl#)UAdY3ie5t^N^B zGTA78v@q{fHe<^qzW7`Gj5Ud<7x?hl93EqQiulK_1pXtR1ID|@-sx0W*87Os26^U) zGI^$vN*)QTEm`o=ICSF0T5JhRuX7Pnc%o@)Nn*C0MvX#tEke11 zy%PW*7d<)oNC=C=BW*%KXdS|MW{HNui27k33g#3)$;(mE+V0|jf=_`#B&y7WGP4x6 z)Pq-|DMX~=CxhHs(Ac=x1;z}A$R!hOq-0x(Mvz<`WR{_$q1}pOcrd)|I2KxX= zC$Bq9V%{_grcHOYJ@k%%uOHx5x$9QX`EWNQ#Pc+;lx>xIxGf$Ul*gO{-*6a7%C??UME~3t!-1_lFzQ* z6LnlVZa8dR_eH^5(E*uIYj(6A(NUTEh-p-bPCU3BL~-3H%S@?{QW-6dMf0DXB2fbI z-7XuCBMBZ z2=v;pzj}E~&0hM?IP$Xdc#O|9`M9d_$4dzy##dt|B@BXj+Du;et$QV{@QkW`C4SzF zGMC}lTrvzPnPT5;t0 zgm)G3{DqGG%EpQo6R@UE`}F^2{;B}K)TK~alaCu*QLGeet&=@x=)Jm5Ilt_FFgZ(| zEsJ-5>8B3e3w;rsW_(4Oe=>Th@V*5+zSSVrwo!cK7_M$Z)U2R)WI%iFnW6Ya7R(B@ zgF+K*7Y3C|gMZ+?_;&d2bstiEGR3pd>ZoVRKQILEDKD?d>_$7gmyj!qC&w}Ye;_4@dZ zR_qh*v8kiVM|^hl`GrZXz}eT&XNn5Cx0J><)-se{z&0&IAeT6ve%L?2mS6W+4sij@?~K0#GKa~PD|5sIm9gv$n?9&qV6rsCjK;kR7g z>(}=?(!a#+dGW>ScZgzem7b8XMOkrlxK1rs>hh?0g?J9*98jK31)?S zPk5rHeDIx~IE_lRByZPx@i&I159*WFuqHoN`F%U_aOOy2IFQ2T9JpPZ1$ zxa+e9E!gxQc@S_C12M)VnHUu(r6RR}lOI7JeAjYhfqoBiF@;%Xo+b%j_mE?Fj~Fk0 zA*7E*c++I)eu-4SfY`nofqr5Hd5+XfE_TMg_h9GlYwY}iDIdxi$g<8 zgEAN|yeSo$QwzM-fG@yhWmBB49Ze%_zz+#@TjOVd+8v|(rMtn;nE96S=afZ097o)~ zM;??h!=QQ)eaGY`4eo|<%6^;iHTMq+D6A)D0c!L9?_tI-6_2!A4s)(ElX1mkis7_C z69Z%$emANT0dbTNZbJ!g99dIl8CPq;qg6|8XReujV?56t9!=gEXy22uCUin+{LxKY z4oBP=2r))8dZ#U!x+nnV7}-sxa}(2@!==EgYd^~f zU4~bQwu)>Dx2edI^K_L0v@*fEAi7#3gKT`n-XLRf%X6JUOm9-?djtknoS~BTG_Lh8 zQ9^Tp42Dd6__q14g&dfv508g#!1iv6KLp*#2OsPOi<>Yk1cDyO!%&&o;k~*+YU@Mf z=Fh*Yj(k+8J%JKz>1^ zfc%oc(IO{spezppk&v*6gFN@&7~Uq^;OdB5@!#p65un1~?~McHhi1I^75)p|^Jpz? zZsSFaxr5)w=L>w7(8GkI_1F+K!z6R)4?6p-y#t`7vh6DOY&SZv1D5(sB;9nTj~DzV zSc&LtWD~;xBS5gUq)#OzjP0EPjw1#H?~cQbNuFG&i0QCw@x1J?4v*cFTjW`TD(#wy z$NY$AgHNC0=?@9UGK5mt*PAm*{E8QfaxvR1VGM#Bkxi#evh^NpmzR)c+K_SeXmjQ1 zI>XW49bOKt#a3Q6d7c}cP3;|j{1x$cvU1vt3WgQ&lAC-X0N1_sZ#x9K6&}^HRo+$a z%WR)Fgf?C?lG|y%T-1~%lkk!yIHUT(?$N145GCso%adjGV*Y!T&SX!?PEnxyx&-az zp`Ws{I|j5-dQ3aX(##)rmvzwUd=csXNz=X@5X&D^%<*|x@^{=R66_mnaPoLlswlxg zyg@2R5Vfjx$~kVzS-n0klZwMDC2QvDoj1s1U$H&m5KeKIU)prkQ$1 zEob0lols3!=TAT_0Hr7Q5jX0ev(R*>_|uKsP&g`c9rRW2uZ-ARhs-b!nD(O6BG?Hp zrj!OOcKhIGWZtKWUtqYDu|2PuL(l&%o0(XfckuZS2{`{XC-cA0*?*?vlT;@DRaJ)< zK<)DD4GW`3l5FLxBv# z=VvGMms>6WJDgw)qx)d!0tG@YYH!!D7!hn$98S5%&5q! z$XquV3-8H9u_9Z^pz)DS{)w9c;SY&%8B!p32{?PDQjizUc!-|j-fU_qs3q@I;NnRf z_oQg6Xg_)U$jNk@W#KW!sYvt*veKRUs^4OSv)Oi zECGc(qR^fisInjJg1O2!uxc=xWhVRWRa>>07w#o~DS0)S)e^R3^rI2R{QhKKN+2mo_H%*s28 zK#zm$#~A$cuEa#ZRBNaRBZ03FunjT{MLTaD;T3ggDZSHcxfAz_H6jx$s|`ayh?>JShFqXr?OXh`pkC~E`axm-z`%ij1VJ>7-p+Qy zfQDH9{LQf^-?co1m7!QV^&_+!W-9+f!!q{$kBeS{@q~*E?mqJJI*`r7{3+ze2zA=o z<3q?KS7t^Vmx#eGTgp51$6MlZs1;X|d`R7^&7ObpHIE_`t}gNJQ@EBU{Vhvg4Y}jU zj_5$Se$W>i%Cvlv(bkF*BGa7&f-}D#E49 zB__zMlr*A>UAf4Vc1;%bZHJ|Cj8PU)=3j+!yl8msP84qWVI%d#vs8)0@~-oim)z|{ zwP|FL`O=RoW)@KdM4?cLY3mMs_x5a;hhsBu5{& zNX#qUxoMph$m%*BXW=9MY-Q+{W}Xe}AEQCu9>Cjq zdiie(6OlR8u>PS?`~NV7EdRqvckC7z5WhQJ#?rynz+s1LY!Gv;);2+q5ppF<{a7e# zA!fIAN33{@niC5@1$laz=VuWSK7l_K|2k;_BTJ|vA6P9l!^wNB+Tk^4>IoM2J*eBS3Ypb_BzUp^W2Q5JUffMc64whu90MJ!YQuxj2AehJE!jz3K zb{77^Y({Tq{$+Q?l5n2nVqyD9AJYZ6`#meChn2RjlQCzd8fk;Pk9QraA;>IpTFK_( z#0L$y)0E9Z@D>`b<6Dj3b2XubAVvQ4wTl9+h z+;=p<@tpWf-WQ3@7r^F_#$X9loye$OC)h6M8)St78qZp9Hgm7@(Hb>s_4)4-Hs}aP z=(qo@zVv@(>wozdeE%<7|3Oxh29y_$D&~)Gn`wj0y7K}xZwqOnO}cSH2wHk#GK=H_ zZAPFqe0qREJGW%<)+J3tgJc9jIFTb&3WXzNekPvis#v}Ty#fj<>J30-P#Xn7{|8>wdfQrTb-TWuxS`@1+A!(<1erZZHReI+p`qwPS#NQ;-!->vEWv4*A{| zaF@{XCe<@PLC6M9>y|$^PHO`q{-CbhW)y;C z>qwYMt5m-@POH4Y*3BTOn}RhTNiu%YEhAKp{l0;hQYC)eZ7JX))_xyy82XNq=lIZI z6AGR0s@Lq-^2pGBgB;G#35nNlnr;F#y~JBma?4U2qOg5>csI z3XH70^M#ZK-nH5Ewo63mZBYtWW9P^3ctXDm@RXn)zO+PaA`otrqv%ZZQeAa?cuRvk zQG@|jp3L&K61S$p#g!qNldStlc)S6H)}?iBtB;~G;G{H9)N!$SR)ls6EzO-{fbOIk z>d4qy4>pgheJ^5RF2iEO)GaX$hHgDf#ZCiKrc=1o5HuvJc%x#xD;44NJn%HKI+}}k z`}FIp=)wKDQrlF^QcmPWVXvY$eT67!%wM*&Oo(bSO9YjfyMIKK#k+itV)4ub<40hr zt|F}VV*L_b3cHtOHWl*~?SwU0WwaUDAa^qO%dY_#-p$jHq{@^}x4rhkcd3>vuv#9} z(5X_l0u{(j)<$hffAymg;f0`ljrB-5Ks`1g%eh$%y5?n$%aFD7;Wh4S@r>rQRh=Xd z#$Ex>05)R-b4+xBxH^OnlTS=~K(Y+GbwMfu)6K&`^6|TJdeR;GXHxAaTqE@!s!Py8 zsglAEwt?d4`jvXI{g{6|3H8CvYiOkJzUuHO$g@1;>I}#;4DiPqfzSzS5KdIm9et;m zMrQtWC6?CHmpoh>ClF0TEAe>kIo>Q>i;Zs! zniGC#9#zW>iat_S$={44#!bn(P0-{dLZq=o;Wp%>F$N0$sJk*GGDTp6hfJEuU>1N@>Y+ zj%jMMQfX>)mO?{xLy%EaA?IoVf=OK~LIjbR^M*u!h5Pd@%`olmrE_O9N^tJ%#ZRmuV%uQQEkt)exZU?POJ(WRg_qlu_M- z;gv1QS3&h{iP-&}i`m+&uvt;AXh-1;wy_ovtmBI!Q<@FE z>06R~X)X(EOmAgLwM4y?l8A~-q>h#aF8>#6?;PaI)9eY4ZQHhO+qP}nwr$(?%y(?t zw$IEta|Zi+?#9L&aqq?xyZ7DbjINI8`lqrpD?gdlnVHRVi5Jb&jXxEGRqVBlxbuG3 zd0lVoQp-vZO_m#deDyv3CC;MCBkniag;{g%V5ONMKNsgQ(!ir95DTf!>O^Hx0{~vb zS_&zFeVnz!T>o1st5m2lTaiw%UT&$8QnDuvtx6hpHLZ}9-DiHdKGD6&P!>j$=xA}V zXma^vm1D823*#*m8#el$AUc4Q36sdkswWc{zlIC_r5%&p?Ns5+c1M(tXIppOz~ZcqPfprZg{ura#HL&HHu>)KLL zH^ARX$!w(`8_!XJccPp=uYso5OtAVvr}*Keb?rT`=+0%Xr+N~iKtB!OQIgqYfPDL$ zV6|%}V1={Wt6`y3?r1@f<)u+(#xFnF^BzcU`#8ci$k5ZJQ6a4(;Ay3x=u<{)WkZ_d zUA5vv(v0ctH?RdJt;moYMiozqL*X;q8#@SC*EKWM(E9C8`P*quY;23K2DUk)ESEC< z`)1>PuDu0JZN)6LC6&j|KDZ&GWBi<3P*~MdyFqm`HYdeDBOg)aPD@mW)1q6m(2J>t zLQv>8w;xqa44$BMgs^Bdg7t7#r|6O$D^l-SwJVGjuzw1bD5^;Pv)Qz!bsS^vS6Wlj zpWQhz5Mj~SoVg5#>})>8!mrg1Kif)zxQWpQ#mRG%4^({JnpcL`x`kIKhC`Q136bnj zyYu)d%6h=6YL$L7+$)Cp2&Ec#O5Y;E)$++O@!ZCO(kOSFoi#t(RBn%m4elxMUN(IHHbCjyR9C+w`$a6BA{+7hZ{nkh7~FUqX~Pok@2nI*U1YcEZEoPbA9h{w9KYRMG0ii%$U(LXx-qOQ^HCq+MWy-x*KSLV$2OT>ZMOJ+%FAhxySS9}jw$X?Q1cn+ z9w8s}y-!2+C2G2Ei+h(gJWfsN(OWf3+m<%Maf@yc&UwHeqCRLfJ-UD@&?LamU!>DL zq(J+V_D$yuM=vz)Gsz_1%@Ad8IwPzibWlD91rcK;(V$=CP0@sdY`2QX)BTVrcz)d_ zpU9_i#0%<4L2hUWKU^^Ho4%5Vc6&qv`jp+L%xKCWFWaL%%iDPmH0N_*7}g|^AI&9+kjEuM&FXSy9%u$h}@nHN3URH9lGt^A;!fhG&#ds)~rOPLoGD%tzI zXE2N%!xOE}NN|33V8w@{$Yz1yXI<4u*q5wgc)3~=xb!y-5cRkT+eVDT7BCwh$_127 ztxV2tJW2W&j~t@@DR&-3=)B~i4C}`RagMy&1YtU(2wc&Ac+Q0SkO@}QO^)!`J5>!! zd2Mz%?K>>V()w3*$wjqH!<<4PSN-9z9*=ct)KMKesU5NM<;V}V-Byyu)bSAA6xGXL*ciP zrF?_g{U17S09~vZ(5ORUEH5x-yzppB>|<@b(HE|;OlRcuLld1?*(!oe721Z1{;mi% zJ=xN(1cr%UZmbSPJ5Ho~k-3-FyK)Oh3g?d=KFFSnv|X_YNB4Nx?-z7qpxm~PM)MGS zX5v#o6X6l~TtQ6FShBPc*{Ocx?WjB@R7P>`v(9KJCpi;%<4KGp;|aCLdFZqDc_-HH z3dj;!CwOWrwzI#)>+&S#7m3@hu6Zjt=KY`WNc>su?>*m5P_2jI|;!uVmmm!R2t ze{(HRzW8Nb%<%mrn%2v{-vsL~N@1Iy3e9N5#R=!D~F)xY8opMVw9053*M(q>Qv*7T_cv-Rm<0CBC{ zcPVG$DYmT)RVC~)y}q4`74AquCT)__0vDr`K=ONn=l47|!8H;NjjN>rxe1ErMK~wW zUqI%+fiv_qQ+ z>=Fmws~7G2r&yZ~fgpclMilMl`x&VMgwD|Nobkf*Ov616!ESy>Knz^y4cATQ-G~&- z;FztuSl@I>`6d(WQp}&JT-KkKJpRX70W75`=FLAJKIh*S+migh6srF@Xqua7Setu_ z+FAcI;lEaBQ{PcQRYudVq=!ozHhBVxiqdJvbg%Lf21cflDi;@(m-iyBWHsgHnPp>D zg(^J8{A~v!6~`>_RD@`=I_k(g-n9_KCgDfKH=EtMVE)j)Vc>iI)wtmZ3}@1T9+{L3 z7^5=jT8$y?!V8ZGrfTV04jIPKOMhdxHq>+y9aciK@2Wn`2r&jHgz)`q z$IA9Mc0|?;J&wg~AAQ%QCUH(iJByZEHmhTy=-htC%@yOFFO?x4)6G&^7p3RMYaZ3` zWOuP^nBKnco^ctx*wv8ht)q67fFP3kGO8&&FxQyH+sN^ynnjfC0*gYlj>yinV?d30 zPqNQsNv7}ca+k(cQ_9zpnZ(s%5}(b3M7BF@uSecgWyIkccepDA8l8JrovGRc<{fJu2@Tcyd;PO`eMkA)os#`J$6U^PWY_4I+gDv zzP!7~-ci%*HmJGEqb038Cuy5>ng@_O?a> zsMb$^(vjZ*NBZ$hFIM*=pH4ADh4LCe=B6bT+%`NFDMcbbAg}bTE32Yir5xcPTSKk& z4n5LhIT-4z#oj_HxXKKtq!~f^uBj6iP?r$&|1lvVCt6)19)n-ZO;b3SMB>-Ktk@&S zIh#aS;mw$@3oZBEK$aO4`EBm>2o^u*hV(ng04EVV)08V(fGA5kb9J0coVXKzK$y%) zOQtcnp138tf?kd@4xUYLLJ6>+J(lh@L!rZo7G}t7s?-v%h+ra{J{U4qNq0mkn;_b0!ok0kGW_0enMOZ`#WmwOgoXA3&L^y5AE)_02U)#bW zHOOo5_)GHlWvn_5UG=kk-H0Ti|6+?wtx_M~Wh`P^rKJU>?i9mV423%D9{AS;fPi{{7~TNy9)32b~!MrPbuE^4VPjM7~0q%5q`jEal= z=!zx}L$n=+RYVLm)eXHXjx`HCl^eQ8j^W%KYZ3}uHH4garpZ}L6W-P%W)jn!V)ho@M(Le>yf^tk`@Ek0izb2Y3ur!_jw_J$&QKV#21 zfMEi^v(Y|o9;PaHvC zzB;A8?y~!oXZ=yYIRP_yk@@v`#jwC+NAs3%lF?2d&#NF1gW4hNjtl$6@SN?vClA(5 zt)f&A3;v-I<&lnY#zJ{ZGs{xsx^YtLE8;= zMX>`%ka9mnupMyEWXeiyDl$Trg_%DI3A04k8*K`?c#{ zSUb`hiG?v3nSqNRqm?7Vwz#BU!47v@LhcoZk>s5c)3hpym2-ne{R_P`X#RXkiCzgZQsa>x;PzEQPxX!n7oht^uWUF(r}b%u=*@LT4b(Da)cLV zA068V@qrbu4?yxLsx&)NbbYx^vlZL?b9c)~&Yz5@Jy~dUXP#6(S)H@lU+>#f&54k{ zal9>3kdewIW*WNV))1FwUT#(Tr0^@Eef>%cRnl&%)ZHgs=>Z>ErFBcp3*1VpS0%1S%dElDv@&LmzInUZ)PdrhbunWX89)FHi*pesI}S45}lK@$17gjCWo#L%(W59!ZUj~PYhPSy>n@- zU~MhBLZ;M)$wu&f`9&b-N=x!b$iDAOwaH7;QZ-Fq;?z_prYOAtS4nt*QTmc5esJWA z?dD0n2^A4&UnL}`r_xl2A3oVcCz8+y~Ssw-x0_!6ds z@>rMAbdQCm5-ctT1Z#un#CA8{ksm95AR1{L!Oawt+iP*f#B(J{N9yp2jTng{$6s)n zrRG!F-GA&?J^qZ=V9tx@>8&r@5#)k)Y$HC8?Kr`!PhM^_=3l8)9>O=seF-aup*66& z?H4;g$d>mf$q(*VRp8W|MKAb|Ma2p%g7M&?(?~EPnTKy$B?Uc+xuy9Coe+J_wJoIw zUu&&#i5zvs9-%3(xXK^- zOrJ-^v3~Aqtu!!QJw6BJVz=KN?h~XfkeEA_JA$z>pe*}q-7#Bj1XTS-n zUc$m#CRU2u(a&TQe?No_H6!7`$^;psB|=busU`PHjY-zp?b1!!k+mU1Ux|bGz(tCv z+!bWD2WhnhNfRi6Nk9C-8q*wg#=jdU-BdWC`V_=gSA2Leh&{C8G``Tx$U{3i=iuX&}4CW-a~4?Ej}t%MPBjLb|7kzv}+_aq{u-%0}< zR>f?Qg>Pi$X_21|&X(DY>U!Wg>#s>e0aC4%K3(ZI+4+h6hft-u?><{!BfH&$S;=ki z>i*q#Fre{o|M@~-;1|3QqpAUXs6(w@3I2v?Pkm9CpkCOG zQC{pp@LY_??8uFE|Qp;0o zZoJH2(T_>?HXmZ0LC*%Fop#!tlBZrW=!c4nLG|+}Qub==rWM6wBQUtjcTK$FHfzxY zXLd5IYsRKBYmjTL)N3T^=T#6Uux zmU?XM9`xu?F~)`*s}3fngaU`*V;+fz4nVg%}0@OV;?7~gm-aC>pJl{M1p(JUK;8B^!$WB9hB@m@brJSrnsc?+&H9DQUq|-TQq-*v(l$4R=pM3U{k9qlQIK)veWVV$x7mo zim7Cx=G}CY-PB2kf}GeI^}>^>`7TG{AHjme)Y01b1?J7kR@jsudxZTJ;7z!4;$pq+ zL)>a%ao19CDO?OECDT?`o2hZMwMBJmDkgeh+doV|o9mzt>12I88X0zuv86$DD#bz06IwdM7pfiSvV?a$Wj;90qFaxtL)%LSvW`$; zMN%yBYCX4nx%__FWBlTt2FJ-zVi^Gttu{+xi4nI>AFDUpu8u!L_UB{Rxel_MhF-2G zP`MK|GnHa)FWYNujT7m1fLAv*kMVDM*#-0$$6Gtk2~Zjfevq{l>x#B_W|kseBcw*h-+iJ%u!urN2Y!xMdQ5CvA@-ZGWu>S4=6Og1Xi+|y`ZP1+`*P| zg00A-G$5J*{f^05Q43^#35;ZZ(T!ksw2PMDpIyK#u+x>7|#(DO=CgoZb$w(b0RmsgGon-U23FL9bP> zt(BcVz3Byt5?vr8M>oUA+0q^Fy!eQDZA>06ze+d8mJN&a(BNjafDcaY#ZyKZBTPud zM?*spS#b`>xR~1-M@AEDhO2eDJ?{P;DpWp&31l&UU)ZKN8^=JrPc8?Z?<)}bv%$+# z6|rBsxy^RgFZ|6%8pt6=(!Gc)sU-QsZ4Wj>eB(sP5xgJ&svbu4rJ_N`J;_4xKyCe8 zuuNqr%ANk6CRyD`w8vmq;Q{NfU-X1>y%C0?gkh5t%DBo08CYeGFjl;M%$=rp-lMyP zlcv&(I<^_ka!XOhUo~Q|S^~LaRWTzx;&BVqwJHw>#&AcLAg;G9PUo+;EzcKg{m=Xv zi==@qJ@-qP&le~*cHR;Cm!yG(N2;?d|6PmxRsqx2oG!cLm$gkv738V@w)J7c!#67i zEdp}019dgL%J{~tiRq;=e+{Qus`g0hKtU&7_Jji43CX3)3y&DBEte(6?#r)Xqb3@y zFIb2En4A+>Ep&UB^_1=u@4D=XZDo{LTK_=Jm_YWq6OQo{L^W+*PM^M2tvO)P%#zn%#v}%!JX!73bhl8<7>Zq|UQy1#p)y}o0)Sd9H(fU0V03xs{xXek&_+GYkPDR$KBYctXEiZd z3ybpq$*q5 z|HoYu#Jx<-o&NRkU%aQkuDF`m{2LkV9X%ZBN=T3Og28W zVfij9Lx!m%V{Sh=gha7NDuPtNiHjFWNa6`9jsW&>s#guRqU0mBUk`ZUuqCM%L}BdV zOBYe3tP7QF6{FarxF7Whsp0w~da!(lc1zrDn|4dR${(M;eu|q$`XUX;V3*QE@z7bLx9<<6pJzqx-29(&$DSlE0gs$ z?5YI;y#*t*8~Fk@W}Menv&$1RprDWm!>fhdehwY3Qm^D1)K(GCCDTR1n4!Q!M#K32 za68@j`f9dvZW)}`v;yCzRbO|kOX!_ObzF{AHWB=O4=95tt<8?|aI{GTk+20OgOzR( zYmb*6$>nG#RbyB#{iW5ydOB;)xtvvdmgyXVbivb+`E*vd%_?wjC?nsy^-v2NU|fNM z$$B1=hxE378J}8wJ4NMtuQ&13P9OuWv+f2*YblGkj)x>QKsu&QtNK!YEXsldQ$MEd zjeZHuH^yULzwOf=dl2&SC0xx3*`X`-Gv6*42k7aLA3DPR&F6O;`O~yxWTGm>D2KtT->(SzW! z#aD&SSgxAkJhzN@SJ^p;C@zZojn3JM&*tn0J`0*WPPkpQmHA1w$#AirpO^q63VoG( zTU;+~Q+opuAe$jW7W;)j7GoxX$8$)a+F-)hDL0`%>I!Q_0N4M8-GD|%JFE2$3RF0;OXXvd0;vQ zVW|vwcmD*E4(>4B-8I+X2&g)d)FNxX>58k0z;yq_5?p#rN$@Q{&vfq#DZKVVf0>mh zUyhc!yX`^VdlIeU5U+KUSJxL`I-Fs~Xfnu*Ij%TEKB(s$|L(bw70oq+{5OwYoG^Yui^F;qJ6Z`@i}p}?EI8}A8WmQ=BPGwij{h6Pj`{@(^F4b?l z;(wrb54;TLV>i2yr`;h<4h_%_(z#a^#355Yz6Mc$0|}zoJi?-N@!|dRp$p#%mHQY( zCb9wIKID}K9P)8HY9p@cDsRK1M|X~2pFKfA9)4LqJj|b_Sh|rm-qC(PJ0~k_9i%p_ zp4lJ-eaRPBtXTN|@N@FE$1tbLWbxP0faqKW-^Q86YQT=2e*abthq?z&I;$tMo=^_M z*l%4Aq})q6#0slxwh!l+`8?zJJo9-$k<^C^bWeHoatxXEs+(SFIL zyKQEkLy7^pozSw6EI^37075Hm!f|bq4WW=cs?W$aC_vN0Y|`}_YRTrDVcxxE6ujV2 zGQd}qs((l6_(!)eYA%UxE~savGjczusV7xvtJ2c_CQhgfRTgQdYD76}=b^G(FUm7M z)=-*v`DF5)m!E1%Y{|D*s^-T$gD?54Lzw=$1*^_K@Goc>Y*{v2%SQu^l^TP{SS0Qa zTbLJjqiINT&7?YY*&uoAn%P*qOPPti%)TVcfAw%6=!>9tG`eB8^UVherF$?&iNX!r zxx{G_d&$_s89e;R?ehs3Qyo0&K6pCSrTe_G3q5H0ZeYy{e8hfrFyMfQmf&$)_Pi{! z!6~jP!;bIFTTi-Dx;N*4pZ6`kPQAC!{D)qLFA&5DWH+zEo0_kEd~#0+txpQAP70e* z1FK;y3lsMxmwkssDWz{u(+rmgoR&cM=WuHua6SqpTl4gj;Xi#ZpM@XwHAmBNZU>p; z11ZhFLLYv}z`tr?d^;2SaWUq-H;LKWI$Z+{&_(Y5qn(Y~kP*!?BoGh)?cae1?*CKp zpk(Y~Y;W#n?&A8tNwBC_+i_SCLgL4blz(%t zwI|iVypR1#;@76PF8i+DiIDd*%Db2>Z~P7Y`_^qy;#kRn4EKMN`^`(HjP9hVM?8i~ zrNrQNtgmh}DE#ha1p|g3%e}#WWJ~4n*RPR9JL-Kxig%yNxv=1SNIr*pfwgP!&z=sW zA_oc-){oqIEH1sI;4yEQ@0z!rASzoT}+GxkyCKGd4T-P>;saqOz~Pq^6}wbgH+oWn?|;21s;zdaHGWGkpuOFc^S4e;V#98TJD&J>=||`?@70AUMf!Gp-UQLjzo} z(qrx+gV@@|N~)zVRi+j-$LvMctX^}@wU^l~?cvVr5|f=d#+mXSCIjRb-BY+lKo6J{ zT?CA)ju7rarlek2d>)FK&FukFeAn~Xo7fIX(~FjQq?Se!x^h+XQ)eW_9TWcR%-Gs?RDa>0CH2x9%lv0TNT zU{r&NIzfDtj9xHMSwq0NSWLT$j37Qplv=cFgdY~Sm_MS5tN^G7iLzMvsrA35rxzoaY+d?!7#=FI)d zkbMJRXBj-Pq%LcqK42sMsmVqNpdV9h*Nd1n07Ue>5XKX1%OC->w`){J2f z-uu3ToOZgz#ZR^Y)!=D22#ocPWIo*3ygj(Al&G(`WD-MpG_sX~RgSy$Hg6o4Z7@aJMH??Qo#QE`k*N%~@ifKpv4BgE#=`@P>eUt20l{)lW z8mJHHQ!BV&prxgyAb@N;-iQ}^%EI}r3y4-Yh-G?%Bs1Tmsm|(dnvU{C9gohbMC#{_ z!d`<;{UhvO7dIVCg-;51`rh)L0|$P>v<5=_iMO-gZ}hp-1^}wT(2pTah~|3-^$(!8 zx&Y+`kjaNSte?NmAyt~(Il_>~x4y2Sp2RMqo=eHN1F>571jn9M4@0(gsA8Z8MnUxi z@xD(y3N4si;d1mDQY;-Y?r+3z^?RZvOj!yQyo5yPfNOuZv+p1*KOp{y@I0)Z#4la0 zM}Cz|7eI-%TV!m35CVWJia_oVt_NFV2}>Ar$1!=-Gw)Au6=C$>@X121ch=@X7^~!K$~x z^kq+)qdkM?Di`Gvs#ytP55v65%O+;^eFtN7f4K%jUbseY11f&BXHog;F-_FD? z{=-#oClO@u1p@-IhW&RNo$`NUqx;{y5H+^5Gch)`{m*~IBr+?42qT3b5baL|NAowA z4n@$@RnLl}f<#l0y#e;CAboqyJc&O!U;}^zr@bUiL&@ZrUsB%9_h*kTd=U?kJET{Y|D#i*fDkL;#&H6rdRefF)jCziLK}A*P$2UA_#*V z-9KDyjH$ShRlzn&Lxo}FlyDru-08GC`QJjf_*htFq2-so{73TMZ6p2s@;|GK0{(ZL z75r~-R@CYrKAJmN{+AwWTCjd8J)09B+ta0XOY0pDdz$tBo*O;>8xFlY9)uYh zS3kQGW)#_C8i7f^3t#h|^MB@le*6#q%=dl1Va_8hnG9^m{#=&_zARDoYskq7q9ksZ ze|QppWd)F|D4Ks{Ck7}CJ}xtwf21c?Ea3`Ned<*FJT5!>sfjdBz3M)FD`tPo_61VD z1~RS?nteECe@{r}UIm7K{+Riwx_v22&BsW8lMw`FT+wImXI$Z(%CWT0rpz)ton>s1 zx+c#WWSeKl_TRoJqiUR5v(U0AV#=_Z6yB< z^Sfdjh{KGYFkv)g7?ln4s-D#ZA~ZNZqxEmg&z!e@ML95l_(;+WwbJKJxt zKkcUMX{B#v`*S{T%i;MeZ2h&<)7{=qo6trZaO!wadbg2ds$){cZC6$jU3@0DqMI7s zR!km8uR~Wl(-&Vol0(v0-Cu8MSF*^StGf-5!^FI`zq`J)GR`sed~@q`Z@785+Qz!R zeXzgLJ|J|^C%lGYraqdp-RQ7)f9-#I9BLxi$gUXUw5FzS!1bY-V_RWiHx)CT!{3Iw zr9+U6M9E2(7WR}5cu+@uXIE}PaYfTdmlumqmt${Fg`aBB>I|RS%Za-j$+8l8m>u=J zsV1=Zl*5#wfNa~uphrhP=vcIelQi~mzG=dUy^1D|O6w34QEVS?bJLOBczz2u>*FTC zmm*)85-!zVA(_(=i)HULi!62fsH&&E6jPcicg!fw5IsacF~5-CfxG3bzZlw9H}Z9VfZjO{Zr<|0 zBvg>#VQ)U#+Dd53km6;ML&V)4GPoTc#ia%+6)6S%h|&W2TWFzkYsE-qhLD+c)+S+LkG6X_ti0eGQ*mG{8l-G+#3-*d@aNC3)Zh%F6jEG)3=8_oQ-T z)vsKHyu=_vpIrzx*spdH>>p`!YT*t!QJlHfpih>Lrj*Um8dX@G; zb09MTYAE6PH6MPGZ{<#b6AKlYW&9`6ra;A}a0EGd1(+CdxgQ3R8P6o3lR)vFFjo;@ zj{Kyi9hd!L^Fp9P$MUL9Pu|i4;GDBsP*yyqM$8%!S~H@&Pnxj^OA<)&%9sn zl!pq#uMiktzhqAZ9_r05Jh%F44$76tOJAHb%l-g?b3Hc3vb`4BwrmLgbUs#h1BFuW?F@j_qgIWxdsX)-<*FLRDe)}T7yD#c2Jx^EAug$ z@osFHi;6Ha=SCf&lN>%*?Y0lhAz9z!Zn9?a zagg<1DuX3Uant_FM1xwCsNjhE;FKGI6Mwd8TL@uZAq;0U<2` zv8T0`P)l>3JHO6Sxsw(@aZZI`?qarIZX}qrkPd%e>6hzD?PW&5rDKU4xxa%UJXF?W zq$CZhHZE;N+hxyDG3BCGyO0XH5od{py3Zadp+GlY$)|;`F%YPFboc9*65|{K`fW*{ z&<#<=(&R@tXn2JChawMT9lKhmljv7a!E$}m5Q1z7s?GTJi(J}B?{i7LQB`^K5dI{{KbfgP@ z`63b>Y(@cG8XjAwGL?oim9-kLpVdjTS|ScNPT>8~v~}1M@}tl{(T%n!K!eWeekv&oU7Dp!PeIujVoG5sZ1^ zj{sW(yT__%n~9`R_@BDk#;4~<^lzv@wPMF7eS-nrqeN)S{1Z9*QWj%}LiLd{P3?&d zehO{y=}hWLnj(Fij<7#R`4<-Yz3)WQtm<;v78Muzdrrsanju_J<6!nolB_9QnfmP| zV)|Ut^v1%-IN;dUHv@e9IT&p2$RW+=FIF(YAcoL|%19n~1;Uvgs_;wB9SI#T*+ zvu|5*Y%uX0&hb{Xbyxr3OtUEvU#nW$-!no}U9XuKdZ#uz1?s;k5jb(2@nRJ4?9c{T zPLWUJB=8#*Gz1#0tr4TyCfkhUtz@hEZB?s!1Kq32aT%Xy%#`mo5<`m!y=uz4#L^bX}9DxN~*l?ZAy$2h(lc~nx zY_AmbP=WnN{LX&DGV^!J#gU)~i1#iRSFGjLM(^2LVxUm}Ql|Y;ZOZe_O~ZFt67wq` z6JMx4rrdutB3Z;`elSr5Ga0TuI@a^Y)2L>GA?9Z;!o*_tP|q`xj&vPvYs|4mj@qF_ z6jMw(WT*&r!yjmv$Q0u|{Oiwspn3TBi~At<(cg656XbyN%rEjWa;9)={0s3} z)Z#Cb`~>Pd6rW?H8RI@fpCyDs60On?UN;ulg|tBg_Xom1pm;lv$? zFx-<9I+knq#nW^pstsglJRxjP@m?Y9K0ci3zdEnWF)?&<$PjY!1H>h-h*R0nU!gw8 z7Fl8mBxb<#ttpc4>5?-}naC1_NKk*WY5HEFc}%v$)Z_%5A3BWnW4I4_UXy-O=<3$K zz5g_2R83S{h!>S%HKwN{s!Fc`%7p9%RzVd1*5XfM09D8YZ-}tfh>^nDsh7WE@zfHK zGeZ0YVYplq&?gU5Pe;mP-JgB^$y6&iV^fA-tAX%p)L_ z`9wv35{h<;YlV3r1w9bW;uqy`1aPA~Q1E=grx*gZozV^=YyxhOa3U;M1kT}+Su(Zi zmP4{sP6j{LWsCH7UV1IzV{^WWBw2JLj?D2Jylh-3**bKb-I=qt0nwVnzwBBCzHf<6 zzk#|K}n^n0audViXXkB_|7#{jB}eWv$KYaN5%-hqE1|HY^^>jlH+I3qf(tF-g@V8^vjE`z>E)B^ z8~=n+^h8{0aK!L9Q%>C1zFC@YEV57kD}6DHU^57wJ>ldJ}Vo|>*ua*I`y^E~#?EL;3qmh;hi&ZVm#oo}pE z`9MhkbLJofZ@@s5v?I`1VPNeei&;VWXqht(G6=J~wd?p$*qV@G@6JoQsU)FHDqzd@ zMnU$>V8|Mp()@?6Y~QZxhj6f;g{{qvcBzH<->8)g@A<_=NfK+|BlYymK^^fSh+&@| znR9GsaBDp1rVG#&IwvzO1pdllY;cq8Nx4d;oP#K)V@R#7(yS>74!Bzzcf?c|vA?FI z=UFX|M$TpoMb53qQdk&`jIO7vCLrWUHAkz#cP|u^y(JWzQkDy@pagkj(Cm-eV2A`F zh7Bk%?u6gS8zF?LhThb~0O?r@7nvk)u0MvV;ZzMp!Uk5I@FAxW9EryHe;d`+F`(MX z&XLJxF56wPHg9zvGJagqtQzE-eQxNuxTptH0mHjn8i%K!6O-Gg<$2-pf19Hi1-Py z_YXB_hW!-WZ1-Lsq|C*6`!M}eZQLj*Aa3(Wsi4wQ3cQ@GKz8acyN8wJ0#R1188f{z ziLHG7t(Q>=G)r6^tGCR4n%ZNXffixtAe{HUytb^NLu+5^Va+>MHjoFyYYjqn9<`?6aB$^_nYieMzgdO~gr;d6YX&&LYh%wR3Ud0PG?M){OFyx)!4$zBkX62 zU;z2y2Fd;5jVF&%_(9Zfdcs}u<9oi{P+#y*h0zD`UCP4%NSkKOQP9sXNaVoN2SI0t zK#ZrNs7NtBx?^PI#2Bx*&@b`P6OwP5V`yYWm-0fCr?x0dJTHtu)JMEPLB?b7`Ac!& zz>AWvP(g#^QN~y=@gYHcs|f>0gE3nW1ItN!f@Dx&aa;{7vcd{#A6Fp`xG|(h#)z|c zV^^^yxi!XI8zo-x^|K|562i2vUMvl^x3@NgHXqzhpI(S<|Gm9|1ba}whSr&lm4!n) zUe$eiUyv4#+ba%tb=>{YqyxNFIMwx8d>0})IoVWUKYU)C9Y0-29iHB8TwkmN89=bH z_OqR#CZ+QLOhB{0-M#hg)m?(aqsQy-99-W%WfTbC)XwJEz|)Cx+|7G(=yC=}PfJJ5 zR!)}LYilyE391dAs@ij~Ez34p<`CmO#gcPu|7oL47Y!|DxriE$K&MsKnvY*a$h+1) zX5N#eh*Q9cjKXU)wxYn|l4HL6~r3RT`h`EHP*nyTxCCbX8wMC``iSz(q}+e7kSlT;-fLu6cvcJ zxMGHfa*bSBv0wrF-9v2{*?|<D zcMfMfE$zN&-{}V``uSu(Dx)G_A1U;0y%;NVOj4523}@Kj;jN=FRO9>UU=l zrRO6KJxPWsh#mC3%6%H!I*XY+-W@d5Hm>Dv-5yqp^O=975M0nwdmats`m{4Qx#VW)|NobmTZ-qaE5DUmX zNrVm98DMxxj}#(&6X)sJz>d;hxRBgCKQdS#)tZ52!ukuIgeZ>*qeEDLoOsx3HIP$48yd-FEVJ@@vKkWc^3S0(yJSeZUr6g`;+Gae5U{uyB4Bi$M@MucgU0yickB<+V zlyIkbGAx=C;xR`WQ3iEa`9mE5UJVWXEKUrzlf6qSM8E^`3rR$Ym84TgI1kdgdW{8&YfEXB!ou8Y8LFocK1m3bjf!To+kHVr6HXJ}oI>iR zNk^D~LZ%jTrX#hk1UYR?@@l->sD7bPL-|PIlyA)ujyn9z_e)!`KRWXTSXACVfokR& zP$3nqu4UJ*GXXjrw`E$suEso2bb6D@wLp(~4e|9B8iq5=#=R7(eujg*e6(Io*H5Uo zoc(b>T`*>DeA6+u%+tem4MKNY(G?6B{oO@(T1Wm(GZxy@awF0)YIdjsqBCVZozQWtf%S0<%hBj2i}uD0mj*iugT z+qsIwHpFG8xN3sHZRmZ+p|Ke5YFs%mC0VvBjN@u@zfy4=#YiQg`nHlykGj-2;5W9atiNn=XH4qi0mNTahGZqRB9t4N=oKyd2A!`Zj>r|=%HGd@rc4x`tAww!u~ z=}(5cHOU*I2&Fdhj0f7n{Ky(FJ|C@E7Y-EVCW74n(SXm3Q)Ug4A1fXeK#DNl}ANMmn-6 zW0PYYmh$_1BYjPR8Xg;W_>`gy<`o&~`6=@mI!qh4kmB?YEO1qPloG&k5lGKEU??Bf zhCNNppKKP}LI=Oa_TtP07G4taB_MGwYif%}auNoUF-ka6pQ05Ct5r}$dKu_lA(w%Hx zwmx7LN!hF)irB@O_2;;-4 zoTx3TvIb*#H14Pzsj>!ZG}52hMM|2!7_wNh0t*ijZlAhhyHx@Fv3ao&jVUNgvV+sE98~7= z=7rkI7*3YT*tqNF8dJ2EAEkSaD>8*S#H$?q{4tVMIV0d2_TuU-r8OzXLrWiq($xlq zme{6a2fVv&jtChN+Xknn19eh?oOmD=!?FQH}n&f4RQy? zKf+rWK{ki=$Mx3KFtzNqU_Kdk??7TskJW|PX3)fH2Z=l_wY3G_>OjD!O)i`yH zmffSPM=q{FyZXAFLTv{CS3_CWFyI>@?qNE@3Zp{x&_oY3CD9%JNVhzuW!W9^$GsTf z)i4u;w)C2qhG!0;a+)usQ96Ng8XrxuF^5aEhX-C(KH}gU}3c3Kw1#gHedpo9II%dYit3sTbvJ2N)o<3+l``tvV&^l ziPKb?YWr2su^Xg5*C^S@Ey<(!(p|0ACZmrD?|O^v08m1dPe3ps z9wmYzU5bZ443$tHCElubr4IX%5+fEZ+;8BU@U+o@0WmVplbszu^PKU_arV5e-P!#C zoIdbC!-^y$W2i8aA2UMkNmm_Zn>SNjR1L=j2A-V58mImh9>WPzNIEpSR=I@f(42y% zc99b`6mvh=lEdc#t0F2vuYK=cdDMhCsl;ZvDYYNUN4*wiJ9Eie>#$2ZGFMaS5 zl{=YJRJ?&6g0g@#v=16dH6l|P>k4{9b`>6atbn6frYt}jEwXlp!d+&mX0ol_{Y)WM zJmVb5;oP$(2+QbbaM66&Vy}aHA^`oQKL3z>FhY7k8-17&!rg9F0M7{xJb9d8bk567 zDYW?lECKWsa#%rIZFlEkD=Z}a6NeHSveZY|AyE<~JE?(Ka)Q}e)Z;wRa$-P=LGWk( z!Qpk+B zktO7gE2vLml}q3N&6eC_lSE_10FBZU(8tj68X_aeFZqfjuK36|5Hl_h6RXj@Z?ZP6Gf2=_a8odk)0kQfQk z3Zaj9!Xv1*6oNA@L&)Egf`2!6(F~6DumA!8Q237-eN6v{PX1p!x<}p08C4B+H)-3= z_NkqO-yO1b-5zrLv6=@enE%)i34*YDlLh8Yb}-({Y;amz^0QUnr|%1?B}BENwMEg| zJPNIait5jE+OIS1n&R4G%XfiQM{3+jrSI3Yaia9B2$8$TJAbyMF@j?XLSP>LJ9 zE>R(>GpWGKvvxMt1xpk&O|IDkP*h#xJ62Q^jjr*73)-IkgJSmS(o}WN;9(YxuE_%} z+L__AX7Vig`PMTRJdS|_VF0_G@Wl*9&xjpe<2xMuFI`kyku#;_o)X21k(DZ29cJuq zoz?2?0ijHR@hSsLRZIS6t0}c|6k(_4dXYw}Ef((vEfnPzYG=s`i?tYQHm_wtamd7v z0!rmZV+-%r!di!so8DGzt}I?|%{RL*O6EdSQl6x&Z47iTnROb*b)EwsTRFCi~?uAeDygaELqe*i3KJ5g)k1DO`D9aPJ5Qh^d^K5 z^P^_3&fOYLPq_{2vJfb&fE@MhDwL*zQ}uzv_FABl3jJnH*a}cQoVg)d!#Af*lC&PKkx$xOGDSt=BDAHa3G2yhlHtrSzA-_{@b>GKAHQs5GFwGv?n_6y`jyRuaBNpRu-B`cp z_2YC=mjun~VP~)BXP{N!+wz56`J}9{)-_YhpCwv@I4j|}7)#jRu?R6eE05PQ`*+s$ z$BnjRog%ATZ5&PMC_yKLAr-idxf@;~UURie90FW#ec zu&^0u>i2qPTv8!GUr*x6I>?H##Yt;QZ0>Mm9h0brDjT4beqjhJ73XqYlZDbaaG?R-pwOr_s!LoXH0L%& zSAF@h6P?kc-j*^+b|&am7cNO!6X(8;(R^Oy3(hD>cyBAPlU^|WkVyO~$s@Hu2Hujcp>ur=)*IScgd%gV;C zbJCItALgZvU(7L$TQ^VeU81VwZxMAY-`>GH*3WtNj*O%BYQPf$N0FVU@&@2Eq`o<) zcd|6;*iM1lz^evZKA9-G=Ufes`{T_k4?I(-b-{KH{ZOMUa3|Cif%b93vKdveVK+C3 zk0gFRPWUkGKF8gC#&p-Q?Nxi9OWi}>D9Us9yg5$(AUqgx=2?e7L6(c%^H)aKFUp;7 zG%DH*xt_3&aBH3`=nX2j=7L>ZLM>KaL=&?>5{(ee01XjM0gVyO0WVFzCbGr&lV^uX zaHS5?4BuZ{Y9-!_0)*?(UN>gGjBq;x!hvqklOCuO*MJ51kf~o2mg35szS*Z4HdO*0 z$;5)&FCOR?T&Fz}6kg?=+k@90y-9=_UUx7ETgZAF!!+yp3dJO9bR1%(7`tGt6x)bc z`D`TJHv9=DCIV41W@IbwnV{1w^5M16g&wUCUIDK-r#P@d=zKx}uTM<8h;Z5)A9h~I zIbAlMt{v0y=&jwLMyD9t3U{6=conin(VRO!B)An>Q{7xgJU@KiwSbhwFaCR-6g$6M>_RtqS6n%RNM@8dX8s0x zyf#wvt>e(61@80z*Mx!U(3;_(po#+9eefKZ8Gw;%c8m|Ph>$6^LK;P!y(5!hi(LLt zcmWvmgahCMnZO4%it%q01=iZwGVtkS%B7tym3%l`{QHzlJQ5=D)obLut^UYOhdsVH zbRI--vs`w0umaH$s3wWvcnIRnA^09qU{DghT23(S--eERFMf^$7$)5B=B1%cAy4#vjsUwi+|tcbo9y|M@nI&jPH%77}(rSIPo2YopW*B6hnWK6h|Nr zvF!TIUC|I(qCv9}dgupEO&Euq-IC!s4gpo|;U@fp1Nn7RfF`73h6IkD6pdsoaUiku z;<4VOVu}Qgq7;t+vzwD*t^!BXibp$_oowdcaVs7W_uQMrfeSM#EDqW#eEmr2{oei} zD9!(nv4Wg+@!0le{Phmvpdb&b_~%gxfs}{C$;ApX3^BfNS$fG5#J$G#M#yEi#ssK! zApYNqP{$Opmjv+}UcP)GeF!Sc_u$uM2MvPmJRu(M$-3#i{LEV^u_I{~uZPRk&@5g; zBil*Da zSN($U!Wi~^)ErTZJfGR^Yz*}l${%zyv5RL9auz}FhCpVA-i%E|snb_L3DgZ5= z(~i6+D-~rWQ>^Um+E&F=FEF>^NCZ!T{I@{yuqOW5g{q8KY3Eb_9?~S?r?PJ|`k=9O zB;hmt_;p0H&iwdy3lbc*t;HB90DyJ;|0{JY|C{wHIU6|t*I=$CMN4UkA7yN=)nc<$ zfetDX0;0V60LgZjLbYI0Iz<2s2hZJpyR-ph2_z{QQ}2g|Z#?=u8r~P+Px8@*%vQ2) zv&VfwRulQz^+(R{ZE2tH?>i&_b$l8Dpp`_pP%7+|wfl4^4tDPFfdvj5gm?y2Bkq=iHYsbwX$%AI%{k5EyrftH75rbuPa zoZ)M)LTkC23&WR8`}NE2;G1)srRRorYQtGY$wg@e^Q#b0geNlynx{_881v)gsO`ZA zWiJuK25Sde;KO030j6$jf0;9(c1?WY-y~8ee*W<-(&TQtt@`I2%aU^LI*SG2x&77} zg(rV5u&lN0KsV!d5LH2kJ1=*#`Uk+Vyfwg$fe3Dw9psYH3yFE;BC_*)k;pi5m&B%D zYTb3_m84ZijkioX8J3&@E8;HnY{AZc!6eyzNdry$mej?J`LrvW_3V2!suMOLx-ucA z#$1c>;`;b%(MkKPTE5%|3*F_=My z&ig`}?B1gfoCH4Lgd=i=gbB|OOj7%+)0rl{pQhQzN{I(K!_CqWL#{Zex?gn=^ieoR z>u*6;Glt!mIi!YAjOP{g@k|Xsh}C{9?SYR1wAeWjn?~aq2WuRzNhWI`jnV40_Ip0= z=#IGirX-$a23TUN(NXhg$V$CK#?A2h5k@o*#f=iwYj^^-?8{QKhs;&Ak74sz8%b|< zMzc|S2kY@y%=w2;Np;=9wqlwCg!`KPx9?x-7!^cz$02LTUQW` zQEyuU@>LsD6HrC} z=RkFGv3CA1H5mVbt;>JguT`>=Ll!{c6>8gY)xb-QM7xjK3~VIYCl*=U zEHmKlPrR{i+&OWRkQg>+@qQJ`!b?qf%bPtPQ;FH; zhLJ@oM#y(K$A8LaEQVO`R&7#kAjd8k4?dIU5!EDaExwyp`I=t#(sw1zw|kUGkr&OM}=U6`L%9oXvYh#6kWh@UX=} zXXji3drF=0A+W$x!xMYS-QtMub^}9bcQlv@^cYk0OUp#uOMpT`zd*US9#*R>Y%r=K z;^TLIu-@?jT9<=%nyiL44GW4ZXHekK--)qYtk zhQtq9ij@+pZX;*L>)YZk3~BQE6RGynuR^l`a*R4O zKj43h07Z#X8vp?S=>NyXm;Z4mtpCTm|9j$ryY`9;-E^A)O1 z89xmX+Gn-J?-mw6;+Z|kC%46K_15p6=)VG)e#xhK#UExCe?>C=Qcm}ZKO$Iu>1O=I zpYp(d)KGq^6h7@fD_DMsXRH>#VPKP3Xl95kChIe%1SU|KDw9QLFc*bkY9kjVJy-TG zA=dQATLyp1m@1JgKPlMlje@g`y_)Q;6JYBmHV+}_BkoNUY)?uMd$m7JnEXVN>yE38 zn|UVHo}esh8QWeoiLE?)0{J2 z#C&T8dov0Ebajfa0188?=s(?Pq_=r^1h4D~sdK~(YAAuc6hvcgddBgt?E7}3Aw zq87Mpx#W}lhNf13ywhvbv5~2XIkz#Xtc~1eiuZ>JV$F-nN+wq82>6xJYFJhSFLPAc zcA#w5ToO*o?E2cG1C#-)AyHNGnCTsDJIOEf;-AmSG9GmnXAeI5QS(Pd=ZT`LNt05% zEmW(aja1xGJ=vbfZ6x>D+i;n1($MQL$??oS)mqx^y1J!Q33FDL$hrZwQ(R8H_Dx6Y zz)$@P5k*(^JI8g##VTla2^;LXtZI`{6IYL8QB2n6wDRgM*vNs}`zzU0)0hoGr!65_5VO{%)I#|X^5uOP>l8YwJm*?~6xQ$60abnF zk?$`%vk0HLdTofIG4~eJMf>}T^DZgzMt2*g>+Hs5wc(ZN<_nj|YQ9b%fa(Brc_Y+9 z1=>;JJW7jq!i2OjP4>Ai<&wEqd0WKz)=|Wfs^6-liyO_nG8OYKq)G%1e5uM44~zj2 zUkV2#`~%D@)Sv5|3uy*Pmlk@IeWo-chWHZ{rL!hnbZ-|?Lpj@?71B4Nt)9rXtBZR- z|AphCO-O33)kP{kU8l5Hf>}~Oj>V0IHjya;S@~IiP zVsh<^O6#$e=k}?=y!LM#+=vida4EZu{g-llYjX2Eg^oOJ3=PAulev;uZKH8Rk1s$4 znydA%g=Q4cL_weBnyfrGm1YhCkKS*_*fY@}=!8?nl=$&B zccSBIUTCC~MUk}k+|qMuyE}9Yg)w$=-O`Onj_o_mTzm#4v+|RP-mRLVjvC$GKPmOy z6s{ZmT+9nDgA#JCH+Z|;>seZW+u~$%e!JHX`9UN@R3X>RBk!6n1MV^AW1rW9Rh}l$k6Swv*|{ zIK>9#rhuG-`!Qrb>3HlHkQTlPz7xgd7nDi98GM$Dn9~nr8XWY{OV6rFqo5-~&-D`M z=Cj3^nIishy1%U!+>lXB7%#7z9s?6S>N%~sc-@9m%2w7*hnUn&+sCxsE5~>OOp-%j zcFZ2!MnW%--jN&ni)A3T^mi;5?dJuL`vpN^aQLP~L0{6lq;jxDKl?dV@NU&?57NCW zBvR?H>D^)AGL4iL_qs`M3-B_%F<}T^Qr>`)`r304ytengNn#(a?n%43>8sOHk30bb zZs|Otam2lMU~MO=1_%BV;2-e=VKTi*aTwld6ApZl(;D*MyG7*HAWUXWnT<<2LzjBM z6fMfa+n;{4I54uodnY1=yoD8HcSo+SqX)E#2QYF)flZ?(-Hy61wOZORBYWv{4NptX zyQB7=-j-01xN=-O$Th~3O=ggY8_nDySWMORL2$~KDGXbAk}_r|P{qUJI}4GEn?=pS zH7z@ZY7U1TT~P+#ba1 zPCrD}UpP?nB1E;EG4M!Fx;e*`H^7J+KG-c-*exLb2`b_R{^5=l=jUNs=I*w;+qb8` z=6n7~G+LmQQ~SZ=;UYV38Ta?Ocj^71_vzL4HAkU}baZBInWr1Ki3_g#?CSn#Un}yJ|7mZVdpwQv*h9wq zJ=*1I%(_&t0Wi~yDZ3XsC>V{kP*`eE{5}M za=SO$Z-)5kl)~MP2x`zJy-E+4RMO#Z1Uo|>ULo$l7H3+9MAe30up9gcv~2Kl#9QI= zgjSw_+SAhU-VWwfNyp5JGXybaX~pU{T$_o%Y8%3$UOvZNSE~?(*EcR-;1)nsfbvXp3)lmv-&lG3 zEhNa}Vw0!c1Q%R>kS#ybksk|^AL}ZJedEWy3*o{GTE8Bgtjeda3+(NN`h281 zpQ_52gVZPp_MS(6w790rD@$RE^p+vgYieUQFS&zHxIi3#rZDz|`Qihh{_!9co95jx zE4h0;RtK*L zh5WS#J`dyq9qbG8L&ooThNt4)0h*2<)J%7ZM-Q{&;cgc*z@Iucdy1-FMR&DC;2CRq z{^4yO(a*P6hJq5X=}3j~5Gdtj9b1ccew|%{+T<)__CeF)g67Uf1?mT;_7}2eB)O$`!A^oy72C# zV`nejmx0~4z;$0j?mgEJpMkk*F7a#J{Z|19x^I-aFV7-1A3I3OuR)q7eiHDoMKmb_Evi>^dLZE#1J@fi4*wu4K))@H3fB4t-2751HV?! zk)rdk0s?=EQJ=4#ueb!*K|p5}#YzqUNfMG-ES{6D23mhV#dfADk@ zIm`Qk7VazyumsBUph7-YzP9M;aN)+F{3N#Et_WW z7x6uY_e4BsMBZ$+Jwm~ZC-4No(uyf`Z~EefYyf0L7LM=al>7~-9aEBIwZ}< zd_rdu6?cUyhI-=AhejykA)%#x0XY~WdyJv+T$qv#vvgXIweQp|KzMG~9dk@q*EMXI ziAGE4&}woahsCSbV7{{&|9DEd59M$r&d9xi;*Lbbq29Bq+MSeM)r3wKwlkZoHV=Jn zUMEsPVjtV`p3eC;!8}WoCU+oCnsY*S&eXC36=woRAI z-BHYG1@A}Ze~wu)au)BZ?|QL8VHVgHObOx)qUUWClKUwjCpN+hrz@ptAAU68|N~{*g{|-Oq9UIw4%9j)xW72MAA!Kb(T za74@dFChNz=@9(KJuzSRP#C^bZJxXRXpmbE$BhuV?_`|s>CoH*G<~h-gA}~)$xz(` zURmF%Na|eQ!(p5E-yHO{p7XbbN7&xJg8>=9-FJ5?T+FypkYMBtLqhF%W=jR?*$V@S z$;CBC0 zbA<(GiG{La?}(KoHBS(0%$OJvGUSVl^$ev4V-nmvj6BQ?9PB942>x~Ae6JJ&%&6#D zVe-*2qlIT_E?*`##tgE|MP0zZf{`Z5rFr^OMTvBf@9Kwz&Kgi@&YbwOC@InsDv-A7 zi&4hX9EQ>oY-8svLlCY;lCzYFx{4Y8KG+AieC&?F??EAmE$$H&WyRB^lw+eMK#)+W zpeLlH=&~179^n*PGLlh)v4Sl0J@1DUT{LFu$rYcJE$z)T1o{W$P%&R^JHBitrBAGKyM~Rs_$;xOG#_G8hqVp7FW}wb!icii7yd{ktF4et*#iNt* zkP?Kg%>-#5qLNNd-_<4j2g>TAa#Nse3X7oOAtXtSDK%zm$|Q`KQjqIjwnHArz0*#@ z$n|}7en;E2=8RHo%_PPlF=(e+*+R0dZ!g>?CS9lEI|s)kiaX8qbaT{|G!nSWIB;5~H{@I4*0c{N zoVSLi$9)MqIQA;2_8_pBx=hP_jxFz?%{5IfErDEBa#O6!5`{QbQSB8cCFzh$57iqLv8*IcUySJi&DuTJ&oxZmZ%% zF|+5K1w4c!sf8yNMjLFYtE*WZ6la}#){r;q3baZw6FensXO@mF3o0&A1XC3^Z5Fa_ zwR}Y&ni?xI{>B?xQv6kXR;yE0NsfGTQ{!^pS6K0SO}N*m6J%E1{IX3Olo_;K?4s;S zlOoOBZ{{$&2hzJVui>QLj3vq#yZUkm8Rt@{QkJ19J-a8;9OEnD;SX{VjEHUaS-L&2 z6-W+1)I?K$u{@`vPFuaM2D`k3HEtx^LlDVUlwUr9t-3M<;-2;)` z10os|Xy~jO3sO+n#a*Bh8oCsfoyq792y#o{gT2E6O<|+CQK!iT)4LVJ-;TzVTr3V0 z2{U7GQ5?Z#A~*vIh=_dA`f=eD_@W>7X8pgtXC<*yVa-n#sCHD@cO*L4RI?kYh~`@o3s z_XXi`N0^9V9oS$vnF_QzM6nL3vF(C)1=%+mY7#`Bh=rFLd1Inev{Wi`I2-r8^c8S?I07d3>y3L-Up}cnzMo~5ML+QkevyAEpJHAJol1Gix8aw54W6=*_R`}rzQQ}om>5pWIpZEX zT&VBJo9{%4b4MH!G0Jw}GC%U}$bz}cy~01Qnvw5uVr-9Wxfk;I2aEskKfYJcpF`~k z4GFc^VslkLlUtxnDPyoVD3BK>NV$W)?DxULg@JY64dQmf&pqq7tIcCTvDNUyfM%)f z!*{68BUS1NSWysMYX}gaP~7MU)bq6LlvDTw?mLv&I(qqMcSdagU~pQ2cNC?;;E^bW zg*(D78}QhHR9?@Mx7Cpdi;uj9t>MasgPN0zLBPo@Jdo2fot3g~=fxNH= zzI(!!C*oexFqO7)DrvdhGeT{)QYWJqn|!G#*}<<_seRx|jJDqowSirtFMk zq1uQt^%GBstLdb8wQlV^)dqP@dSn+hd5Gcvu|A0Q$9v)SNNRj3(F&WffDL(hwQb))C#34Hrid8kBR*|>mQ2SI*mq~C5fD@;)(8nb z)+^0^QYl!(zCHh6`L#;#OKL0A_vo#@`29Z3{V(eKpX3KInRndsD5clmxUOW=0h}Cw zb7Mmn7R|bi!Uy&-^JEC0jF0e$UEE71g*6TN-yHY91_C#=`L0Sfc&sS&szhC6Q9vC_ zbXR#KS9+|*w3vV>_1Ec!+&7f3c49@k!(}+>z^-xMV+kKi@6kzOKy1_?>{uXju++Lt zy1Ib$+(3|<{t&dW{Crw~j=MC;ueEJ6R2wGBkONSgmBQzNQs<$1>!EB0U7)&Npt{_A zX8p`n!*Ww|+=tdpN7pXHA0c7`8>V9&dG>q~9C<|9;P|L#=s8U-BY0UDBc|1&*1g82 zS82FYr6aaaPjGBr6?^0|r$M52K%KWkthn1ce&}-Bf^}EGn=5<5c9&?u*y=xvlxM%P zmjGK6#g0NgsCta2YvoB!P@fl~JwILRkN<8?Cz`{)2nY!P@QV7Ms21;krdoE67S0~3 z2G$nF|K?jVCeHudayAe$Ff#vd3F&I!?#O4DzH&q4Q)5W$`altc{5%YW!Kg+!(Fpno zOf4~x#mk(WC;-g_BKh5@!fb?h)CzKq-vpF>b zoZiJ?_#&FxqdXk+AfvqQ<3Yvl+3^pI^s4*q@(&J#f9pBkA?f)d z@>oE!eb=x$25RxZpYvl^#&vUaYBYjU$l#Z;zJ87Pc4B$teRBNF3DWR#+{eFuCW!LbUc zRe8M(v|E-)cQSdSifxjQVMk&R|3&0A#F9AjKT%sL&*K~Z)^W{7v`Na1#t36^VmaIH zgu|+}Ts!Jq5x~LD`Xp@!5>2L)hQ4s1&BofO%ka7Un@$G6Mr2v7$LjKstK+O8e(n4m9*m#HQ>%-aPCkgMm%u{gccF* zDf$>ItssRgua%zoGedKh_^vvQ;Qb-DdnaIRPZ}5~PXrJ;4 zD(|EOneaGaUIhuMg_ReZ*kENm4rV^m!f+_+cqgesIKIb1+1E9-mfMQP@CRv0xhYUh z!;Wt15D3?b+Mhb#Q7LT_PN7b(7syykv}pOc5J1RtvCuAY_LuH;?4TI&jzz{L*#wVi zTA)w;-tOuKZma4_lDmdO2M}LiNC_u^sh8j=>e!vFQP*~~*#;C@C#Hn0^9|k#@oF>E zU(I}ifkI=l-F%#N7L0jI9vd!wR9qh7vP;WnN zkc1u#iOIKQf9*XcP^=-P$b~5<#9DB`?tvSUnVLbg_}~pHH|mV?9r&*}AN4!(Uui|^ z_o(qjy$ANz1fC$ULrhi5ckaIf7Ygg)5Z@@@$iIapf`A*k;Z#WEe{1#`2ZCwe4>wN{Sfcif}u=Trg|x9>PTB|ovI8c7bnoAo7OqVLI?4( zG7Op=d7GZQ>^&2(7>~#C$7*-K#f%rgLabkO6M7(436-ja z^2Jkhr`RhaVNvB#bKp+{%~?BFE}H($tdf-HBp@I1f&qO&!4!9tWNGIb9Ysl{7 z-g=MH7}Z{w{9pmU@<^K>Fas}r{8=r0yGY)Wf8L#Zn=N$vv&W9sLm#F#tmp34jcb0J)XN-p2HLt=gN9+c& zI-7qdmywW(JjOF`PzuY*XDw%}`@6!^t;Y-IDGE-PUh$;SM^^?c0FOH&Z}54UnKSCb z1^LI8yz}b9Bfb}YpRKqaJnWukJH*E|8aIQZkukDti$Y-22*t}|Qy>O%dlp&tGUi^H zyN0f`)$D0PCWkY7c!K+#1c?DXR*FT7R4AoEPgMBu&#!+=_@=Mae4{rHzcDyt^2`$3 zCgSi@1dj=T^@OO7=nOXla3!vg&MAm60um$;-oY@ns|N4N{^TauEE8~r=5Pq&K6uZB)BB|7z9h|yyu(X3t1plkqNe2 zc;xpI^#~FZZEM7~B&x7$0`Qw+WYE%YhFAoD?M3FtqGWW5KDgT70?|>YV)A*CBRWhm zlkFdlO!`FfkZP}yFatK~I0vzNJFTWTaT;jWukY>~^H*BABg_NHYJHvU?Ni5E*R@V9 z8w9hpE={W)i)x%PDsWePC*%+@k&tGZ8n+mOmkS;O=nU+6gA6*klBAa7?-yeW=36r8 zIHX{&M}3-pZ*J|jnSQT(?=F1sd!Vj3*^`$LSK4Jm)L4bQq|8*)g2{jcjfnt8IpuyJ z1wi^q`Mh=ngvSe_Hz;%W`$L|cZ?^60=w3>TYR)iDWOXS3TTXB>&WF^;ea+hLVbdF_ zU-*Bg75y|3RsX{eUH&6K{10hGf(A|&M*mqwIY;?_=f_F4EvE>g09HV$zoO)+L?u6} zqj(1t$_t09AThp6PdmF=i?wpQxIyFp$dE;fBK!IOnRGX+Ff5lWn3&~tdYkPz+vVK3 z`_tkTMAU(vY>7bU-sS^vySWBVy(rL#V49t1q5bOpeE9X>#!A z)Fh23BeAigYt*OWO~y=n$&4Y5SMFUT4Ll(KM*S<>F|9nS{ZVxl^Y%>2?j5X6`&OlT zWj;;U)ZTYzmH45R z(AlbI#%pTT#{~Ky+AQMs*7gj0(WMy!S&Aj@qB=rjo6P~-3G7q`r9pqcHbP{Z820vP z6T{P0vL<;Cf}5p&nBgG~r*EBJ{I*ik)})6dNZvhD<8p4M-w(?-Wv^zRtb#XXr`Fui zqle7BhmJ>aa9t0DbNkRTHr+V|W~DXiz`U0=o=EoBh=)|A;`}wkxZR=uH=xw_^fySK zA=A(R!?G$`mTP@Ahe#@KhD99X{QP2}5o|nh^x|q$Ko0-&;)YRBWOHo16q*=+K>_0@ zT>Sv~@UE!;sF{oc!95aC^Q&mcBDS+0kvt?lpk&kJ@xkt$5`)A^7M?JbJ_p)Fhr4w+NCTECAnbh=;- zK&S;UGngstI*d=(c3pG(qc;vHox+l%e3-LCIA!TC?*Xeo-9iyjo}RlS+w#5?DZ<_nSo`a;I0@%S>Z z90Lk&#jvJV8Q~y&_rX%^2?*UAy9dP!*T%H@C(Nl_B}l&C?Gwq&&AFlgwal2q1!t zHi}^?`&kWQsnafa3w2kocXeo`CCoUazu3{ZRd5F#2MC5HLvv6NAV!8~G(C(A%j*-7 z%aH6G(mJQIKxEo4|n@)l%TvL!7h+92-<2Oet|ovXB@`tqJma!iMV ze-{2EinFN3X(Hyg^T1qbA84x7WRz&ou?f9-@s514U^J=ey^ zEW^sY@?PmDF|uHBgm5pULSVx4W+6~n(zZovK9lQ(c6a^8_wDVTCD4g?nQ!;;UEG?tl zL%X5ODP*p@uAdqQSBAA?s?+p|7-=_cVi`%K?@CvwoD!D-t06t)Ga|z-rCg?S@{ICQ z;_U!+NbLYojJ}u2ONRd_9B!!|x@?=S6VInJ8UeJvRf!cHM3DfD z9Lkn?;>)CoT zxBY%w98bogqsBPj)~b=Q`fyGhOGbI5P31eBo(|B741*|F!IVQJhVZ!3_R3vg;oZE5 z_=*iM!L@@JShUi^qU4ilxI0diyM8tFc+pn#?D#AOysK#j)D}GQUn@-AGM&l_`v&ge zX8f(6R8!2|&}?v*u}577?Y7@t>K7^eBK?#2(=MfEJ!qw7*jTYcNJo9S3RukD!5=22 zu^2uPtlJw@jCg`I)iQKof;sNQ2Q6f-OYMt4SaHefS$Q`LJ~^HW_MYf=or!8A&c)Rc zr#mL|o01=3i|zo3zCF^#z6lXTc_L6zg((Jfy;{5BOPhzv7INoXBps3NOn`Ev!kOng z!KCUb&Qn-U-k*kazX5)fmfqoSql0@kSG!Pxg1rF^(gyk63DPPQoJfcq zu!j~ctzcvlx?_@XqXVZV{K3HqgBX5G@FvhncK>bME6jg+;wNza>@QFtAXv!%{|JTU z-%4~kj%aE~d?Lc;*yKqyi7zID=np$!NAQcY<{}sz(58>S3dSa{W^WQEWivA25z*0= z6qS^emI?Xa!ji(vr1@!)_ci=mq^FytzZR(Jrj_}9pK@oDXVbKZDtq~s+CN-(Z~FXh zb$>pJo zgZC1vLXSqsAPtB?;A}D&`l~V>q*acBerP%LpMZ5~I#A3es0Jl3+Xlo2MpalNfI+aXFxxfH zLsLrg7L1_tDb}xLaTg&0*vvU~?V`;s<#Pk|O1aL=x-w@Qo8*Dth*;*pW+JU2Y^30y zn5*^9SFjE0DyhB8jjcZYerL{O5*Jv%-@L9a2tU-M2$@iEaO#+)Er}AG&!8w~!&9;1 ze6X7%W`)gOsALgXU=*TPx6em%%3i^t0~hM8W{hFP` zXjbV$Wx~_G8X;DcOGlTSPbd-mUN(EA$Z$>~Evt+w&J>T)5}DaB%8aYb@_r4Rg5b&) zv@U~WR5H6c5+%UHlRMd%j9zCJ+c$N*fNEeop|lpT>fmg_w>s_QIS&M)GB2Y|WwYKI z=$Ub@IEg?TZz#MdlZ%+0k;-zyp5M~~Hd~^n!3JKQs1PiTp;n!)7!?N&!fU28^uma} z)@ww@M)=B!A@R(Uw&gXHi^?rQir|zE%2AgWHeFMK8-HHaF&E&_XM9(jAd{2fIf9w; z1ZIfhBtPWTFPcpo)_+`e_Ap4hhmnU`bEX&-pQTrvSHRAmqK=!upG!%O;T|{0lsvOKl0C(P{i}8B9FLWim(o@ zI6=y8vPHsn*iVURznAa&EK|lGv^V)so++!{v4C02C@#lOyssmT?VsR`^;nWWZKwvX ziR0v-ef~?;vUtEh{#1#ff_D<#OeANlwG@tITPE0J%c9c5oT07?U~8di9!3Q}V8kl~asJF8VRQjpD3@qEacA zZbzgOfzXkb+y1gydvylrZ-CrlWrgnO)eEMSl3G-0e_0rPlaF&}qWLycaaPDr9<2QdHp9c8IP zAoCGA`n?UPV2V8geQ7tCU(HN`0iAmCGLE-((Ti^p*)cjMV{y*|$iq}M{jdH{6!Scn zQo@qPz>**uO_@Vo%tEls1_H-?PI|r124LK!3KsJu2#H>%nBW_ui0$;f&fi*#Q4fd- z9>~g%jOM5c_LUDiDqhGg{Gv((U6#&cj8WawG}ZKjKFBY5qmdOa{I^?C(HR~Dk2Lfq zgNztS2Sq2+wuP8k-hLzu#h=FaP0M)VuI=MzqEEs567*tRCo(_t<0yIG?XM0H@fYfZU@W(pd(@`0TYvhQ-+Wv*=r! zr$b!LR}88m$b0;_q%9_21&t!YGx>WGd1SuWd`Ad@Lt6hquFt6HSNLJk`aKWfzGL!I zc!DOv0dm_iw3%^f+d+||Mnsu=My)xLXmnFP(H`%22f>V^xtRO7?jCWDSq^dK?pS|j zCjge*Z)75QF7xl8f{5z?BfeN-f;Y%eBvH|~g)8UmNFP`ftCkM3GlmNF{|PhpTS zgT1tj4wT0Es1nF=6rQAE_f=C%%jWiV+cvCw_ja-Atxr2$=+`#~$z*!)w&2rFw%4sd z-%n0@`%b_y8?p9qy;_3!ErbJkD3N{7=2l7e^{HL_62iKx<6FRTK9k`L?dfEdz>09D zTjs)L*{D9qtr7SOk}VIpB>F67jKwXl_7Sh9L-{me&c%#d;n3yi38c`)KB3yPa4!1j z(>Qj1sgrx+G}^YBtL7eDs4sy5;3buSr%yeeHkp0Qy$a?9zIvfs?$Uc_2jxt{F*z@t zt8w0=O;ES!Sv!|Lu_P1H6SsPax7exm2iLVvb}W|LpzaZ!yZvmd>XAHl({-ojF?Gl* z+VN`Pl{&T^!b-pc!ivx#Ilm5OXO2g-Dwo@1x{V;$W3ofX|M{#(zerX-fnNWf)ZjwOe6jZp|;1qap2I1kauVQ&3Hr{E)TnIOX zXg_K4Vxpwxxt!CI6K%MayM)GkUE18-&h~chKZ))OQz&;mNBB%xN9LKsh0~IIQGce@ zNtx-8)9ml=@fZu*GJqbP1~a%0k4{(H^NnR^Q*Nbk!)DaF70t!aQwHIbCPGp>ry*Jb*jiRnjWD;l%1+Sy508*Z-!=@47| zl0$b36llZ{aJJ&BB%c~i4d^GOX@VwW9bFDG)`#Cdu;v79?+6?A$qa^%ucw{GI(NMG zr4*0B&;;epaV5lV-^Y+?iuSv2$D zqUVI8tkjtshp*b%Nm@BU)nh6PJ0_BYwX%?N%!eL}A=@*l1THMRP48K+VOD0B3bJS7a^a)a!o&mXsdMfGba?6s&!Y5I{`MfH3p+~a{#8qeP(snd&A z6-e8Ss2f`vvFXys!dc~u8%V&E&rO$|b9AZH-qqd_c~C^mx8l6!-|0Mjb9Ggl4`@@H zm@}JDC^;c{P$Y+jkaD1k`=KFP8F=2(9 zi$+h-ZB=#GK$6Ko{m!7(=}fl7#AE;=H4hI{tg}|U}mrQ31|sGrG{ZS$5BL;*~BiRKAD&e_stn#tbMAE`ziGu zLn`S?wV!c7&z&^b4)Z#GjvaD?IVqBC)PZJ01=w#v)LE1Lo$A9Lw&|iK3+$Xd){g57 zxofqc=&bGEhDVC?NQxs=q$DZ&34a|5!y_^~+*j~& zXOU@L?&yhY41vAn(%EeL{8dik^owfwR*XBl%)OfjCf2y2f$CV{JcnCzJ^+uA@$?5)_#s2 zdiD$4MpPA#ys=(KP?N?9QqkDU6FNL9^-Z-aonuSZC`u{$%F9w1ZxLiDjr_JVgfaz@h%&k+*5iQ60Z0nOqrv|8h>iXE>-UWgW zME{ewe?Zmm`6S*dH(e-s(UKfqZg@C>pBIR=AZPV46yNIIlulh6-JRC-3(Hq&JlwVZ zN$PA7&Ogxr$Aq-L3+D;-9ic6XhcjV&4>d=OaL=M#9I; z&hy9v#rfrcyjNo4f(?~JT0n2ajVJl*3q=HOeN|z|tt!88#iHLv$lIB=-A3cIjft>V zrQ<#`MQ7EOdmi!Q4`wh6(e`slZX2i*tuIiH_%hm`2_-S?xa-k0Gz6+H=llaN`Jm@& zF9+%c0|B*n6GU%JLT8JTy3n~3;(cSSw%XFApOK99o$cPJjjzP%)k7txWU3 z$alD0v*Ak^+c@PKxJb~IF`NEta@n%D<)rH)h^?P=k~T^p?oE~BL**7*eS_U!)bb_o zS01=f-VBK(5?*%>_UC7|4wu*G=U3YRz{;QIQZpN#3&%wt#CflmwYY7I@s)Nbpgf?f zV11)?8yTvZQ?khBGQHRJ*cQ+M)=euy*~vz+;+1Vy!!jSzaS`^vxseQL+Wc&ygWYfj zuYh3sT-L82>?F8HuFuua<$@sA?3FMBn3Kb#Z%nsMsdvY8`D&L{KKU)T{ziewVbf|Xt7<8> z;{lbLdMJGFf{OPB*0F4vS~#ysJ1~Ra;)xc&$igh*RfONzj#oryOxAQ81Ew>X)e1)! z>y%&Q3fShjH$UnmAX&m%elF`FRaxkx*LZ$`6Q3CP~@{Pe$~*M++fbF^mrfHI|* zuc8yGRA>9Zyg-1{xJo5s) zd5&I!vhO&4dcej2jx#6l2q^`iEM+zylxCps?zFt28aUU>v+O5ULyJzc`&9lA4&#Wy zjjmDY!vNeSL+|(orr+zn%ZgytU~cpSHH9@;g!PF z!cc~VDy1lhDv(06LN@8#K!8oH0AaPZVT^V4F3zf9 ze%;Wp#yMO57x1zB1oFWbGUDFJM&SG(P>K?FUZ9h4pt%s$NKW*$)}2Y-X~jIV2@9&` z-6Dq&yT~mdFJ7Voc)w>< zqiWDZ^{YhHVT5kM89mvAefWmBgZH*$2DYOY@P|Cn2m&~IzNBIlhQVRZ@aKy?bdAC; zqR{SAgdKpHPi_}(4<@bVVQ!Tqi#c|Rk8!?s>MKf-yLU@&JuA{g_j;0C=YG4phjxkZ z1vc}y;QG79;56)nupzC{wDorJqi~9SJm(gDeI#65il1d6ze}do!Q<5j1o3B;>i?D= z$UcVFg#g>xo@L-_Imbgz&@eGcU(FLFF96mBt(HsvBm?O zKc#DW;g))WQQTm50&vW|Qt5-I8A4dBaQ!)>9g{kPt(m`2A zaPZA??GIqOQbSx3=LBZ`9_-0kn`l?AMw1yXwJ0|7NdF7#gR12y^wq7R-Paj z$~fM5-+}WL99%N|r!W`hJtLWYIL;GHfc-ScdN_=l+RuC<&M*@#`V{)(Ez0k|Asthg zQ}11FoX81vEk5_COZzqAl%v3;pk$w|J`0P4T7p?Cpu@Gw)dGM_r`X;}V*Mi^FMb5X z4T=}zp9~gsRo4hX=_^|Vf&`FxKNZdtzTg&rE3KtTefiSoqm?ituhQhgIfO9S2;L-r z4u^j!BCdwkD3Z&FY?3O3hZ#MmA#-n)T05u3p(VvmIrSt>d7`V`S!)m2ocZeWP@4{U z$qxBXr~=Ikyoi(qe}iyJ4tZto+?T#48VGJA=-2J46L#&Jy=y`Pl9tp6xwEn*K;S1R z5S2R=b;Z*93M*T(GG3s1gXu~%@%Awr4=C-6 z2Go($3%q{$-!RJRMQ5>;H0r}Q0&4n+&E@Tv^SDp&$~`u9Kos@bGMR71%l0|DKV|EHP__kXC_I6K&wISZMXIJnun{!5c*Wnw02 zWN&I~=KODGf~{(HD!6KB{`M%EC>S^>o#?6pL|7}B*2rIaOxi$HWiuFKeN&7A{n zMh+Iug`Z$Qku3g~F?(m>ars|L8>jZd$r5|6ka+6DsIe<9+(kvgVQBmgWV zR(kj9yf4tN2G&tK{;XSmlQH33!ar|mdyDUx4=R0N=)F~yxu5OSX}XWrY0LC^(|(Cj zJSnDp2VGA1w1wT+e0i<9gn$Pf&S=58qQB!J`ICJ|CJEBkQ`Zc2247D8efQUT*KyZc zB~w$3)1zDOtDcuLmpzpk(EZDMep>BbOYYU<7Phw3ENh_aHQIGJffF0!jxtBX?Tiyj zpG!7+zN!PSf|M8zk`AkSm#WjKI=hkbL7gy7Atzn}T@EjGPX~m|X>jw4h|w>rc|{)M zZy*}zrdN--0JIH8+)h+bJy$YF*h8A1!5auBODsm^#!g*p>uGhlHusDKFDDlaoLdTU zzn)+5XM_@~YxGT>1*BVkm%x|KQH$n-d#g72#anyAI=Eh6QPoGBu9KVWVLj77R(8Ql z<14SSu50fm58+c|QeJ&vl|$ z%F>>*Sm-#AL|l*A&HW>-?Xj|{WE*WM{&J-`eKqZW`*AT)YdOx68EIec7(s0}>d@nU zblTN13f(}S`BnXM$b5R%N+1;TxQGw7iPdPT>_H=#Wv%>dE4e=9`^V%{Z$M1i;J_Xq z`6(gJ)I|bmeUe19Nkt;UoMAK$Y5F@X&*GCK7`d)@8JPW!VAbfMB6J!Hd?>e#{?&|v z-R?&i`}*4Z2CLU*-2gfB6CYw%{^<+OB{${_?WLsAgfvg7Iy@sBNrLr>1198>yi?~$ z;7DNeNs0IeS9iFbD2|p7t{9PUkGl1&I`oVikOE+@cl;r0G{x!oDJ-lAf(F$B<$?lD z_Djhgaz*tBYU1uH5znxZ@JxyvTv&a1`T%wLHqjAJqWh83%m|XCXC`Tun|6_#zPG(m zcp@CW%F$)n8qY2>?m(8F-8YvM7^+S9VB#PA*eadC6+B#0xZxyb0QwhjD2`f7Pk;ge z4gJUYYyV5&`0rgYt?GIjxMEoTebD*iCYOn9{|f{ZaY z$F_Z`Vrpu~ft&3ZuXep&?`WFLckK9xaACKzQs**ZsO#c&9a}oh>VHZDBnsJ>BKP)F z_BCbDCOxVRDz{41SY4;*vc^LclWsJA!me7=h&{Gp#Q46@GI9$Ylg$KD+B%LZ*x;{B zY*j;LJDE<`>kM3aTEUTPKGZ;~$#(|3$>sOC{?$7-!i2|h4=0}?S$!_WYg2@{Dyuv0 zL%uT(DcTi@c%K*)FXyOh$l2-Pk6n?`;1s)m@gpA;$ua>L^h|Iroj$zRGd=r>w=>1E zr?A2v+eD0wD`rDR8#43@WmN4Y-u%g0s^)33 zUg$2vG5NPLgNsM}W$k3}rjVTzYr{=%!K-lYm%T$+99kBDSuGl~BcIW1O>?*n?wPgwkpx77&%$v+Ca zOhAFHHDCn?;$6ba^sX|=_Qfk0{_IQNA3GPi6(0eoGJF;ZK>fgugp?F-h^-?uq))0a z`8~Eg-tKh9kA42D9Xlh!`o)j?Y+mx6YxZ_An_=QD9cyqkV}ygd29FC*lp@R$O|8xY zgg2ZwtaX+NfK_@|JI4G?ETRNz0x^e!1=ZRzx|gYeN1rYRt5|R$OQKP0(SlP28>p9I}KC`w12RR78`?Hma3DQ9DM_3Y4<&)vFoX$ZfqbS?-DADgPa_AIfJq$NS{lbVX!KO(akvJ$4px3_7{dWQpPa#xa&jwpO z4!6>7*X6{dk^ENDnvaWQ!9;f=Jgv8RuwMiYD*Wz-yTc}N}26DKCfXmXiF1;%W!{IiiT{S zxDb-kZi#QAY!=sV?dB_P)gIIJL5TyC(zw3|j)Vr&HoRDQO7S{(dd*(^dpz&ybzAPh+sgw> zhrnx7F*tK=o~8G~vgh8@)Dhvh>1DaSpD7o1F~q+7A6KUI%okheKC%mOSJ>?O{jr@D z>BTsps7?7kaHx4Cx-y%pY!v9<$;%T(a^!HPu3|$MU{z-kInvEqN~>fb^RahEq;Sg{tPjcU8>b*z%?oW!@YBH{5bY^p4K~&Wss{dHvgTN$oWpbXoUh5H z_fa!ctnYX?R4f7MbQoQJZnix1Y-Vj35(2Ae>Fh}NO#2XzDGfI*lG)A9Ui_Iu2J1Y( z6hy?E9`k`vh(;C@1}%=_#-JpwrR`zTg}8mWS{(ls#hj^Fe7Amt6NE?|&Y^RKG`30V zoFBq;Adick<49!v)n3C@lGNF(69~!=?Ibz^8F&64q>@*j&?V9QeOqv7S4D&qSRSOe zdwkLdR36Eb`4abpset%63E%92U*qx{Ks=t&hd^#ELt1da_cNZDpG{6Wef?x(qTQNn zVyDjEJfvd*zejm6^>zpJ3yHY~xy-CFGbLIsex3T4B*q-V4<5XNw#HZfggW>e$K+QA z1jBmbJWj9-0d?IW%q>MVK4a;PP%4d`a?S0MrRyfY?7F73Fq#uN6apC;^+b0-%eHx@ zN3gA%!4D7lhs{$j;*P(^It5tF{;X*vUg>|*;>ik`o@yn^(9JK=&7b@3Q+0V5wKLS= z|FhJf(v4GE>Oh%(ab)|`7ms+yZsE85x8Uu(%pEK;;J<>PE4}2!wSR)3&;J`i5bM8X zPrDwdVrbvwvD@bBfD9P1l56$iGP%h=%0gDPC54i1pef7LeRAv~T@CA#nYJ(i!9T$P zLG!#=iu3ocGX{qt0)(Qswg4Dbq4UI}tC_iNpWByhhuax`-=}Rvpt-$hG-gd^rZ^9| z5~pXVxqUv+TU<^DV@+Jl#+qAo@w=cr4T-zL$aKd+QDhr(=?=raA}Osu@Vd-*i9yqF z!;5jdQ}m3qoq4vL@VhEaWDep8r)=S?o_jS^UOE*;r<3kjYQH!B@;POOw+dF6MH$?S z2xyyert`=KuiJ&0O8o&F&bSOeknUDOw~p2TZ8Ft8zcYz7wwx0;$1wJ$o?JL=Jide?Ac zdrj#j!87VsQq)T}+}NjY8o>K${TCz1-Gs)U??_2U=_(yk4`M~@KuD3SiH1QiLaoR~ z-BicxAgSJ_DL=8MfNH5)7qM5c?Xy82V==AoImNa18j`J$R(H58^s)l!z-ybYyJ)=1%m_BSg)AaMAJ#0o_xE!yKJrE* z&vBC%!%$zP>2TdxtJW)8HbfhpZ`eHimf_mxZfGlGEH<|@LbC-nK;Z>q_^F>2a`@oU zgbB}2S#u+`^ULmBDv3QNCn@jNUB{EMeEhsC;=Q!DO!9BmTz5h?{&Fqu7jY&0Y5sVA zSK7FRw!2eM+_MJM%{f270?L71Ow)ujm*@4>P_+J$(vdVt4|QL$)(qsp4I~$DU@`S? z7kzf3LNnr@fF`&Jy&g^1Ll-Nry+YQVQ()V7gt(9vV43p2e@fzQlj@*zeqC0(wnu?| z0lU!uz^`rjk=`s)2PLy2BqQFT>KEU8uELfxf{%D`_oQFaydxkk>P~ntKG7w? z8Ib6F6AW|Q40{G9A}C`ghatq7*1REzuYZE#^+LDc)&o!3M5~9G<^pveMWKI z$foCGVu%^dn zo>L}9s=lPE_=ZSl*}uJIQ#1Xpun#gQYNJc0d=YPC750~Pza>g|JUjab)D^<)t4PtS zdSM(7ynt^<{)kC)V53SetbCPDT9e#!{0lIk&EMAs{s9cp{|Feo|2x27`}cy&|Eng@ z@M+<*1r|as5vxuM&gqF-%$N`()@IXOy4~zXN2u$b>}CCi`iX(Id)&Sdx%f9VyoFOJN%wY*geLc7JT#L;M2G^luX zUw{!s32lrj1Lv|?$c?gZvZ@vtqeFc4R_B4gGhv!sbd? zhOCgr-50;hJMQ*@=+;U4A<`8T{muC&Gy*Zj!U(%9lzEH}O{s}72piTzs8)NWiw*X2 zt)U^(XSs7<*__hGk!R0&*MEhp1fXOmFIJCAq%XIbiNWfHsn9L!fKdFAuMO@_G z8jjN`fJGqlQ_o5!6y7ZX_h>Q535t3VaLhptm;Co+9$jHDiYgBSS7;8d`7cYX+ulk)145N+>9G(=jBIC3IN~qqWXVP z%^f8Z2@tQSe3g;#M=*pcm!JLtB4wi6m2B~-bl&f5_w1>Yg^cK0wtW6eDR(DTEX)e1 zJr4r0y1Lt9p6})6W+gx1>zyYM+c#ANn8m!qEKCb_xWjHA)YmdB{(&<(o(^t5F4Stq z>^>44_R(u=wA|dDC^}2*@LA zxYp{g=o$E`S|Xf|@U3^9Cb6)AWwZZWvOeehom?eha9$@Kjh}T0k&1@hpkvv&R3nNT zd#L_tHow;#J36{;h|PQt#axV3>b^T6cXV@#wfv;|Q5W&Aq{-p|QaKoorxeq*vvR!A zWUa#-$QCH#eD~JB5Fm_jZNk(a%)3%iX=+V{tpGUG(i4-uY5e?YItxFYY6p1YKPj+? z`q<*}qKQ9u4=c0dXpP-%$97T#;#q(Ef4EClfirzT)iNkL)n&vs(4+Gv&mW*oIbuw? zL*UQfsqc>dG(oki@kD>Hr`-*Vfz54V4OYZ5#cXy2&NsboiK9-ltIs%sqvKY;4vmS_ zEWTZxdSaBryU;|t;TjkZk9|-w@qX^wm@M~+%oY*G!i5IdGYpp!d`vq&_KzE5?IOP? z0&+w5GF{i$cn9Fcn@%R(lZb{#4^bJF=m^>?4rEiayd#ZA*y4rfIUG3v8#R`^==NyT zxedx|gzwgx&3x7Xk8GN6-1X%=(JLaGPsaeQ=n~m3RQjb=H>@W)!7fEcOymNJ?a^1M z_GJD;?Dzh_b||;R8nP1OdCATuNcFz9aMibW0>Clm#HZ{x+D@5M;DVtClhiZT8&tdu z8hoRfC-&D_7irDzzG_U>&EYaXg#U=>8)gYLL!w-vu=zWe{Lk-1za#&UziyomAaCgn zDvZcWP9sdlK-EO!7o6iaMoDx-Ml|7Qss>aQMG+oU4?a%rm6IUr%cv-HZo;^}{E3Wf z@Jn(t%qq6<7&iDtbNxkgCNO3VL&4{|(EGB&88jN-0}C!WTwU^QjfpZ9%pDlTb%)}g zu9B_y@`vPeqdZAvy_erwlP(eF^~8Vwi_@xti4qF`;k1DN$Z1;tJ4E=O-ibKa+nbsE zYc|RMaKfPXU*gkrV%TZp#)EcZ!xiNO@K5niN^~?8R&BB2O;?_@6|->J_A^8#rguYD z{#RRKY2O8n!+7Q$EhI+mWl;k6+uUxCIX)Njo4Hj7LIGgTI2$_01g3g@T)T-4$-;SY zfjDf3fnXaGB#~Jx`!Oe63P->Y6>K?O4p9qz#INg0#-w6Bv83zm|AJ*3`m!a+1*J!TqMe5;ipxZgO}G1j#L zE>COn@YB%se0^Gi8qnddugeU8+qQaqhgt8MQM+F+?VlfbPMMS^#!*#yBXu(;s481y|w5RasKht-v6jK()hpOssG(iHEdK+HL(2UQ8d?R zu_~36mLn>KRYA}g=+dYQLfQAoFl@YC)@eJkt_r)e(JpJ%Z0xH2t$u{duVn>VSi~%I z&!3VB-yz>ExO4j~JfM+5B*im{PMdB&dgi?xEM9JZzF$!XXgoFJXF181=B=1`NQ$xl zdD0x>$E@t<#CSOAi$mN-UcZ?61|p6&#}9P?sSS0+h+Dc%{1HlLBr-w4G-Dl1aFh~9 zOCKesAYvFy8NhCP(fMq$$6sRAXUuJ}M~9aq+$*cJi5rxIFv~dkBPic$w{0GALPN#q zTEd#AZ~{Mjz@G1zRFx%HrNx$xS4X-#t(bjV9!m>49Wi=eWX}zEe{9H$rXfwqg9*>G zGr7>*^tq%SuF8_VL{}Iv!U$g;zptpn26Sx#R|uR}>QXO*UB<6H5r6qd%Z*opM~bV zuW+e7xbNC!HqYK5nX=5mkDp7U@`&7ZU-L^sUl8siLQ7UA z#?V5SHrDTHT$nOP?Mh)CYN|!f>yCq@6FRJ{^i-0{=$#;pP>aH*Kbu`H>htGb+l_Uv zV!alr#E(_l2^EW@szYcZeN|I6 zUrYuf$|EeF`C6m0wTC1nCFKDsv<8~)C>uD>BK3Y(FfPa)Ie+q9XRuC(oYmhL@ajE; zz5-*Mm z0S{m63S$4s9BX-Ug*byEy|CP9TtV>GJnN|6L~GX?I&}papX+Np9&4TYQl%Isn&%N|X zIj-pu}MuVvb?F3#;~J1hzSbtR%!ZGAI`RCDE`5UdN+fC%f1$4g2w01DH6(So{> zPT&LPqO(R%mWaw$S%p2dz;R}ie`(knhZ@Mq}Q;+F!_PQK@FH-TTYPb4J_YvH;e(8jRt=x$dy#8=!!R}k83a#zOf z3&Zw@jNKu{SM*_PeCeh`BnQc8&GN3DBjJm32F}0_YAN4{zam1u3wv@!T3put$~&(1 zTPEIBiO%bb)CWwo`x0`%BwdaYg}8Qr3veXyulX6j1HoSvPMa5(D;Y1HH5+jTuljAl z9w`Gx(#9>h1;W$K8;wkNO+@D@p684YNo={>*T&kRnr|0o`aJALc(0RU>CT36f8&pF z-=p%PM5uVTmk$GMG z^C>3)mRwx#E!ncLF}2B(#jn?)G?%ic|L{9wkd+^P<^O2LJ$RDHYyQdj@R0r!b4dK} zm_y3m#ns6EpS6RnshRV?4RD^824zCyJGa^3wywRUpx0H!jElGT{k2@AN$Iwz?3ig@ zB%e#3konvn6&)N*xF-?mA+EFq_2>7NhO@$)+|A|Y5^SJ|?NQ=jPiQDFislSaEE()H zhB{VLt9Y}Tl_~?)lv|;X{5+~S)EZq`t<{Fd!k6* z{@yKV(F_|dMiX3W!0Lcv#2F{QhR2*+IgOa5QSN>P>)gjxzUYq{0R^hhvIzDCU07)a zXA=tRc`7BdP@YIuqWo>lK-hho95X6pJfjrgn=_DVCSk7VHMJ*{w8%(+#A#SulAo9@ zhT&t3lYC?y%L4%%Al3wEDQgT~;l#cDm#xFV8O`kf`S(Bnab7d$|H{_?&A6l5(1yBZ zt^5?3nLaF?dd#KMDav60GOM<_g|gCwTE+x&GO6^I6i=2;sW5UDqqG*P?4ndLv30sA z%BC)0@T9gxxfZC1CWj*0VB)^*mplbRw0@V{+)2_*DFD=MVdqPJ0N0OJU-ReBwTc7+ zpRDNg+ZUepD7_cugW|U5(Zq1BNV;=fHoZ~%P*%38mx6P0HU$mus2q-h8t1%R@;b>< z`Q!u>j6!-M_CrSH9c^f@eb!v_Hfu<{nrGY$ul#W*4B>4V*OkgESmE4IgM}FkVTd5 zVHx#Kfn)6yuG#ncLpOgqZikY;y|Pzxc9&Q5ln%PRvS)Vog%}otgT@s~6E5_~ONm?l-Z) z$;tE^42Qv_f%5CLtP2hCey(^4FA~(aNFxLZ02K}^bzgA;Y9x3cDfvW#M|r(cqF7vY zzn)R_Eh?VxLILR^$N=S~V(98xA z0jzr(#89CiFA9@zBVfwZC1fX-&jly=nurf0K5)TctkKj??$?&u20EPR(4wPGjq0k7 z%wP51X4YKmxdoBhTyfLyGi#mXNYm1t_4Oi1clBF#kb6ze2dk@IgddYE6uYYkEN>fQ zin7pix5NxX)FHr@J4spt(~{I1II1CvDPHQndQHAEDjas}eH{h~prYNiXuOpj3uf#O zFy|Y1HaO>g;7+GjJeb*9-eH6rn9&0|>ZUg{X@j|K6b|wN7g;|9T{T=qF9AqLj4kdhg;{!FsC|Jd#1mCFsfLcgK>Qz;+zI zyEY=~>^x%n0<;~nFyP$E5ZPtiMNf*~xoK$Zcyz5{j80>U-Ouh6wmMF%IrVZPI(K?* zuA+cRVpDRqk-fMG5ORkJe5jfUUrFx?`w1&WZ@_?J6og^wxCwr&BHELsX_y*Lo5Z-Y z8)8~Lm1Oml6!PI`2XZW#ZT=>6hv>lpCzMD6J;@(r``VRmK_MG#lLr;c@lWg2}~gtA1d!B*CAx6c{Q8VSVy2=YSf9=VzIS=aiIVGSNrIQK1zsGE>yPi zfwEy(X_;QLBdu^OZ^H{$4hbU0!sUN~tib6{WK;7o)+D!jTl%QMHa^K@c#`oQT~pA9#=$)F4WUyv7Q3iBMR(aOxH= zq+d{D`v$&RJ(KX3F0i`Pj;_tabNt3O{$P2vfYK1W#T_w#4EoS2A1JC=HXU>2oRfjD zXnOaE-7R`!?+L7X+@6aw#@ZiWvHWt~4IPlkUgV#{he`jqQdZj)5jU-{D~!hU=ZVoT zQA^~T3daMXB${X1Jj#X)r^sF^mW{?-4lr*{AKceQK%Vr99%X-MWA6!xXQUNmJPCd} z47XPgL46n{>d8Eh3@VKrf+P6aCOV|gNu81Mh4$4xxWB7~_Ej(N^~P3`fc_&YNT4Woi2QVs7R$#Y@I^igg^g_QHCV>LWl@NfKjMB@1FMONnX=NSA%01U zwDjSudaW|BwoshLU<84vB6UW5;t9T#V7pyDDijz~aFsPt#ZsG*(2poyq{Z>W&5U57 z9)@ven!)*kBShL)jJ;!8P{Kjy9K0#q|69yjXs{%-fEg3o>oA_uu)^S4`>^xPTV^Ug zN3=vlLnTQ^wSg9Q-6E^WWRe^4=o{*viVqa)-%Iz_^!pq zKNjX_#Qjm@4(+907-x2Kha^6&NlNq3&K?d1{%ssZd>G+Kzva|8qDD9C%1z zb(3V5LhQxe^4dXQh?PLl+9f|45UIg~9Q2~BkTZH0hhLm054KV`1{CW*$uG&^<37cOT%L#AY`u%*goK2Fr{)30N8%{| zDH)r8L_YZ2L(UN8VL!ELkDlcdr3Vr|B~}fazOvznvPc$y#g~)olUC{L2z8R|tl7{C z*Z7MS>rdIVJ>7?_?x$8f2G!5;g;FmjnsvtFm#44rP8F-4g4$z|GtyY&D|wI(PJ96? z7^{Dvp2$pc)=zKrP(kSosQ$z3OS0((f-KujhVTfmI9$W-8|YhjZ-1t+Dthr!7}O)W zBT>ruZrds7(q{3xE>al`Mksa{J5aWNtWA>5M^oHYdbf?;JJ_TAt{c5uKnnG*f53Mz zl8EJVr9BgLmN`LT7`dOLFE$7MigQ>@_(~z{n<<)Oe&3?U@IC#Icv)j(Nn2A>W9EGP zani`h(`VL!dit}#-Z=Ts!mfcoaAJsVIn=SdR~k_We?xIWDsI`$$h-xk48_$1W736Y zGhhgKkb3FxThTrgf(Xq>#4#mJX?DC-5pOLMuxvWiH!NK`)Z9UCB7K!U1@CE5EToe-S z{Alf`6RZ6k0;Hx;M~faQ9Y$m%FW!YsZJK08Ee25^nRbV@p0e9U7rGu9lQHwI$rZ1~ zV0#MRqSj2=v1Y_nFo(gB6V>`~Ue6b|o~937e+St{v=cs!&0EKqjAQK;(rStY@h=yS zt73t0ygF;<^D{c(U! z9cFdoN+|s|*k)YB$1C^8{HoSz?eECM6icH8OWHd~LVh1_Y}Dej?0b~$^w#47U!MVdy(Kg0cJuAFn!NLVwSBz%ST3s!Abl>nE z;(OTQP@lBq+E4`B$cqHMwc4lb1M7mcmUQ?u);F6X-w~o(txQ?mkE;Q6J>oaU+(HFZ9A0ZX|VwsrzHq8wCFfhO{0>x06!a#{fC6Q{! zhPzz#-MTvI->ijiXI~irre!RVKh&a(+0OKlI1w3P18uBERVS% zeg7@>^o~AJn=WKwwip)>)f<&qf3SwzeZoKH=d=^ezO>>2nBH~OaEI5mo~tRaX?DLn z^ix7dOxRqO=R`!_Gha+sO=b+PfZ@p%QNHg*=wq>l*Oh0__}Z4xAG4W1vMosp%9{u3 z%*Opm=`svxA-gS?Y>gDlGWGi? zOerfK^UUA@Whs_~F!Rd&VYx~)vR>9c)w*_lS-SQfkcXx%PCW+BAAFHyfu3tFNX34( z4G_CzC`NPMWSlBUu7uBmO3I%t*4mWhrU*%Fpw#6x;lNV5F3ujOY$7>Ojq|F+;KeWYm}7>H}(2RK`25*NBM zoh@n8ok%0{%3lIYMML*QTR3(cneRDYQR$76Q%$KSNvZc*8G0^I_l-HdEnWe2;h8_! zlHc%k2|Cl@`LxJ86VYUL=AU`1g0vU_qP1b#GNNwHN9QG~=EYJ!+p30Ts*&rndeHC& z*aSc^s4Y;sXdz?1xWMIk-(P_UdFgS-0NSk&4xmQv)D2Shr(m4PA3AvYoS||xbpWWn6~{bfCL7CJX6HC z;I?3*p-pfKDvqzf@9OAZ%a@g)+&^aI3cy<-NvP3uCo|s()dVRqa`J;CTn0-(pmLEY z3`C091QN+@Vv4K`eg9(QH8HjV+>G3j-=`dQPoydDt3YuKmkDWLQJeLfO^@UOVa2?)Q2MpB%=d&ABu^-IX5BS(G5_;jN>=y1V z;wLqlx55*rYY(E`h(dw4H}$gpwvOoYUM`taEbjY7}bu@N$3de>+olK*#4 zGDSf$lP6LGrVEh_G(j6s5x}R2pDS{O+Ja(ApyJIZAOeRM$&QmukypaW6a7b?_9)^v zP*==rrC`n*!KcNtkn;Zk;}_?zcWo2z5(WAOq)kCkTfux;oP-sTTO?urD*<(3+T#`| zmCalEQBl*5iD@#Ec1$$4#m{Xj)!>+8IK;b(hLKMlFp_&OKr#Fd>@<6WL zrz8uHuEmq>g}RD5_}~ZUPo~WGGjr}|5nMpE&R{|3@V_l*;pN0q%J(?9rXw13 z#Edwv30X;&-M0Pla5S+CA6e(!gCI|fs$%ZyftPk60!(U->4Ba* zs%N#o(UN(lfP*hCm?zz}Zcb%{r=TKYDlnsmlIoo#wv{Y$@|U}VlM-Ri1A;13Cihvo zU@K9ifc4eJ>6(-KYldhHDXVb)38trDJ{n&Mn1$n~J|IN(tUIJH{Q?aZ#)sBNMEGCt zAh|^qray5^{?DIW_^&nLW_TPJ(U~?kJiYMR9lXV+)+?HnmNg42PZU)3vVulUY$|N+ zlEmOqHOr0#izG3-1)$s=63xZzBUf+dFH3EF+i-wAWsu<ETDj z6RgBhXult@rzhjgiICQmsLIGlOQ3Y&bLsN*RAsRG;zz)gX?IrLF>Bdlmtg}{mB@L5 zkP+zgJ=Ju^I-NYIJ z)9ZN5W`#%K-`^C2pgj=L4ldt)%fymYEwPq$QxSqhJgo)CfEYe2VRrn2*Fn%_LROUq zOGc0lPt&@?p~ElBlGa@L4I-%E-DNU7niavFr-@eFC}MQ>E>^Km%IT6MkgJ+et>-f-3-w;QbTt# z8If+Z25TXPEr@@7;Z>fHA0IkZM`rJxa@-xEZcYJS9jSKa!MCSufN<_}V1z|NzIeT( z+-LDyrdsE?(uopRJ_)U};Qu;OSk4=zvY1HVpyTAKAeMh4f3fa&0+%NH2#_e2g&9eL z{pBewX{?OotylfmNoU|D`Gnxjke*oCqY zzK!vG(=rD&v^kRpIWFj*`G=KNm!18aCsc(0Ovq7W8k#eE#gUkhGJsFf3c>u;*P?~; zrD#AU;V&d6nm1h^m^Ybbd^D;=44IpiW=>3NzD_F{HLp=J$jp_TP{?IVrZy*w_X&At zQ|77qx-9&p_y*AR<~Q9+-&%Z9(6Y-5YtsB?hL(JAqUdvSaMucXj2B5i{PN6J&Y1kP zFZ*F^-f_NqH~rL^@#lxmJ3;Ka9{+IvmnAC68b?ur3Ix>6_CHyo6#ttgD(d$C5ox7< zrM#?$`Y&{c)R3J*WQ6ENF(oRxsTW_s61b6Ss)(j&WGrh&kD!UfI;nK??Q6%c{+|H9 zdzo=7K9}E>%)gS^me*~PFF7qSv+*9zkKDbxZRfd8jNk9G_C4U7eniLXft(0xYrRDSegFS z7P|%+Pu{s2a8`Yi=p;7Q){Y7-F8{Y!MRV15a9j!NQ!gvsHJT;1^xTvxbR{c6+A=a) z=UB}poM{I!a2E!?iHa*a-RSNBx@^w8DUr(K1FomoyRA#Y=;DaOAv4anVJMe zr>Z56a>_{Zebcf#uU7sj3Uf#DTeJ3?`${G6$n z_Qg6<7=W%4o^2|R=Lw6FD&`_UR!Y}ZzcZBYjRk#mNU5}Aw)MX@3d>fT=19o1iZxpH zWtP2<>T!fUC?cgnUB<=L^cq#jZ4|NQ;`tQzzxxe0n{6zvgXf-=Ro69#bq2@ua0sd5 zFGkSK7Z*o(nNvp`L_VQh7`g{L`Sh7`P_%<|zfM+?Ztm|4?6FbBx-$*0S;ywwyok-Z z;V`DZX~_(S#k4;JxY;@1_Ug~pJ)2oM`)QSui}IvAAncZ+^HCk~cFX&2ix_tOq&s(| z;KHWlBHk0?xest$PIJ+;I-pEDIZ@qBo22$KkkFQQG+Fiv?=>>Kp+qWUnquGJ)$X_{0WsL4%Wf0^I>8pbPsli zd~jA3T+R*8h6xANRVr;%;{AQ`0!C`dqEPf={l^O*l~oKyc_1{ zWmj0=4=lnc;8$N{kfnj}?|$auSnC@9htCtKAd`8;DR z4bj*N*@#EjcJQZ-F#m?3kf+Ugc$7A>gh(u30EU1^?8q@);k7_@(6GcOi;|zB=;9o< zj8pXJ0?=W_0=*e;O!x9o&~ZrUm|N^f!cd2@VzTpcbcy2?G)(*qNBL;%!Y5>|v>`OH zb-5&V`TEA{Vu;&CG1sc`RkiHPadCQ|az%PwbntAp3=mo_lepoj?7=E>E7QEOQN01w zmw8x`EaDM4Wl9-A?2Io*Qm7(@GHH@8$_|bDM^F$FsY{yViJ%LKh~bEW#VA&7=_H<+ zSd}|6eqe5yg{R#3jO81NgRLR*i^c~`Czh{M?u+M?O-O^}6}ppb;{1Sjw;S zh%U0j=arsmwxcwcY`=zk>KpdI_&)Zs^CJ-)2q*#mf8u+p|Bdezoa{Y3|6em|vC6vg z%L1sp%B!>~AXh~d0r)l4G|`JqB%@#<1Pc;P6^`(Ty)$y+6fWk|Ez55e#I zi1*@HcP?xD!G~=Z&%4}bdCpu*9}iDk?m*QVcmoV|-k1aMh|C=q2k56ZDvb-aII6na zj*NFkfrS}(!OomV7VHYxtHvk{hp}z5#$5J#qlMchR+jStb_GqRI_ZD=vKij zG`EbXZLTC(WLb?#bAa47mU<8FLaEM5aQWAcNZVa{^cq44e{o97Hk7=wq{R>5;VSB5 z`*9bvSXOGD)yWQy%@g~tWj$&4*aUf_?3CYg9lqnS99%v%q6N#ES9epl0%8nS{OF8F zMwq>^jMz&JC&#rhUYakcKU)1!@erey(2x%jlWMdQ9h-=G?TDr07NoOM^j%Uf*J{7= zV+?jC;`mdvgf8l)ElPhegvwe<4LR<~ddw_xqOX?POE}{~eI`{?B!(CO^v!swW;)Q1 z-hFKzy_@=)tFtuq8dKT9ns!R<3y!EzwM>;w23x)IOhwtXKhBH4XniZ#h7yoQ83-^d z{Zgb|Q!XL6UZV_hE6`DF6zypBz0X)Rzi6{#xXMM15||u_4vB}Ae_>2@Kpw}N7yjztGpH!gq|GQ9|^c_uwOlB}wFUE0~k4lN1S~Ts&ulWx2A`oZ6jvd&ZYn zx`pLH<^Ty@b!Y!IhTJtXhUkfH#A5rIdj0=`q33-&8yN@?5H;BU1Vi@!e=t;bw{$VK zP_h4iYX7$iQT~!&Qb7HsyIQSH2{(Rx4OM1WfO(uZ2?=PvJluxL#XLluDn+Gmvt6`( z|IIfcF=D~?dyQwx(?)LwFLJbXlIzX8%e&)lfBXG@d4UYz+>RF%(i$KsGl84zC@#QQ zBC=3?rc_x5GbW1yPBbr;i11M##T6#%(xSkjcPhP3cB<6yYtZwls%L)2uD{9ZRDb;Y zzDqr2uHal}{h=AIUagjDNN4YbR%?{qtN!9}YtHmU#A!)~8^!^;FGOrl1S zHoG8=?($>kDXZ_F#vG&5Xb^FznU%AxF~h$GANG-s#~Fd^P)-M-AydkIMPS-v8(m0m z-=$Wlx6$;CyytWtjoU(Z%fKUd^7a9|hI@N!B{tK(vm*l_ZuHn??ra|L)wW;>B}rGO zQRF5TdZOK^)73V^k+KB_GX*GXTH`=U%TXUg((#w1ekEmjCf6H?bNELaWVAC z*r5(pf0ezAqqlu&k1rMVMMWQWAXH_H1;vPlZTw49WDN7Bsyobz;u}_li%1a2iF5dZ zgEL%u&|ylFDAhitw!6_bi=CGH*3L03bkz>tO5nWHZih5X*pvMkF8}|4o%DbFSn$7U?EeP)|2<~V4eg_{ zg2wN6%j8L)oSq;9#ZW_RJw8bU1)N9-{b#}qSwH|M+$13Jzar2ZDqJf&T5qM%F743V z6Rki*7qnolcC@Np^{uR{cWkQFXeaM-zIMAaCCUDL|M=(k;b*$<`MPtyZ9Dg#<#Zi) z+WYq+0+n%ZWB+R$wRZ>#x1Sr%&sVqm*RfAO9E?4xzmxA@`r=@Q_VxA4)N z@-JuBzxL^j@*`+gfB9WnE<^6QZ`!~3LEYt-%GWEF$-n+-&Gi?8bdLmkZ}DU6`7sWK z?8)8rH*a=t?E_Ne4nOBwcbf4)PV}@|Wf?Aq>-Dd`{hxU%p6t&*YG)A%!@w4kUM1puBI0~t7P_m+ui@`00X6uDr8HLb^5g8hxA`^)nHH>7?93YLI8`aQ_BB>tb z8U$-iZ2R)(2$Y0A~)R)?j?uTR-8 zjL`T-C;=R)d3#Hu)V%Ubq49aul@2(L9l98PvNZz}=+>@{bkblIZ%Y@Qe9`#CLC;Ht zkqKmjavq8I=a;nQouW*>CZSN-9ERgBc<%RDc4ufX15NC z`uU;MB!Eg;hqkWJP)EA*$|BFdCi;qb1l}l{u5AgW)gREIh%w%i?dnMF>V(7U+(maQ zFoVXwGLoC(nNH_6|754TEj;J#>WI&Kw>AR$?4y8zcwt0NieHwm3wX~|<_WS2qmREV z(#GJGYt+787@5m8s`rq=h+iuA1$YEOe3sDp6-Jjw;PfqzECJqA>0X!i5$ETa0Ul}? za~Fqe!)0f#4=8?sQ$?KoEy-Gb19#&KRz{)@;NnH->Mk?#Zms` zgg@bAzmoL%mxubpv;J3y{8{hQ6WGINau1>J^<=#+O=J(LbiHm-|008*pWt0TYRMFS zc#&Bqa%@VEvry$IONS=p60x3(FO_u(c90k~CDhFLDfG~)*V+`_3u0B-5j0suGolY}>mM=aTxl`~FI?x{?m z##UF_Ly)9<7vIoeIYj7J!gL-Z_OlpHB-$MbRQ=|nH@5e&fWD=zn-d*6WOddsK^F@_ z)VNo{CX;^s#Js@WKy12?bF^Rg3bs{zF!1$}Z4zc=vQ}PW=KQ{`b>z~Aa8K*<4zsJG zzLs_yElPB%$83;_DO^i0CNxOJr$Ltom$u!hF{F8@q;I4>Z6JYkg<7j8H5Fd^N?Xg? zI!jxty2{%65;LX*aVEM)c15)|R(1te8HN$F`jVAxv^iTFgN>!NjfJMN&fd1F&RXNN zRy0i2Q@guXI=ebs%lZ<7je#PTUFod$jc)MzvW%=oZ9_qI2hgv*a;dx7)B)%%EnD1D zT2hz`Sb=I8%Y+jn^(}&#(tia)k1*(Zh~UrdSG&7?dKUveNJx`*5#Ps% zZSkadam)rmnj92N^zdjb=iO5eS~-6C+*&&ZG0onF%v#79rs>)%H{#=B&%&waDgIW3 zAKc3RNgT+kohBA(oV@5j1CQ9K+5<}+qC)PaPSH>}g>PY=5ZxR=Tgh4fpL>St!7s>w zaWKtats8gnFQ7z??X!@nfkj2Ae!{U*EXALROQ|-|XB3)d|+)mO|q& z5T;JC+L#U)d}YUa(IHpsiVxx~gk}(2-mQgjKo@|Vrf^_Fjrpom7oZs$ny0jV5?g;W z+L;5CkJcqLgke}v&!ENk+V~c*f+HEXGUq8bFPb1oRejP@dYI&r0tJ<~%QE1}0W%jW>0Z}r`$u(;s zt07o4^3r~NQI={~_`=u7P>#BaO98l@77%EpH;P=Q2qxEwmGkS>aAAq}gaj=GCgD~> zunM@VVh$bao1URRtcfsmvVJPN7B;g7fsJ0p`ZIe#*)eY5shqkyqGIztccdz?%j8*a z5t6{cO~u8S=Kiih9mJa`&QMShYW`%vm^%el4$h=C5CvcgV&Zqvh^ z9bpKPtXJAxM`gaZ{b7vk@XV)#{W8nPByenub;Ayc0~rF#Io#E;X8tC|1v7iwD;rpG z!`~DqL+a%pdd2rht;L8YS^5qFbpkE+#$&H{md|U*ndG&!w_0XkHUD{iDhFWM3In;K z$4b;q?AK`!XvkH?mB?JBva;jN7sG@GAdbsz8C6`tL=0@Y=YonK6KJ&w z%^HUc*a`|n4@p8;Qo>H9tRH(_%c44p7j2^vMJ_%{wyq2msmc6 zd94$cRYw#sP<^CH85}WYQ)cCfaCD|^m15m)$6Wo$P3+&q&O~BopAKnsg`KTMvlTJE zyT(L@B_Qo~<9JG9Hrs*~1`}rEs;lEcLQg2WoXHn++>5{sQfs*;(n&UzK)?*v#I2*? zk6te2yKpXPHaVdt||%@Kr!D)wukuE;)lIXJCrbKTw7(qhtBOVn{O!|x+*rBc-N zdyJuMre;La5C$p9VR^_R+Z92&W33zMJ?EOHy}sH1gJAA%z!LAG4!%l-!dj)S?mCe# z>0ew~i?Ep^1@Z9-N}!f}lJ%~TtjxlhDrmNdI(;j93Ir)1j3su!Vpl-OqQ?pS*o#hn1wU+qlKvG;! zx+p}eSrdPK`#icpYc$1}olZA*l$4d69A@E=(Ukqu=<4$_gtz)RQ^utGoXLe^OSX&c z!NK*~Nd*h3a|2&TIOo1S+c;-KT@{iEK183a>QuzL)nn3qr7G~nnlO%ir7fPniIMPm zw$b)fiMa+#pW|aZnudc`gZ?*bc4^|Gi7!hm1sJv;k*I%|;SG)y>~(_KouF&l@U)Hy_e!~C+CaUbnw4WYesoMDJbS7P z?}o%ZmVo9IH!y3ija2w$cWmKQM;M>})X>H=V1Us8+o&O$WeZ8{=?o9 zfkOeRSOmH%jfCxfwv~wmKR11r4T}j%mrU{u#RKI7xF3FB4WP2KtWeLE&nWO(@6Nae z#uQpFh4g9MAii-7euF5z2(^sT`qp7{WC=rSQ)fqOLq%7VJ9~H2Oqect3f_~+-5|yS zp6?LxQ-TP&RpFP&Pd=R0o&+LHN3g)LRHSBB3hC#lI>p3`NLK?s)OFJZG3nr;cJ#b& z7)2NVT;;L)kZ@(W#j>j3%AcVdnmGMK%@@^cTENNZ%4bx4=v1vWu|+DJXP8K!)kB-@IZVMN z&A;2?ZX?w^3puRH5j~cfe zdob}uEjz4RL9b*YGORnJ>;%YrbRXj}8txU@dm|xzK11vkc}~xEuBEe3<{2R2p*-FU zZN7jKZKG)Q_jR7Yh|-u+83&k{8lek?;S>siJ2$1lm;FQdgV?1?C9GA>U|f3RNc`?H zLywRv>mfv#HL6B+ZuNDTDvyx9xU(C5Qx!R zK|N406xgaVnM>fNkipFSkKD6vRXw$%O3qgzL$+3haYXc`lBnIiuqVBnPI!A{4C|KP zjWRzj4gE~G=Q)H_8b#cvK+i<=V}1BR66TYF_oRyJNLR|CSrVt) zLEaEDFhg$<)FgEKE*+xLDZ6f=Dmx~$f&fR~`vb#NJ34`!L!s>`b%;N+IyG&zF0=W~ zR3C(K8fZ^F=sk?`E*xzgQGSlI+LA1XuWwDC(%)TJ;h$hoR8N75#irBpP22C4Dl7NBtre0)V;XX zV)(Nw)=7NaIdPI=q?YvBH)HKS_NxRIEfB-gKDiI!FU-F8Kq~ja%MqepCR{}mX-)Fl zKI}($Ej~}>-qeyJ+k*(0--Zu?F0wtgWA5c%Tkhb4)6;xC~j%T`dY0AyA@T!p zd-`#yO=Ikk2f3Y_#zYV9s6YiCII#FK+GBF+&2wnmJVZLZ z#Xa^j<2z9=rey7TYyPQRS;<&}g=Ub)3&ek--e>DGsrm3!AQZz+W>tMr+C-y%Wg)+WH>_iKz&Rb(m z@0U8}_Gh|B_I10#K@aabu)=|M)1@V~6;QnD*)wd((#)3^QwaY_#bk0c=<>Eyp8m}$ z_iS7{iuS)-A(PtQTVw%@;|nPx*|hB@2Nm`ucfN;zmy=DwOTtz>>Z8WQ@jh1Zf(E8o zIKhmZ{bM`!CkbQCpQ4BR(Eq>!pF_7#4Q}hlc$wo_P0*jLpGVWe$aA_*IlZu6tk$5VbO*4fr+(@K^3ei{o<6ioW578o?gD?EI?rCWHejdd`?44s8eHj&Mx4opC%v2TsS9aXt`FSM%-&E)YL| zH%XOjM8&Fd?V0CW)4aU>ThG8)OBS^hq;>#>rmZEcq`~^r^n;1&xQ4}MI(>~zO&F#o zoN!|X;=n~F^aZ>+%{Q{>-9-TK)R^`6wAo-5QOes%jXjH*3K3dRvXwW3=VrCqc;y(* zQz&lLFyjbgiZIeCUrb7^>J&$B%yyt&gGs9p&haJ^{bjZS>jho7)XcFj@z)Q)=o%7~ zT_a!o%@gOmTpD*!qUpwZz4=&V-z&pzSizN&sXG5~)1HgrE7^0g50A|LN;hiz10NPQ* z){;L7*VO0b-MZ) zmbPlTyO~wBS}NOW!6CC=aPyvGtP~d6>^OsK(@apRLU)-#k6EjU10(*O%BPifX^&=T zNutq%HHOKGI1UdZ(xVES-SYqh&f3H9f{kI@9e-KgxOuM?`f76&Krcxs9j4}WW%)ic zWvxYp(cZ?=LT6#6p|mq>@aYZ+W9#kBqJvapUs+*UTGeD`-DrOpShvl(HvG96H{{8X zU{$BJtgW;!bf{K$guue|{<^S}ya=dc8lg8?XeBb8TK28WLRDmpl*USyTBa{rnmXX1 z!e9IMAog|a_Q^Re4V7ivOpf}>OR@0Av=U&BEk4Y~sKHvWXz3Kk!Gt|FJ~%n#sByQB zyrv@`)RnrssbyknE$nNZ+g{e&YU-%m+Af7R^3PwyN(qk(r&AKohx}9bGE2vNUWgl| zhP*64Lht01SH6GGX4p@KK=ASHgS#!CFLnJ-B<8g2wyduVWMBIpLpR~KM} zv)r4u-z@bo_AK|&F{0gN6}5IXw&gW-btS#+YwvVI_+9YUm9ifB2Xxpg9IdNr?KE~4TFJVN z2voLKHiIQsR_a>mi#(U=nhC3*R~G_1#e8kZ4=d4mpVllPHuN{|)gH1LO+765oCEe5 z86RdPTLRxaYPg^OXo#dox(U< z8p3ngdB?}ONtZ(M`gzNW^M_$~$-itIN4U|_P=O{-3vV2p%W4%M;hd_nT5_#F5#?CZ zUvV%6|Q?Ow6h^m=;eFvrelyYCohdi4-%wrKUpL)#t{g z1@uzU%3NVS`|>G_Cws;j)`Ywc+D=AC>v>9QVrMWhRh~QTGg=uN*>gRZ868XvXATaP zgg>@c^_Ui8vK@OfvPlHx=2&HcW1a>0`mB=Tfae zGe1e9?I1(ODoz#Q<%!nhZ9PPkWm_-oRLNe0Dq~fY+g&VWS8`HDbS4=qYf5DgN37yK zT>MAjtSb!RU`41`(ipY)?wspl^68avTX{2r22(9-d!-vGO6`*q z-G&7vT)z#sF9UV*uyXn4C5919XlONwxm{E!EGV`vqs3$!X(XIZX$_zfykev189k}f z=Yb!*>~&j(E<@p^uN)V{G!I}$iD#s#F^p4MB39`z))vCLG+i}am1l&eep(NyoNR7H zZwV0J48w9e!EW-S(Px@t7mcfm(qAzh9V z2XcTNYX4m&MNqUf;ysmLOXI6&yuKbKW|dy0_uQ?Q075{$zxC9a$w>!*l zB3dYe^XwaH2Q)Ghz=kz9Z*XStVE}P>1TLZROD&P|y>tiYM#y96-VL2OxH&3)m_Pg^ zmAsWd{De#1LH5u1rFfX*z5gh=W&Zea_Ub39^x}~je@eNb{p!VXN+2@$AW&Tf#uVum zxCZ}HnDEt5=?i0!2iD1l2?~*yu{T&h%rI0pT&>4HNY3cmv$lgzIr_+{&YVn*vnLLA7>u}MoTb+&Qk|9Y(eOc^MqF^Rbf;SpkI(9|+^Ma=8jLTzHva4oH4KgnoS>(%(>z`%0J)=>wP@$S?;~8PMv&q&lE44zx6(R|c%x zP}T=zPy;i60=FE>?8fNb``K*1)H;-391wW|dbVK^2Yv4;%3k~BMjn+Nh~Tcj$gjn& znGv1VWv|Ul9)c4_>-cNgOmD&#v8M97`_Ds_h7M#K$BXZ>=;!QC^iD z8n_#0Q62sc8bZbHls4kM^E1Tm`2K;gyv_@D05O|3ha`-T&6|5fx4hO%5pcur+Dihk z*~FK)G)#Qsj=UWrAAkNl`b}dus!)csK2+tFA80~bs%;JiL8CQSnUwywfQv?E^I7AvY19;qd0F3jy@?41V+eRo6SS{;hFfh1m2 zXBtH<^#=TlSzwrW0i${!JT9p`kBu^C)_g8J_(WLYc9$V44zQ>V>aAIS z%xlA9KSQRCNz|q|XDe5+MF;C0#Urx@toPn?u`hITf7(PL1ev_p>RebVppMK@oJp@q zuf~y&{X_Q^MwBnp2Z2vB)_Wa`ru-4xi_c33gi>#Ri!!*0psAM}3hqtGbMVEc@tuRV zB&mw-0>UKST&g7o23c3GKFRh2h-md{Gbl&$HNCT3bu+6-_kwy0NJSkem0q-FG2}=C z1vT?CbRGhCrX+fVB}bx{^fz|(E2NK_$c?WL`Qy6Yl|4t|`xU_pBkOtu$L^pr=%~<8 zb%A7a%Aljz@4Vj8d{?c zt=<>RH%?-YeI+FJOmZy}@vHetzAYsu#BgC97?lI{vG#uF<9hKu!uY#xEhJk1kIdN& zQ555cs5?)Um{wPU!EkD0RZ3Hh2u@}=$P38_*~B(KJg$SO|G<*XTzEwsb2HpWTf|?T z^WDfcdeezS3Hb!@!o0Cm8Y$sDZrn8^WJ&VaQcanXAV0wSm8DUhaA@Kp zHW6o`jW8%LV!3)Z0WR1bou!8g-Q(nV9%Mb+!PRXTIcuBoEUi_!aU7dX%RTXawS{o9 zegW)`O_N1y{_`6!u9I+UX;*Xrsu^RpQ#&|lJhB-)aeTFX$2E;3OsJ(B?&2>lW&i;M|G$K0_nqmSw@9d#uC%5A#ZzQsN zk-|QSlk3CsLEX;5Uzl+}9iB{og)Y29)0@Q=3i1aUH%YP7!jx6O>pU_Pc7biT^Sevy z1WC$o2RF(9>>JlNEM-2@V8o$=*cVCgF$B}!pIY%`!CKAKD z{*r3j(M-a!{*uz0H-qm{k=oJf3)Eo;a(&JBB+1c*YinRjal&KcT`|SK3Qw;ML1zV_ zwbRXfmtgyDF~d6`w*S(h&Bf~8p)Cq`cRzCu!9$BX%HY*?usdVbAxx(BL;scR>?Q;% zegujRzBM5$CoO3c0jV>_VND~U8BE`2-->RER^U!rV#UxC-Kf)vQXg$gXCUX?y@L`+ zcvivuGT;EPRFY`n>s)(wp`St=DRc>YjXDAN6Jah{ghn`9ja`4NCu*S0W0CWN14=R3Aogw~fl-omDjW zSw;v{i`%Fe?PpfQ9$9MC^MowT2FBazhsmq=c=0EpQ5wN|ZH+hf3FBjI?X8CwQwZ1_tY4{jPS#h zZwe@woES^xSIx8zHp@c%c*3jP0riW)mFY*NiA;nv-@r!vit4;)^*?LA|S1EpQ~FF^PL`h2+R08MTRcw9TOq@ zi#*eUdE1)NZHjO4c~f_lu6CDXZB4VW)_j-K`WEA|DZL&s)sJK5Y!%(vwA}ImZSZRM zHe~tj+^q>B^Ace-Yx^$Mxra@^tb=3o!?2dL@B>voH#8X3D4ew&JG%?g`8|R;o#_Wx zU5K+G)N|L5)JI9~7^X1nlbn7%drPJ;6<^kg7RY1e8hOGHc`IEp%rpI++BHG!6-o); z!2lxBFRLM}F+=r!qVY}VBVQE7YSvKf1L@_R;o4RW_4+2!%>6}rI$zPO2gFdESTJT# zu~LtD1)tfM`(2mrswpH%lI^=MXW06&#<$-Sw_!LAVV6j?Lau{hlTl-ef1UWEw;}vR z_dm}Vu}}UqUNTL5yZd#)37&`cs`5OI*yqwv1=We=Ld08LqVNSWXL|H;69%#phVuA= znaaa^wZde+TXLu5A>@4GuMN$Hz`bb>_YRLW&!blo6RAX)KuMcZ_Qtkz|$-!IE zap@FJs+p{4@DoVZ4&x8cymA;maB$O@9#XI+3F!Pe1WSbuRRM`;6sJ$Rutex>!6|O-0JAOM^vXz&~kKdRZ#QTU$jHB z{6OSBS4v($M_4PA_?SJB?kNLx^y%RXn?}nar5L7aEhkt|HzA;dzc@V?yMhZLf zWzXC;VR?oPDr1C8!=p7!_5HA{EZGqeAnD7UskCI9s7L zgxlof^m!X{zKZ?f1sz6lnBE1(QwJJH3D0x4D+E+#@$E>gKfIzY&L*0)(!P`&6vh`-S{7M)%y<)`Ikaw0?~gN!(~H8%0x~$$ zSZT|-4O@ftlt&HD`=f-)5(Y5Aob<9T8hH$U>q9AcZe-vR-j5Pz-OA~PXPL11L*|tb zli|U>0}KP2>3>)*s{B5^YflCF2EUwd>b5N))Ghj{;)mqMMm=s7?JkJTWhCyzB^J3m zPz;uYW2rh=>_ExJa?YNllg>V6&N)nF$qMD7LbEd<#VBc(o+LHyaH5*w_{)#RyM0r5 zbnDamlfP}LT3gu`^UYf5D78(nG&wM-HPWMzWV0_uB6MOKkgl^4vmBEhg~;ls`(&>NC8e=0?@slOfIPe&m_!>cB;?B9icIHPx&%j1b3kmuek; ztb#yr^B6v<%HLEEU7VTqQ&4AoQ;tz>t#h%7O)bGT1x9b01Z}G1D^$&GdxOTLQi*=b zPke7}XyaEIKCEj$b82_5^TluWsTDhWueI4XDecdQE8H*FLtUGqx<-nIhmQkw(EGi#zerhzTk0G0 zCGY9cD8|a-eqB;91Z@BiE@D zAC0@Xe`N3x;arBm)`Q^aAxsX5a_i97Yl+FuM`zj*ADRHW858R?#l{kAn%3J@S+XkB zvvcSe+fHG;iXR+#nS7pkaJN}LJGL5hY*k`XGI|s?p4lx_B;d|WX^z4zl&Mn((VbXX ztt1vQH%xunqTVA`dgguY6zpN)8&{Sr3wBCtD>8WQIhyr_N_2CoO z!BSNUAs6Tq$F-$l?7MvXl2dl~Y;VniMr*;MlOzptKI;Q@a~(eJVcp=?=RM4`&q!uk z8!CJubg&V3AwIrU_l;E(A9R zR=>;vs@}nfD2&lW+Wwr?0CSIi4Jy1;+?#oiD9br|mP{FS3u_h!EtJk+^_W~G(D=Aj zx#nI2R|um0fue6UHLHY-EB3Igkm_ClqoL)Xcd-qrf|9UX4DLStTX+j>Do2UYc>Kp0 z8&o@a-m>bP#shTKCX&vRFrTfTe)jCevOAQWc0tb*aKu{{S?YD#H9P|c0tX^?v!I^= zjdbtPb-Z1lk6D>`*6_(fvc=A;z(=4Q3@gt3YfkaO9}W zv9=A35rc1!*NJJ1_$KuFfUpg1a*K)(=pisOOrtZs$?QghZ7bVg%y)3C&_z&|4`%5k zWE51r4PWBR02z~^eF;vuS4J0g_glaXN&6uOtTjECDI40}SHLDhAcuA|^+|UQF;MET zKl@6IyET*Ij6XcF?jEs0Hf#^v@nw9~Q~J;(#v@S@@P-QCq$LZIJyvusZIrB`O^U37 z_jaTvVFTum0i=d($^KGLa^u}sxct2U3R;2T=CeM5K~Wu6Q@J~-sH4)6m9sI}Bjpl3 zwwXDrIEW(-e9_>3Sijh=j;YRuUC{Y>7%B{|Adbtw_eXbTnZu^=o}0K1C9Q`#wPnJm zA`}C7ZH=H^ZJ!*14zq<`@TdJ8THk|iT708~AGAU91Kk~%6^@)_q32D?3yE~a=e6A( z1rZ>VvB9KfWE)O`SC5TEPvM3d^mMs0(w0M?9J;UG2}ZQgm%pPfOpYKt(sE-H`dhs& zW>-vGUbQ=+BJIzoy7NQ#Jb+w5M=DdbV-XU*8I>{@l<`-@+6Q~!NZp=xJ<+=(i2X|= zb!TsA$bpwN3KLbp2s1^DIWTp7OUDuv+_@wqZ=!}s6qiZuTOXpXWFPeL-ZQVeF^?x=dQCPDn=-bD$j{hz z=#ZK0>k$Rk!yUMH3C%6M(sagmS>3ez;XL)Hbcf%66c}35tQ?Goo?aP^|ip+Pf_sTS79YyuaQd!YG zFiE7?vS$k`J|1yR8_bwCfde%r##;zli)@wxoz2eafX!-ZTWG+ckm@MmiI{eK zGmOzRfUBpUKXHYgPHlyLw@i%4oNu*6QKxo>={QZNQdzN#XS{+!Mh1XtRX%krgEqtI+k?Z@0p;XJ8TXYMY78zuAMD2mjV_1Kb z@mH%}_1-(SKM@(IFF=wqYewqT0L;aHI#}9R{o8BWkiQA1qdJzub;6z(Z$AMoLnVQH&DUtAUjlzr^TGludX&;`woO3 z-85FDztchTG%Lg3fw%Y9_Z!R}m|_+6-dtZofSG88(3znD>KUC$8CHl4?Z6URzb+;> zUT}v1VW;A3E>F>Z^CHz%N9%#2b^vtR3VV!3+m-rVr1G^PkHfe3iv@rA9!G)i{>F~A zYClZD2?C{>K|a?7Qd>q*l-i6?lThOYLX}{Ja>;4%z@`Ub!CDk%;+&%fb=c*y{sA}JZyBwbN@`g-JmWrHf?ez~1;i!i8M$;-7g zELpj%_Vfy@>V248R7FC@;e&51oavt>d8oS8Y+SraZlx`rG)`J=+*Z8aH9?tq!4*Bi-qf?#jZ-l+lOd~DBgmh;4PhWgz zf^zG#Bl%N;W_ll4eIbVC-}}Uq-tYhNau}(IP1rx2qVyl7+Nu8MUKTSkv$psj$`Waw z|HP9(|F%EyB=8{^-K3-dKTAk#j5#+*M9w6nad2UmLc^s#AKD?`TgS@=rh8&z-K?D?(eifz&G(-6V6Qo$LdR#Tp$8e}P?|RHpKTr5Y!fa%|sURFAQbKWoIp6f* z>}W3}SCZT((;qA>LjugfBj{qHZ+Q>>feet0WI77KD9{@xlAKg0$q_Wvu6wYk%>FQK z{iJ-vZ1X63bh8nC>u9|WmQ{xS?IJwh+Z5$h-L7p;lK$q|=tLJ|VXmeEb6?5Ek#+g0 z05&pu&VG7>>P14=D#+7;)1FZ-A{ ziY66a%|L(^`8T#zLWoGJ^dX%&rvsz)$XfbJLO-|qPqc$0amh1d%kvMmW5?GX93JYN3{~R>?KtjLX!>(lVuRL!qf^W zwNz1=kUI%CzJ5>hTz-iPxB^yaunq;P<&$ez1bZ!ssbc8D9v~UIZHMhER^Eo%*0reu zQ@|~C^ojomfgy_3to`WRCc~jj2RdsmX{j2=$P-V{eX&HwwL^E!ow!GrndL&H_1}(i zWn!r*MU%RG2qn5UtZDHRR(*hT1)ZE*V$qohUub z`{G(pGtINrG=2_JS~dc<=@9Y+mu=XrB?nrauu#?=)jQ4^6g4f(T!&puh}%5_oKuXh zuvZM<-$)d~{ZiajduG{cjz6#}=3xc1WO3reL?o zK(|F=)ps`^YMdwpJs%jef+;cqid+M^I5a%nP1)}IiR@HarW}O_emy1=P5wfG0pD2nEN9TOG}R%QQw14@2aeNh*hE>nyQszm-* z@-5l`RFM8`Mu4NeVv(i~>QqBBa8GjlB5XW33ny^3IaJQ_Bq|-!s>6h6C7jklE-EWZ z9T1mWqV6Z6#i~xG<(0cGwqbJvRD9ZS#0=@4DOKjE(o;;5v+rnDlffi2Y`2dAjXV(i zL%S}W$865D!<%USr#U}`-JU!q9~FZgYO^5zvVgES^_GIzHZ!N+AaqmX;cL3{eKARm4$h$9gV=bD#4c6ZV>>g=9 zuG~Q=p7wrhkO`l2**5Hr#=KOOD+d`3x=Ad#0>w1a>MKEo%%0~?E}<86YxE@jC@6bH z2x>T)OkysFP;aDZ_?C2=Nys3b3x%jACfgbVzu?fN0L2dWx+4at9r_5h7F!JSE9LPw z31>^q1{w$&TJ^Crx6WK`%Nusu{wS9+4}1%_iJ-AZR5Fz3pb+bOn2LA{PG282yB95fh$ONFQMEi)No_9PvlJ{_yvT zXI2@%L9o3MsC@pIu5e-6YHCe7u}qvXLn^ouNh!B&dEuH1>sEgUsZ~RJReQ#}CmUXr zN4PHg>&9Njk5nq~ai_c@DF1Rm%HDt29f81#IL?i~^~Gh51IFc~JVH$K75vS_ith}~ zB0nRAZ*wH{&r$+NRw%rN00CKo|Nm1;IoR4+CobLx!2 z9i(lxBWSf#>C{}PeJ*S8$`jdz7sKHI6U-Qc335to7urf9wbcGn!VG=(_x$`@9U?|3 zpG1rIJmP*TFQSBviT^P?IpbnAdfj@x6T9t_vkKqLHfl%v@EH$vj%`ybx$3mFI8Ix$ zh-nt`QYr2;5^ekN5+R96;6gr&<{d_F(|1^BEVVnCm++qaxz03p{D&yst_><`Kj z7=r$*_zo4*M((lPG=?%u3IXXZ+#C}_R$qFtH%x?I%$1~MfDYmDjF8RQP?`YKDZv~u zExZmnW$|Od3f=!-k}k`hRV*+6V1O0uKQTq|zh>(HtC{G7u7&fh(9p@om!ZEF2t=PK zrH`MaoRrX`uqUUFpeHZ53hhG$WM9otidkAMtm_b~+bu`7tgUG3!L7h;=nmV0B`N?m z0=deUPv_%)Jr#Wi7eB+q-%ncV^e)zFu#jKwkE4N%_bA(T=2s z5-Yx8qmTTC$n_ca-U-jU7SnRk*AzdPqTUF5m<}+yCd!FC?~x7B zoM6({@4~9RayW!cKm4aM^MLzGIBp@Mvt4gIJIHsX;W=**S-w%DOkSUnLFmhF!_n5x zoK@yL?B*D1Da|6oQhTUf2iYGqEL`% zNk%1vDzc#&vb9vKwM;7Vw4;)zsL54Rg}avDi9hWoPq(0g8E+uE(Smbud{l%J0+J&v{mTf>adl^xNsPLq|xcdte*qK=&ys$WxWb;w8pOG2BF#XgQ9;NL0T zyB17Sr=*vKhK)mr%2_o_um9mA6sDFp7gP1L-a$e2I&2DtkLWjGmIG!sP9ksxZ=+t1 zY3_)CaO#pCb0TnEqCyjg7hy>AlSYHaWw@<-si;A|nt@<pE&*nY1Z~~S@4C@1eoYbD|7+lGW*{p0*#Nmj&)2nV=PocZ)K& z?J_{<{X4upPZ77w)m>UI6-Hz9;8@NzAip}h1c8lAEkkgt$<>P{J;-pzZCD1mL%@!{ zXq8(o4va@G(!qm!5k*n?N&ThGHYTAjvoMY|(3xNM_xhH!z87iPS+y;|Hc}D`RD8s| zv1uYXg^Ch7LM$uEQ?4}9q&M+&qTi@o*F9%p5i+dCHHK+Wdt<5I_hRO-nq+AL+s2Tv z^PpoN$c8Ocr8~~z%>y1mrF{Z}suX_@PPbnbI@Z!qUB9R6~g5N~+qOMWl z(K_|J)ADDODxE44?~X*=g&1d2H%!>PoWQ89)sNqsws5fe*6jh6I_gFPMXUP{?IExG zGU|)uL`rStXa_J{Zaba>VmY2LfpsSgZGNi!{fpxEzL;)m(TzR*k4`#hpnO}B#4?rk z2p8p08FE8p#cw?jy86_%PQii@H$KIrqlYYQUiil-hbU!49&tFK3O<+$Xc{g^1#zQ4 znCKQHg1SX4(a+BOo3=!*@o`amIN0vC;kN^3Zy6P~M@vtDoGd|ZJ_1=xW`1@y=W2lQ zTbrEFz1ODr;RkIYgq>RwpLfoq{oY`xPeLDU`&KW2Yso{~HzwzN&z$|zhd=>p-s){n z%(cs!Je9!SW};NzZ7F5kNH_TTsoY29XYTYO@?S>hdkglt#HuFs%h#j(y{==Z`q+&k zbUv1c0h#JiWZZjh-8+gVu@Q&pc%=pOTv~~F8(o4?oDRV3An|T`TR44fU!l~r&Q|{V z>m9j4tkODRbi#RUe(KB__-u6ep}Qm7MQ{#gv@EiQg&GyjQI)-I_=!HJTO>7?%p+xw zw9{VwVLqW~&MhNn;>VWHg$JNX;DtMYInFCQA%NfDWli%0thSXRZqI%R$QWl2XzRY^ zbq{{9w(Yf*lkkGnqaNvv=;8eHvM^%#NB7LmK1ag3lDi+$zC?r%VL;7gEu$^gpl6$H z&7~1=5H<$h*GRtVVt#OX&h!jteu7nj+Z9dxcU(aFJ2LJ-BeGp<47)C&o+(Mis8s=* z`Yh1I87kZ*P=5d(i+nJeScaD^=xwi}GYS%Rr_=f%!8V>;7IQ8_J#L)$>4HWx9-F_# zWH@z2*$s~?N=YeYQo4X$zj@Z4=8Be2p8j87)3&<8+fzR60TFq!Enc3TTS)d@8P-`d zvXIIMQNw-rl~W6Pic5$tf$~p=An!`h6f>j&Qrk9t1)5vhA40Cx#hGM{%Hy9(QYX=5 zjjf6AMzK>JWG?m;kG%vL2$5MOQwN(EQ{PU;wF7AGb_XV#(fA>3QR4gG|5AMxVl_AW zN529<{cpD~0D!59nccs&FBUQN4g(U)PVWAxIye0 z!E*rBcPc4SpH#tGY&RJU0f7`;QtwoAk?K+K+!a>2Ij z7S(H7W0qQ`BZf-3U`{Gm!V$8b7U)IgIjXDAGH@rj00B+FzUTyPz}@`I7JW>P{tm-M%sslP2LfV|zV= z?R09R_xtk`VvnW+Be~vms*=S{kiUA?1Zp`e<}_Et)sqLXk0|M-{e*Hlq(RgkrZBe{ek&haPnjBXqb@8Vud zue8b$FNcI)edJ>rJkbW5mV$*(hJjUH|Mhu+dHJ&$g-7JPaOv$Eae`z_sm|3SJLiYY z9EYv7YF$dA4b#33rOjqeiuol>gxwe1=kp^@TM}j@U~}%_)inY3ot6_SCW<>Q8lAMe zM!c|5o1iPKuJN82v-jd3m@qanbmO{B#J1@p`X)ZM}n2h)aNt*enOG)p`4X}y5f zMH4}(d=Ms^s7-ai3u?E}0c8bl^BBE?S46i9-N|v%wmpXL$Y5)j6&Ew?7xENwhO0Qs6-HXUAOGgjmQ-zh>K_Qf2LJar^<h7+;S7yh}OQEpo23fIL&aq@SzP++s;s{YJ3`I?|5u(Lr4 z)>ee{AjlMZmY}5_sWO zgF>vt8bh`3`Y89bqFh!Zg$7?ECvSr{?G zfm@A9#cPw<8DRjJZ12q}nR@PH{gWdh3|fzafB5_2KXSzIzt7RX?=9E-fA*HIlUGwH z3j^#R#NlO#ZS8ANZBRt&f9RpsuSIPGQh~0GlK@Ul|AahyI_r#c*HWVNbNO$TvKO8# zxU@cSL01oF#@pkr*~i@1>}jL#uNS`GamErXzc*nm3!(QE!T+Ymm?C;$Y(*7W|Ww=E!z1mPkmAG%5U)H74J2SRb#q2$+jjBj2m7w!w>9 zcJ6n4)a_?AFT^)!OyyWje(YdAs>zT)*6u8^%ER$qb|KFP8m7U(H%pMu^$J}*#z>w; z9FA05$QeI*+F)?!JaX&JaehkElVB1|Ca`ao0$YNo%!cY+Gz_?C<&}(ll@bJ~tMNKc zH(lE#OKiP9qJXt&&lzbSSXNXq7^Asv24Q>xK#%s%%*#)5rZ^CU}0%p(KU9&R@=Hq>B|%7 zP?=Tg3X2aQ9di4gD_srH+Fa$KAW9?M?tnvx4q?Ktx%d_YR$_)=`wx#JKqkRd`}+70 z4VE)}8l0UbgQ@ZRGZP5!wXZxrQ1=y@6m#kO>(jLG@uL;*gWBJH>GhU3k%2Do=sj85yK<(3ACVn{^9$Nf6g z)wmS5!AG%BJmp}2K-h!~fq%4q>T{hmf63;oY4F}lubh7>bP|8)p;oMkKOwm?7Q5$v z!8e~i*>yc8M&2PRmL>k2!{~#1lIiC(rHfE^hTG0M^JKJjXz-umZseOB|rT=>$OU|+|;qtgj<$kP9$+hlua?O?U8d(*0jIe zuc`X^NRGa{Emq$uS%1qM$p-EehHfR}6pMZe^CB2vCBxzYJ}h&As9J4r7j!T`G|-e$ ziH2*+lqaq9O*!)ksu74L*oJ827EoZ9@fQ7_`j?$#0v72mPVYKmx#Jt;pV%8W{Oi`%!kPU4b>QS?;qvdddo}8IN@ybJ z-HWLXdX?&iq>;0HDnFu!<%N-}!Z z8{Hr)A{U23Ln{YPI?qx%eY^+ZnWkA>8*4iQ4;)w}H1FL>6N$iXOkCaxHcuRemjvQ& zes&tM4KF6H=_zu--|R0ZPrz^Zy?SUqTqRo`8paHnL>QA?fUrHgI3nxaw#jBxUga32 zoNfB(n^Wav0`c>m&P)iY*&GEO6XJda!LD8vzO`0gXfUfS%f_E3HH55J; zr-!Mu#fL?Kdj+Bdl29L+M7tk4@*trBhe6QSEP?O6Is2o|toLa#eh$X8JYspdD`lKp z;D4gXtYBEFsgYu7-T+t6>q?ztAGg+;H2LhXQi?GVMS9l}=boiKmM z0VBX6R~nRu_sZvb0055Ff0}coW?#kdW63E#N%j!QS#~E7NsmynFcNKciAy{CIg=pB z){7>RjKE-s7C=OhjZcpeq)><^zDox)cVg!n1>&`xFee4MwISZ&{WG2j*D)^_K|w&! zVg8$2>i>7*>Aw#CJ)n~Q)m?^uyQy|^gqD_sq^idLaQ@vEKpLQ{5iE@%jUo*mIJ7;Y zvrywJ+!BPW1c8cyip39t6q4>%NU4BN9GJB}IQ98uIr4FM+IkCe({I>^??CG!mk|g< zAOU6p)`}xvw{GXd`U|52elkYvD|eIewbPvqv1E7KMEljY`;8d-Sc-76&!5y&DwyHs z1w4q5XpFjdSlOOCz{+Og-(07vxD<4?ZeZ=0f34=sU_fxN7^jRM|0 zP@|%&=A}>y?dM-q*M>{!cB)dBa;!!wiq~LL2B}xT%`;mD1(zwAll{r@h*5IO*m4p_ zKd#dAz&V;ilQ|cWrLkd{69mwx5s+?aK@Wnp8+{|?F4bjC=VS4j8ddt6yJYH0Sme0l=ZZp6S9yF*&f=2vK5K?bRRnWS9QKwj;v}Wma51a_m~6im?SSW z9+a0jPcscM7KXF~VOAUa+=k2v2zJRsR?&EFbjwQLaX`F?*cF^X4k^3JVqS3V{-52Z zQs+VrKOBVjp`E_ztLOr zU*$kRu65g9$MBfsm?Tm|PZ<*(-99806h;OtG=wrHFV+1w#iqd)6w7_s8&~l^7eEMp z6h(W4jtGmRE!sOP%})7c`*>LTe||m?^r=;kkQ~YceofP*E8o!v{NO*eR2eo7tTS-n_CO`!wD*bPHoObc^5SmkHtj%&;T#*YawP!p1ZO`_-=H}ais_UNPbzXJujOr~r1s7@J zc;>BXe4i{E;?;A^i+Uj0wh9b1m@QpSyac~8ATG#~y21~Q={B2nwic1miag%t5F2>N zaz7qYl;=C5jm!XSjvpoJmBG9uGlbbE8lGII`*7A!7f!771YgU)kMXm(ZMq`5lI4dY zIe$`A$1P^!A{3o&?AE`uNc&0E72K4P$Ebx`OU|ho|p4a2*~Sg$fFO7Y1U$yt_}> zNf#B9MA0AwVXwp=SO#aQIE=L6j56npUK%V;SFG2Hc|)IM_Fni_OAQXG z`YEB`y`@lg(h;j~l6vz1;zyh;8rcehT&l~xFffl9+w7Qab_<m<2NFI#TI8Vi}G2ubnln!UW3g$jUA8GL;z4c?)$jg(qx{k_f?~O3wM8 z*&@7u1uDSD!B&7W4`dAOyp|9%`>A*NAE6NN7@`05Cn3FeopS6S0d)8u*GO>up9j#t zPl7ryzUs%#LR4(yIr5C;@Rz{Y1d4I;V1kI>!N|tU!DGR})^vzTa?a!Clsg$Pa@&

Y9GJncb)Rp|!knb)0 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 z + @@ -92,9 +93,6 @@ - - - diff --git a/src/java/JavaFileStorage/app/build.gradle b/src/java/JavaFileStorage/app/build.gradle index ba1bbfcf..602be402 100644 --- a/src/java/JavaFileStorage/app/build.gradle +++ b/src/java/JavaFileStorage/app/build.gradle @@ -32,11 +32,11 @@ dependencies { compile 'com.google.apis:google-api-services-drive:v2-rev102-1.16.0-rc' compile 'com.dropbox.core:dropbox-core-sdk:3.0.3' //onedrive: - compile('com.onedrive.sdk:onedrive-sdk-android:1.2+') { + compile('com.onedrive.sdk:onedrive-sdk-android:1.2.0') { transitive = false } compile 'com.google.code.gson:gson:2.3.1' - compile 'com.microsoft.services.msa:msa-auth:0.8.+' - compile 'com.microsoft.aad:adal:1.1.+' + compile 'com.microsoft.services.msa:msa-auth:0.8.6' + compile 'com.microsoft.aad:adal:1.14.0' } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Buffer.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Buffer.java index 4dbb64b7..4db2e89e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Buffer.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Buffer.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -213,8 +213,11 @@ public class Buffer{ } void checkFreeSize(int n){ - if(buffer.length max_buffer_size){ + foo = max_buffer_size; + } + if((foo - datasize) < len) return; + + byte[] tmp = new byte[foo]; + if(out < in) { + System.arraycopy(buffer, 0, tmp, 0, buffer.length); + } + else if(in < out){ + if(in == -1) { + } + else { + System.arraycopy(buffer, 0, tmp, 0, in); + System.arraycopy(buffer, out, + tmp, tmp.length-(buffer.length-out), + (buffer.length-out)); + out = tmp.length-(buffer.length-out); + } + } + else if(in == out){ + System.arraycopy(buffer, 0, tmp, 0, buffer.length); + in=buffer.length; + } + buffer=tmp; + } + else if(buffer.length == size && size > BUFFER_SIZE) { + int i = size/2; + if(i0) notifyAll(); @@ -384,12 +456,15 @@ public abstract class Channel implements Runnable{ if(eof_local)return; eof_local=true; + int i = getRecipient(); + if(i == -1) return; + try{ Buffer buf=new Buffer(100); Packet packet=new Packet(buf); packet.reset(); buf.putByte((byte)Session.SSH_MSG_CHANNEL_EOF); - buf.putInt(getRecipient()); + buf.putInt(i); synchronized(this){ if(!close) getSession().write(packet); @@ -445,12 +520,15 @@ public abstract class Channel implements Runnable{ close=true; eof_local=eof_remote=true; + int i = getRecipient(); + if(i == -1) return; + try{ Buffer buf=new Buffer(100); Packet packet=new Packet(buf); packet.reset(); buf.putByte((byte)Session.SSH_MSG_CHANNEL_CLOSE); - buf.putInt(getRecipient()); + buf.putInt(i); synchronized(this){ getSession().write(packet); } @@ -561,8 +639,25 @@ public abstract class Channel implements Runnable{ } } class PassiveOutputStream extends PipedOutputStream{ - PassiveOutputStream(PipedInputStream in) throws IOException{ + private MyPipedInputStream _sink=null; + PassiveOutputStream(PipedInputStream in, + boolean resizable_buffer) throws IOException{ super(in); + if(resizable_buffer && (in instanceof MyPipedInputStream)) { + this._sink=(MyPipedInputStream)in; + } + } + public void write(int b) throws IOException { + if(_sink != null) { + _sink.checkSpace(1); + } + super.write(b); + } + public void write(byte[] b, int off, int len) throws IOException { + if(_sink != null) { + _sink.checkSpace(len); + } + super.write(b, off, len); } } @@ -636,7 +731,7 @@ public abstract class Channel implements Runnable{ Packet packet = genChannelOpenPacket(); _session.write(packet); - int retry=10; + int retry=2000; long start=System.currentTimeMillis(); long timeout=connectTimeout; if(timeout!=0L) retry = 1; @@ -651,7 +746,7 @@ public abstract class Channel implements Runnable{ } } try{ - long t = timeout==0L ? 5000L : timeout; + long t = timeout==0L ? 10L : timeout; this.notifyme=1; wait(t); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelAgentForwarding.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelAgentForwarding.java index 6a77c374..d93a0058 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelAgentForwarding.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelAgentForwarding.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelDirectTCPIP.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelDirectTCPIP.java index aecd1889..f5d8f4ab 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelDirectTCPIP.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelDirectTCPIP.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -120,7 +120,16 @@ public class ChannelDirectTCPIP extends Channel{ } } catch(Exception e){ + // Whenever an exception is thrown by sendChannelOpen(), + // 'connected' is false. + if(!connected){ + connected=true; + } + disconnect(); + return; } + + eof(); disconnect(); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelExec.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelExec.java index 45322b63..8f6be684 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelExec.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelExec.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelForwardedTCPIP.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelForwardedTCPIP.java index 1eba4998..32dcb5db 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelForwardedTCPIP.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelForwardedTCPIP.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSession.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSession.java index 801be76f..ce44f839 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSession.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSession.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSftp.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSftp.java index fca709c7..0711f9e7 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSftp.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSftp.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -648,7 +648,6 @@ public class ChannelSftp extends ChannelSession{ if((seq-1)==startid || ((seq-startid)-ackcount)>=bulk_requests){ while(((seq-startid)-ackcount)>=bulk_requests){ - if(this.rwsize>=foo) break; if(checkStatus(ackid, header)){ int _ackid = ackid[0]; if(startid>_ackid || _ackid>seq-1){ @@ -666,7 +665,16 @@ public class ChannelSftp extends ChannelSession{ } } } - foo-=sendWRITE(handle, offset, data, 0, foo); + if(dontcopy){ + foo-=sendWRITE(handle, offset, data, 0, foo); + if(data!=obuf.buffer){ + data=obuf.buffer; + _datalen=obuf.buffer.length-_s-Session.buffer_margin; + } + } + else { + foo-=sendWRITE(handle, offset, data, _s, foo); + } } offset+=count; if(monitor!=null && !monitor.count(count)){ @@ -736,6 +744,12 @@ public class ChannelSftp extends ChannelSession{ } } + if(monitor!=null){ + monitor.init(SftpProgressMonitor.PUT, + "-", dst, + SftpProgressMonitor.UNKNOWN_SIZE); + } + if(mode==OVERWRITE){ sendOPENW(dstb); } else{ sendOPENA(dstb); } @@ -923,6 +937,15 @@ public class ChannelSftp extends ChannelSession{ if(i==-1) dstsb.append(_src); else dstsb.append(_src.substring(i + 1)); _dst=dstsb.toString(); + if(_dst.indexOf("..")!=-1){ + String dstc = (new java.io.File(dst)).getCanonicalPath(); + String _dstc = (new java.io.File(_dst)).getCanonicalPath(); + if(!(_dstc.length()>dstc.length() && + _dstc.substring(0, dstc.length()+1).equals(dstc+file_separator))){ + throw new SftpException(SSH_FX_FAILURE, + "writing to an unexpected file "+_src); + } + } dstsb.delete(dst.length(), _dst.length()); } else{ @@ -1375,7 +1398,10 @@ public class ChannelSftp extends ChannelSession{ len=1024; } - if(rq.count()==0) { + if(rq.count()==0 + || true // working around slow transfer speed for + // some sftp servers including Titan FTP. + ) { int request_len = buf.buffer.length-13; if(server_version==0){ request_len=1024; } @@ -1782,10 +1808,17 @@ public class ChannelSftp extends ChannelSession{ try{ ((MyPipedInputStream)io_in).updateReadSide(); - oldpath=remoteAbsolutePath(oldpath); + String _oldpath=remoteAbsolutePath(oldpath); newpath=remoteAbsolutePath(newpath); - oldpath=isUnique(oldpath); + _oldpath=isUnique(_oldpath); + if(oldpath.charAt(0)!='/'){ // relative path + String cwd=getCwd(); + oldpath=_oldpath.substring(cwd.length()+(cwd.endsWith("/")?0:1)); + } + else { + oldpath=_oldpath; + } if(isPattern(newpath)){ throw new SftpException(SSH_FX_FAILURE, newpath); @@ -1827,10 +1860,17 @@ public class ChannelSftp extends ChannelSession{ try{ ((MyPipedInputStream)io_in).updateReadSide(); - oldpath=remoteAbsolutePath(oldpath); + String _oldpath=remoteAbsolutePath(oldpath); newpath=remoteAbsolutePath(newpath); - oldpath=isUnique(oldpath); + _oldpath=isUnique(_oldpath); + if(oldpath.charAt(0)!='/'){ // relative path + String cwd=getCwd(); + oldpath=_oldpath.substring(cwd.length()+(cwd.endsWith("/")?0:1)); + } + else { + oldpath=_oldpath; + } if(isPattern(newpath)){ throw new SftpException(SSH_FX_FAILURE, newpath); diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelShell.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelShell.java index eeb24a39..bafcc39a 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelShell.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelShell.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSubsystem.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSubsystem.java index 3f33bf3e..697b9273 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSubsystem.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelSubsystem.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2005-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2005-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelX11.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelX11.java index 393728c0..c69121c6 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelX11.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ChannelX11.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Cipher.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Cipher.java index cc7084e6..da1e9411 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Cipher.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Cipher.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/CipherNone.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/CipherNone.java index 61f836ab..9d4e530f 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/CipherNone.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/CipherNone.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Compression.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Compression.java index 7ae79220..96cf535c 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Compression.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Compression.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ConfigRepository.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ConfigRepository.java index 9de4a5c3..ca799034 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ConfigRepository.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ConfigRepository.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2013 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2013-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DH.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DH.java index 963f13c2..ce79791c 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DH.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DH.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -36,4 +36,8 @@ public interface DH{ byte[] getE() throws Exception; void setF(byte[] f); byte[] getK() throws Exception; + + // checkRange() will check if e and f are in [1,p-1] + // as defined at https://tools.ietf.org/html/rfc4253#section-8 + void checkRange() throws Exception; } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC256.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC256.java new file mode 100644 index 00000000..c2a7d054 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC256.java @@ -0,0 +1,37 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public class DHEC256 extends DHECN { + public DHEC256(){ + sha_name="sha-256"; + key_size=256; + } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC384.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC384.java new file mode 100644 index 00000000..3fdcb78f --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC384.java @@ -0,0 +1,37 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public class DHEC384 extends DHECN { + public DHEC384(){ + sha_name="sha-384"; + key_size=384; + } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC521.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC521.java new file mode 100644 index 00000000..b9bb0910 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHEC521.java @@ -0,0 +1,37 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public class DHEC521 extends DHECN { + public DHEC521(){ + sha_name="sha-512"; + key_size=521; + } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHECN.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHECN.java new file mode 100644 index 00000000..ecfaa094 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHECN.java @@ -0,0 +1,187 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public abstract class DHECN extends KeyExchange{ + + private static final int SSH_MSG_KEX_ECDH_INIT = 30; + private static final int SSH_MSG_KEX_ECDH_REPLY= 31; + private int state; + + byte[] Q_C; + + byte[] V_S; + byte[] V_C; + byte[] I_S; + byte[] I_C; + + byte[] e; + + private Buffer buf; + private Packet packet; + + private ECDH ecdh; + + protected String sha_name; + protected int key_size; + + public void init(Session session, + byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C) throws Exception{ + this.session=session; + this.V_S=V_S; + this.V_C=V_C; + this.I_S=I_S; + this.I_C=I_C; + + try{ + Class c=Class.forName(session.getConfig(sha_name)); + sha=(HASH)(c.newInstance()); + sha.init(); + } + catch(Exception e){ + System.err.println(e); + } + + buf=new Buffer(); + packet=new Packet(buf); + + packet.reset(); + buf.putByte((byte)SSH_MSG_KEX_ECDH_INIT); + + try{ + Class c=Class.forName(session.getConfig("ecdh-sha2-nistp")); + ecdh=(ECDH)(c.newInstance()); + ecdh.init(key_size); + + Q_C = ecdh.getQ(); + buf.putString(Q_C); + } + catch(Exception e){ + if(e instanceof Throwable) + throw new JSchException(e.toString(), (Throwable)e); + throw new JSchException(e.toString()); + } + + if(V_S==null){ // This is a really ugly hack for Session.checkKexes ;-( + return; + } + + session.write(packet); + + if(JSch.getLogger().isEnabled(Logger.INFO)){ + JSch.getLogger().log(Logger.INFO, + "SSH_MSG_KEX_ECDH_INIT sent"); + JSch.getLogger().log(Logger.INFO, + "expecting SSH_MSG_KEX_ECDH_REPLY"); + } + + state=SSH_MSG_KEX_ECDH_REPLY; + } + + public boolean next(Buffer _buf) throws Exception{ + int i,j; + switch(state){ + case SSH_MSG_KEX_ECDH_REPLY: + // The server responds with: + // byte SSH_MSG_KEX_ECDH_REPLY + // string K_S, server's public host key + // string Q_S, server's ephemeral public key octet string + // string the signature on the exchange hash + j=_buf.getInt(); + j=_buf.getByte(); + j=_buf.getByte(); + if(j!=31){ + System.err.println("type: must be 31 "+j); + return false; + } + + K_S=_buf.getString(); + + byte[] Q_S=_buf.getString(); + + byte[][] r_s = KeyPairECDSA.fromPoint(Q_S); + + // RFC 5656, + // 4. ECDH Key Exchange + // All elliptic curve public keys MUST be validated after they are + // received. An example of a validation algorithm can be found in + // Section 3.2.2 of [SEC1]. If a key fails validation, + // the key exchange MUST fail. + if(!ecdh.validate(r_s[0], r_s[1])){ + return false; + } + + K = ecdh.getSecret(r_s[0], r_s[1]); + K=normalize(K); + + byte[] sig_of_H=_buf.getString(); + + //The hash H is computed as the HASH hash of the concatenation of the + //following: + // string V_C, client's identification string (CR and LF excluded) + // string V_S, server's identification string (CR and LF excluded) + // string I_C, payload of the client's SSH_MSG_KEXINIT + // string I_S, payload of the server's SSH_MSG_KEXINIT + // string K_S, server's public host key + // string Q_C, client's ephemeral public key octet string + // string Q_S, server's ephemeral public key octet string + // mpint K, shared secret + + // This value is called the exchange hash, and it is used to authenti- + // cate the key exchange. + buf.reset(); + buf.putString(V_C); buf.putString(V_S); + buf.putString(I_C); buf.putString(I_S); + buf.putString(K_S); + buf.putString(Q_C); buf.putString(Q_S); + buf.putMPInt(K); + byte[] foo=new byte[buf.getLength()]; + buf.getByte(foo); + + sha.update(foo, 0, foo.length); + H=sha.digest(); + + i=0; + j=0; + j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| + ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); + String alg=Util.byte2str(K_S, i, j); + i+=j; + + boolean result = verify(alg, K_S, i, sig_of_H); + + state=STATE_END; + return result; + } + return false; + } + + public int getState(){return state; } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHG1.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHG1.java index 12955ad1..4829478b 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHG1.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/DHG1.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -55,25 +55,15 @@ public class DHG1 extends KeyExchange{ private static final int SSH_MSG_KEXDH_INIT= 30; private static final int SSH_MSG_KEXDH_REPLY= 31; - static final int RSA=0; - static final int DSS=1; - private int type=0; - private int state; DH dh; -// HASH sha; - -// byte[] K; -// byte[] H; byte[] V_S; byte[] V_C; byte[] I_S; byte[] I_C; -// byte[] K_S; - byte[] e; private Buffer buf; @@ -87,8 +77,6 @@ public class DHG1 extends KeyExchange{ this.I_S=I_S; this.I_C=I_C; -// sha=new SHA1(); -// sha.init(); try{ Class c=Class.forName(session.getConfig("sha-1")); sha=(HASH)(c.newInstance()); @@ -155,24 +143,14 @@ public class DHG1 extends KeyExchange{ } K_S=_buf.getString(); - // K_S is server_key_blob, which includes .... - // string ssh-dss - // impint p of dsa - // impint q of dsa - // impint g of dsa - // impint pub_key of dsa - //System.err.print("K_S: "); //dump(K_S, 0, K_S.length); + byte[] f=_buf.getMPInt(); byte[] sig_of_H=_buf.getString(); - /* -for(int ii=0; ii "); dump(H, 0, H.length); - - i=0; - j=0; - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - String alg=Util.byte2str(K_S, i, j); - i+=j; - - boolean result=false; - if(alg.equals("ssh-rsa")){ - byte[] tmp; - byte[] ee; - byte[] n; - - type=RSA; - - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - ee=tmp; - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - n=tmp; - -// SignatureRSA sig=new SignatureRSA(); -// sig.init(); - - SignatureRSA sig=null; - try{ - Class c=Class.forName(session.getConfig("signature.rsa")); - sig=(SignatureRSA)(c.newInstance()); - sig.init(); - } - catch(Exception e){ - System.err.println(e); - } - - sig.setPubKey(ee, n); - sig.update(H); - result=sig.verify(sig_of_H); - - if(JSch.getLogger().isEnabled(Logger.INFO)){ - JSch.getLogger().log(Logger.INFO, - "ssh_rsa_verify: signature "+result); - } - - } - else if(alg.equals("ssh-dss")){ - byte[] q=null; - byte[] tmp; - - type=DSS; - - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - p=tmp; - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - q=tmp; - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - g=tmp; - j=((K_S[i++]<<24)&0xff000000)|((K_S[i++]<<16)&0x00ff0000)| - ((K_S[i++]<<8)&0x0000ff00)|((K_S[i++])&0x000000ff); - tmp=new byte[j]; System.arraycopy(K_S, i, tmp, 0, j); i+=j; - f=tmp; - -// SignatureDSA sig=new SignatureDSA(); -// sig.init(); - - SignatureDSA sig=null; - try{ - Class c=Class.forName(session.getConfig("signature.dss")); - sig=(SignatureDSA)(c.newInstance()); - sig.init(); - } - catch(Exception e){ - System.err.println(e); - } - - sig.setPubKey(f, p, q, g); - sig.update(H); - result=sig.verify(sig_of_H); - - if(JSch.getLogger().isEnabled(Logger.INFO)){ - JSch.getLogger().log(Logger.INFO, - "ssh_dss_verify: signature "+result); - } - - } - else{ - System.err.println("unknown alg"); - } - state=STATE_END; - return result; - } - return false; - } - - public String getKeyType(){ - if(type==DSS) return "DSA"; - return "RSA"; - } - - public int getState(){return state; } } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ECDH.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ECDH.java new file mode 100644 index 00000000..b1c6a34f --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ECDH.java @@ -0,0 +1,37 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public interface ECDH { + void init(int size) throws Exception; + byte[] getSecret(byte[] r, byte[] s) throws Exception; + byte[] getQ() throws Exception; + boolean validate(byte[] r, byte[] s) throws Exception; +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ForwardedTCPIPDaemon.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ForwardedTCPIPDaemon.java index 4176aef4..c40e0307 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ForwardedTCPIPDaemon.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ForwardedTCPIPDaemon.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/GSSContext.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/GSSContext.java index 23c58ee3..9f4187fb 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/GSSContext.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/GSSContext.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2004-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2004-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HASH.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HASH.java index 6bfff886..4edb56eb 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HASH.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HASH.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKey.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKey.java index 8a4c6f50..edba4e31 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKey.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKey.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -30,13 +30,22 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package com.jcraft.jsch; public class HostKey{ - private static final byte[] sshdss=Util.str2byte("ssh-dss"); - private static final byte[] sshrsa=Util.str2byte("ssh-rsa"); + + private static final byte[][] names = { + Util.str2byte("ssh-dss"), + Util.str2byte("ssh-rsa"), + Util.str2byte("ecdsa-sha2-nistp256"), + Util.str2byte("ecdsa-sha2-nistp384"), + Util.str2byte("ecdsa-sha2-nistp521") + }; protected static final int GUESS=0; public static final int SSHDSS=1; public static final int SSHRSA=2; - static final int UNKNOWN=3; + public static final int ECDSA256=3; + public static final int ECDSA384=4; + public static final int ECDSA521=5; + static final int UNKNOWN=6; protected String marker; protected String host; @@ -60,6 +69,9 @@ public class HostKey{ if(type==GUESS){ if(key[8]=='d'){ this.type=SSHDSS; } else if(key[8]=='r'){ this.type=SSHRSA; } + else if(key[8]=='a' && key[20]=='2'){ this.type=ECDSA256; } + else if(key[8]=='a' && key[20]=='3'){ this.type=ECDSA384; } + else if(key[8]=='a' && key[20]=='5'){ this.type=ECDSA521; } else { throw new JSchException("invalid key type");} } else{ @@ -71,10 +83,23 @@ public class HostKey{ public String getHost(){ return host; } public String getType(){ - if(type==SSHDSS){ return Util.byte2str(sshdss); } - if(type==SSHRSA){ return Util.byte2str(sshrsa);} + if(type==SSHDSS || + type==SSHRSA || + type==ECDSA256 || + type==ECDSA384 || + type==ECDSA521){ + return Util.byte2str(names[type-1]); + } return "UNKNOWN"; } + protected static int name2type(String name){ + for(int i = 0; i < names.length; i++){ + if(Util.byte2str(names[i]).equals(name)){ + return i + 1; + } + } + return UNKNOWN; + } public String getKey(){ return Util.byte2str(Util.toBase64(key, 0, key.length)); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKeyRepository.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKeyRepository.java index adfe633c..92b236f7 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKeyRepository.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/HostKeyRepository.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2004-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2004-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,11 +34,61 @@ public interface HostKeyRepository{ final int NOT_INCLUDED=1; final int CHANGED=2; + /** + * Checks if host is included with the key. + * + * @return #NOT_INCLUDED, #OK or #CHANGED + * @see #NOT_INCLUDED + * @see #OK + * @see #CHANGED + */ int check(String host, byte[] key); + + /** + * Adds a host key hostkey + * + * @param hostkey a host key to be added + * @param ui a user interface for showing messages or promping inputs. + * @see UserInfo + */ void add(HostKey hostkey, UserInfo ui); + + /** + * Removes a host key if there exists mached key with + * host, type. + * + * @see #remove(String host, String type, byte[] key) + */ void remove(String host, String type); + + /** + * Removes a host key if there exists a matched key with + * host, type and key. + */ void remove(String host, String type, byte[] key); + + /** + * Returns id of this repository. + * + * @return identity in String + */ String getKnownHostsRepositoryID(); + + /** + * Retuns a list for host keys managed in this repository. + * + * @see #getHostKey(String host, String type) + */ HostKey[] getHostKey(); + + /** + * Retuns a list for host keys managed in this repository. + * + * @param host a hostname used in searching host keys. + * If null is given, every host key will be listed. + * @param type a key type used in searching host keys, + * and it should be "ssh-dss" or "ssh-rsa". + * If null is given, a key type type will not be ignored. + */ HostKey[] getHostKey(String host, String type); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IO.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IO.java index 65535ba3..a354bffb 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IO.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IO.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Identity.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Identity.java index b803dd91..70005a89 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Identity.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Identity.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityFile.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityFile.java index 9127ceb0..e3d5d7b1 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityFile.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityFile.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -42,6 +42,7 @@ class IdentityFile implements Identity{ } static IdentityFile newInstance(String name, byte[] prvkey, byte[] pubkey, JSch jsch) throws JSchException{ + KeyPair kpair = KeyPair.load(jsch, prvkey, pubkey); return new IdentityFile(jsch, name, kpair); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityRepository.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityRepository.java index 7ec71302..a24bc421 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityRepository.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/IdentityRepository.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2012-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSch.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSch.java index ddca7ffc..3b3e7a1e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSch.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSch.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -36,17 +36,16 @@ public class JSch{ /** * The version number. */ - public static final String VERSION = "0.1.50"; + public static final String VERSION = "0.1.54"; static java.util.Hashtable config=new java.util.Hashtable(); static{ - config.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1"); - config.put("server_host_key", "ssh-rsa,ssh-dss"); - + config.put("kex", "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1"); + config.put("server_host_key", "ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521"); config.put("cipher.s2c", - "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc"); + "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc"); config.put("cipher.c2s", - "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc"); + "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-ctr,aes192-cbc,aes256-ctr,aes256-cbc"); config.put("mac.s2c", "hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96"); config.put("mac.c2s", "hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96"); @@ -63,9 +62,19 @@ public class JSch{ config.put("diffie-hellman-group1-sha1", "com.jcraft.jsch.DHG1"); config.put("diffie-hellman-group14-sha1", - "com.jcraft.jsch.DHG14"); + "com.jcraft.jsch.DHG14"); // available since JDK8. config.put("diffie-hellman-group-exchange-sha256", - "com.jcraft.jsch.DHGEX256"); // avaibale since JDK1.4.2. + "com.jcraft.jsch.DHGEX256"); // available since JDK1.4.2. + // On JDK8, 2048bits will be used. + config.put("ecdsa-sha2-nistp256", "com.jcraft.jsch.jce.SignatureECDSA"); + config.put("ecdsa-sha2-nistp384", "com.jcraft.jsch.jce.SignatureECDSA"); + config.put("ecdsa-sha2-nistp521", "com.jcraft.jsch.jce.SignatureECDSA"); + + config.put("ecdh-sha2-nistp256", "com.jcraft.jsch.DHEC256"); + config.put("ecdh-sha2-nistp384", "com.jcraft.jsch.DHEC384"); + config.put("ecdh-sha2-nistp521", "com.jcraft.jsch.DHEC521"); + + config.put("ecdh-sha2-nistp", "com.jcraft.jsch.jce.ECDHN"); config.put("dh", "com.jcraft.jsch.jce.DH"); config.put("3des-cbc", "com.jcraft.jsch.jce.TripleDESCBC"); @@ -80,11 +89,15 @@ public class JSch{ config.put("hmac-md5-96", "com.jcraft.jsch.jce.HMACMD596"); config.put("sha-1", "com.jcraft.jsch.jce.SHA1"); config.put("sha-256", "com.jcraft.jsch.jce.SHA256"); + config.put("sha-384", "com.jcraft.jsch.jce.SHA384"); + config.put("sha-512", "com.jcraft.jsch.jce.SHA512"); config.put("md5", "com.jcraft.jsch.jce.MD5"); config.put("signature.dss", "com.jcraft.jsch.jce.SignatureDSA"); config.put("signature.rsa", "com.jcraft.jsch.jce.SignatureRSA"); + config.put("signature.ecdsa", "com.jcraft.jsch.jce.SignatureECDSA"); config.put("keypairgen.dsa", "com.jcraft.jsch.jce.KeyPairGenDSA"); config.put("keypairgen.rsa", "com.jcraft.jsch.jce.KeyPairGenRSA"); + config.put("keypairgen.ecdsa", "com.jcraft.jsch.jce.KeyPairGenECDSA"); config.put("random", "com.jcraft.jsch.jce.Random"); config.put("none", "com.jcraft.jsch.CipherNone"); @@ -111,13 +124,16 @@ public class JSch{ config.put("zlib", "com.jcraft.jsch.jcraft.Compression"); config.put("zlib@openssh.com", "com.jcraft.jsch.jcraft.Compression"); + config.put("pbkdf", "com.jcraft.jsch.jce.PBKDF"); + config.put("StrictHostKeyChecking", "ask"); config.put("HashKnownHosts", "no"); config.put("PreferredAuthentications", "gssapi-with-mic,publickey,keyboard-interactive,password"); config.put("CheckCiphers", "aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256"); - config.put("CheckKexes", "diffie-hellman-group14-sha1"); + config.put("CheckKexes", "diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521"); + config.put("CheckSignatures", "ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521"); config.put("MaxAuthTries", "6"); config.put("ClearAllForwardings", "no"); @@ -171,7 +187,9 @@ public class JSch{ static Logger logger=DEVNULL; public JSch(){ - + /* + // The JCE of Sun's Java5 on Mac OS X has the resource leak bug + // in calculating HMAC, so we need to use our own implementations. try{ String osname=(String)(System.getProperties().get("os.name")); if(osname!=null && osname.equals("Mac OS X")){ @@ -183,7 +201,7 @@ public class JSch{ } catch(Exception e){ } - + */ } /** diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchAuthCancelException.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchAuthCancelException.java index 65e71f19..783577de 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchAuthCancelException.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchAuthCancelException.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchException.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchException.java index 1e9056ce..1c8b7f1e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchException.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchException.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchPartialAuthException.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchPartialAuthException.java index aa7ac9e4..72794e8d 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchPartialAuthException.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/JSchPartialAuthException.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyExchange.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyExchange.java index e077d4d7..364cd9b4 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyExchange.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyExchange.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -70,19 +70,24 @@ public abstract class KeyExchange{ public abstract void init(Session session, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C) throws Exception; public abstract boolean next(Buffer buf) throws Exception; - public abstract String getKeyType(); + public abstract int getState(); - /* - void dump(byte[] foo){ - for(int i=0; i11 && - prvkey[0]==0 && prvkey[1]==0 && prvkey[2]==0 && prvkey[3]==7)){ + prvkey[0]==0 && prvkey[1]==0 && prvkey[2]==0 && + (prvkey[3]==7 || prvkey[3]==19))){ Buffer buf=new Buffer(prvkey); buf.skip(prvkey.length); // for using Buffer#available() @@ -577,6 +597,11 @@ public abstract class KeyPair{ else if(_type.equals("ssh-dss")){ kpair=KeyPairDSA.fromSSHAgent(jsch, buf); } + else if(_type.equals("ecdsa-sha2-nistp256") || + _type.equals("ecdsa-sha2-nistp384") || + _type.equals("ecdsa-sha2-nistp512")){ + kpair=KeyPairECDSA.fromSSHAgent(jsch, buf); + } else{ throw new JSchException("privatekey: invalid key "+new String(prvkey, 4, 7)); } @@ -612,10 +637,29 @@ public abstract class KeyPair{ throw new JSchException("invalid privatekey: "+prvkey); if(buf[i]=='D'&& buf[i+1]=='S'&& buf[i+2]=='A'){ type=DSA; } else if(buf[i]=='R'&& buf[i+1]=='S'&& buf[i+2]=='A'){ type=RSA; } + else if(buf[i]=='E'&& buf[i+1]=='C'){ type=ECDSA; } else if(buf[i]=='S'&& buf[i+1]=='S'&& buf[i+2]=='H'){ // FSecure type=UNKNOWN; vendor=VENDOR_FSECURE; } + else if(i+6 < len && + buf[i]=='P' && buf[i+1]=='R' && + buf[i+2]=='I' && buf[i+3]=='V' && + buf[i+4]=='A' && buf[i+5]=='T' && buf[i+6]=='E'){ + type=UNKNOWN; + vendor=VENDOR_PKCS8; + encrypted=false; + i+=3; + } + else if(i+8 < len && + buf[i]=='E' && buf[i+1]=='N' && + buf[i+2]=='C' && buf[i+3]=='R' && + buf[i+4]=='Y' && buf[i+5]=='P' && buf[i+6]=='T' && + buf[i+7]=='E' && buf[i+8]=='D'){ + type=UNKNOWN; + vendor=VENDOR_PKCS8; + i+=5; + } else{ throw new JSchException("invalid privatekey: "+prvkey); } @@ -689,7 +733,8 @@ public abstract class KeyPair{ } if(!inheader){ i++; - encrypted=false; // no passphrase + if(vendor!=VENDOR_PKCS8) + encrypted=false; // no passphrase break; } } @@ -724,12 +769,8 @@ public abstract class KeyPair{ while(i<_len){ if(_buf[i]==0x0a){ boolean xd=(_buf[i-1]==0x0d); - // move 0x0a (or 0x0d0x0a) to the end of '_buf'. - System.arraycopy(_buf, i+1, - _buf, - i-(xd ? 1 : 0), - _len-i-1-(xd ? 1 : 0) - ); + // ignore 0x0a (or 0x0d0x0a) + System.arraycopy(_buf, i+1, _buf, i-(xd ? 1 : 0), _len-(i+1)); if(xd)_len--; _len--; continue; @@ -841,11 +882,32 @@ public abstract class KeyPair{ if(i++0 && buf[i-1]==0x0d) i--; + if(start7){ + type=ECDSA; + } + i=0; + while(i0 && buf[i-1]==0x0d) i--; + if(startbuf.length) + throw new ASN1Exception(); + } + int getType() { + return buf[start]&0xff; + } + boolean isSEQUENCE() { + return getType()==(0x30&0xff); + } + boolean isINTEGER() { + return getType()==(0x02&0xff); + } + boolean isOBJECT() { + return getType()==(0x06&0xff); + } + boolean isOCTETSTRING() { + return getType()==(0x04&0xff); + } + private int getLength(int[] indexp) { + int index=indexp[0]; + int length=buf[index++]&0xff; + if((length&0x80)!=0) { + int foo=length&0x7f; length=0; + while(foo-->0){ length=(length<<8)+(buf[index++]&0xff); } + } + indexp[0]=index; + return length; + } + byte[] getContent() { + int[] indexp=new int[1]; + indexp[0]=start+1; + int length = getLength(indexp); + int index=indexp[0]; + byte[] tmp = new byte[length]; + System.arraycopy(buf, index, tmp, 0, tmp.length); + return tmp; + } + ASN1[] getContents() throws ASN1Exception { + int typ = buf[start]; + int[] indexp=new int[1]; + indexp[0]=start+1; + int length = getLength(indexp); + if(typ == 0x05){ + return new ASN1[0]; + } + int index=indexp[0]; + java.util.Vector values = new java.util.Vector(); + while(length>0) { + index++; length--; + int tmp=index; + indexp[0]=index; + int l=getLength(indexp); + index=indexp[0]; + length-=(index-tmp); + values.addElement(new ASN1(buf, tmp-1, 1+(index-tmp)+l)); + index+=l; + length-=l; + } + ASN1[] result = new ASN1[values.size()]; + for(int i = 0; i =64 ? 521 : + (prv_array.length>=48 ? 384 : 256); + } + + void generate(int key_size) throws JSchException{ + this.key_size=key_size; + try{ + Class c=Class.forName(jsch.getConfig("keypairgen.ecdsa")); + KeyPairGenECDSA keypairgen=(KeyPairGenECDSA)(c.newInstance()); + keypairgen.init(key_size); + prv_array=keypairgen.getD(); + r_array=keypairgen.getR(); + s_array=keypairgen.getS(); + name=Util.str2byte(names[prv_array.length>=64 ? 2 : + (prv_array.length>=48 ? 1 : 0)]); + keypairgen=null; + } + catch(Exception e){ + if(e instanceof Throwable) + throw new JSchException(e.toString(), (Throwable)e); + throw new JSchException(e.toString()); + } + } + + private static final byte[] begin = + Util.str2byte("-----BEGIN EC PRIVATE KEY-----"); + private static final byte[] end = + Util.str2byte("-----END EC PRIVATE KEY-----"); + + byte[] getBegin(){ return begin; } + byte[] getEnd(){ return end; } + + byte[] getPrivateKey(){ + + byte[] tmp = new byte[1]; tmp[0]=1; + + byte[] oid = oids[ + (r_array.length>=64) ? 2 : + ((r_array.length>=48) ? 1 : 0) + ]; + + byte[] point = toPoint(r_array, s_array); + + int bar = ((point.length+1)&0x80)==0 ? 3 : 4; + byte[] foo = new byte[point.length+bar]; + System.arraycopy(point, 0, foo, bar, point.length); + foo[0]=0x03; // BITSTRING + if(bar==3){ + foo[1]=(byte)(point.length+1); + } + else { + foo[1]=(byte)0x81; + foo[2]=(byte)(point.length+1); + } + point = foo; + + int content= + 1+countLength(tmp.length) + tmp.length + + 1+countLength(prv_array.length) + prv_array.length + + 1+countLength(oid.length) + oid.length + + 1+countLength(point.length) + point.length; + + int total= + 1+countLength(content)+content; // SEQUENCE + + byte[] plain=new byte[total]; + int index=0; + index=writeSEQUENCE(plain, index, content); + index=writeINTEGER(plain, index, tmp); + index=writeOCTETSTRING(plain, index, prv_array); + index=writeDATA(plain, (byte)0xa0, index, oid); + index=writeDATA(plain, (byte)0xa1, index, point); + + return plain; + } + + boolean parse(byte[] plain){ + try{ + + if(vendor==VENDOR_FSECURE){ + /* + if(plain[0]!=0x30){ // FSecure + return true; + } + return false; + */ + return false; + } + else if(vendor==VENDOR_PUTTY){ + /* + Buffer buf=new Buffer(plain); + buf.skip(plain.length); + + try { + byte[][] tmp = buf.getBytes(1, ""); + prv_array = tmp[0]; + } + catch(JSchException e){ + return false; + } + + return true; + */ + return false; + } + + int index=0; + int length=0; + + if(plain[index]!=0x30)return false; + index++; // SEQUENCE + length=plain[index++]&0xff; + if((length&0x80)!=0){ + int foo=length&0x7f; length=0; + while(foo-->0){ length=(length<<8)+(plain[index++]&0xff); } + } + + if(plain[index]!=0x02)return false; + index++; // INTEGER + + length=plain[index++]&0xff; + if((length&0x80)!=0){ + int foo=length&0x7f; length=0; + while(foo-->0){ length=(length<<8)+(plain[index++]&0xff); } + } + + index+=length; + index++; // 0x04 + + length=plain[index++]&0xff; + if((length&0x80)!=0){ + int foo=length&0x7f; length=0; + while(foo-->0){ length=(length<<8)+(plain[index++]&0xff); } + } + + prv_array=new byte[length]; + System.arraycopy(plain, index, prv_array, 0, length); + + index+=length; + + index++; // 0xa0 + + length=plain[index++]&0xff; + if((length&0x80)!=0){ + int foo=length&0x7f; length=0; + while(foo-->0){ length=(length<<8)+(plain[index++]&0xff); } + } + + byte[] oid_array=new byte[length]; + System.arraycopy(plain, index, oid_array, 0, length); + index+=length; + + for(int i = 0; i0){ length=(length<<8)+(plain[index++]&0xff); } + } + + byte[] Q_array=new byte[length]; + System.arraycopy(plain, index, Q_array, 0, length); + index+=length; + + byte[][] tmp = fromPoint(Q_array); + r_array = tmp[0]; + s_array = tmp[1]; + + if(prv_array!=null) + key_size = prv_array.length>=64 ? 521 : + (prv_array.length>=48 ? 384 : 256); + } + catch(Exception e){ + //System.err.println(e); + //e.printStackTrace(); + return false; + } + return true; + } + + public byte[] getPublicKeyBlob(){ + byte[] foo = super.getPublicKeyBlob(); + + if(foo!=null) return foo; + + if(r_array==null) return null; + + byte[][] tmp = new byte[3][]; + tmp[0] = Util.str2byte("ecdsa-sha2-"+new String(name)); + tmp[1] = name; + tmp[2] = new byte[1+r_array.length+s_array.length]; + tmp[2][0] = 4; // POINT_CONVERSION_UNCOMPRESSED + System.arraycopy(r_array, 0, tmp[2], 1, r_array.length); + System.arraycopy(s_array, 0, tmp[2], 1+r_array.length, s_array.length); + + return Buffer.fromBytes(tmp).buffer; + } + + byte[] getKeyTypeName(){ + return Util.str2byte("ecdsa-sha2-"+new String(name)); + } + public int getKeyType(){ + return ECDSA; + } + public int getKeySize(){ + return key_size; + } + + public byte[] getSignature(byte[] data){ + try{ + Class c=Class.forName((String)jsch.getConfig("signature.ecdsa")); + SignatureECDSA ecdsa=(SignatureECDSA)(c.newInstance()); + ecdsa.init(); + ecdsa.setPrvKey(prv_array); + + ecdsa.update(data); + byte[] sig = ecdsa.sign(); + + byte[][] tmp = new byte[2][]; + tmp[0] = Util.str2byte("ecdsa-sha2-"+new String(name)); + tmp[1] = sig; + return Buffer.fromBytes(tmp).buffer; + } + catch(Exception e){ + //System.err.println("e "+e); + } + return null; + } + + public Signature getVerifier(){ + try{ + Class c=Class.forName((String)jsch.getConfig("signature.ecdsa")); + final SignatureECDSA ecdsa=(SignatureECDSA)(c.newInstance()); + ecdsa.init(); + + if(r_array == null && s_array == null && getPublicKeyBlob()!=null){ + Buffer buf = new Buffer(getPublicKeyBlob()); + buf.getString(); // ecdsa-sha2-nistp256 + buf.getString(); // nistp256 + byte[][] tmp = fromPoint(buf.getString()); + r_array = tmp[0]; + s_array = tmp[1]; + } + ecdsa.setPubKey(r_array, s_array); + return ecdsa; + } + catch(Exception e){ + //System.err.println("e "+e); + } + return null; + } + + static KeyPair fromSSHAgent(JSch jsch, Buffer buf) throws JSchException { + + byte[][] tmp = buf.getBytes(5, "invalid key format"); + + byte[] name = tmp[1]; // nistp256 + byte[][] foo = fromPoint(tmp[2]); + byte[] r_array = foo[0]; + byte[] s_array = foo[1]; + + byte[] prv_array = tmp[3]; + KeyPairECDSA kpair = new KeyPairECDSA(jsch, + name, + r_array, s_array, + prv_array); + kpair.publicKeyComment = new String(tmp[4]); + kpair.vendor=VENDOR_OPENSSH; + return kpair; + } + + public byte[] forSSHAgent() throws JSchException { + if(isEncrypted()){ + throw new JSchException("key is encrypted."); + } + Buffer buf = new Buffer(); + buf.putString(Util.str2byte("ecdsa-sha2-"+new String(name))); + buf.putString(name); + buf.putString(toPoint(r_array, s_array)); + buf.putString(prv_array); + buf.putString(Util.str2byte(publicKeyComment)); + byte[] result = new byte[buf.getLength()]; + buf.getByte(result, 0, result.length); + return result; + } + + static byte[] toPoint(byte[] r_array, byte[] s_array) { + byte[] tmp = new byte[1+r_array.length+s_array.length]; + tmp[0]=0x04; + System.arraycopy(r_array, 0, tmp, 1, r_array.length); + System.arraycopy(s_array, 0, tmp, 1+r_array.length, s_array.length); + return tmp; + } + + static byte[][] fromPoint(byte[] point) { + int i = 0; + while(point[i]!=4) i++; + i++; + byte[][] tmp = new byte[2][]; + byte[] r_array = new byte[(point.length-i)/2]; + byte[] s_array = new byte[(point.length-i)/2]; + // point[0] == 0x04 == POINT_CONVERSION_UNCOMPRESSED + System.arraycopy(point, i, r_array, 0, r_array.length); + System.arraycopy(point, i+r_array.length, s_array, 0, s_array.length); + tmp[0] = r_array; + tmp[1] = s_array; + + return tmp; + } + + public void dispose(){ + super.dispose(); + Util.bzero(prv_array); + } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenDSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenDSA.java index f6507f24..2bd78b21 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenDSA.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenDSA.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenECDSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenECDSA.java new file mode 100644 index 00000000..30f00c74 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenECDSA.java @@ -0,0 +1,37 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public interface KeyPairGenECDSA{ + void init(int key_size) throws Exception; + byte[] getD(); + byte[] getR(); + byte[] getS(); +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenRSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenRSA.java index 3a849074..0d00eef9 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenRSA.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairGenRSA.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairPKCS8.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairPKCS8.java new file mode 100644 index 00000000..d9a3da19 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairPKCS8.java @@ -0,0 +1,363 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2013-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +import java.util.Vector; +import java.math.BigInteger; + +public class KeyPairPKCS8 extends KeyPair { + private static final byte[] rsaEncryption = { + (byte)0x2a, (byte)0x86, (byte)0x48, (byte)0x86, + (byte)0xf7, (byte)0x0d, (byte)0x01, (byte)0x01, (byte)0x01 + }; + + private static final byte[] dsaEncryption = { + (byte)0x2a, (byte)0x86, (byte)0x48, (byte)0xce, + (byte)0x38, (byte)0x04, (byte)0x1 + }; + + private static final byte[] pbes2 = { + (byte)0x2a, (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xf7, + (byte)0x0d, (byte)0x01, (byte)0x05, (byte)0x0d + }; + + private static final byte[] pbkdf2 = { + (byte)0x2a, (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xf7, + (byte)0x0d, (byte)0x01, (byte)0x05, (byte)0x0c + }; + + private static final byte[] aes128cbc = { + (byte)0x60, (byte)0x86, (byte)0x48, (byte)0x01, (byte)0x65, + (byte)0x03, (byte)0x04, (byte)0x01, (byte)0x02 + }; + + private static final byte[] aes192cbc = { + (byte)0x60, (byte)0x86, (byte)0x48, (byte)0x01, (byte)0x65, + (byte)0x03, (byte)0x04, (byte)0x01, (byte)0x16 + }; + + private static final byte[] aes256cbc = { + (byte)0x60, (byte)0x86, (byte)0x48, (byte)0x01, (byte)0x65, + (byte)0x03, (byte)0x04, (byte)0x01, (byte)0x2a + }; + + private static final byte[] pbeWithMD5AndDESCBC = { + (byte)0x2a, (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xf7, + (byte)0x0d, (byte)0x01, (byte)0x05, (byte)0x03 + }; + + private KeyPair kpair = null; + + public KeyPairPKCS8(JSch jsch){ + super(jsch); + } + + void generate(int key_size) throws JSchException{ + } + + private static final byte[] begin=Util.str2byte("-----BEGIN DSA PRIVATE KEY-----"); + private static final byte[] end=Util.str2byte("-----END DSA PRIVATE KEY-----"); + + byte[] getBegin(){ return begin; } + byte[] getEnd(){ return end; } + + byte[] getPrivateKey(){ + return null; + } + + boolean parse(byte[] plain){ + + /* from RFC5208 + PrivateKeyInfo ::= SEQUENCE { + version Version, + privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, + privateKey PrivateKey, + attributes [0] IMPLICIT Attributes OPTIONAL + } + Version ::= INTEGER + PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier + PrivateKey ::= OCTET STRING + Attributes ::= SET OF Attribute + } + */ + + try{ + Vector values = new Vector(); + + ASN1[] contents = null; + ASN1 asn1 = new ASN1(plain); + contents = asn1.getContents(); + + ASN1 privateKeyAlgorithm = contents[1]; + ASN1 privateKey = contents[2]; + + contents = privateKeyAlgorithm.getContents(); + byte[] privateKeyAlgorithmID = contents[0].getContent(); + contents = contents[1].getContents(); + if(contents.length>0){ + for(int i = 0; i < contents.length; i++){ + values.addElement(contents[i].getContent()); + } + } + + byte[] _data = privateKey.getContent(); + + KeyPair _kpair = null; + if(Util.array_equals(privateKeyAlgorithmID, rsaEncryption)){ + _kpair = new KeyPairRSA(jsch); + _kpair.copy(this); + if(_kpair.parse(_data)){ + kpair = _kpair; + } + } + else if(Util.array_equals(privateKeyAlgorithmID, dsaEncryption)){ + asn1 = new ASN1(_data); + if(values.size() == 0) { // embedded DSA parameters format + /* + SEQUENCE + SEQUENCE + INTEGER // P_array + INTEGER // Q_array + INTEGER // G_array + INTEGER // prv_array + */ + contents = asn1.getContents(); + byte[] bar = contents[1].getContent(); + contents = contents[0].getContents(); + for(int i = 0; i < contents.length; i++){ + values.addElement(contents[i].getContent()); + } + values.addElement(bar); + } + else { + /* + INTEGER // prv_array + */ + values.addElement(asn1.getContent()); + } + + byte[] P_array = (byte[])values.elementAt(0); + byte[] Q_array = (byte[])values.elementAt(1); + byte[] G_array = (byte[])values.elementAt(2); + byte[] prv_array = (byte[])values.elementAt(3); + // Y = g^X mode p + byte[] pub_array = + (new BigInteger(G_array)). + modPow(new BigInteger(prv_array), new BigInteger(P_array)). + toByteArray(); + + KeyPairDSA _key = new KeyPairDSA(jsch, + P_array, Q_array, G_array, + pub_array, prv_array); + plain = _key.getPrivateKey(); + + _kpair = new KeyPairDSA(jsch); + _kpair.copy(this); + if(_kpair.parse(plain)){ + kpair = _kpair; + } + } + } + catch(ASN1Exception e){ + return false; + } + catch(Exception e){ + //System.err.println(e); + return false; + } + return kpair != null; + } + + public byte[] getPublicKeyBlob(){ + return kpair.getPublicKeyBlob(); + } + + byte[] getKeyTypeName(){ return kpair.getKeyTypeName();} + public int getKeyType(){return kpair.getKeyType();} + + public int getKeySize(){ + return kpair.getKeySize(); + } + + public byte[] getSignature(byte[] data){ + return kpair.getSignature(data); + } + + public Signature getVerifier(){ + return kpair.getVerifier(); + } + + public byte[] forSSHAgent() throws JSchException { + return kpair.forSSHAgent(); + } + + public boolean decrypt(byte[] _passphrase){ + if(!isEncrypted()){ + return true; + } + if(_passphrase==null){ + return !isEncrypted(); + } + + /* + SEQUENCE + SEQUENCE + OBJECT :PBES2 + SEQUENCE + SEQUENCE + OBJECT :PBKDF2 + SEQUENCE + OCTET STRING [HEX DUMP]:E4E24ADC9C00BD4D + INTEGER :0800 + SEQUENCE + OBJECT :aes-128-cbc + OCTET STRING [HEX DUMP]:5B66E6B3BF03944C92317BC370CC3AD0 + OCTET STRING [HEX DUMP]: + +or + + SEQUENCE + SEQUENCE + OBJECT :pbeWithMD5AndDES-CBC + SEQUENCE + OCTET STRING [HEX DUMP]:DBF75ECB69E3C0FC + INTEGER :0800 + OCTET STRING [HEX DUMP] + */ + + try{ + + ASN1[] contents = null; + ASN1 asn1 = new ASN1(data); + + contents = asn1.getContents(); + + byte[] _data = contents[1].getContent(); + + ASN1 pbes = contents[0]; + contents = pbes.getContents(); + byte[] pbesid = contents[0].getContent(); + ASN1 pbesparam = contents[1]; + + byte[] salt = null; + int iterations = 0; + byte[] iv = null; + byte[] encryptfuncid = null; + + if(Util.array_equals(pbesid, pbes2)){ + contents = pbesparam.getContents(); + ASN1 pbkdf = contents[0]; + ASN1 encryptfunc = contents[1]; + contents = pbkdf.getContents(); + byte[] pbkdfid = contents[0].getContent(); + ASN1 pbkdffunc = contents[1]; + contents = pbkdffunc.getContents(); + salt = contents[0].getContent(); + iterations = + Integer.parseInt((new BigInteger(contents[1].getContent())).toString()); + + contents = encryptfunc.getContents(); + encryptfuncid = contents[0].getContent(); + iv = contents[1].getContent(); + } + else if(Util.array_equals(pbesid, pbeWithMD5AndDESCBC)){ + // not supported + return false; + } + else { + return false; + } + + Cipher cipher=getCipher(encryptfuncid); + if(cipher==null) return false; + + byte[] key=null; + try{ + Class c=Class.forName((String)jsch.getConfig("pbkdf")); + PBKDF tmp=(PBKDF)(c.newInstance()); + key = tmp.getKey(_passphrase, salt, iterations, cipher.getBlockSize()); + } + catch(Exception ee){ + } + + if(key==null){ + return false; + } + + cipher.init(Cipher.DECRYPT_MODE, key, iv); + Util.bzero(key); + byte[] plain=new byte[_data.length]; + cipher.update(_data, 0, _data.length, plain, 0); + if(parse(plain)){ + encrypted=false; + return true; + } + } + catch(ASN1Exception e){ + // System.err.println(e); + } + catch(Exception e){ + // System.err.println(e); + } + + return false; + } + + Cipher getCipher(byte[] id){ + Cipher cipher=null; + String name = null; + try{ + if(Util.array_equals(id, aes128cbc)){ + name="aes128-cbc"; + } + else if(Util.array_equals(id, aes192cbc)){ + name="aes192-cbc"; + } + else if(Util.array_equals(id, aes256cbc)){ + name="aes256-cbc"; + } + Class c=Class.forName((String)jsch.getConfig(name)); + cipher=(Cipher)(c.newInstance()); + } + catch(Exception e){ + if(JSch.getLogger().isEnabled(Logger.FATAL)){ + String message=""; + if(name==null){ + message="unknown oid: "+Util.toHex(id); + } + else { + message="function "+name+" is not supported"; + } + JSch.getLogger().log(Logger.FATAL, "PKCS8: "+message); + } + } + return cipher; + } +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairRSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairRSA.java index 45fd70a5..2111cd3b 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairRSA.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KeyPairRSA.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KnownHosts.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KnownHosts.java index 6fd577ea..f9d1eae4 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KnownHosts.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/KnownHosts.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -35,12 +35,6 @@ public class KnownHosts implements HostKeyRepository{ private static final String _known_hosts="known_hosts"; - /* - static final int SSHDSS=0; - static final int SSHRSA=1; - static final int UNKNOWN=2; - */ - private JSch jsch=null; private String known_hosts=null; private java.util.Vector pool=null; @@ -50,26 +44,28 @@ class KnownHosts implements HostKeyRepository{ KnownHosts(JSch jsch){ super(); this.jsch=jsch; + this.hmacsha1 = getHMACSHA1(); pool=new java.util.Vector(); } - void setKnownHosts(String foo) throws JSchException{ + void setKnownHosts(String filename) throws JSchException{ try{ - known_hosts = foo; - FileInputStream fis=new FileInputStream(Util.checkTilde(foo)); + known_hosts = filename; + FileInputStream fis=new FileInputStream(Util.checkTilde(filename)); setKnownHosts(fis); } catch(FileNotFoundException e){ + // The non-existing file should be allowed. } } - void setKnownHosts(InputStream foo) throws JSchException{ + void setKnownHosts(InputStream input) throws JSchException{ pool.removeAllElements(); StringBuffer sb=new StringBuffer(); byte i; int j; boolean error=false; try{ - InputStream fis=foo; + InputStream fis=input; String host; String key=null; int type; @@ -158,8 +154,10 @@ loop: if(i==0x20 || i=='\t'){ break; } sb.append((char)i); } - if(sb.toString().equals("ssh-dss")){ type=HostKey.SSHDSS; } - else if(sb.toString().equals("ssh-rsa")){ type=HostKey.SSHRSA; } + String tmp = sb.toString(); + if(HostKey.name2type(tmp)!=HostKey.UNKNOWN){ + type=HostKey.name2type(tmp); + } else { j=bufl; } if(j>=bufl){ addInvalidLine(Util.byte2str(buf, 0, bufl)); @@ -223,7 +221,6 @@ loop: key.length()), comment); pool.addElement(hk); } - fis.close(); if(error){ throw new JSchException("KnownHosts: invalid format"); } @@ -235,6 +232,12 @@ loop: throw new JSchException(e.toString(), (Throwable)e); throw new JSchException(e.toString()); } + finally { + try{ input.close(); } + catch(IOException e){ + throw new JSchException(e.toString(), (Throwable)e); + } + } } private void addInvalidLine(String line) throws JSchException { HostKey hk = new HostKey(line, HostKey.UNKNOWN, null); @@ -249,14 +252,19 @@ loop: return result; } - int type=getType(key); - HostKey hk; + HostKey hk = null; + try { + hk = new HostKey(host, HostKey.GUESS, key); + } + catch(JSchException e){ // unsupported key + return result; + } synchronized(pool){ for(int i=0; i1){ + HostKey[] tmp = + getHostKey(host.substring(1, host.indexOf("]:")), type); + if(tmp.length > 0){ + HostKey[] bar = new HostKey[foo.length + tmp.length]; + System.arraycopy(foo, 0, bar, 0, foo.length); + System.arraycopy(tmp, 0, bar, foo.length, tmp.length); + foo = bar; + } } return foo; } @@ -452,11 +462,7 @@ loop: System.err.println(e); } } - private int getType(byte[] key){ - if(key[8]=='d') return HostKey.SSHDSS; - if(key[8]=='r') return HostKey.SSHRSA; - return HostKey.UNKNOWN; - } + private String deleteSubString(String hosts, String host){ int i=0; int hostlen=host.length(); @@ -477,7 +483,7 @@ loop: return hosts; } - private synchronized MAC getHMACSHA1(){ + private MAC getHMACSHA1(){ if(hmacsha1==null){ try{ Class c=Class.forName(jsch.getConfig("hmac-sha1")); @@ -503,7 +509,6 @@ loop: byte[] salt=null; byte[] hash=null; - HashedHostKey(String host, byte[] key) throws JSchException { this(host, GUESS, key); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/LocalIdentityRepository.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/LocalIdentityRepository.java index 3b83f2ef..01a37a4d 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/LocalIdentityRepository.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/LocalIdentityRepository.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2012-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -50,6 +50,7 @@ class LocalIdentityRepository implements IdentityRepository { } public synchronized Vector getIdentities() { + removeDupulicates(); Vector v = new Vector(); for(int i=0; i*/ kv = new Vector(); @@ -200,12 +198,13 @@ public class OpenSSHConfig implements ConfigRepository { if(keymap.get(key)!=null) { key = (String)keymap.get(key); } + key = key.toUpperCase(); String value = null; for(int i = 0; i < _configs.size(); i++) { Vector v = (Vector)_configs.elementAt(i); for(int j = 0; j < v.size(); j++) { String[] kv = (String[])v.elementAt(j); - if(kv[0].equals(key)) { + if(kv[0].toUpperCase().equals(key)) { value = kv[1]; break; } @@ -217,12 +216,13 @@ public class OpenSSHConfig implements ConfigRepository { } private String[] multiFind(String key) { + key = key.toUpperCase(); Vector value = new Vector(); for(int i = 0; i < _configs.size(); i++) { Vector v = (Vector)_configs.elementAt(i); for(int j = 0; j < v.size(); j++) { String[] kv = (String[])v.elementAt(j); - if(kv[0].equals(key)) { + if(kv[0].toUpperCase().equals(key)) { String foo = kv[1]; if(foo != null) { value.remove(foo); diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PBKDF.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PBKDF.java new file mode 100644 index 00000000..6910b568 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PBKDF.java @@ -0,0 +1,34 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2013-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public interface PBKDF { + byte[] getKey(byte[] pass, byte[] salt, int iteration, int size); +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Packet.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Packet.java index 9c441577..3b8c50de 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Packet.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Packet.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PortWatcher.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PortWatcher.java index 75ec2688..5f403fde 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PortWatcher.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/PortWatcher.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Proxy.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Proxy.java index 7d05caa8..39b4bcb7 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Proxy.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Proxy.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxyHTTP.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxyHTTP.java index df23114a..432e91ee 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxyHTTP.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxyHTTP.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS4.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS4.java index cb506165..f0b059fa 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS4.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS4.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS5.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS5.java index 7960135a..e37581b2 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS5.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ProxySOCKS5.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Random.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Random.java index 879b7770..9d08767f 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Random.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Random.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Request.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Request.java index 94f9b013..a158b769 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Request.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Request.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestAgentForwarding.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestAgentForwarding.java index 66d328cd..0c6edc7f 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestAgentForwarding.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestAgentForwarding.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestEnv.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestEnv.java index cccda4df..6925a04f 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestEnv.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestEnv.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestExec.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestExec.java index 318d99ad..3787edbe 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestExec.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestExec.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestPtyReq.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestPtyReq.java index 86bf4f13..b9a2622e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestPtyReq.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestPtyReq.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSftp.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSftp.java index 483c296b..10eab938 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSftp.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSftp.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestShell.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestShell.java index e037ba9e..125b7fac 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestShell.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestShell.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSignal.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSignal.java index a6926177..84efa8a0 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSignal.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSignal.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSubsystem.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSubsystem.java index b6fee4f4..9926bbf8 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSubsystem.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestSubsystem.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2005-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2005-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestWindowChange.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestWindowChange.java index 43600ac4..131c2bfd 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestWindowChange.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestWindowChange.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestX11.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestX11.java index 3bdaca9f..03ea7ede 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestX11.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/RequestX11.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ServerSocketFactory.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ServerSocketFactory.java index 682b4c4f..4aaef2d8 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ServerSocketFactory.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/ServerSocketFactory.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Session.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Session.java index 8807f5f6..a5f751dc 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Session.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Session.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -123,7 +123,7 @@ public class Session implements Runnable{ SocketFactory socket_factory=null; static final int buffer_margin = 32 + // maximum padding length - 20 + // maximum mac length + 64 + // maximum mac length 32; // margin for deflater; deflater may inflate data private java.util.Hashtable config=null; @@ -339,9 +339,16 @@ public class Session implements Runnable{ } } - try{ checkHost(host, port, kex); } + try{ + long tmp=System.currentTimeMillis(); + in_prompt = true; + checkHost(host, port, kex); + in_prompt = false; + kex_start_time+=(System.currentTimeMillis()-tmp); + } catch(JSchException ee){ in_kex=false; + in_prompt = false; throw ee; } @@ -537,19 +544,20 @@ public class Session implements Runnable{ } catch(Exception e) { in_kex=false; - if(isConnected){ - try{ - packet.reset(); - buf.putByte((byte)SSH_MSG_DISCONNECT); - buf.putInt(3); - buf.putString(Util.str2byte(e.toString())); - buf.putString(Util.str2byte("en")); - write(packet); - disconnect(); - } - catch(Exception ee){ - } + try{ + if(isConnected){ + String message = e.toString(); + packet.reset(); + buf.checkFreeSize(1+4*3+message.length()+2+buffer_margin); + buf.putByte((byte)SSH_MSG_DISCONNECT); + buf.putInt(3); + buf.putString(Util.str2byte(message)); + buf.putString(Util.str2byte("en")); + write(packet); + } } + catch(Exception ee){} + try{ disconnect(); } catch(Exception ee){ } isConnected=false; //e.printStackTrace(); if(e instanceof RuntimeException) throw (RuntimeException)e; @@ -601,7 +609,8 @@ public class Session implements Runnable{ return kex; } - private boolean in_kex=false; + private volatile boolean in_kex=false; + private volatile boolean in_prompt=false; public void rekey() throws Exception { send_kexinit(); } @@ -630,6 +639,16 @@ public class Session implements Runnable{ } } + String server_host_key = getConfig("server_host_key"); + String[] not_available_shks = + checkSignatures(getConfig("CheckSignatures")); + if(not_available_shks!=null && not_available_shks.length>0){ + server_host_key=Util.diffString(server_host_key, not_available_shks); + if(server_host_key==null){ + throw new JSchException("There are not any available sig algorithm."); + } + } + in_kex=true; kex_start_time=System.currentTimeMillis(); @@ -653,7 +672,7 @@ public class Session implements Runnable{ random.fill(buf.buffer, buf.index, 16); buf.skip(16); } buf.putString(Util.str2byte(kex)); - buf.putString(Util.str2byte(getConfig("server_host_key"))); + buf.putString(Util.str2byte(server_host_key)); buf.putString(Util.str2byte(cipherc2s)); buf.putString(Util.str2byte(ciphers2c)); buf.putString(Util.str2byte(getConfig("mac.c2s"))); @@ -738,7 +757,7 @@ public class Session implements Runnable{ "IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\n"+ "Someone could be eavesdropping on you right now (man-in-the-middle attack)!\n"+ "It is also possible that the "+key_type+" host key has just been changed.\n"+ -"The fingerprint for the "+key_type+" key sent by the remote host is\n"+ +"The fingerprint for the "+key_type+" key sent by the remote host "+chost+" is\n"+ key_fprint+".\n"+ "Please contact your system administrator.\n"+ "Add correct host key in "+file+" to get rid of this message."; @@ -758,7 +777,7 @@ key_fprint+".\n"+ synchronized(hkr){ hkr.remove(chost, - (key_type.equals("DSA") ? "ssh-dss" : "ssh-rsa"), + kex.getKeyAlgorithName(), null); insert=true; } @@ -796,8 +815,7 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ if(i==HostKeyRepository.OK){ HostKey[] keys = - hkr.getHostKey(chost, - (key_type.equals("DSA") ? "ssh-dss" : "ssh-rsa")); + hkr.getHostKey(chost, kex.getKeyAlgorithName()); String _key= Util.byte2str(Util.toBase64(K_S, 0, K_S.length)); for(int j=0; j< keys.length; j++){ if(keys[i].getKey().equals(_key) && @@ -820,7 +838,7 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ if(i==HostKeyRepository.OK && JSch.getLogger().isEnabled(Logger.INFO)){ JSch.getLogger().log(Logger.INFO, - "Host '"+host+"' is known and mathces the "+key_type+" host key"); + "Host '"+host+"' is known and matches the "+key_type+" host key"); } if(insert && @@ -1019,7 +1037,7 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ if(c==null){ } else{ - c.addRemoteWindowSize(buf.getInt()); + c.addRemoteWindowSize(buf.getUInt()); } } else if(type==UserAuth.SSH_MSG_USERAUTH_SUCCESS){ @@ -1237,7 +1255,7 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ while(true){ if(in_kex){ if(t>0L && (System.currentTimeMillis()-kex_start_time)>t){ - throw new JSchException("timeout in wating for rekeying process."); + throw new JSchException("timeout in waiting for rekeying process."); } try{Thread.sleep(10);} catch(java.lang.InterruptedException e){}; @@ -1257,6 +1275,10 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ } } + if(in_kex){ + continue; + } + if(c.rwsize>=length){ c.rwsize-=length; break; @@ -1325,8 +1347,11 @@ key_type+" key fingerprint is "+key_fprint+".\n"+ // System.err.println("in_kex="+in_kex+" "+(packet.buffer.getCommand())); long t = getTimeout(); while(in_kex){ - if(t>0L && (System.currentTimeMillis()-kex_start_time)>t){ - throw new JSchException("timeout in wating for rekeying process."); + if(t>0L && + (System.currentTimeMillis()-kex_start_time)>t && + !in_prompt + ){ + throw new JSchException("timeout in waiting for rekeying process."); } byte command=packet.buffer.getCommand(); //System.err.println("command: "+command); @@ -1494,7 +1519,7 @@ break; if(channel==null){ break; } - channel.addRemoteWindowSize(buf.getInt()); + channel.addRemoteWindowSize(buf.getUInt()); break; case SSH_MSG_CHANNEL_EOF: @@ -1534,33 +1559,30 @@ break; buf.getShort(); i=buf.getInt(); channel=Channel.getChannel(i, this); - if(channel==null){ - //break; - } int r=buf.getInt(); long rws=buf.getUInt(); int rps=buf.getInt(); - - channel.setRemoteWindowSize(rws); - channel.setRemotePacketSize(rps); - channel.open_confirmation=true; - channel.setRecipient(r); + if(channel!=null){ + channel.setRemoteWindowSize(rws); + channel.setRemotePacketSize(rps); + channel.open_confirmation=true; + channel.setRecipient(r); + } break; case SSH_MSG_CHANNEL_OPEN_FAILURE: buf.getInt(); buf.getShort(); i=buf.getInt(); channel=Channel.getChannel(i, this); - if(channel==null){ - //break; - } - int reason_code=buf.getInt(); - //foo=buf.getString(); // additional textual information - //foo=buf.getString(); // language tag - channel.setExitStatus(reason_code); - channel.close=true; - channel.eof_remote=true; - channel.setRecipient(0); + if(channel!=null){ + int reason_code=buf.getInt(); + //foo=buf.getString(); // additional textual information + //foo=buf.getString(); // language tag + channel.setExitStatus(reason_code); + channel.close=true; + channel.eof_remote=true; + channel.setRecipient(0); + } break; case SSH_MSG_CHANNEL_REQUEST: buf.getInt(); @@ -1616,8 +1638,8 @@ break; tmp.setDaemon(daemon_thread); } tmp.start(); - break; } + break; case SSH_MSG_CHANNEL_SUCCESS: buf.getInt(); buf.getShort(); @@ -2440,11 +2462,17 @@ break; "CheckCiphers: "+ciphers); } + String cipherc2s=getConfig("cipher.c2s"); + String ciphers2c=getConfig("cipher.s2c"); + Vector result=new Vector(); String[] _ciphers=Util.split(ciphers, ","); for(int i=0; i<_ciphers.length; i++){ - if(!checkCipher(getConfig(_ciphers[i]))){ - result.addElement(_ciphers[i]); + String cipher=_ciphers[i]; + if(ciphers2c.indexOf(cipher) == -1 && cipherc2s.indexOf(cipher) == -1) + continue; + if(!checkCipher(getConfig(cipher))){ + result.addElement(cipher); } } if(result.size()==0) @@ -2517,6 +2545,40 @@ break; catch(Exception e){ return false; } } + private String[] checkSignatures(String sigs){ + if(sigs==null || sigs.length()==0) + return null; + + if(JSch.getLogger().isEnabled(Logger.INFO)){ + JSch.getLogger().log(Logger.INFO, + "CheckSignatures: "+sigs); + } + + java.util.Vector result=new java.util.Vector(); + String[] _sigs=Util.split(sigs, ","); + for(int i=0; i<_sigs.length; i++){ + try{ + Class c=Class.forName((String)jsch.getConfig(_sigs[i])); + final Signature sig=(Signature)(c.newInstance()); + sig.init(); + } + catch(Exception e){ + result.addElement(_sigs[i]); + } + } + if(result.size()==0) + return null; + String[] foo=new String[result.size()]; + System.arraycopy(result.toArray(), 0, foo, 0, result.size()); + if(JSch.getLogger().isEnabled(Logger.INFO)){ + for(int i=0; inull. @@ -2542,8 +2604,7 @@ break; } /** - * Sets the hostkeyRepository, which will be referred - * in the host key checking. + * Sets the hostkeyRepository, which will be referred in checking host keys. * * @param hostkeyRepository * @see #getHostKeyRepository() diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpATTRS.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpATTRS.java index b3a86ba0..96165d50 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpATTRS.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpATTRS.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -108,12 +108,12 @@ public class SftpATTRS { } public String getAtimeString(){ - SimpleDateFormat locale=new SimpleDateFormat(); - return (locale.format(new Date(atime))); + Date date= new Date(((long)atime)*1000L); + return (date.toString()); } public String getMtimeString(){ - Date date= new Date(((long)mtime)*1000); + Date date= new Date(((long)mtime)*1000L); return (date.toString()); } diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpException.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpException.java index 6a6c1ff8..6f644750 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpException.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpException.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpProgressMonitor.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpProgressMonitor.java index bd91688d..0fd124ad 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpProgressMonitor.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpProgressMonitor.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpStatVFS.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpStatVFS.java index 4433bf6a..04dcd402 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpStatVFS.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SftpStatVFS.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -35,20 +35,8 @@ import java.util.Date; public class SftpStatVFS { /* - from "man statvfs" - struct statvfs { - unsigned long f_bsize; // file system block size - unsigned long f_frsize; // fragment size - fsblkcnt_t f_blocks; // size of fs in f_frsize units - fsblkcnt_t f_bfree; // # free blocks - fsblkcnt_t f_bavail; // # free blocks for non-root - fsfilcnt_t f_files; // # inodes - fsfilcnt_t f_ffree; // # free inodes - fsfilcnt_t f_favail; // # free inodes for non-root - unsigned long f_fsid; // file system ID - unsigned long f_flag; // mount flags - unsigned long f_namemax; // maximum filename length - }; + It seems data is serializsed according to sys/statvfs.h; for example, + http://pubs.opengroup.org/onlinepubs/009604499/basedefs/sys/statvfs.h.html */ private long bsize; diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Signature.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Signature.java index 9b7d85d8..711f01d7 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Signature.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Signature.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2012-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2012-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureDSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureDSA.java index 5b253fdc..2cbe0acf 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureDSA.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureDSA.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureECDSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureECDSA.java new file mode 100644 index 00000000..7e14d5d5 --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureECDSA.java @@ -0,0 +1,35 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2015-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch; + +public interface SignatureECDSA extends Signature { + void setPubKey(byte[] r, byte[] s) throws Exception; + void setPrvKey(byte[] s) throws Exception; +} diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureRSA.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureRSA.java index 715bc575..e51d8a6d 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureRSA.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SignatureRSA.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SocketFactory.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SocketFactory.java index aaac0dce..d0519851 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SocketFactory.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/SocketFactory.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UIKeyboardInteractive.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UIKeyboardInteractive.java index 23af9c31..8ada1a9a 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UIKeyboardInteractive.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UIKeyboardInteractive.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuth.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuth.java index 085a9508..26836317 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuth.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuth.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthGSSAPIWithMIC.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthGSSAPIWithMIC.java index 15856cbc..4325955b 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthGSSAPIWithMIC.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthGSSAPIWithMIC.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthKeyboardInteractive.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthKeyboardInteractive.java index 1274d78c..8331b17e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthKeyboardInteractive.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthKeyboardInteractive.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthNone.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthNone.java index b3b0b077..a2bf63af 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthNone.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthNone.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPassword.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPassword.java index 9b5837f5..7bc1a283 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPassword.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPassword.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPublicKey.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPublicKey.java index a4d38be5..40c1fa0a 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPublicKey.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserAuthPublicKey.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -66,7 +66,8 @@ class UserAuthPublicKey extends UserAuth{ // string service name ("ssh-connection") // string "publickey" // boolen FALSE - // string plaintext password (ISO-10646 UTF-8) + // string public key algorithm name + // string public key blob packet.reset(); buf.putByte((byte)SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); @@ -154,13 +155,15 @@ class UserAuthPublicKey extends UserAuth{ if(pubkeyblob==null) continue; - // send - // byte SSH_MSG_USERAUTH_REQUEST(50) - // string user name - // string service name ("ssh-connection") - // string "publickey" - // boolen TRUE - // string plaintext password (ISO-10646 UTF-8) + // send + // byte SSH_MSG_USERAUTH_REQUEST(50) + // string user name + // string service name ("ssh-connection") + // string "publickey" + // boolen TRUE + // string public key algorithm name + // string public key blob + // string signature packet.reset(); buf.putByte((byte)SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserInfo.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserInfo.java index 22552ede..e1b2a32a 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserInfo.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/UserInfo.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Util.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Util.java index 6a5354b0..f990b5de 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Util.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/Util.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2002-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2002-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -43,20 +43,25 @@ class Util{ } return 0; } - static byte[] fromBase64(byte[] buf, int start, int length){ - byte[] foo=new byte[length]; - int j=0; - for (int i=start;i>>4)); - if(buf[i+2]==(byte)'='){ j++; break;} - foo[j+1]=(byte)(((val(buf[i+1])&0x0f)<<4)|((val(buf[i+2])&0x3c)>>>2)); - if(buf[i+3]==(byte)'='){ j+=2; break;} - foo[j+2]=(byte)(((val(buf[i+2])&0x03)<<6)|(val(buf[i+3])&0x3f)); - j+=3; + static byte[] fromBase64(byte[] buf, int start, int length) throws JSchException { + try { + byte[] foo=new byte[length]; + int j=0; + for (int i=start;i>>4)); + if(buf[i+2]==(byte)'='){ j++; break;} + foo[j+1]=(byte)(((val(buf[i+1])&0x0f)<<4)|((val(buf[i+2])&0x3c)>>>2)); + if(buf[i+3]==(byte)'='){ j+=2; break;} + foo[j+2]=(byte)(((val(buf[i+2])&0x03)<<6)|(val(buf[i+3])&0x3f)); + j+=3; + } + byte[] bar=new byte[j]; + System.arraycopy(foo, 0, bar, 0, j); + return bar; + } + catch(ArrayIndexOutOfBoundsException e) { + throw new JSchException("fromBase64: invalid base64 data", e); } - byte[] bar=new byte[j]; - System.arraycopy(foo, 0, bar, 0, j); - return bar; } static byte[] toBase64(byte[] buf, int start, int length){ @@ -386,7 +391,7 @@ class Util{ } tmp.interrupt(); tmp=null; - throw new JSchException(message); + throw new JSchException(message, ee[0]); } return socket; } @@ -423,6 +428,17 @@ class Util{ return byte2str(str, s, l, "UTF-8"); } + static String toHex(byte[] str){ + StringBuffer sb = new StringBuffer(); + for(int i = 0; i=64) name="secp521r1"; + else if(r.length>=48) name="secp384r1"; + + AlgorithmParameters param = AlgorithmParameters.getInstance("EC"); + param.init(new ECGenParameterSpec(name)); + ECParameterSpec ecparam = + (ECParameterSpec)param.getParameterSpec(ECParameterSpec.class); + ECPoint w = new ECPoint(new BigInteger(1, r), new BigInteger(1, s)); + PublicKey pubKey = + keyFactory.generatePublic(new ECPublicKeySpec(w, ecparam)); + signature.initVerify(pubKey); + } + + public void setPrvKey(byte[] d) throws Exception{ + + // d must be unsigned value. + d=insert0(d); + + String name="secp256r1"; + if(d.length>=64) name="secp521r1"; + else if(d.length>=48) name="secp384r1"; + + AlgorithmParameters param = AlgorithmParameters.getInstance("EC"); + param.init(new ECGenParameterSpec(name)); + ECParameterSpec ecparam = + (ECParameterSpec)param.getParameterSpec(ECParameterSpec.class); + BigInteger _d = new BigInteger(1, d); + PrivateKey prvKey = + keyFactory.generatePrivate(new ECPrivateKeySpec(_d, ecparam)); + signature.initSign(prvKey); + } + public byte[] sign() throws Exception{ + byte[] sig=signature.sign(); + + // It seems that the output from SunEC is in ASN.1, + // so we have to convert it. + if(sig[0]==0x30 && // in ASN.1 + ((sig[1]+2 == sig.length) || + ((sig[1]&0x80)!=0 && (sig[2]&0xff)+3==sig.length))){// 2bytes for len + + int index=3; + if((sig[1]&0x80)!=0 && (sig[2]&0xff)+3==sig.length) + index=4; + + byte[] r = new byte[sig[index]]; + byte[] s = new byte[sig[index+2+sig[index]]]; + System.arraycopy(sig, index+1, r, 0, r.length); + System.arraycopy(sig, index+3+sig[index], s, 0, s.length); + + r = chop0(r); + s = chop0(s); + + Buffer buf = new Buffer(); + buf.putMPInt(r); + buf.putMPInt(s); + + sig=new byte[buf.getLength()]; + buf.setOffSet(0); + buf.getByte(sig); + } + + return sig; + } + public void update(byte[] foo) throws Exception{ + signature.update(foo); + } + public boolean verify(byte[] sig) throws Exception{ + + // It seems that SunEC expects ASN.1 data, + // so we have to convert it. + if(!(sig[0]==0x30 && // not in ASN.1 + ((sig[1]+2 == sig.length) || + ((sig[1]&0x80)!=0 && (sig[2]&0xff)+3==sig.length)))) { + Buffer b = new Buffer(sig); + + b.getString(); // ecdsa-sha2-nistp256 + b.getInt(); + + byte[] r = b.getMPInt(); + byte[] s = b.getMPInt(); + + r=insert0(r); + s=insert0(s); + + byte[] asn1 = null; + if(r.length<64){ + asn1 = new byte[6+r.length+s.length]; + asn1[0] = (byte)0x30; + asn1[1] = (byte)(4+r.length+s.length); + asn1[2] = (byte)0x02; + asn1[3] = (byte)r.length; + System.arraycopy(r, 0, asn1, 4, r.length); + asn1[r.length+4] = (byte)0x02; + asn1[r.length+5] = (byte)s.length; + System.arraycopy(s, 0, asn1, (6+r.length), s.length); + } + else { + asn1 = new byte[6+r.length+s.length+1]; + asn1[0] = (byte)0x30; + asn1[1] = (byte)0x81; + asn1[2] = (byte)(4+r.length+s.length); + asn1[3] = (byte)0x02; + asn1[4] = (byte)r.length; + System.arraycopy(r, 0, asn1, 5, r.length); + asn1[r.length+5] = (byte)0x02; + asn1[r.length+6] = (byte)s.length; + System.arraycopy(s, 0, asn1, (7+r.length), s.length); + } + sig=asn1; + } + + return signature.verify(sig); + } + + private byte[] insert0(byte[] buf){ + if ((buf[0] & 0x80) == 0) return buf; + byte[] tmp = new byte[buf.length+1]; + System.arraycopy(buf, 0, tmp, 1, buf.length); + bzero(buf); + return tmp; + } + private byte[] chop0(byte[] buf){ + if(buf[0]!=0) return buf; + byte[] tmp = new byte[buf.length-1]; + System.arraycopy(buf, 1, tmp, 0, tmp.length); + bzero(buf); + return tmp; + } + + private void bzero(byte[] buf){ + for(int i = 0; ibsize){ byte[] tmp=new byte[bsize]; System.arraycopy(key, 0, tmp, 0, bsize); diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD5.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD5.java index 90960113..c4fcb48f 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD5.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD5.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD596.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD596.java index 95c6f60d..f806962e 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD596.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACMD596.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA1.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA1.java index ea9eccf1..869c13c4 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA1.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA1.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA196.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA196.java index 86a81b5b..8f8e3276 100644 --- a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA196.java +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jcraft/HMACSHA196.java @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2006-2012 ymnk, JCraft,Inc. All rights reserved. +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jgss/GSSContextKrb5.java b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jgss/GSSContextKrb5.java new file mode 100644 index 00000000..cf3ca48f --- /dev/null +++ b/src/java/JavaFileStorage/app/src/main/java/com/jcraft/jsch/jgss/GSSContextKrb5.java @@ -0,0 +1,177 @@ +/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ +/* +Copyright (c) 2006-2016 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.jcraft.jsch.jgss; + +import com.jcraft.jsch.JSchException; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSCredential; +import org.ietf.jgss.GSSException; +import org.ietf.jgss.GSSManager; +import org.ietf.jgss.GSSName; +import org.ietf.jgss.MessageProp; +import org.ietf.jgss.Oid; + +public class GSSContextKrb5 implements com.jcraft.jsch.GSSContext{ + + private static final String pUseSubjectCredsOnly = + "javax.security.auth.useSubjectCredsOnly"; + private static String useSubjectCredsOnly = + getSystemProperty(pUseSubjectCredsOnly); + + private GSSContext context=null; + public void create(String user, String host) throws JSchException{ + try{ + // RFC 1964 + Oid krb5=new Oid("1.2.840.113554.1.2.2"); + // Kerberos Principal Name Form + Oid principalName=new Oid("1.2.840.113554.1.2.2.1"); + + GSSManager mgr=GSSManager.getInstance(); + + GSSCredential crd=null; + /* + try{ + GSSName _user=mgr.createName(user, principalName); + crd=mgr.createCredential(_user, + GSSCredential.DEFAULT_LIFETIME, + krb5, + GSSCredential.INITIATE_ONLY); + } + catch(GSSException crdex){ + } + */ + + String cname=host; + try{ + cname=InetAddress.getByName(cname).getCanonicalHostName(); + } + catch(UnknownHostException e){ + } + GSSName _host=mgr.createName("host/"+cname, principalName); + + context=mgr.createContext(_host, + krb5, + crd, + GSSContext.DEFAULT_LIFETIME); + + // RFC4462 3.4. GSS-API Session + // + // When calling GSS_Init_sec_context(), the client MUST set + // integ_req_flag to "true" to request that per-message integrity + // protection be supported for this context. In addition, + // deleg_req_flag MAY be set to "true" to request access delegation, if + // requested by the user. + // + // Since the user authentication process by its nature authenticates + // only the client, the setting of mutual_req_flag is not needed for + // this process. This flag SHOULD be set to "false". + + // TODO: OpenSSH's sshd does accepts 'false' for mutual_req_flag + //context.requestMutualAuth(false); + context.requestMutualAuth(true); + context.requestConf(true); + context.requestInteg(true); // for MIC + context.requestCredDeleg(true); + context.requestAnonymity(false); + + return; + } + catch(GSSException ex){ + throw new JSchException(ex.toString()); + } + } + + public boolean isEstablished(){ + return context.isEstablished(); + } + + public byte[] init(byte[] token, int s, int l) throws JSchException { + try{ + // Without setting "javax.security.auth.useSubjectCredsOnly" to "false", + // Sun's JVM for Un*x will show messages to stderr in + // processing context.initSecContext(). + // This hack is not thread safe ;-<. + // If that property is explicitly given as "true" or "false", + // this hack must not be invoked. + if(useSubjectCredsOnly==null){ + setSystemProperty(pUseSubjectCredsOnly, "false"); + } + return context.initSecContext(token, 0, l); + } + catch(GSSException ex){ + throw new JSchException(ex.toString()); + } + catch(java.lang.SecurityException ex){ + throw new JSchException(ex.toString()); + } + finally{ + if(useSubjectCredsOnly==null){ + // By the default, it must be "true". + setSystemProperty(pUseSubjectCredsOnly, "true"); + } + } + } + + public byte[] getMIC(byte[] message, int s, int l){ + try{ + MessageProp prop = new MessageProp(0, true); + return context.getMIC(message, s, l, prop); + } + catch(GSSException ex){ + return null; + } + } + + public void dispose(){ + try{ + context.dispose(); + } + catch(GSSException ex){ + } + } + + private static String getSystemProperty(String key){ + try{ return System.getProperty(key); } + catch(Exception e){ + // We are not allowed to get the System properties. + return null; + } + } + + private static void setSystemProperty(String key, String value){ + try{ System.setProperty(key, value); } + catch(Exception e){ + // We are not allowed to set the System properties. + } + } +} diff --git a/src/java/JavaFileStorageTest-AS/app/build.gradle b/src/java/JavaFileStorageTest-AS/app/build.gradle index 2d8e6d03..27e3252e 100644 --- a/src/java/JavaFileStorageTest-AS/app/build.gradle +++ b/src/java/JavaFileStorageTest-AS/app/build.gradle @@ -11,9 +11,6 @@ android { versionCode 1 versionName "1.0" - jackOptions { - enabled true - } } buildTypes { release {