From d5e977b6b27183c4b7bdd3806f99d55d80da6b1c Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Sun, 22 Nov 2020 22:01:56 -0600 Subject: [PATCH] better png benchmark, use bestspeed --- src/pixie/fileformats/png.nim | 2 +- tests/benchmark_png.nim | 31 ++++++++++++++++--- tests/images/centerRotation.png | Bin 1495 -> 1546 bytes tests/images/centerRotationWhite.png | Bin 1678 -> 1743 bytes tests/images/drawBlend.png | Bin 328 -> 342 bytes tests/images/drawBlendSmooth.png | Bin 352 -> 370 bytes tests/images/drawOverwrite.png | Bin 328 -> 342 bytes tests/images/drawOverwriteRot.png | Bin 343 -> 359 bytes tests/images/masters/centerRotation.png | Bin 1495 -> 1546 bytes tests/images/masters/centerRotationWhite.png | Bin 1678 -> 1743 bytes tests/images/masters/drawBlend.png | Bin 328 -> 342 bytes tests/images/masters/drawBlendSmooth.png | Bin 352 -> 370 bytes tests/images/masters/drawOverwrite.png | Bin 328 -> 342 bytes tests/images/masters/drawOverwriteRot.png | Bin 343 -> 359 bytes tests/images/masters/transCompose.c.png | Bin 1495 -> 1546 bytes tests/images/masters/transCompose.png | Bin 1679 -> 1743 bytes tests/images/transCompose.c.png | Bin 1495 -> 1546 bytes tests/images/transCompose.png | Bin 1679 -> 1743 bytes 18 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/pixie/fileformats/png.nim b/src/pixie/fileformats/png.nim index f8c38c1..7397cb7 100644 --- a/src/pixie/fileformats/png.nim +++ b/src/pixie/fileformats/png.nim @@ -469,7 +469,7 @@ proc encodePng*( let compressed = try: - compress(filtered, DefaultCompression, dfZlib) + compress(filtered, BestSpeed, dfZlib) except ZippyError: raise newException( PixieError, "Unexpected error compressing PNG image data" diff --git a/tests/benchmark_png.nim b/tests/benchmark_png.nim index 1b9c586..3486766 100644 --- a/tests/benchmark_png.nim +++ b/tests/benchmark_png.nim @@ -1,16 +1,27 @@ -import pixie/fileformats/png, stb_image/read as stbi, fidget/opengl/perf, nimPNG +import pixie/fileformats/png, stb_image/read as stbi, stb_image/write as stbr, + fidget/opengl/perf, nimPNG let data = readFile("tests/data/lenna.png") -timeIt "pixie": +timeIt "pixie decode": for i in 0 ..< 100: discard decodePng(cast[seq[uint8]](data)) -timeIt "nimPNG": +timeIt "pixie encode": + let decoded = decodePng(cast[seq[uint8]](data)) + for i in 0 ..< 1: + discard encodePng(decoded).len + +timeIt "nimPNG decode": for i in 0 ..< 100: discard decodePNG32(data) -timeIt "stb_image": +timeIt "nimPNG encode": + let decoded = decodePNG32(data) + for i in 0 ..< 100: + discard encodePNG32(decoded.data, decoded.width, decoded.height).pixels.len + +timeIt "stb_image decode": for i in 0 ..< 100: var width, height, channels: int discard loadFromMemory( @@ -20,3 +31,15 @@ timeIt "stb_image": channels, stbi.RGBA ) + +timeIt "stb_image encode": + var width, height, channels: int + let decoded = loadFromMemory( + cast[seq[byte]](data), + width, + height, + channels, + stbi.RGBA + ) + for i in 0 ..< 100: + discard writePNG(width, height, channels, decoded).len diff --git a/tests/images/centerRotation.png b/tests/images/centerRotation.png index 52b891bfc033472ce102908a0da99071726eb8db..9942445cfd051d497406ab0c9d253f225e148984 100644 GIT binary patch literal 1546 zcmb7E`!^E`9M=Oauf$l0J4CT7)08kbYuNIZZC;hkqve%#8AB=Dglrk}RxS}^wY;V& zb8kk7jM9jfXlZR%!VPinockBtAHLu3`JC_Ld|&5t)62s}Ww*|5IXO8MGz#e>v!PqE zOF^bD%@q2|$;pqPk&eEJ+a%@aK}{#nZ+GbKM!fsykKYIVEjg?z^`sBa@ zWDB?lxB#vb*F7Mv7V9>iZIC+`*||SY3UKU02(x%qHkvj{>;Q9%2mB-6=1;TW@QU4s zh$h=9a>=laF@c(mIvd3HHy?VLO<>j5odyTQ=~Krkn;_~^xk^wqu*jPKZ5?#h0Cq;H zL*FJ$JJ0I~ye_h5%nbhS%OC3r&f^H_cGU~4wLgPl@XIY`c5Fbv*ACW?k(n#yBPCQr zk>5ejPs}$4Huax{S{Hf<7;+m(H->Dh;nT_yJ$}Rjswxg`W4<~$OAaro{91Ld&JKJM zV!ZCj5#NY{!HcjJfpEC)hH{AbSHqgV668vkgn8KN{yi6Hpm`oYI}StMT(aI%r6KFu zp`h#KNn~j*t;&rus8ikmJlzt~%#x0d7E+VEwD#LBreng@XM;!;*g<}_5o0MOJZgP@ z{uF9bR?!%~$RS{@MXx=F*V<+iwS8vw6yJUp@3O7AQ@PKdG8ZlB%F`LhacTI{ zL=V3X1pgkthIIE(x|SvZaZ;k8m%e_Wm;Lm6)U_ z7!M{^UyUEVsu$V_qZg$BKOkgT%%gNq1s~ah)E4eO=uQ^)HueJbSB{)w07kNv81kVZ z@Au)8_z}=(rH-nASEgDuQ)fiY#ci35iVkUuRvSC6p&fGKxc2zf>F)Iy8a5LY$jo18 zW7&s6Tw7;=Li61wG-zsB^)4EzS>H8PtqB8m&z(DsPZH!Vq+uK7rf(2i+35;D!Ou=k zIe27_-TtIIV0#>`GqATQ5lDSC6KZJnYzdOD=KDm!AW?&l%q}zt;t{*B_E^{9ZZC_d z*9QV0>EjZhX+s%fgqjEzwo~S4S!=6Yn3k>p5Gak+uprmr{)Wr6Wu`G)qjb`ao6MOs zMSbzpRB9`O!#>Ee9Jwx$|UMPqNp zi;cAqVa8bfy@*!q91y&`GhlS_8hic02he#(Zk=@Rwk=x z3GJRRL}}lKF7fm&Rv39!t@c>jEzK{kyn>G_z_Mn29A?-K8~~0FomcXwAf=_&MsFFI zB)ifY7i^B*PUq2YEpF>$=fq`GvROI==di(+bPPG`Kq!VRl*bEB-1tIAd@fesbf-l3 obL~EK{sm>7`QIe@AF+Pdt>?9C&Kz~(%Q#*R?c{-EB7(2~3v!R#v;Y7A literal 1495 zcma)6`B#z&6h#|kQwJ0CJDD?aTyo7wt<>t+H@Hywxxz8DNl`~F&3#EtM-wC5uu?0x z$z>2n8yAdlJ5EM&Dswo^j?FiPRl3=)4#geP|Q z=!R7T6qmGAs%^84Kb0VYgcyOI04D>Yr}K9?6wx8mx=AGGc$sS$dJS<$U2Y992-Nkv zKz~w}|MFQpnUrt@-iL%c=qI6dt%`WqF z(ik&MC7j;eU)@+=uq>bpl196OfF>h_lR@4k6z90-Iq?KFiC0%}UqHsy>g-yw^Qp9_ z1-~8lSK2h&xb)O(lfSBp^S9r#l3D{LU9`+ePLqtxpyb3v#PUuG-A|4&t0RWa%!8xd z89uY%2i4nt14ut7evP%crSkmf_;; zcN0v~#w*_t#?HK-kkhCaYupEQt?SSESVEkXc~g{QS+U))m&O5d)3b!gY;R%8U3miU4FJx{r_AXjBVWRwn6_gZb0jWIU|m6gvhU?;zi zN|3I7iot}4J0Ec_VFQLCnZD*!iJ{05GA#@P^LxDg*3^#q;QooQ7&8hbpV*GK7uU37>Fnx zH>9$?#QBqdGmjF~iys~uL^ah?YGZjtcj*pdWqx3`SryAaJ=-q?xg#$EH68afnM;>Y zyWDjvpS=fhc-mBxQ8n>s0QRaVe^cBkS-yau`Q@BR9^19!d~^*!aqBgvp{KQ8EOQ^! zFq>K$*mY&bjVO*h!NJ1g#6p5Fvm@BD=*POX&MTJRxi>t2tm41qT=ogYw{1B-l*FdF zWs5tXXclq!n$@{^Tv^9Qnfcs^_VT82UK2VtN^P%xG~WsiuV?t(!j4s`_@#X`hxguH+;0EV0!&`u(%rsSxwT4{E!$B)sSpu9LPBioT%bODnEI|{A;??zK zm70FLmF;e9dj850_%) zN3a@2c7%4U=yDeXn%b12y4Evp4XHl6DRssbA+>?2D|+$gXuI%AQUo}4(1JaiaeJ3d zgQ7t@j3N!ca8MIzC;R51{`R<5bvRo_a)XzzH59OB-6F=gtOP{qfRTySigo4`B-~HP z!Ja)6^vua-F>gV!SLP$Lmc48&_ZsY^>ehho{_!sLq$_>Zb-Ev10+mc)@^kLt8NKG+ zi`N=OjTKHBJ@+(1(;gf6%EA3#Eit4LJ99!eYj7CcZuV_Jo=_3Y!(D9Ha?w0&7|8=7 J-T}i3{sY_Vzfb@G diff --git a/tests/images/centerRotationWhite.png b/tests/images/centerRotationWhite.png index 1e1144e139d863cdf6240f0fc07c87bae6ef16e7..31e4c17c9289061e7a35feecc0368e9e81810035 100644 GIT binary patch literal 1743 zcma)7`8V5%9t~+!QtPC#))F%Hiqolm8KJ(mq?TBM(h(jp&sNn*Ej4IgBs3+pzP3|A zD{@e=meL8ezBa{3B$|h5XwVKyN-aeO&wGEt+;i^do_o%{=X`#=z98UOYV+J)t>`P?LjDT63|6uoH?%l*r|`r4RBt z+#9&LHr}U*kB1~_`X7C0aV4HWAXI&5%|q>>?AZg*HYJl`ONQEL3Sd6;mrdb1^~|iw zcd5BUeST->Mo z+}w?2;>D_4b((yzg^D>Pfri;De_5D`2-;l^lUZ;(Uwh-6C+oqfgT6R>V9{Xjokf3N z2j}dYO`(-nYPMI}dsdyR*#$;b3MJ`KN0deUQXa|(q87`*gv^%=IgV)X4O3GfY@Pp1 zqEn2C)8@e)+vSY`Ctiq}9)c5{DRb#Sn6`BiB)Ckz#qbPLARV!@m?+kWIJCq58ao-) zRa*xNPgVB0cN2NCYe2IF_2{m5i9}yJ_xoQ}Elqyd-?fP*-05Hlay+SpuOAD0{}~)Z z;MT-vMEK&h93eVgs%)KSz@@tZYsv1#SL7CEsiwhTGcH@L;&*Z4lg;c5moT~L5U#*( zayJma^z}?fuNgmK4EE-i+jdFn2+uLf%r>~`6{8q@FU}UJjFwMjI03LY?kz$2X!25 z7}I?}VN5Yhqb;rL*7{m=kv4KVATj+Pu1%ST4oasF0F|Tx&IBCsNUY#Sm<*xkAT9O0 z&OY~`D#fQ;bp|sdx#R}_;>IS>f>I?cexQrvoJl=hO}>fSeSIk_@F~+XJ@;CA_7-d} zp7sc(he$R6p$*=K(+SAgC8x>8qvSMny+R*+2R=X;Zg0;EDg7k`f4Vk zI*OVU&bBS4!6Ni;>kk!%z}adoVsTstsEG?OL_hvN(Xk5i6(SuFFxC01=gYW-40=P_ ze@reT+s8Snc1wpBlrrT6pF?C3mFLLtn}-(gT#ZV+avn4U<3ta4%g^C|J-4)JZ{3Rs zeCjHZlL>{RNt{p2P>i|Fry7Bkl7cUJYu4XHd0eAGypXi;B%WVS-@wKCVVnZle@a$l z)?50@cC+jqj^lHK@#=zG&%=nMjyBS7`kV3+D9z&)t+t{>gTyDsRX^F`l>R+yI(OJw zAiY%T)~|xx;L;!W39Vq)t{1L4%(LpO52pu=nH&Lwa=Q|UF4^MpyWSNQ|2$KwKiyWh zTRVgHJISmSH#II)9>HbQ;RTinTzXTX1)fmaoVHq`hZvE^;0nestnckIb&NMC!$wy8 z*s5|LLRlh?qo2@c_8l71#$(%Odp3rkQQus_m|OM+eSA0K9)~URxtshG9PgVKBbz)7 zMMwsgGmfeOBS&EV_zRt%u)KaOzuAPF6Ixf)c+he_fAzKf&e|wCx^M|b^AH%HvW_i# zn8O2j68`08G&beNXP4z=OMhha5?=VVcsO{Z4Zra`} z5oe*$54ipI*sx=~Dq86_^1BmjkGwCTT+V|>YyWlgCnUk;ycQoa&pRF}5Z1%by%~ri F{};K-M6Un< literal 1678 zcmb7F{a4b58plkN7m-xNT|>oO30gM4KOS*;PwWc?>pGq)QNK_#M)zBhVbR z>sM}q;Q&$l6}2nv6ndo+oOLg7M2rBQhtqvc`y&s3$ zuT*THarck4-BWox6IWnYuklUIi7WAIQLnVTfu~LPPvvr;>Qz z7m2>dqVDzY$K8H54UhCsOL`*DStY!P6SaHib2Jl(#8Cz&#+9i>gW4OjwC*f`@*G94!eqq&*2{$Ip?;i6z!#?~HO~WWe zZ@j8oQA1&yxf3ph$#Q>O0_NED2j;Hd+t$~Jd5<)K{>x`m@kaVZzBJRg>DNHBJXh~7 zYKQM8Xul4&Qq^wNubse+>|11SuB=q66H8xD{Ev2L@;%aGtnZ@Q%gMV6XaW`htVkuQ%3|Xp_+JY3IJTb_91udlu%nQ{7mPj{Aoi9UFg1taa z>($IvNbZ78?2SQ7&tp%Ei`PPVEgk;Wh0VJ9vxgsu)!~`~GTArlAZ!!1~ReLg!{Wzj&rrDfT4z5k&jI7W?%1qz^mN7i!tp1fyH=sv2Ak>CO0;sYQM#~ksa$Y(3!!1;=XMM;vMY+Jn)6?V&il;Ht8u4ilV*Ox_Gds8GL`fl;ZV*00ZO9}U;qFB diff --git a/tests/images/drawBlend.png b/tests/images/drawBlend.png index ef62fc50f96ab6b5a60e3c0a77a6f30d92b90a53..43b43aaaaa2469baebdf7f74b6e913f73e769030 100644 GIT binary patch delta 134 zcmX@Xbd70(ingq$i(^OyB$gzOT(6YGzk*?2Z**~jLu zT!tx=1sRnlUJ&A+&l1@;v)0(Z?t|xq*8=k=d#Wz Gp$P!5_bk!? diff --git a/tests/images/drawBlendSmooth.png b/tests/images/drawBlendSmooth.png index df7a048916219a093d1e0c7c00e2a05130f9fbb6..4dd286ac34044f9e90e6e4047687a62d9bd15d83 100644 GIT binary patch delta 154 zcmV;L0A>H+0`dZoBs4imL_t(|0qxPj2?9|N1;G(hFbC88870h|y z_4zsTTrlGa9g%MqBFrH{PS3e*YaZL0yW8L3kRb0EGjpApi`(Des37-G z2)+=L5dk@o@IMk=bGY-GS-<|et+~(4<=21yfstz;k#7eTFL0jpI{KGNX#fBK07*qo IM6N<$f)m0=5&!@I delta 125 zcmV-@0D}MW0^kCWBr_*TL_t(|0qxPT4Z=_q1i^=BfgWh{yDW-w36@ESO=fK{BVByK zKF^tR%`9u|xn|aoA(3w!k#H9u+!Ew*&SzV5Y-@JA-Yr44HOI`nXXa(syDP~4JLC_M fv2>B|Ef$zBaGvx!d11<900000NkvXXu0mjfuL3we diff --git a/tests/images/drawOverwrite.png b/tests/images/drawOverwrite.png index ef62fc50f96ab6b5a60e3c0a77a6f30d92b90a53..43b43aaaaa2469baebdf7f74b6e913f73e769030 100644 GIT binary patch delta 134 zcmX@Xbd70(ingq$i(^OyB$gzOT(6YGzk*?2Z**~jLu zT!tx=1sRnlUJ&A+&l1@;v)0(Z?t|xq*8=k=d#Wz Gp$P!5_bk!? diff --git a/tests/images/drawOverwriteRot.png b/tests/images/drawOverwriteRot.png index 35cedb322b5aeee7ad616dbbdf51f191c527d243..007f69e0e1779f124823f51bf31f9d00e5341cdc 100644 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^DImQEpj2i>lZZ=*yo_c#iWl!N6!?5E!nk!o+5=B^o1$-P0SPzoGD7HU#>$*h#{H@8e z7e9-5Jh{DywQ`xljHU#xCQS}1Gk&U^*q9i7*pBnka>nzbcpW<-`f+jbnvM77?fSM| f{f|3wo>G5oqBoaq(wtAg0A%oV^>bP0l+XkKEUI&P literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^DIm~4y5hbYezQDQQ*_&I+3xb!GRb}Ix&8G&_#Km2It5kSCPv!PqE zOF^bD%@q2|$;pqPk&eEJ+a%@aK}{#nZ+GbKM!fsykKYIVEjg?z^`sBa@ zWDB?lxB#vb*F7Mv7V9>iZIC+`*||SY3UKU02(x%qHkvj{>;Q9%2mB-6=1;TW@QU4s zh$h=9a>=laF@c(mIvd3HHy?VLO<>j5odyTQ=~Krkn;_~^xk^wqu*jPKZ5?#h0Cq;H zL*FJ$JJ0I~ye_h5%nbhS%OC3r&f^H_cGU~4wLgPl@XIY`c5Fbv*ACW?k(n#yBPCQr zk>5ejPs}$4Huax{S{Hf<7;+m(H->Dh;nT_yJ$}Rjswxg`W4<~$OAaro{91Ld&JKJM zV!ZCj5#NY{!HcjJfpEC)hH{AbSHqgV668vkgn8KN{yi6Hpm`oYI}StMT(aI%r6KFu zp`h#KNn~j*t;&rus8ikmJlzt~%#x0d7E+VEwD#LBreng@XM;!;*g<}_5o0MOJZgP@ z{uF9bR?!%~$RS{@MXx=F*V<+iwS8vw6yJUp@3O7AQ@PKdG8ZlB%F`LhacTI{ zL=V3X1pgkthIIE(x|SvZaZ;k8m%e_Wm;Lm6)U_ z7!M{^UyUEVsu$V_qZg$BKOkgT%%gNq1s~ah)E4eO=uQ^)HueJbSB{)w07kNv81kVZ z@Au)8_z}=(rH-nASEgDuQ)fiY#ci35iVkUuRvSC6p&fGKxc2zf>F)Iy8a5LY$jo18 zW7&s6Tw7;=Li61wG-zsB^)4EzS>H8PtqB8m&z(DsPZH!Vq+uK7rf(2i+35;D!Ou=k zIe27_-TtIIV0#>`GqATQ5lDSC6KZJnYzdOD=KDm!AW?&l%q}zt;t{*B_E^{9ZZC_d z*9QV0>EjZhX+s%fgqjEzwo~S4S!=6Yn3k>p5Gak+uprmr{)Wr6Wu`G)qjb`ao6MOs zMSbzpRB9`O!#>Ee9Jwx$|UMPqNp zi;cAqVa8bfy@*!q91y&`GhlS_8hic02he#(Zk=@Rwk=x z3GJRRL}}lKF7fm&Rv39!t@c>jEzK{kyn>G_z_Mn29A?-K8~~0FomcXwAf=_&MsFFI zB)ifY7i^B*PUq2YEpF>$=fq`GvROI==di(+bPPG`Kq!VRl*bEB-1tIAd@fesbf-l3 obL~EK{sm>7`QIe@AF+Pdt>?9C&Kz~(%Q#*R?c{-EB7(2~3v!R#v;Y7A literal 1495 zcma)6`B#z&6h#|kQwJ0CJDD?aTyo7wt<>t+H@Hywxxz8DNl`~F&3#EtM-wC5uu?0x z$z>2n8yAdlJ5EM&Dswo^j?FiPRl3=)4#geP|Q z=!R7T6qmGAs%^84Kb0VYgcyOI04D>Yr}K9?6wx8mx=AGGc$sS$dJS<$U2Y992-Nkv zKz~w}|MFQpnUrt@-iL%c=qI6dt%`WqF z(ik&MC7j;eU)@+=uq>bpl196OfF>h_lR@4k6z90-Iq?KFiC0%}UqHsy>g-yw^Qp9_ z1-~8lSK2h&xb)O(lfSBp^S9r#l3D{LU9`+ePLqtxpyb3v#PUuG-A|4&t0RWa%!8xd z89uY%2i4nt14ut7evP%crSkmf_;; zcN0v~#w*_t#?HK-kkhCaYupEQt?SSESVEkXc~g{QS+U))m&O5d)3b!gY;R%8U3miU4FJx{r_AXjBVWRwn6_gZb0jWIU|m6gvhU?;zi zN|3I7iot}4J0Ec_VFQLCnZD*!iJ{05GA#@P^LxDg*3^#q;QooQ7&8hbpV*GK7uU37>Fnx zH>9$?#QBqdGmjF~iys~uL^ah?YGZjtcj*pdWqx3`SryAaJ=-q?xg#$EH68afnM;>Y zyWDjvpS=fhc-mBxQ8n>s0QRaVe^cBkS-yau`Q@BR9^19!d~^*!aqBgvp{KQ8EOQ^! zFq>K$*mY&bjVO*h!NJ1g#6p5Fvm@BD=*POX&MTJRxi>t2tm41qT=ogYw{1B-l*FdF zWs5tXXclq!n$@{^Tv^9Qnfcs^_VT82UK2VtN^P%xG~WsiuV?t(!j4s`_@#X`hxguH+;0EV0!&`u(%rsSxwT4{E!$B)sSpu9LPBioT%bODnEI|{A;??zK zm70FLmF;e9dj850_%) zN3a@2c7%4U=yDeXn%b12y4Evp4XHl6DRssbA+>?2D|+$gXuI%AQUo}4(1JaiaeJ3d zgQ7t@j3N!ca8MIzC;R51{`R<5bvRo_a)XzzH59OB-6F=gtOP{qfRTySigo4`B-~HP z!Ja)6^vua-F>gV!SLP$Lmc48&_ZsY^>ehho{_!sLq$_>Zb-Ev10+mc)@^kLt8NKG+ zi`N=OjTKHBJ@+(1(;gf6%EA3#Eit4LJ99!eYj7CcZuV_Jo=_3Y!(D9Ha?w0&7|8=7 J-T}i3{sY_Vzfb@G diff --git a/tests/images/masters/centerRotationWhite.png b/tests/images/masters/centerRotationWhite.png index 1e1144e139d863cdf6240f0fc07c87bae6ef16e7..31e4c17c9289061e7a35feecc0368e9e81810035 100644 GIT binary patch literal 1743 zcma)7`8V5%9t~+!QtPC#))F%Hiqolm8KJ(mq?TBM(h(jp&sNn*Ej4IgBs3+pzP3|A zD{@e=meL8ezBa{3B$|h5XwVKyN-aeO&wGEt+;i^do_o%{=X`#=z98UOYV+J)t>`P?LjDT63|6uoH?%l*r|`r4RBt z+#9&LHr}U*kB1~_`X7C0aV4HWAXI&5%|q>>?AZg*HYJl`ONQEL3Sd6;mrdb1^~|iw zcd5BUeST->Mo z+}w?2;>D_4b((yzg^D>Pfri;De_5D`2-;l^lUZ;(Uwh-6C+oqfgT6R>V9{Xjokf3N z2j}dYO`(-nYPMI}dsdyR*#$;b3MJ`KN0deUQXa|(q87`*gv^%=IgV)X4O3GfY@Pp1 zqEn2C)8@e)+vSY`Ctiq}9)c5{DRb#Sn6`BiB)Ckz#qbPLARV!@m?+kWIJCq58ao-) zRa*xNPgVB0cN2NCYe2IF_2{m5i9}yJ_xoQ}Elqyd-?fP*-05Hlay+SpuOAD0{}~)Z z;MT-vMEK&h93eVgs%)KSz@@tZYsv1#SL7CEsiwhTGcH@L;&*Z4lg;c5moT~L5U#*( zayJma^z}?fuNgmK4EE-i+jdFn2+uLf%r>~`6{8q@FU}UJjFwMjI03LY?kz$2X!25 z7}I?}VN5Yhqb;rL*7{m=kv4KVATj+Pu1%ST4oasF0F|Tx&IBCsNUY#Sm<*xkAT9O0 z&OY~`D#fQ;bp|sdx#R}_;>IS>f>I?cexQrvoJl=hO}>fSeSIk_@F~+XJ@;CA_7-d} zp7sc(he$R6p$*=K(+SAgC8x>8qvSMny+R*+2R=X;Zg0;EDg7k`f4Vk zI*OVU&bBS4!6Ni;>kk!%z}adoVsTstsEG?OL_hvN(Xk5i6(SuFFxC01=gYW-40=P_ ze@reT+s8Snc1wpBlrrT6pF?C3mFLLtn}-(gT#ZV+avn4U<3ta4%g^C|J-4)JZ{3Rs zeCjHZlL>{RNt{p2P>i|Fry7Bkl7cUJYu4XHd0eAGypXi;B%WVS-@wKCVVnZle@a$l z)?50@cC+jqj^lHK@#=zG&%=nMjyBS7`kV3+D9z&)t+t{>gTyDsRX^F`l>R+yI(OJw zAiY%T)~|xx;L;!W39Vq)t{1L4%(LpO52pu=nH&Lwa=Q|UF4^MpyWSNQ|2$KwKiyWh zTRVgHJISmSH#II)9>HbQ;RTinTzXTX1)fmaoVHq`hZvE^;0nestnckIb&NMC!$wy8 z*s5|LLRlh?qo2@c_8l71#$(%Odp3rkQQus_m|OM+eSA0K9)~URxtshG9PgVKBbz)7 zMMwsgGmfeOBS&EV_zRt%u)KaOzuAPF6Ixf)c+he_fAzKf&e|wCx^M|b^AH%HvW_i# zn8O2j68`08G&beNXP4z=OMhha5?=VVcsO{Z4Zra`} z5oe*$54ipI*sx=~Dq86_^1BmjkGwCTT+V|>YyWlgCnUk;ycQoa&pRF}5Z1%by%~ri F{};K-M6Un< literal 1678 zcmb7F{a4b58plkN7m-xNT|>oO30gM4KOS*;PwWc?>pGq)QNK_#M)zBhVbR z>sM}q;Q&$l6}2nv6ndo+oOLg7M2rBQhtqvc`y&s3$ zuT*THarck4-BWox6IWnYuklUIi7WAIQLnVTfu~LPPvvr;>Qz z7m2>dqVDzY$K8H54UhCsOL`*DStY!P6SaHib2Jl(#8Cz&#+9i>gW4OjwC*f`@*G94!eqq&*2{$Ip?;i6z!#?~HO~WWe zZ@j8oQA1&yxf3ph$#Q>O0_NED2j;Hd+t$~Jd5<)K{>x`m@kaVZzBJRg>DNHBJXh~7 zYKQM8Xul4&Qq^wNubse+>|11SuB=q66H8xD{Ev2L@;%aGtnZ@Q%gMV6XaW`htVkuQ%3|Xp_+JY3IJTb_91udlu%nQ{7mPj{Aoi9UFg1taa z>($IvNbZ78?2SQ7&tp%Ei`PPVEgk;Wh0VJ9vxgsu)!~`~GTArlAZ!!1~ReLg!{Wzj&rrDfT4z5k&jI7W?%1qz^mN7i!tp1fyH=sv2Ak>CO0;sYQM#~ksa$Y(3!!1;=XMM;vMY+Jn)6?V&il;Ht8u4ilV*Ox_Gds8GL`fl;ZV*00ZO9}U;qFB diff --git a/tests/images/masters/drawBlend.png b/tests/images/masters/drawBlend.png index ef62fc50f96ab6b5a60e3c0a77a6f30d92b90a53..43b43aaaaa2469baebdf7f74b6e913f73e769030 100644 GIT binary patch delta 134 zcmX@Xbd70(ingq$i(^OyB$gzOT(6YGzk*?2Z**~jLu zT!tx=1sRnlUJ&A+&l1@;v)0(Z?t|xq*8=k=d#Wz Gp$P!5_bk!? diff --git a/tests/images/masters/drawBlendSmooth.png b/tests/images/masters/drawBlendSmooth.png index df7a048916219a093d1e0c7c00e2a05130f9fbb6..4dd286ac34044f9e90e6e4047687a62d9bd15d83 100644 GIT binary patch delta 154 zcmV;L0A>H+0`dZoBs4imL_t(|0qxPj2?9|N1;G(hFbC88870h|y z_4zsTTrlGa9g%MqBFrH{PS3e*YaZL0yW8L3kRb0EGjpApi`(Des37-G z2)+=L5dk@o@IMk=bGY-GS-<|et+~(4<=21yfstz;k#7eTFL0jpI{KGNX#fBK07*qo IM6N<$f)m0=5&!@I delta 125 zcmV-@0D}MW0^kCWBr_*TL_t(|0qxPT4Z=_q1i^=BfgWh{yDW-w36@ESO=fK{BVByK zKF^tR%`9u|xn|aoA(3w!k#H9u+!Ew*&SzV5Y-@JA-Yr44HOI`nXXa(syDP~4JLC_M fv2>B|Ef$zBaGvx!d11<900000NkvXXu0mjfuL3we diff --git a/tests/images/masters/drawOverwrite.png b/tests/images/masters/drawOverwrite.png index ef62fc50f96ab6b5a60e3c0a77a6f30d92b90a53..43b43aaaaa2469baebdf7f74b6e913f73e769030 100644 GIT binary patch delta 134 zcmX@Xbd70(ingq$i(^OyB$gzOT(6YGzk*?2Z**~jLu zT!tx=1sRnlUJ&A+&l1@;v)0(Z?t|xq*8=k=d#Wz Gp$P!5_bk!? diff --git a/tests/images/masters/drawOverwriteRot.png b/tests/images/masters/drawOverwriteRot.png index 35cedb322b5aeee7ad616dbbdf51f191c527d243..007f69e0e1779f124823f51bf31f9d00e5341cdc 100644 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^DImQEpj2i>lZZ=*yo_c#iWl!N6!?5E!nk!o+5=B^o1$-P0SPzoGD7HU#>$*h#{H@8e z7e9-5Jh{DywQ`xljHU#xCQS}1Gk&U^*q9i7*pBnka>nzbcpW<-`f+jbnvM77?fSM| f{f|3wo>G5oqBoaq(wtAg0A%oV^>bP0l+XkKEUI&P literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^DIm~4y5hbYezQDQQ*_&I+3xb!GRb}Ix&8G&_#Km2It5kSCPv!PqE zOF^bD%@q2|$;pqPk&eEJ+a%@aK}{#nZ+GbKM!fsykKYIVEjg?z^`sBa@ zWDB?lxB#vb*F7Mv7V9>iZIC+`*||SY3UKU02(x%qHkvj{>;Q9%2mB-6=1;TW@QU4s zh$h=9a>=laF@c(mIvd3HHy?VLO<>j5odyTQ=~Krkn;_~^xk^wqu*jPKZ5?#h0Cq;H zL*FJ$JJ0I~ye_h5%nbhS%OC3r&f^H_cGU~4wLgPl@XIY`c5Fbv*ACW?k(n#yBPCQr zk>5ejPs}$4Huax{S{Hf<7;+m(H->Dh;nT_yJ$}Rjswxg`W4<~$OAaro{91Ld&JKJM zV!ZCj5#NY{!HcjJfpEC)hH{AbSHqgV668vkgn8KN{yi6Hpm`oYI}StMT(aI%r6KFu zp`h#KNn~j*t;&rus8ikmJlzt~%#x0d7E+VEwD#LBreng@XM;!;*g<}_5o0MOJZgP@ z{uF9bR?!%~$RS{@MXx=F*V<+iwS8vw6yJUp@3O7AQ@PKdG8ZlB%F`LhacTI{ zL=V3X1pgkthIIE(x|SvZaZ;k8m%e_Wm;Lm6)U_ z7!M{^UyUEVsu$V_qZg$BKOkgT%%gNq1s~ah)E4eO=uQ^)HueJbSB{)w07kNv81kVZ z@Au)8_z}=(rH-nASEgDuQ)fiY#ci35iVkUuRvSC6p&fGKxc2zf>F)Iy8a5LY$jo18 zW7&s6Tw7;=Li61wG-zsB^)4EzS>H8PtqB8m&z(DsPZH!Vq+uK7rf(2i+35;D!Ou=k zIe27_-TtIIV0#>`GqATQ5lDSC6KZJnYzdOD=KDm!AW?&l%q}zt;t{*B_E^{9ZZC_d z*9QV0>EjZhX+s%fgqjEzwo~S4S!=6Yn3k>p5Gak+uprmr{)Wr6Wu`G)qjb`ao6MOs zMSbzpRB9`O!#>Ee9Jwx$|UMPqNp zi;cAqVa8bfy@*!q91y&`GhlS_8hic02he#(Zk=@Rwk=x z3GJRRL}}lKF7fm&Rv39!t@c>jEzK{kyn>G_z_Mn29A?-K8~~0FomcXwAf=_&MsFFI zB)ifY7i^B*PUq2YEpF>$=fq`GvROI==di(+bPPG`Kq!VRl*bEB-1tIAd@fesbf-l3 obL~EK{sm>7`QIe@AF+Pdt>?9C&Kz~(%Q#*R?c{-EB7(2~3v!R#v;Y7A literal 1495 zcma)6`B#z&6h#|kQwJ0CJDD?aTyo7wt<>t+H@Hywxxz8DNl`~F&3#EtM-wC5uu?0x z$z>2n8yAdlJ5EM&Dswo^j?FiPRl3=)4#geP|Q z=!R7T6qmGAs%^84Kb0VYgcyOI04D>Yr}K9?6wx8mx=AGGc$sS$dJS<$U2Y992-Nkv zKz~w}|MFQpnUrt@-iL%c=qI6dt%`WqF z(ik&MC7j;eU)@+=uq>bpl196OfF>h_lR@4k6z90-Iq?KFiC0%}UqHsy>g-yw^Qp9_ z1-~8lSK2h&xb)O(lfSBp^S9r#l3D{LU9`+ePLqtxpyb3v#PUuG-A|4&t0RWa%!8xd z89uY%2i4nt14ut7evP%crSkmf_;; zcN0v~#w*_t#?HK-kkhCaYupEQt?SSESVEkXc~g{QS+U))m&O5d)3b!gY;R%8U3miU4FJx{r_AXjBVWRwn6_gZb0jWIU|m6gvhU?;zi zN|3I7iot}4J0Ec_VFQLCnZD*!iJ{05GA#@P^LxDg*3^#q;QooQ7&8hbpV*GK7uU37>Fnx zH>9$?#QBqdGmjF~iys~uL^ah?YGZjtcj*pdWqx3`SryAaJ=-q?xg#$EH68afnM;>Y zyWDjvpS=fhc-mBxQ8n>s0QRaVe^cBkS-yau`Q@BR9^19!d~^*!aqBgvp{KQ8EOQ^! zFq>K$*mY&bjVO*h!NJ1g#6p5Fvm@BD=*POX&MTJRxi>t2tm41qT=ogYw{1B-l*FdF zWs5tXXclq!n$@{^Tv^9Qnfcs^_VT82UK2VtN^P%xG~WsiuV?t(!j4s`_@#X`hxguH+;0EV0!&`u(%rsSxwT4{E!$B)sSpu9LPBioT%bODnEI|{A;??zK zm70FLmF;e9dj850_%) zN3a@2c7%4U=yDeXn%b12y4Evp4XHl6DRssbA+>?2D|+$gXuI%AQUo}4(1JaiaeJ3d zgQ7t@j3N!ca8MIzC;R51{`R<5bvRo_a)XzzH59OB-6F=gtOP{qfRTySigo4`B-~HP z!Ja)6^vua-F>gV!SLP$Lmc48&_ZsY^>ehho{_!sLq$_>Zb-Ev10+mc)@^kLt8NKG+ zi`N=OjTKHBJ@+(1(;gf6%EA3#Eit4LJ99!eYj7CcZuV_Jo=_3Y!(D9Ha?w0&7|8=7 J-T}i3{sY_Vzfb@G diff --git a/tests/images/masters/transCompose.png b/tests/images/masters/transCompose.png index 5fd4195b1fc269be1bffed121364445b34ab2153..5e8175bed9633503493e541cd3f14a53e70fbe4a 100644 GIT binary patch literal 1743 zcmb7F`#TegA6{aZOSC4G)y#3p?T|xcE@NXVf3q?Uu5R@i*pB~KYE+?-pva6*|q0$NPlUk`E z!@rbsF)7gOyQNB+n)i@f%CW`+bym^l>U&s$5|s5pCt0j|x2k@Uq1sV`Q*~nD(14s3 zSxo70q4L?>uOB8p4JO`xcCxCpv{bh*R0Z=H6BU>YzNqE-;FlAyJP{!<^?wHmISMce56qelE6J_vrnTKytNtP5#`Gm>%(cS(Q8nmgkX#npXTf= zer9LZJ6%JUWSD#@#cF)cQAIIdEG zBczr=1SK1|;9qw>u`s4r9~fIi%eF$kUkk1bK-Asig6dl*+xOeOx&I{xa`bYFNrDT> z9F^k0Lq2B9Fke)Y+m>(jXq*jQ|I3>ZLL18mH{2}KzCi+!BD>f$`E*;DWdY1%AtFqnY$FSW0M8^z(mNRzaQZyGkgEp4z8N2H^=6)X3n@@CdA%9j#rP076`oJ1*0e8RHc z^cWVye#~TQe?>Y_Wl$SJ(D#FHjmR2z*ngG%=q`@VUuj9K?lqXz9-WI=TBykkfju|z z$)T5ZFMOp*;pZ4b#=VCogUeWeGKr2n^V2Bay&d^mpXkhk3=mwxVmoXS<~RJAscE1y zue&-iLdK8*Hm;_S2!&u{n%g^K`EFElT+Xrv-!%nhOMZpE{R5uxdtPTzz0k4E0(aq| z&9iU-0{IHXoNPbx3~|*-zK~#&5NtY{4ibQAt2*c>Lpfx_CN_U6pN5RBy^pHZ+E_wg z8HNHqt$s6vtrIvtzXVB+K=7oyYw;w1a2uHif3>J;J+indYdkY!kuN3eydiphyzxR9 zO#L~f`h2A|nFuO|-i>e}1%Rv7YA1uk8v#rXvMAv4H%8-}GU+(X7LxWwbj>V>lb%nk zisc&w!WstI{s-qa)s$~REk6ZFgNsd)%H*~!z{&4*{8UmE1KjOZ&O5UmUP>`@tD06F z5Feb=a)@+fr043lKb!FR&gEf-%J~Wfh>}?CqGM;-eS#Osz9pgI)71VV@-2GcM$eek zXwDW?I8nXEwri6gEXqi13c_A*w0Qa_bmg!}k%)Rhq(9EmxZbIE<#G8MJ3I7_Ai39S zc+n%6ehZf_sYr(kRt77M~bRdI3GUdHa$y((j;;zo=8$ xB};PQ=-z3)*_oLcO~)tG+5dOI|62;nHdkuQGy_o9jNPIFU{Ic}HOQau{SBRSPx1f& literal 1679 zcmb7F`&SZ%7snJ|kfH*bkCb9sn1X#ZQp5s5F&`0OT8Yc%(wzB<(#T*Uj}&umQdy>^ zVac=K%hZc%0U0=14WT<>;?1%jUyXV|{&pqefdp`GZ?k%Fmgm1QX zwgvzInqcN7KczP6GEJ#?_eb>wSO)*G`gm zY#i%#F@t^`a7Y0M$Isbciv;qy#fh!RH1QWowKK#d;A_obYo`Z1`TI-lKDQa)j>Q}= zufFLz8a2B1eC@gZ)_mIA%Fk)l`8RTh*M>C#{{H@Nj+XRYHa` zn15nCh?93mQ#+tRp9=T(XlvOS2NCx^g^pUZWSBIu%~#px_t-o!n6iY%H`GjpQqI8^ zr*?IEaQ39L9c(fRTg%5n_a}qF>?qX2(&5~%Igp zuPaS1h7^>m`X^NNLRU$hSy(VI_u&u4>zIR-=zzt~2lR00F9lbcLpAUncwfAvLcEb6 z>N#Z@mal-wn}@B{`-awE>=;6-|;H#i>Tv34x%w z`3T^p1&17i<9{E+Uq&*r)VK~7ne`0fJoi3}5>;NzqIw~zrW-wi``*U*JXkTPR_iq4 zflu9GKt6NzfoW%&%0NQ$Hf2jZvaafzSw&*Q?iSF^xiDi zZ%u(_rJl>W1+#~lhIjuz)4R#@a2)7WtB16aP8Y4n9{og0H{|inx-^p)5Pm+hmAMjP z#o_x{Ll9aLyBpf&uB_%o(8cmUPAk>TH#zU-ZHty@&1GY5V_L;%kZO}{g%z)qF^Y;)EL(}@%jTzrdopOi^>ASPz{8tviRl!)q%X3 z3)0)>=ZN+{C_3(5SHEv@P5t#4D(E|J8|2c*-1C*yP4$L%5e*iOP0v`NOH=dedlPieY&Yg zhCUXJ+_Uvzj}J`lI-rT`D&ryjYL{O^>t4{sgd-1Ib&V<1Wp$FD^E;SQWy-LK0M3tW zM?xTn|Cfj$GV~MMC1+Cn29}K-6=bi76<^|s`G>O7ufN_7L`js1-hrX^VDa02UzAO#4yzZAi!7y1&Mdxe8(AOl+peSr|3Ot>*>p5Y zAV@^`-#4&!8U}GLoR6TQmHyR7#tGWH*j{>SwZ-is#hoW$BMhYM)e*&uNBVoNG) z${qWE$sLG|u^H-xApnlwUEV%=*I~+jJ!I2YZ{=+;%rZIK?}~hiJ8gF|N53>4S+Wt_ zX?f}a6dNR2ojm`k2uD<&x5KVgWF_L?mfrQPFb(up08ibx!+7iunB*C;y;AGiT$s;z zc7d3kwmEU4!YZk0n|px)J8egNag3T>OQ%wpuG$Ondia}NLaP;$V`?xiud%}mIcz%x z9aNR#lj8S885%)%FNb2yjjKQHpw6^-62e?oUTKJ5_!m6vdB!{L+R0tQY;JokJ0@TLP!*5JHUM(Y%*xJ96WOu|dL%))Mv0RiXoNxB(bveU{wUFXI6HZHl3@|pjd!-`KuaR`Y0!^lpw7U~UmZ$2&`7yg mm#hP=_<;Qv!PqE zOF^bD%@q2|$;pqPk&eEJ+a%@aK}{#nZ+GbKM!fsykKYIVEjg?z^`sBa@ zWDB?lxB#vb*F7Mv7V9>iZIC+`*||SY3UKU02(x%qHkvj{>;Q9%2mB-6=1;TW@QU4s zh$h=9a>=laF@c(mIvd3HHy?VLO<>j5odyTQ=~Krkn;_~^xk^wqu*jPKZ5?#h0Cq;H zL*FJ$JJ0I~ye_h5%nbhS%OC3r&f^H_cGU~4wLgPl@XIY`c5Fbv*ACW?k(n#yBPCQr zk>5ejPs}$4Huax{S{Hf<7;+m(H->Dh;nT_yJ$}Rjswxg`W4<~$OAaro{91Ld&JKJM zV!ZCj5#NY{!HcjJfpEC)hH{AbSHqgV668vkgn8KN{yi6Hpm`oYI}StMT(aI%r6KFu zp`h#KNn~j*t;&rus8ikmJlzt~%#x0d7E+VEwD#LBreng@XM;!;*g<}_5o0MOJZgP@ z{uF9bR?!%~$RS{@MXx=F*V<+iwS8vw6yJUp@3O7AQ@PKdG8ZlB%F`LhacTI{ zL=V3X1pgkthIIE(x|SvZaZ;k8m%e_Wm;Lm6)U_ z7!M{^UyUEVsu$V_qZg$BKOkgT%%gNq1s~ah)E4eO=uQ^)HueJbSB{)w07kNv81kVZ z@Au)8_z}=(rH-nASEgDuQ)fiY#ci35iVkUuRvSC6p&fGKxc2zf>F)Iy8a5LY$jo18 zW7&s6Tw7;=Li61wG-zsB^)4EzS>H8PtqB8m&z(DsPZH!Vq+uK7rf(2i+35;D!Ou=k zIe27_-TtIIV0#>`GqATQ5lDSC6KZJnYzdOD=KDm!AW?&l%q}zt;t{*B_E^{9ZZC_d z*9QV0>EjZhX+s%fgqjEzwo~S4S!=6Yn3k>p5Gak+uprmr{)Wr6Wu`G)qjb`ao6MOs zMSbzpRB9`O!#>Ee9Jwx$|UMPqNp zi;cAqVa8bfy@*!q91y&`GhlS_8hic02he#(Zk=@Rwk=x z3GJRRL}}lKF7fm&Rv39!t@c>jEzK{kyn>G_z_Mn29A?-K8~~0FomcXwAf=_&MsFFI zB)ifY7i^B*PUq2YEpF>$=fq`GvROI==di(+bPPG`Kq!VRl*bEB-1tIAd@fesbf-l3 obL~EK{sm>7`QIe@AF+Pdt>?9C&Kz~(%Q#*R?c{-EB7(2~3v!R#v;Y7A literal 1495 zcma)6`B#z&6h#|kQwJ0CJDD?aTyo7wt<>t+H@Hywxxz8DNl`~F&3#EtM-wC5uu?0x z$z>2n8yAdlJ5EM&Dswo^j?FiPRl3=)4#geP|Q z=!R7T6qmGAs%^84Kb0VYgcyOI04D>Yr}K9?6wx8mx=AGGc$sS$dJS<$U2Y992-Nkv zKz~w}|MFQpnUrt@-iL%c=qI6dt%`WqF z(ik&MC7j;eU)@+=uq>bpl196OfF>h_lR@4k6z90-Iq?KFiC0%}UqHsy>g-yw^Qp9_ z1-~8lSK2h&xb)O(lfSBp^S9r#l3D{LU9`+ePLqtxpyb3v#PUuG-A|4&t0RWa%!8xd z89uY%2i4nt14ut7evP%crSkmf_;; zcN0v~#w*_t#?HK-kkhCaYupEQt?SSESVEkXc~g{QS+U))m&O5d)3b!gY;R%8U3miU4FJx{r_AXjBVWRwn6_gZb0jWIU|m6gvhU?;zi zN|3I7iot}4J0Ec_VFQLCnZD*!iJ{05GA#@P^LxDg*3^#q;QooQ7&8hbpV*GK7uU37>Fnx zH>9$?#QBqdGmjF~iys~uL^ah?YGZjtcj*pdWqx3`SryAaJ=-q?xg#$EH68afnM;>Y zyWDjvpS=fhc-mBxQ8n>s0QRaVe^cBkS-yau`Q@BR9^19!d~^*!aqBgvp{KQ8EOQ^! zFq>K$*mY&bjVO*h!NJ1g#6p5Fvm@BD=*POX&MTJRxi>t2tm41qT=ogYw{1B-l*FdF zWs5tXXclq!n$@{^Tv^9Qnfcs^_VT82UK2VtN^P%xG~WsiuV?t(!j4s`_@#X`hxguH+;0EV0!&`u(%rsSxwT4{E!$B)sSpu9LPBioT%bODnEI|{A;??zK zm70FLmF;e9dj850_%) zN3a@2c7%4U=yDeXn%b12y4Evp4XHl6DRssbA+>?2D|+$gXuI%AQUo}4(1JaiaeJ3d zgQ7t@j3N!ca8MIzC;R51{`R<5bvRo_a)XzzH59OB-6F=gtOP{qfRTySigo4`B-~HP z!Ja)6^vua-F>gV!SLP$Lmc48&_ZsY^>ehho{_!sLq$_>Zb-Ev10+mc)@^kLt8NKG+ zi`N=OjTKHBJ@+(1(;gf6%EA3#Eit4LJ99!eYj7CcZuV_Jo=_3Y!(D9Ha?w0&7|8=7 J-T}i3{sY_Vzfb@G diff --git a/tests/images/transCompose.png b/tests/images/transCompose.png index 5fd4195b1fc269be1bffed121364445b34ab2153..5e8175bed9633503493e541cd3f14a53e70fbe4a 100644 GIT binary patch literal 1743 zcmb7F`#TegA6{aZOSC4G)y#3p?T|xcE@NXVf3q?Uu5R@i*pB~KYE+?-pva6*|q0$NPlUk`E z!@rbsF)7gOyQNB+n)i@f%CW`+bym^l>U&s$5|s5pCt0j|x2k@Uq1sV`Q*~nD(14s3 zSxo70q4L?>uOB8p4JO`xcCxCpv{bh*R0Z=H6BU>YzNqE-;FlAyJP{!<^?wHmISMce56qelE6J_vrnTKytNtP5#`Gm>%(cS(Q8nmgkX#npXTf= zer9LZJ6%JUWSD#@#cF)cQAIIdEG zBczr=1SK1|;9qw>u`s4r9~fIi%eF$kUkk1bK-Asig6dl*+xOeOx&I{xa`bYFNrDT> z9F^k0Lq2B9Fke)Y+m>(jXq*jQ|I3>ZLL18mH{2}KzCi+!BD>f$`E*;DWdY1%AtFqnY$FSW0M8^z(mNRzaQZyGkgEp4z8N2H^=6)X3n@@CdA%9j#rP076`oJ1*0e8RHc z^cWVye#~TQe?>Y_Wl$SJ(D#FHjmR2z*ngG%=q`@VUuj9K?lqXz9-WI=TBykkfju|z z$)T5ZFMOp*;pZ4b#=VCogUeWeGKr2n^V2Bay&d^mpXkhk3=mwxVmoXS<~RJAscE1y zue&-iLdK8*Hm;_S2!&u{n%g^K`EFElT+Xrv-!%nhOMZpE{R5uxdtPTzz0k4E0(aq| z&9iU-0{IHXoNPbx3~|*-zK~#&5NtY{4ibQAt2*c>Lpfx_CN_U6pN5RBy^pHZ+E_wg z8HNHqt$s6vtrIvtzXVB+K=7oyYw;w1a2uHif3>J;J+indYdkY!kuN3eydiphyzxR9 zO#L~f`h2A|nFuO|-i>e}1%Rv7YA1uk8v#rXvMAv4H%8-}GU+(X7LxWwbj>V>lb%nk zisc&w!WstI{s-qa)s$~REk6ZFgNsd)%H*~!z{&4*{8UmE1KjOZ&O5UmUP>`@tD06F z5Feb=a)@+fr043lKb!FR&gEf-%J~Wfh>}?CqGM;-eS#Osz9pgI)71VV@-2GcM$eek zXwDW?I8nXEwri6gEXqi13c_A*w0Qa_bmg!}k%)Rhq(9EmxZbIE<#G8MJ3I7_Ai39S zc+n%6ehZf_sYr(kRt77M~bRdI3GUdHa$y((j;;zo=8$ xB};PQ=-z3)*_oLcO~)tG+5dOI|62;nHdkuQGy_o9jNPIFU{Ic}HOQau{SBRSPx1f& literal 1679 zcmb7F`&SZ%7snJ|kfH*bkCb9sn1X#ZQp5s5F&`0OT8Yc%(wzB<(#T*Uj}&umQdy>^ zVac=K%hZc%0U0=14WT<>;?1%jUyXV|{&pqefdp`GZ?k%Fmgm1QX zwgvzInqcN7KczP6GEJ#?_eb>wSO)*G`gm zY#i%#F@t^`a7Y0M$Isbciv;qy#fh!RH1QWowKK#d;A_obYo`Z1`TI-lKDQa)j>Q}= zufFLz8a2B1eC@gZ)_mIA%Fk)l`8RTh*M>C#{{H@Nj+XRYHa` zn15nCh?93mQ#+tRp9=T(XlvOS2NCx^g^pUZWSBIu%~#px_t-o!n6iY%H`GjpQqI8^ zr*?IEaQ39L9c(fRTg%5n_a}qF>?qX2(&5~%Igp zuPaS1h7^>m`X^NNLRU$hSy(VI_u&u4>zIR-=zzt~2lR00F9lbcLpAUncwfAvLcEb6 z>N#Z@mal-wn}@B{`-awE>=;6-|;H#i>Tv34x%w z`3T^p1&17i<9{E+Uq&*r)VK~7ne`0fJoi3}5>;NzqIw~zrW-wi``*U*JXkTPR_iq4 zflu9GKt6NzfoW%&%0NQ$Hf2jZvaafzSw&*Q?iSF^xiDi zZ%u(_rJl>W1+#~lhIjuz)4R#@a2)7WtB16aP8Y4n9{og0H{|inx-^p)5Pm+hmAMjP z#o_x{Ll9aLyBpf&uB_%o(8cmUPAk>TH#zU-ZHty@&1GY5V_L;%kZO}{g%z)qF^Y;)EL(}@%jTzrdopOi^>ASPz{8tviRl!)q%X3 z3)0)>=ZN+{C_3(5SHEv@P5t#4D(E|J8|2c*-1C*yP4$L%5e*iOP0v`NOH=dedlPieY&Yg zhCUXJ+_Uvzj}J`lI-rT`D&ryjYL{O^>t4{sgd-1Ib&V<1Wp$FD^E;SQWy-LK0M3tW zM?xTn|Cfj$GV~MMC1+Cn29}K-6=bi76<^|s`G>O7ufN_7L`js1-hrX^VDa02UzAO#4yzZAi!7y1&Mdxe8(AOl+peSr|3Ot>*>p5Y zAV@^`-#4&!8U}GLoR6TQmHyR7#tGWH*j{>SwZ-is#hoW$BMhYM)e*&uNBVoNG) z${qWE$sLG|u^H-xApnlwUEV%=*I~+jJ!I2YZ{=+;%rZIK?}~hiJ8gF|N53>4S+Wt_ zX?f}a6dNR2ojm`k2uD<&x5KVgWF_L?mfrQPFb(up08ibx!+7iunB*C;y;AGiT$s;z zc7d3kwmEU4!YZk0n|px)J8egNag3T>OQ%wpuG$Ondia}NLaP;$V`?xiud%}mIcz%x z9aNR#lj8S885%)%FNb2yjjKQHpw6^-62e?oUTKJ5_!m6vdB!{L+R0tQY;JokJ0@TLP!*5JHUM(Y%*xJ96WOu|dL%))Mv0RiXoNxB(bveU{wUFXI6HZHl3@|pjd!-`KuaR`Y0!^lpw7U~UmZ$2&`7yg mm#hP=_<;Q