From 3989c06911871e6a890f18cf89aab13ee7e66d91 Mon Sep 17 00:00:00 2001 From: Aleksey Bilogur Date: Wed, 8 Mar 2017 16:17:08 -0500 Subject: [PATCH 1/4] Ignore invisible axes in computing tight_layout. --- lib/matplotlib/tight_layout.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/tight_layout.py b/lib/matplotlib/tight_layout.py index 1f61d95e9f2f..19fdc1bd5443 100644 --- a/lib/matplotlib/tight_layout.py +++ b/lib/matplotlib/tight_layout.py @@ -123,7 +123,7 @@ def auto_adjust_subplotpars(fig, renderer, for subplots, ax_bbox, (num1, num2) in zip(subplot_list, ax_bbox_list, num1num2_list): - tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots]) + tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots if ax.get_visible()]) tight_bbox = TransformedBbox(tight_bbox_raw, fig.transFigure.inverted()) From c23e5f60ab49c383345220ab98ad360441546881 Mon Sep 17 00:00:00 2001 From: Aleksey Bilogur Date: Fri, 10 Mar 2017 13:58:26 -0500 Subject: [PATCH 2/4] another attempt; add a test --- lib/matplotlib/tests/test_tightlayout.py | 10 ++++++++++ lib/matplotlib/tight_layout.py | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_tightlayout.py b/lib/matplotlib/tests/test_tightlayout.py index d0a9cf5980ba..76d9c1424212 100644 --- a/lib/matplotlib/tests/test_tightlayout.py +++ b/lib/matplotlib/tests/test_tightlayout.py @@ -148,6 +148,7 @@ def test_tight_layout7(): ax.set_title('Right Title', loc='right', fontsize=fontsize) plt.tight_layout() + @image_comparison(baseline_images=['tight_layout8']) def test_tight_layout8(): 'Test automatic use of tight_layout' @@ -157,6 +158,15 @@ def test_tight_layout8(): example_plot(ax, fontsize=24) +@image_comparison(baseline_images=['tight_layout9']) +def test_tight_layout9(): + # Test tight_layout for non-visible suplots + # GH 8244 + f, axarr = plt.subplots(2, 2) + axarr[1][1].set_visible(False) + plt.tight_layout() + + # The following test is misleading when the text is removed. @image_comparison(baseline_images=['outward_ticks'], remove_text=False) def test_outward_ticks(): diff --git a/lib/matplotlib/tight_layout.py b/lib/matplotlib/tight_layout.py index 19fdc1bd5443..48dcc72d5834 100644 --- a/lib/matplotlib/tight_layout.py +++ b/lib/matplotlib/tight_layout.py @@ -123,7 +123,10 @@ def auto_adjust_subplotpars(fig, renderer, for subplots, ax_bbox, (num1, num2) in zip(subplot_list, ax_bbox_list, num1num2_list): - tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots if ax.get_visible()]) + if all([not ax.get_visible() for ax in subplots]): + continue + + tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots]) tight_bbox = TransformedBbox(tight_bbox_raw, fig.transFigure.inverted()) From 53b5aa37f69857777e1fc1cdd2f1403a5899e538 Mon Sep 17 00:00:00 2001 From: Aleksey Bilogur Date: Fri, 10 Mar 2017 17:19:00 -0500 Subject: [PATCH 3/4] re-add conditional check. --- lib/matplotlib/tight_layout.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tight_layout.py b/lib/matplotlib/tight_layout.py index 48dcc72d5834..9ca396dc0e3e 100644 --- a/lib/matplotlib/tight_layout.py +++ b/lib/matplotlib/tight_layout.py @@ -126,7 +126,8 @@ def auto_adjust_subplotpars(fig, renderer, if all([not ax.get_visible() for ax in subplots]): continue - tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots]) + tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots + if ax.get_visible()]) tight_bbox = TransformedBbox(tight_bbox_raw, fig.transFigure.inverted()) From 761e7f6d94c188159095054c1d9d91b475985c7a Mon Sep 17 00:00:00 2001 From: Aleksey Bilogur Date: Sat, 11 Mar 2017 15:33:33 -0500 Subject: [PATCH 4/4] append test images. --- .../test_tightlayout/tight_layout9.pdf | Bin 0 -> 6066 bytes .../test_tightlayout/tight_layout9.png | Bin 0 -> 18802 bytes .../test_tightlayout/tight_layout9.svg | 1017 +++++++++++++++++ 3 files changed, 1017 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.png create mode 100644 lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.svg diff --git a/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.pdf b/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c694c8431a216e656bba7cb3055d980c9274dc1e GIT binary patch literal 6066 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.png b/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout9.png new file mode 100644 index 0000000000000000000000000000000000000000..2d63e6987a38e666be9daa7023cfe0ada2dee395 GIT binary patch literal 18802 zcmeHv2UJv9m+n*L{Jb>M52I_bD=1x zNDf7?zyL}PLJM=z*w)vd%34&mg zKeS(&AXrut#LSa(=iqNb?0>Psr&%`pf9c_%i zJYsv`r0oey16v1u>vM#;zO9v+rLCFq>DBh3rky_)I1*MoQ2y!Q(d&C> zDHIjW+P`OZ?CK)j;ydftsLAqd(7biNa>qbGl&A1Q+1f~lbK69+^fd)<$~Ru$o_74_ zYaxo9Y*Ej)5A4faJ-}bJ^p`nm*Nj3Vx>pU=n_d1odCJ~b;L5@K%%0ONNvjMS`#$%5 z%%RLHr*h%Zn7 zi&n)g5fc;ZYOj36m>4X#E0-MExO?|l95sKW+1cr{k60_+NyK^BtnJH}w;c;L;t4|b z4jVyupVJ5m+hAs4QOD!(evNPOk{I)re4Q<7Pcq}^N>XEy_nkU7DTInDoGHGkYG;?$ zn>(n;>~)}=u(eGMOPEP4)E6a)3A3rWLDd~Ko*Ys!!MaZJ(o4{@XlJr2e z1kJ}@UUO7cRXfBeV?LX=Y)NxtI^}51CRV;MBZ$$4N%li}tQ@>Gxfcc#8PVFld%j&s zw`@r)ml{8M{`~oijQ3eK^kV7B;|U1~4^5U4r{<>2ASUw<)F`y$nr~mfp35l|5EvGg za3WeU_VMF&dwgaPFT5HEf*O1!+qt~Q-gMy8D`w}_t5+|6o}8jl8&VAIJ`~JYw|;$R z5trq{^TC9Wi>;jM3i$(3=h6Mz5|dW675l z;uhlSem*kO`9m@OMS0XvcK>X@P>XDN9v&X%%`gcE#ek)Je9|8@r?k3o!RmK+g=ML& zLW{V#N_cUlde*Cw?WUP-v#vIr;>cf7&muj1QL=rDcFLLvi+xH*j+}6Hb)`7Dy5>bh zMC`QdtP!%EP0Zb3z(Q#2y;v@@hu62Uv9V@kQ^D@tyTvbji!?DcWf2K4kIr)*F)6#Z zn^V}}=q}Ca#q;RWJ0$f>nq8Ng>%glOCT3=V{CVTOIoVbpf8p<_l;gWy-J!B~??wCW zdU9*6HPLBmAQ89 zn(gGoSiw|Fwq1O>1#Ppu=CjkUJd}j}BcGiq?#!St6Rd4)L=4Ng<@1zwU%(B}do0~0 zmL}*rXm3-`)S4?X{9wg+0q=fJ1KH93yaL|QXB^#o`R8_6?xUy$or`_;?6_`{IyOz- zC$=4FX=!iYzOBOYX2s4W7@7AIeaRglmzm_dcyQ^Hd~WvQ7UtR|Gl=InHCC=yVxmvY zz-i9RUo1nO>Xott`Q@pFGiKqF$M#u^$iFRGBtw4s-}H~47rv73>g-H)9=(rxxMRuD<+%$IrYe zebbgLM8A+`6Tz zp<(P0N)Vo8$&%J$d3{&dFfcqkX>9Ood~B?|H#<+&$3pMgs;Y?Ecy*3!dnSX<82#*< zcBYuUwyrKNIa%3#w2-gWYM08fW2X#%y^u$~8Qbc|j~{Zu4WhIFTNl8?73PTkYbB@Wa^$Jz4BeZA~GKr>H#LAbbTtnwfiP*R}Wo_+y2Jh}H zRw*wl3o8G5LP4SQ95pI3GA2I$$k(#41#uZ^X~y4L-`Jbi%NSHZl?P=6nMzV;9 zt-Za;`^@vq&PQ^-?A(-lT9$dL687B{RgaIP8C6C!f4Qe9IrvVPQRa|uqpC-Vi8=J_ z*|WVO!6oa0OYG7FXAoWq-@aMj4i09mEen_Ci?W#H!{WTy@ROlu!i<+4wsELhdNjR3 z_hEsx% z#KJQy%tzVj>1rAp8v30vD}G#=UrI`sEMT3J<-JA4#d`KVOO*CJY_g>2oI7`pbNlH_ z{F?*>6j0=yh8ql3Po9ivvdAedv!6lC5kg;eZE#xRq^TM5-XbGc*Ya3ie!i5|gf%A@ zmxwE4sK8^Olc3dO#3`3-DAcf(tvxbu)ZILPOgI9C6&L`Ubo`2gY1XjE#@0s|T-F z2wCcQ^z*3+hi`n6PJtW32pK+qd)KpQP@|W}8Ae?at6kS^*q~RP?Y~ye{ z$}ChpkAx8qvThZe`foul|3!f4KXBReUY{cE?CcuzoHNh`tE#JUMxyWBxf8G1MR%fi z=}l?M-Q+&*;E)k@^lrp~>&rKx@Gbof1w}5JMbOLYvkc&sh{gL%H#)j8>rK6z#h;G@dfw!dPE^;uaNtDL(c=dWT&_#die9i{TYITk zOYSGC;O5QBW@cu`O53d8v{}2pQJ+Z^DqXmc^|qwM)5O2u*B0pJk`jN}94(eBz$6Y1 z4wP)lm#OYP8DJpWflmj>br@-Jr$jcF&kdJy)eIH0RFjqUR6cQnmC4`|v#0^a^6sBc zoEqh9=c}DY3-eFN<)I-hlJeihWyYMV=HikoE-ucfEf14evCD1uym|AicX4L}etUKf zekr|GGd|%+6!aJV+BxKp9J$rh6GZJ|i=$Ghc%5ZK9o21CyU?Y6>0Ep8h9AF1(78X< z3bxgMQ_ARWQ5gvd0!CI_wKI=NN=n8(d9qLwD6H?WG9@~iAiP-d;vWd2YobBi4he~S z@nRp(E-M*}3@uY?B8lp+UBAvE{e1JrjTJAiF7dSRxG?(BTLk-4lF|OCk>XB~Vh){< z9PdtX0>-+1>y~i4(rbe7zy5u_hC?g1Y~Gw|*04k1YdC=D4`k z2ag~@y~N84RvZrCX7>(4857V-uWwjS6s-RBzOL|NYsN-J9V{&^{pPsmu)KW7$Y^15 z@($o?x|YO+Z)dUF+FRe;GO@H&KYcm^_1e*dQtfLcV-`6bQTl{Ef$hNJm4eaI1k+4U= zyeLMT(r&rS1vHml6Gd~~j^?U7w|PcGx_M}Fa&oH8S49y~(Kw)n6ob+#kfkIBw^X=N z3uqsm+2^i@wX)BcO9+w2wLe9~$>^#_GBZ9Pr`ZT~#(r5c&oG6m&i4a&~eWdcD?nqnMa_3!^Th+YE=3Byy->&6j%Z zb8g?cQ=inEltt^^OP%_(f^zJ{iCddDZ|*i*KrA{q{eAf?RSgZhKP*u==*!E4Lku{= z81Qv}f*!t6N~*am9k(%!{m?%ZqfgLiGys~AsT2y!*mDlI2Y6mU#C;(YH!!@@XU=$< zYzscJEx0SBd>&DF;J1qOwLF~TgxHiXp2f!{S5uzX5kK+qCEdJv(~WNPwQTlHj@B@T z=1SnY$Mi007oDodQ6s3E8?$)r!FGH>t%*G$0^YWlGFjxqC1UgC-J0B)#LE0R3^_Y< z^8_s7i<;wtKPuiKz$S7t;Bg;+bZ~Yjold{_nPtFnPe5cbpL=f0Gm@}t<~lyR@A6Ha z*}6gcS&9zfG2_<<#{&Gl7WB_`e0X;4NO!}dc}v!BT)S3Qx$l^)KMl9D*i@z~N(DRw&aYBReHrK`vLC`mX|?TI8|Z~lpNsi>-M+O|zm*x=pVI736jlCOj4SSYD|UR)N(R8#`7WsU!Uy4Y5uy+U## zi$hb-r1IA-0s^&D4KTv;9l|Hfh)hYbDcBHlgI7}AYQm(JN;Sm;%SQXA zfAHjJtXoSIY@KeCe1%=M;b1?S=Jc`m~vhe4;8a&d8~ z*koy2XKAaa@e*Dsf6w)PXJjNz<)#EkGdq+naKm*v-ve@IdBri)bga8J_;m6jAk-}OiD zJh*XVp?m5&{sV{zuRjkMy}PqLAd;2WQ3mkdsry;6iiSok zwrRly%lt6|0o~mCGBwcRX`bn}#0mH^NI)xU_JZYy0wNwgQq|UeGBGi+m&$0l=HBr* zn87n%B$of&51{qhukGw-d3?mh#vZq^Ndb32g=0v%MndpIJ=~j?Vp!ftn@_CXNB#!4 zbk;?b*4EZzVVs1}QL_D_JF%1X#`8ZL3H-MfkAJ_~U9{@jt-9J;C|_Sfm=O@X&>KZY6_2UK(5z=04E z)1b2ZlFqNvNa4CSf7~K(>`N#~!pYJA+CplS_8Avwn*{|q92V#o^A4TntM@$g!fdYK zZz}1PSztTDhGiS2rS(WL7yyBtM?A97nh?VCMZ;Olyd&IyU zHMOvb7nHT% z!BJxy@7?w!y%J6Niy0r(pPU?c%*fNlvACRb`RN%BCy25a^^P35{^i}>B|%B0W>*%v z2tH+X>t=EOup+VHlqqr5*H>LmPL9IJviUl*nAPk>M~#9Q%~rv5oiXHL*a;`V2`q94 zicF1ph{Pj0Iyz85DksJU3+u=t`}2`ZQrF^#wv^-02fkH{GCz~fU@!^>p4Ty^boGFT zP&cc9sswXH*R0uF5-iBK?<--&oKKbDa|4FCvghMHHXPFXe~p9!S_d3!>gv{)B>z$e zhQFg-_yPbkSbHtm@eJOrl=#i-AQeN6Y};7SN>borVP$^}d!nZ?EiN%p?fm&?AV~bN z4<5)Y*`QbhZIi`R9o`8DHstb_YF0j%2T+!}K6>-jbyP>AD4G3eINWM2d?F1WK$0}m z&F)G~^vlXC!=tH7)QOJ{cN6b-P8ZiTb&&T?vazwL0U@Vd z7&I__d1Y~3PezLc4YF?CYyY(g?xWuBPaB(>k{s{5GpX)r{2CDLQm`%0ptxu_(CmWS z=uS!Wb(c$_JtP_PO%Cu)RR)}WRaB%|9j%mMk=?QWNB|D>6Urn#$tydfIIVZDo}SCV zWpHj2`Q-coAInQmn<`elmCB@9m_l$1;y0~|l&=fibmB>SyHS_F9PjpuEZ0Ok4%|cn zXxov1+js98mxf7Dvj>W}61JZyI@y;ua{pm(Pi0NbSqL&30W;m+lZ#p*o@WF!uamW4#*b?RtA<#25wx}nj@@qg9VZYF4zv?aT5FIr^ z6N{b(-E-Gg?{~+BpG%+GaP-b8p54~`$NIXvQ#(65_cdmOc_p(#X2A6!QO~V`TA7fU zxvL9eniGDR77jkW{*14NVBSyweK34#;t1Q_k8XG|L#OdNCdehFeB8 zW~cgiEuTyO-jWX6#^(4@eqTvxru>HZBB*MHj$-KQ9g zmCt6p?6K!?9K1#OVxJ?MELv61)C6ursb43comt`4`)*|?@5Ha9c#_#NB{_?BS2)mh z7y2iZQ2HZ2<{>CrhZPiRA>+|2WI5R4^@Rf^Po^07SmgAGO7<79kTx?Z03>Lp9hURu ztrafcvn1l?+Hxz3)DA8u@;RZJ8hG*?)#F<`{EYAK8jq9J<23(v%@O_8sLYzUKH1A9 zM?ZL`(^s0vHh9+6sWC^3rR&@$irp77xNZdnXCZ4aodxjreAw;zuL*_=HCpVkzVDs7 z5*nYK@ebOi!|C|e2NEl8_)(wBSBZzlyIyE>P~{9{L8DWi`{GHijI+|_TPy0ZD@@VO z!C@qR+%(vk{|?1Xz;tb8T5n;CiMe?#bEG9H$+gF{5s((lXSg)U4ZB}@^f|{)(s^%d zyZl7@gjX`h@#Dv{9S0)P%^D(5I`skq@7|3?2{DCAXkuh^%*4dRh%=+|*zl>TNv3A< z*{h^z#y8pT&3LPxAHf_SAt?g+`@Gn=_SHE=X7a+U^wK3CEnmvT1|gM?nNkP4Yej$f zE$uqJ83#7W^=d#>$@x4+owYS9U5-32xbL_xqs1);KzrxumviMI`Gja{Y0b04hT6~3h zT<#yt9+#(Sla!GR(?<~zUZn>Pa5hREQg(LEfzBzVlk0e#3=lxQl&v$3(eC1P+`}th z_1RZC@zwPetUw9n?sd@IQym9RquFjrEp0N|I3;j2TuO)Cdu=~gG;?BwR!MV<94C3( zMMVb{!lfkpLzp{+g=?#;AE6u9w^+^M?ETY*c`(9KO9Qv;XO?mf-(7q<-7`a zg!ZmlwJN|#kRSfi-WLA9cG34z^u?;!&hddO0QN;wCfWp1aX&nD4Jl0PeGYS>rn$Mf zPYHS^1PlB*5lYSb(XK2t*)dCfi2j`&9mj#8DjFSHT-5^@lDqkp+0JqNrIWR$w>h_K z;7{dBPi?<8pSkFZhw;ecCtfi`1tq)m9!-TwIEP&(JJ?zsc4{UW>;d)R{6R!zLEy!jj5a3 z%V82MzZqU!sGVWjavI?bG6Cgd+$;s)(KtN(ci6F%czv~U;B{V6t zs)a7@B63$B?70GPu5xS>@Ho9zN zOBMFrsEbsW-ejBJ6E4f#?d{I`ZvxiU0gfM~+*otn$0x6Q#KF)o`kV%}?@wEP0yk!L zQmxg!AnA9x>KeYi)9#Nkg<2o6=9MqD$@XcEd~|xjJH+``>K^>0o}Qk=M~~Kw4t$oa z(QnuJeh+D>sigaiM?8Pe>HfY_x)u2#K4rh={obu)&vi0(ZT-&IJi26GPP5MsjQ;@{ zhO%Q}nRoq-=>O z!cUNe{K%b3#)p<|QPZwvYzTKzCPPS&2BMG}iObH`bZEX1?KYCrvPoRLk)-_yXc&yk zJ-w$G&5JglH&k_mfqF6dxXukWh*M{5bgD`1W|5scW8&ftQ^rayN$mi#Y!huW$=M6d z+*u=&NRgvC_kuc;9s2X02vmcvlya#P+S=L=q)5pN60(Y^scFpg9n0*eUDAaoc;m*6 z2mNd08yXr&O-)l%^F{Sa@|s%vYr>EZ(7L`tuvcB_=+TATBU63(;I{E#3>&v^KMrPm z=1R^ikB^VA%8=Sg@%^WtetJQJjNrdSCRaBJf*P#6J8s3$u?6HiySurqdM>iCCNkDL z5Tnj25JC~o@XkS;;^z$>qkJh%5SIGxQ0%kh1{f{N5YVWGLc6c}gV1pml}Ly|UO7Hb zPfwFIe%EhrHhhob^zpI~i`W-0lOeIMovrPVgnjS(-SWyVE)yQ6Oun2DQS%UkvU{tt z*Lz>AuRl5LA?f#0>QMJyJ(oSph(()z?p!~Vnz|F3*GN1pFxW_k0VvsI)yZej{Zl&e z={v8A%2%3E_U26`6d+YCEv^`{+R}2=A$wQe*?#6l<@aR>z0|t)q*jJS?Fv1Yhp6E4 zRXKh6@h}Jv1@O8K9f#BULt(yn>KRrPM8$^DJdz)+H~B62ny)W4+pf!&F=PzDN11;B z5d!GH^W_PMfmI|Gn{w}}OK3zAiQkwEX-Rb)4k)_G6W=m9obk4_lw^ARbg3C#uU6>Q zAeq#2EY*p2K1=(f#hUJVPhF5%f{@{#{}<7t(p!Is9(`O&Fg`Hm5?6Nq2pxU4#TNDG zI=)|W_5$2f0o~`nCP4T&906!n^-$K^cC=p~HP(pUS?igo1Jy@ra`a43{WDpt zCG6K4fHhX+La^mXqZ7*~^i0GfFevD47ah5P{fdTt(K!=+Cf$u`M*xC@b+q*KlF0lU zb`o0+f*X<0f0aO1Ng*4^_9)~O*mkgKt8c6l{-qNI1DO`6jal7|c+ucz9mq)Tr9+xg zxWA{N47MIYT)LVd_ArNLft=$o(5gkoc(N(=iN+(u_&P7L@>Y=O2xdR|0L7h#VsxE* zL`a#5fMo^^tgK8Cr#?~7b*R1a;^$zSu7nH|_%oUiFW?;3G~KI?HN1b}V9QvULtRn^r^{PykJgGQX5!WtAB7MO)U(DUT@zB$S6Q*Htp z$@`B4ZLQ>RAC+}&+oD%F$s8x~M_PKiNud{;`owSUdlGXt>>1Gt4s8SyA+{}xx``-N z`48*NZpxKsU|=9vXZ+<7rFKACbq$TX2XCxgBM+W)0%4{5uEQG3mM`y2Z?Z^%!-Ws8 ze-)-Ed-bfJE|2N=g-t+1cXqRfs8=k%HXxCH~EMBAeEK zTb_u#>_2njY1wwjA~a^6f24b%?Y4|7aEViI*4LRI$qri3-}aQ@#{Tw?{=3op=fE<5 z#1StXgeIeNxe+Bo^ihUSn{Ni;UsUHH!vKNKkFtZ(QUfK!td~rN%kV#?^L~#&uKZu0 zi2MiCRCerMYGR@yDK&zIIyq(I3@lx;#75OLPdCX8$(k-`O`W~Hr0kPwRQWTGr&ok3 zxiRLzhlHpdg`AH{Mza&F@qnRkC4yaJU&GZ^Rd1ue&(U%I)+$ftEH)_KtB91p)oLqF z28WoFBNQqOi*Ac$xQ>VZpEPVLVufwC;v|6XfKDBymZY0dRaI4zNFQ_2%(Qxl#LxpQ zo>AQsIJsz;P$ZjvD_V43zp5(b3wgS?0|Q@obeD?Wy?YnF62fo62YVY7wZLtG_wOh2G27)1A36kj97lFuZ(gS>tI3?b_69R# zoRB~IT;$WGj;x#QhtW0=K+;|YDt2nSt-kZz+oh^1Dn>X4WLl~j`Mxb~Oi*-)cXMiy zH`U%o4R%>a2u%bA2gm2;?ujYlz-R;ZH}UC*>DISk)gd^2q^Sk}xqWiHFSy2e>NT`j zQcwg!M54*A;4ll z?#75Et83oqr|WOuyje9wTS8v5(6dMEp*o&>L-IMzr>8FR19EFZw|rY(&S%>L8QvB- ze6nTZt^)b-49I4nm2UP7;WK>bpEf1_!pG>$wD7``L6&bb=Ui#*ihriy+pdg066ddMG`yl-Mgb%+S{PkkO)bAj~tvf zH%4`MCke1oL3_+NzAthErwk-l_+HVggbilZrlh2_4UVatI3e85xPPBl^4sgRBs$N? zrwd4EvEU~b%`nTGN9(cQvVHqAWSnhsXr75vuLRv5Mn$bhg{W^>j&JgqtB-UKelLqu zkI6Ius%~tIVDz%MIR4S2M|w;EIfQdAd<}CLs?)MG zMv~o$NvE>V!39lVS&&~K`=g=|CjPINnmK-;S3S*nT5wSx9rT%B)78~QI(!3;{PKuR zI8x5IPY#BsK^2o6YrVyIqvUqlFbA)TSeSy!|97Q?Mee&rAHXl5nR*E719KAjJu=dd zKeKpEAN=bHeI8qNvQ^+OrNUcU#>Ev6pbCvfzP7g3>Eq=UNICM$&z?P-)L)^2AzAte zG33o_);w$(gCdE>#=3_*uBS$y{nNw`zNOGFVa9&)fMeMoefeTQ&Lu=f4mt0@)WBV6 zkBN?nSlpbZ@5_Ji59T|NkI*@Y_T(%6{~^KYkf1?@2-12CWKV|B-@4$5X14`t*>^Z(BPeL$hytQ4U1;+H+2NX(E*

W8+v-b3x9vv4RJe^soYo!K4QJXlnd)jyZwB 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +