diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index 9a79bbb..f455a57 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -88,7 +88,7 @@ module Redmine return nil if path.nil? cmd = "#{GIT_BIN} --git-dir #{target('')} log --date=iso --pretty=fuller --no-merges -n 1 " cmd << " #{shell_quote rev} " if rev - cmd << "-- #{path} " unless path.empty? + cmd << "-- #{shell_quote path} " unless path.empty? shellout(cmd) do |io| begin id = io.gets.split[1] @@ -121,7 +121,7 @@ module Redmine cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from cmd << "#{shell_quote identifier_to}" if identifier_to cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since] - cmd << " -- #{path}" if path && !path.empty? + cmd << " -- #{shell_quote path}" if path && !path.empty? shellout(cmd) do |io| files=[] diff --git a/test/fixtures/repositories/git_repository.tar.gz b/test/fixtures/repositories/git_repository.tar.gz index 8158d583244a12064c1d48d20eb64427d56d3159..8a07a230cc9202a7396d5f4ed6e207087ec63d03 100644 GIT binary patch literal 20118 zc$_3#by$?$)0U7BBt+?Mm2MBCwu$izLZCLp#>T)FT?1!&FZA6Z)p*eNI5acfoXwsV_<;FIaQ1 zY^qxbz6Hqqw)<3-!)k=0%odtsK;ia9vdZX_^06L{Mz4Xga>pY2YvuBGc;lw`+3u4c zj*OezaOwl(0m56;g7P^P5{N}48^lw^7+!v>i1n*$qf+bl6G-<0;{PWc;79G^3g9wI zLE}{pMagAFQ~sp|NZTIDG^z#5d{mdF|3dmea`2HS?kVDm|K$D=0DVDiKLfX;6Jeub zTjt^gt{;LOUYI#39ipR|GvF4K0Eu)rkA}3wvE4tva-i-1ipqI;2O9l&cms;)+bsGN z`L%pNaTnYQ3}E-ZG7*(OS|+9Ki&K&li2W@cWJ35IoBM}O9#qgJya__vALrozI@z^z!%xfr&B82Y^L6 zW{DuM8PcZIkiqHAvO%i z7^5;Cgi%Zv^Lgv~oFe5*Bw!+bv8g(4aw-~q@B4Q z;#It8{Wn#-SeX+E;{eWFRVJWzrU(2-i*lv0i>9uF2r#ZKB&(-&poe`x{VX4ja1M6D`UHfSXWu2sZn-oXqRr&#`U43Hi6( zY!Lcr*o96}5!vAner;CtXh?QhgG@F?iLydRx<1vUR$3tx-%fEM-((q?CUo5=0?>e? zO&UfCHDm`*V5hc^c*w}!l_PE!cEA`0poRO2L7OZ5+@bxaKMyya;TyvHvxMLaPKG=l zP@ms#a82ZT4+ynpk?R~z80!D?y5t6&KX}%URKEw#5-^^?7_tXX9e7A%fo_cl;9D%l zBaN~jkoyw_760c@(j7=@7kDp8z7J;3@p)pvWhUCKH2&wPtS@gs4VD+s??qex{t14B z*yud*YL_7X2cX`Ls1O8lOOTqud@}%LA_6c#4m{FWo4_k{0QKm9--aPT#{fvT4q5ox z@(-Xr3fW-vn^X911XS5y?HnQY8eo z|08bdBjCKjYyfN)J%RG2B@i(sPr%tO_%9Gv5Dk>f0SW&A!SMrtIufFi=Z}Q(qt0gd$6~z{CHP z=_p2klV1G4$%YR{!1_86Rtz{35o1D zn*-F~9SMvtuR&|*7aeEY9VPcM|H0db-#|XxOA*dK{!a`*K-Mq71y)GS@P7seUOs@u zo=WGy|Jl*;KjHrWEn#_(Z$U=zsKftTx(4TpV_r8r8d3um*=z+*4~n$;|0S`13#80g zb~#9x(mkx`7R)MzECGr^1#BGAovgZ@rbJkV&v3AaBb|k@@L3~coIOd=`h*yh{nM~7 zf@d(V{gHiFkQ6zEHl)-7ZuB7nf0)?Sfe$W-|I&d^b89kZEn6G*<3TV+<0Yle4c=0R z=Z|?|9boH+Dr^EpY8gV=40KPH@BIMMr9wVP4RkoVpi04*g|4llIe_!YI{)0|b)ja# z?#bM}{fGG6`8%nI`LXVbTk^H=y5YX!NA{!9ylx76;X;&F@gHAoT+2fpsJf0a5T{JP z+FF%Z9ta!z8zn}AJEcP6mhn?%u32Nt`LI3WP0^a~Z3Z?d2L!2toUd{xeY4D{pNe62 zUjD{=pP@>+9xJ?s%Pkq*gCf2AR1f$gYyNc0!HfAYGMMT#-rou~=X9PI`qicO2W;mp z_$`W>%kMuNiPz~GbDJG!khEx6;>HF%?%*$`PPIK0^FA?+>%PlCRk0#B&xEazNj{ z$V{kfiD0<1TFb4^_pR17R~SU=fH;c0B^9h&tl}xs;@rOdut#mYH#YVsOSs)jc2Dig zvZY)%2=D#6ux;pSZj@1^`)Tyaw|fu!<2gsu71g$8X36PqGu^)BGr&#Ko?o=N9JMT*~$MnuWlg zFuFK(i0MZGb}Vc!tIkmUISKrBQ!(LhN1tjaX7D4a(scE%_g0|Wb;lm%X5MIa*@~ir z9wJ83lS8YDDYkqTWfGJxVPVV=z{bRfpDYFEyPH?x(fcuWt)-fn*3Ff%7Jj8|Il>7= z6BC+cSGNmEvYz_D{{0FCUp4c$i`dsg3d_G=E2}tGxqh8Hjj`zXLA|o4YKvvWE^~M6 zOJU$=t@J%656LoB?`80vlMVBMcZOL0><$QW-HvBt-7?%}=O44| zU`s5UYLWgtb3Q*+uL??vx=D758b?D}W^!lcq!u^IYCOtsOCkme2LhwO9*+pFXANW4>dv6Xsg-ab8Y=0-R zaBcJnJPFbX@OkXGlHH$szZ-|p1JLKE9mgj6Fcfiru0?CQ%R5G#lj-7Goj%m8ZMLQS*7~64tS;T#dMRJZ4F8oVoKnHo`}Pkk?7`|?tnBs$ z=-mx;0RbX>Z9Kmr|u%}K`W>y@&3g_}X#;^^BS5>l!)vB3%jEc<=T zlGiWY&-hiH&t_h&mr|rEFFrP1ceU*}wRZqzf)zcrX_*!E!oGQb>OQR@wEf6W_YeXN zN18Se-WJ0pII9k%woSM!W_*o8ex%?eGxMwS#7wJVdbaSAasNJYvDP|`mydrtoPE}I zi~3I2(dcS>WNodrdv4|WeDx4p@8r{?bBo(zyiv_{-vj7QdwGE)>E#VYiLmKfVfD~S zo2{#k*nHag!ErVWBHpfB72qx~{Wy}$iFq~bRZ%-7nuJSrJ)c3=DGbUFxpipU#@UNp zP6dJL>&#R7u za<5Q=f4LV5DLWCN`cZdAz_4aM`nd(${WNv=A>&xnfQo2if5#>J3LEzJmw6&0wLg9h zWP4e#xOI6dtb@XW^suj)C=F;9LsYdn(dNcEKeX0ADAiYiovusaL_|W`lC|h(Z49wJB19nvRp`$(LB=?%MEX)M zUCH>SkqKTQ3?XoIM@`{rT{a)5Y{G7ge6W?>;O!wW_PbktC;LO@k1fYl|51of9ns zD0_O$`C!x;O$4)x%Cuh-L(wz|$p6z(pFU?70`vRJ8SU>>#D6o}q9J`WIvV0fr%&`{ zbiXK{%5?}U+-()Kvvzi@r-79!LC$l(9->skFX>A<9jl26yr4BJm6#LRai%fh!vSB4 z-$KjzBRjKU%UicKLy6FTES;X21RAOUi~}Y8sFmVv|NW(!I8opEavtT4zDd=qj6Hb^N#Ir6%581^L6)T zU&%Cnt$%ymW*LYK{uE{yU9j}p?n*?|XKm6ix74x}8YAZ5uy*2pG}Yr}Q?>&0^}T8- z{2MlYOJ5%AHh=mn#goIEnsWL}g~X<1NJu;4mw{hSucF0J*DT523UTn*gmHN75PuWG z&TyjUKuoHKsr$-L8zR+kCLO`ci&}#E6xDjI8N#{lmo4V$zBLZFXJ=`z0joA~GGE!M zCBMJ6PWFA7FPgje4FnW z2lCB=rLUyGUVUJ;-)MHP#|ZUq*@W1zxAu=ynA~f}eW=ge*!mj~OJaYDGwVfoLP(9+ zt#bQWw8WFlA*OwE@O6dcC`>tq27|zOdEP?%cKPzYr%#u}*22f5E46aO*2b-75SMw_ zh-)*phY~83_Q8Npe3SA|%cA>agj5LbBb(<@s=!@Q{qa-R7!QA4$=nAiO>3XFPKU-Y z(+jR?|EmxZ2*1Dw&-%g1>((kFFyd9IdP_xS!ij$4_@`sI<;nLe>kO1bD^E?4NQ2Uc zn=Oqvhs6kot-#~f(_^MSOv6UAvu2HqjEJRjzh=w&=5ji}4)AUB_~?A_o;e}C^P1zQ zj32Ov*{`};1_zXBMnAOV1YM_A2;62@L=bC7rP^->Fx34<1wu$9sr1Xs>px8!d44+@ zjFc>7bH(G;Szf8vyYp#hfi^pgyXc$Zv>9&)*JGDZVp$*C3Admz00yIV`G-kNHI*$A zAJ#1VI-g$=?X`NbN*f9?_Mzyo!!tn;ouYZ%B+ii1?;NCruy!nw@uFwOT zI@NYhT3hk31U5jffqSwsG~$|do$fPrr-+Jb4wz#4!Rd|5l6T$5?N2?o-e1f`FI--p za#fpVY-1P$0%^CV0}w7!ilY3)YSZ-7_R8c^O0<*UrsPY_Ma!mTY_0m@_ZIx11>0M_ z&^bH9d05vpX8lGjPRL!}`qiLS8_VO|W-Nms^hE@G#*J&BTCU{kRO$0+`zq(%3om0# zTb;H}C<%Xr#~fg)2+6+ibRNd&c$-P3PkodrVR$i+Q71J|FZ^}f*T5#qW$?n5za`VO z*=~K=wDAP?;kCj+qtJWs)wW~&JAvolyQIKd0dIulJ5 zd+Thz((K(``&`7`cct1l&2A)TGh*eJ6Vy}dczH!^e_ul5h~fQ9y(G)RX4r=;Vtp^s z;a$|VfcA?YOFsar=lV|W$J(+fS>YW^hI77Vl^w?uJ@@K|*@ucVS$q`g4hHfkCa{Jw z>b_GNViF;6of6n?UG;I~cu3s8?454vfMT5`$)ZhCLA%(}xXU0)>>qgY>2!st?WCh~ z(pi{7%U$MyXqhR>*>!Sv9mlEpcB#84bR-$WK!5E$sQi90kJG!pL-cag@^Us*^N#+> zu6$UuF>P^~=W0mFuw#gbFQULU3<_6iMD19tQN3Y2?%%5HCFX6&_z~8@ z+2jEx$2oXaKXR0NH7zMw)1dA26?A|cWEL81lU0TeRdhoNIbv2W%)Op9A@ibX8F=?R8^bFW_xJ96C%q+0^x-+`I08Em=NB~GHootd^%-zjY(%I% z5o3Fqp1dV?U-hcne8)E@Cn;noFQUvWA5`a(L@=oArrABF1`8SL2z)5|@+U4#O&Lf3;>veBg zQHZn7aPJfMbIq8)OO42hz2Wvd+mjrq;$p;weFgi4mV=;qdGOsu3eOlB^#K)X8V>Vy z1QlKPlqQ+Iv=}x$Q?3%b1D7?&EJ|s+TQ{993Z5 zx(;dgk@CUCw;1icuDOJrxIUck)t5*>%~A`!FL3c9c_&+jscRD2 z5hi*c0A~!B(G^?x40oUp^T#=jgg}qCG&@3iTjn)>MnX%jG=G*S0ax6l#j}~O8k%Ev zkS8JMVD(Tn#)09b{LO3Hf9GV4 z{;TBx>wQX2?pH_?{ZorN-3q6>_HD`MX&g9`J5rYvKzjb9Y!<>3`OaPrzwWHosa zHJ6*Sn9&tWMqM$bX?}%$uqfprTYN84#IRji}o_NmWqEty0&W znw_Nv9YE#gQ2Kq!*-yA6G*7f=CMmFoz|C&cbHML#DY+vTU#&aNE!4I_JN-fYygk}ngHfIidvOXu#&e;LBxr<(O6QXCU>}mJS6I$gV0cy&wC7`N ze=+(y$~Ma?MuFzZu9T*;p2es@Z?&-=huPhK=~RV=oRT0n%W>}jBc$4wC0g9xxMjA| z(@XG-K;q8t>k&qwoL@cdL)aNd`dW2)9K6sIC3vLpbt|>C&}xsv8cf@){y9|zTv1H; z#zY6VJT+lwuj62*PP<%DQ%97&@ep`YF8LAh7}ZXF;?!Yfvy|kSb*w5z#q|2U<*|3wA0k{dL|E#h@wF{d-E>l)kOWR}q{=)&u(^(a8`J4Fa9o+=N^H#?^Jem=XEKVK6<&0 zyLwqKwywv5%+4SRE5dDueiengXP8vy?Xd?{h}TClp0Lwk2GvzpLiU1@wQC~o>Gz6l z6^BhlN*O1vn+C{NU(-?-gZwY{ za?uRCZwCs`LYwaJsE(e<3opu#pt{X_-@LQT`=4H2JZ*jwsT+-2TW=mopZ(x!qQ^*n zmgLdZe3H-9Hgv@6JS=s4JIkGxK0S3I-Zs#NHxRrrT}BeEZ(i52GXzRh6%4Hpm;#I)_KJ_1*rCwFhF_G>WA!Kh!e4|2kGT(l&;Z z#UdRoy78@~oS3rBQ{l%uwqbH%=Y!Lp?jy_EC%~gdazZ&o&c%t!RzN8i`qmv|+svNLy`Y<@A{0mr?UX3Z1?tdVMQ0i2kx_B)yefymwD9`!z?3`$uuM20t>XEH% z5Z9vN&BV`>kutO?sG7$Q&>!0Z)3-!MT2ONSmrt?-sW79M3RTZ}g|z<#~?>eNDwUyGYpuCkJ3*LoRtcV{jDb%VX>TwD9(w zV{5tgWx-uWOn03rrvT2)(qq?^KWjmC9EGbTqjlQRVnShz9Uu6RG)ytE-4JRbd!o<0lELpF z*uqJ4Up4&gd$W?ERM`7Qun^aSdd18#$olGF<%dO#E{2A?#GwCIiIx~e!yilLGJgj4 zlQK$)^@X~#qVWqT#T^>(*H`yuW}57-v{$eDsPO$<&cp}r9{JnEW@GzBG+h>KGdu+B z>t(eTHaw5c&e9tm)y|sW3Q_e61~;{2gn}@Mniz^Q>Xq3Peqo;N?QD?Z&YE2o1u;dR zdx8*pT`s3(fk;sDXA8AGJnHx#)p$!T%$*{2rCy#2EiWb(w76Vp4<>$IhWfYq;=C`v zmiwI~>z(Ro$F}49U{g+P|HrrFv#(W%PU237&gIr=des0#o!kn>4<*HR_lU13PomE~ zk&C@+;LU%P?%tXkqxd#Mi^1P&5mv3#2t2Rz&rkX}DwDG3O{jM^}LNe_Fa!nwyarN{a|TYRk*BT%xf{gE*3Z^6`{Lk;4t zr}c^TJ9xm3rn9E@hPKnr*gCW8!%?iX#n%hLEh@{fn1(8^wb}Ob3F2ja5vkd*EE}3e zO=%IrHH4P!_4o0OrF|KL66a00dttn)YKIRM9b1WqBGd z)S_j2esi1~6B8NBR4ZnCICZLAJ92t|3mHgh(76smm~|iQohB>h8B10TB;hruAIThv zH+E0BB-F{1PQ8b#ExS{|%f=}_{1_}{T|8YtG@Or?UqPW~<|zfRKw8_Oz=lkfrTQh` zhuQvm@sq3MRR`_3KzYtMNy(j8%ojmmZf3U=PJO~ml)cT zuqjXP19r&~vdm3;f;9opWL> z+p=Chpdo{nFVm<0#_NMI% zKI8V?LKdPmigdu(w3!Ixo-SDb{?4(;RNWOil}%_Bvj+(W!;Hu%Y}NR$U467V+XHXU zX%dYBcurb$DUacU4BgFtH=r@_KB7lbxLt{FN*>+?S>-OmS(VzWL@D@5}8gQ%|BQ)jZHvyB)7Djug&#BS7TSubbzC88B z%+j>qnR*0?6K`E{_8OtKJk4So;eSu#=W+G)^7gi8nfTLyVY+$|l&6GSE%f3ywA3!S z?z{VE@#imTCChFxstjvYBbLi;pT7M1mTy<=c8~LEzbBl;zG-(KsOzDd*+W3v4Bx(@$)&h+ukZy_Q}gQ>A}n9fR6;v#ZFw5Yhcr%=}%kM(nf+gA^K+sdpYJhK(-Ef1(nTvynNWsNb707g@j{b zSPH!ybd>mWDgT^3_-3SOiupyEbU(AW_d@#z&h5b&GrTTORc1A^JeMeNu6tO+JGfox z1yPGkL(&&e$_zd0Lf=peOS7g3kJ_?k0}K~Tb2fsbF#dLbi?HLpJYYH?a^Z|euqtAs za73IgbgqxN9)5TVecEe7{5~egB_yw}p_RYWn2As=^=`}J$|-RlZ-*DQ)bn&SU0%@Z zy1~U1-KhQUze>&ZnCe)xdvEx^D! zs#XTPlVp8@II@4=|8Rb}cYM^YOH|Dl}2U(wmNcwrF@ zeW&2N(jbf2+)8D-RrTn$#kYV(N}r%g$L)32HW7}OPJ6vDt|(kyw#if-b>`scXc^>K z^^P*1>XFAUph>(RKXCtkH|YLBm$7>k7V&o+e^Y(ZnYg1m4QFu}NSI72AlykXYZVlYd z7YXJ_3FPKT?qd|j#Y^t$^x(qXfbLxx5%bH}a66DAGyi+#kg^0Q-yt~zu}k;ByV7~h zRk86$tQaGZi)5T)S-5z|p7M_!6=~+O8&599?zG3E@Cx%+lba^04Ii0+Xg(i+<+Fnf zb&OQCOiIWr)K|nT=!2rT zT_W*V8n?djV^=fj&X7_4c}q5i$MH`Z1*0gr_20{~{93-%AJ6-5TV zQ?Eh)SrYuekppvUOZ4@X4e9N^5`s4zg>5g>b;5wIsdEH?{`s7Y5x>Vn4==>Xl#Qc% zyT|7BHX%9@12^+8Bl;*FfOp~M0Tkc!z4*KWH%!f4T$^tt6UDSFTp=Y=LsyK^c;EmR z8o09%xHENmi@kdh-f!x`BfSNXPeuB zI=%Bj2(uADMH%k$WF2PF(xVPBLMo7TTmy?YS-{UfxL;fWh)UokFd#x@x?j@whN8`O zuNHcf7>o?j)%o>ea3#i3wT8HQ+kS=Bo@7~H)wzGdVsmWNGW`6 z6z6--J)Hy{nm->4Zm_iSMKs9tK!I+@fGFn$AxKP@9tsgjrM9Se#K_(sIlS>MV~pXi zr2hzJV7rFHz;trNu0Y2N0BHSE5|egDo`=$)FleTEAZmRY#d#1B?XiHpnz$-_5_sbI z^bkKR|BGRX+M_{)v3w(|mxsfB5;DCwW{Rh-Pu21Gh@I>a{UjLz8wy=@Znk$j52AIaUb(HEVyyCHLWcG0L+(+k!ccV25|4;g0D zzaGG46%sj8@o);>H?@gmvpRTp9e0e7CYB$%>0R)HosXX?0si_2{rencNS_ z5YzMeUmy(!YqMc=ZJpnvs{FiMWTV_PeU>d0?O3($^`(dN0W@5E2GposfOe(X0jbc6 zCy=%4CNdfuF3aSk*ePeb?6VYCP+ss2NoRTg(1A_@%OM@!eb$I`FBBn_!hNIa5D`SCUMh<-QhImAUsqUn z&ZX5d(0t$9N73?oA-iwL6R|xjo^@PRU!0y72mVCv2Vg>al>>WvQ-tEB&OOlMp}hng zL?lK+AGsmerZ&uBz`u~|1`U5bIs=Tk{!th{vjrKW2NG{O@N$zm6l7%#>s^L|3E#KI zYet=GSMr%2Gjra>hV-;2po4D(+6|iYX?DNchrjf2KAfwcb+yYKU)r^#aXcQY4nN}b z{t9>3GT?ql8*IEjK~5#d;=Fh&9HVJ(q33NHkr6A6nZ=Q4&`&?Qw7DW(Vy&3DW|FNl z%QKxoFXPUh9?;j`Y81JsshSKKc96AyT&VH3*M6Oaxg!DI4dM`77^z1;&8xVhF;!Fd zTrK-(rmF(E-;$@m>f+1+24Lg7k{yvPy(LLX zOwvpoZ_?FCBVU}~{ye+d+daFhUU;X;q{%{ZJE51{E3Ob@mw3CV_Nos4_gbOvy1vEC z%GvyGVSQ#yd8mW+Wd{&52I~>>cO<}2kbg-^vU?$O9wYT4g>^ho8+~-!xI?wSVjK9I z1_ML!?*P701Y4MT-}43==qeIqWOa^poaoH9)_4Z*}A`I~ngsN#4v zLPEbJPx_6GbvGoNIip|00Du&b5SoF5)$ajVe%JlF;sa2I?hAb`BpKNhes~ z)oqU@qlJ@1dM6e@c3w5w+HOUsjxGw;4TO2ImELv?_z|Ui@AADp-3upizqWIo2sag} zkdJoCJ%z64wnKM&A07LbNgNtpl6iGEg^bJ?`h92~X7-&9&ChJUJJNMCnZw&IU*g4VI+ooH*(V6XFgE>$9l35M zmv`>kVLXV;y%JpYkKivzYZ-4zt7KPdxtns7#e5UY>05Hzd!Gy7i6J<3#W}OHY&_Pg zqON>nOx= z(;FP`I0c`6q=G4`YyQwbxNUTvV#2gj>OK}&{_NIhHmTu41*fy``ZGBrfk%cj=F5q% zFT~r!`e9$|#w5Z`EWJsMN^!NB;lxU&cKx$Xd54?T5jJ+jqX9$~$1ld~IcV9z1=^wn zv_8Da@?`cNAwBuvyb!xnRSUD=bffU$Jq&l&yS)l5FXqk1fA7U&+p7Jl4H=+0@3h{O zcoe1^s0BaYwRm54`4}Ba<}6qb9_M@1&RYLnQxFVI1`t3^uP4MMJQK9h#_9NLq zY){75m%QT6R;CA;=2kJV+N|lBM0J^5S&4htNI5BRNmorVCbVV@Ka@Z`N0eZ}tJq$*AKf6%Q=2?09RfuW6} zEzq}E3>Y9*bynW~7OpD7%s6E5+6tE@qqcJWI1cQL1Ya&T{wdb|8`nHVfW-blG5SP_ z5l$5NjAcPC0UCf!j6cA|fy=AJj6-ss>aqP77(N4#r%28>fM%T1QAho!G5G!xto?*k zyzZfx8%#MTiK_5J*mjh_wdvHJyKQv1ju&da#d}l&Q`nj?YrtiP{>|~sRj8oB>7L3E z5z#;9axi?_=!>2TQqVLt%!;7!DOf6oUWjSqOIe=3{D8Tisfe{SXRV|0wf|&WoTktQ zH$92(?UlJKq@*O!efw1O;h35#mrl28X}oap&k+)Qp5?OJesIEc!l&Zfe?$1bUgI#) zZQm?JUQb83>T&3g^ke_s;eep04qx3I(mRjtDc6M~Wp9x+{d+YbHEymb1_Wy6=*b$x zKueIa?{X$HLLrG$gxp1xPs70reWmsiE1i-Wl7q#ZBiBmZ=EE^el%A zDR(FSx8mC8_7MfAP-&9;F~i!~I~)e2=1LKTPjBmch=B>H*;2e71Efd&=yQGg-i7vDy7;{2Rs zJ#GekH#$n0;yU4n&2_@h7*U}Mg|5;QmMpb)+u59$E;WiC!DI}DX-~d7vzGS=FRyw7 zy_2lRVL>R%dv@>0gF!Pg4jsJPWxEQ#tUdLqDOrf1^GvFLXs(T@+kjaS=mCObPYE(S92R)1qT_8NJZ*5x{3cL9pCMIRk?55Lic*+8y|rdN$@DADI0tkK+Qp(1KU$j}X zVH8yRaUH2VAa2nl7;zp@I@&tSVQ43+wUJcxcC;u%{o%Vx0@1Y+A{u@_J8$=;SMr>N z)WxT3-)phMXvp_Y!TVP~TSw;nl+Jbyx^BuQ27Y8;Emd7p`4IL2A>9e&q{Jb^H`a?& z?j6t7$I(KAj0BBOT~IVg=}Rh;wHclJ^~B(FXzrD?0RA2kdiS0YYqHU06MC@2b06X^ z7!QilgI>n_9~rO?y2!^Pz~)O3IA1#NvB)!A^K;++iY=UbEf|^iOLaL==J_%f!q}QF zR{*k|gwwm!)I_X1diI5ea=lclG+Fgqb%dt=hv1v@zFZ-@eof-&MkmJ0e!eA?R*#J^ z|AqFR5uN^<3W0Bb#D42nx2z(@0{*`Jbf-XZ+~#XN8ghd6DC#z?hil8%{PQqlSHaG^ zP`!HDd9wbdI+;8q)3z*4hX%0zmt>k;etr=MyCk4ArDw#Z1d}om21F3D8ey>E4Q&|X z#$Ab+J@Ft1?l&Loi(UZ3u}cW>UwbGxXKsItM|Qbmlcl$UL!M)Gy{hkAP#k-Pf%bMp zqyG`(gi2H(^o*6V>64)%`-R*%>Bz@uGq1Iov$L&7Ls0w*Wewx&8MeoYu#fFdVdc?6NX#;#uq zPaFHZmX=!C@t4!j##lFk+LnmPMU6~u9!>?06N{;qhm2Me^-u4l{X~Emvm}~`+mAS$ zw`O7n(I7Ug_uMst>{Uc`^D55X1!p_Qo0iSEwNI>{Kn^rF85W5L4J&`gZb57U?jSd# zn@eJo4DSz28)3UneD^WQf-yR_DSG!me6G4`6r=0f$c_t#hR8)ceJf%{ymu$i)_%Bm zN!|0;O(7%xWi(TlXWjwWS28Le>Ge30dw$6y z)5Az~TZ|h*RG{GQ3Tf6bcdzdyC}z~RBeL05CEk|Nd#zg)a>@Z(d!q8TsocNmt$bk( z)$B_hxFZhi!1GNZOsaA<>8{djNv<7b6q*~W{z@QURt0caVgZ!R&pZIV1S98X%N8|+ z#0oqq8#vflD8XEgDDgX}SLgq{DGsRl*B;>D`u}sM-@$hPfCdN8u9TCtSsxOY=9TkB zf&&=2sk@ASbNLgYWA9m@V47BHV-0Ur6AHw834Pga1rocT@S$Lpwts|Ox*{sXk$}V+ zFk|tDC}6aWca}ihXfOctuf$&rt!ef$Bd-oLW|5ascuv|H2&b3Y-Y@aWrMxx^+@cd@ zRZLUM>w6%#Hn7;t17%;+ZV@s5j_XiP`Bfr$hJRN=c089V?ZyVza1bGLM6WPb_$zeC zM^7KEP77XXjA*)m^|$|xL_MM*7em8=_mWoU9f`{Dr-tsGlIh(UUZc`s#WQfGvd&fK zd`WT`OQ}JU1{1N}ot`C6_hc9)8KYwcUtFjw7P;`b^rLpoFA}Jq4);O!68TjO#kxHu zuYRGD#MtW-*u)IG+K{0P+Py`b%f<~FX9lA&N=VpwadLY$Yd?z&9!|fK-p|T^{ri9F zAVF6l2!Ji=KYi$DsQIi)(~_=T7}RMj2cD(G z`6}40@`J~OmGdK4NYB|X4gIpyEdf0Szn<-ZU2I~ac~D;AebW)y8xZ~#g$QH7mG1R;-NmN=ePjhz!zZB1F)sS>igS{oELQ%Cr zo~a`#_&jEUJ78q{QW#6(=WogY0$R$zu$p_JaTCXfqMtDva+LN74-jl#a45j5b_cNj z<2V_g1~x-E=WAPanq6<4@V6sr$g0Ab>igbE52At7g$(gjX72BnsA>7_A;V1ypwPSEw zmxrPVagnb*Lkt84^jN#}+le+Wj&D1+C~uvlVOGzqMb%_9ntZgBafhlax1~2xQ>ZVw z8Q0qv7HI5(^ZwPffs(LlEP>T(&f>v~)b# z`!l6vW7*x~$%MeKc8wW$cCv|N?%o@_u>Fh;WqtHb~2j?Ns#k&5NGzJfG>~J_m2+q`fL)`%FiNEg9C6 zjTQO$2{%X<`{C^C-o}={`F8Ju$6*hnj_SX{H2r^*mu&f_#>RBYA7=wTPAgemc;`=c~r-sk>~ z?#DAatYqb|(I0%gP0EQFX{hiw)L-KXRmi@RV;@l9x?W#XZ0#GM@k;u??!C@NA}n>( zsKKd&v={<&f|Zjoxv7Flbnv&xj>JV)vnNy_0cL2AgjK4+!3hje{$Q){2DDIAk1eU8 z5I=cx;Xi%!T$!?{-Nj8h-0KmQN~m&2;Y~C@G4(hs2>ny8Sw8-aSj8xNKA3~zeNmx> z^Lqq(+y}B@fBc+#=tTAr{LxZPn=~4Yeuoa1fUvPRg;Cz$P2$->&bTu6QPH~Ty^$=M z#2>F8^vwROI3^;)&I=CipaHsDyDTL(BNd_V?*cHS58B0p&C$wyB1bXECpt!!DKGsG zjL{-Lx}kJ3ek>r$``uoFGN?nN#iT_O9u{0tv1+Dfd6J1G~bG0$+|$IEptLW7=`_NY&upT$uqhtIhvN0)?XO`|U( zd$`{6AI!(eynXXI?)kUgO%(s1-J73>1rvZTK?#i68x(xflmW7#VHy*(goN4mv~<$p zKXqn%^R1R-`@(2(CA8(x&9}KAGJiw^B&uboNhFP5nO1qSQVcv7qL3gZNSFOr$A-Py z5Djo3qvS}IswVhvycip0Jn(^%dg!^`OIEpW_>5e7-|+kLKC(Ck$zX?r!oR%eey zdV^N|E>W`|9d*4O$Kew_y-EQsIM{?RkjRIQ8C5O{V^$qj_Baxk}j$&M{Rr-o76Ljh#=`|ft)M7$YeVlf4uVjG0|jC-p;+`SXznor^aDsh(KAom!JyW_7*hHN z9uIK7B!HWln%4B-Fnik}5Mo8giHUSkct{8hXh=lUqEdrak)~7uk&tN^Waa??(UHOKpzn( z=VvD%Z!kpUqd_VL6_SQa!-N8%IGl2Pso7K>uQqS+@^2@;Qv(csj8jzZC#?o8`l_9V zDhxS_z9p(t%FlFIN7YoR^>d=s1{ul~S)*bjMTXxe{F;k-O)ABIc~YwAIQd@y6#!Pl zL00mLQwed#nX$$3Df727)*Tx1i_3e5`vY-u6xpx1EG|2xX z1Rs+&&K|(O=6^8w%>IG@sr*0X$oKruP8=2`p;!)NC@_K$&~K1axJW35?4V&-C?*n9 z5y!A_euz*SXh~Tz8Z}7x5=1i|pC_Je6O`0=~E z^lQ50>-u=jMHI#Td1Wj>Q)P;HeyDgN)dVyB+GX<^y$a+EP`*zBoHl{@;qtIG&>+Ya z%$H$epmH;LXVz&u0q9x` zznm8Q&~u7304nnQe%f_dhy)D&C@4J4R30KNz;6Ro>l=I5q9}DuO8~L5bssu<9Amsi&F`Vo07|g~Yg14TkHVw-*643z zNM2GcL~F>hoU!+-Q)7y7SQD7ty5ROT3>38P2c5Axa zp`w-(Yv-+6zrEIcM^G%&jLH}wMl1;?DM(;aX?Q3|S%V038Vwo<4HwD1+wUd;Fam<5 ziVXE@8gBCSlN?Kwk)ud$%@_r07E_Y~7JvywkRc(YPzO9_2_c|j3t&J2Dqi!=$gII~ zzZz=+&;hk5D#E`j;cI26q80lxaL}hU%c+XZ@*+Zk8Gg7B*n)4NK z8b&h#<4=MM#5keY+E`m`jm{`Pl%|NHDRNa9Vnu%eZA_%X9`boOn3{IwzLPK@Tp|x( zfs?eaA!fxHP*yKVLGCjfd-#4}{!VM6@t@TpS^2}TWn`Ne_|0;AUa zYeQKzssj2nso5t0KGp@bf))T^L-o)l=XBp!11OjpHehVk@HP45C{_$E2rzpv(y5+P zTpC7*sZj($gF$DADfB6Njhu$-jO43WRms$8Mv7kbHZpE2SbuKn#={5@k}4Fv+j}39wB~ziT5HSy5kS(V7-0dP5G0TBS>f z5IL}GHl8Y4g4G13fQseD3;>Hlll<~;wh&M`VI6ZrhD+qd*FessMzb{pv!-y$c+@G# z5Kx6cEKI5(G+$$dikKBfN(gDqQWLe6L_Q7`rskU}X)c6pfD{U$<_k=w0L9mhA7Ekw z*N9C`O@DdR40`z$^cs3t`~Qc}R4VER3|vVae8~2viRkry`$?KQzfy+)2;xa(!<^6sFu( zju&btIVp?;M!p7;5#YxfqIqGVzt(~-~s?=Cxs$JAq zYFCpSA_`kwJCn-Gv6JUYS%CVsks4}%VN<4ebs^|YHM}BwxmmeY)07oZWgo%J9P>=yEpvLndsBjt}3O_CYf42iv5k#w9 z12%_hc47k7g2AR@U>)TjfMfA*?-={KSxgbsq^L3YU@8~zK|adOKwlEQ1Mv=2zS`a+VvD z#;oonN1Bw3MUJ4GRtzuAopW)&C8)M}Kn7HZ9dc)AKdl_b=bVcCZkVE6Xvr>o(yz@;ow`I!bg%N_O%LCtga!JEoLrOMF zcBxkf)pjA^4ePg({CeW)SM_Z%5ZrV+4WHth6AV4l203OjaVnmgdu1q>H@813+nx0uUS}EuODrdEJ5+(9aBa)iGzt?; z25J$yS%yDhz6m!INu9y!U|))XoGIF=H?1MlGXX@hSM+DOOvg>cBjXk|K}O6DMLXXP z4#btN7bO$?1dbo2lBYUI?8~(+D93`S9>f)HN2wiLw}pp{%TG_?y^EJVkA0lRHC3Ol zW=*bEwMcj50;~ot!kc(*Rodt8i!7Na><{uPaY1tt zG0&RqA;LuBEK2C^HmFhIST#zdrbVc0i8H6hFti_Iv_a21{)!UXILXQr7tbG7*MthKfxIBxkqX zc7Y#JB_0EyQ!#2SR?enQ3;*>ZCd>?wiqFJ2BGXoLJk)|jGQatxi$G&%A;l!F52V2c zF#+6hZ9H|3F^Lc8IrSLQ!mYctx!i+Vep-_(a4k{ zJ)V+CRZIKHb4(Y=>6vHU)uj`YN9Bq5tg-kU0!!KAu`{<`h^DDA;^Y*dq=ia29Mak! zUTAZ{b|clgg^kL`wb$rwop35&{G+t)2jSoDbNuzlXlD>OGZ!E0aZIQyJ_deB_ zG`Bm-nFSL!n|#y~hfsJtVkeARB|WK_I(XSgb6y ze)o2r3Tlt76&j0C_h2M7Z5D>RFqy?mi}(nfCu354IqVTK{_J4=VVe?ix8LX-8i(|Ol_~fdpvQbtC^RF;ofLV$6-(htnQ@@CQ zVvE1YdNIiC;VxVILXw4Q*MiBO6jQ)}ZPez2q%>W`N-K(0J#R)BM&Q>^rf-0JF9> zKQXFEWNR{V45m`pgEX7Bz;C}-^Phbbv-YMB3yxO2h0+SD~*W?Ye} z*fD({45;5&c&fy+hVi9pUAJQQerU@=>CsUi9@NQTd3$+L+J42uYJH8eADRp@7^>N( z`zl6l{@8=vFP}wSZ3{Q!y8TlJz(XMOKgA%YtpBVdYN7$=$e!{+gf7+s13(^rU9*j> zd!2x+A^k0f;FO0yDrIq!j_!9;!v3Tjr^?h6UDd=Q%cK4cS85-XvUA`_$0G5)q~B)9 zrCyoh6p(m1_mdZuA%YVA&x0C59~}%ZPJoyFH$Da;ovM+1Vw6vRB94<~jNtbG4H)A; z$NzaVTfeSpLX6EW100Lm_mV`MVS2mBir9a4WvDwy>~S<=l-`enNI@uaUe;$Ah%0jY zoHU5k#a&ioh){)cLF`bOs87HiU` zxh50re%8W60;^(?|KKNswBb;YV>QzL9$6mq5Az1f6)@)>G>Fvu7YZ5u4XM{BGrHK1 zT=);WHVCe#hRAuWG5p7sNF=EkiziGt=st}>& z4Gm?n4KfF)&l^T6E$LuwVLh{604(ZSoA#32&Gl~(em-f!qLlCnIV|dg1%JT`pTjQ_ zIf#K01DY7qs)&0L0=T2n4Un4aHx1^N{ZmBWrHrUyMdBjJzp=u%5ss@Q;oj&L)~D>_ z{TP#!=tG^4=$&b!P2~Pvazc>kDwM?HMyX(WBwR`n^rORRK;pjQ3PWVWLkrD6WIlHF z^qy_hiVYO92-Q=ctVfI38=_CL$!*;Xr=wGLU3U|o*{^i|`FR@btVF*v=OWi&ve8U3 zF&U@u;GgM_!;;^2gdUwO!6@g{qjPbpdC`DdeDRvGd0&b%fFRl#_e)H5*_x*MN=sLz z^=1F|;SP<|ce}8Y(7bb+d~T{r=$d2OS-(z$>AC*TIW5f9v?aG7RmdQ#CJt#sj$2Mg zty_slHKH&-I(UiPJNRG{pZhOITapo}-;`s!r89SHsN@GvZv=` zz+JeHofd@)8}_anxN$u0gFA=2@prXQv2$bg`LuAdSMj3>Iux*O+7E5Yer;kdl|^sP zP~H8??b*jYAUoi8+SF=4R-@)UbTKfFDL;lTPZ~TYc-d*)CWzyVrX|7nXy;8U^&+%yq?t}opU#K|z zvmcTa^ilxD$)UaF%Ef=BN_xiR;7&ZFc?F7Q_ko=aWN$ZCs}Q0|Z6+3)ureMy!D0+> z48}WL{9@CAg(c(A<7LcbmGAn-b28c1=ZSKw%wo5}C}zUmO2lz0Uks6?zIsZXB(s{X zS&^wGAXEQQ*nqmzVWC6=RK%(wb|%RkaqDt!t8|~=#Pb{oWC*||JNp^%K=GHCpnOBm zErg7ED(F@pY}XjP7B8HM?-8smp{-f-fEt_M{?qtWMuK-{*IJg*JLO1Mx4Wf;B!BiM zu(5=-WcDE61*_vh>J4q*Dt#>1kkWVuzeVjrI|XyX|84(D0{iL&cV?e?m+7VQfl3~~J>(RCEFuwkP$C}`rIrAkNx?5)manaJDan$aJ z+|z`H*Tod}^i|_gTixfWV#JC-(65khMLt^K{B_vn_Bz>j;WH9Vj~F&-(;GT*maprn!0L>gaaaqfVC^JiKt zr80%W5EkDVI!kYFMCA5M;QudBv51|sY?JOttDn9NxhA6ySS%Vbv6BQO^6 zXcdvV+R3lTZOiD@6M>Je)C@)G*R*|}ow09Qtmr1YZsFg=s<5MUa(P8t)MDlAJy@~5 z)W3vD&f@N-u_fj!u%H-tN_s>WM=fRUb>a)nITP#7I~Dc(db2F?Q0WCveBiA5hU@9! zBejXh0{2S`s8*L<**s_&cDgi{H+nUjPS?pui*mc4H=Wf(!v6fp64*85p_J^G;XPfr z+TBi?@(!W1*esF_wchxyf*(P9@My>>$u7|fA3yZCFv`Dl-Q?nL1XTlS6bPCuS!lHK z`R+`-VD}fy6<$Tvx)4n7cXNuXdBedZjlQniJxvK%o}B1uR%V-YnZpyDrOeOgw9(XS z1%kuhxW+-(6h>Rwdwju#LBJ!pmVJwu_g3K;Wwh1x+1N3;FZVHOYSw0|jGZn2~uA3fZ4d`+Gwcm`Vc8|Z-BoVTqaa4G{tlzKNchsQD&K<;wn??rRO*ZoCAHF91 z4Q$d(W+&JGD875XCfgYrg89O@j&bRmw-gs=d|JPFb77llE9!)<w zAFEFdfx`&EskwU)P&O5wPjOJkJS8(-q8@sZc6;ak+o~rcEJE&p`dq9yy!m;pJOm0^ z3k7jY6^|X%OLZ*?cL4@zA&X|?0!tUmZ3G-kAxjaA?T12a{AXL;egIz8q_ zCxaFR!ns%amLZ-Rnp0p%0(FAjQL9qGCeIP#@t($D=6ihMb>Vw2y0nFqvE~9djSZR> zI6|Vs;{poe0u#6Fn5f5$#sA5KX{^sy=XKt;iUy)_bm%^LC2dZX^`9SKr^DGdYHy$= zbtLh15@wiU+t*++CAAu8=Ws(i-;h+Wb@f2|gXXVqc7GUv`OYDV6GwLU3OVAxe_Zy) z!z{>L&vBN5C{9Qypm(vM$*sNIF$@x>h$qEfy%-NZEm}-MLZcOr**tsXKtX(y)x088wKH+0D{Gv2mrNpC@s#Q?V#;9y)I2soo z{~P3?muU~q&;Po9wsbFj!pNPMD|&J#XYt$~OJNfJ5$*m}4w3hb$jLVXH>KNL%!@|q zws~hQbBiw85FbiJtnXA&=jlOoToBY$B-_=Q|7a*E zYe+szZ}(K(h3DH&M%!22dj}JWFBIdnd}jK~0WZ+Ay)mh4!N;d+_E41Xg=B=Z`7-lI zJYW%d-Jb?G870T&XVS zi}3w}L(~<-gl)5@ipZ%)5L3tBpS2E#`U|aHZrtC;eB>SC+;0F6Df0$crjzjeDj(RenW8LCZdsdvq)Z3NiZ7s9&xM*cMRH31!^ zTm&VNc^QjQ_ZK-*iJKB^4F2biDI=$}tm+x}tQ}Y)98R_Z0jXAh4iyEwHJ(eV4&nE) zQTZU>g1{$(v}P&+cv2I%4e|-f?sD_Q3L>rad1$27tvge2E#Q0{t#=K;QJ5M6tT){) z6hW$qtK~bp$VlA17QVy(7!3My6yV}^v#C+vQQE7;#CwpMhhXHhQr}-%o`lRY@fL1lA!N&6f$9`F ztSYyIMl1cEWiF+Xn$GoBDL=!fiSjtjmZ?|%!HS4}6E{0+w|&TC zX>y_cl}L+-LLTBn$@zVL=!0>*%{*NvR+F(%&@kcph#uHA#BU?*s)!AAq^rK`He<`LLoWpQcUMjuVT>BWh6%{-% z;u<^`Qc@LP?XJje;oO;=%>9^(N>fMi_s(5k^JDI2TNK?>z~JhEMlkWJm~*5_kc+*C z18)Ctx-`$K0srwK$AwC@iEaF(@=-&!2z$wcT#VC6s_WmD3v$qvE4WHm>>g{Xo%@3R z=`Fs~!DWG0?L~yp1X>_-6QZ@D(R=+mlXZJQ$_!|V?S;=xDFIY@QRSeqe0FO59g7Mu^H^?Fpay!J`bd}g83y((uv ztHwKqeNJ_IvtEJzlrm2w*BlweLzdzI$V6=YVW~%Zd)N` zS`eBp={2j_(YJ$5=ehQ-5I-^v0`T-sHsafD*M$fcigOV9Sh`)-v?n4GUwe#Z6MMN(ji1qCJC5;@QoJiHJxS@(2ja89A|EjSo zDnVx*0lEkGh7;*8{Nv|WDH92_^#%evi6e_j!XvygXQKS&=1Gk!A6#mb2K7or!vQQ{AVz=Sh?mSLplzJkZmWSIjen0@vjFYZ#Xh}R0R%j<4$T$l_nptrgXB}; ze`(^DyB>aGX^@SdoQT)Q_(7?c{CpFFXxq7wm(FYV75fhzQXKGUJK#kEiK&rREij|` z!daMeVea*eRojK845>)dX@AUhH7+ibfi&b|pUd`_fm&t4ZD#r#AK(F))%kE$5Y zle<4@Z2d>+0-~rqb|$incf())lA{$lQvu#N?^IH1>+ErWIk9+URJN_<)a3F#R9c@W zC!YlhAJDn3?@!qmh;uVg=1Ynm{goSwi%S@Bnrl#tp@33lO-;HUdje-IHmlgQ9 zid;>bLH9c`A~rN=jG`v5Ftvc@yj&JcCdrcAU4?d8rVJTpIE2hg(tkh_4K(C0rQg93vJ_5E)xP+dgh9d z&R%iXdbQPyfa~RjuG9u}x28M^6~NvK?N8iok-)V{vooJK`2l~oq%A4v7t_(xS{Ii^ z1)@t2uqonv6SQM#Hd^?R^&F zaK&}tUmSgi3-aKR5ZLn0^#s@57WieTPZ&01A9d*#i$L~&8`s2fsqJb)Rz*UI+%GlT z44&ZMu=IR=ccmR;U4*_5hmfrv&t6GArYDpTQXO@`abJl~t!;g=5cTaJ?KsT-Tb?lN zW*0JHC+u3*WUG3w_jJfoTt($_Q$TknVdnr#W>q4~4&FHRy}5Z8{dE$8sUtKiCjDtLmaQw>T+G5@?-*mf zsrgWd?nybQ{RPvlzO6k=?J=$2RT}KB%Qv?mv!U!)$L9EVvp*$5N_xmaepOv2JY2DU z!P5sJ&qX`MW7%Q=bbgPUqs)x<<`&y!?6Nk<%&^k|);5<)J~H%KFqG=~?NsKGEBqz2 zJ`mSpabv>h0O$2{!vN-zOI4nkvxOxGfwzdoqo%Z^nP%d!DB9g-`ylI9&b{PHbY#B< z^da%3$#!TuRp*XmN~ryDoXYxSyYZY9bkTp2b!JtEj4}%9j5vh9r`G#27}q8mFEz01 zJ=!oNLMh`FJIJc|b<%wnoyzG*-YH^IgSzB6&%07@>vm#$fGX)A!G<%h{bqKxGZg>X zkUe&yjh%~4NYtnjr;feF205=`IGraw1hK$lh4qggGy-&$)KrNLi~|G1wwC$Y(t!H9U|Zn z9pVBk@^-=E?r{Cdvq3S!D?T)`qp;*J@dF93Sg&=-$LsUD7}F{jKY)NQuQkrfO>)+c z2@jnmv&56V%l#bEF#uEHN|_xjqpCLRm2D!Vm!QzPnH=ZefSr{4QsEz*BSD>y`|B+w ziPAg*b5kyPe6L(@gtd$~6g0sF#mOyH14Kg)us*GvH?C@Y1vAcK1*f#Wt!Z(38(l1N zu2T3Q!c37l59cqp>7|QGy)VZiTD){SOS`y&1ncqvejl$+e}*{Yd1a5d)YBGR9VeTk z%#EfhBuZ4XWbk8A({{eK9xan%C1wEvTb3JMWvm`!zm+z@D-gHort1SpFk}D@`A%oY zN!EHN0R5dEQz-)?L2?42EUJ^MnI6?Z_n1)c!AmCARR-Ie!Ko&YCF%|9U%p`bJu=9e zXh+=9Dh!@$ec*6&@O~$Mw)Qo$Yb{?G(Ydi(Y`55RN!hSz$t17YUEmAYj$r&8@ zX)NRe$pLOm$9Yib{g=6tA;o0(^==|s)>OG5iHzmYTaQdp)6pUN)0y0kGvRiEoAr?2Q?zs)@fmZ>3i}uO zJkEDSqOAOBP>C}~lAxWLcOP=%W~TEQ&o|mXt+jLXljkf3j%BN)?TI7?NzO_@V3)4C zMTsS?KC9n?fkV1gJ6M0aZ8UVbX`j-;=ZY_R6-I*4UrM;Am}yF`?x*Prw<*2}_x?AFEAN$805dIya_gYkW3lsm|jd7P`3md^!P)=s)q%%btr-BSaFm z3eIFTw4r`JbF*bSU(;rK#}DGf%_2L{y}Sd9JjUB&ohg1A` z;`|38Oj2kiXA(`KQr$h~=DinZMiW$I;MHs2Ojlh<$ncs?8%xsJ^EKiH>%|1!kSXAP zx2c&(0$LXIpVvOEf1WLQVq`iG7_t z7=5hAPq#vTM(vF!bR6PA2PbZGO&f0qauZ2rSo5y^i8cmJ9&Di=OX0#KuAOQU^KRBE zJyrdQ1o-Dl+dtgr8t2YVhrY`s1@oyiyxNRaqa-8B>UQ_0Qj8g$o5#vQsR`p>6*y> z@#*y$fs}OMzLYOVih2gQZ>S;RNwb@`0F-^|z-43+2haZD;43jD?{VNw3IjZsKx#hN zbvQF_d!=(sl3P-B*oCXhyQN}6!_{-UOLs|n3i{}{G@{XAE!M$*wpbbbcy$)nvfPn$ zkrPQBVg*+Yif&WYVaR}YRkoYVrqAI&QP1YS5dqWm2CS%ZSp4bQ*QI&)qd9-Er{;wP z8i&l^-IdJ>pc0^pj%$;X*P;hjk=; zQ)2wN-HT-xNc?b zDdrwbXJ*13lEn(%B9!7RJhOlj$QZ6WY@s{@#1=Y{H%nc(w;Vn&Ya{{jwx?qVGB)ZX z6eM^egOpTo;>nd*ZQ^rYMtY?vd`on?IPJmy^c)nL_CczFr{&uRI%ccg0vTtMlw1${ z*;&-0HsYa-++W^#u*Ji-fX|ETwpN2asV>q~Q1jrlWNkma&FVu}_@R3Ups#uk4Ia!h zAtTKJidfpCabN+iZe&Y3(ap3?3^r@L~>^;QD8xg0=F@14etJ8x)Dj2qsb$r|{tfM_c>;#-`_7V&fU0&N3KdLBuGACO!Vke6*+A$_j;wO8EJLP-r7>!Zya#>^N4GvTH{^eV7^wSl!AjKiZ{T`O+RO+- z`Qb`JnN3)eXzg2iC+ju5?HydR^~J#!V_Y*YTG!`p?5WXrtpc3-g$r33%|Qnxr+pI* zM}1S=RM2c#D`RM2%NRUdx_a3oVNlr4`NB%e?vA#L-Ro{1ynp@EY}~H;J1F04^-&dy z7cjITncL)RZ;d?7%I=`yT9>rzpus-U@pK15X?HZj##X{KY@+Jytm1OkPP@wC5d&vI z$C0eYxZsxO-mV{Mbxke8D$Y;|t@URk)-!z8kO|71SmeN`hZ_*nNEBh}$l#-T-V}p7 z>ZDC-mi9NaJ~{=A7r8?aqDr%h-LiX`m?s*9&IAI`^x6iQ=aBr!1d6YDM4z@E{cR&X!3D?J(@pl?D2*D-C8+h*atgJGqM;$vB zhV0zN8VLu3WUR$Oa}Da;_8eZ4bsG*P@G2b%SmK2!ERyxshw6a(a&?1#wf?c$9gMZ| zVX+>E$8zj%O;h&6&y=o&(xH^Tn8n7{tk7P-_oYmXqYGx3$r$51GrS&#QblK3rg76CtO-?ZscxK|Ihi11>k6MKS5; zf&5Y&+(d%1eJQD+pyBHgFpC+bw9`$o%H$udl+IXIg?2l1B|Feo4cNP|e{$X0`T{m5 zz^%w)_f2MCXvE77knKFJGV3xq_Ja>2SK^y|j|BxJfw-x&T3E0Kk?`pO3V1ZmcBjbo=dK>T*iHtqBfD97O67C^&V{@KEoJ$bYkq z8md&ZuR71nYHK%l1NV0h%=Wvm3jD2VY99Z|<$7rAct}_Lk50u)ciQholH6e(+F=b( zOry~_*QX<7NnT+N0vXR2PrPCJA!t{+ z`nVOJB1GK!(v=vuIA;zN;!goNISsm|al7`^2eOiwb~IJ#O~;S?B!PU{<*>Ulm8R@l zPEPr9ASPWsweUwvl|#0fij3tivali+wfj!UwM|wN7}tc_D56({=|)`X?Cfoa`OzcRk2NRa`Px_NM#$> zwa}LY`*?hC7%=@>jYwxP{pI8*_J*dz-3p6Hrj|{tWy!iqYpA2r<&fLqP^R!7iSZ4D zv{)=Ft*;}Z)QPskpMYcAsAXYWFSS#L_KVQ=GU=anVSQ_>k4kMhk08TxA|z*gFJK2& zx-+|T-HE|G@N<8l;hdDLO!47T+$>b2!raHT-B)e<)M>55W{6ws~H6D>gCfSBGy`+FfBUkdLLwQ9GPj8r{Lt z_y2T85;62e3OTWjw#5MhR1YHbaM|yXk+)HJG%{oc$>O)YL=Udo$j=3~Zj0-V^M7iA z`w2f?1*nD3bDg0(PhY`UFZ(h93!MvYM=OYFLN|!aG)rqx2M1%jCT;3tN6MZ0mz^}B zKF)v41+a&5%#}?lj~r+6*?O_UvvxRgFT9^l^FIY9w9IWC%ynV~e;nj-t+%>*O84l{ z`hf>*_Jceo8R}LaPo7UpJj1r8TkH<<54(=mcTLVZ0yY9cPfi#B_zTHR7jrp*6EkHW z01^Y^Tsk*SV5OVVj*pKtj%(|N5OtK*gEn*ZIpR|LOJ_f_>j7z?ehihNgduM}l_8OR zcgUY07;J6paaoO(GyMEQrE|q)17DNd4apX`dzSqR>~~kvjP5O?4DfvGbsJWL3l0tK zuzR{t1V~;6&3qo~{kBwABz6r__!l16mI&pvn@wq%n%o8lLza||#XtBZ92;wV2~BvU zD(Mc8l~C_EgtSQf?}d&1nev6Uie2?~8ht(wm(RH-pAYrSP5D^u`i{_qVx{!-Y=un> zYF`eCnVB?ML5oP6mhWbKjmY`R`WZ>(-J!wLK8IelH-whJN^#6I18=2qC8TO{Y4C9F zbG89QH(0o(^Xa$W3~Z)mPW_+_%grFS(M8z`FcHyysIn}T)1ps(GjY%lB ztR6DEuPw3+z4}!!wequb2)_J0lVJq8X}+cMAFqmomVO{05M5P1x9PNpm3RDoYZoWn zzq;cZ<|2s>%_!S=$AlM{Eg}>uT)f5ye<)I0^*LWD*;|fx$)LF_d+^vydxtGR|5BY% zk(4;Auy5FYCbu9WxibcW2*u)_&9>g1*T2mg3ds&P?dF%tSi~wY!DeCp>X*+?u3* z(b?ApzZSz1Z&cxM14k=H56U@Ry&tN%8js;Hd<40PA3WSkRRX*C?j(mV=EnWw z^hWm0N2sS#2}H7oLS$+-eb40w7(2)E3mSob9w%34f7R!=U+9?`Rq`R5Rm$^<ooi>c z1bjHsKbGlmmhy;8KBW758~iiGHL1vh@nY~{w4hgXg5c1veI>c_XGYcJxd-SOOd|gr z0EKfx&(zc)1!m17eZ_i8N5vWtT}iBbM17svz^|Ay&qbHct%j3>Phc)Z8j`6~&bdv$ z-_}tLnRge!jvBCx-(5^ZP3?ikYLX*Ki|@O8XU*qGm!c%I!O?J@co)Lwal4MbY=V2- z)QsY(IXggUz*cU?oa$rOMg=Z05U2tGBb|03kA>%Aa9aOxmZ&#eTrN>?TZx#ncHdViolS=>brKZak~C z%6$9=eX{PYmzKvc3@29K)(b;AZT()Yxbwl{W@42rl6JzwrH@Nb$H@ZTPzZ~`EL@PX zL%vpOQ;_GRtp@I@Du1$07wC^ZI_^mCrPXZ9CpC^}%8&mP6z<0j4D(=kX(fvv?diUS zz9X3tHn8trPQ^AZ`?}~g@`rdRA3}HcNoxWsvml4ph?Mi|2N$*u6HC05&tK#25b8Wx z7n<`x-HuLSf2E^F*{2=I`suAm)fHWBrI;ifa z0+xh5KkgDUB1P@Ly`Y)%T2E#;cjub+b&Ty)3hLTzh2Zb=7&C9Hxn-~98!Fr=m~2WC zDwei2`E^bYT2AeC#Ti@U8rSrL#M7o9K1De_lyvaZ;V%(pH52fQXOh?d1gDS3$AgvN z(i&^8`D`{GNknp=e`KX`ZeZCPNdRjd5WS$VSGCs=B1gb>1_FrD*O= zW7|(_zj6hHT~$_Ezn6s+Q&36U)4|ul%|&hZ7e(!tN&NoiIgmo?)PWC=yz$rBXsAgO zyCuQZ$?wfm$9A_x4R{`7wlD4hZ;h)lk;jE@P>}loqGqo&?dMGLpFcz99M4-~WijKl zsr_u?Dl!NBG26!$pS=x51tqsFSL5v5l7h+k%&#@nEH^%iJC>9QwJShy@YYH2;26Jg zk-QNK#ldgvQD|+R8dfA3Mldx|!jmP*$DwH99B;6*4r}JG1Yiy3jm^j@S-~m5@2GB= z%siJomaCDkkBRr(){5DMXim#}t#3*Lny;SwW75v|KpTOl4l5nD8tu87o`OL^GnU_b zc2zWtOwLypI-ZJOPR%bN+CsA(3>c64GHhE<@D4%y_o`#;(ssGeS(jx5;G5(p26vZ~ zM@~zGZEVk}?2?feIS!WjcDe@Clv!Qm-IJlai-@poRHpUZs7p#`ai7sG`{~6?AY=+) zEeW%s{YnQQv}$mZ9h3(jkY-5vJgi$9AFhto9^P4(&4_SqCgt-A39^w(k)5CUwc1!c zl}q7Gj3E{O)ikwmM2sh2bJ&m_vE(Qweb1{8*o5IDMD-Zd(yC}Tz}NFrH^98r3jpe! z!y#tfO}buYfNc0Woo3~t{n%TjOO=uk(kxWgZj>aJ%`zy!wvZ3Vg2U>9E8xwErE74LBF-gYWOmD^OOqg`kad;z{N<3H6 zYbdjMHEeT$aojmwF?<{10qpS5&54Ta!VWDGss(Dud2ItSk9%c+J*;BE`tM(3$HWy$ zhBI#wlJ^q7T#gJILVHhg>0VG9x`B-3b*e%(h&tmT7G!5u`ygy)ICOUIE&F97iScDF z#zriOQ=76`uMBasTOLzu)!AmIM(WnBy;yybS*|8IojLx(f9w|q81=~jlF<^&*Vo}i znFI=(S+d|5G6U*{?t5zERly>?sDQU;Utz^JXOnIaJIz;ZezV>WXGV-Nu4n7;5%YD0 zY0R6O@*anc$PB+6W`aUVFn%Pa4XJ8rmwpMB}}rH zyl5C1sJUwVPvmKPh=00}faC)OA&GzYfC9@sk#rr$aGrU}&b#kBi*6XPX?kR=WEU=A z>tQ31{4wEW=k<>(1VaZj@g-sFw`jPnW$6#^-)E!I=Mm8e@qbI7ZcR^(k7eVbZJwV- zu7zU71l;o=jEwN)Lk%ytD`T7BhH=vHp$zCl%BZL7)&9#3a=vrYZnPYdT1*#^)G=9SMp!%E zKCmd`EaEF&?{-(uLX_vn&wN<1&M$bIq$ffEMhX{gU1bf1*wNDMdkYA@&&(Bb?0t3x zX84TRzUW-I2qVC=xBmr?E9Zt;y+R2J$G}zosQgxvHfbzIg|vt8W#s%MAf1b;+ojm_ z9?7_Qfwb@xyZ~t9vM(aBM2=jSt>c{+yJFjK2GsrEj~NYt3q46snE%L*1-hAb|23Lg zWI;ARtl5L__oJtH@HMDc`s&xmdu+SxAP*Fwy?~J2O+6Q16Y$S&o`dc4*iZxAl?;{- z4HDrrKEKPjwZ6yJ0o!6Hn zYOj*Dv*eA;H)oin$7@; z2k;BWBDWJj(-qR}8Xj{_T8+&Qon#X52U1X-cjDJwoORbW#85~*7`TWCY))B$AIABt zE`--Xv`5i%`6i>JWrGcpdC`(5tD_uFQF;Rjbr%VZXtO0 zFTyx^q}m=d6zh(olJ;v-6Ei{YxV7FbA9v0=mdA03ampX_hmsS@&|7B>6y44(LV5BK ze}iFiRYJl*;oxOn&)*-uCX&*ei4_(Fl^4mBh+j^y9)=iNJz9q(<(*q!8g2h{i6kIxlIM&v_pY8rI8 zj~{8;IxniU)=rM}jCSHK{-*etg}QnyrLW-T9`Z=cw^1C_*A%tgT$Ht6PFdAago~%;O7&a$E*uWiTgBr z{ug+I*)N(wPUR*Ueu$jL{#zFJqC z8tLlQ3opP2Z?&pQB`FwXyBp=R*g_N_@++aFv{tu5mTcr6QRM6Gx14!g-5$cZtnZ`H zUf6B>ca9@Dv+hh_bTg9364LLBro!@9aEM6r3GH$2z;Mu!LDjw3oT6(3C%^j%+5;ia z#?iq^CiG2N`bMiG5P0`Sz#c;*K(x#T*;+pWxv2BoHVmdlkOdTE7oPZfrGshFu= zO|h+UujA8YU(mMsoWjFn?7S+2)$~NE8ST`?EIn&w?4Ey2@-$3Ex?8R&Do{ac5TCBJ zhs=O9aF~4*{H%+Be5ON84{{fJ-)Qv_uq!ioKxb^l>)5xQFllOLh?nWSu%20Q7uvYq zy5AW$<$G^RVzoBBJAAp5fm;s)3kh-{IV$jBjLw)z8t(qV_-QDbAe4hN&iJTq-jV%l z3+mPv)URwAWD)-kM{`d=cnB=1A{JQ@^$r3^|MZAt{jmY?aNrkO(A5bGA5WuTO-stu zbLKEJ$usoybn^)CRCsFp==SZ;s}_oy&6h5GXBJaoZQxAvs6NOW=kJc2Rcp|v^0=#? zbfgq59UtZlyIYp$r==FAlgja70xPc~)!bi*hI@&jrEAa!lj0uKDeHIJdPW+nf4f!@ zPBP-T0ZzxQHO$d{?@^+cvW7g1t(e|(42(tugv z_zK^UVAzBSQ*5s%i@MmKEv8uh+PvH^Y2!5uGkp=0WZvsBn??G4l-M`Dh1eC5ImU(V zvFfy>=&}9D4J5;w?@O6D)rpvius-Od4)anIy{7j`mJgTXm&I36)(-#ug$*rj45vaL zGh5;NXCZBcNV&H}-&5peb;x}_pec-E5BPXdC9m`bHol;egOh7H*@q$lC5Dd#8OpLY zuQ=bn<;1KtBv&WM#DJfPheiYN$*N-kFP3q0p3J!BOC;pzi3F^B8fj7JH7&ygIVIo5 zhn1(Gj6{CaiA2-xHJ2s-{hk9uB8B>8+KUg{k?PSHsHGM~k>o`EVMM>9@#Wd^vC)}l z`}lP9Z7iJ>6gGN(2)*E-*OHI>^eo3oIA?`Z5jo3#txOS_f^wOx%o11n<^{`_MTQ^p z$_iO|kBcwD0KZ?L04NrWvyF*#s+tzHKPSAU`26Ch2X>yS>ekzUyTs2K%Ixx=tvP^3Tp=qam;3o<|&afbUvml?3pi1G&eCAsy1LDtdWu|y&IAHXqMhNM( zk^`4HE_&{k5gL#{mq(Svv3w(E_CpcXK9*b^GFzzZSp8-4!ICo%Wv<=x9BT`8h2)Do zFAEg)^&hJiO&8Sf<#J{))>X9hYsQc(0;f3I>C5BhSG<7tE}u-u6Vc^{)!s0%xVJ|# z9ffsRbRQO<>)`yU+jLSklh76D4z#CciDJXs5nKzJem#Yf84AY=lDq0o?PX{uKjyM} zgk~EUEkm=7jI#J0(_PS?dg8xr92Br+_oxV`)?jB1D@{B>uSL6)2omG!&R z{r&eb!6ibQyIZ7OXU{25_T~OtSfBt*NiNWe)BKnR{lcZ%-i~_u*C*YxAO>xaj9W~BrC?8E zBvJ)@8S_k+_rv|xHiu02#l$9i_v7!!0n230k8CgAeT#nu z{UuuQX`39O_qhm9ko*z&-UF#+S;tWB3RA;jV4&2a(S zx1Y(W7ltt8eOmTUsgciY*>n?58aKfRK9ppVR8! zeC5h)^kH%o6kj6@sIUgJ;)=Jh)fF|Ke+-t!zhoGR_?bFfXl~xS{dQF3lX0=E>a4pv z=3PqU_D9P+sd*)Jd3Jy@PAdQVv(Fyvp8*x3gpn3(xl!HJ)TFi8>00h8_#==aHg!v9 ze7gOu*4GeoY~r0uWo{OF9key2*R*M4yH_g0Z(sB4kTUce)P{|*26R`U{uufHA5>pm z%J=Y6d{{}cZ2QEd&7j$1XmN6fi{nTi-33t< z!{4gQCV1>Kx5p=ke?R)Ljt#f zQMD--J0Rl;SPkiKEf_L@TA#C`ehrj#^ls4~@ELvnD_|5>BdIDs{ZDUdX+JH zgS`Cr_dF!e6DqGHp?$ znx_)g?KUQgV*k<|q40hLg-VTZ(dT8_=je^k_~FX`YRb|xMc$Z1@PYE>9tx56L3WF- z*|cNfD|Q5W5|*ghNAuj7qjxy?#~1SivZoZHe2EN+uW(CH@nanVKRHfwq-uVCjW@$c z-;OoR)c^jhm7h3Yld<<-PpZKZYy}`gO{L`|*PRQ?-ST6#@9-kZ!_!ks(*gdGl9=AF zA0>MtKc&z#;#>bQ{xkGr#+jn&U7WDPOgH`$P2k&%Tmm<)Gv5#Z_h<=ZNt)@t^9JjSb8vA~#j*bbfwB=rR5L zt*H&e&_*>EIO;CYYUY0jA3SNVGaoxez0l$x6YYXZ!N6q z3*}u`@rmK@=m^pMyeuIn9Z(O8UO2{N(<3NGogfvJI_#neXLV4|C6RL@pnhMOS zLCKcZTjSdOBUGpTCnW@!tbX_3hFryit5h(~0$%5@DO-7>zi9m{pg~4`;#bBTqlWpG2sFUP!3@9kqVe1KbCe0e zxdT;)i%eA*32d+!rD{}cFi_@opn+xvh{OTPQw4Vv)*RqG@IdJRp>lbQokUD1CR2Z9 zGQcAxUjo0$fgTGk)+ozFC6aIJpKC=y=t{l1Ihs~jRXde!d|XsB?CW0!9a@T zlr1k2hs6X?83N#1%=yL(|H?sP8mAhv3DmX$V6y~P%Z}8My^4O2y=s(KYlm_tL$#7C zIjv%U)i|%Jt*VjAY6BH!!FQ5VrU6hWr-QQ^1FHt8UX}H(N14>Bo&dwj$#dX{(abTns_WshAd0aT zl_@BPN9oa3b-HQ{DQc>OsLEJYSnNHkwU{#5!?6g3rJ_ffF-$riqmyGS%^?PrUe63z zcXsv=OqnNo36Lxz4A>(KKQY5f)jW8N;uhthP;Df_h;U$jRu);SOv(&3RTiu_T3NCw zqUhfb%SOhSD~%|nM*&zb16?((*8Vs}g>-wsr36({rGXE4Re4_1q^9mD8=wblDxh4e zE+o*tOKk#GRsfGtu~3l=9KFAZuxfNtO)~jj%~Wozp+K)1KeQfylV~*MVq^6f1x6A< zk(d;h)lkosThkQ|6}6mLId4_^?Um{~in21Tse%DwB+^ilf&?a$MTUcvDn!`OXpjXo zM6B>`YfJ)Q1cb_z1)8WjZuRY#0!x&Vql{YB7zJ#WP?G`{go(tE86l!j2RvpeA*5mp zU_b#=TyfLat4<27pd))=a4<-QCY$W*nQs@yCuCX|>FM2dhesG7b+ z${l|aDb)%pKY>ZZM3kxqBM}QFWLBUxVj}9h76}0wm6Db5rQ7lEt zMAX1gvdsr5OT`RRy{`(@3Ye@K49eWXU`!lDD1t_cE>SgBjv_0S+oF8RK*3t&cvmJ+ z4IE{l%t|$=uy0{BD=_|~xKM%<%B_u+)v9<#`Jpsr6ir#GQV}cV1-LPe3VSH#;ZSPY zRrpS#ph&4AfCX;SzJ-{TcR*XIzKCSupj|$c`d37?Du=a|@)-$*>aUExgo-6mV0fFs z=8(0uHRagV8flciRj^U9CSRp#l??_W^aTJ4Qn+ok@FxU(P{uRlkr5*N+wiH@3Mobn ze??|t7=cl1{*|FD6{`S0tyKF2z|ZQSR+*ibEWDQvo$%>WFhh7A~7Dtk>aIZBj+ z3j&rs80nPclvyJP2{no!s4ozPghHQEBHuJfHAX55pqf(2P@qu&f)z#z%?$Z7t|}N> z+vNI&4Mo9VY>5?hQJqi%7*cFc^`Ka!42Xex!(yyz8BB`YKL9qJUZam-WW{`&MO8ge zN<#sON~TMRFa@wx8&8!z!Bl}Mz+#0m1Hhutq{v>S3xO#os-|wpNU5TF738c`oK+c^ zs>&(lQLQ2~U@8P-5i+Gg^DS1Wj9Fo%l#r>Gny9TLigBn^HC3#nxfAl`(qP&CoGMoLvW2K47eG8A0@6$Vx@veHVR(VVP67bt`~D_pLc zN<^v3ofLSXc9N5#XrSa(kc?!^7K{YAw^;ZVwIbSevCR*-pWavYKlr5 zQ~jb&sa;J9h$wY+2jDuT7XY%Y zpemEQS_gsMqS%h~t$WoQgM8l@l{;*$oLg0uD5rhJ;y|Sms9O~_bd==ZOFxYN)!)`H z1^s0Gm(6B<7yn~w-v6f_`qlMcL6}4c9GyrpCI*^7X$)XND$j?Y!fC)z_LJ-3L(){ zBSjfvR&MD9zY!Cfa#t_-%`&OX=!KDlJVv={P6g^lDlV+&OafSUAER88$! zmRH-xTxm`!B2AUeur{HBZj~7!vue+rE6s0ZP)!y|?SO(*6)GyD%CDIjGG!{ZBHMqz zMcKSEWmWj3sv9a!m_WdWQe05xt~ys1@?AHFQ+p(A{-oCLE3K4+0zI|CqI%j)<#qzg z5e$$zaAi*WZeaZ^clES2vV#%-Yk5IJbE*qfnbqoZD<2)K)Lm4-o6>$F<^Fomrzk>T{hi<} zEG(d*sy8Q8Ymc%FV3;X^LnxqGrwo-3Z^lFr)U(f^AF5G88C}$D1zc3>A7zIDFA1xB zmWSG#p>#PhN>^JeIZ!pkKtGwkNY%Qf%pE|r#!gv$Wk|W&4TX&9LQJlBF9k%GS2o$a z`hrj;7_2JWq{ysT71C3z2T=-=VPU20k2&zQdH^*}uc61mMc_3{DJw{+V@%^zzk2kj zDuarCs(N30c$+}o0VCwnNTOON^{PpaiVxMU)e17LQL9yD46KIcRJa|L14t#@>Lm{c zT^M=rU+bZ{^k*YIdmpQVeR(6!6sL-xOKpngA8a7J)yuwl(>t6pxZ` zs*#}NSanu>!`n|8(XVp8z!VMs4|@EktyDmrYGQ4 true).length + assert_equal 14, @adapter.revisions('',nil,nil,:all => true).length end def test_getting_certain_revisions assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length end + def test_getting_revisions_with_spaces_in_filename + assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length + end + def test_annotate annotate = @adapter.annotate('sources/watchers_controller.rb') assert_kind_of Redmine::Scm::Adapters::Annotate, annotate @@ -29,6 +33,12 @@ class GitAdapterTest < ActiveSupport::TestCase assert_equal "jsmith", annotate.revisions[4].author end + def test_annotate_moved_file + annotate = @adapter.annotate('renamed_test.txt') + assert_kind_of Redmine::Scm::Adapters::Annotate, annotate + assert_equal 2, annotate.lines.size + end + def test_last_rev last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43") assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid @@ -37,10 +47,12 @@ class GitAdapterTest < ActiveSupport::TestCase assert_equal "2009-06-24 05:27:38".to_time, last_rev.time end - def test_annotate_moved_file - annotate = @adapter.annotate('renamed_test.txt') - assert_kind_of Redmine::Scm::Adapters::Annotate, annotate - assert_equal 2, annotate.lines.size + def test_last_rev_with_spaces_in_filename + last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b") + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier + assert_equal "Felix Schäfer ", last_rev.author + assert_equal "2010-09-18 19:59:46".to_time, last_rev.time end else puts "Git test repository NOT FOUND. Skipping unit tests !!!" diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index dad5610..4f60875 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -34,8 +34,8 @@ class RepositoryGitTest < ActiveSupport::TestCase @repository.fetch_changesets @repository.reload - assert_equal 13, @repository.changesets.count - assert_equal 22, @repository.changes.count + assert_equal 14, @repository.changesets.count + assert_equal 23, @repository.changes.count commit = @repository.changesets.find(:first, :order => 'committed_on ASC') assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments @@ -57,10 +57,10 @@ class RepositoryGitTest < ActiveSupport::TestCase # Remove the 3 latest changesets @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy) @repository.reload - assert_equal 10, @repository.changesets.count + assert_equal 11, @repository.changesets.count @repository.fetch_changesets - assert_equal 13, @repository.changesets.count + assert_equal 14, @repository.changesets.count end else puts "Git test repository NOT FOUND. Skipping unit tests !!!"