From 07584ecb6032ff802560e4aa959ebf75541a9454 Mon Sep 17 00:00:00 2001 From: Apostolof Date: Sat, 27 Jan 2018 15:14:46 +0200 Subject: [PATCH] Calculate norm using GPU, Add 32-dimensions dataset --- data/32 | Bin 0 -> 262144 bytes data/run_helper.txt | 13 +++++++++++++ mean_shift_cuda/Makefile | 2 +- mean_shift_cuda/meanshift.cu | 2 +- mean_shift_cuda/meanshift_gpu_utils.cu | 14 ++++++++++---- mean_shift_cuda/meanshift_kernels.cu | 12 +----------- mean_shift_cuda/meanshift_utils.cu | 13 ------------- mean_shift_cuda/meanshift_utils.h | 3 --- 8 files changed, 26 insertions(+), 33 deletions(-) create mode 100644 data/32 diff --git a/data/32 b/data/32 new file mode 100644 index 0000000000000000000000000000000000000000..a1d70337620e723ecdd48a45e0c9dab0885c93ee GIT binary patch literal 262144 zcmdqKcXVdSRrOsaXJm4w$QeX72HVx@3EgABGSN1{rH5d9Ob|Ikku!*#p~x9TuuZ1O zm?)EM6N{Wd=dTFQe^r>CD%^XTFh5!t*~8rauwx{i!hjnQ;Hlh2<}Vhkq%oeA8e^&n?W)Biw&pVR=5`;qwdYp78ko!uA5f zlNS{B7ZRSnuyDMH@a#o}^TmYcFD^_kDcpN0VSZ`h{>uo<%L)&(u)dt|_~nJ|6@(|R zDD1B!Jbh*1copHj{rvU)bJ2c=CqA z{zk&nHx`Zu2+!U`I3FlHe^X(4kZ|w8!u$~7ei4={!ove$y(&DuP1tT1p4=hqcM4Ch z3CDHe* z;e1cw`Fjb|v2gEwg!z4i`|l?#?=L+30Ac+=;qeCv+Xo9zK1A3*RCxMf!tvq4vyTwY zj})GNlrVj?aPMP;`D2CqA15pyFFgDNVf{qm@h1t}CkszLMc6-8c=~C=@#(^|&k)Yf z6rP_5(`O6!K1Y~8SGfOq!t(jT!!HolFBBesk+6NS@Z?K`{Y!xGBkAgtdgJpLwO`)1+Ew+Q>U3QxaHIKEwYb}F3TAw2(1 zVft?2-V=oRiNgIS3Cs5g55HGfzfXAl{lfMG!jm5q_8$_S{;+Ti;n|M}=Z^}{e@vKu zLb&&n!u(Uh{ht<=CkqdMMp%DVc>Ht1_VdD%Ul8_R6rP?5$5Vu7za*T$EIj`eVfr=U z-cyD7X~O-d3(Kzy4}U{ge^Yq;Tf+9+!js<-_9;C5UE%mW;o0vC=N|~q|4^9zSh)8m z!u+Sg{XY|yKNlYUg|Pmm@c6HU?XQI==feIs!qdMMj=vM0{k?GhgYf(xh3TJ#d;cQL z|0>-7H(~jA;o*M>>wgN5|4Z1?U)|G(Pwpq|&m=s3X5n}i;n}ka=d%gVpIw-qQ@HnB z!u;IA{pS&u=M^44pRhi^@OV$y?k_xf0bzeZ;pqzr#|sP3UPL%wRCxYk!t@fty_Xc` zmlE#3w6MI4@bG1YH4BelPS{>vc=8Iu{))oWR}zj_7M{I|aK5VW{MCf%HH3SwDa@}W z+<$Fhc^%>5zOcTo@c8wF?e&ExZy@Y%C_H^5;do==*#m_0O@!wU6s9*5?mbADA1vH| zh_Dpl;T2&$5FTF@w%dd!w+s6n!qYp2;GdARWK zt%UWhg~x9rY;P+(c{^c$d*SILgyWIIvquT%I|$F;QJCIYxc6vbuEPBzVc7`}-$hv8 zRe1bv!uIaMlg9}AV}+-W6OOxuXO9=o_Yj`Hr!c*@aPL@{-$%IrzQXc;!o&9$)(;RK zf1t2^knrS#h5bW>rynXDA0|BeaN+z2;rT}jQxooev@m~+aQ|b4<>Q2hA1|z*AUys= zVf!TE$tMf@rwC6!RX9FPc=qYS`5D6V&lIN567GGrFn^A4|8s@q^Mr?=FRWi6JpMvq z`y%1V7YqBB2v5IMIKE7H_T|F)6~gl_OkXA3`)XnS8sYxe3d`3C55Hbmzd?BXjl%X# z!jo?n_HPlMeyebNoAB)0h4WN+{vE>fUBbQZ7Um}i_n#;%PZAz}kFb8P@c8?L?fZo% zKOpQsC_Mck;rL#GjtHQls6XvH1_n#&#PZu8ky0HF+@c1`{?YD#{zb)*) zBRrkL@w>va-xJQ?7oPutF#VBm?~jG~PlWq_DlC5{Jp6NE{R`poUkck_2~Yl7*w2Nh zeF_tB>nY0eYoFG zc=}Aj@yx=rXA#b46`ntvFg=HG?>U9}xrF=AEiBI?JbYeZeLmsw^9$Ra@Z|o&{sO|& z7Zi>c5}v)VaK4D}{6&T7#f5t>AL{%Lwbs3Xij}y`1pm<%Rtfgr~14 z9Iqridu8E#72)}-3e&3#_g+JoUsJgMTEg<$!o$}Q)_vje>k8ZJ2~S>M*xx{S`i8>s zM#8f<7S0C<&)-Ct-c-2vX2Sd+;r@e#WH;^iIOPcNXSH3-_zA90?D1!ul@4<98LdcN3nxyRbh-c=}l3c%1O;ZsB~q@ccc5 z>Ai$|?=8&7!u|IVmiHANzMrtZzwr12gzW=`Cm$s2A1plm5aIYx;n{}?=Z6c=KSG#3 zO1RgA`J;vVA0sRuD?I!-Vf}dF@h1q|CkjtKN!UMGc={>A@u|YIPZQ2h7oLBHFr5hZ zK1-NCTe$x@!t%Mo!_O1e&letlfv|m{@Z^hx{fmXCUm_e|Dm?o#;rw#p`Bw z`MZVtPY{+T3J;$otluL%{$64GKHqw%TEape_B|dEIj@hVf$I($aPL=z`PYQ| zPZgG@2@jtxtiLWi{taRKP2tIJ3HxsgPk%=^rts`{h4c4>=f5vZe<!ou?x5vCUt?!CA$zl3oAC57ds zgoiIJtS=)xepzA5!jqR1_Lmo)zJhSPqVVjMg!7e!=dU76uO{4kbzy!D;r?q1%WDY_ zUt3sTM|iw1Y_BUkc|Bo&ec|aF2*(==&)!Hl-&lD50AYHdaPLip`OSp;4-%FK3lAS6 ztVMWyMc596Cs&32HsR^*!f}W2>`vjlCOp3`Ob-?Ay}2;Ig>e5Zh2>$w!$V@6YhVsuzZa0@MDGbnZmsjVg4-P{$~rz=Lio!S6Dw!c>MXo_65R|FBJAK z5}tmsaD0jI>`R67%Y^4&E=*mx_m#r@Rl@zR7M8CO9)7K`ex306>xJzbgeTu9?B66j z{bu3#7U9{q3g@>8&%a%mzC*b8ox=QG!u{_SmL~`gpD3(P5*~k#uzj!aStUoP0ezLIrjPT@Vh5hG*r#~+o zzaTvOMd3UXoFSc-v1zn}k~d*E%0KD~?ak;c1(J0W$2;pY*B7ss-`)2GKAQRHJKqN%Z|=|Lqx=49K9cuu2f8jjR@lu)_2=aE;IDYU zVm{J!-Pe51@izLLcS7PHKIh~*^ELw?2|nM__gCRCpVRAdo)q|CfA}Du&2c8@w>l2= zk={Z3q$|P|=aD`S^U>hLI5zZ=$h-LeER+t^>NMnp`V>U!-vnmcz_S%U~bJ zx22Eb__D8Cd8ht}-|#Nvl3-z*e z^?2=%KXZTby2tofQ`9P2GK_6Ik zfFC*@_@KX_k7oVjAIsl^e?&ft*Ui>@b2qW%V+cKO8sr7xOW9s>5ntF5`ps zA|KQX{q{0GV!fb`IDZu91%1$8qJKm_SnpQ-6h2nm=)`{7fC^E zLLNMi(ytQpw&NJ~kJVouqCCRa4Ek7l!>8TP$Y)~?_WI3!m>o|wCVzce=lCmr%6gFx z=CR~?EIIxyKA2C@C-F!B;JoM~F+T)9{lBdb_=xpFe_4L&`ip!}FSn|X#JuHtZRo@P z0YBAwY4(qTKVFeO68f<|s{OPv-}w4wy^+tG^kJVwujHv%ADuXS-C&>aJh$>$9iN|P zlFxaWK8CMb^=>|hzf!m6Bk_ECMf)}Q@ct$A7yPEdKli&{vhSx~!Us5fe)geW%Hw_B zz{l#h^cUZssKbr^f}dtzhaTWJg?a2&>m{3y#qY*E#{5y>6Q6K?8gYgBlzPEW3(s@z zPw)}z1%9{m0UyKrq6hj5pOfQV^}@VveXR2wDPKz;%x#zOLEf1^h z7xO`XX>mTi?!55admrnCJP<$gSky;>SM*^%h!Z}VpZ5#;0OR|hjd?7ahZOiAFRNeJ zKj4G@LLKtFU(5&mrValn_&++bUr;YRpRfFzj~4V%HuM1>=!55%f}dI+)%VAFjQFEI zI3N9XYaV0%z;BArd8vQwtS{y!$C)<#lzx$}`o0Z5mfl#`{e}3+BYe|eGP*D(`$va2 z=R5Mj{mVb@TUv1|+!-xHd`E0n}c(1hbe!K1)M!P_`MoImfDii1>JL}Eul+Nbk70el+wi)> z^}=VKli-6nw3vsAZarTT2hStuWBHN$YT|nOt?O%eJ~yXa^Z_5_h4}+N z#XnlmM>QY#DZJpPgZ||Cl>5m$d4w10Wq2R@OLe`_UzR?o_b{J!^HDC*2Ye7e^C|UG z97ptzhCcj#-rsiX1s>1?dR*_vTrbJ@!^d=fz`^|Bb(`~_nb++{=xaR}g?g#xqcb-I zec-1VU7`>3+g$(E@m8-x|3n|z-)~3KS+PF2Kj9zLOX#=ojeih#A)oFq>pJvreNeyX zgTB>*K9bj)m+--LD}M8l%ts4+#Qu`_zWJCzAMm&I5&BE@{bgf5UGoFig?@{FpfCCh zK3jZ!Chr^dQtYSA`Xp}Zg?X&|{$^gu$4&KOKIkv#f_g!Zh56dNXP=Y&cH$v^pNG8Q zAM_Xc?W!00xb-otuj=*kC43C;pF+K$kK%YUI^%uN71am%W&S`PtOw8dX$$qT{CZ0t zK2PK$;UD37|E7BJ^G>tp#T@0aio>v8GBc}%{) zg!h+;=STO^L0<6>^D*GVeDd=+>V^4sn2*Xj!B43-u0!AWGdkz~;rNEnm&`}zJn?;y zuVbA?eRBUb>x+6cAJuwA-|Kw%68^!QW4+Obn4gxPn)i%8$baA?kw0J8h|~8Me}8aZ z{KMC^+wWa3!+cEQWIkoyFdvH_{DVFk>Sdajl{a+A`(f*2^>5$5p3m(c%r6O^H}rwO z!CP{D@O)c1&lVpC_vWL!UXuA(>%p`8E&YJFE9;|o=cgF)L-InuneMmLAN`5`l0v^- z=iJ}}f2-bi`Ny3)XEPs(c%wdCFV*=i=A#9DkU!RI^cT;k-RqMdcp$FE`z_+Izpi#ceHx_HMYSAMBq;<8_m zmlpZJKm2v(g$7UleTU)o`j$S-M`C~KCHO~iUYI`;esERi$^L%!e#{^E5$7-X2mRK3 zaDQ{XbjQ=Z9&-u2Q9sG`lDr<*@jQnkFaPj)s@J>KdRcs2^EusL$X^fr zwq4bA)p7RNZ{fj6eKL=f0JAo^!oSuUpA)&_}X9 zxQ>26oW=Se{~7sE_V-ihT~>9o9#2{_yEUAH^4# zAC6Rq#5Lf9IM9LXh5DnesCRz;f)3FI^HSRIj|3n1AASTs&P()<|KI9kr+na_?GAlz z?l1UpMIZ3?U|pBcvGcm-0{RO2;CTt(w?4?*z;B%&>UeOS_u=__JYM_rd`rK^Ki52F zeHE`eHvF{wU+yo=>(mc*G2oB$GCzg>vgQZJU5)q${e?QC-zMe{>S)7Hv)6!>bza7?F>@WB!*B7ss zHtL0+zrb5U*W`_QcO1MADm=ej5g+gcALygmkB8TVkEL(#!#U9h`GF7m%Y--oyrEei zkq>w-JkK%TllKii*1WjWxv2Nmzs*PS{c&Dj{l(ws=P!+V34CnTOXZyOW5<(?x21s zSRd%3JO1JGB=`vLPtjZP{k;DeJm=YOir4E~eDHh)Z=qh6UL40{9>Y%$R4>EdXa1P} zOr5|B{5RgOS%=Ke)c!T0z(Z~~Xmh(zo!ACN`e4ToMkF}52P2MjBKG5gz zb<{cY2S1O%k3pW#(rx8p$&?!UGauFU!u`qo@$;sEK3p%2`0$Bcxv^~G`GEXZUpMR@ zGx#aK!q5Mk`wQ<2hxr{F`oQ1vuH4u@4d=0OPU{CA@Kf^9itbx{@ANtP2X(`KjrSq0 z7uIjq2l3F~Io~uN)K4}a=(X`2%zJzIp#Qqw*Exbd3i^dNbnG~b>xH~fcj$wkXE(ZK6IXfKG=VHU*b-8DDTPn<-E=MDC}?lKp)Nf;UDO2z^idEpYnT8-{B*zn;JtA&Ppd!j{K7nD{}>zkD4||B|H_;7QbN5f|2PnDe7~5F9O?z0 zoA<*%&^7mSo@71>`oJe0M z|A3Dc^g+F#>&1utV?=#;pKLzxm$|d<92b5%;N9n&=7ah}AMi|n;r-&`c|#xcb>@7Y zcboG&jn#b|EUrW5rAmE}U&jq^#rwloV&3%iyr&rGfjPnb8GkN5f5)%!2S2A2eCbZ{ znSFg@-tqPDoq|5-L&Qz}X69|Lm(2%pH^&PSFZXkP`bg${)RXxjpT+TZUx)t}>xuQr z5BVbh4L&&cb@9;xALyv=^!>;ObqKGVhyBSr`@#otPscw)A6)u(AL4rS(X97kUg%dP z@PWTI*7x~VT)f}lITn4Gk5x~OgF2vYA|K0ly$<=}eC*r!IhXh6eDIM%y%g6A=j8fs zeZWTxeB{6f`l#ju{jazj59dri2k$H3qnQtMgs( z@R3|E&HHn{;kcjmC8Pct9rqw(BK-8k+HAC8y%Yv5z}`mK5)-okbGlKph? zjX$DC@-hZ9b`whq4gFd*vgn51O z?CXc?W#HqkmsR&+UHB-D2j8gX1K%Jn&VipM>IHrH99#1TbJ4)}9AEeToqPm+RL4Cz zr>}?49Q<@}z4>77Y4{a-_jSqjQd}?aQC%(F&H*3px0&_L z1NvR@n1{sk?KSZ+gFc4&SUL=RpxXj(J`X%p$3dOq;}iXJPVz@SL%;35u9**bKp(|? zpd;3&UW)UQ;e)vFMfigp2fR|R@G*#= z_{evtm+I^2FUfg;fApCH&&~R%p z+v2!0zDj)DZ$3C@^L5Kl@on=@Uc1+&4w*li`6$6ZR@^>kF~Udp^~HP?_sK0j_`Q*4 zUnXDE=R+UV3;sd<4aZNum`{iK7>{sJH9lIz@PEA67s>m)XPK{@Z#%v{z;);;H}zEi}`>* zd?xb2yq*1%XUc7!m7mkZMN!AB^ zq-(Cr&~KZs+u{S=j;IgL=l#(K*AZ{0-nriAtNz@4&IE7P$LeeDM+4qi&)2swpTY+| zLVkwx#D4sH59W`R?@RbtzQ%mv^E96)I}gd?z*>s6!Pu<(l+X)Feg$kPAb zAB}p!x6B`Uu94?ZFP-`|4)f5=%hJhp>7#7;Y1-fee?Y<;lq z(!cpwx*j-f6MTevNz8jeAIZ8{aiI%z!hYAJk3qfMA|L2u_oH6QqYvYrb12>qqlKUi;A|JnOdCkr{pL&XRFG5lVnn72Y6!@Q1e z(FgTE%|m5h`dQG&^txQn{nQKkKu_qSp-bz7>sFl1_tr;sJlXkPaRq%O__%&=J{r2Y z#d={K{9}0kM&9Xb@ZxwU`9w#~=bBF)2iM`JSM+4IM7GrqXm6r^oE{;KHy_ZADp`dKH!OZ&l`Tq zT!cTP_a69Q{-91d-^wF8^7*#v1wIDzdf=nLgY_5Z^=@6D+vIw|7aBS-AIW}`LcPol zeK0qp5Au~cpK+_d;FIvj{f*~2>c!`T59VU}5%W5H46e668ue&CW{8Wt!$*96;e5k< zQJ1k^cn;+H zpF_Pg^U%nX&w)O2s2BL#(#P`o4L*kXX!I5G;kY9o1wRPSFPw9l59$T};3Ik6Y(CcW zq4}V z>%#l>Oy14wV1KU%FO9nLdV~IAK8CNS?%D<)$$D#nkLoz!VeRL*sRMk1fA2QYx#K3E z#1s21JT5+n)9Yl`b6%+z^frA?;^XE3S|6Z+tMj+b-7+wlFBpTAfioNxI@c%I`q7`-L) z*SubGUWyU^(QDKPKc7pkFZdqBZ{Ba>gFI2^uK!^ky7yI>+>ai#C`xDy!WAAiv1&@KkH-7 zg;5{WvH76?;v0=~hCB?%U3|`Uz4f1%$H)ukv`(3eQ>Yj8v3RyV3O;5Y$P;=^<^`Qo zFX#jP4fByM^AGgl_`3Jc=7W8k_k|DQhL1Imp%3%X%|{D-4DUz0Iq*z>X@L*&H0T#T z=kR{$13vgVI--w7KP~9i^Bd1u6@8kIOrJz2j+=g)eEo1f(MRIFrLQ06gSiwvHs>S3 zn{@{t_)*0Vz)&wsAGeo_qoy<+|61SIZ}|u3FT_LrQzxuv9?(Z~+~mFZI`Tc~x4Z}B zdh|gb+Rz8<7yCyE`HA`<@9@FzTQ>8yzJ3WGDfkETRPy;MyqFK_1|DL)G@lQBl#P06 z-Zyc*uPf$l8b|Qc5#mZdAGq>*UHYJ2;Nvp?hL^UHpP=LLSR z(?~x>mnrCD^U$=V5*DzbiD%GjXo(;~&?3 zzt>ssGw#&a`S}1kU%a`#$Q#e`u}&i&iSwC{zQIQe`dIJP=)>saA&RrWho8IAN2gwj zu7i&j^pW5LKE2L#y{x}~<$o6dABp|Yhd;01XODd?=!1MS_gBY(PvKwLeBcA*q4?{G z-ve^Jbn}6J@fUdI-yd|}zx-q;o`@q^2fY8A)bH)Oj_1+AIjtw&H>|wD3v~tmkq__B z`-eteTrb7@b8h(K_q_30=FoJYIMD+-&E_XlFV+#CIZt;yg*bc;=Bx5}tq(uMvFhNO z_qRT{4&88F+2A9)URv-Ed=fsY^SJm3{=wf##TQD@NAu?iAH{K_58^W)^cQppANa@8 z4S%14yt}>ze4q>aDZCfvz@QKK;JF-qz(+-&j=SSG{JlixGy4aBzYjfdjx9b`y_k<| zK9cnTAK>aQcZg5wrN9U0$3H@UfsZu@20qF&sE^g>n9uOjD~hvP51V}Wx?!G|eghxe zzx3{U+0qBs^Zdkp(NDMZ0Uyyn#zwzQ%t_YAFdv0}>pDOmjs6hpCGat<59(>vi|^;0 zt6tDYtQY%fLm%h`op_%uK2p#}w@%>${~(W(>xm=IV+Ya)d~goxWgO}I%qh!HL%l3N zg-@RoKV9<}{|=A-;_JKlXy$`H)4UIuLcNTg;w$#kw1D+Q+ z#|ZjBN9+0Ys^aYU2Yra=G4sFvcevog@lErAPRVbhKJV80+)rK-`tbReKA2z36TIWA zDd=N5KJ-BxYaX*c8gZKs{FLj^2X#=*2mUdmf7oZJL-Y$D*?FPf@WtpK#F5a4budD` zz$@2{4Sh88!8}zQ$I3f=crG8lo<7&m5&h*sCEfUM^=Zf1qdwrn>!M%cp)RQ_c&+H; zcI|^c$oHDhykD|j79a4yd%!JyxIa+0#qSX^e4r2f!@h;jta^Df#W|=K>$LfE-|747 zoUDu9{eAL+Z*Z<;|G<~v2|m!#FdyqW`))HIy!TFl58`X#d9K+{BOmw;I;CEiPw~?d z>ZSAfNPIB2C4Vl&X+EfzbsqD-_^>a~Hx?h(L#5yPK6F&fJNrdG3jVk;uP@z`N3O>w z!#u`0BOmAke_*bU{*lc`!q?GP;DdRLyfmM4=>zT*64*$U?sTa=CL%poNjP9H_>Iq-x=P2u( z&QD?+3V959%ca|KOa-^^zU;gb(vQV!b>>`k-DoM?oLfWAb&w>(c+Imqfp{ z4yc!5KGvLuubU6*r3F673-!W&DfkEa-0HW3b2#n{AC42=n8)ys^?XZRd7Ta)SH)ZL zXW}G3-F$Gq-=7au4e_{TBkLL3e zNA+jwfqH4?nR>oSAMO{_LBT&Z=F_DE{43}yUE-%J-{yn7H1mOfthmvK>lQwiK8o`W zAH);+@O9KnWB%Cbe(HsKqh6TT(FZ%E!`&&zbKd zA6xo>4=``kOTkagKYUO>@B$xcqu)k88g*-ZG}p_tu2;R#=geDT9^23dKD7MfKsrDl z@X@S~?tZ&`!{=oFSnmt1Q_e|U;UDM)Udk=j3;L+$gF1kZY(6IbK|ePi^jqevEqx68 zCw&<{n&agA)JwxZ0w44j`abmne>dsF`CC4^p^xhG!N)Wo_-VF2-~)Y7k6hPyesLdd zt{3uB{dt|&^H?{}@PVJAkHv@kRKHug;(z}vQ752zEBJ>$FaP&-V}p-EzU`;*!Mq9| z%%KGx)5oljM!lGi0w32DfA{AZ^fArHus+~pGM~DSQ2+P``d}_y{(+w8w}B6M-}2LB zK8EM*STA+UKd6^S>%7ZP10U3H4*H;8viU*B)&4=ftUf~C@l&6hyeImTbu{4vp98Ir zEk7Ob;onz+59)w^UmSP!_4K)cpYr_jAnU!XoKB~`)KHy{JE9iss zaqi_Gu0!%tIG@kG{M7s7cgt_MKJYQT|FD0c)8Y5Y)O|M}_y_g6ejbHBiu6&!d^lY% ziSu63b@0sl-OTr$7y2i>ta%JR$UoE7E=NJ15I$zJh=IJthEdBdD zg?h117S{`L&kg^eU$6bqhx0Q0nRR%6DfAcmCH&CGI0x&P5B6E_|L{xK@$wJqg>}%y zCGQLAujnH=?^}G3mz(_bit@JngE*{@O8y_L>)?leJ9o~z^TIyK=c?vo`Kfg=@JU~{ z>IJ>Pm+Ol9Ou;{j^G$v$^d@;waev5xlAJmmU5BTtP)B0F`xW$LpS^jaS zdBfMym#c%fv*xi4KC1bcfsf&J8-8d$CiMaj zp!Kol67#Y2;qy2AH1NT7TYMz)?f!s&&_|Q`Sbc=+%|{DR*TDz+;QR2g z&SQOK>tp$c`6%$QQ7<>~fv*NWsF&vc(n7sNKE^HbfgYOUYr#L@V{X*T79Y_+n8#Z1 zkM4RQAGgX!^ZD@8Za&C+cfBNZOpI?pEI+;7JO%&Yy2Xe2iSGrv4XbKPLQmzf^P`^?}~I`5-Uofake-x9@X*;r$qX3Llkvfe+>-_w}ux zXBW-c$Y)eHPYKF|qz+R#V#`S8;MAFhL8K2qRg^*P>;;it}fMjt-MP5$Bc ztO>o?@AFRQBroU-pUl?B@(-RHs2B4w%ts6QLWgOizfAVGpLXijd`!+|KAQQXe+~1& zJjUF~`wsd(`k0)b=Y7_7-iqTH?zixe%w$ zZr?R4?tBcNr?AdOzl9I%91L^?u3odi0ON_njB!IdtF6 zN4le=8~?!v`hq9)L7dC)(9woIs`JgfUWp^{QLT@TKCDybkJWGOlhg}-#^N*aNWyel`poH~B$^T7xHvDI(UQFgy4AH=)*GJQAjfj(}UKdg_w z;is&RJ{t4K6`#j^5Kr^x)nAIPi+rG;r4RE#o>#qG)BOeggVxik7yBIja9zK_N47rj zk616&e3V!(-X9&|A3Wcp2lyE1Wv6q{U*ID-KJ-!O`_zkdM!oQy$2qA3bhPRv@QFUQ z{1iU$k47A>7x<{=W0*gDihjHN!+9^9-|=*R?nnPKAB}vOuS6W7Uf_d%3m=>l{?P~Z zv-C_JFY(jn{sJHLjkZxQ_&WL+VLn}aSg-K0>g7PZOn46Z82Crf$GF>ky1&pj&=-7E z_etukISzQ+nm^D-td|n{OLyFvc?G|=j^Km7k*x>ffe-YNf}f(_Vf|$E0Ut*AKp(vS zSo*S_V!fabc-!KG|9u4J7@pfJ`MIKeB`$Ao7t8w9XbE=oLN&I`!`d zT*gPEj}iAR@_~=sS3Y>JaTy=Xfz-_)z9K$2*U~Hhy9%Dmnt3bcBl(=zDolk1=nVe(Ji1kAeT259Y!3Jd9sC z4){PH3I8}!Je6~x5A!yh-xT@47x63e!8-S~zjX7_$d~tpkJxXU^)VcGqQ1>X?6=It zzEIGJh86*gF4O|d@LWZe-!i4Sm$cFpzz{(b60La>gM^T`QtWyf0~aK-%ejo zo{!-ph5jC7LudmZ~J{sth^=Kh{N0QMW1ZG2CC6tMS+F zb5OU#pEL1sAJ0X1X#aH%;&WWg$M|XT`FS2J=*50Yf2r)}_31D00srW+(AS;+!a3eU z@!@OD-%o)L{1iUu|I_QV1FchhKRQkR`NitDzK(OC58}Z;_&p=ePk*iO;eHRV%Ri_W z=byX`-&dH&{M&N~AAB+DD|A3Ej2_MTpm{0v4W59=XitdyBp8N1O z{5YGB`t8rf6dON@I$ym#|)S-o`hK|eIF=&`w8qMuIlQJi=DV{Y(~(5>T2fsa)$ z*L5EHOC!DmeSPWP`5Me0yq_^|@Ik)jPWPjaW|y`MV@`#Ihe=2Q5ixybtruM2-X_chKJ_*iqM=P~+iCB7?;hjY-kc)oRf{C>)a=X9MV zp2L0q&eu5y`}s5H#6S2w7kDOs|8^;3Ik8NnKLs&eQU> zP%p9H-o(choo9M|^g+MH&zV2qqj+EV*s2%md8=M-(g%LE@%-|??YHp3`>_`4g}h(J z2Xkz3;2&Fja6R)_c7D@_J|Z8~T{|cjw_N;p zS-nu-8+;7=DSS-VH9Bwp9Q}0Z!+wn(2XoLyz09L>PuQ7tsTcFT#YgNf#rmkMbD(wS zPDmUr^cVb}dLdt(`vM<>_3ap}LRfan8}K4|H4nbE|1S z3jLNj#rwfy_xw@dpZO^0qkA3d3>^-i7oN{iPG%fq6pr#223DqJOaObX>%V zK8DvH=56gqeQ(TT=#lfm2m8_2`;p=<-iJEp_bG(Q|2D19`;FwU7yOj>YWB6V)Aa=%^7Bgj_we^q z;Di1W`)zf6abB;EBZd9~Zv#Jd9aQg2-q6Qnee*W_IriIW{#l>?0#DQDMIYpc{7>te zenfvEuEQQLP%rEKhwHf=lpB{N`eX@wta|b9OI4qP=kLV1 zf<7|(I4C!kPrT<{`XK+#J3rT$N9CT&;iEFoIxhISxai*hzQONH*=KA1NamxV(+z#l zC&^deDK6qfADo~5(yb5bhd#R1U!p$n@8)`md~kg-ABDIAAFE!%`%~iMebDgzb%T%S zr|5(GMwrL4^U67>pI9&Oaap}IpObolk8GadgSgTbALzsHuc()T9u7*n@m~w|LjO$e zxA2khH~wABuH3ji@ji{;cYtrs0YB7t@q01+oA*KZM}1GN+q_?My)^pzPT#NaVIQJC z%aOjHf@DCJ|;fo z{YLOp&cXEs{cZ5E{M7vxeumG_zsulUi|06>I^KqVpkMY4ep<+z>z=sjFKZpwJ@3cp z+r$AM)E#`FOZMsTYTgQQ1%1E=KcA!DcE^i8iuuW2m*+WtzKouGsF&`2sh1l3gZ{Gi zBY$CDXMOyXe8UIp;2-$I%4?WE(gq*+Deq6=W0JqCCEfUsbCDPP6h83XfKiA9j_mlmD_X+5+JKv4_ z@CE0Gc$;}f*ThAB(*_^>J`DY~1^-Co4?e7q^}Kmi=jI&DfgL`ApC+G!ymsm{@NujC zwwZtYG<#q4vG_1=iSGwK67#A1%kcbB0w2@&7xO{AFdwzsO1kl18=;} zSo!jP^h4H3@NfOGUk>^xfsd7cuS=aX2Q0n<9|Jz_QryXWkS~0ab2WS^=!4(8*$5N z6#5H%9F%n9zm+fV3y<)Tk91w5fAD^YJX#-vb26V^@qO-R#rn@&$NM1n7wUmNp4^}D z`Q|t-LcUkMG|uJcmz(r)o8lNd$KyDdPgj58I>$GtQ{Tt@F|3d7^GAKOt$M*v{rpm` z|6!f6AN>V=4C`b0FY7z56!?h!CGx?%zSVD;kMIxj`u|n`;Q6*}@WJ~Z=F`Ow`n{uE zPNc!XHs;eofAN0F=ShJN{Db#F@By#X3w#jAP5tFI^A`E=zQufW>mvt! zbn_pd_vyFzdVIcZ-VdF@$2u?Tn!iiy#d@G#2J;y6#(~aRye>Yr-k@S-Q!mAQ z@LrR8;ruE1YjVAy5BP|G--0*>`fwfap0={D&wO2M?Q6Kb|>~*K(UVJ;QoA@{?7hk&gkLO6A6aETw zv#+C{Q!kuzxc_I?@z0ftu`@?Jq};RJ>OWo|ABKlS9G<@${nhKto!8-h&kN}R`g-T< z%p;H0*XhUTHwAq#msHNd{J+!v+3UhXW8U)|2QTD#@#^OZe%}JU(uaoYg8HA%W8)m~ zf#0J`$61*x=tJ;vptuL;w{K0a+ssd6ehYk{tKofk9zq}Jznh=oIC#&<^~vjZ$3dT< zpBJy6h?jYd^VkQ5;~wS#KY-8Xb-Lq#Pkw&||0j+_zj0j6{0#a`;G??^y7ys!^avl# zd?e?QIfd)tW0Du^gWo4%{boK&&_^{NOCRQASSQu`SnHUNPJg*x(vAOk&L)mTU%N#< zmOk(s@4wFPb+Y%b=40^O!^ij^g`1f_4I_JF!x^}$`pND!GexH$v@2d8rj}Rw1%*4&Q z=A{S!=)^<4!N-HOKKj5fhS%kM_<0I^;HQ&#y+3>;uamt$dBHy#d^_JOj^L-A_07kM zhx0hkHSp2UiTM~_r&=F{dbvwH@b^YLdBIQp8UNVQ2mZl6>_2^e@-_k=(La_yIbP}o z|7iX?{y}|Jp9lYd5Be7Iw4e|8=IHpV#z!$9^p}QzplA9Q@rHWY z;-i?4aS0zY)JqTb!q3ytN92Rg%TI_m@R5T)sIRymd=&Z%zi)~EyMMCppr6`Li+Q5H z6VKh|VR+p_ottO$H++AG?=5{?kv^K&N%$N4({FBZ9;0rH_rp&kAIm@J13v#cxAnn1 zw$5>z;>ACb^^wd=_vhss=A~L6nRAgBuD@;`TrUaU>=*Due_4JP^nrg2_6hz$efCf< ziw~|3{pB)0E#|NKJkd{w*Im49_-WhVW1^2RkCjXObRLPM`hpxbWAs;UC3(B>c+zSL*>j zia)P;%>J?J+v~$C^?*()`nyAX;4g{un2+N5gXb4?f}gT}cD=yg`gzG!uOH^GZoRg*x`Af=dFg{nvcusCF-L&jtZaX!~Vhfd43t@gL*;F zX~RF@gL<8T5A?F~68i1(Cv=LRnh*5BJhtT@=!1GeA1(L?e6+v^{g(RJ;$y`d_{c}) zf})F`H~SpyU(J8_e(=+SK8p23J$7^&^pUBTgK}fLgg(eG{kDdA9sN-+jW`_#^}_Fc z!bh_nn*9xZzz^|WgmSN+N8zWFczwQge)BPQ<>JyCus(>Fd5^pl^x^rVv;I}B zgMYxsR=toP^uanYU(BcQk-Q)E(L=p#>7(uxUnSm4_?ST-&DR(EX=WYkgZHuP>j(Gd zW0>!5Kdt1Ib=_ys$Ku;@G~W*&JnwUU^uT??{q{0H9q<|WSn-;-gs)p4)C+vGFV8Q< z{?WYtW&Uwfy*M89!8+(8@_{~x13pI32YODSUg$6Ik-UEj{8KORL4Sb{_|EVe{DX6> z_d))CcYb5NFel@y@KL>f4)Lvi8~O|VwMRZS=8t|P{Sq(dYt}=tzmbm|{G&1NRjtFm zycc60>plnb(y(p{d>GN=Ko_j<`-gElzC^uT^EnQL#nue!TtRH+xmByjwAW`t>R1O zBl-6%A|L5U=ghtzeZa@^IrD)&63@5hkAJsNh$HxEg{K4U2Or(}g%9+YSl4_|FOzkg zmqdSlsMcNo`!mGhew(sAz#hw6!HTf*UW?aOGBslh3})^5O2D~Pw_|2j~n_s=s1sx4gM1O+^3yBgWyN7WsN>?#?GpbWfAstA z^H1{U&xv|L&%{eTnh)Lw@_xPh>pb5M`)&35_-TU=>jQtMUYghG&I|Xi`2)V$&-Kyq z5AsL6K_B=je6T;8k1>x8_zr&B%tv#4%kmHuxB8%NZ&e?wUhJpC=TAOApYe|^eYB%;A(@MRSIzw4`s%xK zjf8qBM;V<$*e?cGc>)te`KF$*gwz*e1OIJWgT={;p4jFGapeO z&3a+}*y3aQoYj1ikL<6nc#pJSiS^?8;`xYpQ>d5Z^YA>!_q)$ith?%dOCKoIjemcv zJI>}fhVSS1gZSSQ$UZ;oj8H#i%TKG$IoQYNt3E&RQm>i$W20UM^8@|E{UyWq74PTy zqrr#uvF^7{hxx!ilGo|xW1^31S~ndCEBkr=nDD{68}mou+}!W|$Ik0|zwXZyefZ~5 z&FiDTrAzCB`6Hu`1Fbv!{cau-yuc^AAb#J^IkV%a@Nr%1#^-&W$KVmYv<*JG`55K{ zKbSuM2z=ll|8MtO>IDBlAI)(#^U(qy%pXe+_p#q@@qs?J_$aQI6!bwH^cVEeIfwOu zpRV&*CoSj$KdaUUeAK|l)_hvbM~{B8p^ssGOvlUlA|HHS^|Iw3-nY0O=(jcS5&JFk z2Yw0<=mS28vzw1@eJnq{qPih3kqi8q-eTDgh_?SOhm_Mr5o$Tl5XWqwj=Zp2H<16rSm(Ia_n&5-;J0FAj?2>vR z-eNyszb*ejA6$?Ah?o9>f3!>LrCJ~81zk`tE%-+Z{t=&Fh$B6NemWg5?}KX4NB8I9 zIH(iy2OpKZFke_FiLW0hkLaUX5AZ?0hx;vh&E}(f9qM`c$2G5eMcAze_{hGmSuf~0 z1^LbV_{d{ks1>Nyjg&hZPs~b07U<1U{NSqmL2Z7s3a+gpcSS%+u6Mu|D7feKh7| z>oxL$J_i14ef)3dG5RR^Bj4zQ{URUHPnp-3PD8(K)bD}y;r>#Ce^l!qT~Ifd`RUd? zhJQqT5O0e0;^(>K`b@kJvVTNAy1%~s!}%NTx83JXfse%3i}+yvKom-q z|75NS`ama9ACxH`Rj$_bouX)`E3Rhly{%U^UW4Pa^;2+ub0w3fX{`Fuf&RTO^9B0g9I?N^H^}+cx?X>JUCu>()EmD~$GlG6QZIx0;kjtz_Z_I0 z!8zD}C!WU!AJof=+k6nm2!7hg&wg`tNb@V}fr>GD27kH;$ zviD1lukLh?!Pmol+RO)e7@=PHI`bHQivH*?9sN^>?lakZtT>6o`C9sTu;R?-fB7f* zcKzUAk&o_rnZ7<*AIbZnkGa7I`GarbDAq@Tm!J>kvFh`*FrVTZ4ZWI=!a9zR`^>gzu^4cpQ#u0d~xZ$ejgYAAYS@C=U@Bn%Ehh!{dbhx#{1;L zzSakIGvVVlt<&u9Ykhcdy$thAJi~kp@@{>=py|IEG*ezy2PA8Q}$6FxHW z?X(a51wSS3W_=Jx^wYvQ;3N2H4)uaAlH+OSBXKVCQK+|Tif{cs1$hbeGW>aq5Bvi@ z(9`sOgS;JSzd~M^r$fCA$3g#S_Kyx9SIn#HC42p8KG=^qihZ@4kLh)4;3Jt2{yu4U z9P9kVWj=^6g?fRH>ir7m7vNf5soj#=PE~_hddA=i6yr@-_T9U&04*#CmCthj}cyUeE_VP+gzsg1UhZ z)@kOWlP~kZyiVPgP%r3?{H34|u5ac8KUn$lzRCG-=7TtrdE)Q2ps#9uR`bo@yMg!O z-z!^l!$G+S?c(frsFH_Pl>%(i=l^bl_#K*eNaV)=ZoSi(N zOY&_#n(Odl<$L#A^MO7hAAMIYZn^k(FZja-AKA}a!|P@9Q34;s@eT6hzgJFQNY)3u z)?K-={rdauYtAr_=yb53;~d_%!++p|_u&^y-;0mr_@}RjkM474>jOSwz2sfFSn@*W z=7V#fkLl+D^Z_4helZ{X9t8DL$kVReSpL8HxJ#eW#|ZU;Pe(qeQ{F@2(-%wsk9<%s zh55sLP%rRN{q^cN*q3@4K1X%FGWxitbHGPpo(uI7`H1@9xsAVb2_N12!N>Hz&H9+= z@)ql*q9^p?a~JEQ1wSppKhQ_yW9j4e|CtZ+Okaq6w4LrFPwPFH|E|?^9L49ojE{B+ zALtT&P%k6sBLzNM-~)ZMppQhJ?$Ei&6Z(LUt$K<2i2i{-@DF^yd*6N^^^wp+&VxywUAb}lP5qYngE*%5Lm&7D`iOjN z_1oh3sTb;Wt6m}>?0Z?g&|lz#dRgc4{DFUvC-gyF)JqHfHu8Z!w)hwu^9TEK9`?Oe zKGLq-$lmI=E3Z)>_7CD)^+LZ5e5^d}%8lg{>*A-(wfG11Qe4;MsRjSIwBNeFmgpa@ zzPWniAerf)Cb6%3;eMb41TomdBK8OQdQZJk% zZ}>;1jyIlf3;Qw$?8=Sf|95}6uFv=>I)#toIXdlhUA2D<(Ef2*zeOLMXSy!pJce%I zV;(ua@O<0M$9jGVeoDRIrIFW~2mVpE<`3SdId8?jg${VWjq@pa zArI&Sy}?H^U(BZ~PxM>Pbs%2RN3%Z4PG29vPw|~$KC<%lOX;b8Pe(`YrpS z5BM0?M|QnLKAPh|AMn9?HPj3K0Uz{R&P9KrPS-l-1AWkM@elZ*UhsYR=+p^#Nxx0> z6Zmr;sF%n`4*fPe-W=+s1U~rR)0>WqdP(TxigW-U#c@@yPoCO!Ul;lde4vkEeZYV6 z`7V3jClBajz>m*Oy}*0f;G+gU&AhiGGVdX6P>^%#K1?h^V-w*ObhQJlYFJ`!~w^nri0s1KfRuPX28lDLxBr(VzpJ`5k|ao8WwNB4g4 z!p}kY`C9N4&RQ8_aFF9 zpW`6j=KXlS?XDN{gnx9$*O*WF-(hpTbe^lN2i9Np zb5}|C{O3BOZZqfR_n;g%Uxyd!DQ)!IM18=Yb&5V#f8pny<|BuC$?%D;&ByZ7>pI7D z+|)0=_f@u6MgJ>%+g=}UOcAyN}b;EiCQoE zi@dbLW1WM)g@^g0)(alhKh`?dul=R?$IO0%&t>1M=%atS1;?Oa3u8{blC&8RfU-dC$4K>)Xu1M}B^netVe5vJXF{pZ2M@um2s< z$LjxO{;mIp)OJ{bhY-&>;1)i+M>%&$H~K0c#Pbq6|diu?C<^S zG1vEVQ=O+?%6E5myH?NQA<0|@)r=##V!%1F_ z_a|R?Og$9Khz*+jOyj{^p<-t#P{!w|z1AW}$i4J>sjKqNl z|EN5U#HC*7ck#&m)7oFeHM74uqz^pq#Br8-Y5ANwS$^RD*~U+M@;Qq>u1&qr$5nWo zFXl1Vw|LCbZ}k_~FL?Bvi=QkW;V6zfdemR&1CPV`!lS?7ad|%Fw)(c-+y?EC1N(L%r~i&bM(Yzdu&>(UY&9xP0F* z`F!+I|J}-!>p5Jn_x|-*-~9fmdg+M+5Bk94%zhsE$B+6c9_BIojPUrQ`oLrPNBV?% zY32HMy!Wp-{zt$4)c^XFKGX{y^l=q^sMA+G=;KH0WkjcU_I*_^_4)-5^@7LWyWd`X zHh%D`Ud(y3_{SX`%=afB>gCGMkHSN}wD@yNz0`S(K8AU$=wtb*?=7iA zesoM9Jv{C_E*_b~e-qp9eqVdlY2i`pMPL70>qT7OtB+bQ{FHy-p@b%?!;rC zGe7T%gD%wzz4clzxgUhbnm?SY@UYIA{pD%=+S}Lvsy^=QH#YY_j_ChKd5B{c9<^TR zw7vJQ;kD(bsr!-mdh%o*oAPBI3lH-t|LF4a-oGy2W|=?m7)2j=jO<(WG5o&6#y{+P z75`8#KiY3+&OsmQ1&=#C#t+sDeXM%fT+h)l-Hz->AFupl$AdobsQNgQmv8hD9%u27 zSN-;n&Zl%bvmYKa`nc#Z`Ck2HH?K#B^dS#;-0%IXT-(TedZv!ValH4hFR$O%ZsBni z9{f~%OCO(~&yTm~QN7UF_5S?4>9_GA{kF>s-4*|s`T2TOFFPLMFZF`QP9H-YiFf%& z(Z`WIReiMYte4aJ#XolQY1PO0QGIN9+;kwGqK`W~?wq&w7y4~^-Th?x==?N3pk7+J ze!*i@9_8Oh(PQP&!-IdQm-a#*bE6OQNA(Z-IPfah`=i!Nbbia%hR0EO^sKL5_$hr% zc`5#JB@a~}{B(Ce=pXH;>V-b=sQReaFGJnE;BkcqJyv~O_U1Q|<>T(l$WOUHCJsDW(ML;sNAko!=mQVFs9x6mVeZE}d0ITu zU&Nt4m+xoa5q)&$`(OP1OXYDVK0M@Ez3?qMJMpOfb~CT@xmkEDUGkTWf6(DY$HhO? z%i^AT8PVyLebo!SsTVx>2Oj!M<+p6WGqbcfISd(r04yblL)`@YcMKknwr+D%B z<>7a|Kab+{cdma!`}_N2`JQ^FKJ}9$@z`hmy(GSpIA-+cKKJqg|39y|g>U6CbAKF< zBRp>Pp5OBv;ouK0Wc=;n5SPzcX2R%;@kt!(^QjkoWR`k4lJ6s*Yw@$H-^)IEzdWq?QZG|KtNKWM>+jF~{P3U; zJf`3GEcH_P)7wlw2R`B~{=sKY+~1!4^$+K_9)0x0Lm%b=c~vjXzR4GkUHxU>BXP-B z`w|X+dLFO$#Fh82zh6{%48QNKzne$pQ+*_^p65;9OubAzQZM$q^YaVe=mU?Q*ZIfN zVfOcTvDAy--@!w@w8V8Je`k2O@6vKE{KrNg_S0YJ7`zF`ZzZFs5~Y;C0|t^XVHf^J<^BYJDKs1L!AEpS<#37 zFrtquJg)3_L=V=dkCRR_e>kW4W2QcP-p4=gJm*ZFr1QFZ3av+xqbjJg%IJe~j$o@7`2>+{I7%na|DC%Zv`E{PX+dtLJ^g z>xo00^l=scxWnU2oUi-?|DAs{>u>y{zu?gl|495j`Vn8PmpkuQ&*E!*<^_+X=hAQO zx8q^{Fz?{e?U(cG%R7D8r@cM;Y|-PXKAbPl)sxTB#~JQd-mhL-^f5Azoq7GpdUP?P zXLYyhFJn_L_FLBn`n347{)}#W=1_j%dQx2N=ZA-SX{nPV>s|O1eb5UXnveNg%Y5Ye z#p_3OiN`J8a5XQVsh2D7U-1<`t^U!n9(~{~&KbQp7ysz?*~}mO!{=JzpIIMH`lR?N{}|zM zCl80ZF8aVje>w7g_1ua+dhPFpN8_J~>+(G3?3ve{YrH-6(#w2GANZ(`Gx6au!X1yA zFFa;=9C+j4(K;WWc&_)vmHl>py7qIQCH_IL{8gOvA}{NDj$Zn+ulv}1=8Qf(I@jWn z{l#SZ`P^)(XyZTDvw#_)0TDV z74J#6#Xny8>2QAf_q_BMe3m})emsWxBi!(!KOE%mERJwiNpMX$3Y((9zFUnkMU1D@K!H( zcsQ4Ox#&JTTB(;K=eyNU;lUS1;jw&c;~!_%!{JW;@bLY_e1G`hv71j@_U9iX{(*;j z!Q&`A=wtEtIe7_x=f^|*cnuug7p*+<-1k$>`@**s9wR(1=lbP|hdxgGZSDaVT6yf|4|;Tcz(3Ucne$g3 zJ^jM`(Qtoz@`1<9`MdaiPJhkkI-jJ6%%^-D5B+87x9FoMUi!deygzZ#$K2?H-e>Cb zqBr@>^PV~2$n%+V4c}L!5Bqn4>hqw7!lU}B`f*)4!$W_OFMfLAfM@nUYW_Yw9A)>R(;63dO7GLeo7x_;-*cV%Jm&F^ z&UX6P)ywpKLB7Xc`IpadSI0|_i33mP_In(?T)#|uD?HpkppVW6y+85!-W?C?wdj;C z=zCb_*Wc^oRlPWm`s5$0K8yY?^@+!3K6O5vsy=4)(CN4M$1NYxhxqu%$m@4LPsez) z;-~5bkDWd$5A{-c@HIT<3m)oa(1Uz?o_fJ!lzN$khkB-u%j;RM@~HK4#Xs=iZ`D84 z0lzvke=Ppd!x{aZdEOHTU$T#S!NdFLUqb*e0qh)o&9ic;>>>H&~JS&-TJe?dU5{BL!ZELy5Ep}T)&Q5FX17+ z9v(O}TuQx+@R<6bd~EuQ`s5#1c+B|qC_JXT#6N~Szdby9_0#yC_(!Rio^#q~^_N^v z%=ACp=*N2Uc9nQtzue&=&biTtxxzfGURro`>nBem{1=aWAJy>q`Qf2nj&Q@*^OpQ9 zeS}ZTK8OADoPYG_Xz7jq6Q}&0$sZmqx}V-}zZd$r^SQIs3qP$q%pV<(pMK9{ga^Ls zdE&vN`sq!d?pKxTxht=?tY7tUhlly&iazZ3vcI@L79PWX{G!y$<(%%Hk=9`rf<{#e#K3y;p%%x8GSKMwl% z`PpB6-g)1V^>8$=^Edk7A7{CKasSl&mcNK2d82RZjE_$|J^HxBx$zG?^jm&`2k!bv z=imG>{vpq7nSOMIU$KLV&K`Xq^pW`#kCnF<_fPBh zm3SP^Psi%VIirsg_g|iT@Y9j^&G7SFza9CUykGXA&+4b)G4uLS^f9CF8;_4qJpALb z--~{$pB-7RXTLkoN8-A}V-_CvX>ZT|EqW9$zCI_vfl7K^)m7~e4JzXL;RF~wCLlI zuYCSW+$(*$;R67^Pk+5BgA_^nu4!cy#*JH|Sh{G2fJVz3QWhEBV{;So^*3 zQ#|zV%7Z@em^qjGN%CCvfkz8p&&S3;sy?cI=>w0W)C)cDc&s=#Joq;rjV~2_;Gtfw z4G;S0=`W{vOTWeAiau(+@KZcSnb&9H>*7eZKPRqxk8a zIC`Bw;vdtzmG>P*AN=&#)Qj^D^LluUGJo9pyt-bG;Zd(&2L7A*6#w=I`wRc**@r$x z_8Z~R3Xc|E=Z43f_tUTVYQ40qj{|+^FO`QlcYcb$dHsyuM&dc+Q$70NA1(Sff2?!; z{OGdsxbprZ@$*}sTYO4?nVHwsGku(i?+(u+akf0xdO1@slRh^7;hc3|$HP8doP0dz zQZHB0hk7~lz5`#MEBdJZaTk5;{A2Nz$2|5gPhNKON89m8efDy_-^GJ>^l{3=P9MKK zao{m?{+9Jdo;!aJ#~xpx^U6cMn!YSP>*0{ctN7`NKICoZr+m_WBkRqacb4^!a=p(# z?Bn-?TKvP$@wn+I`N0dn(>XGKj68S$4v!HYcX)`qC*C8U^Z(o3!{f;N`-|(_ z1n;}(3vldEXHpJtPW!lU88(?^;ATGquMkCC`$_G>wpd2D2#5q&KFiMJ(wdU5`h zujpljyL#aFBRuHn$a+WC7w0LT;o;wlozVv#W5Z+Tr+7@A_ZIKR$2YF;te00jaG!J=ec)jpb1wCQf92tM)dwC|&VdJg z=r4F&c)jA0dihZv^yq$&{YKG8uRQpNdinXu2OhZHd_$c@uR}e{JDsQB_T<6!=Hga( z(8a9!2#=mVVZT++<^DQ7;y?4b!+!iCdDCBRy4P=WF2DcLbKai!wX8=Ub^h?2KHLwY z-&y>0iccJgb8#v4!awL(zi)-dczg2M^)>S*o*$mq&*aPX%Q|;{@67K3-{~`Jy*4MDPCSPBzwnS} z*CCA`;22&bc|4=br7QaQ^K+gf`dvK!^!%JYI-hYLFg#}BZ{abLmka-_-@?OuG0nBk zm--!9?@Zjj&pMs!m&8?gtaG^!k~r4qK0Keh68Dg={M_$Bs+S|@?OAW>#{8Af^GW%$ z-v|%+S^K44_{%r?hz{xF43CLNc-{H=u3qRve6B|(j{V^=!b84B`UoECn_qpyBmJY{ z5ni=kroJOD^uZsZkM`w>tGP~%e(3Vf>vXMNW_S#GtNQrxtUKv9`RRD%bv#b-<>y_! zBtN&;vmV{h^?E&ig@^svTSb<4@1NSJqwmN*(pwpYi{*$v-AvQ`hPs=i>wBv^)E`9-@z%f74&7mrfrapE&8f zWj+3+UXJ`+yx;K1dAsYn@K~RFd-kF0A-~}m$>C`?N{ax z{QNyS{-JK@W92*Rp6^c{E05+};r9)Xw|p+^s2B0IypG37AK|p~Q@(}=eO&qc(zQAi z=Z1%T;z1wFKavmo;&J`I&-t3)_qLDx75^AHuXSehI^MI+PtW5mZuu=d#5X_Y3ECYN6&g^c=$eL<$0qI`5%dI;1P~qr|U)^{oyoo-?b&4 ziC5O+`|5?in0M&;vS0Kej>RMKkMr4Az3>n7dMo{9`CjJzJDhg&hx5{hI67TL2kNEc zQS`CuqUZxB`uK)d^dWEN4}N;uFY|{wIlnwy_y^y1jx*=R+q`}_*G3=X?OB(8d-Ne+ z{I(}<_donQhUFjD509lcbsAmM$E2UEJH(lOAusMP;HqBe1HY9Ibr>Ga`mS&6Bd+2f zRUdeCpL?N?)nCj9$)`MtQ@zj!9_n!ISNyc<<466JKB}K?uV4P@(Z}ky;>mp``Z)gm zd0*!bJ-W*LL9fH>>NvWY$vYk`c@*yv{@!OETmGAM@Zckp?mi~Itb1j>9zQjo;_i7X z`Y=bx=S;n{qK^^X;h|o9e@F*69*JxH{mHWBKW)CmwyPhX?(+|FgL7c)UI9h#!x|S3PZb&ExN8e?xK&bUNeUr z_?3EDerjG%K1T9zhZp_1e!0WRywpm)@KZW#sTUkacpc#(UvyLFk2~>C^^!dBQ#{NG zc+evrBXM**(rUwN+z*)1 z^~zUxbn|KISG~yp@{jPCIiJ_*k zrH{g+*VkGoPLal`!nss!?Bq^K8I`K=STXjc^!|L{YK(F?Z*!``p{q0 z&FU}opLN^&6A%5F#}4}>-d1_MJ)grve;M!jd3cTJW97d;uMhQ-{HYgyMCay&RWFHK zyjSAn2QxhITk~G@fy>ZevOmr}@gMY&e!Y0$x8p&-(W!jV!5JQh`j0+#e%j?fI@VwC z7)zk@Z^Tk#mWUKDy7n_1`}7TYm}Xr4OG| zFX{izyXqxz&djHy%qLgYz3peNk3I(e<@y#EdRqNc9^U)cu-nY~&F>f4M?b7Q@;wSa z#bf$h&P^Z7KT*Atg{^9kOIkH91hwI1G$u~Tr?;|`~9$g2} z2VGv_K_BYH&&RI6ygeM{tIi+hQ2OY2@KgOZ`dH_UZuubpxadFpclw~y;r)qUo#3+k zBm1vBgvX^`zVrM2w&Ah-e^kJXuOCRcGWd6Wo`C9ES;X!9Dezthzb#YgHjM87sPu8QG zUhaS3(MrA8U%i|g|DY58;d+Gb`g?C*|5GpD-2Zq{FMN5JgOaa0uU8(f_wl~PpFFvq z(-*J2KIy0M7{x!$6fri)BUc${Pb|Nj(DceZR(}{^Yc0W(K3h9 zhx6j0FPcy6rw;G;XT4P~`92&!bHDy_e#!e&FY+pG_b5RUZ0n zkACr3pZm~%`^azqzmt_meoh~J;!gb5^Yc1?;3eL*U#XXYhk38`+r=aGVqZM?hkkp| zefa%$wEy4xA2a?TKEDss=}vs%v950uPxHF_$@Wcu>6z!d`84Z}#K|8=>ZSYr58o%f z_ur1t+V$mm6z|Hnb>E-YSKRshm7n`}hOO{WFXE%u#qsS~cSIlZWzJuIn(I0GkpGt7 z`+e>l~8abCJ@(G5SH z`8;0ylpgu1ykB|0>kWPO8~+Fo>#7$#)Jvm7dM^5Ke^mV95TAPCAB#uoW%+5=cV5@a z{KNIF*TvnUkL#5_Qg`$*QZG$^36GJys*B3wc)>%x=u=}ee~iT4cKS%az2&p~{#Z-B zH1(3WaXu4gi=T>v-snSrX@v*<<8i+~`W@<}{Jzxko2rkWp3lh_y{`B&XB^>i;PLi+ zZv8&ppPuIz9yzai(O+g>U;8Cq`_1ILt6S?O|9tct9_}aerS~VEnf1GWZ=Iiut5qIv z&*ysLUvbdYhv#*9?1`^l->Qo{uUpU0@xTj@TfFxBU)*o~p0VGLoV$9VJNb&A`o7Y+ zhkhEqe%^BZ((}6O7kZv}xIRl9^yGSufACd4ZJ(8g_vA5gyT8U)tk?cG)5nEJ`F%Qm zQ+b#pM)FA?NAjh=T=9=#K1vMjxM_Jazg|Pq{y)zDM@sU*b5`r|XZ*AM?wz zuKC0M&Orw!9+^M7bERMHc+eUDSUhrWe!AjQFRov5?pyphZ;KDQz8&fUsg9C{wjdFo~5;r-#Yc<1x>+4h&57uU|uaLl=PemdMg4G;ZPTzKfWv+!8)X1}$6 z`F^hUTRglU59gTSfw%h~XZG>_Z}jo@aJ0@&AHDY5a8xg@>njiY(uaK8?~a~(;Xxmr zK3-hU*+(8mc#N#?{yKfAugXK;6kpT#am=~tqkjJ~OTFxP=mU7@FO4tZVgGW!Q2gex z^UIURRWJ0JI=#Z<3J>%8ou6;#kDszGKQ$jFKD_ATr1x-gJ?B2ho!5Ku(^>8pdR@HY z(@g)br;`%dN`?7(cbHe&ISy{D*o>zrLNz{q{PK<-GJeQZMplJ`wks z^SaNx=F{l)DA#K(d27+fmCxJnPJPRpeDihtEq#A^^3ZZF^@2yweA4qe{rP>VMjy#j zt2};s)~8=_bf0^BUdQ7oJk*PLCw-`gaH{@cKRobn$%lHuZ$#hx^uQ(W$9>rM{fS$> znAaEgUA^SI@>O|^5C1Wb<+J9G;vd!%=PMrg)93E~SgjZOkPrKw;W48>{RI#8*Q!2# zkVjAcD-ZG9r5<)XN|1Tf23aUb>3J0q2IRmCvNN4 zdEI)yA^Y9;FZ!u<#L;jJk5PI2KhJ)RpGMEC-_l2ZUi&TmbnDtL`c$`#KH?wx3Vkg9 z@OyjNcT^tH*O`5GeoB|lb!30@t-sgc-}jCD`(xjy`nxi8uym68u>Q#X%bE3C>i*(K znY()CdUK6=>;7*K|K*E(GWqEL{dt|P&;0%sp5nma%KKZ@2Osx)r0(~~N8)J7+v4GT zd0gLjB~LBq8vIWEJAZzD=efUg)BW88*NLuAoIm$5PIZ>|AD-ioNBn2vUwLz`@8lu> zOCK8^>-QKxKKbFRc+9^u4}Ibl55J%Hqde5HbIFr)UE%0ljgF#=&Od$*kI#8jFUc?e zI`~0;-lLBppLCUddU&orlzr(zeR+QKA?sy7_sd)Q%CV^zI#S=w^;7iS!-MXZo^yY8 z=J#Cvp6RNa@bEePUVRLlvi_+~<4@+AZXNZKeY@v*zrTwx!b4t%dbD47?EJ%A+~s}8 zqtwgtH9Y?G=mHnNkIZ*g{fRGmpLu>KpLnn9qMSqi)r;p7zvTPOI!7Ky^s(l<^gDTO z)j!mC&UJ)`{?fD0su%l5x2v!J5+0xOn7p>E&(~|dE_{+#JeKalV9y9%Ar;p}y(T99AeZ}vEXCJ=9Pt}X-OFVF*kC}Y77yX4kMtFF? z`e{WU{8Sz2FPC!_9_ES}UtDp;Kg8SdjXvaw@Ax~#%RkhsI#c(FV?;mJzjBThhj{Y7 zb>7-<#S=bvbkT8%{uU2?f5U^H(w%kqFyG;S@_~oC8lN8>`u&L(9{f;V=}kRfiT9w7 z^q1wQS?5f>Sm#zRdH<0)w`CpY;2(T!<~x+f1{7^IO#**GIz%JkBvTRyf<|%6IC!hr`mx ztNwyt)}xzY{p>rlzPh2aGv{4>o6o0Syl(!$cj^!F{_)ZA&Of@}TT8#4iOc+SCtmsN z>ec+gSF_Lf^z1j~jen$WPwT~x=;M|Lyo-O_^qqYNK8a`PBRV^>-j)6`#38qY$e9DV2;69;)uzvUk*|8%PFhlkg1{ZJmmk$+5i&H4F9_dM^%3x^@Ec(~vH>yxjQ z=i(pB7ov}qr||H(j<0-#2QKC?{g&=u^;`aWiGQOH`8NmB2Y+9Dvd)Z7=wosH9Q|(e z(dc8xBcH=Vz3`33Pw6B3@zZG@)90cOKfm%E5BlTpv&`%EJ)@5iepjCJk274B{^T?9 z^&Jm7O1-q`mT#Sf$1MJ_coaYF(J_v6KJbV?PtOy-d=GuhoD%=QgFbqA9N}?f9gi*R zuQ*aKJ08nFHrFo)j`)U$xE7C(j}BMA+;#!tKZm-3d+x59&ejOe46dXYaoTJ~?w7mj`}dp#B&d{BL~oD=V>=%c4z zpr)8d;^ucG!{IU8A{t*V<;z)ewre64m{gACHDl(FY##>H2o;cqH#V^`h=vCmi`)PhVd9r(U{#oBo1Fk3RHE>y4a$xNgn* z^zCyv^V31!>D$x!=`jA$!((`~pS&c`YrTzs$Oj($QhoCoJk+tc`L?>zZ9gTa_e%$U zPQR&_E6-Q_*30_ps+D@V@yI$yUO&U(Ec3eSc)Fk2xAxn~7xXtgk_Wn?H#(*Z^MLz7 z{=Vm``}pB-zQlpk9X&5ynrov&I$HJMx(biH@5YP1^EgVqh_h|#1&=B3c-S}b<00=j zcYYdu;Gtex>WtrXJotFxGWS@YpY`N_)dyXM$I6fA;c!JCcsF&MIO)FXWBH`H0uMec z{#@snAN9|n&eC7_hjZbG$C>p;baRBqlvlctANrDiapnBI=tI5WaYi5NW!(qOzLm#F zz3@|Wk@-oyE6>@#Cr|3-d*_c49`bePIUYFDN5d`W|K9ndh3_o&@^bztJm^+ER37r- zx@FbN$M|XVs9q+WCa=yv@^kCsF>1dJj~RW)1HbV8MlU!NKOL#hS3LY4j5-{t7xmES znGdL|_$^=c?~2?n)ED?6zVw09NiR7^=j*A%8Gq#;^s&w#en)tylack*OPBXwpS+Fl zte1vI{B-3{o>MRMQR{_&&<7phapn9y>(NWq2QIt$qtip-p-w#3dNDVi8y@^lf5F53 zWS?`cNzc(geYE)L(xbk~4_${99{4OC{4_eLJk-kwkD2$4)YD9zc)aAd=tKQgKh)y+sHflG zSx=r1JfaWR3;bj0H$2o?PrXdOlltm-$a~he?>b+2SjTzkWAR9SJU>$}-8t|`9P9TC z%rhH(^z2U`<`4C4{#bQT`^%^3BR=9B^ubTnM@xLxw=aL4+Z8hj*Tz;edyF zS#{uhpyZ+YhxhRh>(J$(kN8pJAK~G1{v9TcBR;U}w>|oxzbogMbXDe4^9DU$$*+Bm z@X&AX=w#3b|4YBUH$2QK&LvNDDc;7P@o;_SG5f4JHRqx$>)q-l`tW?O&p)wSK)yVen(!P?~hLXp3unp_Vay+pI1K}d?EVeA9Wt159e%U9$UT< zj{4C0T;`c8@wJVA^yq)pufCk~s?*_l-j7EMSA1vjQ}wdb2OiD*Lm%cz`bhlpp?~7i z!eP~obNO7k9#StY>x&=97MEM4^w&6`E)an z4SuS>sGIN@>M?!)NE}`LRUSTjj5TPyO~yzdchgRUh&?>8kMP&d;wrPdxNNXIFSM`{xQ@` z`oRc~m1lmZUxcH+!cY0Y^3$B-%6j~RuN{eBeXRP8zWRTE&M~qMJ@B&`J}v8XJopD5 z(ft%h?Js$s{b2_ z!=dHzhx<$NG*hp4)-jKrMISxy>*_>3;}O4VnLFsfoIK?#uV0=!htH`?^NaIFw|Aba zuPgO5t)uQ!FZjFv(Kh3j8Y;8EuF!GH7m z5gt8{=2QK}{4qB?{5wKEu=KI1cfPe9SU zAN-@?le+3fAJ(IfAupdFu19#bO@DE{aN<$smc>o}_^3Ypr{DYO;t?M<|2zMx=kPf3 zNWO8de%hiB^M?Gi@R-qs^$vOz$BX`AKE(zx_VatCpAuirRrOK(t$NX44s|Aez8^opWBF-# z@Q)EcRbN-);2$mP&+zE{Kp#sU)C=D_bN-h1uh;1eU;dH!^_SsXwO(+`{(MdRr+D?{ z@M!YKPd}A;(4qRFi}jfGyZJQrGB-Tvqw%H0Mc*r*_|ixG zvGEf;etx*DJez;9<*JmMGpY@}Y~e?*U-_vGh_pY*JAxqcD9b4DNXu=5Z5 zuX-uhFZd4nh<~UX{kHPpAG`k2k|#WtuINs`<`-oiTkp^7cQ_p3VqPEg@%hp3P9LrK zhqzjJh}U}Rm9O>G0YCLU?l=9G&&U^_EIjz5dTDvzNdE1sUPkXmai^sgG{#-v~UcTO+dTfb9+(+Ut&)nI6@yh2LpHmm~^z*Z>zkky6_k#TW zmLnX`JWkIO#|W?S`B}%`9WpP`T`Tj);t?IX9#g;SaQSKKWaK>k{n?LB@fhLZ^GE96 zJfwfFb@dhf=;O1lzmGHUczb@{bADXz!sEijoSnbVGvaqU9$g%G{POIF$EkkwTYgk{ z@b%NV!^7w4!}T^Ee0n5~RbSyT{T-=1w(w8~XE+ReqL0NR@%H@PDf$@EV=MaLd-{og zch0xZoJ-$Szx3hzpOa4Yfx=^!dhz+?=kEKcm!G18FUgO;-<5n-9(2;;r*x_>tiPW{ z-#Z@k5&y(PzZucT6ld1EqL1Kh&{`sjI7FV1+m?j z;|LFNtaC>nXFkvG*1VkjEq!F}Ui~F;sFO>*{FL*B!=1+?emd!tKKO_J!cR9m=)?UV z{kGN%-{Yt1g+9d55(odl11Hx5^4D=ry{OBkuA+~QN72V9T=>Vp+x129k6piQ;^31- zAM`Fx^B5jI`oQDj6U9%PpF3ytJmb^+qv?YmA06!c^q`A8PS4{X{B&KHMIYwV9gpP; z@eg^?r!VzlUf=lX5uM_3g-6Td3=iL1E}psnQhD&1K^J-Sd!5#=`WWHS)yuCB*I9V9 zUA;sf>wZS^H{u_6cr2dbb|k;*NG7?8G^`hVM)fOJRdTFKK zt~sLUW97H-;HPVD`P0LnKBn{3c`WC--t+$CMO~b!XZ1GeAB;ZM`;y-){dQ#kUU?+mJ3NQ@QqOmI zuJfm!`78gxW8(4g;c zg~!O}`K;^PiBI$~%|VINeJwmLJbr$7jPN*di9U|R!Qa*#fyaw^T^!~L^HO&|IOke< z{QSgos+ag(ty{Y2`TUi5^{+=uy3-P9p87_EqyrW0@&~H~iEBfGL z?thz?=ws6R#!rv;htD0IRzF?(Dm;34jI6tKYM(zn>*6t@kMZ{W{MhJ&PA@z%cUK;R zPZS<24*v1WvtLWSoZ->LxtTxahR4X~@9@xXTX>k)yqe){(OoF4d-=U16O=)-*4a?Yj04G*6auX@2lom+1tzj&yZ zn+|G!;UDq08;>%7Om!U|Ej%V3KZR4Nmov}#*v$H_x7Ph+dACpD(e&HR^?pyD7f;uV z{O~>bdf^{SANq#R(?{Z1J{Lbd!lUEy_Uv~Q9(SHMeIE~gn)#G}tbGcPHJ>`?$7etK zp!=l{>*qY@`}6*)5B=~C&x>xN5B@R3L%&`62oL&LJpRk?d5mzl@ClDzc=W&V`UQ_O z=V|iz2m8z4%TLGK!=pQY9%mkpjen?@SAI$#L%&U4X1;I0qvH`jJ)@7~{fSTAp3%Ws z{A1Ni^wIKp{kHZO^SXMe{?Q7L7JvF%dGHT&y*Ot2?TkLAc|Y9nP%l^fLtWs}^7-5R zp$_m+FZ{zk@tJSxC4P#>2$vh5q7V058vk*>aO0<49DjcD?C-hix6U)f86Gp|x#M?u z3_elxark-8$^YqNBo4mq`W6rRP%ksZJbKZ`nRu__r+B#U*EjlDJc@r*KVAOu z!cQ+cC_I{gl z`T2>Xm+Kdw*N2vW;1NIV(E&ZHmn(7O-3kwVuDSp5@rh%G$MTQjr}Tl3dgG)93kz-w#@PRv+Ti z#}Y@6J}x}o9v+wa@TgA3!9Q{?_2T-A-rI&py&v=qk1~(palAkA&BSqq#}yvx<;c&~ zOApVHb$5Pxga>`_j}{JeF>u-Rm+tz7|M9EBLmc{aoj>FkPyXcoX%COH@ZcY3>V-bc zdq;TaFC+IS)us1cMIZVLec*Dx;4$1kO}(@Y5B{MJ!YX2!+l)bTl|AQMyZ#P^)LIRUash4`KdXgeE%}kXVFLH;rr~`Usm2;%pYf|mv8j( z=|AQ%zIXn3dp_TBC|vmZ&|l&o=8sp`bFKQRe(U%4qj$P?AD%w0_b0wP^)kZajDL)L z{>abG;gjDLKOJ=V@maT}UaCIuI187v>Z9-&sh6>-m(};xL3r@fL;ds9=!1W#?_PMc z!lQ?WdTgmT*Do`9p+ocO86Jmv`RUU$x>N>h_!YwA}yT zr|M-UzejlR)48daR`hY^^LX^)A9x(m$5r&va(-N9p7+$tiHGa);-|0lVUBY@nLc{a zN9EDOqx#24y`1?xeT?|2df`i}UW$L<(eZfe?dyL%=RfjzdtP|ZJwJVQJ@<`1(&tJgT8Qb{nEv&-}?PR_43QJ?xYKkrN4}DZ~QvG zzVi?IXy2(1JX*QlZ~DuNd2AFvy;3h#AHCGeEPkrr_SDM=kM{O(q7RR=)C+yAKH>W1 z#r;BYti1o6{lcT=Jo=047yiLd&*TM(KEmP3BVVuj zXyHj8esdGwdm3w^Zk;HUJ#H*TK~CwafcTX?KE|MYNH zCnp|7A9QhskGw42;W5k~FYX7)i@wA^+&}F(k2vWAj}abAryG5kKj>q9e!~N|EA>Jj z*w+Hlm6td=wsVo+;>P_)2Vsv3J-IF`qN+V81WDFawSgs!o&R0Qg0(X ze1F^Mcr$;r@HoPw=kfBq^2l|F`$6L0@!(_pRK4&I=c)Z=<~%+6sP%%!sP*EU`TX)F zeu~G(M+fGQRWBPJGdzy)81xYy?K}Gm9>d(CZcD#4e~erQ<3S&l$655z^q27H;X!xJ z{TV#+K0Nq{`(t$B@eU9EaTOls^_lD2zqdZFqK{en?Ff&ZK8~V~`9dFf?CRxv_3?^F zOB~B5)6ZJ&2i^Qse<|PZ)5jSeXLN8E9?L(}L3j*v9vqq?KEIxMejXZYsl6~ky9je=@UczI1 zNnEM_(Vyod94>Y8-=3e}$&2;XcMI3{;{Ligs(-Zj$C2}hlaA(#dZ~W8^uZVMdHyk? zkJVqIqcc3Z^ZfLC9!Jqf-}tHi^1bz0|Jz;vcJC@;UPdeN-N8bA79B`KfyG`Kph$sh3{-;|>QrMtHQG zf8_DXV+#-cmY=GZ@uJ^4KVR+oc9~mG`Ek7*-_pnB$>R}!qq830Zr1(z$#Z{y9%tU~ z?`^2xP{f8xetoiFp@j>nNY7C)b{j=9bAZ+QIj?7QPZA9#4~J^&u8e}{+r z_IP;2W1VNigFbG0N}TTFtk2_`KKznL^l{OP?_HA5#eJg>=f{IST=(KJvYz>?>ZAXI z^|AU+(MM0c&;xzo{Jr|{eg5)Qa}!->{_61$Jowh)p-$6Rn&NEjy7*&<7s$t-qW_A9(Q7s*m;D zd6Hkclh^b8$zxZi;>IHz+>cdBl&krvpbUxpo^>O6ibh&gTuZeeNAHN4M z{C=3a`_Iq1@bKcAI>L1BRD?I2;yjS>ozWQG31!w*-Uho*sfiE73=M0Z^j+~c& zs59#mn*)v7+SzBu(;@$0whWyj+zJZ^PU^wDun zf1!^_*EqRvk&IvPk$ziw*jInKtZO~Kyr~!K;Xxms|51H3 z`F4(+>y*Z3PS?{Ee_{Z`Mb@GA-pP-MG z$J7fREgW#!)l2*G`}%0%Vcmwqi+T~4ysduge)s2RpB^6SWnJH99>Zf+9`vdH=)cUT zjSs#(`&AzHt=Ieb%;oC z=%?@#NzJ)Eby4NrY$oxAWb&p7|kU-ZR4 zKkMR;Z}pFXLmt%)edt&AksmxRaTova`GITn@uU5Aq+aHWdci|K>EW^T9Uk;CvK}7v zQF*Mok>Ao^8XZI*x4hD8^f7%tkLE8ttiw+SuKmd)U!se}L!a8{qw?_F^~;%h=^GwL zbm2Pp&U5uo7dXqq6&@Xrq7QYlbdqx{9-p3btCz|HXLa7_1NRLNbzSQPkHJ6qTKvQP zprr>~^4R2;pSpf2`ncq^@W8<%{}_Ks{=NUp^L$$8Ltc-c(#PWAbCt(W;j0g-7jfr4 zY{MgbCm!i9Gk!`Ji%)pqJ^51h)hFfAe5&7eajBP&PrS#!Jdft)WH~gWj#*agJV(_hW+ zc$i1Jc}%@K_lAf3P4kO-_dR#!G4sfkybk#e4_rLb*);EZzdEh@NIj^RkvhSH51*+Q zxG5T zAJK>TeTK&$&K2%Omlg;VFK)t@Tpp4|?!;BrbKoIAovYTj4?1@-xbON+(|L z>Lq;mX|0#_+`Rt6Ki2y693FJ;{s;cw_-XD#FAmYi(uw`Uq34m#TX-~iOy2Nl`jf|B z`)?_2ZOtFyao2h&_fJQePq+0FUy;A{dpkMjy6;bqS(iTam-erTGmmtuUb{MRKPdI9 zUg&AnOXgxaUH6f4e*WS8$NRHCzi7F?-f?z)XnqLS-_ZV_|Hp6tv;M=Q)XUOm{DVG5 zeChhH{jW=y*IVl2iayRfw~j~L>BBkB#O-|Y;B)j^=P~}#z9b&!4>!8wV~r1O{KGtB zzq{7Ur|c7btiDzJ)SP~X#}yte^|JaV-HRt&59f%^opbS1XF2E0{^RY5Z-xi1t{1z! zB#xd(pKC=Q%h$qL0g0Q~PDkW#9AtIS+pB|GDqd@RQf@*!k&{ zhY!!XHy){T`LX{uJk(3!K`*cRODp~M2!~mCjI3{6@qELBZpwT*aryY1lb_;O`-}U9 z`0!Kp?sKnrj9M=neT?WFkCF4^ac_9g9UjN~b3S=={Z1d9zBWAc#~lyr&N6@4XUAjZ zt@4PUUa1#+`6(Vf=lA%EM~e>VW92bF|EAy4*QbZyu3oNEFV@9lrrx(avcJ4t;W7AE zxgW%*>7)8bql?7FzpTHw+c)}f4!SX~cfRqR`sjT5?cs)pKCpP`Kh;m;AL<(qaq|!J zPSpnK0T9v-*6ibtK6deL{zzdYwvFZ!+i%0E2kAM&%)hko9Yhl4)o zv*?50-~ST+ncJLymb$Sn4pYAMiSRh__>^wZuv+tk}KhN`NE~Jx>&-+`|2i;`fGx`t*{}^Q+#Ig&;I(v6&|Pa|I_pOMR$Bpy(Ay4 z=tIB4qiyQt$bQ{@xA18EG`hfLhDXC$esO+#;yvDKh&(pZv(3X0dm!}^?yd63&sV&KhrTzm zpYxeN%wuQHLl-x_Bp=SxqYrhuc!)dagD6Z@0EY(FY0AfKg~Xs2mg|X^97Gp zf98+x^wY{ipLoTi{XsviJZ5-I`q=S^&yVbj2Y=OX8+~NmtMC}~Kqtv}SFg@RA3r^L zzTclm{^5SVdA+F<{u6yvKfS&@>s)m9_B`i@czE<@? zf6=9Ssrs1N&$^@3%aMIOienT%%PnM`RL5=S1x^|?#yEso#lHi`e?;Z zS6x&d^ts{DQZHxWp}(woz3}MrQtAcg%40f*e7pZq{6}7I{XXw+sh71*bcP52kk1w! zRDI}s^gN1x@Y6w$sh2}M=`YStA2U3hf7O5LYt?;pcBp&$$o(<;SfBs&)RTI_RXs2N z2&ay-zM^h$topFO`!wOvq8IardA&z>Jv{WG)A|4PiT5h{z@_UK@w?+a=M%Shd>^l` zlymg#gDd^&C++Q7mtM>>tKZtE^3aFV2l>aUbNBtD5B^;J1CJvd?!se)!}96GbB2ew z<$Hbq5+3wR=lp{Y@Q<}lczdqDEFR8Xc=-Q?)xXup9UZ%0?C1JRm(R?>>P&r_+ntNv z{Jj(Rr$>0xfB*92^^X4dpuXPn|1a(DsdRoDUEh2zzIS9DeQm904k|qS|A36dv924e z>N$TYc4}VW+s(*ceKK%X(efalO{{MM@ea2ox17;kL;^|b$Zz7W4iAY9#{6G zk30Fe=;PDF^NP-W9*@Z%3y+yRsTW+&#JB$bQ}of|(@P&e$Yc1sOy9|aKIE4^X3+;8 zOCRAuAC<>WA3Z#7^^$Yb$MTQQ4{tn<;vX&XwbTn=t@>!;L6`Jlzk^OwFX|nS8GVeR z5A{kPu7h^^*zw>WD~{AN{mQ4f`Du$jmmlJxFY=GfRs3}1-EI>*2A(9ifGf4}ippPuWt zA0NLvQ!gtIFX{!4nY{1=Jm`DPyG0)(=e@&&e(A$Jre1pKx9Y`y2c4Gr0}uUWt_C-4|A7%P5m*xLcit@{(*;j+4WoN^^Ko4=PCUbkDh)zbN-Qf zq0gaS^sT~!pYGSwe(O2_fB7BRUq7cS*B2xFSKp$~QZIN+JTga3`Pt~B(Z}aUC*oWAR7dfzA^)Xb z#D@oc@~>As4s~1nbmiB5lbj!a`B*$Nk6op|;47Y1c&Ov0kDPnQV@AL9vDPp7!o&Qk zUUxh?zX*?;KIl(>_&eSI*zx$LUj9ZNGk*H_;?ele|0Et&ANmM=to|4us`^k5^s3(; z=2P_){~G+rJeIksMGt56apigEr{PiOG5qiN>Ex$>uwLlnP8^j7|Ii1%;SoKrc%qMH z9`n6YnLj!n`c}?==RD>Q_s7hq`pcF2>}CEKg@=A?UN?XAO@A3>KGhH83lHC$;<5Y` zkHjZmOCPR_O;M(xwZJIdTHWw zZuL_1pZPS#_y?cp;&FYOJgb*o zza8T9eWHFD-7Fs2*M9h`mm8n(#-k@c?vL@05kEco$1jiW=)?63KlomKi0?=|{KL;* z@!%i5)QkQ5WR_#UuKo-=z=!AimVorN5MZJL%1w znf_wG9{-r~kPn|g_#(g%Hw5>NGynR;yR(O2fNsqW}AKkqs35&yt@ z#aH};t{VTyddokuuKGCjef64pnPvW1_2T*=^>P;;w{!82@R%F_;PXd5=lWZ|Rz9;1 zeehHLT>XAiFY+56&AIqT^mXR^>VNfHpO2r4ckz!ec}`z`58zH-?YrU?Pq}`X)lc;i z`JoR#Prm5GymYCT_^IC`vp-I&U%B2-y{L~Vzpm%PW1T0T>*^)@&FBM<5#2R9cYSNl z4#!q`Wc^8}pP#xp)Gr>^r%(M>yot}b|6YFDN`I;I>Cn%@gP-c-bUtdmZ1mCc@4zlR zk}o_)c$iPkA4?zlu>2&x%ESGJDNor~+#UbK(V~yB;j!u?`yKSD-{u^%_Lubk-Mr4% zmOkRkcr5?WM-t!7PqTg#5AOPl&+#vOQ>S#j>RevJM?V;wd90OsS^CKDhn=NftmpT< zYQ6BMTO6qu`C2^k^H%Gn@Nj+G%KTw&?REapw{rd?aol;%zkBqqUMBwGAs@?sl2`gz z{Wkg8%^xj!q7VI%KGyt^xM%cnzVMHu@c5(i82^}s#}ytuJj@^T;ePT}>m`0S>A3jm zKZ-~7k3Y&o|N5WJ<1&9lPxRX4C4EZ1di0^6%sf|@Gy0%+eSq#e-~0LLXX^9F&zC;s z)4$&>_Y1{ysGroE-&3RybxQwjqYv{(!y|QZs$cz9UyXmX^b_|-FVCajlb@!(diEdj zkC8sFZ#h5znAx8`HNh%)Qf*lauh$sZ}9hjaJ{&m*wqUjeBAd9J?C%5Pw`MM zt}o^f`p5Xr`9q$TpMHMy+Y;Y&{gt27|B?Dw^Jny-eg=KeRr0a=rg=T<(#K4_-1HHB z;i13KM~gmIz2x)eb^Qeo{dVW4@`MNdo_MI2(qFE^qbFa>C-8_Lna5iAs?&NuPQ9$_ z7xRnxBk|nX&-G=?^OG-qdh*IY7LTkqzH?sZH!EN2z3@2018?!vdTG&z{<5nV{MC#3 zRJ~VyTzG8!L%$t=W51QJrk>4{g~up7j>K1a@Y`2By8ZMA^Sb+M`dsNRJv_`G>g^Se z-8{xWhBz|!(+7R8`)sM_#e@FBL%p<8FRQ;q_v+OB1^eC6`xzems;d|GYyR!22m9fn z-tag}e_7{v(Qk1bsk>9Y>`(X6$>NcpABk_(Gak8)5Vv}1d@uV|eejP}Z#X8Nn;zrS ziwFPUJC%p)Isd+;^jp_+cl6=Ka8obp zmA+p6e$cMJv~vBzKk(?qKj`<0f9SX3p@XyVP%r9lS1)+<;vcnMW~tAq-_ys(r=HZy zcVEwCPCVY9&#OE6>GDZ`_4+pT(#01YOy4)~;mv&N-#1OV=3~V_^cVNnZu`Ygzv1!A za~|vZyDjp!yZ=ES4Ufd%=oOFn?1-N(eT0Ylt^K9B?n#|bzF6jUdZZ8imLAvVQZM+o z!eiA-d}*k|?7Ql3Gq2bFQvIW6e|2QN7Jc&TqvWfnUc9cq(OWA#&hY2!H$Qj1l=HZL zaev+YI{E1Im3om^_2&CI@wDQnJ#o#fZNDDmV8uw@DKH7ejNP0@K|}mV^=THy?%PfPpv-_PtP2@{3G?m&u8jyCJ*Le zJcc;v!@NTubd~+oCmtuBsh4kf#0SMw^|9iLf0!r5ryuZH`acSfQ+&yne@}?l2q(Jj z?k9)ymGe8#%yXY_;i2E*Z{17%mi}_{5A$vKwv9gYy@~7R{u{F2{*#~NlWtq>FX1g7 z`qgijAJzVnKCfQv$3M)c{AzJ5^O*hAYsVw{XyKt=_{ZE_&*?98+QQ??I)hI0^BKN9 z`e^Dw|BpU~`NJF+9{iLpT~8n3kH=;H$meI`aJ_FH=BFe2yb6!$9Q0A*`7QIm`+MW! zy6GeS(Gwqi%5ziCg@^j(r}VM%QFyF8g!9OLcg~~VR((wUF6VFIe{6Wjt9p~at)E7> zJ0ARx@98gR;UOM84*DqmMIWQg>-e|idi_j_{cF&-(IPdCbH!Q?IpN@W7KkcKwCVi$gtk{XhDo z5BrbkL;lX>i@)hVU48LWeWK{2@xAak3lDYM%}f8*zq)?oXXdjjpZD+jZ#whuE6o$p z%Wq5k&Og+#b)372$GjdN;vde-AJj{aZ!dksZ`JFnzw}%8KSuWJIS>D^pZv~TU(Uk+ zj6T-qf9+p!wG(Im9)Le@=5@NAxPE@t!9!lu%gT505A};jH?OB&yL!>Ti$1RKI10_ApRl?OjHKjN`IU-Vjes2BQBFGu3zr+$vdS$H&lZw@W`kPrQZE~}rmq7VM0 zUhud|z0fB=tvr1Gm7h*|OP$c^`To?+mHQa}{?w{#ditm5ee^I=ugj;+NBs1s=lvr* zkL+{CAA6qnyxw!}@!|R0H@=jgx3}kYe~(&Uo94Rs&SAZrx7B*VBXzZO`~Ix&oXy|A z%=-OHUjOIkaYPTDf5k6*c)0&E-k$e&^K90+!sC8_UcbZR6n}qyzIf=v@)0h+r*xeq ze{^L%KHdtCrH}XqeH@94K73DY{X6IM|I6G9kHhPET>HE|=bAb16&@ozTJ}Bj`oJTf zlb^u{!pYy~+wv&-P^WFfgRkMy6Bi!S{pjf9%sKqscX>ODKF;vqAL71p-aG5;>SY!l zQ~gFC{_dK3T0H2z)JwD8=l&atzyA08{^B|>pTB)RagOXyA4hz4>Er+I&#Lqt9s{rN z==|fu^Zq06Ki;3`=f6LXYu%!c#W6bM>+S9NT>DSYqd9%~roLUTdp_lJMIWoKQ!hO{ z*GG8B+m&;w7rajS@6Z1HrXnCJGttIXjKW*>N=Ldb{{j=ypJxts) zr_qhqSAUWJoX2&~nSGaz3J-P7KU(2IAL_;H^r3$FhyK#=$fJGmaNe2oul|zfqww&# z>ZjlE_&IztmmfLLh(7qoOFxZ1=u*oIch0L`_-V_& zXI?+!f9m2+JWapNdi3Gr?zVCLZ%=i=WGj>wNmaqq}dxKQ?~4 z?i1@o9 zh+od=)pg|3+eRNvU56K*^Go7Zuc?=B`fcXrgN{qR@R4qx=%eMFmwlp-3;2*B%yl=Sw^5Hozf579) zx#?x7Cp_{w+?#%zI^yg6)OE4?ZmE~4UVeSzXvIHPoYBWo{A0*R^r8Qpc=W6rec;jZ zde5VM_#Php%k%kJ^fAL@=_7qqe%y~4Z_npFHvKmFrDyl$PJBNl?!tqA(9f0p(}%p9 z$E?53*%QyEUK$@M`f%R%{(K$}`Zz0(x95F5`>cK&-Qc`<#1E@J@O7WK6(0H^9_p>X zKl`tI6n)(C9v*aj#y=LX@ZcZjM?B`2XP-0rz+;4mI$HBZc<3)UtVcS^^%%YDx3_vp zJyae`A9-E=uf#b^y)52&olfO#gopmZM{sX%&-t&M*ZHsTkO%tc^vx#9e|6L;a^^@hhrAMJcT@3Hcz`oN=QU;0@3e#?4z=r13hpVQCkFB^Td z@Lly#>SgGI(Z_+OxWa>fczx!)bV?uUW%3R0%Rb_+JVx|^2YuktHazTa-Q^#f>z7q8 z@!M8-bl2e@!#O;z@aTnydYWIJ_qYB$s;d@1KEk2uL)=H|xLYUJxAr|!Pg6eQ3;ccP zxBoeDt0(7(e$K?>KK7Y?-EVG%2YtBSU-j_*>~rA}ZuD_G?}z7o^ua&y@L20bJ>XjP zac%lbOTFkXuk_(O^GC1eQZGJ#6dvX=ukZY$$4_x+;Z}J}`Hwy-54?V~UigRWIr+nb zf3!`#G<6*wlitH)6hFP_&pD!xBYEQ=`isZKBkym~?Ui-T_{WibyZ)nI-g^7`pL(H> zX1%xm_2uT@d8~e%`p2VZz12TTz38`I$FslpudBDdsh6dX#DmBG*W4K-$&uq<jwFe`>pf3c-;Dnc~d_Y`ESo{U;XIm{zsz@ zjy}Q<@$k6ya&QN~NxUuLAz$Q2zwzVJZ_o9M_s5B+qaV|G>^t}-ejGeFEedUMsa&Qng>+-SJ%Z~{j)=R-|7q1IH&i&-Ky`MaB{`LNc`4x{Mz85^Ye*U)i zRX+}o!9zU_>ah@q{OA|`ux`57(T{CMJUaV~%lwh+CG0OZetg;c%Xj1HT;DGH?FEnN zb=J548;?`3+#eh8uZjop>8JG)@IpLJy*MY3|C#Xc{UmPr?VR<4o}wGhK^=d5{<6rQ zc*u|2^Gf+)|B+wix$#jyy_&XCGSx$a*S27V&obEqI*c#u+<4`7z*!dU|*w9^hxZ)<;Y8 zhsTe8P-pVhcu)M`VZU|$&|l||Q!f`hPF|oKrlA$NkN}^3t0 z5A6)_Fb|94&3>Tnz(el`9z4j)xxdc!+(7RN{0R5E=;=*ADtMR=byqyf`^HPY=6VVE zQ+O4R4j#^@@}nny%#4TUsUOZ`;BauEzu0fh@6Yn%;30qPr{Ez!@;p|-IFRd+s@CK$I|`vfFIV&Z9XmNzIuD|4<6bVj|u-)+xF#0 zk;mvq=l+MUVSmAI^KbkUeoXM_;IY&{c_2T0Ug_uJ0YB6a`5_+8AL?;QdaCZ*Z@cm0 zS4sNOI36Cy4{?(p;r$?9?bp_KCEm(D;?c-M#zUPH_k2AkKl<05C+o%j()nKFa9;n7 zbqSA9_th8b<>U!Gd_E^X4jw#@5|092){C#!%Xuyh9@+``5#TX6KGeU*_J8V6etygG zTrbV}13a4Z=>?DDC;Cw@c!-Cggu&ETyhj^@)YW% zfgf*CKL1&lT|8ocE-nWTjvJ5sIDGqkpZBrlpTF-Q9`YyQAwTRdh2x7j?Jwfdz@vx* zui{=F+mC7f-}n2BN9TBlAD#0`;)nH@@la3YNB_xwdw2|g8u9k$_Oo5;Wg2hnb>h*% zBRKAB7kBb(yaPPc)5Ux7I`#g`wsY{X-%_s!57r%hAs*|+e(QWu5M^>2R9?~v3Z zj+cbT@zdj}UOIT(>c##dKdhH3e|SB19@}s8Kfxo{OZ&-sv0laD=m+_|)r<31#>4M1 z$sf-z&+Yd}cr5Cn8*k<@$Co%TkIhss;$eLh^t6MI$JLMWW&2a`=k!x~@!W}A-=UzXxPhCyx5x@Imuj}x;Vt;^#Jn?sACy(S`Jmg2k?%=rk z;du=^eji5rh39n6dw!o`iif}RaUO#|CE;;+oa&|FS4;dj`~i>hw(-zU^|U2^s8i;7 zB|HZF5Rc07p?+XTzRHhNFOThq^^%`AsHamrj5pzN{LJ+R9u+*C$K+215A!q0+oWFP zg*-WRNgl-`*hf4X?*qR>{rkG(m9IX()xJ9B{dMOP`O*0uqj>mzypr$;>RNpX>Y=Cu zyjM>%Kjd+d-<;=s+R+cc|6U$Du0p)Vzu-rE?&Fo?M?ZeqpC2BYU-aVe0^H7gO1=2I z>%flvsU$qq56@qmzs!HCmm*#s5B!H813XIGpZjWEn!gEtlYQhzJUNf!O@2J~=i;H> zS+C~h;KKc)j=zDPp8dr0hR1jO;QadB?|Z`I2Y!G@fJXxl>*WVL-uAv3k8a+y3m)>L zKlXV=Jx$MF4lZ9Xy)DPoLc$hc)t@*#<;qmgm?W$+5@Q{avxJKf~U&TXxI5>c_ z{J1@DDDdrEza~76o`RQpseT;&;(AVfYSx2(m^bRJb6lPr+`(gkM+MggKiU(V*-w6` zmrcHU|CIfTyiiZz&*3xA=fp$3ED4XJ``@-7=D$Ao`=NcWPpK#4Eq-5HJk$^7b@7;9 z7l5DjBF{oR#3$*8`f%#S?+5w)b*^I$F3e-%p?-+3diet$&W+Yn(vO1&{1C4tKVsun z!Q+*Fl*e8#9)tLEy|knso+lo+dO3K&AMxlvd3{?h{dPQw6MjtaXy9dD&+iN5xBMW^ z(|5J=w)ZvOz|MppzORWN#@V#v^)316kG=2tzNLDLzd^m6`NRC@dXXQ$?ft}a5s&LJyoLSB z+di+Os~$JM&g(DrRGkE`$oe7QQh&+(nBW%R(ZK7>g`97m8}Tl9WZVlphR2;3((g+A zo|tuXcp*OMN7xUjmnJ`~r^JtGU2}e?UpD+|?&tL_$Bo1I7Cc_yAuk5;hW!OT$&bK} z_k$|$101IQzeV}{Cttn)<@_T*#K-TKHuCA;cL?{h9xiyC`GoVWYw_^;i~KqKAifSB z1w7Qz1|CPZAMqJhndJY}UDDIeaq+NTmiaM%;`E5mZA*W|=SwMG&l?Z@MVwE(36E3P z;AOp;r;`u(Uc~!7{$bWRDZoShsN%ru;o)PSXFZ6!dRm_QcoQ%4$$1A4`5t?{{7^r< zzA+yAZFRrzoR{zj>&4^5+n#& zL-=7ne6@b%hkO=~{sNCm+>Lte^!2V@z)yK(y!P=${J}cob`Ee|W&a@Wf!*Qx{2j5$ zK9kSowd;**%2V_#yuU$yhjz%Lc+1-XE+z8=zk0%BCOpKaxU7 z@$XiNhx>Zpui)qDo8s^J;L*WjVMpDo@b48K13UWbeaQfirCsqcZ^YO1hkWUe{ZKsg zPktOc*w4QMG_WV`^1h3Qe}4#jp?&a>$35|5Sts0|D%NM>hqyQMN4;czXs6--iIewX z9O}{6D4+jaSJ_`Y;u)WZ%kcbvalOohhx}02ZuPR>w_oDneOl*H`8$cTCOphz1rOI* zFAE%sc&B=q?#JJmTkgZ>^25B{^uym9%g=GaBhdMF(T`(Czv*N0qv#)a7{B-p{O+s^ z>dL-XvAgiE@H(G659){Y;y#r+@IIC6{a(xQOZ%x_#KZfxr(S$+c){Zbe)v5T^&;UB z*f;Ns_f0%fy$tJw*Jj?pV{*QD4EAwf?^86^-}qsFv985KJykD$R!`0M1P}RPoW8I4 zKaG<-y3X(S`ulnDaQ$+A5J!1{e)NQg{5U*z&O}cSp7Miyh`V^m59_60_@N!~aQ-m< ziGSkW5+3>!th0Xqzw^h!&ObYUOnJ!sp`O0thxO9ck2H@J^GW>#elFJQxBNJG{JQl) zUPP)F^B|tqi};_P)Vej7OutdR=wnhjlsRf6@=}ux~W*2>3SP`;x!v z2Y591^_9GJ<72;)`ipV;+$dP@?<5Z&Ie)?fdA!tZ?^ED!qrZ$7_0sXz`;y&#$b=Mf`$#$=5GkJ+&_;{rK7bQovn2oX6zD zOn5Z>AH+9!ALbQ)h{t4IpA&x^y7P!&wuS1pD#r`ih06*@b_Xnze^j& zL*1*V#rqJKdXb0v>HOimE*{pUdDC7qKl-PBfXBoy*LU((IM4l@TY`O-$Elb8j88a< z_40}zRXgbH(F?BU4nCLbxe(7ZkD0HKFXof=GvOg$^Zeoduj)m6?wjkSU-ZL%Yu<)+ zY2QIlU(Fx#qrbpIJsIXrzQNZnKh$0LarPBI^Y)C-beCYij((i}uASfay87I&#rx#w zhjlfReoXABAM!yw4qq<(&~N)oAujXfd;KrqVIBiKvVKf(sJu4wMttJi)BLf-3H>l{ zSwCENu5ZnUb}sX2H=hX)?TCl{#rT(Trg{nXGam7fuU_vDa0p(#esL}~9{Y><`?=Tq z1N^KP^`pVh;@ql!$`9Tz{0;O&|4YK7m?!*|AJ)eNk1p=y%{cYDTQ3(qZQ`Pz*lp}L zQ@=g?qNk1Z@?^SLb#4p`G*GKs?Zog?=pit-9%}^^*8ez95$fgZSJp_ZQ=|-@1OL`^g>q&g=SJ z%`bT@;4!F|Y5gQTX5xp}b5p$_PVFq>=-8|HGg#M?ejJ>|4?N66lLtvZCZCH(6TdWn zoP3}k>bZ4k{RViv>bLr3e39m{p77BBMSSM5W<0)behl-J@TkN$5+33z9wpUFfQNdj zefc3C6WrBP`4KPpVZM#;+;4y%i#R7bwcvy6r+gJR`04k58@#N%PV{-aZ@e1k2lGee zxchp)P(Qu@p&!Bd*3r37!9K<78tgCdSQkBQ+SH?QZu{+SQP z?_tQ>g@5M1V>iUp`IJ7Y9qVPXULJ_Y@_czfKD1}ObokN1!}=*nPYZTh;)i-F9tAua z_9yH0JH$gh{Td&pKKd!^!dGxH4}<;ex7ssK@o>HTnBXRlyq;6f$3;IXcnt9QaPd$5 zHsfJ`>GC1PY5elTcxqbb{ISG=*M^_%86U3v@BA_0N3ov7>5skc=zh{u@$h<1Jq_&0 zbNL`1>w<@N8vb_rOR;aOZ{XAM)Ah~w;9+0R*Dq6E@Y{R@9UKi(ue+4`O`__x`bn``A-Va*hkoZxIkNtvqY_N|w z`*)ATPkv-QEzD!~m##hVh}2*Dg&*@h%I81x?L5|rzu{jbJSK5Y<6)h8COaiUhrs%AKw3vA3?p#5Ahhp zXMU=2IFEhVaWw3ThjlGKI&rI~;vvrc``)KK_p5j`@CfHN>czYj{Oit@;NktC8y-VD z@{9gr{PsWlSi%2locLuNuFL&J{Hz!EIdQ{}09QZvd$q1tKMo%F)6v<0*WxZ71AoQC zep4>CO;0J()?k)boEr-Gr#ad z{fHOyn0CycdTPHFkB*&g{NSxW>irFm2_6MM13ZTK!Vm3PhxQlO%a2N)`lVjvp*pzm zw{w3?zGQxgM>T(G9y9Nqyw`+>es}$oAHT+jsgLIg@|69Td3(m^;S$D^=2Q2zzc@Gg zyg~du-+pU8hIW`s&e?QKH>P``O9LT z22SE3KfIos>K5zlxBA(^V>)M}r`|7Ye4;c^99CedE)g z=DMUGU7UIC=Iy!h8pgxCF8+(p?Jte>>S@8A{FvaO&Nb}VZ`)t2mukM%HR{ed?Kk4l zSg+qz{}LX9b!Y#CM;G6O$4q!c!b3h*^*HfEdo#^r<;C@!{OIP7`NQ}paf-YCs|(^0 zi672mlYI-X=FNN?xAUp?{M`GeJ>fCXQ}M9BWc{$;2K*3@cBz+wotE(E=z#vI3(b78 zUcbdd+`PUOk4Si!hjV^<-mrd>AJ&WgCF2qBqb5AYD?B*vJa%wZm+YhX8LV&cwOKFr zmoHI1|A~kCG}+I5pZrp%?lZ6>KkS3K-wy1{4|!d&HPlXhR1l1f0#LVrt90Tf7DMTei%;!55NE6^EvlD z_~GY#Zo6H6pr;Lc%g^~fY-PPX5RZD%kHtRDWA>L<^^)=Mdd@r-_LYbFzsxs&A0Ek% zuRGopJ)4V>h)8U7B1ouCDUy`0y_ABx~@k2b! zyY_=Pji*>w*w6RZ#UzA7Fh-ZA7J7Wm;h{|?7u zo%tH-KKoez9X-|F5GU{m*2|AYf2r10s+T41;1TizJPPki!b2VNxnMXqzsJYYk9iwE zwLh&3?{oM(?`^Li_!rJiINl+z%c*hiJDv*%$x&W52JS=e%UUiXaJ`8R&#dgD2;tL)} zXRMdU#!o->Oa15<{gB7rmpJ^u4{`JFwaLQMZx}>Kael+#e`zq`|z~kJva(+@jz@y2JUp5}{O8e(} zF6&47JD2vC`ESOL4j%L0j34IN{-U1Bk120&`f-`p{ho&XcEXRi^jojPPrj{F_;Kbj z=V1FC^IQo1_gR+fna6JRq7GOuM?b9>{bIjR53-&5dsp8jILg}a+ZKas6T*#rxRi6P?TRhx4g; zWc^t3*uSGkKIDgZw1mgO5&QB(UiezzM-g}G{+@WqxElZu}7Msh=+rHX_rBA5!A=mL@g6*!JAD0%{l$84K2OXZ*FZ?+1vQ9k-{4h_E^kb%ZT|YzJgdf(+BF~-Y z?SuWzvpmoIXq;E&2Yuc1>>u`9=UnyFe657XtA4BQ26>Sm^5EcWz2|uyKU>0Mu)gql zT>8s&{y_iCLrL{g9#KC3$q)Hd)GPHg^_QZ4pbIyCs9WMuz+<5Q;v*i_x@BFF-*4N` zZrthzIzFEqM^CK-^L(Bo+ONP{9q#f2Jze-A9$wGoek(t^>%VS427Z-ve{2%h>9_Qk z!)N1Wzk1^bcnt7R->nzpQa|SV_N%y`*Q4U0-REA{>@Qp=HRD4st(QNL@|$$KL?20UqZ2;F$2J;Nd*xeA?+R9sLk*d0eQ^A`b8)z+=e|a3A0itQQaO zGuUTJ;)i{7T>6W8;X2=&zm8wxA-~1LeA-{E7w1E-=K?$m`XL@CF6LA7q1^%=Q~h|` z^>c7Ef9UDqg>~coGxB-jyx?){e%p4emj*vPuAVOPa>HXLeu&3Rc)0)B&v~8rCV5!+ zVZDfZ$Pf8>>o4$QS?}n_t-lz*-_!Da#Si^z?5F?M(cuTWFCJGtP5osOm-mCL_hT1+ z96YF(&UxAoo@YA;_Qa1aKhTA8;YW}M`%9-D&7Xb^@kLL?qnICfY`y5$vVXu2`^(v1 zzQK>~eiwdp>|}m8e-v@>^`D*BzwUY|_#r>K?-M^xz5Ky>|G8f)^)lga2ag3F&Zk}d z6kqXBPkru_`SG`HM}EjB@la3Yhu`OI;{KvuGC#y)P%plZ#E)s8CZ9gvukzA)%y`ug zzF#)opW~wH-4OY`IYl8^ #include +#include + #include "meanshift_utils.h" #include "meanshift_gpu_utils.h" @@ -127,13 +129,18 @@ int meanshift(double **original_points, double ***shifted_points, int deviation save_matrix((*shifted_points), iteration); } - // calculates norm of the new mean shift vector - double current_norm = norm(mean_shift_vector, NUMBER_OF_POINTS, DIMENSIONS); + // calculates norm of the new mean shift vector in GPU using "cuBlas" library function + double current_norm = 0; + cublasHandle_t handle; + cublasCreate(&handle); + cublasDnrm2(handle, NUMBER_OF_POINTS * DIMENSIONS, d_mean_shift_vector.elements, 1, ¤t_norm); + cublasDestroy(handle); + if (params.verbose){ printf("Iteration n. %d, error\t%f \n", iteration, current_norm); } - /** iterates until convergence **/ + // iterates until convergence if (current_norm > opt->epsilon) { ++iteration; meanshift(original_points, shifted_points, deviation, opt); @@ -244,7 +251,6 @@ void calculate_kernel_matrix(Matrix d_shifted_points, Matrix d_original_points, } void calculate_denominator(Matrix d_kernel_matrix, Matrix d_denominator){ - int size; static bool first_iter = true; // gets max block size supported from the device static int requested_block_size = device_properties.maxThreadsPerBlock; diff --git a/mean_shift_cuda/meanshift_kernels.cu b/mean_shift_cuda/meanshift_kernels.cu index 319a6b2..04ff883 100644 --- a/mean_shift_cuda/meanshift_kernels.cu +++ b/mean_shift_cuda/meanshift_kernels.cu @@ -78,14 +78,4 @@ __global__ void denominator_kernel(Matrix denominator, Matrix kernel_matrix){ cell_value += kernel_matrix.elements[row * kernel_matrix.width + column]; } denominator.elements[row] = cell_value; -} - -//__global__ double calcNorm(Matrix mean_shift_vector){ -// float sum =0; -// for (int k=0; k< patchSize; k++){ -// for (int l=0; l