From e3ff5eb8e46476d81bf574384b4791ed44b0064b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 30 Oct 2023 19:53:51 +1100 Subject: [PATCH] Test BC1_UNORM and BC1_TYPELESS --- Tests/images/bc1.dds | Bin 0 -> 32916 bytes Tests/images/bc1_typeless.dds | Bin 0 -> 32916 bytes Tests/test_file_dds.py | 15 +++++++++++++-- src/PIL/DdsImagePlugin.py | 1 - 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100755 Tests/images/bc1.dds create mode 100755 Tests/images/bc1_typeless.dds diff --git a/Tests/images/bc1.dds b/Tests/images/bc1.dds new file mode 100755 index 0000000000000000000000000000000000000000..faec63a00ded5e10985a385d946c243f28f5a1b6 GIT binary patch literal 32916 zcmb82UyL2+dEV!oEm3j>qN!!x)DEyD%0fMInl>`8Y6lE$pg`mT1j^xI94?2A#0x2s zK@^~lL6v7tRVi4owXeLE$eSE2x{I^pR?dwPc>~C7FQVis@&&uK19JrTBFqR~#tMXW z=h!p-J@5O?o|zSM(FLSW=l`7feb4j$`Mx>&@|XY3%D<1I=B`c()x6eN^QW<_=9R{@ z&UZDAZYA-RrQckNCa(>?$n7|e*RL#n(O$2ys_I(fysFbx#yn5bFE0J+5+6JH0=MJ! z&F#-J>hr$1^jSTx{sLq1CuOQJNs?QiVT?C7H|PD&E^YHXje7pP{}~%Uvo!CIlQb#& z^FD94tx=EvxL@`!W?Na=|8c+AsmK49u^z?4A2I6jAN9ZApUw2Vclu>nRsW0Ie9PoV z+#U{x@jKk^AC02#_uuRn9M?OH@0OK~Nqi%Iv;S6qdAT3G*?+~}Ph+`PrW(_PGr_3y z!N2u*Y2({B$2Yj05949n|9pRClFdHvk7pOSy~BCZSo4G@88`22XBu_9&-9<U+(A8qbCd~d%!Of(K}#KwJPGMS3+Y?@_l?wT)wdoAwOelpUi^CHft zCbLZ3w*ji#CC?Y{x_s5fq`u|c*SC%LU7pu)XO{GJoZ_D5=?(FY?`*+o@jd6Br@DP>HHQ0Jea>h0Cj52Y|Crl+Tq6FXTSK^y`qOE) z5x5sN&i87Kb&{-#^JFra1@4)RW%a7Kr@PL5!W)QxR+N>-y>hP-_mp{I-0yC7x$}j^ zJ-xNy{v>2Myy9oQC+#?m`(OZPagU-l_pGR@hWlUieyG=F;?2j`8X0U%li_Nc`wtH0 z!S259&qvNZidJUgJIx+;xX%N3@e%Jj-8J1KJL4V=W;4@!;9m1Yaj(j`>HSKY4#hX( z{E7E^w#__&H%6k7w>9n+C(5|5OTY6zGBLexZu!X9TQ0j)xJT={DbC+yP@AVKr z_o|J&Yg7-#3cv)9%8ZP)vtZ``w; zca1lGYI;xep!b!D={>7T<;@0-2JbT%8~|9|qf>p#&6f;+NspPx?G zRuB2Se4q1W^FTbEJ3@dzhi%+Bt)_Q9PkI+eai5oIt}*5O$miEF@J8p&X#4~BSJ9!k zU&A>55`BaJ+tPUqclrF=dyi7*e&F*5dKdSiD2;nv@2|?=v4?@U&oIEZczpBjf!@vM zM`>(6Kj|Y}9p*9>u>bojcRnxKGz+S=;B)o%#GOMsD2Kx3)Xn zIgjE#A`Ue^@7#-byW9s)ncgw__j^C7CDS>z&hIG&LBgTwduzH&->-}pOxexdht_{F8wr9J^(oL6R<=^c3*_eV^SHvf8e_eO~C zaQ{Mx>z(*Mkk8jiIu!R!;=A;|$@|Uw^7*0^_Z=p(`+Smo-+kZWJ5Ou$?(scM(X;uw zao^a;WhPdVi}A_9ng?cjCKo$0v<@gr0-mjl0f+^q!`CicJBR1+{vRXz84sh`}`<* zzxPMzdAer2gU@q(ruTZ7#KxWD`zG^1=jmKW8zDthg^8|S3Uf5U=e{>t0G@qX^FWNp|?7dp*_JiHT zxf8#gdtuy*otwtJ9+BXPI}^XryKa|dY24GG_w_|yXWW^0?(;3ZE3cbm54+s6fpO1B zJOlS_@g9>f8uvUMeV5zHJH;J+bo5@OBiB1Z7I&RbaWBfG)|jk{dt&+(-;JMUZ@0OF zy~CaOe#7*>67)X3?LN;NH@rW)WV#-h&*zExe7wHBE&hCblh>KfOA-Og=hI;-y~iYU zrgt05{vG0@xMx*07WX{45&uZH`BPq(E%N!`^XabV^UhuV<=lNN=e2Q{&w4)ZdgpCC zugl7@xbNeW^7+Xm3*3EF-eh^*KH%XznQS!i9levE7w+@>Op9lDT)rjUGnCSM#T%H< zr}41yd2wIKvYp1~KSJNct+LVk&&c04cmv}-9y#~Aj$QAwS>W#Zd^$|z^W)m}PQGtG zUzDlw&NzN?&-wl@Gj4K#fp_tDao7FzaA@&eJ}A!kjOTS6mvKjT;=NPXbB*IXT{XSq zQ@`l{%Qkn<@0eHS^R@dtX@JFd-tMmSzHND4E1&0k1@0E#d7k;a@>$or*KwS7)B6mg zZ}NHLUzNt4(_%hP85exM;CZjee~f!FbiGeErf_|wPdQ@zk+bVvMlQWiW}eT(RsLQU zwd;K}H14W%g3nuCr}HoFq^Ae*UEE)rWraq<3_h-UF8I9FaX;)aFO55CndNmA0NU}L zG{*GK>Gym-yuHZ>Fo%?|;;bR@S_J=QLTI=Yys92g9M~^Gt}g&vSUjoq2EEUtnU2JLiA+ z4UJW5{F&b7^Wr1kX`SD&G1PH{KjSVw;tn3;{b*h#;-1vQSb2LiS(%FWHWMUpAGGVZ zIvFK%IBQ-jpTD#9BKaL71%F9?SH8Vh$>)=wtTuW-i0|L$@huJ@a8J$Wna|>$5eSse zZ*OmTd?&z*J9Uox{DI!x=XYw)>uUO0=JT`HI(Z#wrs;i5{4}43dlTQq``x0-jXORr zovR*g=XJ~ryDb@jcXWWtY3>b(C=-uZ!2kJ55Jkzo)6^^U);p z_?~sSryk#rQjdr~c2EYNH}1;o+~>EqP49bGcE!C$?=LYbuD#Uz*NQ)x={!%(=b0`c zzPr!!G}C)Uqo?in`EWJl^MO0Ue4Nie$P@3|Y-XK4?F(CX&F8DK_WC`|JKT}8$M>p< z@1D;m7^(R@eG74B{#f6pDE2JAbJ~L5yY>4H+}!6=uisaieBR@GQOsXeexHwMbi$Xs zsgu|36?-?0`|9dYd0i{M8+ZCuu6O2Tm;0iQQ(lMMi1YO8XxK^b@-1=q`{7?FtKv$I9 zI@kM7;XYs2x}7sGoqIQ*-{Zt<9*me5itj5cGt1}rdX~>~x{dpgIBNa6{>HRjzcX)2 z>76{ob?4K?0RR~bh+l!7k|<-;~oK4 z{0ZX+{dx0wjNZ7@cWQIr*>mnG4Nd2sncfLMSH!)j64N_v6yuFu+DPA_{{7xp$O~)g zc=Gwl)bl#NxNeJ2NAJX0<#imF@!sbBeqmhi^14NzcAn<3;`@f_m%bgm#a(`*ysj!9 z8TV0oW7y8?czRdwIuR~r(zAo;w>0$1*amP;4`?uBBi9-F} z$>(?R3vpiI4H};p@1m*Wcz@|#`EEPDXY;wQ%Y1@+cF5~K}TZm=xwESFh)zefBJZ*1K1dDc}9=XIw0oe!IS-Ky8` z(b}PWzOFS7YJA6iUUeRQ`mCxnW>sPFJ>k5Y&vSfj?ktD8-tmKWUN@N@>eCMT&YixE ze4goPK3`TI->W=@d%JHF@_G1(domh%zm6ALeCLZBcfP+k%O|9F)y?Mf2v*#sYx%tL zEb*4EUP9-^PPJ!xC%=1^+uWT!+k0A%7p`-!->Z7>f%vD%$osU{*0;>x(fi|kzOF-j z=Rj1)X&xGPCV=$5hY`u=ndVJ=A1IGsr=f5C`KEra>s)%r7R={wV>BVY`}n9zbUQch zqds!jP(0W7(1?$Ee9u?W`^fZe^*iT5yi4+4jhZ*&OnBWe-n>pD^U-}CpB3+z?;E&V z{m$1g?m5TT_`K@4>BhsuKEGyqU(|8mmd^QjuiwY&&$qbG7X3Qo&WRH5>Dr_d->bda z>NrhX&+DZ3m#FVOpWmzNk#l#QH+rY7;69(HH@?DrkbcCSaxVKyZ(!@cZJ$r;(a7@o zcr()|Uw9n%-%XNEpSI!t0`-@;Vp zi(CD^a(mk0&Iegu$9c2(PJ!+|AM!f%p!hystix_JJ}>S&Wj(j}PXAuKHy8E0_igZD z@7pZaoT6t*Q3bdhC2WnpEtcD_=da28bfxyC!Ws(QoI#s z9>;yW|FP9^>pV|--$Exr@7rhkf2ckmc^ttus_5%ztm)tQ_>PVJGoIJw=vnvw{KA)_ zci1-(MJJ=T7%yFY)9(Mp@Enz!?)TgO`{m~LxoBkfpHoEV@n(Fbe~$M%b}Y8nfBk}u zW9dDL{@Ll%ryK6#y;D`zw_}%z>zyy$?$c&fnmlRm7fnt^Px3ka=v4G6`@B<8&iB-M z`$<0UAKVXm4|Ux7=KHph=Yz{O&SLtsJgxt|_#87M=HKU7DPy_1e=_}!$UwJvV){btVns^7Cx+?AJ!J9glDXMwe?cRl_rypdCF+?f{x zd;nZzan$bw42^v5W4Twg_vdNjo6j@dj63x{&-Z*jU1EO$x5Yoca{apa#vdO)F8*;E zLHT49#~07*{(kTHY2Ci?bsp2>@$kZ1+&*)B>G&&*!^`I{hs3ijUN329vA%S;`MSoX<3~;#=X+PrYh*cw=kZ^G zf1F&s_a4*WK7Xg+-8-V0!1H!L{ppj@XIV$n=g`NAPT>DhbY}g&`TQOF;Fi}ts{f~P zA74qtox>`{TRz_9p67?+yXzh9zYTBfc4*uwKnJ~L{K9!7;{)!>>sXg*`tz38u^($& z{kqNV7hUh0Th#OTJo8cUy-q)-FVn2cMA3Er#Qivb@_X_+)@h%MuHKvQtzYS%Jv*5+ zJ}>T4@M?L;q_g}qwcH$h5JR!Xw;ZNgv{&fGPOXok(2!7mN z_4|apPOrOqm0QMNx*w;p`TVszSy+D$`>d*)?(=MXXvg;n=jS7M=zYYQY4ow{KEl_z z|N0fv_vzC|j=kUOMVBsLxbQx{aQs-0C~xbm#gqM`rVDYs|Ck>ckbhKUv-@3mwdj_JJZCtmmhk+js>(D*>>v+EOE&g9( zC!P3MUT1ws`Fy;t^RT|Yej@C%q94cij_#R`E)3%nx_#u#edg>QW;GTmqB zUGIN0`Uc|}3{kgn7Sv9^j`(DH=LB0mPeEneX{axJ{&PL$ea0P*uJ@m~-l?aSnGfsh zTgJWEnU}_&hFW{S4KlU7F1CFazTZ;u{RQH^^uF_`99urWf6%uv?imx()??v+4yQ++ ze7|?ZXZlY6OZp<@aVMjDS1*&t!T-eR<8NAgoqS#M|I)=c9`X3;WBn!FzIa*welj|C z-N3q8O^_m{5_-Z zs4=IGYwLZ5KzXQdL)~WcXe?is{@;W1dK{y3cwM}7U1RU~nfn?qUpoJL8jl@6gO9%# zUBv>w+j~8NKauWS^xALz*4c0No{up6>*x3~pZ?ajc0bjBUdJ0hPo~2diTmYCm(jWT z8T1!EuYR2CJ@C-E`n1E(gE-xJ@RdsDwN z-^5+>&f+^p;&t5P`?R##=o@_0D_(T{Gktky%kcQ>Z|P&=lgi{Km*OqP3xF7L@5Ld3 zTKC)I^7BjZMi&a;=KM&4+ec0xw|IW}@+Cdho}Y3Oc^mf8qL(wLxtBWb?dmVZTkreD z@OU#4#d-dHqWOEMDvFx=z1dgU<(~DQRvv$%iSt9;%s(%JzaQsw5nq>jMfVTM+oR~u zkM~eHw})Sk#E;|qxp*@EdQUp%`%C|qFI-w-evddxtyqeen6d#rMEnzV7@}xZ?zT;xT-Shtc(7-^I5>KCk#F{(8A{A9j3x z%IA9hUWR?tIq_fXu&Y+b>2a^$vqB@=l&p^9Vei{eAGhnc9Rz7UPajr3Pxx;7Ha=3| z%jZdJ&F48?p+8?({m#0M)p4|;d_OIPT-)c%vQDIT(w~F%xUjFXIKi7M_{W{-IyZ6ZZb?PrP zKHsdzsg5r&)Uc1*xDzIgyUxGW?N|19ZLGELqSdznfbnj)lUIs!^i+3UhU2q!8MbA3 zpO(B?bsR6>^SmytEw4it;?37~?v37w&kgs+=bz?zq%juft2Ax&ZayzQZJ#gc=QKVq z-USylXyol{jbr9z3KfU~@AX8n16Z}BdfaK=4N zypCf&cIvpYvi^L&+Rf|8k6L-1_S=O0bu7f%dK~9ZylJo4z6+h7HuqWP{W`wB>z#FE z)B8&3(`H2#^qyLOes#z`3-(!Y;L)~e(}5x9}Ib2y2$IECf}cR zeIBDVy$=Q*pBGp0AJ?l%+vhc}+T2MGlB4ivnV9ui>Ns>H?ltrIM+bGB=kwLowzR>SKD9Pxo#pwkJhil2;1D*Z)5$sae9O6CR%zA+-Vz{-c_HAd&D|tqjww2 zxp9BM6V$Jnptpwm=lk&duzDb$-~FWCZJ!l>;(E`P2iC7U)SrKJ)Aw1`Np3!W6u*?t zH!vL2d%nuLJU*ZLdfb%#f8x#ZL8`H4z8ZHv-~01{``4U%Iew6I@_D#O_w%NXJCx7M z2Rre-zSXJYc)96aJ}&O_G=aP4b>b~Q(5U!t{PSe>Vf1ID8`JDz^j@^a>y0~ctKFy7 z`+9tD`n0|di_KYl*L-dJd};pAejEB#&i!CL&V9bDZfYKY&Fi?M-Su}~Z``Xi_I;I4 zc^x+cm~@^I2Q=a*zR!w=r}(q3UyFNDj6>gM(Vq`Ke<;5DdfdT&S{A&`-(Rg=@0IpX ze$wa19Jsg>W?k%6(%J)c*6YWsZkU^HyU_l@Ga=JO4A8nm~ zy*JlQxX(A-^|`_4cQnFntnmu-UEEi)*QVmE_cz_MpG)JI`DOL{^mfyqH=obmt;X{E zn*F8H_hc>T9i!0gf;b`W_3&0$kJGx$Nw%Gzy*?n1=5#Y3tWG+nKF#&Zmp+K1Exu($ zbeF%&&&}se@7O#(e=@py{`x&ViNfjPRv)W( zHq^S_Zy9&i+orxAx9Ryj3+R^5GcU!NWt)TeuG<`!=XLiNdEHx()BWOn{_;iQFZ@=2 z_tK{Vf7g3isIDUIpaA7MiFng^(|My`ds5Sa{tfZ{)d$JR=nt2;;Df&Xsi@cc@9e+O z<63WLh@LnT)2{@_i+(%fem%Z?OMO}urPjxx|1aKg&^!HkkMH#B+~-3+k8q^-MLxf4 z+zI!U^19oByXt%OZ*Go99^Wx4aYvVh`8$uB?h$lb@6ub_=c_s~?z)~;oO!s=s5s%= zll}Lizlv7)M$TPzfcI&wj?>^QxPf#}d);{7r+*~wm-y3sP~X4NyXt6h zRreu|zxUt7owkqFueseuy8WELdQV9t=C;VFYf35{0Mzm-Tvx% zeV+1E@6%uOK5cyYs;c(hku&Sk`-gjD@;UYEoV(7SxbM+F33*+vypDKg>#*db9iL}< zlg}^nj+3cIo!7R{;|JvPf6X@Aqf_zL;~K&0dZ&;QUoOj;Xk;6_aaSBL?rAy_clp74 z_@vego4ihXS05+TaklS*%hX)&1<(rvHbdA<2NpRZ9qVcczB<(qvTrhBu<=Zl?p zy?#&VV8eOB0>1in$j0_rQNLT9C;hbjb?Q4cd7bh(>V;f-R^hFFT<<$^Z2Yfi1?^|O zOP416TRwmLl;VN({|5J5ps(op{E+omeB=7ns~V5c$U7Nv-3xzOf4g)+eS7k{T=_il z;q1M8;(q4Di4(fgWtl(SKFxZD^uD>hwY?Qxu=SxRdOkWkd2Q0H%gE<%2kzxTUYDm$ z-$wq99E)zBwyEQ?PChR`F#cCYsrfwLO}sPSU!xw^Sf%^PdpyGFw79Ov#k=AO&OPVx z1@|dW5dR$}hV-s7%Y2^qZ~Hvk<7|Ij%7xPMdF>N>1^si`p~v^4u)MC`_q=XGgI?VE zc#H4Kw{@HRC9(RQg(UIk>!bH)=+}k%JzwmzvOJ#Gi#u(jN+aRZc&l3`y~o+){IeQa z_EUyFVFGAgF!3)bu3rGW^nLNdRl2U0&+%{agG)p1|E~IX|G39JnozoZ;rt}hx*YoE z-%)gybsh0OafZetPOtSQjaMg;_3g6km&ALmS}3j)UDnSqFVJ=H`33hRS=4c#>*>1K z4tJ~Lp5PsxdhKy~uk$pqI*!CmoH?&upU;y~C$HoE#asJ6jC-Be;;uL#-dw(6+%vfA zHq*!SzQ!9nckkEjl$GUm^lcKmP6|Z_y%(nUtTw&ZT(@ugE+(^$pm*ahAJOfxz`+|k zGo91+@V-qQ^7(qz^7(Zx=zXUDY4q#sam8Mpi+fIb(Cyo3-vz!8FY#9U)W-V*8!zJn z?&q10!@psa|KI2MdH(mlL!b5}KH%{{uNUul^{31Ot;0s{|Lad!eAgZ7kW2s8$9-A) z*XPcNGJ3y$^s7s+AM|OZH}iR}gMW$nK$MFW-<><_?QF#QZLP!R&3YV#C_b<6-S+wV z%8-5?kMQY_YWO2WEn0t|NJzVQ|4>(<+euw+wIw{&y-lrWWqjsN`FlYTbPLJjD zNi1EMPpJPr7<>cHtTvh6kALiA^u+1Y()*MXqfvR4$M@9r z&K*s^PI}klHdYDo-S%A=cj?)ez4W?G`8CH`^L=sb-X|EU-kQ{ai@;6z6}pszm9g8*YC`G z)$eS(;Jn2lzN2&n23BNr!sYh_1@uo|ccAy&`gNLL?R{3_F1>Tw0(Z~n54iKVxR><} z^Ld?japtrdZ@!mvuM?}^vGInx$9F!j;r~}~CcBEoU4Ec(4?&1G`{*i-`uzdto@JZS zAL#3t@8_e$e4hHa@p;edXbej4d_3!N9q#7y83A70m9LxLqm52p*YxRAUjGdG*YyJJ zyiR^)KF|KVW<5@Q`KM+N|7(|f(0l05XUuEM>&8jq`JI06;%|C7KjM6#_p;$0Tm2r9 zcdBor?=8J^`fOc>{KWQIaUD_9pD&cpQ_orbE+03&^E!>ZuF2G$=}>xCpHjRh96(#|%umyMO?#!$yK%SY zy>9W})@2UqUDvORJEs@!`25s=-$vh0yqoyW@AkOfk8arYaZNs-?fCVu3BRKv-uO&s zzYW{0jXPnia~ZA4Hqd``xYR4dcGaNWOxfTRw05Z1_D1=gx(~hxBef-*87SR>wut+XvT0 zO8@BH`*l2SdMCci@0m}Q$FuLmxTB{7y*GWEuHFyUWh}nmZn%$qKW&-Uo%J{#cJ8&W z%OuIJ>3xO1lX#1J(7VO=5q9+@GCXYkwDx)OaIF0*j1#TP?4x(<*I}fl_XF-}ZTWmF zzMJ0JSb37lfY-IU~KCiB%Z*ZHJdp^$(y-Dwt z)p73g>et2O2d?+9e?BF^z*+HgQNKS!AHEzbzCRe=vb;|FLW9p+d@rg!k8ZM`dR3Gsc{V}B8im4PZm zy^qKBkk{qIq|>M6gqhxXz40eM@O7ElRGi^%d7b8kaj#SIx`#F|#JQ>8k*me^;*rPq zQGMgU=Y!t2#9h85?u5Jazc7-W$FDPTdIlEXha>v5pN#Ly$1T2-7g~IuOil07lWuc9 zEU!zF#Ma}Y*=$Gs7k0SN$ILHcUGCO_Is<}5JmrodXAxr z&Hd}_-?d$9e7=ppuG=ShLI2oh^cCeFgNNLTCd1gqI`)y{q%hApXaz5y^H_Fub(~Z{nGnqPO@)4y5#FL+81v9+T%x#Xr!TQ`#!Z_ z+UocxyuTM;xo7qF=@U9{*1x$Z-q?Zpyy`sNu4xz=_qFCasj?JzZ6Eul>i%Dg=<{>W z>2<5uPq6V++*!6d=+7rh&vp2Fe9w8^E0+I@cbuF*?=xU>Ror8aQ|nKBpL^na{LG2_ z+9yt)g8pp=PIQ0#YpUbydDqo1*xdZy_g-S3aKZT!cdCjHY&E}c=`&}f zbNQU@mG0#QI}Q3c{stJ=D`{MLLEn5NB@mK5!Sw7 zjq0n>)s2oEKhDUy42=&P(=<{4et7XBx_^WHdcCE#-g6QVai4O08u|D#U9$McbuoMn z8w|sKx{F#5LOz9d4Ql_r_*0Hpe4p^WpHrP@+}7DgUjhAUm8F!+pbkA{K z*QoR6+(UfFXDzQQYtuWY$9*0lzrj3EoRiNhPmtcn>Dcs6`a8VF{dewczbNi6+}Yf2 zxc^7`);0Ut#Gm@y)?vpa%og8Q+~@Va=JPv+={>JkUGF>)^ga-GPXAbAO=2g`XU|?9 zYCLl$#viq+@||tz{W|?p=dXXCjILk32UnhVKZY}3Jo=@r>rJluI$X>`&-?Jzafp8s zxGVoK?nQy#mCq0Q-|U^@bMH-}=#SwT**Zoc_sQkPxHJ>c0I>e`O^{eu<1T}!hQWJ?<;+?pP8eK;D2$b?|c8g zUjGoD7cQw^aPy|VxA^Pd^pnp2yML>Zt5QtwQIy!o>9JAg?N51JJB!7gK6tKi#Pv$b z=Sj;t+`;ZXpXMXQcU>xXUk^KCQT4{CVip*HQ=TFidP)hx>)jBJ=zQQpr1g z<*(|~A6xh9q_l0=`nBKVIsMmdUWbAK~Ft>fdi#^cNd?K397p^lHDTde<>pW|{G@AE#3 zeBR$r-$yfEe2;N1w7wAGu)c06J)eyJ1CN>BiBsXfm@nM(Pc(0IWYV+0-h7_lp*8LR zklvMlwSE3kohHsb9zGv!^6JdEb3OLmH@e&t=U$c1MPH_T^YzyWd7XIAin0)Iem~jc zd!5*NoccEH{(OnuiaTwy)dhDHKGF3u?R^*7vR@bJ`|HG8{?4|{eb4Laq+P#nVC3fW z#3ASIzh6haFzs+B@Qb_b%D5v4-&dJ={ffGvgPH?+VtM?W68lzdnclKRyzTb$*==ps4d(CM4nFr#m`K(b~ zHIDNn75AqCcP{5O?mK*O=Uyio+1=>edA+!kZaDX{GM^u^u~zz?aGm-hzAy5+dYqWv z(H}m4E#hZCXVN)uM_%_leWJa}<9lj)r_BxbFGu{~G5L;je-39BPw8I2Z!6tvpSALN zF88tc&S3GqtoH2p3;BKAme2Ehm9LeD^gamnyZUpi%W#6EbFMP5{`~ww4&PQC7xMX% zjg#We^f2z!ksIPYqrn`wC*uBKSAI@^o;pV(U-!0n7v%%%(~ih!t3LPjxH^Bf zXLT3ruf87F^l3FRAHzPYupY;8Tfc^Rq46g5rRkmixHyyV7;hd9V`|*7d(*o(h_n18 za8KLoGOtm4_$|IOkGziS{_epJKQLo@$EVtQpMKE3KF;>n!I{2o z7JNQ%uXFWrl-K9*ZT06lKjMuH&F51VW=!u#eP3mxcO9R&6Ml_5KTELfdM~U$zxTB? zRliP;JNMAH;dNfedEdtSw4YNv==SIH{jkq!Kz_g2ZzFEv&S59+^L@C==kIKazvh+c zo+otrv>Tys!{g39?Qma15KSFt+`r@fo1E+a72kDT{i1KP;9e1j7u?@4or}B9hjg#= z6!Z>P`Fzp%{2{$p)$gHy=6kMrkPK_90PfE_q}my>#%$+sQ-1e#&H|( zz`ddlv2|DkFV2b+8uj|N-q}>bz3SI(7b!wX#cg~AO{HM~$)6D1DFLltTU2tbT zh9`KxuC6Vgzoov-wJ5rsna?v1%;$Mp@cHzX^se_0K7U)h`T5YS%RM#jgfZ4R6#oay z=a`(g@gw;=Z5`7)>%bkKk6zoz{5q+5vmUn`@;b&Jl2<$Tl8wyn^GRy)9bHK0;4$um zOYXP*b)MHvZg=+2>w8;1zn^%2p7Z)O`m}5hAisnEqq+M$mj{^M$*aVDab4s=K3^%m zOOM)bp~p?{b=vs6ap&z#?~TtZ{>bNPs~Pu=hne-~bzI_({~GsZKkaKl?>y|>(=<^& zuX!oXPpvt3(ynSN`cuw#Hjv*_W_SB_{QnHZn|)Enowlp_ypAvEeGu}xLZke}d_GTe z^Lb8eJHB&R=w5lBOH6mm^`4|+GBPtcX+^Hh4$yZE-(WlH*R=JTAG zhP&eXHGXeHzOH#_-1!0az#GnA);5`0H=i#_qYt6; z(ByRu_e1sjZO`j;-9&4jRaW8${BB_teEw+g`M|xdhgQdtRtLRjtjmzEGciLxpNf0R z`n7QYERT#ui9Fum*hxZd;5`nz=D{_Z|svR}57 z&u7IWao6iL)~qkL*I}Fb9X&VPy?(cT9r2ytWfX7y-n4U1&F6RdANVM~b2;+1<#jJA z&T|j{pBw3(_4-^sujMt%=cl(Vu5-A?UH)X;F(}hJKQzAJ->%~h@;dYRgwI`YKZWdO zruVyC=OXTkcfZ9<;O*;>*V(=c?cevjE?d?*EOH$KmXP}4j0r+hvNKF{Hr-m7Ha ze#a7<^L-a9lhCJi?%1SVFH?_JExs$?3wn2-|FE*(J5l_!d>*4Q?i{akPi!5Qbb?icb3JUR;}Xy7LLG-swYl%XRorirn3&!PoEk}cjC)FaZs&Ek`C`($=7sA%_xK*W z&&v;_cja}adlE+ZJik+CKCix6JHCsjxbyRk7T>iV*XX_R`L5pgN8+yhrOjRQS-#HU z*S}}^d~IWLYc*MLNAKic()+c|yLTJC8+RHax{ZCW+I}0(=Rd^%Yc?bq_at@hOdRpv zd!XCYajEuIYJJQ9zd{^`bEjXX`{C>B?_u9X1tGsS+Z)|y;uH%#6 z%csSipWkO*kk_Fn&+B|&CI25I^Z7NtzkFTu*z}&(O?+RL&-1Wz=W+4BnbuanxAxcV zna%;Ck@ybx#eN&@rx9=Qa_))MaoT8QKEL652aEap9=a6wntAJb=LZnO{AlbE%+>vS~mUAEA^QUb8pGG}joD~nn{Sg!0 zxbG*-6Rv=;zP$Bo2O+OBpI6^Zyvr)Z4;Zh6_4h-09jDE>*Ma+Vy14#5_pjsc-rxuuzS$A(L6}f8*sFI z9_}9B+uY?_#+}i)?&ChGkBFbryW*36*NFcOO6lA~--i6w z@;c_R`18I&?@hn1+qaP)NbmDk(^Nj6h5B87X?o}N&Ogn?Sw5zbkN3Qe*Sp?R+g}GR z%jfk3>7HrX#CPLfjY9p-ybgUE`!+g%^7nb_ecCkf_4jBRevdlj^L(yx*Y*G69e*O9PZQ}}`~HnP2Viv^FAP5K z*TZ5A;=aZQ%jX|)Le1yvg#9;zo_tGsU*ovi@x3NLu{sXHi}SSD3Hf~G+%XL4ov>(q zn>BpS^v>r8?pDWPM;*P-gU@SUtLxqCxF)`H7{q_Yb?5$J>3S!>b?%&CTZbhqbhvXO zrFZg~#^(oZy{nE3KA(zre(P3K$30%}2;RB7-uHQd<^x{`y)U@y_qxPi$8G+e=DEf> z;NNFHaQYg(8}};T_xgQ*WaK^{^v=9!bLZ_t-{z=sf5;EJi+_{X;a8(}UN`0S;w`^$ z?zQK2fxG-jdN1Fdo6nbQq!)L#ABKKiSdZg4t&R)adAog!?~A;y>+?L%e4cq~+;>XW zVLz#N>d+>y!x#9)Q|hST^UE3su#?{J{?4Ywccw|;J`Z~T*nD2|*nFOOF5V0W+;yA$ z#jl$fdmTp^XWZq7?R}LgpD%x>;IwsE<-6@V?h0I$&vE_#!|?kyg}8J1f2Dq%exKg+ zx-sIeU)$am_lyfxG|to1 z_~P>uan|=T?g+KbUHOOQbtC{y{Vv|x&!jO)!}T)w*5mT|s>+jZQRqUED~?p@?{q|FWYN;)Tz!90|3!-{LsLUGq+Q zm)=5NS1*3=;&VOHF5|Agj{E%XE!Vr(anh^Bb&l6`&xG{)-TSm3WQF;>;;y*s_}Y5c zyb|w&>mt*-R$j-nHtwg0Lrong-u!M=s*&^QdbfT%bv*CWUVmpArLOmweU+QCHS_uS z&Ryruff)DT^F?;x^A_KAT;fifv+2*9&!?>a2EF6+^y{+Otj%5LQJjmabiL;_`xVcH zxW3>{JF4Mc7sQKhrx6JLU6ShtB$1v%hY!9#>W&pSSq_ zhH-yvK40&q;y;R$VbJ?Qe7E&izL&@Mur9MdZ41e58#EXT%O`Lgt`eq4y}fqUNS+xR-H`Zlz|GUwj>UZv|DET(t%`FcLjd~5d4 z%jeg*j@)$47qXEr)XwYl{l#1J!nu3jW~rUqN!!x)DEyD%0fMInl>`8Y6lE$^dfQr0_E^94wu75;)N8+ zAPP{&pvp6+suV2P+E-pn`OE)i<=;n9^!I;dIf{DxhyI!H4}bd4 z|DV4Vp8WUt=gXJ=#Xo=C>yG})*-za4uRd{46s1eaQpR7pbYsOY(Xs_2;Rdua#Ue)O;W1c7J7ngo@iI1Ipf!p!= z=Jsb9^?6@h`mCN;e}S?1lQPwqB+0GMFvgpkoAdr>m$rGHMm>Mt|BQ{FS(^99Nt%@X zd7ro2)~LsS+%NkVv#qS`|F~c5)Z_olSdZf2j~Mm%kNV&5&t`hwJN>e(s{h4pzGd9*?+6Qyxfo8?7w2~r?K2CQ;liDnPAlU z;NN<@wDIkm;~U)0hw(7(f4;vm$!4GT$FmFE-r+oHta-wdjGK41GmSdlXZlZaoa3>^ zg!lib_l({Dss2a3=`1Tg>V3*?|IEfg|7X3AdV}RYf;y%zUsKN)G%c@gJR zlUXM2+W^(=lIM$eUA}5#Qr~j!>)XcrF3)SYGfVn9PH|83^oDrHcQ)ZT?{C`ke#Chw zEAi*F4a7YijT-KQhPycP_?~mmQ{BF`8pHjqKIb!g6aG5yf6Q$@E)oCHts&e;{pmE@ z2;2)B=X0Hy!^v>tE_0H)p8oi5qo+Lx#zBbJ? z%8yLvX`XAm!Qp#+UpXbcZ~PrTztDR+{NmE;Ql9`X&MULb^o~4@`y(bun}5B#dn3em zxPKwU^-g>r$mi=M9g6!V@m+e~=t1FKjG`Ke~-gn$J&|7j2&}_FgS@`@wGF z+=<`Ly)f>@&Q0T9k4SLDor&M*UAN1!H1288`}!iUGw#eg_xYCImDf$Ohh6U3z_@25 zo`L(ec#laKjeDMszRPXpo#Ku@I(o0tk?S2Hi@VOJxEEzoYfM(fJu&@?@5WEFx7*yo z-r-JszhQb`33{L2cAw{s8{VH?GF=bM=kvsTK3?D67Jojz$?Ht#C5eFL^XV{^-eVFv z)4Ppj{|@m{+_S10i+i5jh<~Kp{3)-?7WsVe`E=LwdFL+wa_&Bs^V+z}XFZ>Hz4JDn z*Jb5c-1qTG`TS&(1@1m7Z?e2@AMkLVOg5VMj^4@73-|ebro}TnF5i;w8A|EB;tkB_ z(|FkUytuDq*-qp0AE9sJR@vzNXXI}iyn*o^kDPm5$FBF;EO7UHJ{>0V`El)fC*L=p zFUr(-XB@w{=Y0Q{88o`uk>3xRL zH~GBruS(<2X)&Ltj0-+r@Vr;#KgK;7y56T7Q@Fm;ryMc<$l3KSBbVMMGtcMYDt|AF z+Vwsf8h6z>!RIZn)A<*7($j;eNm2Ujf8&3ZPJSZpzaJteSVLGSp4PFmd~$seLf>Ti+`PXK2IIj=-qr? zK5crJVBoC0PUFMO>p1lh#GmtPd0l*v&wG4-n|UYhibG9&7w_3mA0Eo*m*M_dn`ID{EfAbDAv9^TE>lgW=Hgc_u{L=Q%v%&b&A7FEBC1o%28Z zhQ=y2{!DN4dGQhNw9aqX80t8}pK%u-aR-m_el)KVaZl=Dth_y%tW3pwn+X!Q588EH zos5z>oHehN&)?a4k^GL4g1;ocE8pI$_!b8cxTogx%x7`W2n5RK zx3{-Ez7ycZojS*T{y^{U^E~c3_ibC%atA66P)r7%)_C!hED9_ly3ZXxd3pH#*@Pm*q4$3!u` z7iGhJWZWCQ6Q9Lh=U=>wYJA1GbKVu-DUUn({0>~D_k0xM`_TivyU!yG(|fuaUm&kn zzp~-3d7!?ExaVgJ1B$C8+YY(?(^H*ruV%oyW(D>_m>zI*Iw%VYsH_;be^Z?^Gufz z-`(eVn(4iw(bM+(e7G9&`M@1vKF;SK|H z+T?W}-^2YWaX_4ve|3C*Ugy&Li2Op_w@K_QzEc3W-jl?+ZyR^zlP~w4?akpT{-j0m z7Z^3)+dAiA(|Pf(k9GQ!w8`tlTlwSTxL0*z`TRP9|8eNso6lQ5fY0MM=JQF?^b+8hNg4ROz(uBE8<>MiRqm-it)xSZKUr||9UkYsT(`xiqj%!0@;Z*ocyIH5zc8+MdEKH5 zjQc3PF>L2`JiV)T@)~j9CB9jFCjn{a^KZ}9*CDSXUl;e;^f33@xMQd2{o88mM4^7~ zU&jkAzVpS6JKtZNSptK1S{^+wR~QA zmUv57FQM~dr`j{UlixkdZSKyV?LDo>3)i{V?^V6`K>X8Ws#jU=>2g%U)LeN zb0DhYG!KnC6F_?3!-(YbO!Fqb50uBR)6lp6d{e*IbuPVQ3+D5;F`5wHeSB0Ux}6*M zQ6D*MD4y$kXv9Z7zUQmxePnvK`knJ2-X(djM$H>>CcJJKZ(gU7`RG26&x&`<_YK^w ze&=f#_nhNvd|q|jbmQS+pIaXk__( zyqRf~FFcO>?iPUU`SF%Y?j+z$fn5m~mHpYWqC)VtOC) z#jSo{xjpT0=YuS-rra)J;}|_Sx5DJe%4)=dBB3Aai~rTr{%#&ncqwcr(7zKgatWI~LpPzkb2S zvGg8A|LpYX(+zj=-l;0<+p$Z<_0AV=_i3{#O`f#(izX+dC;6OybSnCkecq`k=X+|s z{Uo3F5AFxOhdOS3^L^XM^TA~sXEA+Rp4R_fe2$qB^Y3%4l(AghKN)?O+xp(^aT3Km z!g>5}^85PM(DJ%X_O(dwS{JwYelzEO)$ds;?#j!=9XoKnv%uQcyB>cQ-pHvo?#zn; zJ^(JVIO=x-hDJX3vD~ZL`}4H%&F7hJ#+`bf=X*Y%F0sFW+u|Qzxqe-I>@;pOue#66DB93L^h{M^;6ujuyu z)2A)d>F6u6M8BX-BL+!#t3`1)sM% zjxzF!=^elMMvwjhkBfiQKYjXVaE#;Ar%ys&|KwpTAS^?j6xg;CZ{B{`AS{v#g`(bLitlC-DC$I~+0E$VrEp82TwUZ)?^muc2zqUbt*;(nYz`8|0Z>$J~BSMN>u*01!>o}Ek@ zpBMK_SMPBzobIbXA4NmX-<$o{qaOdQ`>$R-J8_Ojo{-*;@Tc)Sf4cwDrSl(X1V3)C z`h7xPr`KJ*$}QtB-H+4QeE!;?_jxuxwB!4P^Yalr^giOuH2TrF|(}lR+|IG;c-|VeSX47+=iBEs} zTNm{GvaF6pKe~6t#`ymF8F8Oi>DaiFAN^-;Gc9B3y{X?z@^#Pa(vHuItMpD7aJ{o3 zD(Ky~^Kdrk9aH^Rw|$^l+b?Bb`bv$4C7XL4? zlTLgrud_a+d_G>+d01axKN0p>(U0SMNB2xe7l!c(-9B>WKJ})}^KFao)Paicw8J=W z4gc8Q-|Bbzed4~d)~v@BmAH#r!(V#W_Xv7#;=AQ_!%=r#X7)ddgY`J$%=`S1odM|?89bAm0Or=T+KG}IS9|GA#>KI0BY*ZWUg@6=Pv%!l>$ zE#qG7%uC}>L#@5v2ANu37u&uI-*2h-{sQq{df$0ejxC?xKj_;S_lyZ?>#^`ZhtnfZ zzTZ3IGkvH3C4CX{xRcSntCz{+;D6%u@i#5LPQI@Bf9YZzk9hp_vHp^7U%V`TKN%f6 za)P|>n9jtpSNae2KHPsU;(b|vJs0sgAIEDHzG?uSR|L?(hJ&w^iye?k4uCaIg%zcfQFP;BAjmM6k!N=c= zu3~}T?Y$nspGbEudhNG<>+Cms&qo;k^>cigPk-xMyPxVmuj7rMC(~h!#QpN6%jn$v z4EhV7S3l16o_jt|z<;*)IrH%*uQTqfuesirP4DuHM(;L`llU0(fm0L7?}_iuy{X@s zZ{n_bXYm~)@jCADeOlUV^bJ1h6)(E}nZCTUWq5q`xAZabNo8`AOYs)t1wf3r_u`O1 zt^4h9`S~SyqYDLabABYj?IWj;TRgvf`I4S$&rdmtybb$k(aV|B+)EwzcJ-Iyt@r(6 zc)S^j;ynL8(fmDB6-7<`-t4RFa?kotD~~_X#Q7m^=AReA-;eXTh_6e%qWg#B?NRjS z$9t%p+rzI%;>Yp*Ts#?ny(gXX{iXlQ7cNDbpE~|1D*3O7(G+joe^+llY!y~CaQKKOj!;(OpOUw8f~+;IXv@fg0v!{~ak@8a7bpI3Yof4$tf4?8|T z<#WA$FT+0SocOPG*j20J^tjjWS)q|_N><15u=j1KkK1+J4uUkFrw=QiCww=38y_j~ z<@2Pq=JTAc(4Q}?erH|B>Nwg^zMqytuI=+>Strsv>CeG>T-aAx9OCYM8%|Jr-$j{U z@j8wJc)#~Irkf_dYfPyhHP+O-itm%PY@_MZ>NaJh*Y8cgj`b4D>&o;M#rL{MbMtx5 zzv8>%uDBzsCcdXl9VgzjZA#1ILwx7+)5F}Cd;e5<;=s8lH^iOOZroK5h`;Iu#do$- zo8Irdu*m0)dphdur&V5|{>>fwx}iTm`aay%hp_%U`~RA}PTY6)DqD}MG1^1xao)G# z3yM2^O!m`y-$wPjj!&c3QN=wOrO5?G%IaYS>3@+zFG$UFYBG_AC3lHrCpA(dyd(z<4*@$t%SH=h@uw$GRJa~hu) z?}7^&H1hVf#xe7<@p-MozMDNNJ-!cz)~BUEr?}qeJ!7AXaZkNJujMlJYX@965%gZ# zSbDz>x%oOQ`_qHo3yt`}T;muy-(bWC*TtK!RTy{XwdHjqz*$~5v;Mrkw|JLKIOCos zUdJ&XJ9S)HS${rX?dEmlN3Fb0`)$JhIu>GWJ&yAy-n3V2--XUkoBJ&DejQ)m_0Br7 z>3t>iX|tjVdQYuCzdB@}1^cWxaOs`X>H97oC5dq-a7gbgzj$7U4~D!hUF3C7lkd;E zK9A9w-Uow@&x@=0kL%T>?em&fZSJH8$x-;TOw9T$bsRbp_nP_qqk}rm^Lg`m8sE;{ z_uHhrPTZG`tL?AtTsM)TN9)&Ngl+EZx3PZRIK9Dj6D_?5?z9a}@2bzmJz|}+(YuZ1 z+_*pB3F_BO&|Aa(^L==JSUr%>?|xG6w$BPbalL2D1MAlv>d!yA>HDneBsZTwieF0S z8yJr1Jzr&A9-mKrJ#NbWKk;VyAk|niUyVDT@BR6}{cFy>96v}p`8-^t`*~Bx9m?nB zgPr(Z-|EzHyxjCI9~bv|n!w%jI`NhtXjJ?+{&}+cF#0pnjcN8UdM{ez^~RmJ)$Y^k zeLcQ6eOh0K#pW!&YreL9zBK=5zYYB==YFsr=RRLnH#HBy=5^fB?)p2gH||v$`@YJj zypEdzOghhq0~+xY-)BX`Q~X)iuf@G6#-VSs=+6hAKNR16J?>yXEeqb}@2}Rb_e%RG zKk4&h4qV&`v#xg*rrPnH?N>u_AE68BUHuf(JM&FG|8|+=O~1~39xiR}DeD6ZpSN|H zgE~(9b>3X>p3f^jwSB&NFdDYw`$q9y^ZACm@}7s$(H?S*#GQ{f{!9z}z3JQR^i?Og z-ka+t+~*ta`rP32I~w6O)_8^aF77MYYg2L7`^q%Wj># zE*-_DcfOwKUEHO6=wue(=VSBveIB>GE^uesn$NS|((Ti7yluUwc^c~X<-z0fdD8t` zZN1NmsxZCt{x&9QBJL6A=rDKPcK+_)LGQumYx;G{>y)><&pY?R_|qRub({SttB=(? z8){wew~RaMZBt*5+w^>%1$4{jnU~_svduw!*KLl=^Sb+syzVW?>3(rOfB7Qu7k;b1 zd+Aewzw5m$R9BI9P=IosM7(Ld>AcaeJ*jCy|AzSf>VxED^oL7a@Il}HRMhMJclKZC zajmyAL{FTF=~sf|MZcYKzaC${r9Q2SQtRW;{}=B#=$-z&$9MX5?(-p^M>x{^BA?$i z?u7eFdEM>6UG=^CH#f&4kM9_jxTDL${GG>5_XxVJcj>L|^HrS~cU{ja&OBUbRGe_` z$^LuMUqvf?Bj>I7hk(?1gTOZ;g*sPEtCU3Ij$ zs{0Vf-}`UkPTR-o^7VMgx(pnbjva6MbvBP!SU4G7p<^K5*6S{w7x#02euO@(Zh!T> zK2Le7_vtTspEkaHRaJZM$eDHN{lmR6`JDQ7&RyqE-1q38guE_SUPnB$by)Jzj?Xi_ z$>*1O$H`Qq&THG}@dNVtzh;~5(W!XragAVgy;DeuFPG&^G_noexGN4A_cR@eyZqoi zd{XO$O9*JJyx#ns&(|oQFz&Xm^36UE)4f^b^Tp1) zUcV=Fu;Dym0bl((WMliRsNXHllYZL%I`y5JyiWNX^+GN^tMFDouJ@fdHvU(%g7&lC zrArh3EuX)AO7TGYe}j82&{y<)e#rVOzH$BPRgFhz1NZVEuglY> zZzF$4jzzam+thJcC!d!e82>Ay)O?=rCf*tEuThU{tkV7DJs#n7T3pxT;$86s=brQU zg8P&wi2n`~LwZ-4Wj@dQw|$=NakjrMpxf8669O(@;IaDEbLT@HQo z?kfq zhr88rPw);;z4kc0*Lj*)9Y^9O&Yah-&*#aglh^V7;;nrj#=XvKaaSA=Z!X_3?it*5 zo9SbEU*nCPyZ7sM%F6OO`ZkGOCxxPe-V4)vR-4{yuG_bL7n9jW(7W-MkLdPT;NXp& zna*i@c;BWD`Fy=<`TRN;^gh%7H2U@RxMHu)#XToI==N>2?*iY4mw2mvYUBNZjhFEO z_w&rh;omUI|L=4BJpX&&p-+1fAMkjf*Nb<&`cvkC)?p*}|Me#vLyB8NFXW`qib^5BjvyoB2G~!N0_OAj-vx@6Mg|b~a-Dw$@?uW<8EV6rb1kZu@+F zWk|n{NBH!|acA2GK7Y*mkm3wh<1Qa|y^nUqmpX5vk+z(1-{biHl-uu?k8Dhncvbu7 zS=VpsclUV`{x`XwQ^t8?emYJuHF9>UUmm_4_EsC)EEQ488$pR+~)k$3ONldgAnH>3zzH(Wt!2<9q6Q z=Z>adC%x-&8>@u)Zu>5byYy__IW8M1Bs{O{8}|*KApSMnY|QIadKVXQ=H-R!yvgh8 z-1N>9#9ixITmHOE+)2;I8j~CG>L#P|6s^PZ@y4C-Og^vQIqAmtoyz<3Nt(ia(YMj( zo9?;bHTb;geL{q4b1zshwtgM+O?CS;%8F0xddciA{JAcY1JJl@KL5AWVH@;y{P!-J zyw3Zyx4n*I-%7Yn%C3J`KiKMc8e8r9ePibRI^Li7uljw}xKqbj--d^+Uq?I4>v!h8 z>UXwXaNgn&-%+{(11mB*;qrTe0{SPfJJ5S>{W{IB_C70dm)<#TfxGAP2i$pF+{^lg z`Ml1%ICEN!H{Z*-*NN5d*m%R;<2#?%@c%0~lU>E)Ew1B9 zUMIgYpJ#twvmU3u{8O`s|Fz3K=soo3Gv>ABb>k%Q{7%1j@i#r4A8|g=d)aW0t$vTl zJJq+*_moSM*uItyuozn|%g-c5YxcY9p#M>p*HxF(;^cKmwSgx^sSZ+xb+ z--d10#+@+Mxej_QduK=dGv9yBwxYLEuXi2HvFE1bLT?gLwYx#Z@8lutK*{S?Stzg zrGND9{W=~uy%XQ%_sl2Do8K&`vLc~wtT)7 z-%amqtUO6&!0Y>8Tso=qd%vC6Wkq&Vy05MztCr6*VZ~eXLgRtn^ZM4q=&vPr^Lafk z?wS{-_cYDLoiJuT&-ZrjJVE?Nxj#_3L8t1J`@lKc5m{;H>z$sNbKV4_}TI-yaNbSzf1op~2@Zz8BS=@lW|#uqV;? zl-Gy;{NepJ16?PFZPJhDx(N(XdY_LI%j>FiWV+@z^QNwM?UP0Ex) z=FVw3SdTl&POBqFPFr5bJh-R$PTOQ6?#h>)d*kz|#dpQ4w%(Pug!n$}vA>AM%0LyO z-pAv5$m{Z9(&^K3!c6bH-uROr_`1w&D$a1XyiW7NxYsFp-9wuf;@s5l$kpO{@yO%* zsJ?OF^Fi-h;x1njcfwuzUl_^Gvf5Z0E$>-nY z#Eh4ok672S9m?V+?lpS;ie4ApJF84s`@Pj~h@$^PJ;zYR@zWYP&N==8reA&*-Rphc z=Kgi|@7k_4KHtV)*X@(Mpnq&L`ik<8!9#9ElVNOQ9s9^}(!JB)G1t5MJZY)veT^5k z<2$lS<@40Zp3mdA&izI6dCed5`6@N;x(woZxTA~h=b0Cq*Q9TL$1FNj$8mmb{hjzI z&V>JNd?$WeK93)m&vRUj-o^jo*Uz5ye(C))C)qb2UGjAr?F+Yl?eQZ=G}6$ueV^Jd zZFT$;-rtL_+_U=o^a-6e>)%`yZ|uN)UUi;s*E9@``&x6IR9T9n~J^qDi# zxqQy_KASykxZB9OwYbwR4e>p5?l0bDek|hqJaxSjtq=4r?(1An@Ot!|#RKV^!!e(y z+%Ua!TAh2;<*qnx>v2p-#r2ixpIQB`_^Uj=sLLwiJe=T9^WY4Bp^hW3qyNUA2y0)k zM)lR`>PAP7A7^A;hQ^1DX_}~iKfHJm-M_(pz1~t=?>PyGxKBAgjeLBWE?NBJx)?r( z4TfPq-9@bjA)i9K2DSfQ{3%B)zEAkx&#BHcZf}}zE50lLwS1m0rcSo{KjO`Co(_54 zV8Fi4Nfe#czE0Y|XEonm+IOj5|?Py5~5r zYt(sj?jgS8vzFJDwdtMH<35j&-(Vgn&dKMMCrIz(bZmMj{T*K8{yTTJUljKj?rd&1 z-2Wqe>ze&+;!k~U>#$=IW{dAD?(=$I^ZA{^^q$wNu6G^?dLM{8r+=)mCb1Levu7_4 zHJ&*Wi-M`hyRVk+TC`xSP^w_BL_NP3qoyFo#A3WDM;(8_J z^Q2`R?qGMHPxF!DyRMfD@jWx2=K>;e*ZeTligkFEQ4Qrb3b{o3#Goc`-Juf;uY@;Vw?me2G3#lI$Rv3?zg@9Q$#yx+^c9_Q8d z@BO;_|0(kQxEzmopT@s6>Nw5cxxX2o*70#$<8kJK_8F7kP{&8nE!Ka`&v7}8_j#X1 zKJV|R@1q$nzQ;HhT3?88SYJ1ko=-;qfyYem#HsLK%opzYCz>}pGU?f0Z$8iO&>D9D zNbkzO+CKlNP7~)I51)@Vd39#oxgPuO8(r>+bFa$hqAydv`TFaGyiUAlMOlb9zn|>! zy-sXBPJNqpf4;Vi88pXhp-_P&d3*{_TA{dM9ke`j0fzUOsy(yre(Fmm&G z;*fLq->;)yn0B}m_{CjzW!w>j@2kwbe#a-Z9yjIvl+RHfAFAK$$M$Wc56kE4WMuW6 z#f4|B5B~-{jx&!%{Nnkm=Ns3)*kTl%4y^iC1wClJ>^bw@4(+oV3uYI zyxjVAq;H*lR&X+ZpA%oq=XrnWdouOkyU={sZRNA3cYIQPTKV8NdSA1Cp5=9qs(p*^ z)HkZ*nAXOf`4;*%b#C=LC%E0G)%%KjjnORPJNqs;-)}@@^nAYjy=FB2%mZ=OeAXzg z8pnB(iu+T6JD2ks_Z_~tbFUMP>~3`Kyk6W%H=KJ}na>Z|SSx)`xK4c$-xqmZJx)yT z=ntR27V)#6GwGbSBd>d&KG9y~@jW%Y)8>Zzmm_}gn0&{%KZi4mr*yC1x0UX-&szCB zm-|?JXR!EQR(tmQh5SBl%jfyM%Gb(6dLM-PUHv)MWjI07Iae82e}4WThi|Kn3;BG> z#z}E!dKh==$PMwH(O?eT6LEjAD?g_{Po1NYuX|g(i}Hc>X-DL_*0%}VRiFEMT%AAL zv$~7*S6`27`m`FEk71uxSdZhltzW~u(0G&j()3P$T%5^wj5iO5F*WYkz3E*X#94k4 zxTo!Pnb#=b#r<6l(Bgaf$n<_CO{kBzqHA~7w--}_pc zs$ZwaoqOop@H(&Kyl>-u+RrH-bo=x9e%NO_ z3VMgDe7i5t;^F7x*NQSl5aro@R&N^%{xA;z4MgNAlKAqtQwjTFx)3*ux zZOrEf^wZ7f8@;n`WZd)gRy)4y{EItw2`#j;<^sd*7``$RUby&U@)c-nKUVp7S_x%D8{W_g(Bg3h_N1 z9{9YtW79>KduBdgrCNW(=Q#n!oAaU(Jf`>lvaicMuJvhgFY3yh+{x(Uv^^1G4~AACM-`@H6x_~X~U?;@=OcPhq~-lb>v z`(fa&D38yFKCRBP>wO=+FZR>w{l#04JNMM`IY3B3nmpbUvF1WKE z!xOw;SJ#%$-%{V^S`^*R%;%X0=JPx)_ugbwvOqYb>NQAN3U&Uex203S&v%|c^%^q$*Y}v$wp@P`6RXYjxMBg@ECW( zCHLF@I?wASw>$gi^}Q{h-%q?h&w2eCeOk5$kl(@o(cFEW%L7dBoJ_vbTp;7)~KA)$# z`8+4K9p5=Dbg#T_5#M#2t1E5c?Px`Fw8RkM#u z`)Rj2>#zsEUzhrNT*gAZxa)h#=gE^oK0m|{20h9|)?=3~{!8bL&-1k1W*t_X3+i9z z?c7s~??-K4f%L8S5B?tXUXR3G>nWyp3b`h}2fdrmC+N!Zc`7~WU3}Z?G9`UD^Lb88 z!(H+H8o#$8U)MY|?)(6I;0@<5Yn#lho6naazPrySqn`|e&kr>A(WSU=UE9je(TC7^ zX!5#-`=R>%w&!)aZlbl%Dl72=ez&j+K7Ta$eBfT!L#yLRtApM%)@8`onV2D;PsKfD z{o1&b_c-@(-9%Bh^7)sQ=MT*15v=ERc`LquuE){j{aw0ne|MiR*)QA4 z=d#$Azj-DItUcXzvj`+^+GK#l;Z`!%1=JUJ!4}28gxg2@h^12rl z=edXf&y94?dVMaR*YcX>^V8cF*Ew9{E`Kua7?kOq9~xiqZ`W}Ld7b%u!sjlypF(ys z)B9bna}jsNyWe6a@b-1c>uleJ_V0UMmn~}@7Q7zc8=q%GsOg>hQ$8OBpXYE*?^UvI zzhjBb`M!&lN$Ar$cWlzGm#Igq7T=Zc1--k^e^}Y?ohW`7IPJxgIvuaf#=3p^n3++T8cxD(<&QOib?tPK~5J#yurIxAVH&d@<==^TKtXdwh@G z=j8{|yYf2IJqe?Hp5Li6pI6_k9pA-M-1+%Ni|<;GYxLgud{^)LBXL*$(&n!DEMMpF z>)*3{zP2&BwVEurqj&Nz>HXT~-Mfw6jXMny-NwFGZNClY^B>~>H5-zQdy+bLCXRUT zJa6NPLI;V!w^{(}=ftIrqfsIBm2tpWkr3gT?%P4_%6T&AfHJ^8<)se_gvzTd}|* zz0<~zwJx(A>Ng#4mwW2mNzB^Z^*oF36wb~))NyHg%efEm`BS$4PothM&WeZP{)mZg z-1iga30FW^U*7t)gOJym&#P}H-er~I2aH$3`um~0j?-q`>%e_FU0nYjd_J-GPJh9C zp6_dUUA9FXuj`?myY}NK&O^<7p08KA-VgFR*5e1tC+&9+w9iT0HQ$2X2krO{HselO z3SX{=<+!bWk2lwyw{stp5KHe(zfQl$+|fG;fZ{u4YKZS%zv;RJ@vbmE}thYwtSv2YkJ2g z%;)JIn%-AvAb5QD-!0_p7m$8N5oI*UGYi3YsCKsrF8D0Z$o}- zc^&gu{CVG?_oiRh?c2x?r1$x&X)2%3Lj5kkG`;hB=bz@{EFaUz$9rDK>s{}u?XLru z<@0)ibkDSG;=6ILMxlOZUWdMoamN-vB3jz5vlr-^i~egDRt1F$-d7Y3jA z>tQhlabM$u<@1j?q2}{-!v324cdO&DqmJI^!RNKF)%EUmTod0p4C24yx^w@qbiI?`I(JU6t-}%)I@~#t z(mVM~q z`#k5NbG;0YE59p>ozmlbGIE~}dS_m=x%2j+Z*$bRKjeqq#lOkx@T*Zfubc9E@s?jW z_uBKiz+HYMy_fIK&F4!t(u+IW4@18$tjBSjR>uYIyxqRV_eEaU^?9CWKF>Tg?mH#x zu%FaBb!d~<;S2oYDRorv`DKj**h%kqe`nL;JJTd^p9j5vY(B4fY(CFC7jK3G?z&C> z;@3@#y^f=dGw$-k_P)xL&zHYbaN0Vo^4)eFcLlD>=eYj=VfcNULfpChzf!+WzfbRZ z-JyORexda^@>tV5)6(mA&XaTZ>t^&lq<0Rh!~JXN1K&@}b^R9KuWfIOd&UJT8s}+h zeDV2-IO}^EcZAyJuKdIDIud}Ueiv`;XVRFY;d&W->v8#fRpoW)&!cnoYkmFw8vh}^ zD-H+liQ+yop-N)fIMSS-&3eXF_`Y?tR)1vch~`aaY`Rd~LmJ zUWxa?b&+XZE3ac(8~0Php{9-#Z+^Eb)yVmDy<5MXI-d7wufH>mQrCOTzRFG6n)!Tu z=dN?-K#Y6v`64^;d5iBlE^(*L+4Sel=Tp{ygWmCZ`gPfC*5r`V?$4&Wsac6sS!+kfbzgu1>Ju0u0KAd~_ofB|(^v-dMJ3gLxUgz8?2Q06HgK-B( zBJM{C@TPapt43Xa-_|?R*0`_m`O^I!=R>2upXr^3o$`6ELuY-h*FzEdtzT5gM-^=5BSeMx!@;t4}d0w}MFy!;U^Wvgk=iF=4`H0^S z(QOXHeV!94uF{)E2ItNKif;39#y#akN&Vb)R=gX%*ZhAC-RIXPme138(5UlbdZ$n2 z+_$$ig30t=mSf|td|7%|KQ6@gz&&sEZG0V8eH+?fnR9P`uhR7n7SlWXd_A9MzBT*j z<@4)YM{YXj3)#pQYUg$O{^G59;oQA%vmf-1&D;7rKWot8PFQxmJ}p{{uE mCpo`ELLBJ#xwX){u0L;cFPYf7Jx5>~Qv}p-*La?ddH)YA>Sn0` literal 0 HcmV?d00001 diff --git a/Tests/test_file_dds.py b/Tests/test_file_dds.py index b11b8db3e..bed143656 100644 --- a/Tests/test_file_dds.py +++ b/Tests/test_file_dds.py @@ -15,6 +15,8 @@ TEST_FILE_ATI2 = "Tests/images/ati2.dds" TEST_FILE_DX10_BC5_TYPELESS = "Tests/images/bc5_typeless.dds" TEST_FILE_DX10_BC5_UNORM = "Tests/images/bc5_unorm.dds" TEST_FILE_DX10_BC5_SNORM = "Tests/images/bc5_snorm.dds" +TEST_FILE_DX10_BC1 = "Tests/images/bc1.dds" +TEST_FILE_DX10_BC1_TYPELESS = "Tests/images/bc1_typeless.dds" TEST_FILE_BC5S = "Tests/images/bc5s.dds" TEST_FILE_BC5U = "Tests/images/bc5u.dds" TEST_FILE_BC6H = "Tests/images/bc6h.dds" @@ -29,11 +31,20 @@ TEST_FILE_UNCOMPRESSED_RGB = "Tests/images/hopper.dds" TEST_FILE_UNCOMPRESSED_RGB_WITH_ALPHA = "Tests/images/uncompressed_rgb.dds" -def test_sanity_dxt1(): +@pytest.mark.parametrize( + "image_path", + ( + TEST_FILE_DXT1, + # hexeditted to use DX10 FourCC + TEST_FILE_DX10_BC1, + TEST_FILE_DX10_BC1_TYPELESS, + ), +) +def test_sanity_bc1(image_path): """Check DXT1 images can be opened""" with Image.open(TEST_FILE_DXT1.replace(".dds", ".png")) as target: target = target.convert("RGBA") - with Image.open(TEST_FILE_DXT1) as im: + with Image.open(image_path) as im: im.load() assert im.format == "DDS" diff --git a/src/PIL/DdsImagePlugin.py b/src/PIL/DdsImagePlugin.py index 51bb0201b..467030114 100644 --- a/src/PIL/DdsImagePlugin.py +++ b/src/PIL/DdsImagePlugin.py @@ -411,7 +411,6 @@ class DdsImageFile(ImageFile.ImageFile): self.fp.read(16) if dxgi_format in ( DXGI_FORMAT.BC1_UNORM, - DXGI_FORMAT.BC1_UNORM_SRGB, DXGI_FORMAT.BC1_TYPELESS, ): self._mode = "RGBA"