From 38e5857925092c32647cdf5c19845dbf07eac007 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 6 May 2013 13:59:03 +0200 Subject: [PATCH] Improve gifterm and pixelterm background handling --- README.md | 2 +- gifterm.py | 29 +++++++++++++++++++++-------- nyancat.gif | Bin 0 -> 30244 bytes pixelterm.py | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 nyancat.gif diff --git a/README.md b/README.md index b591fcf..cdc8854 100644 --- a/README.md +++ b/README.md @@ -28,5 +28,5 @@ are only parsed for the upper of the two rows. An example image is included. Credits ------- -That awesome Rainbow Dash is by [starsteppony on deviantart](http://starsteppony.deviantart.com/art/Rainbow-Dash-Salute-263753912) +That awesome Rainbow Dash is by [starsteppony on deviantart](http://starsteppony.deviantart.com/art/Rainbow-Dash-Salute-263753912). Credit for pop tart cat/nyan cat goes to [prguitarman from tumblr](http://prguitarman.tumblr.com/post/4281177195/pop-tart-cat-icon-can-be-found-here). diff --git a/gifterm.py b/gifterm.py index 0fcb6bc..a93e224 100755 --- a/gifterm.py +++ b/gifterm.py @@ -16,20 +16,33 @@ cursor_visible = '\033[?25h' if __name__ == '__main__': parser = argparse.ArgumentParser(description='Render pixel images on 256-color ANSI terminals') parser.add_argument('image', type=str) + parser.add_argument('-s', '--size', type=str, help='Terminal size, [W]x[H]') args = parser.parse_args() - img = Image.open(args.image) - frames = [] - palette = img.getpalette() + tw, th = os.get_terminal_size() th = th*2 + if args.size: + tw, th = map(int, args.size.split('x')) + + img = Image.open(args.image) + palette = img.getpalette() + last_frame = Image.new("RGBA", img.size) + frames = [] + for frame in ImageSequence.Iterator(img): - f = frame.copy() #This works around a known bug in Pillow #See also: http://stackoverflow.com/questions/4904940/python-converting-gif-frames-to-png - f.putpalette(palette) - f = f.convert("RGBA") - f.thumbnail((tw, th), Image.ANTIALIAS) - frames.append(pixelterm.termify_pixels(f)) + frame.putpalette(palette) + c = frame.convert("RGBA") + + if img.info['background'] != img.info['transparency']: + last_frame.paste(c, c) + else: + last_frame = c + + im = last_frame.copy() + im.thumbnail((tw, th), Image.NEAREST) + frames.append(pixelterm.termify_pixels(im)) print(cursor_invisible) atexit.register(lambda:print(cursor_visible)) diff --git a/nyancat.gif b/nyancat.gif new file mode 100644 index 0000000000000000000000000000000000000000..9c2ad57bfaeceafcdcb3d4ca08a901934a8d636c GIT binary patch literal 30244 zcmZ?wbhEHb>|yL-{LH}c9|RcwpP6a=pW*+^|Nm#s{6CXn=FFK4GynfLo|$I+|33o* zgK-)I1H(T?CI$uu#sA!Xt|7tBjsdPldIrplAfcZutn3VY3_1)93=AM+8Cd>LIO(~1 zuf^-LyZ^rg&X)W}+w^Lk%_&iRtu{VS{9*S!CKV8Mmy%sl-kmK2@L$?H0|qQq-$ zl?wtiSy}?Wars```bAYIvF&THD&Kn_4=0 zdi!)s`X^1EqBwEtjG42h&zd{0XU_aZi^~@-S-v7=*~&F**R9{Mant54TeofBv2)k% zJ$v`p#vf0tE{W3jgKPx-+?8;h`ozai^Y&0;Qwf z62@6~PHbF!ykFtJbC*c_vq?uM-tu~O;F3V9*;LJlbtRE}%la&hGy68rWJ~v%Yn^-Q z59gK@7Z-a>)`~r~W##4N-~60vZx(5ptqfb6c-AXdJ3KRPzZ19iHOZTs&YW8mx~xoh z)3&_Fr{;QZUw3zR#phRdPj6p;e}4lrx17(84G#}@2y4fk*|G8Q@d?V_^L%!0dU|?> zarV74J2yW+zreX$&Ue?AmzP%rua3)Iqm}KjF8+6?t~CGKTV;8V+ZI=UmvG%%8_zf| zxZ<5hK`**Wl8jGVMiT4bzepkGgcWy?E4Za7^QIkI60xd2_XAD;~Egzk89~ zu5nG{$pjZM&nLaN|Ey5yu+{sSJi*OP^XU{*rIo#tBeHI!OtWTUhIBQy#)~q?#I9{z-Vv(ezShtwv3$r^Eq9#-!8c1_IpjwC)M3= zwkXn!S>kKSJ9`OzEnIl^_8A7V1_X*k?CO?u;A;qQ+YGpbC_`E*ia z`I=9s*ceWKI&C1GkbQtDJI8o|&OPljCk(&8DL$$9U+2pie&?Fc7i*r$80p(^zx{H` z(O%a0qHJ}~m#ZuqxtjZ|z21I38Cbv9=xRez&)17l{j=8fC3VY|-PV}=clpiq+jGp; z967M|`@Nd)Yd77gyA*4FxcvL9?e{y>*Znx(z|Z%h*7bVN=PoPn0(sr;^mRY~KQmhW z(qhSk@Z2v?w8G9Ec)Gb@-LF?w=Km_^FPxrh`ciXN-!7ds&)5CFFmJzJ#+%~vei~2P z?#Z2gcS8Mt`TKqLdGSvkvqkM-J$87}pRd<fPjvs=*H1o3_E*3GNR*{m2OSsIP_@@O3n~E$FS$@M=LCT}U zg=MN>V)%Zw|M&Rq<|Qo>=iRY2#ARYvhRb46?iSZ)KeM}QoRS!)YG@kvO>9YZIVySi zguDE@i4M6f=eL`%9k)Fx*pLvT#3NmBoXgHoxcbdvmEs@A8CXBrHm5`=el0n{uC}SK zJ4Z$C>ai}*S)Zn?a7h)YopIDZ*T{cv$)oB+5~tkGT@YS*W~pBJ&ck|Y7wxQamYz-e zd77y+Xxb7VR{iNG&jkM}>N{{|p@FHJPlnXz8S!TxYtA}(HqYooOwRL$%wS8Z1zFvOx^!obL%mhiph{I9eHs!eH zM2lL7925JR(eIm);(j~uaOa{;GkkSpO;3lN^D4FLWev}8^|*CQ@7k964r{Z@e}`S; zJFs=>+%&=8T2Z&Jm2K*Hu(oLW={wKV%vLe|Z+)AdZ+82;#P?mgPtw)qoWA?6>iVVw zz3Y5g%db8<#LxT8R;?`|xx6#J{>uRTHZ_n4*6iYPB_xe0_U;fv&|;-hcO+H(Nd0v+Ihm zgx|(4bMDw*YB%;h(VbSOdM0k#v>kgFM{MlVU-NL9nZv=w%-4I01s+-7+p&3v>&L$7 zJr9|Wmd$YeRyZYE>Mkey4nd!DMU8WF;`#h`9#vac)EoagPIq?XKDH_&)BQYQ(S4Ou zJ~M78Gc0^&RX+W+>^-^J>Kdminj{Z;zH6Dwem2HN|4p&f-{Sx2N6*B|bT?g?;I_H; zO3sz=vJDI~&TU!7-Edbe@7HD41sfEDx*LLK|GKimZ|kb?vso-DJFjjCGp*C84fH-P zd}Y?VFC2wyGXuq&u59GnwjucMtHk3~*J9H`djx-_#U)2w7b!7YR?EwgApQH+20gQF z;k|EcUT59huxIP$g|QBq?Y~a-Z1}eAdTmzj=HFND+LdfP;M?HcKl{!HWAm;57rZN9 zfBWt~H-|mOX*yN6XJ7wuZu^$+Z`&KJ|2!1vuh?M7ww9m$)q@>kE9OZ5jr#CX`fkUB z9VguVipqlT9CpkTJ?6N!P}o`Gq+Gnk3I4!Ovu^)+w!+SGkIuV2Y4@cMO8 zPTP0J=N|sMj+Fk>pZ7oW>HNH(7nZ-<+kbwikk|QL*RG%a(q{R$tlMxi~@3Z;#J=^oARi5RRJ-Loy?<-Hes!I8_ zUzU|uz6$TpGP$tts%Wn8>}7Xeo-luOi;H95hj#xzkEH+qI1%3PcJjPG&!p|Y@8TDJ zzwvdo8^isdH_q36oZesZHd+4H#s8PStdIUXLHhRZ7su_s7tZ_lq}l#Yu+;v-)Bc}7 zZ~y=Awtmy4kN^MtpL8hx&+O?1bKJSFAFuzjz0N$n;mG&8|LH29(xbnmb8uNSibOPu zNz^o_S4r(?G&biF|Iw%*(ezHd!Q)t?+KS3u3Qbx&n&f9Rs{d#bo7ALZ(QHytugB4B z@k7BVqS@v~v+{|;xGBv}5{lL@n%yc|%q?2HG!%9gwD@JTgoVjp39gXsV4M(c6H-yS z^+QWcM022re6UB89UF7_3g6TjWjijkX6%|Rlz z>_x3%fWQm)&L7*E*be@QuowwM#j}|g+n!&t9qkY?s?&CL@PtIUG{epX62mkpD z#)~tUE}!VQx}s-SNAL3$y?ai`y}8l%?nmDTiT+O({a+&bzg6`A$Y44-vEOt<{~rtH ze?R)qNysw2WMPb)pjR+~W9I~(n-lncP7sisC}cTNByyryjBh z%!!L5Coc7zxZHB$O3jI@B`2=soVfnygpDsJZ0?*$l1UQKIwcK+1cs{Id?!%lO}KL5f* zV)vE}w-uIG`K`a5`(949zUbHghQ_Amme#iRj?S)@^4_ePNb3pRQ>IRvK4WHg-<-4w zd6Q=?TD)ZGGXJ?NW9Lt*Sq|#4q^{Z;vZi|B=G}Ytc5XY6m~0n)@YwMafrpKYPM$k| z!SuAz*^Ae%-;lX%c=hJJ``2$9+7evpPJ*j zdD+?77R9gboHUMe%Brv8`ubsV^o4~U#v-!iCMz$;*mN;ed4(PdD)n8hw)a)is%x_g z99m3YJ=eamLh+c9ZuYiiQK}h@n{ur`uidsI<@&|a%yQ>=p}6l{C_R?s_88Ly&96U_ zQYY`JJ>u!R_oiIquY{eWYc$5bUm?Wv5Pm{ z+y3>9`mXm3_H{>o%DlQ=es6BYkG~9T8V|rdmIsX-YAYTz@tD1M&@AAl@vucCEaPFT zL>j!u(x&mKLuFdVqfU)ws6Ccz8IOA{o~?M?XY=iae6igzV~+{ncs!TbxXHcro8-0W zaLVLoKa`$M2?@)5IyE9~<Tv)Kj5G?(iH zZ2O!t_x_#EbhD~=mA>=q+?X>Kw1{QBSlFSq>cyfSvsaKF%aSQ!SudB)NL%%C*_<*^ zkEKoP)ruw4vRedL0Xk z_M7$g649%d9}!!f^Pk!6$HzAtcH435Zqo5Nt+Vl(8~2(`GtFMFS;Iah``yl`zh>R# z+P>)Zx?K~xyjSmjf62>d)8|XsdVBg$S+Cyr{L}83Z9kcG3KsvH#9grKn^*h${oL|r zG7fFjJM&@VYoiN!M|j=63Yo<&-~K4@HR(?@1GvYcvpDDUamDF-a=4_A*KAyKW$T*F z=k(2^H=Jefv2i+U=Dp_jIgizMjJFFg%WgU8{9k7C#ht3TUoTxX~s7#?8;vt{krT_$&q=--rkO^$$pgiqmS*w6;6Ncj~Np6Y@g0*+G~GKx5#Jv za?Dd-`)gW+JlnVZney7-6D#=He(b31Eq|3zGpAg=dw zb${MI`|sOT``;7Sm8{}ekjGZBIqvJb24nA5rsBf~mP@{F^f^2yW!eEdp#;ZV;V--# z{^q-Qw0JV)uPk_TVd^1aDW6tu6Y0G==}tQrPG~lG)37@#xao){p&fOnB z)GFOjg-b3r2|h`Z zIQ#YJj;|lG#Y^VgnzwbE%&Go9?$>fGj?cFIN^Phs4hfUpzC$)U(x>0_$>VEWKivPF z6zG>xRw?C~dHmDc!o0d83<~m^9v^SEPhxOZ5u9mpBB3y0@{*P%{FfsNXX!@ib zJ3cG4AZ_OgNuSJrlV+dX@>u<7CTp%7!yMKR&x{Xtp8dR~nCqF#a;xnp{fag{pBvPn zZlSy2Or00++#gRS+U@k*9;8(?HJ@dLZL>*0mRLv)o9zqB*P177O-26C;y=37#r2zi z*RxBDrvFiM4BUCKM=4|x*IJEvdR;z~%?f*YT~@kJe4$>b`e2!b?c-msj$P(z<8CUp zZs603uy#6_ljr<4DUi7|WVx#7GVisT0TX92FJdcM8eEzcI<+cvn!pW7w9)l6w1Hfv?_<6<<2CoiG@f0 zm(D0`?!MD5yM3Dc*??kx&e*Ra(_;->lh;hDj@AA2&FS{qC2tnZ-e`QUYtNOVdcLMp z?gf;6x4nNgqT+t`-5;~ecdH+4N@K6NA(;`zb+&dIlfcExAD@ZuE0uO>e%?Llsz?(X zdtXx-!{zwwuSth^CloX%CMCK_NNfta@qt6(&l-OJh$FVDg=qqfi6YrQ>>pGb>O1fx z&pTydW@1;^xNt#|;D(4uy}W|{*WVu7u|%>-su}hDUHmxqLxg~E-PCE@&pg$u{&_lq zZ}W`fKF^GbnLN_2G0wW&(`>r=CR<)zaotmy7K_V2&sCh;Jn#FN=XSq;o^RmWvVh(9 zg_HEJ3mtx2{x1?g`@+ro*To5aTb8K%zVwRzb!o=AEz8W$zVxg9b$J2b))nr)uYzVv z`Ky}wFAUCo?yz~+iTb*)Q^IW@JMP?Nzx>?Rb>(MY$Nm0w{Q%##4eh>flB9p%IN`T# z)AX}%(yV{qywJC8%W~hhS<%05c-eXOH+*C)!Y33T`tMRP@L-*VNZe>}Ti#wV6tK=SWSdnq0lG zdDhZp%U4*=T`e-daqXn0`75_<-B!G2r_j2^>xI{CKX~YH@~)kGHcdF$uN8F+G|DS? z?(((kH`ZLedFSrEpxgH!J$_>S@ac<}ugqOvzkB~d;`zrfUmY9lK7afD$K;3YuV0)p zD;~-BH?Rn6JxRC_v%6J5IWJ=c^TH$DoSI2@PE2e+)~E2_dEXC>O-oJ+sQ9mnsZ>-w zJzYEY5K^0I^YZia9h$jhy--GZ0~UM9svEZ*T^V5*(pqS``g;6E2D?9AW{0nd$DU5I zeXX=MYGqFJj#}^Xqc?=gUcJhlCVu4Z-iD8>gmP3iBxcoex?7(4;hA)#SsHbeH$AgZ zQb?=q+xzs6h3b7`hp&FgY+Y%)mhbYfkJ&d8qZyQftv|i(*%|pp?e4X&`HdUTo@2Yb z`@_fQ7Z!WZ_uISc>+2hvv(KmA+4%mg`|flB{y2@F+|N({_j&(x_pgO-I&akVTU8wW z@kLop-O&91p}%j=JdgkH&d_z?egliB#GytGrS$o{JZ9v!nI88$Ok?qypvLRD#KTRF zGiZ`m(UFwN61JR6U4r}~=TG(f)wHxOD(`3f^f*MDsi=)dCo|})r%G*sTLn`wnmn#fwq~X7S02= znY?^ftvjamdd-$|jM-~0?jkMKox7{gwt-I~VOqSd&D|)iu?L6c4`|Ykb+g|7GemKo!-KH1Us@Ls$ z|7`X9efN)PU)uBZmiC9uKR#uDIQZw6w9tX&JZ}ni9aPZyc;o}ujVGI21J-;zc2j8i zlTFvS6h56mjPmMiui3O!@Ek|cR=w*vpU+x6=GlD6NLjk*oCCXV$yw{@H;>O;;amIV zl8^Y?d;K2%r@veYx&LNMaqcXi1J`28-+sNG(60OKMoN3`r=`LfvEOdxY=3KZJ$>=p zhFkg9bIb1*F82L?x8{3p*~y~wv77F=CH~n4ik4O2+c2gK9xa;j?WUgchC4Zdw$oKy0w*q2S0Ykq7~`mgfo+~a!I&(|-O{`DYb^1Ldh70dToJ#g3= z_xr$R@%%l{4?9;|pG z{j>l6nz{Ua&UdAHf2SXN=kqoHEbRKX_4Bvv4c3oY4$MzVQd|6i@k2w+X720-DGn@F z7jn6l@G}4Zet_##zdd(O5VP)ygBL%#Hc2f>V0S;UmBT2#>B-~9>$|q@mrCi0X8CiO zYv)tbU#82W4X<40*&cfM#a)3m8|f>2Tdy7#ImOCu!Lx{G_pw9kZf-D9_gHjM!}Lgw z=*D^po@SBx&-xhtSA6VF;9>ZEOk$_OtdBhzK8vM}dbmASJeX~@A&fhifi-(-N^h>r zW2x^a+)bZttjK>8C9~S}xQ^S#sPZq5!H> zS$$_`-9D5iwYBqT5mRu^i!0NtE=HXGwelUupIPb}^$$+#J~5uNk%z&a^=4~*pT+{F zua5Q`69NPkOBPId;^gf7C7@L(k1EduS=6=eOauKo5JJr z!oj-iQIuEDG0$MB)01y~S*Er$Q$Bo_75AfCDFkq5I@Y)bgbkoJ7}P0@mDtjo6wWK{layx8}kbH!I3o}lQ3SJw%#tP^F- ziFSy-d`irDTdo5~k#y7DylERw_^vBr{Jk){>A;S#{}lop9NKq9EWa~fSnE`3>kyl| z=fy6$6MCZCZa2Q`Vsd-%wxMFVLmb}>@gP;N^|tc6TfgN!*gMThU^~a@Yq@b{3-^hx zsWC6m<$kk$`v-@HCh;=~EGlLjdHXiBsQWzRQa*6tcGSCgMXA7hd}RluGzwVx{zO+t z{5V*$bwgKpOd?OV_u;yy1)A2{4@#OGj)*7}Cj2f;5}7~sr~}`pR`)rH5}!klZCg^9 z;5dg-#^2%inWygkwLPJV(Kiq2otrkXKj&h1)sADI_IylQxF=CFe8#EBy_;sK&PmP5 ztz7Rh?`^y8>c)LmlFZj0y)Rq0G*Qi)q2cw^gR|Lr(|JBt?yM_g_`kqAn%PO%%DFu( zZ;|-h`)=01&Q3UIyeM}Lqu2Ie_UXsAEHu^4^h-W)`O96$72D^$%=&usinznpA9ezn zd&M4H+i~ve+VHm-vA=gQl&m}F(q4Tu_4`y>wNR-%BxDIy3n$9&AxLJA8)&{ zc^>1YrM=l{&#&Hm@JxGqzVF+Y5xckESf{cw*ETQT|Mg9whV9IYY~K}mKfklc_q+b} zxo^sz&$yr3R<`52RbE27ne~r%2d*>iZOZ-q`y@lZA?p+0{Jh)NR-EE7r^MccM7qnI zk@;;A|K5k6b;h438sP_Kh3|VXW%r+_2K_tFgr57P5bZEyuG+)vE_^p8?5;e=uD|n4 z_WymKW=j8k;jC`eoo~1I|EoEjXZ5z8U%c;0_u}MdUg5@ ze;3<_dEfU5PkW!XzUqSQlcK!Px1YMiE!Kzo772ycMbF^h%W8K1^|}5RpKo#5K6Cf~ z6)-!_WySevuk_FVx@P_Bt74b!wzT-Iw{F*6*ug&W-TI@|tA76b9?iF}`CRp+hr$w{ zF7*G)bxw-!w6H&N>Ac;o)+e!(WA>lC#czLn$N8G~%WZx<^0z;Ff zYMQjYOuV5>rkoI}y}{Ug!uQ^$w)>abOaePPDmpSxbo}4e?k&`z&Di-sz4P6d_PUPF z#><`aesnI7=vrjawIrfzS;haZ6*Ib4?dV!_qifxdt_>31n=HDwM09Vf=-x4-d)JQc zJvX}d{pda*(R0Y6=SW1)v5KA(GkQ+#=t*0oaAt+*)$ctTg1wi1FrJI(-Qdu9V+Pap z9liH{^gfX2dt}k~B%<$GMc)evwYxXePal-tv7^r}f^8>9|JxUaTRr+~Ca`_>=v_3i zKVw7xEf1!TFZy0aOkk^=z%g?I7i^T*abw>Njfq!1CSJ;zc)nxenH3WSaEUMw9D91&QNvopBpkJ9^K}e{FabZlPOb}_(pfZxvC_p!wace+ zdVAQyDIG#n-==#MP3;Pcte-JusxEAl*PyAtT0tk{r}m$OY5OKk%hS}(?woS!VSj$) z^o>H(eP^R^~xbTY?k{)HFk zJk~~e9(m282^!zsV6j|xwyB44IcP;n!L3Ta}?z4PmasLa&tI?(v8Mq^KJ zU;l)OlO{vPcW2F>Gk4zn1q;FByUSOsT(uf$MM_De{musM?fdp0kld|&xMc6a6DPMF zl`C&Ne(K_-HD_e5rd_yv>-M7S8RzzB-Ff_EdGpkpPhY*B^?b_9Hy=MucsKdO=N~`Q zzfSu8>pw&Dhwdl(3l26P+GDBJv4QyU-Fb-`o0l2QGAsUfXys;g-FbG+`mYH&0$(qTP|K&*1E{=ZL#U=>l>0!qmJ+1 zKhVrA@3&{i$HyloYsa74v-9(Fe-Q)TpX+agnNi*M>zg#z8^J#)euG7x&53T~_9|_uI7C zv`{ee$s`}Mmro`KxM@Dsl3`of*dBZ?Fts%_VWz5_;)_G7qH%SaCuTT_6;7MklOvfH z_j{w}$%(PYG}UdxxB{QeExq8mY;KL&qve9tY`gsDIf`UyD0VO{e6a|$B8Bky?yJ=s z`ZzMyOgrQC+Io9lQuaEQkF!p$+iu3txnW}%* zG2TeKePG+|u!FkWZzio?!^++h?YZ-rUsK+$iEB>3Q+~Hk`~99T*RtR5{Q>H${P|}6 zcKfworx_10a<5@L$j04RaL7UD%m#iw|7Mm0?b93#iyx-xyfb6Cpgi}OWbx&X%F52{ zMLU$LW$vE5xyDRz9*aBnH@N5VgHBuoaJj9rt{{%{}^9z>Sp-D;96c#aw*;A z%okQa`&h>-LHgB&SC7T@nzDwhUu?=2?<`xE%W_=Dm?>lV-o7&z--VT(5nHl$n^n&B zzz^B^n`O4&;aFq4<~GCZz1#29*%z5-SI)Qjap&okSltKrx#Ae_*Ixc>Ucl1d+yDP@ zv5Z~xv-@&KDlZ>wJh%46^#5s9+u3^a+MaJ(%lF%2-E_m>*LFN#_xs%*0)!FM7TH`A>f|Z`A+azHZ{;f1lr6mOt^Kz3E3LcS6R-xeTUm2ZVJd zH2(2caQP>`r&~fGnm6SDEB}Q9%WMPcI6@AxJDynkueZ7B_UaRC#ybuPTykx^csriu zv$(Tl-szS*4v9aQA`Ua|+R&hU**9Bf~Zue|AW0?(oj7yW?3 zHr*Xc!Y{=qs{hY&={DcOC?S2I&G68H9^aA3jTI)C(=CZ+TRvm{G? z{n2FUccf43$zo|%PIsqM7blclVOOZEI4b>MBX>W`BC*07yS<`5O`36LiJJMzlYUj7 zCNJPws^RW=DhRY9#b>Ej_{mdYyFN|b(6dx0-Sc$RtxwZ-oLQ>()L26|z$j?1OMsNG zs1G;q=8&UngvEoWp0U>z4n3=K#nAYvn(4>YvrI0FoBiE-wyv~z`U9Tj7RNpPX1WwR zdro4WGtY8q@vVa_I#JKL_dhu&y>)>>(W-Q-vr6aP|9Z@K4qC3i{HIF8Az^ps)O1Vn zQy1E-zARkudf3er4=h2q!cE$buF>`p}HjCm%`+x zuBA!=FBc`;Vw~ypWtqjQA^D?OMtdZyFvUYY>*&yLHV`tJO~LmtLzBgRDr=&Ah;Whhcus zs%)W0GXu77+Z@PyOFjD6%o9p4zpiUJtDc~l;4k*zs!#jV)dttCuAhqfwrNIgYV=>t zuv0--H-EX6lXzJ*s($LXrQK82GW=&n*)IHQDTp#C$Hq{MRME|7I=lJ2%<-O-%)a=j zxmnPqm-j2`T4%re&@g$!ljNU$;H8(Z8tfhvM44Ewzp24*f9j|~eBHggE$oyeRbmbAoEGTv`h&cvdn-U6!e zr&5HAmz|Y2&7YNXY`MSWT%O8(A3d2eoEIu~{4<#)u##h`#tf~JU5r^FEBT^#akOt; zaBZE^{w7wffUlb5D#FMX-n zk&tJhCKPt6;pxm2yAv$a!gLj$&ndZ<`Fw80vz-l9Ro`ANpWk#8G$?oOWctF6Z;~1z zoo2J1FYI&EdcMfZGwbENm$6csOI+lhtd`pxnFNAC6fEGk>|3t-qJ$$?ElD-@olnYyJCe_4|F1EIIG@^GfBs zKk)O@>H=mC@gD~Jc&yhH9AWXh!*G}-BFEqubJm%S#~GV@IyN&dS@Y?X&h|H-P8+aK z(A#QwJ*SwV^G@}Fb2i`iY(60R`ojA2F2A+Y6gBRz`Ep6?yp8VVfX6)@=UjgCd^upp z6Ki_j?XZRCrNH*Ln=YU4T3d4NTi)HzS6QAf*m^7Wdl~1AwClcRcT4y8lBUN!cn@_T{z*XleneD9lo-~PYsmfKDFvgWNOVSGFP-~YtY$sS zYo-nRw!MgBp0n-MoZy~c&o{^yShkx_+xPQj?)iY-Z`YiTUHops=X(XOw%+ek{#Yx0 z-|*80?ekNP2?qyR@%%mHVDjx?a-Hy3{^(Lc%543gc?!VYS;V<{? z)Aw!Pxoyq=@Vo!``$K>9R^0#pPF?gbYfn9|Kms?z4JOuA4pl#mAM6!)aX`c%fK~Jl z1B))>R>q1C%?dmVIov%C3Gp=)dRNbW#q(kZ%dhhS(raAUeLW6KT@z^a3SRi~%k@J% zTuNkj3 zlIU@XL)zDLy3gKL;+ef;v-&!JCE?$(7u8-I{Wo!a-v~!g{GCoX*MFZi?~zS$b3!&d#d>W^!#=Qr?ka zE59tL=F^vXk7Lr560$BYVwdVRQeKF5?8-tEt+hTsA#HO)I=~wSrF02%U4Q zan&!M%uivzE-&9Dq7<3>LZKw00krfow{?l|1F!2$DVJ0;ZC^y0hKKJswUx8B_H}Id zr10i4adY1HhOP(lk6`P+2l8E#?)M$w5bas%RdQk znk)JueW~QFBa5bNwO*Q&qZu8w`j*P-zJ%2ohq-QFkD9!#_wE|cg4-N-cTL;A|E+F* zWc2L?`zCMj`hQk8zPvi{!nv@WS6Oq5V}Hh6kqX__u{2M6^6Z#rY}dC))^ZjqTi$(~ zHhqu7)pwP-)|1c0O%PD8eQP#dApYGvGaV70z+;QQY- zGRkY3|II7q<*nP$W*(Ek)<5O2)G`B?xxcRb)jD|S$sXr6$1_Q+)i)OFhHdEZ)w=!3 zi1DaX?vbwKGmjbf?^tYW_o1iQ>(RlJpN^>R+aOgY^F-qRjK#isA13UNO6g>pyx-HW z&}`Flp$GkEWMrv8hO?3p#)n?hge{prpwcM)(nvcHf zESj)((dE;T3OnyxzKktgvmm0u%68E^!<8>HUvVwCWxdMn{mRWgtkHX-`r5r2N!T%2YW;&pd#w)D-N zw>`~vU4G4wmcFau*KD(|Cz21?U5R#X-?=^Li>zE7|H1q3=f&+gZd>q?;SUS@{F2$+ zep6bCk3Uptu-MJ2T-ahPVmYF2L} z-~H6Qs4xU&>w;Ub}8n<6W`RPv1*-JQv<|T~Fag zj_ius^^=;ao-`bO*c8RqEE&;kR?%!RquFW)Xz8Vwd-ErzmifrzENl#H3~h{cuyGa^ zi_K?u-w)GhyPq)+X`E&E%x`b+yq&TSx{fYIqy3>}t;16AoN&0>fs@Tu8y;+^@Da=2 zX`R0uJkD}O^6y^P$3OPeoqzuuc^w_D<|k+!9dw+QtVCPxotUz(eTl( zP9v=-pZ1H_XZ61MZ*}Mb$E7(Z#8tf0E+0C=&U$TKesy~E;V#+g&96_d*NI*dqWNw~_tu<)J41gP zt~)s`%i+e}*~%Pu_TG86=?8bj><5Q_@F{OwUSYWRSl?5}KAwD|)beTi*mnM$-L;kY zah83Z5~Y#X*6%*GZm#I}cdPa_yQ|jif$aQ2G(YWs&Y4;H^_qNfd|Dmb?}-=V|NH!B zJt6O7BASsP!F*}qgQf_Rj$_RNnCs{Yp7u(3bgKPpOzNs#bK;Sl-o6>`Jx13u9>dqs zVQqe9@VaO|of6pO_;jjMT&Jp7l;6zM=|NGPY0U9`nrbsr7oA)>)3Gn|>8z}G9#0ud zu4SsvjTS0=I=AMT=Hodv_g*d+sAh|LzCed5OJiP$RN#w69m`f|Ea?^dxMJbNSr(eh zroP&lIe+dy%cqN`w7q0r*_g(qvSQi21J5U`ZTPipb@?HyrZp+^qE@d}d?0mX^`58) ztJjsWbvG@@+r{}NKW|!7&i_pbdat85FR|fXJMGdpx3?PC;(liq-0r%xc6(6T>F6B` zd%W|QpIs9>u=~S2hWtHu7InQU{JtzHf8WuM)u;9?c_h7IAA_{khefMIayAtHo3*H5 z!S1ua*RAS`sXCx=*iEgFK}0>t@YvnBZH31>YIHn~_4UfUQdVPc`jn(qt?7BXVNcHu z28-u+40lyr&}kCWzRd7t#R|6Ah;tt5xg~3M8yS_XHnXvPo#`2Fd*IS`v%MWxcHTR% zH7iV8_cPa9xldd9(-(`GU5e-q*ru52e%9sog0*Wu-_Y6<>v4zmY;SoEbI1n+Rh8Kd z84uTn*5+)Ste|)3VafhwKRBbDA60Nn_#b=w{}Z3zpwsuf&JB< zcW15T|9&m=^Z(O#EBXE2Z&&r#n?G|gzGpf2fw|<*Ut8@@+P!{~otMM<-rsijpU?gQ z_19NzfB)p4hD2-^hr_mfQgo zV#KBhvGFc(WGc8&^ZoaOw;rWS1=&`#sJFy&g<32Va68%hyD^bP{F=R#R(C7Un$sOZ z4lYVjXR7aIEAkmPHlE1%(BZLXo=|H>mzveHPQxCh56f;ehy0HyG>o{jP;BvW*S~Wf zb$4(k?>si+h(gdtkqn(4sl`W*nZ*@!&gfWdcubs~@yEx0JDw*qGPZEqiZ%Ba{7_b4 zJ?UXyc2TrVgiY!G0uOt$Pm|1#B&#b)_IU1EIEm@N6IITYoPJD)C+9LO)sXh|Qqyad zT#>@80Ul>Dno@qo^Iy`1gPd*rJ3by}nj6j*%sMdp3CnWJ=!SEgQ-Y;9uRP&WQupUR`nlI} zfx4aP)^%0O9On0ni0=F&>F_78VFCB9bcc3^0ONfg3;9&1II1^XD82Xi|6H-DjBdtS zetlwzi{(<6TRFelI&spLe05$Xk6dG>!uPXz3wNj&I2CbTRWtGa&ERU_P0@vNrFxFU^(RbjN*v3a4Yf5fDpLD@WV)MO@ zwb~!DdLMWN?P|NSPVT6-``1~4``&GuD;~fV$>x3I(64s+hSG+hZ3#DySzX)k-{Vb^ zy!Xvhd8(Tpmn=`vJ$>_>6zk@=pJ~B1-nTB@V%d@|_%_t%^sQ@7#!7Xu={aXDZx>vf zHhcTtw7kVTqmy@iU0o5_6q9=8cDmjb&!e*Mx+nd7^VKnGiJ{6GMqhc{(@xTg-ez$oVsk~s;(8Q*R3yGyJ0g0yKtd(@%!p; zKb?O3`fK&)AJa7kjSUIhO>DwJla_8s?D~nQ(Pt#LB)N`{y?QDx#{=Zwz0!rs4`kKIXF=Q9+s$;j#`^{P4_V?r# z$ec%N)!UaVRvH~JyXCcQ&CSgje@nh{x#X~I%LEMtU4Id^UZSRI?dk37<9C+Nf0oPo zef`739aCRjnNYlO|FOQWj(s`#MyXZP^iQ8&Qz>y$a*j3o?>|agUd-ijTx6-+yM_Dm zn#!GdjMm%M-PFmteXOrQWv^UqcX`$F4d1F(tO>rS^=8B2XRpqz ztNFQV&5Al*uQ&fUUw9Oi+I()B*8%wYthd`Aly$$_!Wwq^1^dHgtKaQ+g2ve)l@|1MH*W#6Uh_xl;DXRn{~@zd=U`x({ed^o@>Vw1gJPD7{g0MGXwZ+SRV z=6qzA%ARxRsO*{9Dkt3KJKx&lbVl~fnxbtw z+ABA6*%Uu0KC9iXQ*ueQyl2y859YNcCTtMUmCn39BfNaA z!IDcIzT2)P9oH?tk>8&6ZCl3bwcq#V1pAiX-FHs+$Ae_%z880IJ=^>J(d%!#y|>#A zd;NGa!97po(M_#$KmI?vZ}rdT>9l&UpD*It>ne}j&pP+>)vc<1N;_6<*4zDBQi5p# z!`p8T3>O2s8#Z_D*u2{MyW+i!t!ubkn+t5(Pp;l=!*#a)LrvSo<<@^Wud>G` ze|z}tLV@7*=mUXrrTonMvlGc2cw$O zMM=9qici}-T=`BJ_?pa-=gYfsMC8B4#zpvbWXXF0O;cgL zO%q=*s;IDQdWr-IMXQ`x%qG#v6qx2dc{Wdq`rPj)vs*t+T3VtqHAwSBXw>?tyQLd7 z4INGizxiYpy(m?8>z5gi)3Rh(@0V`-Dz&NFOQ!D+cMjV8h_zKK!6 z-DPK%ac%2dkay|R>};O&_Zbf7m}eSKeIc{Jsyn>7Y*{kHk2A~d*b|P`ITb*Mf&%J_ z3}&3RdBPzi$yCU7XkL@X3j4p27rLUR{9mBwvcf=Ai>a;Yz{19c3(y@_GjjU~%f(q^&Gy%o}7>6_(XylQFc zw@FjE*Dm33;Nn6b=;SK@&A+a!d&Qi^{ovKHy?XBJ&e|M&&me7oa8ttusfz4kf!Rwf zu3cSiU%JNZtJSr`-%8ijAANH-WCMGM)z>XcRi`U0ZVolv=+l@akg6EE`tUis*(!Fz{3A!{}t{JtQk4HfQ6OnPwAMJwR*PV;R1f zRUYbp#;{oZ?%kgbUJd#U##8hPUVhr;aC!DRhviFWF$c6)U8%U*xYE2gEBsT!RbHn9 zGZwL~^-@nf8|rb6^VEWdxZl67b8&3iaG(1PWKDb7hW5SpBQMX2*yhHxZs~$-;SW|f z&xmc?wEb*uPP+B}b9LJ`EUInEbYFN&b%)ue{k%`|cK^P6I&FLHVcopwiMKhPwK47T zT<|XW^zEY`_;zgiZ<}v;wffGZT&I2WH@p}8a{C6$`wa)w`95~+pMHr(2xqS@6AFQg528BbXEWNGx?C%(@oax6GE!~TuTvv7XvxtD_9 z^orZMPsr0`+jPi#V_1UPL?4T)Q+nS8T8_NUKkju~`7Of^;Y)8GF8p1xw)dOR=e_T% z{CD394*C)JZ|}Qjf;AU7{oD6`FL~Q(Zgc;xFCqdqZ{Vf9+Xb$6T1cSJZA@JO9+yM+d%tjcW7! ziTJwx7vdRTyl4Kjef|Ic@6zqR3M1!wk*U9q#)ysagt;p!~*Qkz-=vPByIDk!mNW>@6U<+ zA3ypn9`!S2mNQ09_~J2vj9s|T3nqxZoFu|ISy*$jkmqE<%*o#@`XIY-?S4*nkeuRV zImIP%id*FrkC{`vG@Cgk`z1Oj^Kp7JtbLw0PlvPm-3|)-%pdP{mPb@uz zDtHgUM%ozGLpTNLA*{#+_Yia-J%oa1?qajgzcA@P6T18Uhl+OD$+zGCFs_~S{`dcY zYNLjh);7!B_O9+8tLjR1}b1G)dU9d1?{vyy04%Agq+etmACxPMB zYxmR_w_m?;d-wk4$5(Hce7*Rc;pf!f>%RUzuD;+vH4D3>Pum2S!_r^Gl&UqFl6pIY zdLvmj7P1}dIr87CO5o)qWsgJ^%OzhHzF%^BI`Xd9GX@u2?H$o}aA?kTwT=E$;ssk3 z#pMzhA{M-}OV%6IL*U}BjTICFPZl3*-F4}q?N0DHJyY`bi0A&~lJkjpf9^2SIX$yi zoc^rOH+hn8;IR#otk2FYvWgbSePo;wutau=TH-I0tdAGU+z{<*!ozmwWScq7`bkab@7MQAgh)S`rz z89p8hRmI{oJli(8E`KN~(^YV%J+ejOP=`ufq7sM3vWTNy@>^ag3I5FqQO-0vr*WkB zQ_O+KR;{d_5=r*I4o6OOQrjs$(LU_k;zxnCseQ9sj{HEc^BI*ZO%Qcr=&UevfT21Is2Dc)BA?M zai{Xdc|~$Q9Aw?UK<^OGd+`r~EG{yJhk27{J8et}sM&Bh%)@5mF}CCb?>Hp>GZY>A zWt-D-oMleWCRXL{fFd5f;uzM`deu_J9LD|u#iwMe=WIS9-tYPOq?z%-qSNg1558Ou zu#Wx6$&=nwa3#WDcm63Gom$gtf!VQ6SJmoyw_V}5e*7z6oO$iH%Sn?RzFo}QFZ;bZ z`}Kuw2lEflHRCG&o%8Kx`R?iEeAVK2%x_6E_ieaZD*W$zP5a{s70lhuwwC|TYo_e| znatLr_v^)y>2g+^ZFSaKotv0`?#F4H-EXX}wCbn*db@q`y|1tK@Z0@y( z8JyK5ndk8|ehFS6EalO}eoD7Veulyuxn#!)i3N31IZW*C4;&{oUSL-GbKS>l#YW*r z{w&;E4sy9(aGJSy1GC{79$w9~!wgFTGXF>~WLe1O$o1(%y?x9X0m-loo6q|d?9l! z&(zn(E4T!9ov(5d{6Bw<%8Q#!tM)f)E?NP_pRdT}eOws4SL^5zuh7YTrK`8R)DrHrVp-hvetCYVR?N(*pc5-Xmo~Gk zJ~A(|0kngo*4F6?gZB-l6k*E`yAPNgUV3@CsMv<4)?3N{t8P40xyICO8=gGZEONiw zwT*L4-#G1ziah%2Yw}v|Tt>UoH!n<^wq^0zN0~FH-MX;p8^fyF+^Evm4QIAxZ{D#r zcgdf~$bGxaw#gS|XIpDKwI-RiHUGEG3x2ue&I6mx^Jid=}}~0uer88*1Ps~ zb-1Ozv<8d6|3S^OuS#^EK6vQ(V`rMLYNwXXZtlb3`-SI;w8uVw_$Mj+@H)qauFyA( zQMQf@25pATOg+ zuK8B9uJ=A$#_mZUf0o@pq^lImeeT-1Z(p}=*G>E~OZ}FfF;`>l+dQ*3(f6uGOseWyv_hsUQivvzYZ-JJc5b*Z@Dl(yMVA398|VCTsDXqymo z<;0DOcB_5)?bS99e#==L<(^lldL>3&OI+}9^uLeOFFQWbnpt^r{{N)hDe}tCL(?o9 zW6u@O5RP~@ZQ`j5Hw%hds$ai~IKS)K_H$p?O?JNQ_Py$AZfU`$?!QKf+jm|)-}h~+ zeC5@geCs=><-RMs+Fr>_x1OOq_xtAebN$V~U%T)A_S>%FlO8kq{%mEtuXa@W-^U64 zd!DHK|2!4_@6(L)d!Ct}|9P(Z-{%GVdtbQw|GG5$-|2M>Bu@7{z zn8~7nC8B|?qJd*Z1J{lQo*NB(Xp_ZgJp_$v*F*KHJL=U})N9VD*Y2oy6+&rXvN3ca ztww|&1PK~~p5*X)Ujys$Z150t&HHZS89qO>r9fMRe{%0@^Iry@4%S}Iz3XVz{s$Xw zEYB@G`xvxE*!q;osWYI}h(B;o2R9Z^nLeXu+RQm~n`X~jxTs>m;$_P-m#$d7CUn)> z4IACoZ`!)ee9QJ-yLDXl>_4Em^Wc%A`TLIHJqU8`VH=)Tub;i$8|eA^&ATu1FRVYk z`ubbuyVXygADl-X=(8VasC+F4UH`XBGVaJnpmk*M7D~bVX5e zzl#`XHR8z#wq6sb)+dt#+a6lEZpA{hiaRz)G`Wy@5q%!5y7q)d95Dv)q%M@kM~ zo`pwyp3{xAISmIqmn)Xt^YoZk#dRoszLkN;!TAl36jme`i>*4eP)J}^25*nwv=@uj zU0!J{mF?LYHgitdt(6wDtX{rcu_TXkRoLult6r_LnI{#xYRxgN*InzBSYNN%@k}ad zt^M6quh$<~wBx{rBVyTaHl9#h{e~$>541)2yqUsVlr6&5Z^iP-I&oiD6j zgSQB;+x=jcQr@mFYSnprfAIZ&x9`ul(|LOqpP8M%?>nE*`u!a0YYYx7;>a=B%W5C9 z?vP0M9lgWnR%U-ZCQ~mxwf1#h>T+u-$y#_6N5YWFL4kB|Puv z(;4aOcK&A+y1x78^99ll+fSy=o^ashisFV}FU?f+dY>#ju4nyp?q%!WZx;#sRoz^+ zeqO_?)!X?jO*cHwvw604d3DX3#nWS|IQRYE*ZBU>^c>%hr_<-#e7l)`&*tR$$pW?? zR$hNlWpbyy|M$12tM>o=uH0^a=*MOD{C^+%jrhvmf6IQb`*DnQJja%#`7anhG&ESB zJ^m;ev_&|N%SQ;jMR=QTQ&6ElXp8X1L<2YBm{@jqiEaF+&RBl=een8@t^5C+NRC$D zbD3-V*R3L}7!(ZN%xp#w<{ zdqm>6-LHu~xi8o1as^h2 zN(Ww98fCgNbZeH!>@F)lr>VR_tja2zR$ZN&^tC@#Rx{lH`PH~vifeK=dPlkLy2i4l zG>ZMi>Nun=!e6<<4`+N`EtRp5D`y7N!CMD5?y_7HZNK1#h=CaEgjmP4Lgky8tqV43 z?0CazcKgPGcgr?k`laKt(EZ#crf(aU^{xpOoXvP)p2HS31>Lmd+0s|c9JY$>&CL!x zF!P|>DT8w?jCtZM^Z6yV?>zb6^Bw!N*R7AZzU^q7xQ=~AH|uLQvE4Nn^VoM(v%Y5% z+fyz0-u7dqd_~WLo$t1u-NttN^259X+jfessWLxsg6mB9_DL5snb_c~5t{@Jt}p&q zzF~dsi!4ur8-KGF>=&shXfafLz*_y|uzcQzKvSNF`_w`fu47%(YTWRUbHa`Fb6yy9 zr29N(?5VdHl^YtM!uR*H#(N zd72Y1d*kPM>3zQQ?(RuvIA?jP!LQ_hT&Zz}toW_M_OQl9>a`4R+izZUShsfJ?>Wp~ z+P5xUxm3JtPfIN-cYh_a$COZ+L}7k z%+y@Qgw4OM6`wRs-LA1$=EpCFV{uzIR7z(v1S{NH<+d$m%G<`+Vk_43$I2L&$!4$% z>}Gm&tt@88UB>*`Rjdz>neF@^)mR)aefw1#_ioDv?{e=c+`Bl>yhk(PJ?E0@O)uYy z|B=}4$nM5}RrQ_3wmKhOL0P7gTqkxMGe7sSulmnpg>Z)H?s*R;%>MI)D`L*qcix9K zILaIn+Anr=d1|3^g3MEk^E;1uo-1Z~@#nebdWL@<|L=ZMzh(LC{5$QK<3%5(nE$?1 zcyD=fVPEmo$vyX7&3CPs*cYyu-22k3-0JG_d4((c=e$wd{_Dhsd0*G-!C)>QWXw5wwKi<+u`eM~=Ro-eds_gM5j zrU~b3;x78goJv3aspt5fXNu>4KCF<7UJ$?Mh5P%Lm$;vQx$d?1YS{T-p1bWVHf*2v zX0_YzTk5~Q9XR=SOTFLweJOwQlGzf-1FjImf#14gYohwQYILh5N6saP>aqv~c~uaa-fx zz(;ld?DgNjhkJ)NuvOHU34~v5tG~Rcp3kHF&vF-MQ#J+;RVI!SmKPOTX7w^R8s~lG z=Xeo*jj2(=qgc2@QdEOY{D+Fr zOfNp8&9SZR>5{gPV{Mlm+YUe1b$g&!ctbb+MQdh9d-jU<+!O8jFWO`n+B;M_^w>J~ zmB5CeBV=A(?+E_TG2sNuB#Tb3fX->?Cj{- zv7+a|jh=HqdM-%xUb5)D6486DqW4Az%d3al3M$>VHMHcNy6^vBYG?0${DSG}kFMu8 zm|ni&*%BlHJOgeTpY1sCss(SF(NGF^RpCO|El7gyQ6@FD4~2P5zWIIqMRu?9IuLA?V{P zCi^?~?KbLuFVVkd#uRtXNhX#|cXpU}h98*{+cd?+aS8z?rcKpOT1uNle215_R%vXXCuD7eFr{N zUVx+fZ5Ko2y0*={^Fc>6wklPIpPIDtN!b1e8!B|p>^d_^ckN5n-Sc7>4~elTJR~wm6%5~!jBs&Nw=LQGeK->xyVxP zrQSD9bDNp6LW+aG+LTtACR}rlURn0_d#HQF+T_ctVzKUQQeRys&crvTz~EtX8^5^E znhJ%-$0p!ER36*X((;ZfXSv^Y%(@oWA0{^>Tld-Y6y=|pU0>;^x2r_!%GJpIdMl3R zr<^`o^gi&8Q>E~szDZRt^fUJfGuZ95V`p?=#Fff z?*!gvHnkm$1p;M_VN$Ik8V?QsNPbc%78Tm@(3m^Tqa#9*&q9e!WY!CX4n3|NkE&Ex zJzUuSPZrdd`1ay)zeCrtd)%LImM2b75!*R`(%-x7Db+q&5~)U(b}PNwg_CwVS26Nw zHcr17lBwDr>~=7<-#AS5*$kZ~&!v-dCS@M+EI4*^*|dN;CzEGwUy}(rR35UNh14S& zAv>GaY`K;N-`VtPbv!TVbVgAQYn_e464g4JPU-#5{=fNz8h7p%_K@tiTiO3~z1?;z zuR3@8y)f>)9V_?}-tD~T)o@_fn`N&VcE4T5{eIWGbKMSmKkt%0wB_Qb(`)vhXL_^x z0JHF(tj!OjvK#lVRhm<7W6bKW00WyfR4DkMMW<6*JGw?7;gb+0L0b5={b z;MBo&XEvSIJe;#(p9%Q5q33(_PjY?tDm=gEpU%4THvFe1Gc zjRChGm|Q)S*4(1&5##H)*{?#E@kX7N+1Kl#*A>3qIF_~7baJfpY29m)#v9FUmb#T~ z+mait`~6N0`|EGFJwpVxZ)jlG+i|zPzPs#xrSmrP+Y>Ht*v6bG@A>2Z9G6W6miH>| z%(aY|<=gl31y4+7r@bvB=~N;6L8NPowt5X%34ul(`qD}}uC7k`{s ze(oph0q^EN6Q|qOTi?~qeqe2KmV5oCuc`8CwasVp=O6r9aqgWC+qv%ky6-Ku`x}3M znL6J#^h17_J=^#454(T8zI^_FZ_6X$)hs)-m{y%?Sm~s&N@T@mHmeVf0zC^@)IAPz zMM0OdoH)o=h1l6N>qCo%&qA*78G39*`jzcP4}aVccQ9vcZfl;D_2Xvm>SI^L9X6)*6Xg{CUrOuV_CkqoDYM(Z z4#Bopn#z;Uop2VEoamM&^O*l>hm5J+#NNxN7s-7;0qRTG1e(MsI6ggch__(Esp3#Y z(asasd?!xqeIqQzt?I)4^kU#tn?PylsVBvKH?>W4;g|h?#q)0Nr~VaKw(trGFXg$X zUi{;j!P}sKonMq@RY@`>zU!Q!VDPN3$?{ad#`QC&Rz1@Pv!jjH0OWhbAi~2=kA`kJn4?eQ-IceLl8r)6QkdyWaoUQ^%Bl@_B|)bu;t`U##_mYBAO$9`H_P9$9ehx^1m**^RsR zoNhVYx&P#8olD^3XRqJLKXiQc_S0w4_YNPw{CxY({>Lw(cfR60!Z&fz>64d_pPT3K zcn^n{$kFqQJe*~GPlcShuq?pwkD=(+=U0M4E8|qBnm)f47+Y8;DjN3e65qd5i)>a; z)4aXSn_v_iMr)n=}aXS9L?w{pX zCM~9C2jUy0ds5w+{#YJ(Aixk5>RxlvcSd7#gu@PnIIqx-tF511k&f_XY~wrdLaCss zMd5MJsjD1^dM$#MKW4Z2c7wUcan_1N?pvIm4})V=R;sYMFM9A~vY1Qdp(!D|4m=Tw zNYiYbs#fB8iz#JVrrOLSbD&4~GM)1HrZ(sBnat;NvyVyMoRj(J<@32!PRG*c){DJL zThPy|)w8hY+035lJtCYhmrOxD!dF5<;nj*IQWsvVOa+ZKfsXK9x#HK&o2xg@`}Jz= zj$KjO^ESWQwR+)BHf^0X`}f_dmGtYOkOD-?+x=wfg2O>$GxbFMu9L_jbFy zslvM*PrAGh?0n%C_-u$|t=8ZFXARhW&CH|;cAwIk4Gig1Ku86oc8A9afNoBO~+)ot37tIgLb}Z9=6`V z_j;3#@$O0M42w=m_pkYUPU*4Co0CsY*%a>-JlwPCg4X4jMat&C&*+>FaQEGGc|DV@ z-X-nbGVl2elWQ9;*&E$8zIxazx9oDt_N=Wt;8N24&yvO&VhN$}asp%`v2W8-Xrhpc3xi}^LNLb#hrieeeZZY^?cRi?0EJq-#ZvBJ~Rr*9Jr@ev5^B> zKd>uoKXWrb_h;|}If)k?yg?J1qBK|A?{Zr$&M2~1s&C={ zms|DkcjCKq$2+8MeaNx$dBhg|W2ZRR#9Bw4BRt(J4l2L$?Tpx?ARPSMMe{#XV5-6w z@i$>Y8*cORHpcyl6X7&Gx@gM9p6n?L85Irfj|e{PE%1qyNWRfwrN-J{d1o<)B&%@k+{;)O*k5^L(e*w9ccFq$lWbF#$i7ZLS?DTMG(Tjq ziuVLBjc=GHaF4v2n*CYj zh-cs`=V`x6mP^)VN+(JAFS7bF`&3Q1u;(p~1)oYSYS!|;h~FQ1gNY}Mqt`YkNQnEw(Oa7~_VYTWxXu(k_3!egJwB3Y{Zdi= zN?TXx+|~(REfnr_Y3qiMF|RBFcN<-O^kub6=3Au`T+x?KZQEkBHz!fGTjZ`*)Aq(* zU2%WVj)iNh1^(;iMZ|L7xR)flBC5KvCq5=o zRNmxptnUZ@h&jP77bK1`%-uNQH+PD3vB>ddOP}_M-$_~#V%qDmHLG0sbBfusPu#g7 zK2v#Ro|>l2Jav&-Ut{T&hm*g3nj%=7b|I}SE}QR6sO0jL))EQ5Vzs-~;ziH5 zJ+WNL`||ULYn68$%q?~5pUMAsW{LGwIeuB@6Kjj5i{TTm+uJ3k^}XD+ys;G^_ts~x8T-Iqqc1mmfGrNm0!KJ z>Daf%mwzs#sQ=t{cb|`sZbNg*Hg)lD`@a9Y<(BUmeXMQ;!w!8m4X(!LzwW=}t~kV= zSD<5JbC2WsyhEzzKD5q$_^@Xi_c89g!Z?8%KI!*`$xd}2``$l#th)Ti!D?nT1=(4y zy7d=Nhl><%ITPb*`rP4IBA=4b!)?Kq-_M;5{x4EeuygTqxASb5Cg-*48s6n}t>1NJ zx!>1S(SPBSnbm(^C-CpSaoq3QrrCerWccsCb^YA8ZM*-zEhu-sa@_cf@L5@A>*GH! zO$;elejDpm+kfHiMd2U(mU}Ifu7_Ocobp3mci%@54VwzN|HX&G=Xp)(U&p4hf9{#{ z;V-85?}kif?t7cg$-XghLyq(lTl1Cuf44@TFF*0z{hQ8;IEC)-=^ z_O!h6YxR`6nd|5Oso#I;d$0U|gR}qbn%{r_sXn#7uXg|Zpuggk-_zw8HROM9uf;i; zDIu^vyj0qwRMw(YUZYg;M~U)`MzrOQe;Kp(Jg;K5s5G*u`BdKEbVyO)c+I|YO`98u zsuA*z7H-ZS@~$hIe|@hvxY6SGqa{G1HOQhhB%)QQqUAwTt2puy1_J{dg9BoBEYgmg zEQeJ_Ij{GYo(}!9Y~6+gZui%cpy|-gUyLmQkGehAMy-$N`OL}d6?=0-g^ykC z?t9T2&*beso&F`nw*EG#iF*D$k-K9PvzM+|v3%v4g{#+Yn6rN4mg$?f?wGWFC+YX% zNteF6_u=E6&tGnR`+no+uWNt)Ub(=qMy=q%mL|5viatMb6c4BUmvdrKHdHv;bxA47 zXIbInji4cnE}TtN&@B`2A&f1^_u>VhpF%cm_r6b@+F|@RH&vWlv~_XW+S%LC?!|k5 z$)c$3!p;-o1qp2NEZ-rQxV6px!MVGM=I`;GLRQ4PDf|9BTkh}gi}yDlSE{T2@#)sy#rXwwd#k>@eK@&X zzr6PQ&re5-><{eUU;pp%#}9Y^*R!zAxLU{ZFMRclkE{mi_RkT8~Z=i?UA5zsQLT*09`qzMx$!YejRN+N@KHdX%gb z7fd*}(r;ersTCg6n|WUHEMv@=#j(7p;ug<}MM_Rt3d@X|vnKVe;qq90de5(9l}-N~ zR~s>Zd9`{)-m{6XS)&hRwF#@go7J=aj9K=Y|7_Fbg5In(^NChAKbvNKV6&u4cE?t$ zux_2Lw=-Vr?3Ag9=GftK@4!3rXGW)W*=k9XzyJWz|BkXhT@IN=5lSjlu?&w=dIIlKbC#KJ%ef)zNcVRu}^f`^k zudfp>+OF)}RK#k~Ufn;rntyg1yx0hZ@s=fR5MtnB!*ZmfgBR{kLpZa$C(SqGJQFjc>b+%`eyw3T4eC5-- z?@pJuKQm`H4|hHAutPms?P%dK&d22nf~^&gvi!4(9w*zKi~aw^*|%=TqwM9qmeXhD zAKw`;Pnf~#^z{C7#@!QyuZ6r?U43)cYyU(0cE0hs7+1NZ;c;I4%Ug5joe@(MsdHsI zV|@SVjpXC!tj$jNKl=IkLb0xG+N}`%lV7){`+xb?U--CI<-vcweOI3Zr|lD-vSj_; zUl+E&Kl^jSiTSdBFTS_4HU7Zu$e`J<&79*w1Bb{wrt6QT6L~%`^G|VLyxVYqMejq? zzsGW>N;eq!{5J54+9@Mrb}{agPXQhYOiNTve;D%XEUkuOetHsYfn5{Vm)g?zXwlPfX*{_ z0f9{uJS>;66)!m9+SQRS?68DgD$-8$DsTV)-HfV}J4C&T1SbhScxd%%24hf~+oV84 z)s0yhEP?-8rz!+2O%LD{jSM?5ZR0{!*-!1p7X+Ixz+WP=gM|{p8KI^xy^G= z|2Tz-lh5x|Fa2UETjzCr{zb+Wr8(AFqV9FED{9L! z+43{V*+#RDJt(-+d*J5_8QZP^o{TA`O1_6(!%tnBw(HB%`xzQ`E0r(jUJIFRem2dI zx$8*nw=MJS|E332R!Pnm6J3U~J9bsba<8kaqQ0(*IJ+ur`>Ctzs=lsH*xPP8-#F~~ zl&zNOseVz@H-|lX&~Gejn!)mr>(c!_q07``&&DcRh3q~jy1r1i&s4c<`Zl%W8%{XB PDHO?;Ii{q@#9$2o<<>Z3 literal 0 HcmV?d00001 diff --git a/pixelterm.py b/pixelterm.py index d47d1a8..ab4409c 100755 --- a/pixelterm.py +++ b/pixelterm.py @@ -73,7 +73,7 @@ def termify_pixels(img): if colbot == coltop: c,te,be = cf,te,te out += te(coltop) + be(colbot) + c - out = out.rstrip() + '\n' + out = (out.rstrip() if bg == (0,0,0,0) else out) + '\n' return out[:-1] + reset_sequence + '\n' if __name__ == '__main__':