From 9957206abe37698ab92fc4770e396dad785c4293 Mon Sep 17 00:00:00 2001 From: nicofrand Date: Sun, 21 Jan 2018 15:35:52 +0100 Subject: [PATCH] Add tests with cropped photos --- flatisfy/test_files/124910113@seloger.jpg | Bin 0 -> 26265 bytes flatisfy/test_files/124910113@seloger.json | 67 +++++++++++++++++++ flatisfy/test_files/13783671@explorimmo.jpg | Bin 0 -> 24288 bytes flatisfy/test_files/13783671@explorimmo.json | 44 ++++++++++++ flatisfy/tests.py | 26 +++++++ 5 files changed, 137 insertions(+) create mode 100644 flatisfy/test_files/124910113@seloger.jpg create mode 100644 flatisfy/test_files/124910113@seloger.json create mode 100644 flatisfy/test_files/13783671@explorimmo.jpg create mode 100644 flatisfy/test_files/13783671@explorimmo.json diff --git a/flatisfy/test_files/124910113@seloger.jpg b/flatisfy/test_files/124910113@seloger.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb9555199c66fe866a7fe1a511c8d6f7fe576438 GIT binary patch literal 26265 zcmbTdWmKDA^fee8;o#uCCMLkcC&I_UAtWOtA|ZYA<_#VJIR!cCTVm2T zr2kz6>A!cPp<$z=W0T_J;FJD;9xt5$0!$=Uq;3?X_W)!9BoqRqmtFu606;=RtoFYJ z|L=i>jDm`Wj)94V{R%Om?lk}z>3>#_hK7oYnC*v%15gRj2;Xr@p%bZp!+7sZ%pDk= zg-QFds*6Np>YR?p)a3^jHt8EO^0y!885o(EdHMJS1cij9Kgr0-eU?|y)Y8_`)zdcs znVDNyT3Oq;y19FN_w@1(`WYM&8ulwZCN?fUAu%aAB|9fKFTbF$sJObOwywURv8lPc zr?;@?8pDF%>GYe|94)?02~w~#NnY303-m{|2B5_sW2REyxVojfPac# zc@c5o{lx&=I5kCp@EXN$V!n&uVy6B4*Ks#kP!i)D`~ql~Q8Ntd-fV`uzc-S_`(ClH z^s4C=_$N!nFcTK6bv5&J@G$#Z)GznzcmR9JmUG|>z&HF0ya)b3qHG}zvwfJYzs!e* zpvNx0V)m1S1q;iH2O(mFf4qoqgtoKqkju-gQbJPs(gHt@Hm)_CrVm_IFwL@B)X(MC zHbRE1?#%_esKUg$DomD{%S-b04mlrm=beoh58Awd(z6;in_j{bJVtiR?FMPcfRY%( z;}WcK4DaJQe6)iKJDo1^5e8$u>V{e1fl=Guufjzhd1uG>wU*CjAn(dY$dO`P!tg<} zqE6(GvjdfxEvs^<(Mfd33}oW*Ey*VhhgB#4Gs=|ds_8RFhj&dsmNlyCjZOxDkogpY zOdnEvTI6qSav0P3=f@Sfo&lqouS5oxm``2+TKhSE5(zek%M$8Dq145$1_taY19o>z zHP&07ciZc7syO!|YWcqtEP^-QM-I%q0H}y}$A$6=dC40e!O-l0-diAI`==x^HYMIE zHa>DZUotUfqOBbx4kgDK{_npt0a&EBF(Rcx?&J_bT{^S>*>-ngz}Uc34*Y@G;lE8L ze#D$Gz!+X!g*A1;g6W|r57;`W7t1NK%tFb|Iv-EPH~wVCctS6U<9-Ip@i00-)0`i$ z1%RqBHw{?RxRpicX1JulIpV0>&!ir(Mf=2L`!RAD>8S}-+h-&>!842GQvIBo9l&l)t*7@mI^bpk^gEm9Pp zhiHpl07tVa#0%nPR)!RMuomy9Spna{s2oE2Phr`Vj&_r?r>>Hyhl?PD*kxwDYtgEl0C!OV}?S3Q?~iI91WyDD}^n@ zu#vM!2FVi`Y{R(&^{sn;TQFuc7*O{4rJ__Aj{3p}(J_oJof!K-X%dKe8l7A2A1t6}o zakmTZPCVw9xY~7m0r=~}ScY!!fB7@diSm7S&0Rcb_Kkc_b_dbLiUyaRx?|KcF|J&; z(+aJmQ*Q2HAHW$r_tnqm>ud}3tUVf(Z#_>PslApttJ-FDHf531>JPrV1_s}4R#HJ0 z?ZErP8*o^~z4|Q$$HQgA3!sAqPO_Iyd$I7_q4k|#k=1RA_8<66L#S$uVk{lx&23oi zA4TfbB0ECtoo`{|Tbi~R#HY0*hD*6q+2HCIfHm{a`0@SvwjXnX*eYZbjhlr0o5;!{ zNdG!a5z!10@Y7|-mXW}~Zy(QA5ew6XaBc^R53lhz#p62gV1_04p#xZGJNB0Nx2zDh z#Drngi*-?YNh%#la;?{7$S61wGjIv;V3Xww;4AJ6AbYv#!a&1f5xh-1U}7SCSMsWB zuW+Ri%66cWZP#EBcN+PtFn3i9mr-ah35|W8iiv4>@kkQqGOqoM&GjfygRy%%vU7S8 zN##M6>Y!E)HBM8zYCa9mTMbEuSPl7vx42`Scy%T&aK7MUlN(ipTXt%jpVfMM?HBIJ zL#CF6`RF|L$=L`G$urrlBQ?>iroqCL(+`eqlKKfF-fyj)yi*F;4#T=$-Rx!BE})*b zSpivi1)}GQ`QzNzx%8`7hv-80Xk4#JFp>snMG3v9?QG~H5}hAXzvD#Bp(b_;0HXCr zpA4x!Ud1ZKSfB(hM9lhpY72sA+t<}5=Xf7rhD#3Jrv$ss0mUjOMS{M-xi5pj+SC=dZ<$FT2-YI%rho4c~%DS zb@gyarK1VF`|coWd9z*m?K`rp&Fjun)#mX-|-tP2)ByUqYEj!v|p zk?W3Z;-;O>3+I{apSrpDd+j3IY_MXaai+so>}(8lPy#T@+=Ly1udp2Yry?*1zV_!| zM3{>L3kR%9DEtzXgD6pIH{tHwi-luf=$yEQYkJzbSLC-KC(ZYDQC2-eb~YRA_77sQKsyG@JmpCsQGzwGJKY zi7@MfCt1(Zk{VARxd&OfF%F3`ph4cMc!6QnX|*R$cX>*7L+CN)e3UzI6>=T>cggXd zfURHLRMptJVzUCPJc3TXUavquUy!sT)0)-pKWgiI(Td)L=(4UsDhGIIC_-!;4hT3Onh?@ zraTcu)h_WF+I}kC@Cm>LQOYC~XjL8@d(*kTGscx~QUxsFTb8Rdt-Anj`fT)VD~Frd zB5vr;S@af^hPBM1;#IxBtk1j zss}!Ay6HS!N-<)MvmAvrmgHai3)1RPz~d@THX^^{wT~cWt|wl!4kAg9ra3Wo&)dDH zr#4rx6^%glbJOM(C_M<+3+Y5)qm&-G2|2nEBM z(M5VKbHGScazX4Ql+KAX7Kd(#tPj8!LKYa?#X$15h@kj~7PO*GNp9WFokr6m;P|H{ zKn)cuL5E$H;T4?sq+oQF)43Blqc&tUCxDYjWoZS-btnUn31;Pit61wX8c{cO?pNdq z1+4d`%T-+FX^9PNGa|(}4A4YzdL2wBXw&mCE2Ik%f1V1u5`?LGhbxvit)O<^(W#Mw z7EP|j(2=ObYn1>-Aey`D!gne1xtI1dF*<@nv;aT(vKBF6&XEsYS5#grFq#*D0n$NJ za>0_a7oHk1B)Tm`;+@qC zd$^WB$XN}d3;{l9Ubh*qsLh(!*RggJua5e}cx$$*bX=&cJHG%}DIndyzi>i&AsjOx zTBWW(#c{OAIVsN6v$P+Q2vr@y(oCc=S>bK|>qK zx)UXB`L>hLfQ_CS$5;cycTuefVrF*X00Df1*b#i9-_~kM{O)|nhsOP?yF7rGS@fMMoyUHey!vYBH!~V2)f<$VJTbLqMzaAiuIXI0 z*PFSM#>Qyy?>;_Ew7;a z9YajL$S1rpJnC=S>P|9okQkOVCFDA0V z?)9<)U=-0lV3S^+T)uDM=*OD{DK3A?Q?B0m6;P3pEC-sL4pxt#gjPP={0vo>;E|n* zaP6=GUGZrgUM}N2*BH%gQA50&V8Q02y6mZ`th4|Z$?g@A6<; zGu!&htBF_&i9@SYt*M##m`leyVw#-f-_qt4G#I-QKZ^E}`Ev*d%XWqCHgyG@w<-9{ zt*#H~XyM-D2*y?-5MHkCik|$9RN^2V`Z(LP*skSvQgo}O`^W{C)OgOnRr1ogye4BI zfH#&4JCYogZ+w{UZF~VFI0tI&&D~hn>>cXj;M?zDkInIFEr6Pxi^$G*bMCy>PLwH@y}R@f;h%HU%Wyr+n#kp}yy4S< z_6mRALc87wQ{6Qx?-n)qeY)Sunex@D*@7~(1x6-x%ocZ-N9;F-z6i1GB zX}QyF>QbBsJLj!IWWp#eo?Zo-rMrG(-n8)Yv z>LfKL=F6=Cp+5IW=%;a6PUu-{WYi{2EM#EYcT7>?jb6U9zGO}=H-sdL9p;Y zm|6jxU}a`w(AQsk0>+7Y_}zFCvj2tS7r+sJJpw$^@&forUmxK&Z#j0BGnlhZK=R7L z;cxe*`=dpS8Mi_s%TpaW=uqzKc*SzBe|MhTXeXp|S}FYZm0V+hR43ehG$&gOOHm{8 z(!L?0o?CLe`2~Q1{Eh5-;=riAFjI~kaE-d(Q0Lx`i!vk%#=kBf6|S+`=~cMkr^36s zyvxor`3@{2SsHe_;tAI7-<<#;ga7iq?m&yugKemO-BnqpApEi67IZM3LBScQ_ztHh z^8{jWbti_*S>8Zqs_g|pS`oAPv=Y2=*YQ_OD|o^JgI3I%2uC`)i#i@x4=EN~@8a{w zBuGTnz)OQ9E=sU7Tj>NU2I#!WeFGwwJ$4OTj?BUSyo12&g@Q_r^}jqB+xc6clE&YN zJ=?tHeLo~*x>lvS$XUQ3p8vO&ls2fT8kbt%u`NK13wD4+MDIMAo;z#5K;>~2URe?% zq0*QiJTxTXLrj|dCDG$J{W((Bskrkh#-=wg^@s39gsZypWyh-(DqF6Y#fbg_3Qwrm z;jDPjeXwo~c_2WPq{JyI37RrZuen-Ql8+s6E108 zQ0{lId?f=Osh;bgNq>M9yOBF8Y0?@o3O;~a)^j7iN&EQMRqJrtX?@-9`&=vpK#B@U zkZ8xZn~BCEL&-2O3-dbkrkw6yG8Rss-NPyC98;(=K}i>xROKQ}ADEo;*=c7cU0)Oj z|4JqCirp3L8ZfAP`{=FlZPayRsd=X?A!Yrw+^CS_f#yKwYK?`Ta#i{#XXr!9ilxl% zn%wNPypQFZ_2%FI$lk^m3h{_@;4PDm)~pU?=ypCc&$S2V%jS>{ce<@Bf`#L353#3>eF1EDDlh#0X}N0@O5uFv)e7`yVg7CVRy}^EX>7w+=b{9b z@EAc_EFxtS1WYO&sd#(eek0#>L7&~#9LS~qsPmyaK9=m6=^~3P%RxKZ)OKYhr+NEw zPxFXwbYpa;Op~>7XFtWv$|+a-iL60M+@M@XgsLOZMEo;6q`5wbth2Ntv=W>h)X?x% z;m{&9O1HsaNxfCcT)jxIyRl(7Fv@klXpD4H+1}_QiuS8uB$dRZA=h!kC%FjRQbyq1S~rJ^P=;^$J+c zUI33p2YV!)UwhFdrV}(p)#SN;RlQAgjIDf({w%cM+HkMXIOEU-yj%qT;|so!0&nM! zgMWf~3_CEFHk6w!e$DcR>3VR>Zb&MFU}`!qfS+ObGVuIngEn4QhO-*>G1rFl_#Dh( zOTG*cjKS&b36uL?zHe5UFt#Rrvxqo}0Pms;=KJahvDxvV5ltRlt?oD>BkV&MB_I&IR&J>l@ti`{L+ScOBKTujb5OdL z`=idRKm9jj<3jvKB2A-kcjqq7Yj*@x_YN?MC-+?k~8m8RUW%%krnH;k&|NDMZ?H*i=@ z^O!)+%8q>(XW1|oHK(KH(gy~1mkk1RfPMYq@f7rWX;3~kqn4-|&D{!si3{^FQ{yR0 z_B9`AdVp+!&>*aMmRXS>!)BgEnn_GSI1^pVjyjo-Kk>@2+}lBLU_P~|h*j+4HO!_z zN@8*W<&QF{@74=|edKlU{-PTnuXUYPhDx0D>y01cb>dU4c#UOo4zBgwBp57Fp=HXI z5!~rqgR~V7dub(CNRT#7FOY+>RrX}L&Qe;0$>aX|-z)ph3Htm`Xo^TTS!$;Tmoqi= z|14%2c4?`e4|f|;9C)TPR|3;67D#MJD1lNb!}&eUqL3c0A?Iy-NqOFg?A=ZsQ^}nL zTU*Pwh41-*p$5A!AUQS7tgOWDR!4IAGU_;nLbzI^@={d8FKsDoj5@uBU!RAl?ul9T z&U9!Y6ram;BZMM<>vb**{bT78m3ng~YQuGf<%v*``~0wM$(ci`f;~xFd7PpC!io#< zWnI?ohv+F;<0H|SOWJ)VDv{aS`UdV30>i-_1SDa>Kb9&JSo3eXeu+wiK8^U8)rIsU z?a)Z}LB^tZ9(83zB}BN3zI4&1RGyzUhz{Wx*pG+?#C@fU2%NpTA(^&%0pPdI9Bip+AJ$>v(Lt{fV1v zYhQhLdVQzm3(wSPyN$*17>9#8?6?Hs?jw8~VLL}&0*z!}hjY(c4SLgQ0=}%O(s`P0 zEpDFs=%f!b*_of1t&Lo+1V`#pHS74E?=~98Pp(NyUc*>~w+RNsY@_OcZbt<=k7Ubs zvWjG849;$7QQmWq>QBO%Fj<=~?5~@B1u;(V9#g7zpZx3ghe=oeX)t5vP|>Pi6Sr&J z3~Vxw^nW~OYI$4Z%#su|qSB%)UDTf=-@5q%7(i4M%q>;LRPx|$eK&mAIe5p0Qb9wQ zBiJ^QTj~S|57Gk@BOu~upy6{MY|IUatqcF)LMXKIU!;SW_66{3li?``(z~DqddjuP zJL7qyY{c$&q_HHs(O*-F#4<2nXFvJii|72sIWjsfz4@;|j|{C|V<&VFp56S{(^9$> z3jeb40+8Yx^W{N#GBuIdUwr{^eKBqgeZsqfxBX8@^&{;?&SuIYa7{jXxA$X1yZ zwU;Px?zR(=68F$_0oXoh+D9|#67gOx5Kx;4LFNao%1#W_l-OP7VPVT4$*$wYj@R*kM1aR;p| zObQ|e3=Ity*5@$HbaE9@aSfKJa?{Rjewg6 z_j8eK_=|}dS1Axp^+s^hvrT_Yt|35fW+O#j+>QSQ;9>9+Bt%u*D>%+Id8HKWubHu3 z!hdjO;&F8Lg^3KaDsa}1>B-;d6q=_@7(2d>#_~?24QZ&DXU~kQkZnM9U-9j3wF|oQ zO;I=t|1l^{<3w=601%ubMr@f<`@2)HUq+@jo`w>XQiF|KjCG=~g)$;aG2T|_v)XXQ zw`y2KOW(MGmMPqK@oFM{V|2mZrj4hMSp?0ph#4=v&SG9P;%Vlc(kXd~Qz1)KQu)sa z2YW-gJJ)|Koi_;R_&a+xsK@58fZ+* z#XWpl#nEYp#5Y?7Cv1{kH5V}hYb}BC9tPBDZ`A$}4F0(x`8Q)&lTgzvTM&A(YoBSr zh~qVcXw~R`$v?QP-U3DV)5l6xeT{vExTEGPzD~jkk7AbkT-aH)=_QX6O`T+AJW+-Z^Rg^Co+1Gc=SmzJUZx@Bi(eJZBG@r+&tXQV#?NgPA= z4L5KC-+H|O%AFCVP2vTYG*e5fUN6*fm%ex*0W7~INF3ii|hxe z6(T+$EhO@nqvrzxWM-j_4HBcehUM>s+4i5Ez|W`)Z0Cb08l;s7|)gnCpG0S@tYBPW50wDS;-HB3PnnlfiNF8X5MpT{n zZ#qEvoDl^{;q%_GK_)u!&EQ^xFLzUe(F?#$hdMVY7~Lm)<9u=jncuVT3*Q+JGh|IR zF1jOWgTtG7G)%GTF1v1*yG8UtibBQzOC|{eoklr{%4%AA@{#7}MhoSZaLBO`CfWe$V27GK~(6G3RBw2K@`@RUSq9Vu;c^$ zjCXF;IsRZ(Ymv3FpVPWUManoNw{~#uW4bC;;c8jn(E!z>4k%z>0iR5%YfD_|%+L5T_K0;u|}kP375&Sp}Sn?(Jr4+VwJ4nBc>Xb1+pl`wM; zJt-fxH0go6hr+XG!9r)@Azz*h8_(3ZPr^nC_MfuLJ|<}!x5pcgT5yUSlaV+O44HUc zUzf*~nk;E*Y3?~MSlTq??iezPhh)xnEU+N;FIVOLV0+zQAnyb1Xfd5@CRm7lXgHF1O|VpGrBl2%yn(DVs*YoiSpKXu(TFaHAv^3Ap2*1DVr^x7J)OTPcS;1 ziXnZVQ1XL+2U^gkNM{}@=6Rs<2e+k}>}ph^s%Eh%U->D}@&14Yj~N+~5UpqVR}Jhv6WG=1E`L z(RNYj&<=*rlEmu7@D-d7URHJ-uypOUQ7A^r7V)DyJ=;#~eQB^A@V;gtC$=G?_J09n z-Bx@Qro7>ov&_Md14=!!Y_tNmN5abOkL%E*DEMlBeX}DRT|toecHgPpHBwGFs?QZV zwifB*<9ZVWoe{5^R&$XOq-M(0_qU5xQdAg9?o)NY@W?%V>~|pVS}vKrm~V}_muC+x zQW|T7MGVV}xYFFfSh8bvX8Ca6&nh#FVE=h|0qCuvt9BSnTxiGugU@p7T}GUCX5%h7y=oI<%kj)fCCc@6UwyG&!cGghx$@>5-g-I#yhjsAr)F ziq6@7Z9`mAc={KTR5+A>>9ze0deWvPiG6I8b;!E|#dr)ZL&vJZ3fi&U9W(gu3n1S3 z@}L0=9*Q6yGxTt6Jj^@+m%AQ!^O+TRlMLi(uiBrXNH~1c176p5e!`WX@wf}TECq+Z zf+saf?DOT)X5(49{;fi_q_602w2Mm9X5n2eyD1~1Vqc~TcnH^u$DjoGKjkx-0+b1O)q9u+nZCStVl;xF`e+ivg` zl$e?%fbsnakWK%V9!+c+*< zah)^#yl594;B!-iV}`@Ql8#?M!jV9HVWh%f5Un4!OpCH-E>^g>BDIq6=pX+rE@VP2 zCq?K`2$kB8g@M>0TCc)&7GmHrGt|#)orC6tF)E9hYd!)Z18iq?PL>W+Mfu=he@RX9 zO=G+{(zH{8KBo~$qmwH)qC&5WcBz)|rdm+lDNSP?Bn5~1REp|FE%W#S9h;rU7%0$| zkaI9ss!mk2K|jC>J}8Yu>2kc0J?IP#3V)i2hlL))LuAB?XIwIG_S0s$0oqj?DXbda zZ&{V4q|vozySPp8!kOn26KcL1X$k*Xq4zl^ z5s%9>D4L)H-Qdgn=rjHyTKVXzZBHCLQNUMVn)wHFh@@GL2Q*KULqoY2 z^XX`SzFdy_6rXw{n0t$#iEP!T>GK{_*ttB7+ji=EGn1(NQfBA+7#Z9j7-B_yrs1WT zc;1g%hjNMcUB_=dc5a~w)SgI< zf9Y~58{;jEvktc;1D;fAhlx2Ov_t|79ehjOKN&H?Qxpc>sg^{sk$?sr4y~8s@fw)p z+dX+-14x!XQ$ow!Whl=yGaD!iwv2I$$`5?)d>#f~0J6I6%kQ4oF~wNAZVG9yU|(4M z;(vAs=w97RB(RYCeqPS#p&hzGs)uH%9vBbhJP%&2^TD;D-dV_-;PklzZ_zsr{$Ba| za}=U}!SX?v(tgo-PTSNm-E2kaF`-Ok`G-ZSW}NV2_lXc)Z;$y5-G)EH$k?TS#e^3a zwnSPK?ZJu(+uv|(U0x0D1ms}E8h31W5O}(5_KCjT&3SN+;7Ia@HkJve#iy#-J2-LP z)4vZtDecZmMd1=xong~F6vzG|AeW&DpC+U*DXj|oyiOK4+d$>V;z1?dv+#znHYH7> zB~ovs(M~E2(6m!8C!uED&N0WE3c*}2Yp<~7&3jE}{f>3f#M{LCZBd;)4&!hEUoM1w z)~x$v?MRNv&gUrWV6lZI|$WzlW)R<3odt(sSYO!EdbTUjVB04Rzq!ezTC{LBl&%Nk%OY*|_Vy`begnYstG@tL5V+&M48^=Q>}SYpxj|GJ3m?uW;L?}ig&Hu| z7u8?cL{|Ct-OcJ#47ytH>jLKWRG`64u5r&Hhotqb(5Em z-iV{0k5U6?P`Ou@miznlwGyL~T)a2k{t4@TyZ!y|dd17}bn8hgI+1|YQwN2->vo*6 zKwS*4Xe$23C!tlw>6ZfvbrP`5&6vt>zOoYjfn@ImKY{zrsfyY6;3|1TmQ$MC;k&{73|$UK?55EM=Tm=pjkqiN z=Lu|8!7O5XJ3Qx^_0mziO(#4+7mO*asR!R+pI@cVB{YCj)m3pfh=LJ%pc$wBM^F^O zoC+_`bFU|ibTp#!3(GZ&sM{W=0v6W}QmRK*FW|i0$q^xgC*i52xjK5??2?B*xA}ue z`+_tVI!kzGz2`o&nzF4wGI93Hq{ALs2c7tLPWL0QEndlw%TZ$2G^G8J%j1@L2(m0F zqs((9Id=}4K~Jsq&4hSY)$ATEr*vY_d8?c3(YUF#W+YB(;m5RzxQ5rg54ukY`Icbc z!FV8FLY(Z!K9oRC!|U>J3@awn;Jon&ciDo{!trcDi(wAkpykDdK9jwO{izhWXq++P3jDPz-W-UFo-hHOllGgG1I5{7dGDridO2*1u7nWAtOC;&q@A z(7>IFbu|+-99O50C3twhfKT;vO$wW)T4RD(iBo64i?|8Kf$oxF8Z^MhT!}+GW4h_E zgx*M}AoZRNJma8RItDwcXfOh}rtG%9O=@l=N3>x=9~QLnoHD~x90pzQe{%*H0_KC8 ze`FG@YBOT&F+VqsW8RQV5us$(ky&-#R$$H%-BAljTrYK8TUGehX^?ZB7!wuaUrSKz z!+iwck)`I%{Q1vI)B?ref$rED`WC}i5AT_GMi)^4Gy@7yckR*NH|6ORKi+*!dY<|c zeZMrJxh3~C-*&;OaKqdK;M|09KR+tYki@8IQS8@Q{(gP;Cu0;0T6mXR)e(Ponw;EP z7i)v;2@Rj@J=?nAE#itjuDax^gkr4!xexJa^8Lj&rK6HGKxrAi)3@g{JI@m``^|oU zCCy(euku4to*(~r%DV$CSkIniy|<==nx^7LQ!-ZHG@Z%pMIqDCmEdRXZy{b|0@l}M4@zPDMAJpKZ`~5V z&wn@e`c%d98MFegtTh+D?WC{!n0_5oacXvUDR7y8i)wf-*p~>r>X&#%uM}rOc1%2Y zw#_})h_6BrmkCBh-Q>DK3^&{%KY;ToW^Rvr^xU^a8h_meDooT2B=l0>xXV+tXP4IG z-6Pyz?;a$MmO7HkTl8K4f0Q@=7ipqBpU5DPe*qZ(2SSepupg%#M?W(jv2t%2PJpa1 zJukM_gKdIclLjHKzE)PB#zZLD}k-hf+Q)o!D?pqlq>x$gF@!TQy6 z5?hICCjc1sw&Tf|ynf=ysB&6I%;xuMlj=aqs5e4c7Q@h;C442*6w99Jf6D!e5k*4b zw8P?N>Ab%a9Ytp~1S%Do+=L>)^3V%x}f|OS1 zL!{}{BsHoVt(ijAFQR%2dKTDgEQ~qGJ&n4EX+@dSpz0y5Al| zHYQcV;?)T`og1U2AHwqi8w3MA^PflFlIpLDmE=r47~`w!k(xLj-0*ee;+Xiy*D9IW zaM1X96*|P;$%)6Cl1Olo?d7yABp-U^YfMiQJCgb=8K*99_NQWRW)|TAiH>7*w z&0HcOyTk-ZaSh-NRRF>XU_PIfs@V`_5xI*!?Bsdyg)^~zwAhz%Nh8XoQ)`~b{t7@v z2metCnzP4z0YJhA7Q$0TH0s4ohz5Gou8vtiMEOK%cO}hsxf`h+EfjtKAz z#BM8C?_bVqW$d~;71B&I`CgRRJskCK-K#nme>{U|Gsl;p;ID_b^)MvQO>J?jsEG&1V>{+A!&-iTs=_}W z%A9l=x{;@3uIGNZ_WOv7lTTs3$wENqj(EVAbI<;?R`3WNTzk|Pu{n@kiT$GToG#cR zrK~xO&+7~-IuCid%)}CRsZ)bxF#pl4$qnYQK9$#)8hK~^%&9M2}N5F z>6E;udbZ26xu0DUCmC=Q!X&Q#^SDt)^(wS{1xpI|qHjUfxk>iM2-_vFe-e!yPngl7+>{;Z6gLByN z&z&__BJc~2lxu+hoMXVDf<>V5GthcPqBP4|^70~!`vQ=r6Lz>4OU(+}zjuC|6LSi3 zYjdr6Old(_*`Pqg9b@pDWwFgmJ>N0|#TR6O{R)UGX{(6BzuAXDd8%Y#2}?x&`rpV<@(=V1Hy01K z5P0|*BUIFGpdw`xym9z9IZrHk%b=fRK#cj~oL8Wjox-IyQ%D5qXw1U)Ck9!C@g!T& zfk#WnemH_6Ad$2&c(q_x*Q)PXpO2H1`9EJA$D0C!i{*wqj_wIykv{y%`8oJaDT_5z z(TQwSZj}2!rOz{1Jq|VDgq-j?|BcSjo=JqkJGCf}>rY3kUk?W4$oLHJ7y4Ew_1v!u zutLbp*4WNr<2P14n32|mUiAU&^F{3+;pfv1s7{v0YRQ@Y(Kz#36|xNIkYynG=%1T0 ziRl71z8ykaIlZ3i1yRTE!(YXHK7=>HE!v2b$s$$jJiftE#>z5p$&J))JzgCeokL)r6;!5>jP53m-xzPw5U!ksFIzO= znj8kWSHWeu08}fRDee^L>HIKLF!FeTWuwy9bbx6dv51bFny zq~80wTyDFDDOBsWwiY9*A9eE0{YM z%Jv0Ot9vOM-=iP28bi6?wmAt~rpPDlfDS&7N?VEzXIKl)hKIYQwMKWQkTazHW8r6G?x|D!@Qzn%p8LC)H=ET-rtFQrJmD^ z=^;)SLQWzJY4=xsZ}nOu`ij^(xo}unjrJKT3ZR}uW4cc54ib`e5)6>qD#XnPp0~bhY3J#qbzt(&$ zO{O9=*~qswH{d7=o!e`s+HD)6dMGe5@(l$V>}Jif$C>9Mip+%Ex3!zEKOwx@s>uY$ zJ9ZBbzUg>ih3Gtt=y5R?G{8M|;1SX1t@xr;oly#*PiYs%^I$LC;G z@p!4Gf!hHMFk18eWk*R3i1tvgkDe?aG59^_Hp^--zGj*016#zWYSuzj^;5OZ*uTY}5TGVo-N zHMn(fgq=ILy56rvx6I1hjng29)wzUZHy-jpk~M5TfD#d8PjkK9xB*cL+WI?vy8HsL z3jRo4uupQxMpWXU+@Utp~cKVLUC|?HER$D zq_AjtE*6JMh0NJloyXSWJ1(X0-)m*^6CTr2`j+i3{I|WM+*ns66py+P17^1L?uZnz z-(6fH3O+i;eVH`@ZgO|*Fqgo&2~AJ{)cz_W_o?{i8Eh&(?E z2_bm%+mvfW0m)b%HlP2Pc806%CicmrKpvj2`nU&<_nOP-vr5)my*JbewHhJzG)K8~ z)(!2WLS3m*E;v#P{m8xS^=;-k##Ysude48@HtXLy5&6t4xH97r*I=&puYhLQ0N9ea z^Ui$7pKrpK`GP)q8<$?5cOmULO|}}VZ2f(11tll>!E$r2keafFZ5F@tB-C9s#6a}H zmOQtfZA!lyV{(C|3?{t5njL*&c=9SO>IE6jc-ZTE3qK-~>+y@u)yw;+jZ~ zlTH7!qHlnptAz5pz6SW$of^OZCxy{~-~6QAhc9FAi_^5nIl4QZ< z{uVWkt(p>whJ2dO2Uw1~MmJn)21e_G`r@JH`~?Cc1iClHi2_&ErwM-H!fC-IT{ds` z%G@NMwEk2$lVMBr*X$DwuABGN!h?5&%Jo6IpWFt}=l4NHw#{E!EPVc5Jg!Jo*i~&118vmaVC4awwN14l622pQ%jQ2cC)+jtu@-EocU|wPu_al1pTk ze$j7RYN+`k$SDkB+;;UYmmNL3R8_!w0a+hoRJZVyJ$85beR)T zGcn7Lbi}Xx&CzN(uQKxT+FnZnCa7O}f}ZDISD@6^AHOc52Nme}ZJDu~2600RNaRWD zSX9MWU0I!ELUuuIZP+h>NO2KG-9HTp#q0U?9ISj)#`~i)Zk}b?Y+V}8_f_y86$YNN z_n)W@3w=jj0HXeU{HYYqoLK@~l!jl8`ZtaTp^tNeH;%76f9B`C8<3)3fP?tJaDt&Z zxV-koY%(_!UZk6LeeVQhJHlC;Tt$S-W!fj3MS}P~gr3@Q$w7CrUkz?DHwd%$h$&1| z&@tZqAnI>g3^rXWz%BUF(B1>-o#y+UuN^3fuTbHr?@q79IAmul4gHNyr)=p?@B%Pn zfsDSrVdME)olZ=8SE=L?QLI1~B@*CjEQA~Lrl%lje-=q+qi3Gylfa^M#u+LSWLv20 zU3lWM9Ely}2V0&cgQtjCb+)Os)@Wl1>d0G}7l3s8ESr<}fENwQKc4U^OV@3|>V)9o6Lf^)TuL|caK;rxE8LZnA@uT#ZWfH;1 z671HF*P@yZ8|{;J>~H2N_98NTxij_+OOsbG(#xzA6h>EYWo_={1T2YN&|*Hf{=4KPY5(@9YrTcbv}ftV5IanVE;j^2 zw-u0|DJ!Lyvz*9`6)a!raXD}qqOc1m|FxAMp5JD`M_VNruBix`YNu-TNJJ*vwenY^ zGG7KW-;}Xv{(7fzdz=}CwMp=x8+&hr-{jU3#ECQukUE-gla~2y-uwc{8JA9R8Kc%Nc*Vs(I(uy-(srjE3#x z`CDwX+L$NL(}oEFB=|NU%BsL-!&v>>9LZk*Ej7<%)4x(Hx$s#B<6fLUz2Nc3ukRMPFOA1Gn*RW_ zdUx|$?z|end~VV*Kjuz9`Wn)Y#ClbJ1DEj`AMnZ=;K$w8Za?&(SFd~rP(BpsiZ~ue z{>*F0_2Hk{SHxhRn$5@lj}_~G0}ehE=!gED{{Z%5TO2i>pEIhM{`J21-ZWDrocWE% zbKZ(pF+9HO#r7ewZ)U{)gLOlz&7dO*xmg7~G`v4ni{zHnRDhTABMopl20&(?*g{`F9Gvnfe;%a&M`;R8rW<{p;j2#)=OZ{{R|D;*v(% zti`u=2m04yyKfKtCDkTXH)bd!BcU6Zegph!d0Q*mMI*;y z(&v$s?)kmJYP}wZGw|hCJpj&4eG8*}D$(tib>+>(;B`<$YxxS*Yaa?|v54Tcw^m-5 zL6h}8XmDgY{gLy=k>Gplmj)XN+uf9b`qx9Jd_UA9!w3Rf9o~l-uAf%% zZ-w-AXy&|!cpoxCcem+We!cOE6fF*gqP4^H4Kow}0FJNt(a+qDSxDVq0b9b^X`ExO z=FWc#W~~N^pxZNDYSwmTMsUly{{RK=T#McORPkB|4K|%>{Rv@izx+|Af5N)4xBdRV zu1j@0a$`pclm7AK(akI9id5~pDr??7)4tMUvp3p{bO*~3NBMQE_tbn{s>H%Lq_ejl z#Hr=(2i)^rMxSrt?G;GVbof!QF#NlIEP1T`YgHEvOp~b`!LY(jVT$6 z>N=O4al#`OIrPajKA&#{PQFc)K!eAea%nHGwBZgzDoN@As@5}2B))Q2{2op6mj_1YvEgk)2)Agp}t&( zW6Am+)wCyeV^R`E*M$5TeRGAmWr`o}tV2JE?OlDJgLIoUGCZ49bAgQhb;vi2(%*0m z7|7v7oc@)A;%|r&o+93TOEz)sO|{g`Mpv=w7xtPlhioXNfbR9pYeT`dP{=iNWKU%S zbdC55^F{Gaxu`FZ14yd>0Q1RyYI{wen%vwWkh3#<+WrzD5RPl(W0u4?y#(vw0Y5k82R9C914jib9!#*@VIoz;$5;v7D3kw zPBv^t3TNso+Tif)3a8Hji+^=%C&VK`v5lix5_^RlMx&?H){)mkIVZi(Ah@?>V;aTA zK4v`!(zvZ+2;w&hAKuB%*6*72txi~_k<6C+i)RX>YJpyH;%za_)Y99<9#13Y$oy(5 zQrV+Q6)kkx$TU!f#D_RN3CR`Fcz#Q5(Ztcd&Nk#^{Y_9?Sz2Np)Hkx$rju@qv<70` z&OeoRU|yk$vx(?F5Jyl9aK$=<@~(5w<6fVl+LwwM6wM5{IarPdST2TkC^aekh#9rL(FRArBl5K9mxC?c>M@ypzkfjZhK~ zB({Bc;8&aK){{#%V|F`F%vkU%);whhnn@&UW{;fYarD5h9`eG{S7^grZpkGaV<+6# zpO|Wq?%*W34mE9MmgC7P7ir@;{P?R;td`O4m7;8%ah%q>TQnzYLmGwQn7?XEdvWF$ zMvb=)0uhhayk_Nl9sH^EG9{KFx)CvER_6qhpK3M*f05-@bIWe&^{oYkOpW%1MJj$) zMIAlplGP5J_4_(0Koo_mr{%j4W1$yJ_Q!av^XpUIW zvoPahAC&zK5a@U6-#Q^uc*^Adm85DkXDVszdl&4~#q=#znTPy+CNciydSriaSBU&0 z@nxTbtnO_!TX~J8%)#372+N2_82Q((-*MB@y`M+EvedNr?{xd9Zf&L;qnZ~Cjy;I4 zW`xw>tax~;QjJHZh2P;HN+}eBf$d9LoTDYI&lHe+GpI8jmXd$yCbZ-r@O>*A#f_f~ zYFPgOpE-Z@6G2e;(ef|G`BYl?iwBj1PCu&GqIf>uWAUFvxLDl5{{RS!sgr5i8*-dy zrhTiB@jPocinWNPg=UTIElWm5cL5OXUcsY7HLr#3ZXvkaw$%<5RI0AtnCpywG~w|c zg=twM$n|5N*AN%B2XKO8`rqh8K3OMLLAzIcxDzJ_a zEur4SjD_p?n($RS9{Z~L8D1awRcMMNxVve6LgF?502=GGKMH8NSS4238>w=e*nTFk z?zQbk@RExRDt+?bg;$eN(xH!btE%C#%CR{=fTNKuh0fmkoz&Xai>9Dezw;y=6$f9y zR&@R^yt!h!eT0s`-*w0HuRYW}f8pzC40aZebj#70Y+U_MHI;eey?;~>6`UVu$3}rS zHa@jH@hMV!+Q*@58qTLAOp@FiecrMU>s&Uos#{yg#jj+%k&h-kkUpoSRnh!2uIo1~ zbE#gm3)$w&K0crRs_e9n4R|j}jb*=CwHIDbn(pxhu#d*VISLi&Bmc8Qi^=I$^1D#ofCME zN6{nlJU^ma+YEC$;aHB@Boco*;9FL^lH)8L_jP#>8LB#i&n$VCe=#$UDmcULnYT+JEPBK`e@f@|KNC+R##b^*-2;{AeKY)t7FeW4Y_Qpe-{n$2@U&f@k*&8DA z=xriGtJu5nKLJ@r~0mwsJwi=kTj`F~+U?$=g2QfNG;B zaFkWHFD=y4Faad_j~PRfD`QHtX_yIO+PKdRnu0WmBU19Pjfjrxo03cj(cEo?qT}+CE>%*PLjXww#@r$sFL1%DTNi?8yjWwHS3* zY~$X&h-$8Qb)oMalV4nor6Fd>195CG<#j6?MiG6M`$M z*C)A^PSlAMo(TyT~;%nz1Q-uHytLHi1%<1NXn8v8|^YMUV(E^v=+md z%LP8i^{cniIFXA+ts4E(Mc;r{>^>7Q@VH7M?*UL;SuBq#f>hm}8GDV{oY zkHPx9jDA$Hn4ApbSXwv6 zKZu%5ui35qO>s59cOoM;=Z`>EtGm+g>=m_9osFf z5eDwPGyQAfU)lV+d_si?&gk17{=cPtzwqBv8jptIc3{(64<=7uIurF3(H&9dR$ldv zh2IWGy%ijp^Bd(oO%z#}nOAy_kp$RD*`)w{&DW)5-fPh-w$fPt0JFgTD?VK+S+@TG zt!yuDDtlWbwQPNj{LEm683w*`Ra)qMENI5tkrz`?+rpdoD3h_pN3_1>axR4WevPGDe9LIp3_7&u zkF25963S=&R=wpS?*0XLk8=HqMCCa9HC_K00+Ou!2Y@mmSEjPEX<4lHoi5Ja| z6^pj_87K3o_OALGDltgXN4H*Nfv^wX^KgIq^;T=!HIbGW-GMnQPToHbO;)Y($3!Tf5HO(drtxvgs&OBj+nVgCl18k5fsW(((nqAsmm3QroMe!5 zfn8>k;rN~{)6CA_-eJoAJ!(tcCIg6rw2^1#5vU439`&)!&8?C-fnypC#^eA8-jQ+o zih|D)-3_lKil^meTm$s3#uzk+qGXW}Mx!LK;Qn>Rc&o-1u*z+;XciR*=9s28f4VAe zhaPENGecILZ6n`y(l8w(k2y7g{i`j-!!t&)#5*2XRRz^Aq^23=v;AB(sf(_*z|miRU3P&@NliQNa?#cr=`5VXlbUy zF(c+~F-6DAV`d~WDu%pO^#O5K7Dcv^BlEHd&Q*?UCM%@3?xnkyJ%1Xsw@Md#+x6;I zvMZ)8DIBwlX0_GVK4BZ195Z@*)&{Al$M%vNGY;VJ0Q@S$Y7MaLj|=bo>mOLZUnPWA z>okPprau}dI~7Wp>7}x`Z{5QumSTlrL4B#Cf)4(g#!vd5nSE7Uq>bbvpbxX z0Bujkx4b`iOjwp^{LJuCPAh5^buOhgk=N;J!VtU2Y;pr|D`E%xC9eMfy_15({{Twm zEYZsuWSwLg$=bwzm9=dptf6@aZ$Ma#SFcKZ$nq;wwx-mR+L*@ma(LWvjMY2mfxmMR zRc0J0;{uw~Bv^7=u6b;ORPVJUxQ+MQMpyg9b**l5MhwUCOicrAS@#pr1s~G6O-@U5 z8h``N4q3Wlwl%w$o;LE8V|;De8>hW;`jD0tSMy1BJvQWH+}D$go0f?8@N{`&sMVfX zWMyEg7pakm2kFI6YSPA}i*=J3+Ej-ARaRAz?R=!+n0(9zL8>s?G&f4}J`fX-jDL}@ zB64SXMwB;p(kT*cW)0Nm^yZuUk#o4RHV54e)9|X&9W%<>rBH*OL0o<{n{^~MvhPwQ z3^EUxdgs=%=93Fp*84;SnLv>?^&$BDjXpU`z|9WkC#N_yn74~0A&;1XLx4DHwP$TS zd$N90!h!tp+NvbUT;0)kyliFMffploIjiN%uRnD6>sVIvGU6sIy!^$w8q$Q7P^#e9 zOdf|VNW1E2*vM8!$>0u(Fn=7=yvPFJus{zXmlc~e$CTKSPs%#e9_|)g76T`o@ms~1 zxRiBGDd5x-Sn&1pXp+SPql3dlZMR7SbB9gM~Zw* zNphvcz;2aNMOkI?ros#m z3F5Q%vgU1?`xu7uc8%Z;jomPcjj(hf_KNw=bo58jD7C4W@W}+(l+1lM9OLOukQVvA z{(p>$*Sdz@Cd=JJr=Q)e9a==wkgAJWXOKgG@HFwg&&1Mc_>FP z+Quh`95GUu{Cn1g&Z%S}0dbSjN`FyU*Vm*-Ps*#x3|z%U5wYFP~K}Q=ae5aAHdYQmXUdK z-g?}uNW+mL>_3J&(&v|P@<*_j8nk9$k1~dChDQFqss2^cgDthsnh4}ME1#hTo2Phk zAf<~e&D=4?TQ+gSZRNXwr1W8r%N2{N`WkXr&wsnVSxf{TLmkIH)niPTPnKQEvaG6q z);G~BDyO*7tP!LjTf2Sis1hM_3Lv@(M(dI zC>58LImhEy7&i4rZfP$t@c#gW(cne7l%%-(>YGk|4Rkg-9loC;`Hvi)u1`Es z65q>f=G^0!JQ3}h%JCkfXQA7)lV89$9DLal~)y$)^Iop%a-H9QM7)0^7Kg8eR zTSP* zIr)#&)8pPp7+EaoCp>_cYn;7Ed-yi6oQwBL|AT9o4tV z6Gl~=sLvzoS#a9J6y{jZmmwJBbgK6EDfZTl$(RH4vNizvn$b*`Ow!aYVU9LXq$%ZC zpOn=&Khp3_3O4=LQ;hr8g6bBgKQDUp=*!#dP~BbIM+x#msq38Mcd(|PFe}AuWNKEL zhuwu4Ir)n>KZPZXS5}Q4(D@%jo@(SbcO7IQoz7J@^d9wjtnRL1Ss_@}vC)ru)|_ng z8rin!6k98J1x5OcQ}V_e<6mZ=6ynbo&tnl|I~t-E!3 z<5iwfGlP)nCnG=3y(%@dvp8!}Tdj?qKT*@;w^(+vcR61E{sU8Zlu(LP=d&+L@~g_nvq4=IcT2Urg-2o2V~l=P3taCE zu87@=tKo$@W_FV+3_e-oc|6q{i#BOKM2&`WNIcgBrK!?0QCR1;F%LF1&n#3oAEj2a zxQ-~+-Qo_aI3!e(O(b_fO$#b#gy+m!>cLB(~4z`Z5U-i8-T!#tPV%xTce&vqXH!;(5vN- zB;yrJRFV&~v`mty!RmAQRBb<(Czk3_mAKDLR2r1Z(ST))^T#JStGs~X{86EhzSVBZB)5=B86Ai@ z71@WAgwrsq8>87-CER#kzLZr9PZVgE7O`AC=Eju+mCxNIXB1bl?IGOb_H6c;^lN)} z4<>g3#!t0n_=57z+B5!;sgK}nar6SHc+*F6PHMHCIuN zIPHGW5E2t1Pu={h7be-$%1LvoMC?o`Sa)pW@y#|H%WJ6E68pwW75Ufm^{lI_bhxpC z=0<(Z$yGRC%AFhvvLKC~JjVqJ=s%b6?Sw%5%#tQRV8efKWnPvM$}6A2I+IMO^RxFV3|z3C;DY$ucJ5aCYQYJjE2@wpeCWfDEX>l0pkN zzZ?phO9^fpA_C68^3l$JAzHVQ#|8o-^W5@(I&4xDjK~1o0PC8~$+=k3Lh9vRKS8u% z=3Gi-lhB?A;o73{1UglUnH|w)BWf@kzadGgJIi4##hG0`=~6~3n&wa@m6}HYgo52!5qCHlW7nTb(_k*%Y6LS|2lIwLVFR0vex*CCaomKOK8mjxE&l-4t5U@gh;E5nfsBroiS~zw#DXY7#;5`Ldz0%xn>rS- zNmLcL@>@Kj%aDG#=~Sn{3``xTnv68g=nVd6`{2T$=v~uN1 znZpkR5;zre zOSzWr##WO9Vc;mm7rA`8k7;1BW^0B?Q+CiWd8bS)r;l<;BwTbOa*yz;x_&Nhh?zqL zT#D4QR0`)}o;%SAU81>t(>)euW>}|29pnJ?t!2EQO|?lTPu-OS0NG>y6!>C@NE}3& zC!Q&najf@Ii3bO+Kb3b=_jN}spEF69mi_N6{K%18kGa2-`qevIM~Rx|;yEL8_eM?) zO>4DgSb{F!Tys_~3r3_XwlR;qYin~Wy~y}qD%g$`ovmHvnn@$=&fT?E;skQCG`R{s z@A#2bVY{9?fT<$|Vsg1Stt*Lyvoun}6R5^FE=c3nwv3l9#7dl@C#j38UMkM3mJGw? zz~I(KsjEh;s_Ml^;fnBUcUT)NQNcU1Mo%@&-o%o$WyVRtHN!uCZs&D9B8cRRhz|6Ef^yF!=*ylb}PcsUE7D4 z?QP#F9)he90F9JLK_jRD)^+0*;y>O00J?pu6`B4}c_ebjtxDX7xuFbp=`$B%;1Tl- zkHW7;*5?Y75dMNp8pmlETaR|+nua-Bcq9zu*3mMPH&}$aF_~StUQRRgrd||AlMX&o zKJcvFE!q6WCzWH5PL(rG?I{Egm;z07Y|+foCBTsG2m>xUWM?9)-xBunJH_*D<0HSd zSb5Nkg8oyB)HG3#0)ZeY(oe8D2N8@_0Xkz?9bwy^3&N2x@wa>2524|>U4 zsi24VXZW$rQYD%<(M2~1GR!l>VDafxp=iKlUJ2mjb54%pN0K1eIeou|DXgGe1_K|x jAIi3dJA17)Gr6zXlg!*}KW{wmA%IjAlob#V5fKrTUOK|_Hi9eyDgXr)1%Qf* zf{KQQ3d8_mV4$O85aQrsfk+5RNl6HaiOH!LXvit(DT#?`*=gw+nOIm^$Y?mYIheT_ zm|2+r2|+|dL&E@K5MW>sFq0FLGygxg=Me-vAYwTZH!>m}0umk~G9Kdd7y<WOb~U7Rvdo3iArXg@8Sug~e8bSKX3XF))4rd48DmAbh{m z7BMEBhY*i9hQeJ>Wq(ynzbKRsgvXU}H z`Jc=>IKI-$Ndh7sEi_z_sK%+BV_KO?-+C3@`d!2;Wgr;JT@8v&exCv3TGmY~S~~u6 zv41SqkIQzE!uR3KC(yU8%!MDs`)U{&0!ihTE{43wt3=>8s>hd&AGRy!IM?E=M>r=Y zWzHx@1fjA3BCu$qK}aaODU1_{8?NpIZo!MU}Zmx7-&$o^cd-hQM@ z+=#~rzY+|Bf?8&HDIgH6rgy{EImJ=b2DP5$B=O2N>n&St5N9%%tg6?B)m$f_=MT)PPIV&L|P=B34hRW5$~H2vPA%qNpN`Sb8eD%UrofQb&Np5F2(!yuD}v@*b@p zuk-G99fcC|ER2h1&& zKh=yIlAX0ELwEr&IjdJgh~*_lL~uo`pA7zn9G5sv${Facg#3umO#0)~AkrWhdr~)t zs$1`T&}*TE5VO2iox-*4Nz}hT9@GXAg$4Y#JDgsw94JX(gYnGWEU~h_hu=Cg zEn}@dZ+C)?4;66QQL~YOKyEC$5g=HrjsZZy?&Q|cTbub4yDnR!*z=XOJWrJ8rl)Ag zZfYaNm;!E;+zhbDiy}Yor%f42-TBs0A2@lK-+Uc29|KVsgajGYt zL9eXurtcArliWJOz0xyKCF{X)J`t^cYUNb{Q3V73-L=xlKt;t`Qo&M&IFjtGY0sZX zDiEvUrVKOwz`u=r)qJSk!S4rV`#x6Q8h>Q0eScmU{UqjBSY(^fJ-g(2x0-$J8`#jM z>u$Vh-${suq!3XLM|}#eg<3Cd2)zCr6Xdlvw#E}J2u?+euX|Ai8e$74l`yhi*JoF2 zuy!bEcI!r|FeJyIR3X!Nja#*FF6|e3d{z0I>((M`-qEb?(Z|K#&#)@MUCftnR?NNY z_~gQyZ@p)eud*la23!m)E?Lg=mzV_PxHbvCsPmc<`Q{AHUXF=R&DI5$K-sNcy{aRx zr`?JFTH`Bf>|@{l*$RifI)^nHRwOt!e{}co2b?Y0@=@Q<^5hR!-iK}x0o&CtcY!^> zQdApf%@({ri=PiBd6?a0OedMY4P~~@WVhC{`eJV$%37pr&TW9`?rW-k zJ!kKd^7qt46A>|5s1eZ^$&C!rFR*6JhQ_&%cdk?pWie!+#)mKKvHJuRP*Ut~S{et} z3^d*rrhRZUGc#>=dEF7S%b&lu#lrY5l7fe#u+3$*(a35=+xlH1dLw7gzB2JhWe-Ku zl?GGh4{FPzFl+RW0$7NoDka6Rcg^og!p&=}P6TEQZPYDojD6lFKC=5c+vAhzv)4-} zC5)X}eMVVp&*LhSw>*_#%AY^j{~W2#!+8BuXZ))+e{NopLQqj*yW4ng$PVw7GCE@T zN|E$1oC7N0@j1rZ^J%i`=KkBIlIRgQVuV3Q8W8~%0feT?GVS2fuywq6@zcCY;-@i$ z55^FCp_pm&@M&{rV6NWb%R{f*r;|TI`5(FhL`nGY_UxXY=*ddb?k<=cO5$QXsI4+Z7v>vgVhAJP&B=+l{2BX zU49604PV$63hL>Wpt?PGE30(OwLT8a>njv}1RQFZ-1T$OEbmHS9ZEK@d+4_>iqxsL zAAVG*H9EfSXSa|tliLeSQ5{(bGawS0*_2T&@%fln!h4##lYe>t*-#RhGhRBgvt`pI zR50853@o3?ZtUUEYM*~=E*1d)aJO&lb0#WjSr+(Xg{V{L>&aQG?~Kc5jX$!z!FkN~WRQ?FFcZER!?`{h%R~`bl-}^e<{uudF z7E(J*$91*FF}2sn zk~~WmZ{d)3~la9+jVp+H@UFRMy z4KzyCf;+t1>ThaHcjxAPTPw~(Qr>h@r?Gryfgmsk4ho%h-FEhViVJWpDaU zvF<|U!!`HUVS!9cN99(IPl0~^KE8K{ZHwoIe2xNjfsIuQ7u81jom7a<_3){B+cbw8 z30ySdhhUMRtGi=7_yX77pN}6-!y1oDze(Pjwu}^JiI&x5;ZeslXcO06jGF6gIJe|h zGYD*jcXQ$2wbbLVO9wL6301UGvDETcx8H8tcOJX%-+n4|DR1Uz)lfJ0D${W7oLP&X zH~MM!n!(`oHb{^7w7TM*j><`mLxPXfI!6YT!~2f@mf73TtQcQ_B z(%-Xp@M02^n7qsB)FMV~I5sYvT8>chP}f)J74*>iZE#32U?jq8u%2tva?nd`ZsIDM zgn#mgqN~?ZYx)u|t0ahzTN^nT%e&n&?G{W}dkU$Jg&No~E#xmy8nTSODX%WNnmZg- zZ~9@f#pkx3JXUrcTZEFGM0LYFDgb6>qMJ6R8P>I#Cz)jC^_habDm{K4yYzsMxjt7H zDR(?wzRo#bDZIF80$^rmY+z@yo7*3$0+4DJ?9tCz(u(AG74{iDHfdXw-#1Su2q*3Yz=B>n+y?~VJ9g7~QqF}Lvdh&$`nW13=Xw&Xks9LO5vgZ< zE2$+s+JbzJQrpvMjA}W*%m*x+>u#PA#$G;#sa64cGF(PdzbwnFt@!mD5v-1z8XrF+ zguhI^<_f$PQxGA{1{Hd{QX$aokeM3FRM96eumM()qM{vTqJuPeT?1rADE zm`jHC$8L3;_NanB>#@U$`!2sZT zjr@T>=d*6>v8C$Ew10M%{;~)SC`08Sn#(%*c;hKgXf>ah?&ZLTisd=ms=6LJ$ol9J z^;+nRZOS}!;m_ePb@?-b;2@0CRbB1Q*#;xs;L+(vse}x@l$L){Gv~aJNx>kq!HP*| z-W?GP?DtFRmrP$!+SA3Z9LJb0A!$wPiUe<>XFR>y0P(dlp-LQ6IMq zo)LD%@h&uPYai(3Q)wY{Jmcvf8F>wdlhOUpdluS%#MW1|he?WfJ$X&skZ1?H&NamT zV0c)2O8o*%jU!ZGT(KoIf$;ps|GGl(HOnY|%hd3;^>8=oh;!iJR$*rGLiN^744df?!u0qDo@(EgPE6rW2EkTJFYGL;la{}CpdTs&z% z@u@{0~GxeaqL|yjuNfAzUA?Ki=EhM+oa*VH|_9nKg z;(<`vH_Lk?W=h=CMTLuvM$jGHm#UUO)}Fi9 zUDbU4HgQA0Dns;{FeLsgMlYq zgOs2aJe;cExhbqyJ?D9f5lH{!b%f45nz{zRe-r$@Z|Vmgp84jr;=q&~$KR8(*;}`S ziqflC%!C6NXWEtF^0w(G-A3e}hk=+~GDOEib$xL;1pk%DwNM=t^FB(Ox|B#xC$NWB z@nwnRR>9H$d~5d<`*R7!T#6@@ZJ;y73|Ce6O@-E`*0$E~c`^5dTLDSSqE~-;p7g>% zf61kyV>FldD*tEo%%j+gVN#1xr^^y@ax$$%haXYdp*G*2<_&Y+>}eCCAg@U9nNqcM zj`NCZR?vmEi^1}ozSdvWe*7GDqF4>J(^!Zo(oU2MpnnKz&mdSAYcD9yBMzybn^ZtOw`d+Wh?dzM+XaQ&LA41Hc+@LW9i*B@N0 z3aC0HB;#x|=@3n&99>Q3T$BXYp0%r=`KcE;WkNhtRR&1;?#6vGu3=1e9u9|r{S>e~ zoiKkjxDEXZed}?}s`Uk(T)47bqE}em%IScU{zY=Xg6`_NoPeKvz2j|hm|$$XuTkxa z!~H?R@hG&u;mdi=cYBH$LHo@aX1`L=IiEBh_tF_w5dqQy6qdpYIo4Y#IES332@?EG z>EFv73OwSM;4XE1LG!EhNXG0;Qcnk;+v+jVhinv=I1Z17aaCB(_aIb~MgQ>QkD8;M z7`|ZMudvlP*3o+KjG8Lr3X%dK3Uxt7wtPW7&ucW&g*$ZOp)~0Y8Hc_g>!QQu7W;G> zl z^vj6^{zh#g>F1>s+7}Sfu`lEJYt1a{zHRcNp7H70tiGEPq7uYG>~}d$H9Jdlacbo- ziuL$yy(|M5={7Fqndx9q3^ z!Nt4oTgD_N?|~D(TfOC59;%08!nQas^T$=HwnK2le@+J--x_5^|#V zm@@7qN`=LKo2>b38Xjh?4)%FbT03?!;cDR*R=Xk;G4x&%ua34Ms&zdjykxZ3^j^J? znd%}s1zvX&@SYLqApu6+&Qe48L*Mt9ys4HNw+5qME~sv9v(2XpDJX38GoPV76eZHWVN-fpY2Y>LPS8>-ZZ6zVaZwUGd&v-EPM`Kj?4h4r3 z@f?)-yh*!3_%V<9Q@}#hYozZQhb#UpspfB#byD4O0eQq)XTG#6PHF$wSc+=}UP1kB^ zysGe>IT37|OEopM1vI*HdIn*42cz)>51XW%sX5R2sT~oAo$J+>nry*%y4d1aStQw0 z=k<}ylgsb+ktJP*f!yA55JnH7xT8RZsn_8-47$iCbR;@L;8sSp<^lcSy2P5eIS+I=-omBNjdp?kVkQ45zzgVh)`)D}zRs{<&FE%^i z+X#%ED83*jIyYOV`)OEQUTg+KYz;a+(viJ+OGP(j93MS}5QbW&$u=XajS&ML*h;Rn z{FSy$98rV_xm{I+-?YRSbg3)7#Sy7`JJTqOKZ@EdnPbYEm#@&~$gg+kyIT&qD8yX> zYqQozq<{>T#+zuK!vIl43Wr8>j3zKm8K>6pIhD!)m9fj2X5V7;!2P;wraLoz+BDmo z?IGf2jQg4#HG-VBFX790DkOHkuy`}S+xVKZ->rU5;dLIb8f-8vO$ftS@?;HBfrn=S zb%nV=E>2=B5D(T%2PU4RR_FKFs<5O#aWnp{nC4YbZl~NUH-Q>MhG!}_8QzDXW+T@P za`T!_WZq1hX3xuEn!48>dQ@yspZu_|v>>>Ur`ezo^$XoklOQdB=)kW zRM{Qa5>AI0h7#&&{m#;NHyI4hG7#kvX_@_IZj|XGlF4YX(C%?cm8E)N+C8aoX4xF7 z;g$c1kI6xb;M^zi*z&9^q2`Wvyf@#zRv6un;qlC~(h8t|R%$*R_OW}|d%(*p^f8*<^6j>)OgWF~?*6YX)DB$~uMabw+glfv$qv3p*u z>_^@bQeKYqu&I^Fu%5f3D?V|PC~sUc|vW^7}Bm8FXD8^kYc&=S)q>R3R9`V^u66(5b;N$31ueu6LFT%^b#GK{yj&7#+=Lw ztr4{*y{!J^wYhnA$K`~=Vn-K;7#~%${+hO@iNAxmCDApH`{sB32;jkZr!&de<#?w7 zk7pP%@h9))y}xLNiWS2*{(iak6~nula!G09aq7G#YI*(2Ol3=Fxyt8-n@=$})HSdq z-X|*k(82<`CTV~+{=|4{P1aZagUdn=((Dzkt-WW22D}=^S{;pYlb}hr=`|iZCP7%w zw2-OHHt(PJTXVB?%C)7$l`Xt-W6Eh%hAgXT zv1f#ctu0=uS=N6($pw1h&`=Rj0Ehr2R0K=E%<&d1!HIYPQ@r&dU?M5zE)@UV9ks!t- zNK*bp!B6;Yp0X;6Ei6bW2ED>%TBus{E=U<{v6G z>xZ+g#+zmhfA_Z1=CqjVtRY63_;-~ZPgSAb%!OfgllTYSpo*yNe@8)SD!H;sPBG+h z-aqC0m7uv=r#e+UI0E>`mkB{Ibp8y%3MH@VEct({@csCsQxS(#y2QvLN-8}Rh| z2Yk2OkUx){FG#M3MSd^lTN8KZn0)v@EzEr&f1&{{hyh0ej5A(4fc7hfe7HBmk_s0Z zZkzm30@9IcX}SdtjZ?xjG0N0`=5zRM=)1s|ma9}ga6yb%{w=!~4lU(^$XMdM$XDFk z{~6l{Lk|&NRW`^}WPYNQavgLefrFWoI81R9T_AVdV}9vxafm~cE0>i-lPMp#<+8}Xyf;_oWNp;YOa_`)db&zpk3P@|q4E6%&w z7hePi$55fpmMKIx;4no-zMYUg`?Qs{`XkcC?R2RJ8{d)yra-NJC0vMu7U!Y%8Ye~@ zUWUu0N5;yF>ruZrQ_b&1g-O;B`i zr*L7iIizp^<5BO<>%pcq>A*xpy{;BC1^0bRKxw`25adW$?T?5DTS0C>Xcfq_*H7@Fo%!j6Ry%Q(5 zlBkrcgTmE$R4yGC8g<_F>C)FcbzFj$_H*79UwvjT+`9$pZPhDkxKI9Ueca?}J{tA^ z_7YcEUkY;n+CO6c<^5k|LBs=tc%-#yt-W9+;oQxyz7H>H?O*>-NI{eW7oi*rVD2e- zP31eF7g+rYASMT};Ps^{L(-lR@Iy8saG^+`(0J1)?4+z~&Y0%K9LRxZA51jW)`UF5 z?2)2pq`E0i0yi-%<9_g3X%lfjKPj#xHjjTHEmr6{tQ4Fg+m2!#_>6Er*A&BajMSx# zp5JK4I%}?|3rHWq2CKVipp_R#r<%=W_4rM(f z0B;;^J9b!zy!YtwFn;4u4N4J+4=_**QrZ1W#hW9->lp*mWg;Cz!xp$JSnejbo-5Ryu{jc*cy|q2snt=qQt4>Z`=ZjdxTt?F}{&`uwz^oM*hk} zg*Fo19X{wG=-x*!_7=^JxGKlnQywn{s%ZDQ%prAMm^9hQWT+Q&s6#=7m~=qaAWnk2 zur%+?EQ*QUH%1=W5o@Eh`za+kH|Cncv%vOI`9_ali=USVV8b_fC>(VFaRr{@ieqvZ zBadv4>_YH~g(rpg{)yV*dNcy3}p{BH51CiqM&8{sD+x@cQ(G#D0v%}y&y1{n*kde8yAy(@EL*5 zVodQ&nOT{iA$BMVUi{mdG9OowPCJ?Rdcp_PtX%?Br2u~~1aNG`_|8Bo$4c=6;xN#E zQ6>O=g6Ni?2uBK%O;>$zG(UW1$D@N?NJmzoE_B%>$E#&27{)(q$>rWUkzA zeXcRXFit5cRHQM>@@boyS|ih(U>bRl;#HZEXah!x@X6*(LZU07}hX zEH3iQ;ACbS%DJ9=Mp#2POE{9IHNJj}ewP=bUTOzsqxq3*-ADtoO%#_1Xp@0f8y!;K zzv@icqD_LnDA||Xe>;bPs#DWwv-g-hSRD=>l&xfcJOR=szV!)P6?-w~CMXRgq zl^RIBGog(D(mo+kJ&@ZuKB^eJfy>xNDjiPhhC8iUg@Z9=L>5R-Y5Gh+QE@bNf6%@% zy2tv<(`5@0u`-Ako0Vo2A7X77xsHCP`686pWP$eh9iTvaiU+(OqXcsb*d!AKCMidjVkFsidPIC1YmT6cLt_S z>g649e1*dUI4g1XVSvS0AMLv3(tF08x!5;(&4(1I%)bp~QPee{+T*biJRhk0Xai0Q zh>0T5Wn{@F$nK#mKlh>{GFtD7s+Vp=ed%EuOP7DZ3X=|F#H4Pyg171$kronvh1@_G zmZl{(e8{`x!q;#4%U$q4q$?=3@DQ}{r>1P?5(AnWoBl*c9dCo*v>ut_qEc~ejy3{q8p4NaCf9& zVpO;8^_qrg5HF@s%38pOB)E&cLPt$9F)Xtv(2%I^{D*KKR$|&%#I}z#c zvV7AZjV7E}pZe-)YCpD%xy?5sGJU50+&xJd|4pmn7N9)IsO}yv#G>dZhGUCKa-d7D z&clPLuM$cZg_&UGbZ{}oHAuJ6R-N?0Y6#SrdA}jRcQ$tosyLDZxl&! zZ7}GoJ@!-VhKnGsR}wmP2(Mi(XgpKGF_DMQut2-qWO&aAdoTND9LR|-BZqA}==|8q z{3?Pb3)u4auqvL+1+P=pMw1=0_%rb}$|3r_w*(~(HD%JzspJI*0Zg?PuJFpSu`yC> zF^HP&(DjZAJuaE>fHDO5bCv_k{nZb}sa?D?%KDNO6?8fX1^GQY_s9K|G^Hn)hYW9;ZD8NDQ&^_WlI3iz^vGbH}^B3e;l=tcMD3C{=!7;G-W z7Z3cFUShIgrIgsN(>yF>NeIq+6Y^6ZBco*B&=(rlq4=>o6Mq2o!dOg5y7E$*@%W*b z<$vuq3Ia1b1C-6Q&C2(O#_C7!_tXo zE(A6ks}cp9B+?Sl$I0usv)H4>vMPY*ZyW;n=jvyKS%t6Y{H~W8GxAAB&hPlEHtB0t zjcOprAp|33ByCI~I34i!)9h;hq(STf7Wim^D3ry&V z(R<{>vJ7Yw<5T`ocrpUV(BY*aCo?osg*d`J^-@meZ$1?3rUT3e)iB3!GmV4Ri;zqQFxeSgK zVFkBAW@JRU+pdK*+2M;vw5rkKlk^R8YKACs{Ob74LNaGg5a|{PY)@@E9c<90bdIO# zl(EB4-;%(>)svGGkii^p)CG!{o zOT1sn5jlXg9gb$GMeNWAxQ11ORx(jM=EmoDE=L=`G+{?i@7*@4w1+=WpMh)KEHVcznIvQ1FSOXL3p)2mmQ(?72pHqYb72qZ!e56nSTTWX-bbZP=XARppGk&bT#O z6y!Hq^VsV#H59zdP=7MlDM5n4#M9R*Mrmqc(vVpadXdFEzfy_9akOswjg;u3Xcqd< zqxb?WGou?ngD!(~Xv&o~UVe3&MR>ol1gNv6s zxVf_EG~FD_kdB(xOK(+uu6f;T`ZKkgi8h-MN)vrcQ?eah_b>ARg;k@B5HRYM)VHH!#X{Bg)Wk%EurT;x`U$99kDKrO*ajqibN+J zIR)Nim7@T0Lcb)#wuZbHgtl+8ZnU#z3t z2HtjaZg2TR1vQg3>!hbxTG2$JLPLx`8|QQTtahL5obBUPf3#~inFhf-aZNC zzp$I@vAJ(qPYp_CtO6j0rmQC*l&=IqJVG?W}+AO>sK~@)97}WN@xzY9V0MXe264(Oj0qMYqn7x9n+@W3GIkT(yqN>zgGGr2 z*h-XfV|~RW7XOq-p9`wvZ73^5F9m~57(M}A+UO+qM&iO}%j9XSJC$Mnky`zz-LbUb zl=bMLjM4EdIH5rluY@P>YuTJ^`ZN+Hkd!gm)N9)S$ejSlhd_=s@-G@BK6nW=TFXqB z2%3S-V!JK{m(vesP!%D%k}AL5qEz2sqDaYOxo`q}7`GD(9c{YC2V~(k ze%>#Pt8F;#rNJ%s+{T|OH@B5k43xcz+GUetgQ32npwAG~XlS|_yJ{|hqKpkxG@O72sh9X9pBlR}~rx%?fwz(71k9;i? zPq4`=v;y0W45L$KPadY+;*WC&F4(ETKQfJD-|;Ow65wlngkrnOYHZ(AXCccK?nul1 z6frTr4QK6-(;N4dN@Q1b=DU(-nWRviGV+wUu!}t_Ol~jLC5eVxo!O@xQr$eEe zPc=&_VE2Y0H|=VDUovLcvkcq(729d_i!Xu!shQx+d1^W&wMUO1td%3DWtQ1yngS_p zlI52q)dVoRsZwUw5ZDln3VdLqmVcf05=w`GL?y~YHP^mCZvqdwssO#rs1oe6wmmmN z<@80##ptH*6cm!4PI}7v zErr99xini{3MTt#X-&;O3mT=Y`g011&v{13{>EHX*^>}ZUWrKZYvIo`LJ0SgVREu_MFtsT zQeVi*eBZ9u!{{@@4%X*@@r+wDHufUoR7@(VZ(;hnE~2iljn_A+HH-^bMs$B)X_)pA zR*5Lch}zF3H@}g5x+Q=d2>rQD^m#_0@Mu2PZX^T+(1f@bv3{=Xct%j^%d!`~^;r6C z%m3-yPO4@&bFk`-)9T5fc+6N?3I)lj6n_P?o!4eG>yO>W!m2wp-NTe0Q3==SU828; z*%Z)F2q${pNlj^`G6cU+pI#(24j~cDCG_oeouludok1AK1MG_X=<~Ql%Yqw8ez&6C7VqREBtGPL&EW9biK8%9{{ zfIMfNgRN~53Y>A8;wzWF@SQhDPosuJKcLeR8)uy=g$TBX0NL@8YsiAxuCyV6b+a1R zUa)EXRfL}!s1bVf7_Xm>YcoXjwHlYsCRc@3>y5nnA#V!c{PJpG`EPc;9kpE4%ighq zU2&Vr*S&vNOEKn-jASs9xp5Zfc&XprQ&Blm95^Bn^hgvB8{JvRot4cJbQHj*t@3aS zPmTsQnHLysbFpkDB0TfBZbm;J0ZUVps*9H+O%>}+o=3nl=5#thh&(KSfPFrB8wm@QPgyamk_DutuLVg+Ohi%t$>o)Ek~ z&iOO4^D(v+M1B%A<}N-}i`T5F*^&~eWy+SvN{cflp;KYLUcZH~5oE$hwXZE7K93}F zzY4tmi@+?4h5Hx#S6>LtyGN=1l$Q!84c?1a|6`qA+JA|YmkK8c%tI@!&21h2pR(pZ zE)R4!!xuF;9tKo^fO-4;E3JW=%uuFS8IV$JA&dNJ)Dw)y3&;>F6V%n@-u#vRY2j9C z&LD%-TS10^04M`0B)O>=TmFGs7of`xy_wC(HjvAtiX)dL!BhR39}K0fRt}ZgSC37U z7S9CIP_?!;`6 z<#19y_Ce`>^PN!i+2;^Oet8x-$)u8&d@e&=?2?q(gQVqe%qkPgS|j!Z%#Y%o3wskx zC3mk$KA!yulTiA8KcV0O21}t3`;4wk%m$e zj0_*1S$aY6>9x^H)78x15{?tFsA%)Fr=4xeLz@CT623vpBkeHd z9)2^U5~i4FZDts**qMUFEec*fi?@PSz8YPG47eOpLKA5%`-DACrWBwWlG4R%T}l;j zWLd&WtK<}2z0nvBA#mu{+6X2OL%WleigiZu+EXbhX_mDeWKhUwDJoIHFA*8(U?mH- zI<*Zjm|SXFmLqc!`cUT*J0-pNMVsdra!RRXgsvOBa}He_1ecM+BWKyK#6~@f%qPNr zjo!?!#)CpMw7zSnTJ}UZ{}vqx@hMe4@`WfsA9;b)Tg13F!=+Rh`{;)NU#V(?R6QBu zcoQXUK%1Hz@y1qibn!Cv1Vjeyh;^vxJ2yW+y^<*&5UR$Y{K(e z=P?BD+7WH%v*Kqg+lBw}?f-iA|2p^o@olgF`1U_O6||i~+duu6zidk?`Xu`XRAlo< zCwWAUNlD#1SKg|EWtd?NPla6KS0jY;J_2WAp?Sffe`72SWA9< zYKntLm8L|9BX&+h0><( zYXigS#V}@c4#%WVlsnGGAPlUWj5>w!Jjn8AtNupY1h#H%vUf^%b&$7&^3>FzA6#f9 zJUr-68~=6@yFZ$!G5nzuj;S3%r^b3lDDR{GGyVSK{!ponjbl-?iW)<@do$Ph7V}zo{|6OYu_2 zYw~`)Xd$_H7!zVk8KCp~n#&9o>qHL~Gcj(K|fk*;+T>DM-W^4u3P!cdAQ zazcIRNrQFNx;h>b3ADMSP7^)WR#wYC%AT4UuLV5pq1I#+Bpns9qCJpeDBsVbB82)a zQkf35FeQ$j<>3iZD#6 z7k_02{fB1yFW>Z^O#p}pc;FYZ$=VAP4lAK;9==}M|IYotTodSy;hy0h+>fWNrz*;D z&v?&pC^rb88^=r}EnZe7B+8f1UMkIT2M{yIY8XfCKnY2YY+0fq-?@e*(9bkwf$E|Lcx&tuJ@ISE=z5`&rgrf*JnPe>A@PNIVNQbdiE&c2hY6;U4Rsoi5s?G2wyKrh^bPLFNfwYtk{x|^ zg=^zYbLLo5A_Au_Iu4*zC@+3!r+*U(VP`@xqKKPQn>k%2jFkaDC7uDl^(miLg~9K7 z(ycWcj_p8eCh-P`_tGVH+;@i}E$7uQ*6|jObeXlIQ4ciUd>-{NA~qncS)cUl=mVYh zYycMSGXg+F3V`^+cZGc^ZhX-E%O4=$92qvuwKs-aXkFaXk)&!{eXbOkQc4YmMg&9? znS*J^cwTnMI~YDA#IYTe&Sr#5RH!Mk^K9AR&qfpO_|GO(uX%7lJRg!nDoAk{qOz@^ zz+*YqrO)2gyI>sZ3Q^2C1ghKBFWPHtp|4PHP5y?hCFeiUOyuOKNus`%`jAaJ%`G;J{x&FeI;c3L#iue1q-Ij_z5ngySe@C^$ zn>VX|5PQS=Zbh;~z061mG!KNHqKlsq@M_#RH;D1`WP;#F4rb*|_=xpzQ; zHex4M2A_t!$X(3Sc3#~yZI4m!SMxWJ@^FxzRC4i@dXFK9zxt@BwJAoLw*d05ZYSD| z(-I>Ej@58hDm5`Trfy4D>MkE>e;TMA)5@eJqcD9FyXpzu53h1K)(sjbl0U=JczalN z6M~u(5rWlvkL&sRJ~=GoaiSK)Zl#3oQjXIcl_f6M6S_%HHQnrQBj$^1vc^m# zB!G7&UUQ|^N|*rWm7Iy2D*$E&TKwa-k-zv>kbjgLq?Xx)~t0%vsk<)-wJ?}^f z0}^RxbTZMQRiM8l*c030ZB79hoE*B^NdxLF49}1O`Nx-jM}|3E|ldP4YWd5jEJ=Qlnn=%Sz0YD z)$Lgz@_Ai;i{lLY$>^F3?sJd3q6ql4x->9Y}OKJ#h;g2sNU@`l_8I6p+( z%&~&sG_LJ&(4oJ>UO=Aoq`Dz7&SEwh*AlUx>a+TNB>l03ycGRlq)+A*e?5xsr6=buIPZ@lbyumv}`ckk2tuGZ0#1tSWIZNQf>MIx{WQf zTPT)V5~@bYidYpRk1e~0Xb3E-at9%iunWhUxRmr0c`{Pipm!D58FII{;>9<6Z36Ib zDL0mcUgMc6Y}5;{QgT}9kJEdttWihB10{N3q2zb4(xOAW6S(JYGtP z!*GqAk z<8sUAMw*^j1*J#^6`I)~TkNgm=qFnb<8Lu=oESOAz9x^%^U)TO`;>+>-i)Qw6QPCW zJXGhVh3mycbD=ML%^3IRz^XeYKwJnhesT`Od;MX@Y(z-M7mz4jP|e{d*q{ zJR!t@h@=zZYgr#=Qe7YD0cGJ^ls|Yc|LPiSxcyk;p)Eh~W1XwKMs6DDi{H8FgQAFX zd?BxHGQXp%K}cEMA~m@eJ<F_Nxmbq1!CsKFmoU|JIrS-4!MsJObTL@u zN($R}Bh-Q05y%O7s-B5@-vpMQY#Ao`E{O19>4M@95U9)hm@Rrl{<2~_Lhc)7Ipz2m z8<-48Gw`pHz5(zv!Tb}H<2b{gQx9yZY+Vxnt7L z>RsR=l~N>G8kkkYY$ie37YA^1#L?~nBP%P3de780O0m?d!7A<4+(l4u>Sd{8Ol+)t z&+tSxgX#+9SGXL&xG9%t$)n~mPigH22$vIxS0Z0nmBlxRObd;)PN9}(giu5#U|UDX zAy+Yw_>LXTU~j~zae4TES_*~bhVO7#Ixc5TL5voxT@DG149b>4f{tT--9$j4>H&rf zh++e6MBVc<$%6-TDw?l`Tp@!SA*0VzCA>ooT-bojAV@fxSt#G?3V`Y%w3TRm&KmlH zn6z#{*Qi4%1BT1oZ?OTkY(pwytVXIY49ppoaWh0)a?01@Wa(mfndYUlkb%Ks-4^vL zQ%31(P(IQiJ4S93~Xi#mo@Gby&6GHPkU^ zXFbBJFk=Uaz*H1tmRTHnn&FsraOHf#VL6^o3%tQ@97`5fGrnL05dcN8r*fMrTZ9<8 zg-e45cQKFYaM0w!afn4BhzAG;6E@}MyvseP4Xz9gFdMLevjhqj^he|ozIXVPgI;&3 zgdi6#fN(I%vrxL~2g2Z76Mqu2u>SNlFYC>h+&Cf3HlNh^*YHItO_G9Ji0o4k;NNk$ z4tGpWmPR@F4Z4Pe4TYAqsZYTwRwWXl{HSg*UYKq5G=j`P&LRDBh;JVRAPJ}n!%+O0 zo;49N?pFtKXco+}>J&e5T#r(m@fy!4?PYb#n68@Ct<9pbFgb#S_c8}?(*6UJ24x$8 zi31V*B4ZPOGP{S55YoUz&>#>Rekoi=uHoC>Sz~0nwTX<%aLMIiix*O(bxa-(qOS7~ zxTL0TgB{_^GKoYBlu9Ka)!G`L@iP@rTr@!2nVI#JlpDmX4&u8wh{Y~Ar))CkP&>q2 zlM1W=y;P#OO=a9{E2xA4SuL2apM$%G3x~ZzJ<{(Krpb&f`1H}4*CM6QQOb5UX`XPHk z+!g9<#KYogmJ{I;CU|EMuu%frT*P&9@XEz=Q$Xa+A2O_N1yjrmRqg{^5~vgIcrz`) z>YypE=U<2vkk_(WMVzM-Gt4$h=>QE%%HnmX;aNo&xY7#=DzDTT__PF=O_1JYnZqe` z-;zT{Grhv3MyBu~y8Q?lq3IVkd=b9M3RYa{!t% zPp`rbia;*#$|%$_>k-`$HsiTVxaEz(DaJ@%5~tpJh#S96#aUx;$1zFl^_}k%r96-!3wja!gd~uFuq(|UtV05g- zI;)uKsi3QuGi4NWo4w9+l2g~izlxeOaZ~wA=$W42s4RB|#!>jeOgF3rki)55Hb+%* zvoa^REyl^<%=-j5I+`x!*^=O5HF$1h%@W^fvb%*0C>P>95N4)#38Lj(cE#P4X%lTD8mYiY+H%E1t?3dJhN78 z!-v7Nr^sT->F_Oj?i(fmfq9wz3Bnr(ga}62T$*`_Rf}bMO68eSMpPvuM0YtH#=>3; zD4`>!B01(P52e7yw=87|no_q6irXq!F>qQc6e%NmN~j7E+6FTLO71#+L-`R5rI+Uk zl-?asYub*z2uAG8<{`WQEL0es7pN5}y}&T8Gt zgA5w(B{N?_5n!$Qqf^tU}T&p+|2uiHEiQ#%Ad# zRw5jVh_>#9j0wG>hBz$6`G=Pss?-`pblpJAy5dxu8KY5}2~~)fDT3vVP{%DM0#GaL zKrreGqJG5X4JR}84}z^IRKez4)ldjzIh4{VsODD?cHE#bsgW--m@9?O2NQh3R-knQ9%UF}AS%gxOVVe>;vV3~xCM@7LM#_)6guTtR#aY!hq-bKl`5K`x!d>R z&(MIzq^$s9PjwcnY!3(LPYf?J$Q({akq;#IIHt|E%5Y8}T^GX;&uBM~WTB>^cs%ed|) zbBJ)G%o=^e51CaEOTGz%RWM=7pk4C{Fu)8WfgP-MixV*xFyb4Vgf}nDGi1Qe!A1M? z3VVhd#0{kLJpp@x-GmU+EPwkHSB5ffUEhel9HJ|8!IthGQlAtz^o9T&#^B(N+4_X$ z9kW}em*Q3`u*B<#g=E}zxQ>pagm%hJ$`VnjNOK-eXY`pjGAp@BFL29KML~~q3v&%8 zP~M5mBYbfxWgb%k;NoVO5ej`k5(gCyVaJ)4AbEez zFvsIDZdqmi5pjvsrc){%Ju;)xZpT(?Y=MXz%)JEV`14ERUE#R=9I>}I9m*|k%QLtd7CkH_0J_yKD%`X2@Zldy#n z8Amur{f#a)TFfimK@JV^8xsO0!<&goHGX5FZl(m%0aycYW?<*x(%zut;DYTjR}cY? zzw-hGzf<<+h!bcWwec&0ZV$*|{pK&jk(p1X7bYoiL9!GfZ{c{1+u+y7=+D)d{88Z| zp)V|dfcSW$^~pv0h1pZjF*S*2n3sMcYq;389Yb|miD4Mvm4i2ZL2D$h65J-j8VR7y z{xzk*s3?>$n*7eF4Fp==pl0e1Wm&z0dyF>$3Yk(8^)eCr`LDDD6HE!t5kymQM(j*Z z?L_k)%FD7_TaMyOsMd5NHi2`AL{Fr1)UxuY{nhY8dI7-3fqLKiS;@8OwW0 zbkuZ)%*c)6If0By)*l*6w8v5&W_kD^+(ja?&LS+!2)*JvNpU=WY!(i0QHBQ&>ZiB`{u= zEGbU3%5J9w!#`=07YA~s!vS5A*1_ghl%x^`ZH0_Np6Z}NA-YH=f%bor{V~pLS1;vE zS@>DHH{%1hhX!4P!Gn4c_aHxs z!~&{&PwY8!TwdXpcYy?PPo_B1gmJW$EjKpYw``@~F|oKk!OI;9W}KAqiR>LPBFoZZ z6u)s4igyAxa}Z_Eac5!<%O0R0=DCgmi-=lPd4ybs0}KQ<5ec54L5oZ4=45VSMHp9l zY68Pd5V!ETa+8Fp%DM=tYm)H_GLFUs+A29=3f#?_%++ncEtLSVNsVUX!7$Fop!6(* z4l^t2<=9GKoK#}5S;OG*@pl$DsGqO?M^FC%H8ful>NC*BD8~2?Co+%^Orf{5s#0&n z5ojZVS^9{gdLpe`>Qmty#%O!Xv4^0!{r6WU{3^Lx>0y3+Z8`|nb8t(CIE}6 zXIbwCQrQG_MN}=~P}-u@%P#mK8C5!ljUW_h(oC(-iI((|6=EIQ5nVAl!%M>$jD5HN z0Fye0n~^DqqE(j-z%`*Z4=&&*kW?3g`$MX@GMP>t%moiJf(MJ2#XSTf<-4?w7v#il ziZ6-J1Xr*txkWtsfZZ7|M%ja*Xt4sa!JG4QESHo%4<9b()AT>&{{WNJeTmh_B&x-1 zF%hk1ItSunvd?kK54b8EJxkj~^$r=Yl5)^`f`vES(`d{nc0;)jRVoM^;7g>3l(ojZCQIC=(}Gj=5ffxxMj{><*)Z`6t{?u zJh4{T6ezI25I32uMH83?F)5%6aUTlX+@ya9;wmLAg~ZAg9(I_Q70SDm$p+zZ0NOy? z?}8CQ2)ANYJD661;#}lIl3jATsj!2J`W$kl)dH0{ErVW{xQ&} z7aB3dr98pq&w@P{P&rI8NK&u*LXa!!St-8AC836L`HvELa7&>Hz_~?=zR1WB=|tQI zg|-xdm8+IF$X zdKuo4>`_>2})&v6?}5u;TvR}xxI=FwHuN18}yCLv`=-UwF1ej`#I)05%(qe`ZD3u)qYS5hJFkx3ph*b%Y#c?SJFI_^m!*<17&l;BfHj80f zK=Rl{0sM@>kCb;Rlm>xPqSz&xSr-QCW}h?Ld4|OA;gn77o zbCwM(Jv9J)R6yn~CDOp@5>ZvhiFyGKs=0dGq)LZ?<`_Ucv7H8Zj_>S_FDv1KfN9hq zn0+S5@~O3cVkQS{#po+g4<4})PzN2v&c4V7lD)v9Vayygq;MdnaRdg)kXeFT*9#!5 z4>534o*1~P!>CPlH_7Yb{v1opVV|M?Owz&voK9{$!<>gI2N>Fy3m5o^v-FtUon6PU z(E6Ej&IGMof>8z`kNLTBzyd8TC?86W!Cs6+QQ>UK3EIo71FDQ<#I%$#%Pz*6%8#+i)JLF1vzF^t8fs)+WcHSi`3j! zw{T3TRACo;wk4z3++x6oETE|OHhrQ|Ku!m7uBhM=yM=vAH*n#2bq8@W_duh#2SN`8 z%n1EKcWS}}5lX`4ZT!-d3*s*5LM$n$smi4|xn7qs3jJazUe9qQK`mn8$xBgc`e&tE zxF7@W7*j#S2Fp5(CY-|Zpg|ggP}3;%8DJK5aH70_P*pG`Pvnacgt%Chs3gkNUlW)K zu_8qaXnur;$65aXdW6iG6C_(^5n-+?{z_E_rYM=zbqm~6HFzcf2bB&7sMNFg!I<%8 zxVca)>STYw?lqA6LdPL>EDZs4z|yREmP*N~o(5WvWT%Ua%YNdB3dOOSi_PjbfcTC{ zOe^%9g441iQ1KICi_l9B80|o1A!-*{ z!5)LC*9&(EnyZvA_C*TV=2@|?C@95-qVVa5lvIkBN2pCRZ&68Xd9$+*I=sMeE#@+E zhAU()vY8>+F5GKc7F^K8#{m@Piix5)Ag+rcKqWzVo_7TU!fsV=nR|U0D-qC0t`@uk zo?J(4bq^Yz*D;_vL@ap45hBmrTGHap0Cf{)JcLO}q(Do)LMfF00I`(U)Ivb@0di_1 zC>~(;=UyR8z^b(9c!qoq!UC<9?SjbqjFwbIA66j50PavOI%tZ(x5TBTT&;}wjg$kn zV--$d*x~?7{3EMU6xJhR{vs@`<_Ij*6QVv@v3ZVN0K!?b)UAu^a>LBT30H^$nw^0# zfT7zkt8B8EyuhhoQP-!rxH>%P)(KFhabb z$1u#h%G7SlJVh{R^9{LIGOsv#WrSNu{^5~XG95=?s#Sv5Bohkr8FY!*og;9#VUY?% zb8Fi&CxRldgPDQ^_Z4iiQC41H`Im^jbq6q}%ih_Vsy-#wJxp_qF~15i8OS~0^sEdQR|nADrsWvfG7|`XnQ5ZOQDLg_b(as znUqHjw-&XY=g}GoI1tzu*%v{o?kfPAP9bAhd6$WT!VSE!8q`%0g}Rkn50Wx~x3UTS zOcAY}Mz4cRW#fOjU?0H6ZP=*gO6nP=APx`13^5xyTtRJ)B3oh`5ixKI0Mh0)bwVgj zJ0kE(4u3EivRaH*n|khG56uets6xPXG@3`eUBzfv_D4#7LSt+pV70vHm~_%6;-IWk z#Y6^G5bVD(ffu6=gzKcB%@_!&kqDDlM4=QN#zFp+MRx8OqNY++P=F;I6CF+6lc9)3 z61p2+CI;UU<}*-$)%6&ZX_$5tz>DE=0H&@6##h`5)8ZgQa?wh1#|zZd9ZNw9i4bA# zTK@pb4Yt9S57eVDkt!BqAqKS>QjZX=Wn5eeiv*>py+g=b85t#sOMjRWT0&*CvZZm! zxs|(PzBdxEYq(y=+Ej3OMUYp9YP|A@-?C6eJKinZP=jm@(957`zcm>*`{S z@F9@O3>7Sj^o6D^`k01Pga$6)tjCmKs6a7He*T0kqKozZy}*qH_?ch}BuEjvc!90a?pF!&bq(U* z64(Le5GcbM1$D%z$OjR{wL5@tAnb$UBm$jt3UIAd1#Rph<5D?l$)1O_9!oQ+Q*nG$ z9GSd8(gnd&`$`oT z%m7(9A&V`q)N%g+FpXsNUI^hpU;!PZMHOAl)NP6gl!<{$2NCE)SI}VkJ&a1S-k^-4 zb8{?L#-=7tsA>uvORwCH&5k;=5Nfgi@@(NW=so$pL|PROT+M zl7j&+EN*B(=2%!o14?*+u&HW_u0~Vz4&|=Mmfj_rvr$<_H34XqN?BaShF@_`6qM83 zQD-JNIa8Rxo9;jL7~@Lv)Hg8V67}GesuAWDE8c@}-44RpkjU;`0HRlYmj=Xmi0m&= zX2gnlOya2V5~v2N+}vp8mV906G`aXe1#knHHY-P#5CunQ%b8{YqmtMFex=({%EZfb z;xAuL0ux)6f&V7xSj^%8fR&H4f~iS%*!m5bB1Kb;Np&8 za-+6FMq5xC0b=BS4}`NC!l^T3&M* z5Gmq3hgysV7l=ww3wc3NZP|H_`dqS?%v#|UmWf>9_=!tY)+3cz^BWE?QA(>2Tc*}5 zFq!XfFbx5zN??O)gYh0z5Q03g1BgxWd6fo@#T7RI3bUBXRr63%8<@9ynTjQAM&Shl u3ko9IY4$=I2(ZB&EZxhrY9R&3xH^mq>}7@Ko@KINEv(F3LbSbBXaCusglUlg literal 0 HcmV?d00001 diff --git a/flatisfy/test_files/13783671@explorimmo.json b/flatisfy/test_files/13783671@explorimmo.json new file mode 100644 index 0000000..7eaa74a --- /dev/null +++ b/flatisfy/test_files/13783671@explorimmo.json @@ -0,0 +1,44 @@ +{ + "id": "13783671@explorimmo", + "url": "http://www.explorimmo.com/annonce-13783671.html", + "title": "Vente appartement 3 pi\u00e8ces 65 m2", + "area": 65, + "cost": 145275, + "price_per_meter": 2235, + "currency": "EUR", + "utilities": "H.C.", + "date": "2017-11-10T02:04:00", + "location": "225 RUE DE FOUGERES Rennes 35700", + "station": null, + "text": "Rennes en exclusivit\u00e9 rue de Foug\u00e8res - Grand Appartement 3 pi\u00e8ces avec Balcon\ndans une copropri\u00e9t\u00e9 avec ascenseur - Travaux \u00e0 pr\u00e9voir - 2 chambres - Cave et\ngarage\n\n", + "phone": null, + "photos": [{ + "id": "cb10f556708c4e858c1a45ec1dfda623.jpg", + "url": "http://thbr.figarocms.net/images/AXuL6XMCphsRrTYttb7yR2W3CCg=/560x420/filters:fill(f6f6f6):quality(80):strip_icc()/cb10f556708c4e858c1a45ec1dfda623.jpg", + "data": null + }, { + "id": "e2696eacce2d487e99e88c2b945cee34.jpg", + "url": "http://thbr.figarocms.net/images/0Va3M6bf1eFkJJzPXC--QIc6WTo=/560x420/filters:fill(f6f6f6):quality(80):strip_icc()/e2696eacce2d487e99e88c2b945cee34.jpg", + "data": null + }], + "rooms": 3, + "bedrooms": 2, + "details": { + "available": true, + "heatingType": "", + "agency": "NEXITY LAMY, 6 avenue Jean Janvier, 35000, Rennes", + "bathrooms": 0, + "exposure": "Non pr\u00e9cis\u00e9", + "floor": "1", + "energy": "E", + "bedrooms": 2, + "greenhouseGasEmission": null, + "isFurnished": false, + "rooms": 3, + "fees": 0.0, + "creationDate": 1507712100000, + "agencyFees": 0.0, + "availabilityDate": null, + "guarantee": 0.0 + } +} diff --git a/flatisfy/tests.py b/flatisfy/tests.py index dd35d39..becfe20 100644 --- a/flatisfy/tests.py +++ b/flatisfy/tests.py @@ -225,6 +225,11 @@ class TestPhotos(unittest.TestCase): TestPhotos.HASH_THRESHOLD )) + def test_matching_cropped_photos(self): + """ + Compares two matching photos with one being cropped. + """ + # Fixme: the image hash treshold should be 10 ideally self.assertTrue(duplicates.compare_photos( {"url": TESTS_DATA_DIR + "vertical.jpg"}, {"url": TESTS_DATA_DIR + "vertical-cropped.jpg"}, @@ -232,6 +237,13 @@ class TestPhotos(unittest.TestCase): 20 )) + # Fixme: the image hash treshold should be 10 ideally + self.assertTrue(duplicates.compare_photos( + {"url": TESTS_DATA_DIR + "13783671@explorimmo.jpg"}, + {"url": TESTS_DATA_DIR + "124910113@seloger.jpg"}, + TestPhotos.IMAGE_CACHE, + 20 + )) class TestDuplicates(unittest.TestCase): """ @@ -404,6 +416,20 @@ class TestDuplicates(unittest.TestCase): score >= TestDuplicates.DUPLICATES_MIN_SCORE_WITH_PHOTOS ) + # Different number of photos, and some are cropped + flats = self.load_files( + "124910113@seloger", + "13783671@explorimmo" + ) + + score = duplicates.get_duplicate_score( + flats[0], flats[1], + TestDuplicates.IMAGE_CACHE, 20 + ) + self.assertTrue( + score >= TestDuplicates.DUPLICATES_MIN_SCORE_WITH_PHOTOS + ) + # Same flat, different agencies, texts and photos flats = self.load_files( "122509451@seloger",