From a08604b0151cc7b51253f8bbe1de837f3b675041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kurt=20K=C3=BChnert?= Date: Wed, 16 Nov 2022 17:33:39 +0100 Subject: [PATCH 1/3] added support for the YCbCr PhotometricInterpretation --- src/decoder/image.rs | 11 +++++++++++ src/lib.rs | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/decoder/image.rs b/src/decoder/image.rs index c5c884f..a3a146e 100644 --- a/src/decoder/image.rs +++ b/src/decoder/image.rs @@ -313,6 +313,16 @@ impl Image { self.bits_per_sample.clone(), ), )), + } + , + PhotometricInterpretation::YCbCr => match self.bits_per_sample[..] { + [y, cb, cr] if [y, y] == [cb, cr]=> Ok(ColorType::YCbCr(y)), + _ => Err(TiffError::UnsupportedError( + TiffUnsupportedError::InterpretationWithBits( + self.photometric_interpretation, + self.bits_per_sample.clone(), + ), + )), }, PhotometricInterpretation::BlackIsZero | PhotometricInterpretation::WhiteIsZero if self.bits_per_sample.len() == 1 => @@ -450,6 +460,7 @@ impl Image { (ColorType::RGB(n), _) | (ColorType::RGBA(n), _) | (ColorType::CMYK(n), _) + | (ColorType::YCbCr(n), _) | (ColorType::Gray(n), _) if usize::from(n) == buffer.byte_len() * 8 => {} (ColorType::Gray(n), DecodingBuffer::U8(_)) if n < 8 => match self.predictor { diff --git a/src/lib.rs b/src/lib.rs index b763fc0..60bad72 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,4 +37,7 @@ pub enum ColorType { /// Pixel is CMYK CMYK(u8), + + /// Pixel is YCbCr + YCbCr(u8) } From da07c0f4f55ea0eddb57de1b8e4d7c91f68e88a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kurt=20K=C3=BChnert?= Date: Thu, 5 Jan 2023 09:34:54 +0100 Subject: [PATCH 2/3] added round trip test fixed ci added colortype --- src/decoder/image.rs | 5 ++--- src/encoder/colortype.rs | 8 ++++++++ tests/encode_images.rs | 5 +++++ tests/images/tiled-jpeg-ycbcr.tif | Bin 0 -> 37575 bytes 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 tests/images/tiled-jpeg-ycbcr.tif diff --git a/src/decoder/image.rs b/src/decoder/image.rs index a3a146e..e3ea624 100644 --- a/src/decoder/image.rs +++ b/src/decoder/image.rs @@ -313,10 +313,9 @@ impl Image { self.bits_per_sample.clone(), ), )), - } - , + }, PhotometricInterpretation::YCbCr => match self.bits_per_sample[..] { - [y, cb, cr] if [y, y] == [cb, cr]=> Ok(ColorType::YCbCr(y)), + [y, cb, cr] if [y, y] == [cb, cr] => Ok(ColorType::YCbCr(y)), _ => Err(TiffError::UnsupportedError( TiffUnsupportedError::InterpretationWithBits( self.photometric_interpretation, diff --git a/src/encoder/colortype.rs b/src/encoder/colortype.rs index f6c775a..1946daf 100644 --- a/src/encoder/colortype.rs +++ b/src/encoder/colortype.rs @@ -235,3 +235,11 @@ impl ColorType for CMYK64Float { const BITS_PER_SAMPLE: &'static [u16] = &[64, 64, 64, 64]; const SAMPLE_FORMAT: &'static [SampleFormat] = &[SampleFormat::IEEEFP; 4]; } + +pub struct YCbCr8; +impl ColorType for YCbCr8 { + type Inner = u8; + const TIFF_VALUE: PhotometricInterpretation = PhotometricInterpretation::YCbCr; + const BITS_PER_SAMPLE: &'static [u16] = &[8, 8, 8]; + const SAMPLE_FORMAT: &'static [SampleFormat] = &[SampleFormat::Uint; 3]; +} diff --git a/tests/encode_images.rs b/tests/encode_images.rs index 0e5360e..57c569f 100644 --- a/tests/encode_images.rs +++ b/tests/encode_images.rs @@ -264,6 +264,11 @@ fn test_gray_f64_roundtrip() { test_f64_roundtrip::("gradient-1c-64b-float.tiff", ColorType::Gray(64)); } +#[test] +fn test_ycbcr_u8_roundtrip() { + test_u8_roundtrip::("tiled-jpeg-ycbcr.tif", ColorType::YCbCr(8)); +} + trait AssertDecode { fn assert_tag_u32(&mut self, tag: u16) -> u32; fn assert_tag_u32_vec(&mut self, tag: u16) -> Vec; diff --git a/tests/images/tiled-jpeg-ycbcr.tif b/tests/images/tiled-jpeg-ycbcr.tif new file mode 100644 index 0000000000000000000000000000000000000000..a8303e6cfc505be554989d72fe52430989ebb4c0 GIT binary patch literal 37575 zcmb5W1ymes7A@RB;})FY790}X9fG?{aCdhI5Zv8@ySrO(hu{Qv2oMsSp!tj3%$vEh z?wfzTVx6v2T~%LIS9fpr-se=!geeeoK>P$weE=e`Er9mPy8T|z6c1!0=$%U84xH{5d?Bp1A(-(fid+# zpb2B(%3FXy!nPm~s}peUZos?c1#II70xbsu+k}BYkC7lyZ|w6GdH#Ezo*#exnfv|! zEdToQYXu|%f`fs9g@J~Hg@uKOheJTZL`FhHM0$yifr?3pM@&SBM?gSA!AM0yMo&&a zK+Qoz|AvW`m6e!^i;t6;myv~)`FRisczAduL?m2fWL#!a0#fGx=jqoHa5mi_G&s-; z2v;ZwG7uyh1QZ&?uYM2#@Iiotg81|P11|{#0}CvJp+RuKTJ9IXCma$A3e=#US&KtHop%HZaV^!X{@?atP=-O_-k9+6MN0`Ml|Wj0+qH__BbZ zfmMWP&-veu3IPd)MoPv6M*p=8LIQS!M1w*D34nB<&9Gh+U}G3i=F5hb29(d#NX>d$ z4v$&8`|3VXzhNlDE2Sk$pxp;1YvLn$Dk zLM&y_;ybHU&q9nFT+r-KRLal(9o`ux9F6a7LDUHQFHzmWSGC5D9R1l9r?11~H1DT}9bYm-ii6L?7mPn_WQ)IJYlz zjOf**vcR=wl|^$L+u7ti^vEbNt!YlfB^%g}OS4G~_9@r;G4seU z0u@GQfGR$<+g*@)H;QsG?B_tt&MPv6^9TT}I~ zf;0CL;B+;%y8S+CeFfj9*037dMxT}XqkxB~*|!NKFK!F3Fh0=bd+eje$wtCps827j z&p4S`ovdNVXU-%Ava4l>-0s#c5lF0PFH9~_h5JA>H7fBn>?H`HHJmv4j~>`ET*-H0 zT4zge+S0vZ$J~cITGb{HCOIEE^t$#VcbNK_*mj7@RFR){!t7FGzmfmx(8-hEOS`#6 zPUocKq=j$0Z@`(~%Q!wP{BHZI{*VVN3&B;lcC$^(3E_LaNk;kTsIhe&bU-ZPGPD+4 z=wZ0^ip;g%Tma=m*yBt_Gm`^jQz28ETAB5Vfu5lks-@Xur$d*@&@p2DvP6z) zjje&G#a84Uh!DbHbO#9t+v`P9(%9ai^k~E@DpJqayHFQKSXZ~vmC!z7 zFm%FkDvlKoBX8*7(4?E?rL|9fE~r*3Bcp*T9_zr=f(q`iA|&s_gQpU!bdOB9eBCSO zjgY#0&4_m&j$M{66<%r*8*sy;ZGQtc2$>Dn;m5PuccLKe_odT`Nk=XJHa|Y)@|x^x zwqFt}M#o`~hh#BL*Ory-#KV)5uCQA6|AZn4@ZS&vfEs8R5CrTq6!H88MNsh2(C~kQ zB2p$8^k*bu7IN^h{lxz7gnFnnF#5kE4PBeR?nG?tT`KcDY3bTEbcJj zXl;a)4Kr|5bLVeiu}e=C1IaTG{^?v(mtPsz*S}|F1|94` zPF_GOamhtX*;{V0$K!=k!3N*!A$H=`$3Cd9u*;SCPqvpFNt$mCMQt5)6md!9Uq_;s zG&pC9Gjy4cnGnf3B0JQGC{wXpCRHqPBZx!dQRhXj=oVR8YV_Cgv*f1>oypj9Y4RhA zvv9`?;fFZr3#7-Z?dT{Zc!viMPP4U>D$1}q*Vp!KIL`NtA(|qQzmfJ)&vo@oyR1=v zyKmdDFuG4flIh#5gNhro;0jSI$+`YplM3DPm5)@Nw# z4+ZKe%Y52xki9FFnUWf9W(3GRJ(k^Ia|uyD{2Y!tbr*By?}S@y;T|!G9)az8VV~~O zV5e5jRpL4{K(JyaD>Szcu5GezMM;Z4ypkMdTAF&VXJ1Vw?@m^zQrMbJEST@vf`l5mI4z_u!xZx~C-yI9TU5{d~Lu*Fj zN<^KQE4XuG;^m`CA%US(XoQn7regnwgZ(**M+@pdco`Av9p?kbZj1wvs&uI=jLl}hu=R)6d;1?URp924k4C97Unp5rLnb-4Jj?~$ z9r?Bg-gY({5K8Nvw)!kp1v<`Z1YOjL9>dUWBf5$eSQeK#rC09e%|H`XEYbPs&; zhNBEaMfcV|zv&IkFVIr16(U>FWV~%Nm6stxvR~llFn2RIzl)iqYq4cRq<&g*ZM|f4 z-E(0{g??nWLv=N2Jt5?=q&7gs&*G|hUrxf5z0fLPbY>KA!cM5?h2WXYw_f?}hXY-e zL$dof>~hK~G@QCMhIOJ-oL3I!$k#GqU*IEGP=jGVcHxeroJ0*|H)_u6@YNzvk26>q z*-t`=wH#l_p=My`9Z~l;_0!}z%au&*w<+ykzuG)NY67= zDIL$r;&sL7$T6dE9Mj%IAHl#bM|o7Y>u{r~exr`#iq0T&Wc>b1>V;vGf%*-X3MVb@ zD(L$wc`Gv;2J)5i=!Ij9X19YT8iUcV$I#W)LegQ*$c=;2)Xa4E3zSJs;_yGw=)X7)7!nE^2B0_~ z05pDcoM-U`|2K{UjYbNC&Lo7P=-}T2i%G_80D#dcxv-L*kFW2!|dve=DeQ&6ELr=-~6#?EyX^98Ye{)RIp13g zD(>S%FMQzO_H1e7eQyG}D73a4(UQZhP8({^ekT@A&Vl$?gcnAM&B+vDM(XFzl5F$M zjB&^VR7p7ryeQ!ytE9}64GV;J7O+!iAliq#Mf}rAt69?3>6hbz(Gm*W;l4QLT3*7Y z;30jt<;YX}-fzf3tr7dZTD0pT8F!{buNx;W3C|FtyBXXJ-eK%wZ(7o;<59_zvd+Rb zk!`i%on`n(-u0|5it8swrRh7chZ?$7VjJ>RzWQ_&S(;gc>(=!UrN5Xar1dnoq*)t;woZ?yNMqsj%RDvlrcLhV|hWNEGSxvK`9a2)|r+DB!&^mVn8->AA(>cNh`W zyZGZ%k(>5v7ksSvSnejOf@XR6xK!!_34;61s#Zu*K2<*$btD2~BvWVke2#0(y+4Vo zC~)#`$ei^|vmW0Gd*@V4Zq%-9{4C8ASVjx)8%!uNp=d`OL4luPvF?j@r$(;(IMKv? zM#D>^JH5QszFj;oKC04*-J|0&_zU#*vv<@lP-wFR=WRNdX>0caZ|2+EX_Q0BEAf_B zGN+c(p`S6TEv46QkYQl!#a|s5t4-YriSx(ofVh^?T5d7!eNLVo zy0h!ax~-GA8!gpTxOcZ5@ycrYNIb&3%?Z7Xs#i5}lkc-P&^8#zv& zIkKJL7kDX#Mp`aQHYh)3qi02;f1glR+Y~D!I9rrE&+_VL{T_SPYg{EfGAEV1q;tA3 z)&E2CZsZ&2=TCa;$scJwAF3rzT@=04uKBC7ObNos*TEO_64v<_A{d@U9=CLsaj#Y* zUY`L{&Qv-0H4mg~wqgHMu2N@W@f>=APng4AK#7~d{c?`|t6SO|C6Urqh`j;D>JZnx z*P2kfrNLpvHI*5zR{Q37&J^D9*AXy9u>OO*X2-|j#AfeWonv4Zj6(X3zvi*~8PCLJ zB<~1SQ#>KO?E_zd>#{gHH;scc2wbv$fhutl*I2e|rrEBL7_*Gx2d}J733wLcPw~Y6 zU%&_Y+1vReumoQKh9DRU3`T^8{mbn6t&#qCJr0R|4fH~;Q^--04IWH1o|5QfqttjCNlEB zc)EBuqu<^(O>w+y?LF1XNGnaNf)3AWay z6js@@Io@ri_Ent9<*shSuh7HpHB0wS-h)qI#ZuoeN<0r?D1UMJH38yGlgpI8XGjDF zW-q)saAqQ8I`65p@)roB`Z1r`f@Nw& ztRAYwvH}XV#J;CUS=tndUTE|+!DqsrgKaM^;rJepPO>t)3Q{h~O?aK==n@vmoO9(- zNv+rB_<6M-7=7aN^;?m8xOz8S#=JMnmSryAQBEHa!=ZbkOwTC|L(_=frWqe8N>ErV zZNT-=e`JW@9EGA~jCOBqCVorxQ!*KaZU&!bLX}r1p7;Jos0#F+wT+kMR*|HF2n_b* zkT;exM{#kJLH)NX^!@}-Nv&*AAqn`}m~12a;Lcwl6QOT2C?auV>6iV>>|*`4(8*R2zx)EF!3#UgL8@R&1rQW@9Km_vGgIl z_sP<{d$0B&ThNx{tF$B~g{H#6I2JQS>sCb)O{F<|1#%{n30mFkai})p0_~5d9bC$E z1>w#_K7x9IP6=0LV%4mKDGyqfzd*v7ukOAi3&6$Go7J3zHqcYfsj28bv3sF?EgcmY zq>#2!)!GQf@Kw9*dy!0zD$s7C^WoFFKKuMOAwF_?_=4$6Se9R)lz^WOT`#HPZU#hb zPIgR)ILKQ>&KSZ*FHx2$J1ThhxFtY(v1?#gm8{^-1nn)T+EZC}!piQX+)w%eJZ~g& zno(lk_lqHAIycBXT<#iR;7hv^rXSX$ z?iU$Qr%V>4SeQ>D^1s#Ff8hog1_~Mk`FHgOSnU7uga8{E1pc=@4d^$3C^^RUU{WyW z=GE3=u^0x#0|xc!KNF^ZskeWGD<&v3A@u)tgz~kP*vhP&!{d_BAqwAC>MCY}LQ9nk zMXN>^-k;1**T{ui%ZgB0eZz7MU5`6Kg~9~U9+M;%j^AZLct6e~ynYeCBSdp@9PdVb zCV7U**2dB?qlh3$7+bB0(Q;ETn*@Jo;ssX&Ny<#gr#S9zcb;SOLUzZ9T@2D0|5KO% zp}0fd8M1WHM|-V`j|u!3aelxF)N~`QU5ZYfB>aY6AZs4CvUE-WgMy)fSM`On>&R{h>Q>< zTvP;0bDB3jlGU~}uFCo2Z4*bB1FcWHD2@J0(!tyF`0(nL&DXZ4YO%X!}Ysh$pZ3M1;6ZW=aT5cGE73zABkzw<-6fSiWePoNBSZN+8T@ zgo}DW>6~l$5*4Wxn?!KK5bXd#71Am9j*7jY7`u`2YEAV}N$y*GBQ0#OdqI2Ql{U$W z6SR87Cdwx0krgH@_8^L`yv!oTAQ zagyUae9{!4C0aEW&4M&fbgkJ$UAEtSY6STnR&!~7m5QL}%bTcYKwCzN9O_6D@F?w? z7}FV5y$xSR(a-G%K_kts*{u3639nicc}NM}?`NW+vmmhq)yTijq_lBqTh^de;9A!T zv&L?BomV@hUw_XjDaMylI zT{{iGb)ThftnF+WEvj5Wq~>p{E2i}oND{06{xOjEzOz`>A+@~UYERA(E3!X4%GTm#DNv-C|L zSJIA_!2UcVtGw^m6r;lqj2TgvG(2%_k*_A(JoB@MJ<>T)8n7$CKh(}W(os<@#@drM zR%0aUmk7|g5SktO-%LAL!b^!JjE15W&abGMOF9^kq+V=jO1m*uqqn@qENNmDM%VWr zUr@M=GXLKc3;J)C&~JSQ3;LJa1PK(n0DT7o^OrFMEP>F#(0}xufkQ4V78$d!l7DRv zCb^+w0N`Y^iNyaAc(}m0e;XQbupuG-Z8kwb|A!Ox+iW5OqmwcVDgK>dea6nz#a!b| zBB#q;SK%$5cCu20T*Rc`82wSz-#<)Xh1$?KW*ekPLZIS+!V~oxu3)=r823ZR!nM{i z=Qo2L*=3jhxuh*)KaB9>z-wTeET$GoQUv~%XtF4DgZA=T4IO*P7 z@`&*yAU{a9!{ES%5VG1uXTLDF9{&*9RBjB;8vELJo((0wEByVTLUv)9=D>FHJ>Gby ztoV3XDK%FR?j?QR6_W-b8?O(A*n3NlfhejZ7XnC;4!C`9xID~Yg*9jTMahZIN^u`X z4jdADI|&~P;aS2gCVH9T)UqXHeCDjTgB99Wh-u=}+fdQS+98`xdO|nV@-*w@O~LCk ziPZ+hOCMQx+WT1B0E1$4;n~7o#n0*L6^%e<7}L#CH7)wt_MZ6T9N(&l~i+D z%Q;a>Hoes4=1}=sOXI396=Ww?ZL4Oa8`a<5oaD{@2Gt}I!%Ewg3wh|)eR@pAmZx5< zB+`M%G0-0F#mbf5p^~FS?c2#!&?h1`#55+ZaIFXB-ThR~w4#+gd-jFlx~(=1COeEa zh-35$uaUO!QKqv7uh%IrX2M5Bf?2S>+$6jX4-w*n4le|z z{lTIvGRBwz8i`ObZNNlr$jh*MdePL_JGJYNWziG0L&&H?X!p0A#LiBv?5cjNh;+z4 zA0O_I>ztzp*?Uhpg+fB~bk698+FR5WM{T;3P6(_@U>869Pw;xKg#91G8tAY9jB-E) z{w~0A0s0UE3IZA$8V34b`Va~PMk9s(ZBCH^UO6nLl7Ac)xv*p1G&2iZZmo!6e9u2K zt!H8Q+nOT%ZA}55*uRhZmoNmQGqV6={vErHr^U2h%!GCvz10YK11)jRTG<1lK9rSw zsJ|>ZZgqb*36BuC>2e^3=Cu1E_5($cpnB&`?t9cel3$>W{p_WjGbxSO2azc8(}Xir zMF~o;0RG!8O7!=0awXmaQr4SYN1Yi#QwcqBWif$w%EXYdNjumb_8s$n5N+&So^NIs z3a{Y^{b~EF-Y~N%W{J-x3G2Lxmn2qG((tG|P`%PM8m-{Lmwq$Qw~KO0@bJ~qJtSt> zXOcxQL5l?s(Xn(CngSEuB8A}4>_GeNm(E@X(x1V3NvJsnvz_M5|H9}L1OPPohxl4 zrACw2*67}4Bg)#jei?G50gdp3X1yv~V|CZZ?HF+*JX%1J=2Ee8PP2u4o%)?2mid&h z>O+OnwmJc(EtwwDtkL{7#n+evRLh9rO5|kM>K#0Ko~FUQ3j+2Y5ni9obIGG(6f<_A zhEbB%@Y&EFi(Dn`XCowZDNPACl{kC0FL*USXWFzm8JUN=hhn@PiOYp0I3$e1jQue< z({_T|sq@W%`QS_{q%P%P;DrG9;J2f4#+C7xIW?-Wxg53e;tI?Xw^7tQlKoz9HQ`?w zEfU2MuZK0Q>L4d8MDlj#9VADjOI-_bbd6Q<-xLQxyv_OoZ}9^Euz|dFO*YCg9IJ@= zG!XYkYNi~&@!bCATf;RvXOc)JT=L|A@|7{uSJ#^Ly9h{eZ%k&XI{V-7=T)>9+t{x( zTAt~ou5>0j@2DN_dOEXOd>fBzQ9m>sFv7xNUu~-C4CphLMN&_QC0DgRi??UpXSP(B z#i;+Bq2oNR#-v%LNGgkmrfYV+JScnB+RYh7uKWuG{dhbpYN4xn-R$1C3^R+c4690V zgn}i8BA&ZOds|-}MqZ-0r%t#L=#vc__VVdUWjknuKA7dq3CnuPEp~YTi31|1*Y9PB z^TQGE^-lgm_oC~_Nd9ZvvuGPKlDlx<`NTCH83BSwp>x7g~!?k02wmVF{C_B$8)?*n`r2v?pGY>qjOu!=6C@vSHbg7%TkTz`QI zw0$iE6v}Z*(LPzw)km{iBXHS=m;K0iECyQ+1sV6Dq#>%6gRlolBaLp#if%LA1`H{;ph=EV2mFRiZ>2^}_V!p?Uv8*lB)>#uhUd0;X}oO!=ykO~iMWILP;) zQzHJN%!0u4i3*#7juxwkC?UQd0@pF5%H5!r+};TEvJwcvDTJjJ5eeHR;V5$GI;%w9 z!;;UHjxD4ATZjIWZx0~ja}|;AFK7e2ee7Spp!CT098c)T1+yaifHHn zi^akkmupnlBckFQ5Dzpb{Qtn??=s@wkNgaeV4yt#okht1@94PLT3E?3M>AiFFm>TS zJ;$COgf2nxb=5Do9mQQSWpP@o3|`uJHxk7Ki}%>&B~M{K|G8_-Ev5qwe|HOWt(|G% zV-E3`k-5H>xrr9@9A)OR7NyVa!&w{4xxH}6JdTDY3u==Y=;ErzV_Wzb3x$YsL}9cBHdp-4<(N<9 z$EWYAn!g^0>Z0!a3#2A=RgPdBy4;wN1ZfFpx)FI6b@B3UhkSS%ADZM6JH$DR)Kr|R z;vnQix4~4~t8&AgaPKafET!%`c>V6l<-G|H9j#FcipSYwx#2alv==){w&TJirAV+) z+?~o*2Q&YoMasfiLtMp7LC;$U@!>F8fP_&OKhuXP{8Yw5^+)a=J-#Yfx;J+Rs@T^^YhclATPhx{|&EO{KgDx?z zwWfHBjTDj%u>ilfPTRfMCO4@eX2G|dBgm)5-)?*{#9eN!jq4I|u(}>cPktr1-H+~| zz@yCD+%C*G!>QvefzYxn$?}K`=dIMxvT+ZeEPdWqxvJPz>6Lxq9uk z5FmfF^D_2~k9V1MJ24Wd7zw>iP>~jHR6k|+6fKDp19*m}3lzPN4WX#)MXKLh%bUFPAiS>75;EjcOikV?cHP^#XHY zvg>=CwXcWxeb8(3X!_h=AY9(BKHwekrXTV0`&e36@t-WXOyW#GuAX}z)i-_e2R)IV zmowDRnde-TO@1Lfc9-LXXUTd{+dj$sn8%|C{+iq=;wrFLbh$(>N<;qLpwH|V$cJWS za54y%IN&w8{Gr1~Z55A9#qV#(mF%THWUtOHF;mVQAttT`s5oye z^Xw)re0$6tlGjZV*4dF!dm6p0q{7|p!V}!pc8U1DPx%DZ;@cfUd_$uI30xOd!&Lga znEa}XQs`E*Ov&?2PNiZxBT_uxUCtTY{Up)}@@h=dT4>2lIvQh#0TZ;4|HjG(@1Y{8vlF?RI21ZL|v8ff!cof}fsNM7v>u1A&+s^R@E# z7S5jwt(MIywVK<8pC-l?M8#8U!@UxB7{Z8kq{`H;wBxH zjUz=%q!fh7h}!2D@3j_6k@4c9$y2!sYTU&rPcP9*qvS0O*vS08Onp&=E5f5f+r^~P zE#eiEbSXJUDanhbShjaizn;i2YpYKl_f$M7zgNyUs8J`7soSOyu#L$Z)R#1}MqVI& zKSV{OQIgE~W~YHoLo@r`>t-Sqg^DimE0~x|@zT`1xr(1#S@_vV4Hc*zw)bV7yK8ku zLU)Y5Q9m?JDS2FmLRan5ibJbE9IXg}jVzosca{2Pgm?P${d~48+x4`Qr@HIHxr|99 z6jvbPG}l5}<(n$mCut_LF|P|nuTN%kjrIDv_ABIcDzjF8v6~03(eU6<%vLoKb9v#x>F+ z`U%Em`pGO(#&G}HfNOHWBT9-J&2B7@SK=btQ6#={>cugU5mhD(D-K0ecFcQ?2;8Fp zcNBv5V>fpWXRm}Cn^U%^C1-~BbQxDFs2-1W>Sa0*MH57K)aGA6@|wehA8tl#)+)n@ zg0xh6OTK<1a~h?d4T*mFxnJd-d+G_j%|_)S=%68L_2Kc##Q#-L7ndwa_bJFbWwMMt zSoqvxr>0gQ&BAiQoWlYJ-@N{-gctPYCTD7-I^yV+=B%j6FT5RaRm?^S$WHakmb zIIMZd3E)k&p}jZo!Z2I~J~TX9ZWUYPb=JPh>Ze_o)LsZ5_EfZmUUq)1*dnSgQa$Hl zn|IZ34-{_-rn&s;L+TemogXi9EhuntR#L;8-c(_`CN&s>Ry_|D`*=Nbq}@qt!5)|t z1F1IYC{Fs*TRuo@S%@&HN)n-rS+Z;-PQvA6)fIbC{hIdCXie4Aq##A9@oGqOb=Rye zu<)w}qHQcL!3yZZxh%x!@_rhAjjyPQlD?N0#8+ zVp4ERaGf#@BHCw#tQuN77bh|kSCWmPtE1iB)A_o3td?u+<0=m6QX`UJ+Mc-Ef4 zz<)sQd6VDT^SKQjgP8>wckAy2>tenXW*)b=^jH&FB2E@{e&4te*HotkT-q~u<;A1Q z^K(JlyJpRem|opzWW?S|QHWw}u(I}|7@tc8BZ>73)%PUz2%@t|OZASW9_t@Xv@vZx z)M|xdwewqg&) zSC-{`qYt-A*i%%~Q-XtQ5!J{$D+?>Jill-bm9kJlqze9sRpp=DhmODkb0z^Xs1g~D z0oOBu*{olCFzRRI?2!RM5W>u8wOnh~#)?>I7 z+4@MyI)U(_D|Mh?^2kkvo?n$?>Cir*eUoK4#8wY7CO5aOB7>W7^8Useb~M~4t4K8# z-MwlwW_@U;Ey%3VHAu6edGlw@sDQ;w-$v*Tt5*?PyJynYWdd$MeXR1h&P_{nW;5#~ zuIVd**-sVh^Ly@3*u%kC!2j_i@r9~Z(r?Hiat*a7qU_hF1&VOGZ#9PCkR&Ni_J{U# zO_m|iw|6;QMct5EliX84RV=#A?~xpi%UxpY_%hPhM= z1)I4HpC4*oR3YPLrf*mpGZgiI@4x?uooH;*h zU!ddw2-qJjytO;$RpC>s{2z)1jG-NB>koZ*;Oqg2kyY>*4CJrp|z3a1& zvtUG(cMjh!Z`$riOqgg}H1f%jU%f`vw72(3jl7HHZycP-7(d|Wv(Px5hh`m1shO>! zjIki>r5Pgq5YO+TwqTW3^)hqUVXc+oj>tKDz=lMzx#RQLVAK7vXoOTprd8~-&t3DZsKwS zeJL;=pb-~8Zp?=K%vP=VskS>be$6Ud?Psl!(AuGQrRsy}U{1F?^W^;K@fo>6@%H1oH1Ty> zU9AT(_JaU7sTmP{w}QLMrYDpzW5X@gLb^x6jsh&?4urV;aV72sX^Ixfj5SY5`_Ru7 zM|tiLmM8m7tX*p#m{FMG<+hdtUN>eo!~xi#F8k zw7_v_B+<#7wD5K{eQtGpmiLu#lXL@iS-XQ!9YX)houilKLDGA zU@!m&D;E|M=-aBDCI?uOQ=DVnKX*#}Mznu>`G2$FeuEM^6Ic;w{rWFJ>Nf8w3SOD@ zJJAVIa31L14jU@u6CoK*AO38@Xr4}kn(Vp2flnAyDXpWuuf){IhZWUP!8u!mLfi3} zusO^~k19{wba>6ah1tMV4>yIbLJ-gVUQxL1RXCQ5`tXJI6P+(^GVV{6+AE`Y-^;qB zOJ1XQ(KBq}nx%=Liwd-KUWJ7>>oj4gp`Hj|Ea&24yoJt}Ys3x7@m(sX9@p}-TG)^+ z$i?laBpjV$!<{Tg*nJSK%6EDgu(CXo5!`~B&D-^! z4Z5@>eI(By$%W(&s!_t5yJa#3l8JDybI5sTEHKi`Fwm2QZ=-<`CBiZ1N1_sc)u&Ez z%bGDaBL_1Z+E-(r5oxTym9Hi9C>*;9jO(qO5payX;PdLqHf+>BDZIpU{ZuH=8>Axh zQ!(=t=e>@H^6tnWa;#R~K(%h$ajiC7F-TKl?WnK+Lj(`bZgG#UWEI1xCC2#qp79P^ zse(hV;O7)Q%j=c)F^h@<=qbL5YD|M+r9Rl3d((~&4GWcEc8rD$VdoZ`R;YEt&LE^U zO>6$}tg;#Dyw~pII!)dhge+sJ_lu&}T5>maT0FN)BELXFIvXCntX!O~CI(HA(c(EH z_lsh#q%HSodF)IN8Ai)7(U<+_DWcyklqe%eqE%-cFss8IL%Rr$)=3a)sXy!Cot)@| z9}FJMElPPi&V#uLlaphDGqc>FvR>$WH8(mbo)PP$OY)@*mQf@&;YeE`_fa!3m*rI* zBwLPg%cGiromwgK2rx4AGkmz_3d8LWBU=W^AEB*|B@Txr0v1Nmj zoT?k1)#XjKrR8?#(*z|KR|0x7*@f2P=guL{$6Sn*95+UT_hq*zNlckFbYOjJCJDzX z*OMjZQiWGdm6FvvrxX-2CpBAKP)AkvMgVNC8 ztQYSMM5z>exf@~f5SAT`c)`S;Gm&R*wmCFUJJHUET9j+dnr@uABgo;@(dxXl()jy{ z1}w2KaJb7!IPgY43xy~CcX!u+H@ZJ_C}>!if8WUm2?GmszW>FA{xrG+rN`$+cUTNe zX27NbWL<6#mXafI-we>>4*2)I|0wDJo&<~xtor9RcTy%OFuD*K^M6$yCj&GjU|Bo2 z90`T1LpKY zBY5$W#1Nq@S;oD{rKk_gtvg*zZK2f zYZ$M;-w=J={Gq#WdvK0|vWdn#PE;sA7}D(souN-)$+-sq?S|uiX`hP$iKztaFxHHC zEL<#^pn1C5;K`(s|Am?-=VV?|J89K1VrEi(mt_?W%G~rwkoH#f(kBj{c`1BW%cJ1= zZB@rXkyNuHeSY;T_~mbu3AnQe?zMR8(qN_$dXxnc7yoM#|4($@>NG*y6UE(h#}wQr zMV0MeX49-4hJS&=>b^U3NKmtu`E6g4K5BYLlBq3yd)0lEO~;T^X*`qwwJa7~C&Qmt zdNx3Q*!NCO+BM(2sRnj%jAQ0HMPGxx+$Yf*Uq>>w;}>Xjo;BJC23nm?atXP!1=-+z zoaSUoAB6_5O2IFXye#q>qB0 za#Z47nl+_bzTCD{IIatis(mthv2#?%?dp>BqS@d5N*gH65~wrR^0+R!ky2>Bk>(}{H(A&S#Av6GYbIU7YAJd22q{d9rYh5Dky!8t4bIf|$ zSJ_nt3|iFMya&Cyyupe6z7WuC z3m%0kOM_uULq0q6h2*Y;-FU)o;rKCMM-@K;Kh{Y>X@$VL2hs!bu#bGY6`}W1xJp9u_uk>{Z%FFtx(T)!Tj0mo7%!P|V1SJR)4!D9l9h9eUE$aBVJw zHTEFHbapJgIG^=NtQ>SM4Y|jH_Iu&KPhiHn#atmdUhQd(s}m~3PU zakM$@kYRW4)Tu!VgMt2!6fl-MGw=5M|2t2@2h zEW`Y{(+)t8zdE&;Fvx^p6ahO47E{>3KbL};#j$4^i`?+p8UH8k28MtF))1lrhkEWP z{r3SOAb}1oQs)1z8BY3Di#elvF1A{V$wPZuh@!m{Lq<6_RtOZ%i_w?~ba-Rx=kftE zLMUfBFWxz~m`dw(X1S9U@=$k?vMq=2P^3hXGL&`jLQ@v4isSp|ed2m+AVWmHoJsE~n)fW`dTbA3BN?Ea3>E z0wwN!%4Vi_G0mC`a-Ob>&V2FWA%%tGg&z7$JaEg22&%70Chs1PO2Y_ZntrY&Ox(+b z+~29j4`^ywU&0p_W9c8N8}mpA7qj)n?R47{D{7_a^ROuNEtEujxa}c{ zcV#9YtpmO+DJ5Pn-r_q3e)@si9!8@jgdk{cF0Keuo%-6MmYpw;0752bbAPD|zf2U9 zTQME7i{^;iLdBrqA*}tIq+3{j<*JQUv&reSuogvI>dTO+ha=(_Hd#|tSU$*!F=tZ9 z#W`=_X4_?Xku_F3z0Ww4Z}Dxv2GNjvmxD2?24Kfko#0zJl{Lz%>iea!!))MToT6!G zV2d-Ix_)|lXED2maol0Nej^A~QN-WA(E82qRn>r3N5;wOYfb@#P;mH|x@|d5&?iDE zam<_~Z$V<&hDw|-9mS9XiUpLH-Gp3XX3*Dz7e}l|Dy6D4ny5`kdM^xCkQi1dGPn+u zju_)*lKgV}VvtSio2=1KE=Elj8F~!pcyS?=>R|Lm33=|16|V=ZiH)Fi4bpH>guV7i zl~fU(=o6NAmfS`2+uVr$Y9!(d7}9wqEm#v=lD>S!o!sMG;s9w zLMuG5Kk=&`Cfw*Ea;BS7B*x*MGKYBjs!K_;I5AeU)s_X<{7%i26%)Utw(G2o`HGQX zaIg4saEF4DS^Ir)vWF67poda`MXt_Lc3+Xa^0C}i?l*uDLJekW9>j1<*UO^4@}xNA znYB{*jJfL<3$r#i4K12k0;2=%k>`R|=wQA9@xt*TM-;)AEvh^TszBLQ*UwO&p(b=S ziW=rsk(%^K7*%>ymn8KnvRhPXa%FrgI4!caWyRCO+i}!Qq;ARe3WW=z75bIv&@52; z!wFl@8(s118Q*S|q?90Hn=i~yZZht=^KgwLf4yiK?0C!)K@&$Q>=%<<-1f0F$*E~a zpn+LJeSdByk73DTe89p%ujX?m?cu89$^S%{zklOFP=E{rej(!7BmxiyXkUkhfQAA8 zi{L!p;``jb{zr)U!!keL#fPcnFpc#}*m&#o*|7d6g!#)Idj64u=ibx*0JJ|sOo;67 zD(v==PbPfCryvE1>+FSa7rroScv|8GctlPygbcUDVK*I8RZIKH;d}OCFG~yCwEF~$ z*5U%$^jZ%nDu!1S4Nd_A4m{8j0TxGU>jo)k3B)# zRp#i2arb{9(9;$d266KrzIY8sdZX{%TRRQX8FZy0x5)3E*e91Z-?oI+7W7YZCloi( zqF!Ipj2L5IxSrFS!H-=61!=v)ObtVVsQI37`@Ww=nxy2Byw0uGu%uFLa~|HN#P<+( z@7^<1zu15_^M!S}!BdWL|Vc*J^uHOmk$;`hJXy9eEfDTYrX#wfp zNVug*hZwz6{;k=vaFXJx+y{6 zm`?YH$p>$j7wuvSdd0OvT&kJVGeZHZdXr~P)nAJ~f8FaXedRh!HJLyuG0sA_(FV`^ zf@22VY^=2VOhinT*<7>5^NB|7pgy$<7h=bU{_Rbe)MyVa-QtXFMO6`I;sm!ts-z^f zG@)BfOzu7V;i`CX$r)R9VqK7`MCL1zU@obPP4Arb3CB6-htb6X3yiEhuR^k}b+o%lli;W;G4m`4$2E{(q^K*fA zy#j7kuvq)>kY^s^nAMVsDOERIv2bBhS*m6+yMr%|2{CGgTPOyzN}CJ2#SrQFyOq7G z4>br_Z~fpV+t}(TKYr1oo#04b)euWIO8mJ#typDJv%35eZn#K4@yKIg12_Jr)t?MA z5$AjzD9C+fND^G_y<_&|(LJMt!{Xq0w0qg;9QZSzQaPq42v#q4TT(M9m_=g08Q{4oE$x*QG^*$0}KuUf?IHR zcMGn;T@&01PVivCIq#6Odw0*u{nvf-B_EQZDph%Uy8GANkCIXX3@=MlAs2$?%uU8= zWz2jv>NaVk=p0ZIc~YnGo-Zh>oB>gIelQ-J0o_46khtX1qnpM zFpJlep`Art8A9$*{LP1N{=K_meDimPuiH9h5~J^BnCl&zElBgLE%66iQ{OmglPnN3 z;8uRQKr>(fSlYwDUm}u}RFO_nzf@z-rWL-Ms`6WpOr7>_t|2fO(hL^=8j3KlDpT4z zkC_&7S_1=&;2WDn~CD>#LHp4!1MDA(UlAI0aYRrrtn5v1f3ebz7~s zQMWNJMl$6T=P}mRa36W6J=Cs}iqoywh{9+dr2_w@P8Wt3sk#6)jUt**eIe!U7P7@C zQLX1<7FLny}2U{-^-CGA5H=iwr(zR`GaP^(<6~1G7gXSud}se zzRL`Is@AFi1lHCh>{U^qmm_-5nlk z@R#cp=@^i4^${M$m!Em(Msu5G#ka`su^eg}BVrQx9ErGd|-E6EEfkRC`Y$H=B=M(J$cuu6G%hZ$2NGLrb9UBb<6;KX#|pylOM4zfye zoXsm;*crO^m?<|;&8D@eF_Sv1 z|Mr_#kAKmiIAXROqSKfgq_FEA4mB?;muATxh8csRKVtP5L-S=7>(|GA4Oirp8c} z=5|M~-*e`Di}Me4dn=P<5!-r7?~2VV!By!+6hUP+As7R0>0>{B_Ki-YNQtp5o6=-T z_@T~CAI~s-vOT$lBrjFuxXY5VzS&H7{9;O5tujnLqnMYZo20kBcwDsihuv3_2p6Xr z$TxL4q!0sWD~ehf>p8Lh+fj72qDQ*o^M~oae!-y>MxW z1~-OO0hwEdob?AFP22kyPr_lkv@4U}^6*B1?z(I}dlE+=n{e<|O_XQIW#^}h45$EkJwA$i9Jb*d*JCA2Zv&hDsM3zMq&8E4`qwDF6xQB$u7u+UhhJH279e91pEn&}HJZ?R1p6HHt>XvJ8 z`)BHy0M{%;Ey0@Sj=qIF{&DV|0I!G1dW>_n@YWJYV3?TdCt~Ar zN}}+qLg9WclCB%wgHDH5=JVm7-%fhub8u->yh*)FwqaOGe%@^e2BM~xE(&>>1}#T4 zUcff9Xjw&lX4;K@xv?5(6-+sdt2k@`6d+V-`$F3`sf{sKP6^G5`3MXjXoa~qF%)IR79ka z7s+?i)E`3a!#CPHHSFk3RK@NuceR=Yv@WC>SD!|-AdhFmW6n;&q z0-W>mP@b1%d-O@w|Kd!&Zrr^(MgNd;V9^Mcj^I`f7-slhNfsD!!0`h3|0(5wttoOC z@C8o|1dC~cMFAd`f}<3V@5KhYQ{W94aBTCxYDb7y=z1MocwJxoOV$Y;j9lzs*7jHN zcroNKoKY&bR*dx3_Sjm~0-^;GyOWa$9@0E!J5`a?7uq|rj)lpB5%FQJ%yoG@!RJO9 zQ59C;{CmwJHjXJSFFpWanh_W}x>ACrI1`F%843AsINj zLp-8g0=UWhl8hP0gICENKKl>23DF4%;W41!Zp@h=O9>SB3$?=FtrqY=18vS4S>RZ~NUSyRxcF3tlk< zf?DD;Xez5{G_UD{qwthEwav)Q5uNUYA4CWY#dB{~Ewp>?OuRn3m-FRQA#+}IuY8ou zp)yck-u2Nx&TPugW?OWraL8ZPeLl>m38+6NOPRl?qZ{Mi2rR6YQ3uLXOSVSE`~kRE z`2Ie%yxjvjxT}!X|2CR!mbu2hiP89uFr{c{Es%=zaV7CRi^EwvuC|}$r}}brp~92Z zQ=I;OZ<86ffv%9&LtoZBm|_H7Xvp~ZMa<#k53tEKy0$6re6t^U%MuwaL(Ar_v5uKjT&Qll*Q`-%CE^VhMW z%+q3hc|LZvJ+0Qx@*P#TL2Bp%#5zm`ZmTT!p`GPd0mc*Wi}LjpYg+ zji(|eXzv5s9sMG{onnKTxTNgzptPGR?pooQwLbu=4-2OV!SP47vxAa+H_gs-z7qo< zhOu(rX+IVfCSYE1oz0C?wq?kaQPmvIe{}WJBulKL+=T9};PWV8QM=7^i7Y}$)+k`2 z=>1M{6V_@EVu;^pUR-2s#g&z%ZhkqwlO?+X*XwQj;M|)rFsLxBs=eV`lzwH~G4zTX z%Hjcf{s6eWjfI^!V#>TV-NeGDrhr#Xhnh`h^hLDXN5U7B;WzO+KK#Ae{^zB$m- zn`4>6*VOJ&HOf9!XOx+w3&>@+D%-g%f3wGfMG%J_G=e@uNBwyt8N@x1V1>2*QPP>k zZIHiniq99}LCRMGpFWZ5t1kBquO>^we`jT2*Zp5iDi~O>e+AAofnn%>NEy^$D?5LN z6R=(@JDB3Va8w+>YdiUM(_GHrP&)X7xW6^x-zDPf?@*8suRrnka_3(t*=uC#Hz)fS z1-Tt!@NG^x+#8#lk2|y%iyGUo-VI5}&UzRf2}0|LQ4UV*KpTEDD&U(|VO4eF;6Xt4 zVShv2&%=;aDAo*BXb@4XVx;#BW{`XfQGLiI#I@0VS=OZto=UGGiJR*CkhfxgIS8-9IDANr_{?uxQY^7+eA(W%b4+{u03` zMS*R>M|NGw{~c{kdN?cq^sZqJw=b2f9y$3U<-LlUa_WIUPiH%)E^0@Otfg2c`K&=cfUa&OtOw zD8PYBj8^ij2DG%If*alwv#Tbmg~)zESA@RDoAv_oXa6d$beZ1oow5Ud{)kQ9fxMm2 zCuI@253_;@HcTzfUrTPochDz+6m(NNLh#Rr?@Yo>#sxO7OW+--QlOx#@Dz`nVFl%- zKVAh%a0^(3gd1Lf!0gsZxUDS0nV)qDyotbCtz4hBc+apz`*C>hVNo@#*>_tqkg#ut zZHXfn9ZE>bg|u!}_n>Lvoh~bt==8@@QxRT4`mZAAMnYBgvrNa8r6?{ta6fZ({{W~R z=x?qzTGhXYP+ZC0?{@Ta<6KYKBG8rJ#D+FE25NmUDPFeAu4$T6SC~3?Dodo|u{3lt zPgt^#s_AzyjpoTMkw#3vk?p&%vJPJ|zb59rIn-~&iNAoEXT`*ai@{SNPaF*+b1^#R zXK!84(s>Ug5MDk?u(1Z7_|YQKjrE6FObvs!w^u^(=ayC=_z>`j?1DOgQ<2A4D^e@O z+O+OT9_4~SQWTG2@>~X(b^NL=xT%upoMLShf|(R_HPdYn19lp>ehheXsJnD@1C*(kEWSh3FYPCEtr(w>UJ&Wr0m z0Nj3O+yt(575<3E0QwK|(m^_wP~jEL5JENyCYjEt!o-7&a@?YWEAF(bgSW*b1=(14 z?)U;TZvA);K9tTqR^#5F=6$$M&32X8!|H@un>UG}CjQ>4ql-+#M5Bdowk&V+W7;(I zqf$Pls^$D#J)c08kCwUYg|d9P5!yoK+%YYLcAJ#k4gVr9MrH+B#z6y3JcL>;^5d34 zK*)v?12Rt?G!BOqtP)&KYq^ruA&7si6-x%=uFf7G)V%jH!)n|6zeP2Xay8PWaNSBI zk*+W7vsGxgjbQTwRzk@1)7D&%LwHL^!c*oJdpD5M+_sZa2DcnC02?`cG zQ4EH;R|d!ao56u89L(R-<$u~_uM7@W4SZfS!Qu$W?|qG|gZnq)rr?kKyXpjg1o{=> zz|;-AkNp?l|2M*kL1Fx>Np_(&X~M2gq{Aqzp$1PzJ%C6VhIq?v$V0t#!dNP-Hl#S4 zM<%b=OCyCpgj66)g6M^ZnKhB0El#S<&RR44We`o6AMcv* z2Tan*cR!jp2&JqNH4Q14AGH-ky^7!EIaNG2K0t$`HdCl^x5d6%h%VaxG?0?Mbkf6@ zb}+*#)N)O#f)4RYNR5}*3X50)KM&msaKAux86$tm!kiLrQZVl^NlJr`r zn-`1SRHM-1sr!h*o#bB^e?Yt!eE!m$zS-WuZRdT2b-EgnoY$JRLL>R>K?~#n#T=Xl zUFqRPQC!9pU7Zv{ceW-OfT_Gx4(Jq52en|h!?~wZ?&)s6FnWyLb!ZboVinUf64%A6 zJF16uVb_Z%6o?7^w8p7Q0+eb)ig60}_lnNZ-no1THIb9CbRoZWPsV%w@U zxT^gvRi3Oyl*oQ)ik4FU|xI{ zRe_qaB~+lFT_U>=9TAF(jIBPR)SP!XkB~E(9rqH$05GWWbiH0(#lN-dW1q48A zIu>jQkG4B4n`0G#=PP`pO)UoLsg=uoQ^nckpl>M-@{`VhzvWy+wOSp|IpQu2qubqI??!U-x! zHkV_~SoW>TScV3GiAa;4ZOx}p9GoLV1G`@IBPUoPzT2{M^v>oTYC#vh!_8>~cJB*9 z79!!a$Q5-TZX(HPH>}`xGYa-c9pw1UvJWo|mwy20LO_a`lIN0K0#nSU0>UkUlVi zUqH&cx^@Bv(yz(e*J-RFts>Sk&Tu}FOk9kQ*z9>eS3}iK#my`Ywp3_Z*LLI(@1p8Z z%gT{ddtrrPqtG7-Q^ob%3ug}(*dCTpfa*076R+1-&yk%FEk2J;;L_zJ?8Ys_)vYmE zrV=?wC$*p?LnMcF2#8C@q%0N%b~axHjHOWu4EXs6AnDnV=ZqA3wq6ZV7C|^E+WOor zME3X>)}Bmg>I(8oX2k>oC5c%wlT2=Y2O1tg5mGcG+wrr0$yc@6_YN#sHlfvX!JEOY z+SMCQ#-t2#Cc&8udTkBA{I-Wi&RM z)s2`cZB%syFEk)rmpDobouf8gCmCAW9r8H)>R8H1 zF4(D`4Y}@+g=<&S{R>GEBLO%En3&fk%EbjYY5KR~G6=iunpNRBbPq1e4!LDE*)dJc zbJ^!4$oaA=zgAV(l2mlz4v6Xe<`MX%!XBmz{JKt@f~5wqNy$?y=?PQeKwl zOgEa_>gR-f{7_W3YEV^wgi~9Tl-Ng3OW}*Ua?w-o4xmRPv>Hu86r@ zUA2rX4pr^jqQk22O{yQUt~fz-ISHw4(&6+wL0wS=e#&FzWmWllK~XFt$d9P5Qy-QS z7a`lc(DTcw#RM|t5}e-Zc;m~o@)I(Uy`8vWqkpf>an=oyPsrV)a_@`GC$}9-DbEXI zTTZo`c+Is;7AX5OpEe2a#*|s_Ei7%g*)Z2$5aQiTwi?G+-CI}@Z|l)X0a{Y?P(@t$ zBfmMuL<9_wq%`8Q6yg@GU;&vFmn*_axow!+N|KG&fg%_!zQjKrsN(QN^P9ixH^6`l zyQRZo71yK~&BQu|jo&wIv-^UwEH+i$$CwZ1t-o;|gn* zh{WDB?4-E1)nkJy<<0f;ao3z-)Car$dEE6BBf0oCn(YAnNuiZ}m>6D5<2VK4`;1XR z(95j;6AdYXU05poA=WQee7ix`uNQ<0M@sD0kw(eeBT|>|7fMu95pX0C0%<=HGEwBEqiB0lmXUdJ$=q$NJ%OsnI0< za`g|#s*w6)duJ(tpTgsU9e(7NIgFjlmvINN%W7QfGpWbi2gf|@sNt7SD0I-};Wveh zrn7xwK2V$Q4)n+zPn8o!_-k?sRvTKSAXmmQ+?U+Az~NFGk``3(`HxTpy~e~~OI@#; ziZht7HWz)bMV}_|XaWM4BRCOP{QRrAK7T-ujZZ&#thXyb3TlO^KbN!GAX}eF4w37katYTCeAfx*GX~PT1^baehH{g0z*1g zC`N1y%*&v^wh1>HRhqC(2c3zc3%#8?w7~iFj4^)_<@2U>Y%in$jU8+{!7`kUEg7^s z*wwUXPbZut9npQ)Xi?3k+@KrrR@pDh{ zsc)~$z7V|_2)qe%1GK!$mZ3nyfaI~Mt#T^VdAHPSQiQeVOLf9bRjL% z(~=|eXB)TqPhlIG#}zm?Wij2}s9Pc1dMtE8mZBIoDd7v_Y^Q`g$omZVBM6j5FZ8!1 z`ZU~8S&u2_DKU^1`g|&#EcNTtZe5=|e+D-WenkwJgZO$XV^b5vge?h6V-zJT0F+bY ztc#IYCCIl^M921&HEF=#BLOYWR5ka9<Hh^A(~Xp`oGR{z(zdn{zBM+9B4r){i z&aUnnOEWC~t6yN)+(0JDuOD<#Ku-q|RC*koj>M07#aSxC<)(zI)z%#5(+OKOyfZ38 zH@Vvwq*yvqryDn{_Mel;@Vx3+kYoqFwHpvfLqejN?dV#IboHXNA!H_I`7RRCyFU3K zvF6*FvS*4 z81J;!Oe}Y*O>^wB5#-6SM3we4EfF;wZ*`adx4`qXpaW`jP6Jc{RGue| z`8UA435vsk0paI4+3*6c>OK7d&`RyEhli&) zkq@}7M)7=^u{=ImJHO!0>6e}vs=G#J`1DjZES)oh8fU=hPjddT)7Ba9NttDwB5pXp zjxA`Lo)IX%2<0uugUu}l-zJGW+ih^#X#-vp`~whQFNJb=&e%@puv2$>msdYoczA-v ziuiRK@MhwS_e6O)_b`XEl84!cBYcls;jJVS7J@@|I(*x2mUYgG{S$_Zx zT?7SyZf+IgdvTYm7onE)wwn8{oyoR6iLga~e|p58sU(O$-l1sKM6R`i*S>)TCK-Qi zr8jcP>)DPxai8x8$diO@f+j|h6W<<#EtL%WMC7zQ$7W#poiA2xIQLlDSV&v4f$zBl zW9?Lz3g_^M#Qj{3q5&6geziIrHQ`7#ByQGW$LueB0HOF%gQg@nVbq@W6z6_H~)H znGH6bW6BmyRzgM$@7!Xvw`SeRFie$bF}wOZrTR>=1Z3Vp8Y$Dd+=_Y`^2#`B`#c3Y z1sINFB3L}O?X^>y$f;WzDIgRQ9y(yLR9IitC__VG80RO9(8A=Qlt?y?F z!QV&`Lcv8{Y`$VFxT($Yl3RG=l;lw9@M?}{74rmJl+m?O!HFKU&h7#}m0xH>+3C!A z)jgoyi%cYoljjT7f4Hs;YA-aQ!!cC|V0LOmN-l0FD z2C_{9AEO!jc~aX0`-Y2oCx_d?Lvg9M@=n1BoxCsfTXXM}2Qduv+FFvGJ5ryk9r^d( z{=Z1qUoMqUFpyyN2nX@%bNxm%DDXZ!!apP0pApyBl^IwHj^BXRizTi;4M*wxJ74kt z2hk}0Fw+C`IPmt4E{;HdN-Bxmo8 zOj!0ZDB47ghA`g&Iwy|1As^W)%xRz|b#nU-K)Ucy&sX+WOG1`amUf>ZgBOJEa%N+S zH0elWx_SZ&X|aJQ`%G9PRF>u`Br_7MDrevg1XnJ?B$T(vJhodpTI8pJ+f>OU;ns<+Iokp(q5e-ZGm2Kj4q8I^M}T8*1OwO)K3R?sIW{P9jL zvIO?Ts7m3BN=$Yv_}aCuF{_3TOn2#MGQPh>GTT&=egIxf$aph6SLoxdbF#kG;y~qK zznjFW75FIO0eToDK6otki#l4!P$_*dI^9Y)4i%r8wxY~(i76cLSWv4$uMv>+IE8Ww z;M;Du$9Td8r!FH%ngOH@=dYr9NdbGZxbk^qgCv$5GG_XQnwkAwcdO%qpM0`4RMiD&4@+Jm`ZR ziCH0XouW5sCPK2*&Ndn-GrN@hc|8J|%S0Zt(U!dNswkOH81)eTG9K@8*Il7UT_f|X-r_%KQn#|y4NSy2aG_=(ssmpc7S`4BdcQ5>M^2>c)Gv+74|W#NL$U(|FImPENBZZLb6z=7=H zayaaH$%y6u&f#9~mw##TfHVByYzA0nf&uS$xf&9j=?5n>{v=*t&h@G?G04ThwIOiT z2TbAe>tM0OO~JGDy&8YUGXDK|36`pV9xq=zLw~jQ(b*xzz#8*kUORZ_^42nOZZ3JU z&pfeMJYrMJh^D%pN4TUR@(R625RsFjp2dn!D|QIs;hRnlaYx>h&DUjPgSXn&pKOOs z4quMenQ~U`H4ghbya|Rrhi%KY%Rhz?b(30hV{^*%H- z>YkP2qgW{L$^*e|Xlsk=A2$8i7-DTyF{gn}?75p)UL-Qbl$-wsA!>};frgMU?6{F; zz|xuT!sL2xq!XE3y8vXjrVbMuq~uT{e!hdsk!lac|PxZqbU)egFzylf*PIjXNCBGGYkK4*cMQNurTM+hL_z^N;s56ZNIu=VXB$?cGq5XI*^A#(QgBaNZ{=;Ii9&=Y2r3qP2g4c6phbm@I zUP2#F1hL4k2=$X8Y&2W`08>4kd>X~rXjZM3@PVxx97mh)%(b&5YRcyfU%Ju}`3Om~ zVV1y|sq?b!fR8Ss%ZSJ5ijifIV85YS~3hGOwk zmZ%IZsbjT%kcIohU1=HvnX`sw$U_-Wh29(@z3 z;C{N;yDY;5qyQA~K&Nxneogt-yxDDycm(T#DI71g)a+=AGe2Vz8;oMDpki(0i*rNH zUUaW@2vWbP4~{eQ3-;Em33QZLmp@SsPJj(aX-#`0Soauj=xA z-Fuld+nseFl;9z=s6415O{Qozt|N9Y)k~ibHs;%~Art6R*=Q@AL+NR=fJ6ogLaE!q~sCa5$W*c2l4PU5s#- z3GG}AyaxJ8X~9Hb&&5f9Giu-N^CP*PMYclRTdmx=xv?W0;SBFt;55hmZH=p>Mz>L` zH#{HoqVR5D>F8)aVvTG>MtGl0Mp2?bRAfW|XQCG2dQ3R+0ha)oU04J_yJ`kY#YNu+ zJ>zr)LsB~@`KNT4>;kh7PutnNQiwy>*{)w;x`79foUZmsign@3I}Vpd#Q8kCTPu67 z3R~`n@rA(5(D^(vhRyhMiH(jH>p&GYfyJnfG{VG_25r++W=?9fgoNSId_BDwZF>J^ z=v`wIuh?qq@B|KClBWP8OB4@^q8Xuu9Ne~&aSI?4lrZ8#!P1(goZ84s#k0^@bz?6a zX5!6laUUw#&@4_MhfB;&K_!akuL7LGe*5ey2(W$BQ%Nk)o)A^t0S|$x5Dly)6_xtX z5wtVB5Zjd33Gx6!u{k4YcI5vUH*{4e3_bq?@IkY6VGR}^V!~f8!NOG zNSAfD_Vl}1y;-9UOD3V{W_wCXkMD;crF)xq5Bv!)w`;XcBt9>6=E>IQ+mk#&;ngDTHC9Vy9o z$9~uh+iIGM(Plg}SU4Z`?$$C67QS-5!!~fkr0C#s=dohN!_FKEk?Isuv^q3GWxxA5 z@~XfdM-@aoNw{n_yUscIZ4#PAbcKE>QESdsY?LCw=I0eAmi+t2jxbe4G}DrHqhBsZ ztarFFzF~L8%?3|Kg1fF^Tz>VFsr3jQAn#B8?)g*cKx@rHc0@9awNcD&ZDk6S3s&6Mu zRgLQr6^1CXTsdNP{1D;zb80>u`YT>>3*k|@4GTti->OUE&y4C?iNFmI_XpfWQ1e)& z&5I>G!Z4Z{_UUSKX5p;1%==sp!rot8A69xRO?KQA-E6uQKH$AE{MoM~ZNzGQR*%+iGQvG|In5VC@6*kE z^UV4I7vhpZv)j=uI2~ZtB>#iB`+rB1zwih!DFMGq8v^zfO*noVPcRVRgu>rnn*5u! zycQ8DU|vsr@vnIVSg`E`HpfltUN3zAjwi3}X7C^US=jlD4-bJ3`TC>&dfWS1V2)^J z1ARh=NImB@9f7Z#sLO_-8$MymQ?v84I;u0_y{ugrXcJIF%MmnF|8cD2rAIM4!dPbF z&4-My9|;Z)Nj3tUXHb!CbG%`jELLwty2eBp=8cJkOYGPdVoLbHeX}byHJS(vJGnx{ zO%<$jOLXVcVK{NylIO~nI?`DTK*`TfA7MkX5tL=Oiz_dsI@oZK_W9>gm@?B62|Z_b za9UK`_&v2;gTk4VGv{gM+X(GM^#aq^a?;op3fKVbnMFNtvHbRHyFp|>=x|}pHqcx! zi?~E<>ZXe9A$wgCl&jnesv8mY%oxrLzbOstidCX!C@Hdy2{Z<9%+{5tCMU)R_(PwG zh|-OnrAszQDC^$a=&JTGS^%79gp)LRF42VqkGw0@tGJf>xGAUxDo)Qe3`Ox3DX|2S zgKoGgSB=CldaPjstR>eF+axiIg33$Bq6Aat*4vTtG(gabLL#rD!5{~T%BynI<-6S%1qn=Rx>7;;`+ zqDgL5N^HB^UofpoHKO+zyR;~Ar@cOSD*g*&y2Y{N*homy6Cq8+k-vDQi(etu zc{0=UtAFhxE(%erai%>|qKNI)nlhc~xzP6@14Z-Q7IG|4h~ZAd7rMc{A)!hg)~3pR zlT*=e7f;~*9OlPpfT4o~QH2oI^!gLq5OH5|!B{VrtdrGy&717Or%BnGnQd zY;(Islf@!3kt&(BZ)exFNamPn>=-Jm`hAMGl8|^2>;#i68hUe(9uy_OAh#u=JXZydO?!XTpC74|LjiMel3K$#dY9>V#?kZT(IfSYu)w4yefYV~B>MA(`7b#9QWC;w} z{+6f!HEv)woO6}D0h&LW5VGxKa*Hc>&zY(0_nFGGb#qNhT?(!ohSdfEL3Ui0Hk2Ns zB1!K>LD%ml%gw*ElzLOy*ac1%i7Yxi#V3?q7$A>7S97i~n!O2Cpj(#1crU(sdaC6P zwMIA6d5oQ^EOMfi_SMMRGwS`o))^x^6ib^M;qkE?=Q7{BlNBTnoh5&i!eg01Q!QZ9 z$Y$L)!!?is^?+k~0oFiO(4GPWoeqP4P9Xq@U0GJ?1Op8)D?1jP4(U*-sGc~z?0J+z zf@YjD;S|&=!MCflan83q$02GD_?(*hm|xuHMm=$a0GaR28NMSiF^wKT20?b%i6?~< zoiqSgA@mcN_Yk;f(koaq&~b_8z{{w7`YxeD@hRGrqc&*hCYi}JLRuAqQn#vFA@Ki! zM1R#!V80q%iiU#)gU8=^4I~T{)ZYfyf9odr-#J0%1V2G5Bc^wkww3Ya3cgW)6_A^Z8p55FgTAi|&T`ziiYkX_L zrv(EZ7XIA{am=10VVhnocw*iF#b_I(uQu|P7^o&(*SgJu{j}u;tBsn8YrYk=*6^G{ zba;&upaBhKjaGr5wrK0T8Dd`eupB~@_)gdoj8g3@2LR*D;V+bT%p0hWb*iPjVZD6sds=r-wW@yWmx(HI+#&t_27Ht>f5dH25T4*q^XmDyH(Nk+D zzAbk`|@jtYtzymAgIm)i=S&*|En^pRN(jtu?*;Bri~2TTa(IN`qYle> zHcE*Cro*v=$|={g?@)IoqXX$Un&kC<)S#^$tJe+>RoX*YV;8yQiWf659q$BqKATr% z-X1baCNg6v{#>b)>HUFL8Do7G)XOq?&5)z=GKsJN)VN<9VZw**$Gkzg$$`1lPy&8c zrKGTPZ;&gM`2&EnooT_LI^=%N9e$*~5^Qc3^>e`GLX;clsphy%E`!3}V&6-EL6p zTC+h++f*nQb1D~lagckkGu)R{0jCGL3YA_z>B3^ad(p-t=TiF1sLomy5fvIi!Ky3;>j6DEj(X zrtie539n9N8$+*7?r&bhmwo6RzEU>zSw%k@a1Ng8m&|@<2upRrR+r=KuI5_Rp%JOE zRd7~^hy552>yKVRRxY9jjxdQsVO9WEl*Dxb8(&Uf=*`m+{n>~DI<*@v+mSiL(IpVY z__K0Ank)XWOV-gN@#t{Cc8eQK*rSDDF zs~124n!Gn~J=m*v>yI>(mD=X8qQF9cD*akG<}LTv#&zP$e7P34C_^3SR3c(Z!dXA= zxnh4TgP9gt{wK<`Au7{$OUZ`gSe}I+2F+TUNT#%17vj;@9bRIMJV-nR%@|h+CSps% z2bVkrhpVF?AfU(t|Gc$^IfU83PCq22m3EwYxQRjibdpKWd}vnLLZ^XR_G4Mq!8yA) zaNBSdvkuA@O*xrnnn@S0Cr+fDBP!&}@Rhg&ZZLF+(X~HFow+QY$#*-b0A33#f$J9r z!x;HTMj5{w{YX5cXJi7vhP?;6s#;6&UYZp)!6;^t@ok2&YKd|-ZJu8G2!IY)|pllS1$>shV%Zm%G~pWmr2i0H$NcTW0)WupT-b&4#U{i#^Y z9lcVsmU@AUpmy@%X)T5Ues57;YGSVUT=TbQ$_u^5j)hv%SqfyaT$1HV19>#IIVj>u zOg$q3DSDdK5a>f%3XtA9PYt)eFMB++l(Pc{OB@oiTI4Zwu#|ufeb{+c6tD12`&+|d z9fzE`IL!!>CWeWeoNt?m$<-GByEOVwgygq0V*MLbz(D`~jW2&f1=wi$2O-I)5JvOgsKPr~P`6f34X4CqnYtMER>Mx&w9>?uY)MN=rMH0V=X~x^lI@X^G&8YjGDu z{G>(R1;`gvUu|0{P|S_I@uRN7dEz+=qU!mozi0C#JQX7N_!SzSWk>|F!IqV$Jh0}b z7O9uR;8g8YCqD8g#e6fVqS$?Llr#9nA-}|f$3{+74b(a95r!Cc6&TaaFrkX=>uiS7 z6(ujYZBwf8-yEG!8nBy8xaXyy`75}bib9Wu-=9hv-tKg&I`<(wAsW*PqTiQevP-Ju z1&YjzlfR|#9)!-zli_yIWg}Cm<@QvC?4`X??YX6GErCR^Mz7UsU}%=+pQ7tk=SfW9 zkA$&ctPLf*iNJzx+?I=@%^y@HH&0=>nvkuqlf;wt3;qKzH|s!WXZp-TEZ;aSHL=+lfku zN$tkX?@RHzi&eeuzGde-nQ)#K%Q{VWQ zA!;qZRrEBSnMt-SfT2X8cz>puEWt%h-yZ`@B)N+Fj~P*SskA1w6!!&Xc3TmARe3sS3;>`b#_U0n}G^>fk+z;L9Gm&SRzX{T-iin(pM$G1CYZ#>NMJl0E5{Ojl<7J&x6uSFHiV!86vHP8LYGV>y zP?_C8Oz~&W*f%tGU^kX_!LA{C>|`tF!L<)Wak)~j!mkIgiH$tXRnq=no_p}o14WA;l&9S1K zlDIZ&5}VveJjah2k%M8dQQ=>S%VuEBNpiRS1u_Ae>)$}yJ&BOM72hJIniFXEOP(j> zc3Q-=hGAv%s1gxTH*DvOy&U32<5*nP&NC2a`ZPi5>|$By2v8g5>d1P$78Lw(e0gyp z4ZRaD^ICCT;Z)AZr08aLUSZB{)l@C6o~5oZZxb`>n+91{$-VI6=#4$2AhUar=-DBw z5H_&N44qWCiqY0QSh^B(;_pffWIS7AkS+Mf837ZIU(2X6)?SiE+x-Thr|#*BFNZXmxOt`2SKr{V|^M-!y_ zYMom2+Vmo60{q~-w~kzek>}T4oY~prCV_Py?i88>dE%dJq@kTC%Zt|A^YusPikIHM zTgKEsX2Kk@Gzd}Z-=>3wSj8*Ad!s}yx&xA+-OqYZIPoc&Q;cvQ-mlx}_~@eVK?Mb8 z(_5o66jKKRhT=q#Joc>rifk%XeeY+~8KiE%f~$*bA<7;<$)?Nf69U@ut4<@uf_#!` z0RL?WnN2Q`woofBg;0K{Ju=p1Y@D@Y zEl5Fq%YQ@kgk7BrQZbATg(fSbqh5xx4KhxW4@q`)x(vr6ZS#fBmba!vvJU;O+(QEx zj17k!kf92w95UVyY~2i$vE?8}mdNjeuZrgb_Su=O%3w4ISvD9-L(;%aYH>Djmm~5* z%Fv{`C1;sqF3@-3J9K9lEPEzn5=D+Z+tji#>OwNoq|YZIE1~W`dTkMLpBUFj~^v(tI%3yD}0f;<`R)TPl zk*vVXGes$KRBQ*GNcxY57z)B23W5T>00aSr4)OY>3i#J&3+y~XLchA2G~lo9*R}k= zM^9e4IRG7soE<~V1RBipIbWA!!GG`HolJ0Z^uIX>kYGpjuV2{rl>WB6y0d6};eiYl zu3eTG-u_qU)O7jZp3^I2M{K*pBMP-~$OB-jGSj9ewdK|%=ko@hq^{UUv4=&}Fi|Ti zNs_OqmX?qp5Vr z`70+{_u-Mn5(vcvgs?Z%$yk$6pRUd*>A?v%pt;CrMzKY#8H$yD5=4hX%B1^n>(QIie0o0 zC!h;2B}kx2bcp=_0)zm2|3Z*Ebcl&-S1O{E*6jZPvxPQy_Yn`R9n~%OH7D*jQCs-m z5fegmnTeqB1*mrO#^$lW+jL;N9rPEMbuK7*^tfxpd&`&AtfIg9AUb5_c0li wP&$Z_a@BSrZ1QJ0iPrnXO?p#`ARQyg-12&l%3>zUYmM~mMjakZL`Dz)*_&+1u>b%7 literal 0 HcmV?d00001 From c30ea911a2f65220e2500971f8cfe1f1a1aa92d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kurt=20K=C3=BChnert?= Date: Thu, 5 Jan 2023 10:00:10 +0100 Subject: [PATCH 3/3] fixed ci --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 60bad72..8f23f35 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,5 +39,5 @@ pub enum ColorType { CMYK(u8), /// Pixel is YCbCr - YCbCr(u8) + YCbCr(u8), }