From e182d73edcb053e4388402a16e1dba44bbaab88b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Gasi=C7=B9ski?= Date: Tue, 6 Aug 2024 15:54:44 +0200 Subject: [PATCH] Fix loading textures --- assets/textures/giraffe.png | Bin 0 -> 690194 bytes build.zig | 7 +- build.zig.zon | 9 +- libs/zstbi/LICENSE | 22 + libs/zstbi/README.md | 93 + libs/zstbi/build.zig | 52 + libs/zstbi/build.zig.zon | 11 + libs/zstbi/libs/stbi/stb_image.h | 7987 +++++++++++++++++++++++ libs/zstbi/libs/stbi/stb_image_resize.h | 2634 ++++++++ libs/zstbi/libs/stbi/stb_image_write.h | 1724 +++++ libs/zstbi/src/zstbi.c | 32 + libs/zstbi/src/zstbi.zig | 619 ++ profile.json | 1 + src/vulkan_renderer.zig | 60 +- 14 files changed, 13216 insertions(+), 35 deletions(-) create mode 100644 assets/textures/giraffe.png create mode 100644 libs/zstbi/LICENSE create mode 100644 libs/zstbi/README.md create mode 100644 libs/zstbi/build.zig create mode 100644 libs/zstbi/build.zig.zon create mode 100644 libs/zstbi/libs/stbi/stb_image.h create mode 100644 libs/zstbi/libs/stbi/stb_image_resize.h create mode 100644 libs/zstbi/libs/stbi/stb_image_write.h create mode 100644 libs/zstbi/src/zstbi.c create mode 100644 libs/zstbi/src/zstbi.zig create mode 100644 profile.json diff --git a/assets/textures/giraffe.png b/assets/textures/giraffe.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7e46e5f34016a48dd616a2165b7b5ed512a031 GIT binary patch literal 690194 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 z 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≫OW^6dLs zLVY@`0fzRB)tP)oniZPt&3~#H8K)fOw%+&lBkAux=5;`LkX`_tka;Y!jEP+ z?A5r{J0Pe8+F1^^#;R<&zs8R;34Z1Cxlnu{y;AMMna`NxP|48wwt4m!! z`{@BO_qo7&kxs;_yILOv)SJ8Om#PXt5nm{Fx-03-5@65(K+?g9e)SHN30UUlo@=&( zKO50)Cv&NP^%F`19!0n3LDt!0bt11{zc!q273UW`8L^WDLRFv~vo1h+1dQAOX_@Q3 zJph>l% z_`PD^bG>m1>k5no(#LJG!G2MjH5xcv)8NvtN+AEx=7xlSTR-q)r(z#MdlS3o=xDUr zty|{3i35H9=ErZ)R6AKzn99Hn{XZ{&hv`)7$uhGL-Iv>tY^327I@{1ObP?5&I+u

HGO(V^b5+lbaoubG57VP??cZ45}1_NJ=lIx%&RBIe(b+#7pS`) z8nmt^KP7p{v^ykg*VTA9Ko627Ny5tm9a_fytFH2WjY~;YDvy7r>M^B0T-PrNr+!SS zpOe3N=Qm+{T)R^X2qcEH^&jJ5Nuu%g{UDp6WE&DeBk=iO-N|Cm3Dd9n#q1K-uQ`A*yw_V=x5|NC$%CwI3fE|wDd^PId_1?YT8$7c{S%(ZaF1hgMw z9cesX>O}JFq2#ZzxA#ATt>V}cD+PW`r^$Y7#Kzyq;xgn}d_Dxe!l0u>l|_FOPqCRv zgt`d_d+lSt&5W*)=HH_6yD!k6yQUy99)B=y0}OydwkI*hD)1- z@*R=af5b_c;<8AD?nO2JmWB)ewH%{n*@xc~>}&`R3-g$8W?tHlGg#%r?I%>3J(kWn z{&>)hff8vlZ~e$4WWy(Kr1s$6B=|0@Ni5tbknD*3YbYC>NS2?RLO9qI)I%2HH``S?p%t`baAxlD$NtB`^jVFFEfmy=~hnK@~h z#6(yVaR544nuUTr6ivdn98XGi0yl?;i8!&j3)H$zMl}WLuT5*VvIf!l$D7slbY#ZQ zw#G}gYSNq)QE`~a34eg^k4rOv!jY6L$}&MCkY$)h(|0G!w#+vMe$RUYQtv3g%<_rJ zRP-{(%2w!oA6*p=MT4)rANIA!qSM33ZiAryMV|{7WrJp4KK*Vy$z(zcHvhxOPJqqW z;_p6-$+pd`RbKClV-AM#0US`aBtkj&;lx>9*M`!bKh~8UtE;wj6SbM)H@rk0V7z%n zS>cqeLc18QUj7*<7%;XeN%YR(kO?IF&W<66JKu@3Cl%keiHshJT>rU}zg(TKpLUwG zTu>9(GN7=xq8JOEtGhRqOdPxvuGSp)4uDK>7LltMF!rmg{=J4x_w2Y1{q6M(IcP`` z#%A@A3@1+fR^S{7+ZMOjFJ#FiF|06XMg7vqOvBA2LynyxE9=VlIepQ| zbcwaXWN<2|i}y=ZpMZMX-0nM0bCVAhB+^OZYdLsFHiJPRxu8LROx3hHHI^5N8@&pK zUM0DcV+uJRIc5-n#6(4b(~y&*W-$e1V2wl(X_iV^x1(AF$b{F){|02isLrZOYc=NT zNG+#d*8`8RL)qdT=Xx`(d%4-PMbYz+R4+kEA6M6qpFO~BCLn6qd$hJjtgBV@40nG1 z@5Q#y&Y=Vc96Cf#Nn1j1dv+aH=q-h%KxEQIB31JQsJelvGb&Og%*RH`8_L`fPB-O}BP;o_bRn3*VZkSShKvhsZ)5 zFHzOFB`eOIefnG6@fTRH^Awu@$Hys)pin%XW2~MYHB2`{;?tdHKD?`W*RK zLLAwGX5>>a7L4-nEih~i*vb4>)cS>T8%4!$2n|6Md{mJ?&!qaSBbQ>-Q#&VZqXS6t z0A66uvww2U>4_}v#r!~6hw*rZV*!S|!F94Ale*|IsBcMfT`h0qGuvy&y@;IjTmDD zTE<*B*XNK~TlA2G87K*r0eth?hcN{*_6erdo6ReC;4_;3GIAtU-zrU{@^kg=EF3Hp)_E_8Bgwt@^tw-fz?a?kkjf>G zPXee#k-*Y~|1kg^3AOwg-2dt!)obfF;fB#kmD)y=Ax#j5&Sh6@Cl%uYnB*v5V#APx zt4liXA+4|j8G`YBA-F7>(tr%G6eOsaeAhn-$TBr6a7%^7trQ)zLkMsIm_@v6`P8=b zLR&!W_V)JOuZdG%M0F@C_CKVO!GqVkOY{w`<4&u#gsLzEDTR-Kj^xyf)ww zq=)V@fw}lZwIGpwuq0ru-`h+0WN|>5YE+@yDM9rth2|&4(Mtj_d6w;pvBR7vqttag zxc6qGOZKC0lOKNUgs^Uoa__Zs<-)JGO>LWF9&A)mis$7K%)}dkDtG=Sy(Hjb2q$SD zF?D!}GE5puY1nik5uoH-DE-#YA%aoeEK$XkTd2e@#0~rTxW;R zi?IksS93;Qy0Fs7MIVG_t=})6;wYZc zSX8U44c%{#%`w$wlP_`{4z>%`;c7gRf!qk9Ki6Ftbgp57FKC@pMatLbzmDod_X3E% z(w`-4qQtc<0--UJmv`%8>JcZzc)RoLZ9=~Wvsz%my#DKH^xJ!Qo`^pin1(T*8mHux zo9OpkVRc=_sg@LU7Q_go{b=39_(In=pX4Tlu^$8dpKI9uDX%31#@Jr)P>cxZG6S5; zGsPtWW2^(Iz?PIlisz4`nn@Ys6IPOb{r7w+bQ=V3a>^oC$h7ajyhGYSgy5<>$UDrL z2EgB3NZDm<4l6N(2N+6)6(rdOwCGRyeicqEQqV0)j?OYG&ZF~HH`mFT80O>hZ5Q+* zI|g0)gj}~!8VOCI+gGyTNFx#>Dk+H+RxA5j>oU9IX4vI4d3W`e0;$vo+h}dFQlsd( zi)N!|`codh3q>N&LS|kOI|5je&Se)ZkptdBm8H=gm!K08>ex*is>ejC0zFm~>Qi?R zvz^F+jYZ`JD~Yrm;aj3#%R9nSr-z4uj!sHoUEFrQ^`E&gllRrR2s=ly;*xb6fu_0S zu|P>o6TC)b4`0*^D9xvYPrd+;-CMw)0M@)u1z=d$)(QatJvU2gAgXZ zn0_hSHg5w0T~$BdNan-fO>jJP| z7Qd{q@tLB9Pk_pzP;)kZ6};xsf$L(Ene&6!u?qE&Ej_JPwj5O?;#nH;g%S;e)|lhi z=s@37HH#S{pLL;$!Neo?rzernHQ`ifK z@|y<3r9V|KNRbtCgt`c*%CN_JQ4qw9WYnqK+S*(p)m)(=zjeQ%se6gw=>1IWoFsSz zj7J&^#8)q51b_0+=W~C}juTH6SV@n*<{~8f!#j8?r=@YC6h?@miz9Wpe=_Rc*0Hrh zR+0(Apb%7|x=;Vkbf@h>&n{cy7O!b;25-*WukdHAK_b?N;&)$T3|NC0-~Jh4R=(5r zxA^d4XZMCu?Ai;XtYli$_f=2vd&(8LzMa4A`f>4Y&`bZ9H(7Ewdb_wsn*05z%U^z+ zW)&mD^5k39>(5BAi78~lHjN5Jy-LKEo(=~0Lr#KxqHfmPubE!GR<@MR$Y!M24UEFd z!A;|L_kz`@^6DAGYAZ5RPUqVCUbO{#P}yeNu$C3~`DOD<=qthq!@Q_2=GmRbbA`$F zvpt0)v|`o_jXeB{D4+~Ev0irMTWY?S0q_uxWYFY=`f-!5+ai)bSa>ey= zb4udx(h|TL-+BDMXv)6JRghE8KhWn$BJBdF9N%iti^qQsI3z>hd7b+hMIgTQv zdO#=`{cs1eut4Q$GXqO*U5ShQUKQ#UXwzN#+Cynk0Scpah?C!(NJSx3ms<-HDAFGj& zGHsb>NFt@6#@oPp%VIH)gIL#2vc^JZZV5wlyY-&QEq(1=ygWce{PIO7#WtkPxf2-{ zrLIh|@1p84r>-56tG|TlG$q8d8F7KV1^Bog`}4yibE2ZuAHTQ6 zxl!c-5W|I)K92Uj*XeA2r9QWBk|la~Adv&-$paC>pw>nqIfsZ`QS( z`<2dI$iAK)y5?Ofkhn$DT5yhI4l-&R>fn^k@PZ`;@?O}r*Qzy2SbONhe@5fXHYTCP zfO{sVNN4~fuHr^)Pq`$_TWI-1o*G4oq}RXqK9neYop<(bKl5GCj*|WUsK{#L&64t- z&ZUT7&`NuN4K$7;D-A8SmdGM-&|_kU!}@1B7HGk@zbu<!PsI*A8ujuWBv8oUdr1wN;g7iu*#}Iyaf>doby6bBaeV-Pgbwa%> z7KqKu4SI5Z=a>+oO%Lz}r}z%J1Od)>n@@n1X!` zSnq%ozNk{W`wIs5xJ7WZT`=BUFW%hRZZ>mS>&&>fcr;p|IZolwL{&D1;56Xnw;6an zF@AqQo5isc6NaMj97SBcrNh{#9g6RPmZ~%HlRgO5@95Gnd8Y4uPZQj#Rq%cZcE`nM zvF$$P3*vk7i<)h%;xshi$mvg{L!V3Ke$I0gdy1nu{5IA^K1*U|Kqr&;cY6Gd6q$I(sYt|S3?l%F7!9P4WIdus1D z%UwA~n|r=^D}R16=DVC3Xon`o_bG^k0X<-pHW3k8rMwtlt517O|v(xaiU>GUcvtA=0?2&0~#lMRti zcrZ^>Dv?C_=oU%>(9#zy?g3#xcj$n{U()-3oaM=MDD1(^Xp_L$NdO(wgeh(We;ukE zbioGfNPzhz&U4zSexr%1dWM3D3GHqX7S#s;96#P=I=Kj-lZ=z&CQ%DhUhx0d9~g1t z?-LE|_gZeQ{gBR&UPRQ&Y{2#J5Z$W!`kBlz8SPNV>Vg&jNRTlfTudN3*2SoBdbunt3z?%3C&Mw*> zaBim#?ACzkEBS~D*BKaI`98EHR1l|aAr1DhWR$&`I6kGFS1eoIX&9LbTYPZ0Y7w!RB)GtbMNlm|@Zz4S62;@dZ4j;z-su(0pfY)NZ> z<(MksXF#~KdyKFQdA+zA=ic^_bu5>%7+qgj;c=D{i9|K0ir*_*p)CHvOj3oB5IWMN zV5k^b)0C!E(E7t>xx02&*l#vN>ZGKdAW??={D)$|zE=1NlR%*)GLkow9Q(u6BUk!L zqHX%1nh?}3L-0oepkczha9^*k(74s>v(u%RD7oGx7YV)AUm0Ou?1|~}z)t>(8qm1p zz3~Q9kKj~hr5t+z8#g-#$SL{eg~WyKsVV=iTxs0zo85tBYkcyc@P2FXGq1sveIpaD z?D`@k@y&M6h#MCsOQKgdrt+YVIm+^Ke)?LJDo72zetQ>h9o#S5m)*>u+njXNzs-$? z@`myoXmb4+iWk4F<_$R135dj(1`;XL)KThoyoOV^lSx}Xzrq9M4?NTjZ7p{Vel{3E z_>-wF_(vD73z(0g#)5c^Dtxcyy*O+-87bwB6R@7Wh>D5OjURrNNZUxUqb*V2hu4!JRi5J z$NU7_$gm{8uKyn-hxfeGvff$$gV6g7mxo(_D+@Bk$xf#&JJ_sB9dR0B_!p`}y#_bbdrfz{3Awg;If2L10p9Vo>BnjVYX zf4c;e%8?ty?E^W3!Bse5)doDKrBjZtCgp`0$%pKdrTRQuBTHWv4TSs$v6oFXEYgOc zV39fMg14SoSmX)c*R7=9xs8?mRM3Z818s|xS|!DWG10*Z6gVvpX8MYRV<#okXTM&T z;dF>b4-ZZ@BY~A*|2SEv!q`?uL@mpZd{OqqNNJReA^`sj#>!|NLH8cJ{aWY_%RLaVz@TY5XX+=vc}E#C-frzeMatz4%Yu@ocF4I%XsC}aQF$;*i)UTR z*tQBzDeu?iy}bdK7pDVZ2M2*zSvr(!CsAq~gI^xV+C~N8IU6MVTGH;ol^FCrVkW6J zd;pTLvUuMST!>Al6P67S-{*rkCYO)omjFc_9^P+unUa&!7>nqa5CjyxfCd-5;GBLT^IyrRraoWE zTpxvTi>QG>tT^})0}v+`B1hoV1PLr_HJI2W1v@7yzjRr;r#90$FSOi8GlqOP-2oy@ zC9%{a&n>3(%~ehmU(Yed_6Uiyt;lfiqbVfJeHUSbp9TI40y1>atn&a(4Wdfc1SfLb z5w^Jff6bXv!|YYrs3*1|o9;0{sw{ukS%!6}P||x_tG!b$#UtXy13nc)ntd9!-f3-w zolsdVP%CMvO8DEl_S;;&GoWxE?9I#n3nTyB{txhaPDqD9Xs1g`gdmn6!;_Ho^z?~% zK&$>&;kPj>QzkoMrN-xJNW=|n10EatiQp9@%R_|7wKQgVd|@5T2oW*{!)zg)3PVd^ z(IfC?28_)yx!@`mk!gnLN zQlYJNYMOt3?Z2xxukvmyutM`~dWY=YVC6rkhbj)ipvY?k9=!;6w3!UmUSA!#N)bnpXvR7tS z6hhYuA!P4sXM_;Sx<&|*E%RRDCOa9K*C<&buG5no8b=>6v!xUSwAw$xNn_u56w1J;Y z;)_Xb0qdNIieSKZJ=4ThKXbhzW35lCX6LsMeB;(YI*IWQRzS+{m2NWH#GFoYb?paA9&tG(W$+sIqDeU zo0NKi#l*&>QJW8^ORp(1UGB4Rjn49Xo@l#L{FLHAE0gbYqu=n}U$I~6cURM6=j{Sh zVo}WHB(7cd=-(Q2wl!;oj|aI7#zvHj2snqtNd1Cqd+Z+>B3T(DJUaJx=bh|D-q4!il&V0XW^>6 ztl#Q&M#_EYz0A5p>a0z0)RgY8(SeD#PjP>G*M!|O#}b$~DYF~HRJal}&6J8;c5Q}n(L zwydOXMyobwQXg#4PC={haE6}mwES4$5iLqMi%MVbb+p95OZa8x=IFd5Y{HxDGFj9mT?Om?xK8UYNkafMfhLclFP zI0$6M1N>B;7z}WIF-aru<`+}?RcV>Tgv)1LSTb_`ET|8b1e^KJW|Uh#sDTWY}SHu z1Dh9XCcwi#NernxcP?@yz_I72GN8Sn2E6((G4QdJ(MC1zB~v-cJg?aQYXM9sRlUhu z!9ZiYg$tSQAkxnba|{LP^xM%Ur1;xtV|^J}?t|ag?M+1jj0TOKAcpLw5w19Jw4fYU z>WzAg?jA#$a+JTe-D5cQ8D9n0=ofhkH$yG2<`L&$MlQbPp+`{hrsQ<>&G~=+E7E4rdt%$Q(xJ^h=aXg zj9okS>^J#2PBu;>>39sV5u-gg5fY&HV+t9X_7;oJZ&8amg>5@zJ)y4To#+MiTQC(R zfmOq8jiS^e^sdL_CEscOv-ip&vhgN;)852{o6&oXyoK&cQ(WsG84A2Q2-DJb58d7m z=zqujiQj2Q!01M_H|Ob9DvHK1MV$D2r~s$R!A_R{YK8_EbdS1p^{aGu9(Tk9A#C<3 zz49J9ufW-uJG3(Tm7$gi%cnCP%i$1)^58kIU6xoyc_O9t5F5>lhf&Oq>YU=`X5UZ% zHT-X+KZ1O9$|}cB)pDA&HRhb(w#p7VMtTWJ#^nA1iSq6f8wh2CuemIzX7M{%ht2f8AEPu6U4I z(7e1xFs~-P_X*enb%b6*!j=FEG0fNkBvCZjsUM?a(9V|RaI4_nzD39PrAd- z*_Oi3#doGBS&u``3VSW_8t!Z9r>y22y;X+eq)@$ziUuU4ba zQDJS;f|G|1=Ml8?82=WJtsTY+bRqSSJGJ(7_C@SdIxSx2Qv!(*WjdmCoybIe)Ky2=kK zfw_Iya$fHXDUAskM~x}HA!k~ zR0V)_0G84(H`;(*aMJZ#=*%7c zmMCqp&J^+#8s|vN{_Vgmt4SXMn~oJetZXWafxQ*qj@fvvtZ@gU)c-g%Krs>F%%-KL z`oM9*$^Wx=%5c@<>D^bfp(Ehmt}k{~#uZX2{x-!=J$dnuJ^Jryh;qQ%W&z-uS z!ER}zo`ctqR#rp)@vB5E)t%U#?H{AQS@89eT@HWCV&Q@ZJKoaib@zy0oK?hisa}M#WXJFi2Lv- zjwB~DfxaP6PQtonLifh5h)S;sl`G$7MV_|=@n?V<8 z*qz%Io@|J?|9jQ>U~|oGnTv0GLQkz!<2Oh(r9yi@Z$p-hGa@29ckP_7e$&HtAw}l0 z^_31T1+2E1twOFtk9BsZdP((Hk`}oaAAZiLcwa5X6&T^fr`aEheL=n#`)0zL5PObO zID70U+Bh8f4u&mSzh#RAKtbJnb2@F>^v6khB72N^hc?+azw|=`-K26y>*hSMJ^Sm2 z(}7~ZjRO|&&fV`^>%nLTgC!`RKuX_WG%44-UAT3BJeK@dI?XXS$)qO&>??Y#k}CO= z`ujr31&U=Kf=B*@0Oc;oWp}xrM@q09&~7h<9^9{du8n$1IRu2=oORLor>{DK5Unz6 ztQhMDD61DQ?Y{|FW_m=a17V_ZEdQ0AeYv}f#%|c>@dpP7W~bTK$d;udIv#zSX`p@_ z6lmfH>Qv(+l}1+{7r7rr{~}(zh-x3E8!1qV_7kM4ISMP};$87CRxM_P0Q00_?c8DV z;gr800Hn}SFdZ+c#I0LE8!4GP{Qa`iwlIAp$|q7}Y}K&|^^a}Q(@)=Ozna-BK z#7vb5;}E;Zxu^&aY5WS8Q<3rLdd}!?W3?w3imF>mP=wJemlQh1Cx$}!(^ZtfT9Ve` zRa`1DQ}z-Fg}rJHw;JMEiBo?fO~3eik8#iIVecQCd~|=6;OXUedd+4D6-ymD z?FY2Dx*3`=@&Y4wBCQo=-&s$!6w;9Xju@OCJh{WW=Ax8uTN@9MtawyvY~c}|-OY=h;t2oY)$abR*!XsV zu<(^HKGjyrO0aAKKHj@gJzSHB45qi9%HoaD$-InyS)woG*k*IjJaRlZQ8$#4oioTf z{l`VDPFBRmxjm;7Dy_1Z_M9ybB)G%TP#h(uCw5&ZaDP+QwgZ?~Wjv^td_yg9+r8`~ z*K$1ZTP!Gi<6?FFYhn1n{>*V7@oJa29sz4#j`+(R__E-@0&+gnb!i=PF%}Kvyibs> zThyP(7e?$|5Dk=W;si$vR~3~T7cyTe?sbXWzQiAQdlh#1u1z1!_?J)aZq(6;fOfH+ z6peig!?KHEM3TjDqSEskcI!7L~t-Ku1B&N(OP6 zaQ)T;y-OL3fh83sqf@27($p%sV^^!YLAS%U=Z&gp#18xWZu-DpYEg$-X4w(%pV2$A zzWWvGeakE1IV1>qjld^Z_qCFF-$x3pV!;qhIr6>v28faH!Ih(4idsEckYADiOe4G} z*$3D{cEP_NHB5o&885s#S0sy^AI7jnQbH;~JTmvA+iL2pCF*{<1L=545-+=01;r7*|%(s(_0pbYiiElw{k)f~V-eDqT!JoG$^WvYQ+p!~M> ze(wyE6sv-7feZ|zlRO$9Gjcb+OGwqOd#TqYy0Q{X?oLo}ao~}U-mro)&(JQv3(;0P zs`=S#m3kUVJ_>RZ%c>G!J0N2ZrP%8Wq3|F-45Q$*a!o#RX%ke+1}Fk7)X5F1)9-ij z>QPE*n)ksYC0kqBiDUnaYHOd|g+1<$*t}z~%Ic<3>uaVGAShf&k`7*^^YX`phr|1<}4nc+kJ!RQ?8xQXhDXrgK`G?`20C z*+j@~?yQ$2$~iOiN&0fEbYw+5Cq)}II<5HI7rzt2EK=zAZNvV=FT+U0Yu9iG(qvly zn*7d&e$DM?utmCZ36_MpgmSNr;({KLGx}4Hebw#A*rmyBg{;M&D`Gh1@rCtXhPQafAWc~OAXmk=aXa?zjToxPenUj?z#L;6-zA^Rx zM24^|X%Cbzu;?Q6c&gBX?Mp4LQKMA@`-?B$lJN*0Ygtq3AylMN%-0VNZr{IBq2M|f zAzan%;ItGaq7e08we3N(|lv$(4}yj~YdD5K-h1n&g;yg1l8l-ze@G z0s^&@zV$0KH~c&7^=_`uk0(jhqw_-ETBc73Qv%(mUAqbWFc;$MtObHn4j!51a(vq4 zGZIUErkKAP#VYxfa+64F4J_vUARP9h8j9WHkU_!lHQrAY01cd~dspIn5R*C=L<_sD z6bac^euy;!UcTD4f|3Q#j0GeB{;i}2p~VF#hT?4vB)xQ5`_$ZgH5is@zu|irN1YBE z0!Eg*ueQ1YA+L!!>$@`DzjU{3J1|GX0?%s`GbLyo`BCJ7{1Qs zX9*s0fS;{pACR@x^a7eGe?XCI2RyxHnl}zdagL##wyWEx(ica=3}fK=*an?0Nb5c5=CDEp(ySy6$$m#GOPYWf)W( z59}culgKs&xU(HmoL0V<*ms{QZ?ZViS>6mRL+3My34v`{K;JunrAOt=dX;X>LdFEtO{#1*V?q z#?H%AIB!#iK4k{AZ3WZbgUdkd^ZMw|xV}R6MPyZ;iwgSokIk=^)5{W+eJq$mr$h^O zokw^SveuLvAO7AQ7X5=`u3q)<_g(`|lcAK1g88S}PDrKOATjtv*ofsd+@iEciNnvJ z{4P1}i6g(ZFvv|o39XD)$4a8lt&~7?-wkIegHfE6WYmFF+O?3wH*KSg$=yD?y#GOA zdP9Sv`s`!t3nFO%Pg-(sw7A~(zT}qc1$o@X`)e=D_YY`Q-U=%VjbpE|PKG`n`5f_Y zZ+TkfU*F2&jWwm&OEy1CY@?FIVgx4l4p55hUt1XK?Qt06=%+8uqIst0n5?lcd{g__ zd?@x?w}S|KqFR6n%NX|VeaZjA()3L1r#F^A>AaYgTO}1nkRQegC%@*nV-c+!dT)O} zO66{Iwb65{<*&H9SlJY#VVlD93xgJEx<$>n6eE&UZ`A~oV(Tmc^Oc?DnSYwHwNbx^ zVnl)!^{(XOSt$Bd4W^2@?Jg3qPiIFlg5LXz{XCN)FLiVE%&y;ic$$FYX7=PIHK`;4 z@xCXG=d@hwi+L*r9u-qu{Zs%hIJ+Saau7SS19fPNnExxiQ$~^j0V>d=>NX*-mY?q5 zy|uqZ%(p;UMBnp}{agfVPL_pb7n$OCVj$HR$wSFrRT-U!V!q~UykOh+YbPwqDg6(ho@u;W+SSJksxO7q9GR^Nv%loyJT+c3SsIC>s+(L>l zp@GBvv0a@7y7~vUD=7qZO`#mgWDTSW$g2Uv+1Y^dI?raWMRfI3Jko2b=;scYC*c>n z1Db?YWw9Z898e!c8E5)NTpqdQRX|7YF#M-P>P&)$*G_=vM^2Z9=@^&dh8-O2)m7E4}+mD`aDL4>9E^yV& z=a=UjXEe&e{uiY)Z)$T-rPfqO4=vz#e;ZwjU*$JM=d7@R5M`gyLR!o!cF*<swp_fa)dH_ENjY=RHglV2 z9`wo98X82Wb@V89(xrkS6Z^)ptI#wrv5Kq5=|tCG&Q>1~Y>aE`AgT}W2RwxP($p6S zI0a)}eP*|ESk`NE+ETp8z)6gql4=H+3d~%fT9KwbD z%Wla23K_rl=C2e;7^!m1r+g`kUE~m`Mq`X770@-BvQmgs8NLHK?fLAs(NmgD^x3~w zMN#^$-DTPDz#Z_#YR)xNOlj>oX6Z$Vg4t*J86iQd+}}RsSCqn2ORB%N)p}}ZdCTzu zh+J9&P5_)-NAds|Z(^a*faPz;KR1(bJ&DZ1c*ye|Ib1mu^YbS=AnQ+-YW@5fVCKb0 z#m$rXX6Go4->9u|16JX{_7R}F_&(7}D*s>DXr>ro*G%t4G5ALU5*MJ`QzDKRp1!Czv$fJE^0**^gVu za@w*R4c60)=m}2mTMKVrzv9sTKy6XA{E?TstK4yM6A)Y>R3cIblNe?e79f_}(xk5^ zI=(07?Ua^G>7i@O6Ze5+5sQ4~?3>@b>0W|Vy|kCvXYQjk3g(xtFE$7^Cv$JhA6y<} zEM8qSIn*s2UfF9yi*l+zPK>Uv3!mdkRL{$83u|s|oY(vL9EJuOT!n|K9Qa+!nBh}d z$AlsIoNWzihkYN*AMjnR{ndSKBIlukV5?o*PV3OQ)A@Wg?Clr+m*{~;zdx98zDp3* z2*7;;Hin6nD#29EMEJIcvsHBiC--Q<9e z-tq!CB*P1UC|mrU_y=Nu#&yAPJu5}$G=rX)MY|do4#|Gi1PFlU4Ng0!PXX_Ym1O>C zd3>|7r&)txl{@fWq(T<{-_UA-Q{xv6&lPCwsOTjF@4+b~u)1g8LN%RuWicsU%fA+B zx;gFa;N9cx_X~sc8cB|d)`^7Qz@&db7)4)q>`ay)R$9XSP#LzgT6<%PQrM1e%7Uy_ zr>}J~ys%VLPm)3BQR#PptTj8hnwFOET_0DwpCg z;sX*yAHisSwjn5>j{MHM7Aw9DTq!~pYov|AlPL0i~Qd7 z6|((~T;kDgc4;p)f61eCFYekMmlfY^Bd2*-yuQAk=JXo$CNKiGXa^^q zoo&8vNG6{_W`GAOMSBBUrOmduOeWyb(UR>2)(vene1eHLjUNgeK92{sFZ4>J2NjQm zgsE*UN~1nF zR3?dzkMw|!zV zm&VVF12(>g+<~oZBd_~k5(+@9yCfRD8iM08a8g4C`&_Bd0cd};3-}J?y%ad6&c-Z>A+$rtKy?zhe&b{UNjy|#cYj>I@@=`*%U%_)9ww6bPd}2JpyAeEmQZLsI z4^1A=l?E4f@m<}zQ22N!BXGGWjKC~t*Y$9{FDX<>#s8{oPQ`zu%5j%o`n&>)>S&qtAxdQm~id_8ss&v?$-T`C?(o!drDYwO@amiAZWC z3&1xoQj~sPU6!N>f$)!%Vd_sOx>ZQ9&fDSXM`LTpGT}C>Gmru{{VjYP`1taF*L^G%Aq9OzSiwyQ+- zQ#hfpMasb%X-&Z3iBcxAu9FnsZ?ihsQ@3v9~YD~0p`DHE*3=+H0e8w?_) zSf{Y7>sjEd;T>)u z8)+mVXzbWG*`#_DnxP4bkKE=E@yaXlpqd$I;hcNiIQ5@Q1Zc$$emuJ-GOhj+)C!&1 zSq>5z{BQRM$m0BLgpO4^;(e;d?Vw&h?brdTNDknpYlIo=_W*d9>c11=uLZRbf*(ne z?BeRHO+;d`@-9Y5W0UE(Eo>l9uqU!n%~FS@0g~q`vqS$)UdM3SVxQVT*GmLzPUR7d z@Z`;j&*Z{0C1(V;)Y0d0TY*xBrHnX0g&g!x$MDI)SDn%>x#ZK?@csQuh531FHNqOK zco?NNArB{imf&F8lk5F&fcfR{_ioESexuA0ZsIuy*yu1Z`mHSQ@vKrja1f4@4-jzR5>GaK~Wph)OTSPoGNeDl;u*)@w?sO@UMkYthgMS7vC56 z#?}v-{J&)ljQT16JMy=}j%E-?%Wzgi4L=*e6CzZPJX-r4msLr;~3g?VJ%=jLA)+15<2yk3NAF8D^{!hMQ^$ZL2i zoq2{6oD1)xBc zoN8j#!umQ|W;MmaJee_m@tX?OB-wW0Yh39j-x~oG?5=&+pD+Bkj}_|;l0^k=f`~yE z1=gA(M1>TP^@EtJMJZ=uxG)0t2$8ZyqsZc=A_J@BTKgJKANu8Ey{3)w;r{xYlnxt6 z242vaoJ(P`qm5ey9!bWgSh7sNt_;)AE3S@QFRHj*1cNc1M6*sDURb*E-u@JMEMQEe z6W9TQtGkypUX)gbR<2k9n4881Kz?(ZUV@BtHO&;mdACcDztG82opp@`-4LRefDD>u zXl?&|zd68aD_KwUB?nh^I@Dp$OLA7tjiv^YW*7b5$@rObWIhOm}y%a>Bdi27`YEy98UK;{{h$M zu?NYjSg;cQXM^*}-m(Vd6liUJAIKXhB_+iEy{FRDR0!A{abVmnZ5 zI@&ue7PGR(G8>fBMPtAkX?iozBG3&@@hrDulDg^?qGz=?g7to_dcShh1ky{^JA6df zAq<4xTXC!-hgDgg_hU%M-xaQW>h}1g>e<|nZ2yd%Jf*PCi@^LoX4269D4fg}8ST20 zVE^G~9u7)VdCcQM0g_NmdVN+1)%+_-Ym~LTbgSrn}kYAH*wSlW(@=#_A%^0 z>wZNEh=VA2g?}_LgD~+hk3I&acgxpN4_3qHmqNQUD>3q8CGni}$lj#vQJ@U*_R*+e znQ}Q93tu@mHp##W8tPEeANC`gbA8y20O}PFbOD-()TL z3hc%OMSQCyT_rW#LyDLCF)T2@nR%=+5XW1)r%nw3y}CT`^VE7?E(_5?`0bz4p$F}c zP6C7Ii}ZB*z@v3;oYh8!%M43b*TTx{78bD209#3EX@ToUak-W`Ur(2h-abAW$TxUn z)A#3RhugGUN77y*dsmkLZ7CHHFGCw5*Gi)S|1m}$2dGnktPRG>!@Ao`GIWMUM&7|M z$orL!+q1qfyrm4tMWr#luLS*FPL4k!2g-P<$3H9zm3!TlwQWX>&8WE`_or7T?f=UR zz*xPSu6^PFs83qv-pfUS$62Fe2#taqSO3wsI{Sepd0{M?Gdjqoq>^I3Q9N|cLAh$I z4HhK|P-NN+O>*PXik>uUn-5F6PezWv2ZEi+_WJ-|#f zXPCDm@&F=s5wE&�z!`yvb(DQ$K!j6Fy0`hoqjs<(4 zu-E|4h%ZOK$U0<=_0aG(sgDZPt%eN1@gv5P6M)Y#s}l0zWUM64@-II`QAlAh{ex39 z1C*o&TV_aV%8|%4^v^WBRbZe#kMQ7>#k)E4cN67dTa-)L(NsZ`=e!Rs!-vba=IUhK z&j|ao!55p{B!dUtaFVuz?sKa4Wl(htAq0cf*jv33H(@_rcbSM&`FNs|c>$lh_pC(I z;(98IUy4`d(;9ts57(E}h(U*=4~wIRdC$1FNu9_>7`z|eyiIxb{JNDR6cK~Zc_Ur@ zu>9n#%5(4Hr(0%&d}H0G5sjNx-K~t0%71C!j;^AI}G)Bn%HDVOI)L%sFTep zS2bba2y4eZ4~bSGo)Y^5Jg*=QA(>8UjkD-d+cyFo(q2>QR4MhwjfO$->QuDRWsCP5 zbTQRJvEc(`c}*y1AXLx+8u-lqFy&^2*hy#Vm*-LO9SoI=$_Iy2Ti;Obm%27wwH<2;g2tp(Y*ELWmi}|&ZpGuV z1RF1~0IQ{oQ)h)Wlg-ayikN4CrJZMECB&6qqELrAPk)3>VX?62_Ay;+n#((-ZG6HI8!*(Hwt zNyH^xb->JX!dSm?&n%(!Gmw8w?lGtShUxw^{`X&U3A2({{$9!0Xf-ynGh2slH)A%| zhvnr+YxFMpc7TG5Qt5d^<;{-ZBkHhPlPTF`-pVF1JxN~UNuSW8;oZIMK2a|bWIjVO zWvWes_S~^WegX2cB6h)F11NP~?f9o|&2h45krg?DYWY7rqEQRq_K0uZ@^1NA?4}@= zEm}QFiTE=Iwpmi6Oz47-HFGBxLo&GL%CNw;F>0SDZ385TuhuXh=1HOsmK=+YWhBG! z2WxDnv=smtO@sx)vq&$tSPT!AyeC8KT5#y@Bx&HNvW(TTOtb1F?Pw}W*BgxW_U(@H zvDib8FN^FP@iYbRLP8Bz-lX30#YJ?y^e8z8Yb=%Q2D_B>HuT|#L4gz_ zAOW&(>T1;Vp5l?2DX16D;=@|YOH)u64J!B%QW==CU5@q57ni{qi3mX>-V!Cg=WIWLx57F$t>`DLL3Z>IRw zpU(YTuyZPzKsGDB9+i82L8I#JP%XLTqu!+(l%joh!|=LoC=Cvdu^M?`Z6~w?2{H{$ zKEenZv~wY~*^JitoCklM-w9)I81Kmf@vzN2*$+kRx)P<`mMBSSdsPkMy*ebmXd>fb z;k-Svx{t;pNkw&rKBtkD8Y2x*-Y;zbQKlF~-8^-&RQ005k|h>v+Dus#R_`A@>c#XlK|qU=;^kJr(|jG(V+C(_p?@}ix2O`TGgL>W4-2qf1dy7p&6gJ@A_Kh`4> zF8)1OO=1Tz6onQZ{4!c~y?DUzTb*_tuSk(YLb&#tp|iU`TG#Y#^OVrJFe1KYYwz!6 zYHL^fy`^1^Nz@pzl3%L3uUh@VO_%#-Qon5~1HA^k+pLT3yhEXQYTi^1P65}vz$Oux zo~u~Uio72?zHgO$(0AvNh4Qfv2#iazr|0<0*DQ|UDwg?+RU(3g{K9}{Ya;kfSd3$(i;Dw->0pLRLV6$=$ z9!fRt1lt=w-BGQJn1}VHO~}R~O4a^Ee^x zunOt)OJh#g?9v&QrUiCOFj-l~a~nljk9b?G7kTtQgW7D3!9VDHSkl^3p$}98<+acY z&OCvDZm}j77sqI_rY&CtmS8nxA5u~2Fo3~-BP}hlKcszwQPSiZ+DhGeER6GZO?gEN z9^-y=fV%Zzl@=0lSTP8>KYlGoji`aXEwEs*x-V z7>n-PnyzKu>b0UVXAw4g^Y_2t-nJSO7OiJ@yo-doT{$lP26RW8k^!UWg^3h^rjkb% z)5hDkwU>AJE`6}LvdE0;ccgze**bUTO_Sk=W6?M?UF%+&78wP@je%Cx-Zy(gCY)JI zMXtJNQ_09*)gVP}^Ebv(y{Mul!L)W#%kIbrgOS%iNf=|^k`TD^`lfC`0+fXI+m_D0 zZss4Vz*XrOHYZyssfpOi(Gc28kaI}R^Y|o&-MwDIlGBY6t`Uo8xywc3H|0$%(&Y|d z^z`ZDr)6Kh^}Lm8r>?uP^|e4|cgcT5!&|R|k$Efu&3!%IIq}N{|FGg>uLX@nf;iS=;f%78c=gF+OaN{2leS$R1pV4Q357{Qdw z(>=1GKwpG7tiW3~OuoqtqjgB32KqW*)@o^ArrI+#M@ z5|QH3^>q=Ep^ceq%diJLKV8(6`QNZqunCAnt}FFfxgo-gjhs7BD=e+PB)OzohnElP zayx{)6@^YrUgQ!k`yGOX_X|_JK|SB=i1Q9y{0j`|m5%JBEW6v+VP|KeM{vf|8OdsGAG&3@7B?^YnQBMZoVw5 zhd%EzQYDRKqS&nTq1Q1pNbZ_*@_%IIb}}YyIV}rtxx>3lDz(uu&$ckhWC6Iy^4?B0 zobkhFhhmhh5Dc1FmPyJ$Xr-*C_MmGEBf)|`@aL6Oek9PEvZd97+-XO|6V(B#w4=i|M?#ErG5a}?+e<1*g8wkMa>=d}305blOB%fG}0cNql|2IHH zNm!tB{9Msqpc?rg5-@cfin+Ocaytf~{FRkIic9pU>86~80NF+F^Eu<#h=&woi3JlX zmm5YiWRcnsQQ@C*&y(z+K)0leE85Zh(7go+4l?qQCX9ceJJetZwf)@paHI2P+u8~F z#2t+(EB8COzBajKYSVrRmE2@Jfacv|&pj3YUW$Cym8F5Yyu6CkP%3cfw~vmY(rS8! zgZ6|Bu(M%|RWGOTZPOUg_xixZd`nq~Qa$B7#r^6VFeDlMb7CDR@hYC3+~O7zTCVI@ z1_lR?YJ5yB5WS{EVoE`i6fN$mXn-|dQ)8m5y0x@n`cGmwCeqok?N zs>5s-JRD!4W@8-S^#r|q68y-*?t02od{}4 zuC630@^h5avO`~Q$ICqtuO1_rfHI`+m5qCkeK=+2$&aNnxBE3q(qtegANuXcYp4{{ z3(f&b(3ms*PJ7TbvaevCdxm_;;1mnq5%`pQA{}5#8uIb->UFW;q_*)UDG;%GE{+uh1kGzud%9;h;4cdEiE79H{ z%)ue#bG?{J<}aO7rCFA`1cp0;f5Hofe$n7H1|qt6Qc2Kt?_MmHoO}SS7xjG>PBdYZ z-1H$PJD)#Dy7CRrC1;^jDgfcVDYsL?p0HYoUeezNtbUerQzh~Z5UVFa)!*52J3(t)pNpIHn}kYzgX=9igY`i!BS+FxR1w zVgKxrN7H^A9Jtb;y1QC7(^!w9KL3DtVEA1Gtu_Wr4X9xw+{Z z<+hg<#d;540geuvXhb%!rS$iYYiN+3UtF|rnR~5j_i4~fuSl5szmMAmcB0B$G3{%UTX%H~pEHa6+zkeN#vmPhrib{`vi|CuCY4cVf$Th=bqHGr4NJ=a#@2;!A9DYz zT@N7sEh@<1i$>B$jbD7j;%}h&%^^`S#`q#*h?Dy}OR&MlSP8(`AQV{^M((>pfnX*L+6IvtsPI z%h8fgVtyJN{AACwL)mb;8JFJbu;ttZQ*6GcoXKy*yt8rc!+7d*yfM=(wXr-(2(!W# z78Hht^*VAF^b1b_Orqh7*0Kl(_7Y^9(L@i`x=DlM_P<^xo%|LTO2jIrRbQ2H)xj#< zi$eh4$E;!K&E#)W^N>;RRTB;9nNvb?R0uVf(JI_kF#)9fs(fFRgF?^zVHnha5}3&7 z9PR?ITvx=wBX>Yr+C-N;g^V;DjXD|w#Mf7<)3ueTu)fo%>gpBxavCicd2}emWm#aX-$11D66B-=PnB#fbTQW8bjl zjkHu*DHSBivFDk@QO&Er=*}(5?SP7{>18N-}|!U*A`B%Ks}j;9ML~=yo^W| zbwXZwP=*<0x$pZ-S+SV*I8qNR!dUif{wN))g`hM@_l3|qA&p^1AS1S-FX!UBM~-i2 zrR&k*W*@M;Jid7kimx>b#GoA5)V+TAQJKFaE%tKOd4QGoT~O`3aH4|m^pn>MRcF%v z@Fk~7`3|m06DBiCs4JZDXV);_wwNp&UDpLkSuNRE+b#oqM?k;TGDlZgscxBd5~zj8 z96yhqn0TNVam6(~Jv}o&FZk|4^1r~&JY9^>A8heP$PCg>u5i@*>dJ=khzp=)u-EW% zR}t9mJjw>x_yF@xL}clC%UC~9SeGZBgx2+hDyx8$rtIZ%i(LJ6Wf}p~6X3L83;`&Y zfXjbnXRZZM4S?6V05g*AKt9=-7yNIe)=3RwTAYpMKQ)={C`Mj;iEwhV&sQU%Y~Q}X z#M7^ocgNTiLoVyl54}L5sn2ZkYNF^Vl%n_Br2EI4=mb`qv;~sJLrt>;%*^du7>44T zfmQ3bdcis~a7EM%A8pjE5$VxgX;6xf7ccywjMkN>#pBXsOttPt2FV;rEbv{G5c{eAQU$NFMmm*nD9*&uS>)im5)MSE`4`dQiTXcGIrkNg(j$Ymkq zc8b91schnwbEwgXOY*L4zv}F{0nTJ7(;}bZeMCQL4()lre9W3IXmAcKj!Xa`aW=Q0 zW|sDK*2`;-`7yZ%2P;C;N4gRh*_?%(5m%@bW$-7?I1w;~~RF10G1sq~%a5 zO%zvWQcn=z6#pib;83K(k@3Z^ZH8MZ{NCZHtNq69$DM@`TCOTa&AJYeBME`Gsi*GF zIIn6B#wwYwzk4n$n05j+#}!_Rv-?mQz$@_MAy`qM69@;kRipoPq14^VK5IcJ6jXruzf$?ZFH7`dDxv90k2e4hSv zSf_2t)?GmO41_fMp}FYDK81 z#QUURv{Qa80$9fwMnL@1=Psvj#q{VA=?f61!Fkm5F;1*Y-`5mejfNcz>uK}F1vN}l_P@Q90RPL_gn0H7?} zmoBjwjh?;hWqP4Uy|4EI5OR+2lRHQqa!fsg@_nC|Uu9zAB1btxtSJ$OC=ir_U%rxG z8+Bo6c(CkQ2$9T}e#;;eV04_MPVGgWqXuYWy-)Wc@Wrma_=AAG#hx6JB--WEoxAn! zzWph`n-EXFl*XMAf4W@xXmeT>X7eWbM%J-xeYIvfxS5tstUY>T=8_n~`sDXNUSlwWTq zG6C3-@-1g!XCF#)P}CQaYpMjqi3(=^pNz6nI2(wE-k*Oa6wuJPh6e8$P?DpE3P0x{ zUm!GI{zU^~KF(0$@7j~SEAe-iY^IbIma&%RrDS4{YF@E;UDs@|7vPgHo3f(pTaIeY z_NE99v_|Foj7fYyXXyM@^5r1%n{vv~wN-e*O_*XsOOh^LMolGd4Sudr55im66F&1X zaFydSg${6RJBlEzP^Q;`D!3&4vADQOvJ470jCZ6l;xPh~O zoW#(@!CSFU>$TY9bgZ9D0=Xe&!?jwn*+@euWq~+Z7J)S;nj|~o*ORT>X|+Z8HBGQI z6zli(=9K~@pXv}k{iTp(OQ%pqNiztz0fJ*UtH50;Xj1!*#3w(URU~^gY17mv+ukBD zGgGG=l|h;*B-suiMfkTzN|9GhCW@UNE4TwJiYks;+fH@!EWByjaWvi~9#%{lww>o- zc@4@)b{tMCI}Ht{+ZD(E=}eXao~XRMJp9@kY5h!5Wo6nL++BS& zY`R$-Xs{|P|I@WKvAehYm*zIs>{09*0oeHg1f?v1di^?e8+C)y>;j-$ew2Mz7CFUX zDpFC*GiKl3m$EbF%b$4i@0Wh)<+-Qvurpw!-wCH#2-ri1|0{Dvvos+CA7Q-y(-{DE zV#BGb@q={GckH4=c4^30`MiPxrUz=A(EF^8yU|;*{3Zj7cP&!U$GeoJv3%_c>(W*h zWsO(t^a|av%TywRDSc$nVKPxekS##abNBT00`?S`#mFWi?$@o}tAW<?te61XoFNqtydK{JL4Om3y*M9bD?1&E*}+|Qi0iD3%NgxsWe}587ns{ zFFGqGtG!T85J~|r1R40!QmQsj^>^b)6*gc>jMJ@Dt(k>{j(>&GI{!!0dxpc+zTe-2 z!RVdQdlw}lMrVlLOM(!igox<9kKSuUMD$J&64Be}B}xz?fbl1m+d31b_y@38Gn!oCQp5!h89Y;;8VD|8tWMxjwlQ79;| zPt;$3{8aDRCz@audDF`eT=MpbVGyh_ub^>HD!N+PO6A7Q!C+Wp$3*ZRN2)t9PFFTpAAKQ z^>^mF4YQM$`AB|~cf&L}VtB(++|T9@`*z3_o?0cFWR%U9+9rfSPq(He;%9wkC+{Ew zg(cxH?LI>JH>Jc;0c6O%rYd260|yWt^5@?t3SJMu#U=Z|3HVCi;tY%>0JI1|_V?W! zD1j!;699<~aC`zznW`#4ED-xR##Y)lyu}}%K(zZCuiODRvA}I0rvEhoxB933b z@9i2KJY2K{rdOzm&Ah?OX>V0qZ5Qo_?{;d5t|uRn3|3aa?QoVQrM zp$153b*0^e$vtM)w2{khHx%#g))3!u#=}r)4>&6Jt;pmaOU}XW4_KbDPSh{EAn=l^ zj9>kJ+~8RU2GiTJwRFFEth}&CfYdCw2%|u5etDZa0Ri>>{V3)xlIcyXG&HSjU!%&V zkhrD+kX;J>)tpG2Nm7GZ!-P$o zNLvpwmTS4>oUuWkI35hs5=-~8Y)tIn0Y3<29Wve|=e$3H`}DF8`+z;#CeKd|=@&rO zH_;Cj#6Jjbo(-9rlE9ULWWYof)i6lrS^iA1qoXyi@xq@EI(W>on>K%~Hi9z*tlOgv zai5MF0i!bmFE1~;O0j|MM6FpRrQcMKt=ly;HuU=Z{$fI8zPrBU{+CnNtXOVV+4cRe z39*15wzdohgA;$Rk6JK$^|zzTzPp|t@06nafp!_nLU8rc^wsXk+aa`%t zNoUbn;&nwRG4>n%n)j;(0r{a_Bxg?3iVyY_Jh;)j7DsID<=+SfS-@#u1Tw{ffBVe9RxW~q8X22TP01R#IL(S`;DWM6F`vt`Zvt%S3F3Y&ZXY!jdIsa>Ij zA`R}D4o)fci;jROhlxBTx3Dpngj*LnfoG&T3q@7-6|alZ3?KF%0+(*!`mpN*U~SxK z0`BP&qzFw4_5-LjSNo6Y{Sv^=Pu8rfTcur!oA8KOK+}fcucfQ$1D%;El1eA6@G6FZ|6+4;+ z{Py0^5H&fdoWVP6{g6}#vPH49k9u62dPrVc02*q;ETHLO3GAS zc!X5}InCNvwT~WOgn7Oa*Du2H(Lcg~FxW5o3uCZa_pL2oaS|YCA^=bDI0X#ZjfFVi zqJ)_p%YVDO2gaw)FsyMib)csp<|j@LeZ|p)EbLgcb?|guYU%C(M?Mdr!+OSaIw6S1 zlHi)A4u*`BIb;|h$%un8jWzfKb#{}lD<<8ctLZAlW%Dv49{AD0*oa6RL=abVVm%$; z+iDt5vY@w!t%*!WWoG>H|H9WDh4g;Z#kfN{CnLIgWV+E!E4uYzVy?T0PhsbZ^?C1+ zn5Bc5nQIF7<|7eif!}MVr=8pK9gl0nIjOM5&$*M^*H=tSbM$OFVb2B#1F3IvutC!* zza13)YyT*`99{oR)(gt)$M42sOFSHy`GInPCxg+rXg1KC<2}z#5dH6t92rp&M_rEc z>@R%!71)Mf*fKS2UrhY?##~~2(Yt>i3mnsXK_IVMT;=fhf(smk;M;)b{BY#D>mymZ zK6jt!wi@#j3cZ|?Ix2U$FCU*s>A+}V?s+M?@r740OVE_yvwFtAjzO1M*!+j*%OfpK zvs3UPs9!Y*3FJ7Pd=TG@9epnLK8K>(d=-iWxO6i;z5cP7D4_y(2a~CLp~QoP9~|&y zirV9U+6x@cn)^jJpp#6&yZZ0c_it5Fmc_vLAqOCJ{=MKkPo+LvEY-WRCu@)IjdN^fjk8YnS|V1bE?_Z4oK6x02zG)sqgWv5th zV`Ar|b5eM?dSZ@)nNexJ36XG+?yJ(ZF`gg`tG+gx%3CU zc8NPXF@A8A)Va{s*m{HIp|Xd7Ut2Y!CNIrlr?v&>ci zf=ei9Z_o=~$%y-u4oS20zp!br!s44l2@Ve>8*78s>~iTDoUxarw;Z=fPD@Up5xy5r zlfXvxUE*Poq|vl9X;)QtYpEKSIyo3CGCtDI4zM@YRNWsv7}nHx%B^Af#xoY)mvFX( zSq1Lhmdh`nMNn!KW%LAejH^cioSOmY6%{)faMQytmKlOb=sf}U!azq@p+Hd#Q%WQ; zZ14OP#&afK`V5;`x3zk4az?@r6g2aczNk!b&Km?mIjc;oLs0DCLx10oGGA)#u#>7m zwQTJ%k69kW_=M5Z!K2vNGI|+zv>JD05~hl?rS;=TTmb>Wadd9jS748ON4vk&K5*Ui z+5MNZ^}kgAyQM%=*NOCI4^moq_w$b!wG7Wdh*@a4_QSqE ze2{U8J?^P<(1YN|+d6-vBSv=~5h^YIxuomAV&Lnn*uhJpVmIfaF&uGNFc2Yq#nYi@`KN)b8??;0Z7lM7rNVjBDgQSHSG<1HX^tsUh_Vz&X4qs?fr9ZQ1Sq8 zmLEBR(r#cEpxbv$kJFfniL)G6#_D~Pme-j)9B%GnM0*ms)mhs0PGi}Nas6BuC)QmC z6HBE{dA{W^I>%>5KcUum^P&ASF|0f+-BUy5;Ks8h^#GLdkOq_^;UD<&yf-la$(G?c zKeHN~50ZG6Ism;uOuV9C4`RxBkLkHSG=*WvHSOxVN}ju)%|o7f9R`u~f(k3pAYl-! zuaSv4!V|C*!Ji(=fV$uEabi*r_qT3z_Mh{scaH`Vv9_h()(5&A^2*O95qIBfQdaptJ*sLX<5EFEs(L@{AA#Rvga)8o?^6M)kG}gO(JzuXGz(uv z0@!jh9u1mNC8P=8CJ8-7f#a&$Ky)Cwp?Aobm^K%G<~SFuSb}_V>~CoOFL*nH7(trN z>91*ospH9Bbzi7nc+7~@0BXd}^xxCM!^uEln(y;b5^YRU!WVr$BgY1>883S%P&C41 z!vue;)jh+)MJ<=bqly*DwQU&`D0t;%mI6FVfw5pbjKJrLZh0Wx$Br^Jo!A~8?EJ>^<%4^s|==DbWZV3>(B(*#rCJq zJ2K5(YmgRdX^ zqNOkfAj9?XPO&TE4;gGX8hx%EFK|E`$Nsa@z*=N}Bt_5zronte#wu@z)%(wf2*Y&M zIT-M51UHQ9JM4s+Sdou{|LfT>a1(}*CiHU<(MO{Z_&9=b+cwIIbW!-qGoOC3l2#;P ztuYCM%9y)_2r3BWrK3{S?LbXT-;C=jN6Q1Vx+!GYOi#kjNyBiv4Z;%G+3HeirbDtL z@`yI%V4RO=+WQM+b|3pTw*{vxZs4@8VadbqDBdnLEODcTBL5C&e2!Ce%KO~g;u$Nj z(azr|>unQ!0Lk0HFS0A)N>jPke62L=YmGVP%m3c%Nczm=UGOgr@s~5~{BJF(kMI1k zWm(p|T<*1I=Z?Nz$J3Jq+uz*YNyy*sbxi!`=gtN2;IS`~9ji%mmT{*4Sqfm+5d>Se zKGivIlNF(Umb>5EFzmi{z7>+OFtMWxyJs4m^DPlbc3SfbUB8}Cn^9@_U|CZuYE|uV zw2vBsrw3<`=Eq~*l~d>{BrDk7tP+7P@~Dx6hp^5GSgtNe(c%^c!=&b<_bpe( z$9i(?HwLDNHx~Mfkw!2}uD6hn`F>D6sr_}#ea^jJg3EM4!7iS*g3%tP9GjSW_|z*+ z#H8D-P?9`8x%I)tapfnYfb92AkjJF=6%WS=No}M*zn3OkuRrR^4+zkmx*lcw6lqk2 z-D5$UIr1;-MZTpTYT|sIy+jSdZf-e}bu&jEulCbx8|*o5ARz%t(WPQ2aCQJ8d&BaW z>7XjDFVcuoUJdfv+VH{<&QpPIXeN4G1p|H0?w@+x;tB!a#Idtn z^>;T_(B=AjxA7G(hWuW;5B}cX?+ie3JsE`h3H{h#=`HWQEC_}t&x2JH5BM}M$0V20 z0O3^6#RXVG0))g5`AXXbKOsx$3~it))i8qWCO}B@#RE1ZaN|jH<$T>&pW-P8(Qd)s zPkfMU&NQ!*S{*sQ4X^qAF?#=09r|hI`;B(>Cm}orwe6!+iGTU2le{|mmb&3-2-&54 zg%oK2iJU-xL8PJ^X>Y*~W-{3BzMJ%$$^2yc%8dBmmUD&EIPDUUr6(uJS>Gc_3nRyR z)8g+Vg%P~9Bun{pnxhiqxO&2*d024roBYz6l#1|2`QVZ83F)iHv==L~Sq^R?B{!)X zvBM`-C)$%|sxM@CCNB=N6rywVs1CGn*SD5?!5bmVkGJIRiq8jpbAx?y?s=o)h#Fcw zmNl)>2~MF>#c_~NVv<^WZ*#xIB9w@{Yh3RlA9;c(=;m`mpRj={veA`T*_fj^c&G%zG}pa1ou~;@5x?t1w^g6kS($nfR$%p z5qo;6i73@rVN|#oZAW2Lak2B2!QW`lJURv^XVUDgZ=P6PGY@R3SS)^L)?)-(ru%FE zcD^5!<;i(Z)w^#F$?_R5mpz~IsSH~73KN!rtlK06Vt+d6;2v}%l++$>JHI1tm3a_b zM{tX14c$65kW{iaJ%f4$?e@7<;v5^ik4=GVZn<_IDC_1fYR!Qtip&XF#pI>ITzesx z9Y#rEGbn)wJG+lv+r($vL`s7VI@;h8)5z^3ENsebNC5yXIh@Pz}l_ z*1FSvB?tFcpa)ihf=a0PqenGx=a|S2H#a{%yK@el0}WY+eI6Q(kli#jPF2 zF5hfOUhICIKzyf39^}00OxYvf)gJ9L|E(*4SGuOYxLoC2H~;2Hj)jS8?{^rE4<9j0eX~NVkxj^>3`XB;?+{scC+)@#=&;oINF~KfgmRGr*ke z-H|GYoXIC!fnCZJ=rp{8V}`B^Y(<9m0y!yb?l+Uln(zAC@oEaMNf%dQ6@stTZnjcF zySwhsmfd9E{5VxJosPhbQ{@xIGvso84px8{3u?GvOZ!Zxhc|lSD7~{S$ZMT=oXDYR z?xeoX4#wpSUQS8iEO0z)GBWJlO!acL@DIuKmUWU}KKsj`4|7AB4d&JTQzidHc zZR+m5C6+dJ3saEFLdzE|6ydATDISX{7d`}UGdsuPPt z4lpLt|J;^`y{!Xp9!HR4?=N=^0yw4rh`){FQF&EW>cbswNe4>~S-$W$Iott@1Z}-6 z$3B^kTwmvfdQO7(F21U_0b(!kdrJ7(G#-uiTGuHm5YGp{ByOeugFr`yQ&O_~os?7M z7$OjL5rFPF81%#^v7CyX4pNpUEQOsqxB$1g3av#Nl5L!s69) zJi*jAN3p^L?BpW1yi56OSetsxXKf@d%N_jys;q8#$+~M1?Irs+um_fa#-iIa+mIdG zVHu|x*~gU_3DkRi&))6tdv+tL=f(bfGI*1ByB^#fK*l=2mEwsvx+SN+Y<4UQU_@7$ za@6bwOP*WB!^-xxJ(+?BFDF5ZThYi0lO@BM-nmic#ZH|BJM3B8eNon~p33Fky~m=@G> zk+b(!Wus2yqQlZ_0Ew)ss_+yf2{o>XJjC)56%7FTxz&faM9FvOJ=}O!BBJ(4uwmKJ z#?x_m-Jb7%(%EQKg4`UHbRuYG-Lv?nQ--T=Ha*v~jt07?{PhCQt-16!@r_U6V{)CCVh`Fz5a_cm}0X_Qu%;0ZwBpMFc{Dyao1?T%kjvV^v zy`=x81Po0%R{Wun1{^F6Hw4Do8A;7V%p~vEOy14pJaG(iWq$feB8NTyTGhmF*%y{q zVN{&~Mhc2!8DFefhHVCEyI*DBXa@_`9smcU|IAC#q`zlC)F)=z8+iE5K%a%& zu#oi(vaj)hW#W)#*x*D}+4%W)fF@}F6$Q|9^DLIpb6s~5q%k<1cmKM8fpikcs$x&% zcL9|~vzvM)N(J8rrgtatZs(?h3lCYA9~m{$(s(0%e8K%Bo)e4@31 zBfyTr0XCHfCtF4qR+a$Q2H<(G?d{Pn;k>gk6`tGFles`wB5Bf~TP!EZtz+h-uc`=9 zm%9l4Ch;s##Tu3-fibW`5^Dd7Mj(#?yr`F6-}n(iEmjhABKDnjgsP(lD$34YG{y>o z;KBSZ&=qym(;=*~n%A`rW!jj*l)=H=ZFkEnt@{p9-_VnD0!m_ldH+E7ngpn>O=@y| zu~N4PB)se=&8QzrDT|`mqehN7(JM7!4lGMr>iz7dGzo&7{S_8OQ~N<*N)A&0{<1j~ z*7seMQq$$s#>%l!#>QzsJ~*h*Uw2N7vnlcEvyq|M#l{{qMS#s3pT1LEKKBYrEOb;& zivOa&8+=g#ajSflY?CB7m{0XqmuNR%^G+l#%V-Vll8%Hd38?~{#MA2_giu+OYmr-}Jp$Ld*!og8Ep zwO^Qj&6BC%a2-0{nVj7s^?zOfxrUmUM)zfy)~_;?u2(we!JYT65+T*Mt-dUFEQql7 zTzbfBX5J-oCfsgUJ0w;LYdz)6f;)uIqbr?!Z~Ej3{gd+jI=m{Ne#S zOs$SIo!}$@nLz`k0=7-cuKLd;e%s^i%fe(^In4-O)MVaS{=>!H$Xx0z z4sD`l^0q`}o4z^}_SrHL)oTE$K0ZS~B-Hhn^azp~9-Tn)X48Tf^-Pn;@1ZF=Egt|>Xe&$UGdbY!4Tq^o;V)e8U0{S03^xFZuq6uM9 zm7*GDH!eOj#uIBm8oD!SJTpd`nT|klwR=NYQsLH}Ss1PvXi{qxIyYhu@C3Ta?ph}) z9k9%%n)~?>xUrz7TWG`IqSG?;4V4H;$Dv>cKsxDv6Q=avo=#Js8%I;~0#)>s5>Chl z4}52sy2T=f=RK_mNuJ&Ui)R@)AUzvKaZeDFrwmn9Zr?h4JQ@|=st$qCYni>@$lLYu&GEjjp2p-KdJd zTKI>TyH{uNprEAtqp$0vH!nmt?`+(Ri8PQYIS`3k{kfJ+C8@WtR}?17V{NHe%FytY zb{yYg`44*dt%GUp)4FjKe$1s!@}&)_uvF#_O-}i>f2S$BA0xt60u0pMnEWn96MkUN zd2=;)k6iSLXalMrAE^-e9iKU?cteci`)>b}Vu5!Ouq`!Moy(tW)Y10G$)E;y))6aT z=_U^UUJ+!Z0uS9dAk`&VPXY~#6#}@6z7W(J@X9>>$uQcFZTK*UR1M~8{aq2GBp}Lu z03^x3+k1k+09{L+ee#qU40L9iT9DAf38A(quEA>VSI(i*C>ga+@P_6!HYEk_tvo`s z+iXNw#4+LVPli0tsq6}BfCL0bG6%q93Tn6oQ2IoKGq(t|7ugBj%lN7#7PJ8Tk89Lyn?Pg^C?rwaoZ(QAqDF+_{ zRtGRA(dGnhew!{SYkN4lZRfv&{bI%zWlk2w60owBly_Kwf6D-I-E21ljyTj0)2*1y zR7FW19+t2fNeQu5VhSP~c%{odMv6C#3odq;VjyxLxC44%q>*F?l@Yng@5GzC(cx;Y zLU^_apl!CKGjBrehJ6r33c+$C#o$DvfIwXX3!=Ih{&IIIJ&Td%!Vope0QWVi!gJuD z4M>}tKgs3pdEM&sVmt5s&Sv>)iQ`m=R3}49{v;6xZ;4})o}*oht5hYf_h)~htb$2* z>zotehX%;7+24x&b>vJJk*^IN^JxODdU%TQoZ+18&rt+XZ{u^Ov13!NHLg{XN$+8%AgvD%9jICt$ej^UOhmVannTSz?n=pY{Ck>D6okQ92n5!v1w7gL-lIrq0)wsm zm9G-%YmDqk%FVb-u2}PMxl}Aj{P{xG4BevKZU*R?<(iI6roo*y}kdT znxmrz2{5D?q^IkW@kSJ&tM`-rZp#$_5bUYMi_mMzg|P=PhgX6G{4f}fT|=2>-p@)R zhISkbHiS#{rNkvSD_P)-32vzX@ej%8D%KJM^wQ4krErMivJ=#{&=|L{f;^Ra&a(M? zA@RyuveBiurFQv#TVF@79M*_(f4E~EPS78Iez~kP;$Xz);1TbPchaX*X+v2)sOxXqPp9!< z9L#Yd_13j~@e|5-K(!E10HgA$3k$HS>KGN*3NoeeR(C8%nOv1nm8jI0Sf4y^~N3 zZtPz;HBC$^jH7DzH_gDJRzd|OC0%A7*cI7?@@&gp1LQWSKs9XF@xt2IrVc9>DzPw4 zCfIv&!*D^|onYYtcU3pECS*on`?KhFW-tC!30sb|tgM|8PPkG@q#XBA7+t*>W5kcu zWpWUnKr}@y+ZgNoP5?B+&%TM<6zW?&(cS$MJ~uCWlEFnmp@6YmjPrW0G~ZQU|X znIu@7OXVDSxO|MAoLI}N$q#uFVr-YAVb2Pt^CE017d zhSbq75?23(aZ@HznVYS3$&1C%kR)H%rGouHLZ7ID0#@+4!l@kC7D(f6%~;nzolohg zqLw9Ym?bX&e@PDeHfEu$2q9qPGgaG7<%Kp12F3fQX(!g*AFHH_ol-n@ZQ9C@Wf< zP^i4e=LwqHrge1CHZ`$#9Rxcv%H<`*hSL5M;++|QhJU{XhB{FR5A1S`oj`^0i@_6m zrw81R)5F=Ri1cGyL8UbmG={5}Xx}0P%p8_$sXV%)-#{WrW(8s$7KE67KjG`xisBA)EFl&>RLH=hLVW zR7b54`+xrmYM^mn!f}|dbqSTG%$Ma*sTQlFLG`~xkvxu`xrwnJQYsT6REY~gL2(?g zRLRIS?MoeGpk9Mi{~r~}a$$2b4cm~Ld%LQK_5MI0e;H6H?7i>)#Vo*~`o)!7QhND% zp;n*g%%bu={~Lq;!zxXhucd_EaAub&Ej0QaZ;-gSxIBD^1p;J?))1sT^C3zGXcL_A zCfS!G9b~2*rH{^|RJ4udnEG^>U3%-39o@Qc;Ll1Sp{;)r=~QD~(+_Z+(ebaSG_6Br z3o3E9v-Rn6JZCfkD!c7wV1qX$dZz5agjKQhs@V$R7z92GVK3gDO%k*6k#)=4!*^*#d%jo<1N(Y~1 z5eBYK@bTbpA&6bPg)5X~9otOH{7(L{#$amf=E; zpe~9a)YPqxt0p`j-m7MR7U{Ud^jVRi7Q38w2L^mL%`Cc2S^0z z$mmad7{a&wb}yomWaZ?SN1@FZtIOjjO6+~#MC_E-Q~Eup?-HdoS&b-1R#QFKc1k@V zW9*6X2sSWcggZ`EmHI2-g+&7it*`Ugno|s^TtcCQ_2d@p+ zRC|qYU9ehs*eu*wKm^84=nz#wrvHf$K#z64ihK5&`1d8T1!0aC8DpUX|AaQn9|E{T zgaXwnVU(IPAJ{Ye{(|9)2Iijf#Fe4ok1wn2NnT9&TRj?Z4{m_crTOLJ%%wv4Et~La zrR_vo)oqTn*Er_ytT-Et5G&aD_e=L{%jLovM$rL2G>QCzNT$Gj`{s=2I6)Ccmb=>E zMg-Kdwo@Io&SVG?dMYTi;hED)>dPt*3@^bEA|}V9U8O3X<`5M4fj(^@eD@2lyB0Mw z*$Y$psTLy9jf@sF!Q&6yviFo$tW|*F^(nIp)(B)SDCojB%f$ncAlFe!-Mf& zQ)yMRXXHZjM-;ycsGomnhtLKqqKOxJSv08@izq4O!8uo?OM%}x^P3zQ{J>dxl;@YP z;{coB^8U)IXVxox?*si)3D>DH+z144ux=QkC}*lt3P5s+d&wVYF0YP?boIH0 z95Wi5M0M_e#Z%e7o3Iyur1SPvxN*UG)(?aPHggV6+VoGf+iDZCc^by%6EmuFzx{G) z0^ssMvo%mma%n~ZM|?966N|3h@fd6Z@Mz8nwL5OIEXQAG#%UqMrXH#jY>=tW`Q2_D z^&J$xG0o&TPIRG~B(c7x4U{-*<}y!v`DG2K4hbWhc9OI-nV;LEuRuWs_urssRg=`D za8KG<`feb(!N!H-kn;${vHGMUK9a5_oQ!Dz7rKVV!xZMk9bS`duvFTljbu3b4}`> z{{jkR4R?`#rqJ*-WKJw;eos(T`<(sG!@Y)nV!q{c^(1)hP&>`V_F2f4)C(Bq?`b(7 z_N0RY*U0&^7klfV8zj~8%^HFnPuNOpDSfczHAcq433OC67 zEeO!Z^mTMJ(dY_+BdGinbwQ922kWj&U}Vx_Dz$pPE-xG0^}16*YnQTJ5=G;^FE4*a zlp9Zpr7z4tX7*2~>7A;Xdbb@#YsQS;@^ie0M#eplE+?*IJjHqqnI@(1X;a%I*})!O zlhQ_fWxY@2y?+mU*zPz!h>8va=q%-zziiQz?Kt5vvHiFz0g83BnOHQg=<2X74F@;~ z63*5Z{`Kp)8htk#{>7aTAOD2)(+#q)=5sOV>W^e~O%2WCrQQ#lvMZ2JituMM-(*jj z&GBY*k_H<8Zppv$OMS(FVfqrU{?_yc!crt@~mR7tK9)mrvzSs9q-y-%Q&v{ydl4NT4-zKe^=>`~w_J<9B`b zUklmX#bPRGGAIvz+idEJb_`ry5diCLAc~+WBOh)FwB>4M=>@L#OJ*qgTGCPZrZm=w z|FzNtn%h5q#RgL9W`BfeNB}7nD9Z(EAGia?SI*980Z$eXWdQ7zh(zm223M;t6p%!P z0cA$^5O%<;f^p!Z5io*#0lA0MfZVpuEr0D{sf6&jhT^}}>4B=0ECehsfVdT>8;#=zJKe-%W+s*eq?R{)HmiX1YiR79mx4glZz@8#Xmami zB#OdN%>$&16wmwj16WX0F+zl`v1977gbCB7WfUPa{>Pm7AHm(}BYq`K;Iy}s}v(HD8 zM&FOI*`j6z4+-?jFqrQ>&NgA0XZ?(f{ZAZ2zW9gam^Qmp$`REczb-C|M{^V-CuXz# zn016&3;94W%nEa1qG=1BsA>TCW%)cW>E+8RbB}KI{xjo(^r8`;!Z_^I*(ndJeXYs6 z?6`X?TML1n@-#x->GRSa#ml>`otH{{+!uVabq(^Rp815sYp3)?eCxrP`{mGmZFa)- zOOel7ad_%JpVr-NJaoz$B9F5Cyht>bpK&x#9T=#a5yoreoFgo38nf1btJr@8besC3 z<5Ytntfh!oehLQ{ow(uG3{h*#U2_|uhyVXa`w+NRVdTN@Gu)^XWI+{#sfm>JYd#50 zpI@w;Ee7T!U%#TF5&V^2ERJWtX^ZF;^NWe6djAKPjNUmGU@4FdiT<{RRv7ts0y(zE zP-#S{bdd{#P^Q+*KVl0YY(Qpkm>+%4VnNO&cIjGtV4@pA+gfkrS;>heWR$kpWYNY6 z+q&?4;qZ1(j%QdXzQpJ1^5~SjXTE0?%DHz8)=3TT^l}CqPsaWq9hQ6jPlV*@gsPi| z4pwF;FTOe|5}>D~t;ww~8mAG5r^LhkW4?})}7 zq?LwI4!D{{vTFP=4RTcqoNBE_5nx%jDYwh9h=Kw=HDvfa18iJ}3jhkp>`xSOdMl%2 znM$Ftz3ETi2D$vDeav?a-|-)pDPbRMk%y$W1!7J>Y=b8W%=)Ce-Sfa)Sv5O6L70?3 z&SM;fmoop8uu}#VgJl2RR0@7n=?@&diq@X#ay<>)d-bP*aE${+J{%|FfPqOq4Z@?e zgjxwyahh>aX~``KS8VfwtEiIza8IW9zuo%nkBPmrb>2XKuAQ~RfhGjE;fx8!4Z0F@ z?;2_XjSWD$A(Ff0EAv+kD1ZD*V$hmmI zFJc3Q-)p_9A#h=FrlQj9fhyzjtf7Sn94hI`(bJ2v!@p3-uzy0!@)ad1@O9Q1Wk;dasENYK|f9C>LssPYrm{D=GT@xsJR znxX|om_6Wr?uT1QoK->Ij6)ycdC;w~ONNcaAu{kS%~CZhnNWL4v3=3YdGP8Toy;yr zi5+(csUn0Wo+whiLlNYC8G}_OqdL-$T)RUW`9^+=?3;IyN3_jP?<@fvNnm(zs4^1{ zr_C%E@~GGP)Sz;y?zC?9{+qs!-rSNokrf-!k?f#G-z+Bx#o5f2IaKhConj_+d=lm> z4xV`@s|6qNPWJSeIb3o$$A9*VG!qilpjSCr9x;6G9jkwE?RWoPdVTu#(kT(Zrgpls zY9cILx9*qnKhLc>l>b)1IEgx7GQN3Dlw4bH*BRB)alD?*=m*Pdd>OrM*}s^&n&8Ro z;3g?dlqs8yT)!&~WM_^rw2fCizgNdX8$5c*{xkiP;=;I_=P|XUUVdTj12$^2$t&`2 z%3mf+L2ZL5&Lk_%oI5RM;B!8B7?G^U?X1w0COBWuEI75ghn?ks4#S>N4h81`d)npI z_5FLI&oAyM25)ImQrp`e+ioXvxSQrwGhL4M71^{)K=@mY&21BvUe3VFYQ4sMp%~^U z!zy)SXbhMYxzu@7Xt%0%q>tl`B(n*`D6ARjD!gt-`n|FhV~EJFwSL}jIh5_U8B655 z>~~TSe(c(ke*ve>Sp2{>@-{;MF;91;_*?0F9%Q<+ZK2X8F)MZp7Z=$U2Ta{kYhNyl z{M9Fhyd<|DmqEI7?K{O~&tzGF6pfUqf!JAM`{(IS_TP#;<`59}LH*R2*{gXj?72I_Mvng82{a>rF@8@X=&AM|hS01Mp zYBni{cqjGA5W>G(GI)9uO0lp1v>>rl<%-VHaPp`DDQRXyHZZ;|3G8#>H~I;BXr#Vd za^!nMkm{rszMo1~>7Y;7C@?LQH6DbL&K4RHE#-^=fv@tL? z_Px*3wFHsQ0yxSAe*kJmtGf4)duPz1`L|1x!^Ccoe2f?#U`PY-FUM_EOv_R+K8@XP zdG!#B$X0_3fIsus$#_m;PrjYEur8ilEnTd71L$iK^#Ueuvqm~&O?JObA`#HTCRy*l z$%Ddy9g<&Z6A6I*CHs;Ctt{w^Vb(FO`?WI}EM{#>rGZv*DFG-!cG3}kM6ntr-K4X# zcKdGcF&V2+bm8EZN(RjiQ}$&z`YPw8{1-84y60J3FjzB^Oz{BQ!lXj*%TL){7&kgZ z5ki|hI%NCaKu{U!uGNK4+p_K$QsOT-(I%S;u{QoiCYxGnO}X@z>7hX(HVtk2x#-j0 zlZ@SRyCD@YlH3j!jX)#~Y&8#_^*(5Pu6cpK2XQ+%T*q=0QU$4q9l(_% zX*^w|43D;i{sm4!)O|i%hjTPH3}o(X`kIBZGE8G%=gSk(qvhIKZ?GgBQN$|x-5 zJ7OWO0yJ>dA&rlCwI$eLz!EuD5w?S~_(p5eG6pqEFSexj?kXU;- zgHlzj6-;aVapea^FE(yyJAMvP*2Ht!z%$|rtDt1SuU=4<{py&>GMi`cu-FM5Y?Fao zqBWMC?=EmCN&ml-4GTe|idx+a8Cf~{&YC-VLvPMP*8stM|CfurB0=)yo8->@0&k!o zVdb?WyW{idGRGm2z@~nWPUMyZjB_)Td+@cJX2#vgl|-VLsg>2r)-f-%n!UMHVlpE7 ztF0u5_e3?f(%1PnstXCZKOZW6KWK)P{k(HD4CP1i;T|7d3ee7LB^)*g%H4Jz@p{k5 zo2WOR1kh7w2)-OXx1)&9e??um8C}kyHE)1Oe1b20^bsR5IL)i~<0IDp((xu{vH#Ay z?&X@9aE4O4WV(GA_`*|X4h2$p`MZFdED-($qVynSl^}#4OFsTkXTl-8Uhe_5ft!$) zH7D)Bc>6g^hur#}i!^Tw;~G7hX*;`uCwO`7>PmW=Pes$7vo8dS_ekfM!XcfG@cR~1 zL=ws@po8&Idp*4dkXCayW;=iw!`7H2o?ZIEAthh-`S~4p7~q7I$DUjkzPEqzoEN*f zz{ypJfTTqqB5p1KtHGYp=hCD+cMe#nf!Vfgnk8Huf-)c=pmXF|dOIb9VFECOYWi<~ z<#-TQIkE}hj?&wodTv&vS}obW<5+6@MhmzTGz@+ueDo7(6r<|%KM>bgVQB15p?B6+n=W>Gn*QWM5s?2dSFDYtn(M58q z_@-hoEq%lqiVh#V+QxIeJ8{l={@m0_f9`>uVBLIBceNu$hVoia!|};xD~qh3(0eU6 z;T29_Mi8_d9#zjGjuCxc+ifeBimwUrntPj6dJbbraf_{p6;)##x{Ro887N{8h#@Cl zN~Os{jt*~P@)r?qw7rM|e8V5UOE{VFFTBM$m1G_UCK=PMw&5TT`O~=c+z8;p6Q>rB}H*^KWn-{^nI7iJhVh-bGRG$ zm5gZO%y~?GhgVpss`w&@u~;!>9?a_dTAa?9c2nlID@a{fpMe}SJSEh@OUM7hH1#Pz zLH}^Hn+i`(aV1nGuPKVWqN*N74v($)Xt2!r@BPaV!#dbpIDgyX^y&80Z$HPe>zP0| zy{UT)HTF@q+-2yMB}AH~uD-x~O&I=vUI32}=JHn^$It@pv+_8pB8VM4xukj1;>P`t z4esjD0;VfMha(?QHC5dRsDy{-YLlVH)SG5tII53>5Y-x)D{}Xd%GQ4pZ zAAcdR$-pkDD&U%LkE|ees_wP_+W%&D^^?^tp`k!~*DZ4G5In#Yy;+k(4%*5JBKU+? zG;uUYV~SC&y?I10h`S){Ei&S1isx(Vi=aN_Uw$UA!jsVxe6D5oLG4Fe3pFU$H9sGp z1G?h>QZir?2Ry#7H4y9iy86lDV>G;*lvCuxlVnc_*4IXEvSn2FbIM_&rDE11>_*nM zd3N{$h3fJP3?2}yHqkh0Q$2k1iOl+4Lkz|v>dQt7I9BD9NQDWw8O_YDYUdMUKhA^_V3K5OGpbswzOxp8&RVc$ z@!ZdK?`!Y_J8uO3p~DbNM2m&Q=+v%Hz7d~XRA-{6aC$N>v&R!`o79utdum7_ zCl~s!#}>=kI+jBMBrR7|Oo?X0ltVId;N3LUQ55hLBG90+2wSr<|JfBWb&Edh5M?-L z{;;y7-tUx_e4#Q@xYKv)1WWpKqV4HM_qOa^zmk2+R_9N+3x-v-mU`NOa_FoE>H?5m z>)(cI!pDEWOGGfvDH|I5EM7auPf9cAvZd*+PM^QNI+N!R|=j z%9QQ(sz0wWr;=r~_(%WoPt*wiPV=IsUM&9wRDG6ZERhML3ELv$U$>J8*H1VYt7aheSr4-{+$bg$4skE>|8=fE2t!PS53; zGi6y&Lbj>riZuf=dpAqnNDFMA%y;;OM-eW82`-(NcmR6+o{W~HLaV>#hPg+0eK!T@ z?=C-i;vq#q#)cr=(-rL>z(w{CiH^~+;?QBg3Nbwk?FU|)S4vwe5icmARoKQRJqse% zL&Ro>=ghX3_lDbeRM6Xi+-_{*A1b&F|8mMR){Dh;v41sGr<%14TzUp) zQJE!$rJ`ja24XL8p98pB-k)rWE_jRu0V@FKj)7#gD~OzjE9WJUFS_+JHc1mFN&F2O zQv&)xzK|1GlX7ta5pA5(0}lyC_$wwZ*{|$ZWN5~YS;<|hx8<(iI)^r`fz3Ri^V!zF zX&sr15&2kA&h~kveQRcqXz4H8i-3c3zY9g#^KF8OrlO>Eo8#1FLSU;01UR33VbYHb z8GFNNlL0#d^4Y*X0ocv|zGk-Azxkl$lWMr&$;$Qs_#jYKbc~+%ODS7B(qufjyS+9m zD|F0>CJ)eK>nM_bRRLYI&=2n;9G2);Ul<;&IRP$&bs|Br7&T7b#R+%1su;((5Ps^ha+#NL z<9@$BCghycF@RD+Y^BcA-BGD8Rt08h*S!yyPl0rFIn80(Hck=D1w+}@~I1RUB zap@GT_y9Xdz67&yJYZCKoFS%lG^H{hR7=RLMF^a+#`>I2g`2wLe@L0P883R&n}Oo}48G?KQFGVq9x5`hY&MmB~7LEk{$X z<+FKt7aMFO-MP!Xrr;UOU8_Wi$&3!#*pBI=M9Lu3VHz)Md>+m>p4h`UXGs{Bc8>bd5^xMI zK|izwQdS(6$aqL*D15As9uRix#|CihAA^5herZx(nmt;)j2*ggZ7vR*#GVa*$M(Ae z^-g5`hxfAYKMh{ICZ`zSZN4)@k5PCx(IfyRcU>}Q7gnu6IydK&(bFY0SyQaDr6D~7 zLW8bKgMI)a|Iyjs7f@RuxC6ZWC(h+!MLyRU&oy9xhqw9lW%J8g0~5+Io;_WBd^URE zE@3Yrkuf8FaBxrt5wDyKBXTm@I6J^@`X0~(E!xh>VR_u5!vqG6m1FC1=!%psaR{fF;!&H`?o_nN}sl?bS3DC5`am#2X5|8Y^foyfz)l8iKlwCZ4!GT z(Q)xZYef*+BXIG}N8tHh@3VgeYqbn@fBKsW&*v~#2fS`*{VQGeASQt&`pbRR|BEwh z8HWEd)Hrgxk=3Z-_S;0@(($d!BW18zWF_&RLxT1A=+0p-BN@Z#3++m5RLmn3S z-0wtEfDJ1lxBJzNF0#QzzLyI66yqm#nF`irPMluJu6G&ihuU5x&12ok$p@(3yo>Z(;t z%(E_6Nx7*V4j8(Y+(>0tRvfO;ytI;yo_gA!Um^Xd*_>0@>qUTdw?qeeN|W&AW+C># zEPT!Xgf#GaY3+wp#KJpTnbd$g|2fY@6L&m50pD-s#1Gg_8&z>Qb2_ODO=cP{en2_o zkL8Fn>=C>~gy}>oTyfilHl&Z_NXH(~n}CxgTZ5@yEou@#6z;TmD1tjOlJJ z|GIvBpe+Ho-L>%rK@>9Q{Ge`%gc|@a5j}W9R(WYd%^p*+3t^-wMF;Ud_9q(SCF6quehYv``?U?=>wpFP=o>1`i`?(Xv827uM%r(`L6e@TVejih42gg- zW|3qb6VKx51J`|Q|1`?bbNhlSfNN!1IWksL@;8~YFvJN&XUquPr#9BD+5cs!RW?Jg zJOaWfkN>Pb>#Jzv+Be}Ea*Lzbf_I0 z!6i0{WgAdWE&CI^%2O=VG;_e5ZL=@Aiz&dNC@T)xB>`*zbh0h4lJ#M%F5v2?-r#OK zg0GE$H;_!-yZ%tA9A{x{@wYS;tKx~0AWL4XRJW&}Vfas?pL{B`3>v!So7**J6(W{2N{?u(QQ)mecQed1 z0-%*_ie;=657oj>Yzxob8vZhxO6a+Hp5U0Q{J2tt(z?Y@-1sp}XXG;m>EYI}IO-7V zavzL#^t5EH|vyq?5&0T%=h z-$%tBx=P4+{mBYK!N;SzeHK-`NaIo1+%3>;zLrUKA{WZE7;2He+m~Zf^ON1Jpy_D- zMLMi*3yJBBsF?)~nH^HxRW=`_!zy))mc)zVVx*orO&JcvHF9cG)@p?k=JM_z-gA=Wy&Y!p$YeBTfTW=?P>A)C9Zj%yQeeSRUFN57vK`fprF?~a2 zgDNsLkh(OX(l?rynJ+pu^*her{WUReR6f*K@0R+KHsD!!xN(MmbGE8(PGt`aeGJ$#!JNH zm%I)Ucu34r4(Or(%xzeI5)7&9$w`6oK(cxv8U75GFqhMkxJ-IV3kU9MSZYYN?7KRB z(ZH8-8omD6jfTR>_s`JN^*PeIrBt!j!Oh)F`Qg1@-v;LbyyxB79Y{QES;emF^;Wxm zV|IPQCi$`EYoGsK{Dk}OBb8S!Gr(BwIqA`qJvayaV3F^#OLkp-1494qh;u&u6OWJM zxPfKr0dLS>gh2(uUeikz{kT1#VAHI6&a~Qji3Q~Ip;dGH{7u|*eC;1R!{PLYyVH++ z?DHE&p8LU_F4BW8)0YD&3&@bD1eR|XIU;y~JTN47*PC-WQybW)95{J^IXWV!7T0wn zd!m(ZK!jc20$&n=KFC6Ej|e*jcI+yt9j|yg9elwZoHxv4wF_;^#su+r;L(O;!%7JO z35Wc~d;JN9FeEWXL!(kvd^Z~qP|6_8tiY!p>yNq5^mTX?VaIpQ{O z{9SM*@$&`z(B~;kBA0}Tl+UJrG?1>g`^LdDZ5%^UKGMRG>|&~s>j(}g%|ruUZH@D~ z6Y%#dxHbk(n4R+x5K1~8`P?JA|7|ewl2O=l88Y(m0mzBbnMjP{`Fs>#m3he zbGJA|srvztB+6>eZ@ZfByX4LMxFlD-tu)Elewn*6s15&IUSnG7>?Ki7P1{HYD<*Be zjBa`}u{BuZ*;)OUv1czG>NyqvXz+U4{SgsO&~6T<`WCr|psT&p!X;lM|JE+(h}%^H2Y^rKhK-o5P;;28b#O zT7XoY|LWWa<~%q|$U)rOvnag4UQbtN4cc`(xVb6JO$jP8cvRLN3~A36CegS#+>lug zxQYBv^9yn5y5+F2UBAJRVG@a#NpzpD^7F7tscvk+JbzDK{+j;Ob(1y(u9NePNJ}#| zCuy}PCsx%v#@Obph*syR36aGihB50|D;=%c4^-Ll34yItmp1t#t4`h zvpykc7ToJjlZc+UK|`_861%Nf5aj_91pOa^RTWAI4n83zrIN6dSTL`#;U6m3XXWJp3eTi_Lj03#vXV1ANR4Qe z)iEB_!Fq4SrT&t~AaTU=5a>!{_R~4K`&#TXu`a_z<0cXxjIB*ya0BIg=ZHKgHxJ@b2vPV?=UW%d@m9wP*4;L(aQ!Qo^*VF;CXSR!`s*3rP*TPt7@cfoG7QCjA8 z5E60tc>Z;4@Z`4)BlFv%)vdj~=LI^z1;PqQ3oz?S!K8Eqqp`dF2U zi1wITTJjSc1^B<)_K6fwmk}!M94H78O*}e;%dbi%XfA()Gl);{nO-S_;9!;Y<~q$gJGrvU;U8I2&m{do8*_ zLxbcSYbZ?f@ME_y&U^|A+#G+Td}`Tys;ffqqHb$by1-1QJ}Q&+WRX&7Dx;N&Tm^@E z>Q1tmH4Ji`nLR6K-auqPUB7kmoqF)rFIr?++#PQUeb3P}k*&Rsp8bJEZANf<_wRW` zX86NiUpM4QZi*s$$3Cq_9DbKJC?9>XxqMxGS|1-ZC6XEvWJi*w1mda~e-+J1g)6p? zw{-gPfx0q!o5fImQs=^tA@>VPXuSu$upJb2a`FS@^FV0Jo}}bX)JixE#3kjrCMOG2 zz+m59T)Q0JdSifoyR~k7Vl+YN7IO;IJeGPrx{jDJlDqHaQn|%1ON1${ZC!>gb{5yb z&sRCTjL9kE5I=I;7UWD-$>;Flg0C_Z-HV7xa~uZN-l;B0r*^JemIjhKTJ-woZN_5m z&Bq@=J8MIr{Hn2-#|6^kT$iV|=&M_Ot}mVlMPS4s;&Lyxk3dl46uk^&A0h@o8sf z?Wi4%4C}3oU@v&8IW2)RUDTZt+6SJtzbLzidp+|2j+B3nEr-*dS~rHhy%DaePai_v zM3-(}_PCKy5KxBPz^>wc!PH{n+?j=QnSgWtpSlv}DuxQt5YDQ4NC+r6d{0zRGgD`kbe* z*5=^_NJgX*L38ZsRRM@vRpgKt^2vt2T4X8&QX(uUw@y>`>X$s>KwQ_opvz+C5}2>w zh~6CbkOSIRz}g9;(+geE2(}nV{8r?w*x~Gs?b2Vbmftc>(J|-n<8Yz5c))8TPT@25 zLBsXa_+#JUp>v?(XRg-f^f}_o&&yTdWc0!_1aC!!lf;P-j1|D!Mh-Reo=MG3OUvs% z0#GmY9qMc63wslb6ss?Ae4q^!4WDO_=YDSzTL{YXoB$SDK9^}#05uUdR+hb6$LJN2 z#2nS~_T=Y>O+1&KpYf;@ibvPAD2tg;6kbqk zlJnaWSs0Q%+nyY(0o3MDm-q)gPJ5}WMamQ4EHt!k>iW3))yNNfI8&mbaxv$(dHb^8 zeYEws<(6AiDKWvatFJ!)rJ|}HAQKJ&E1=PyvH>--^cLcYL=zuo1jES2u4nJFl)=uBa{Y-{)GC|Bks2$3r_#>FK*bS`@LEf%EshTf!tw*(m$ zf=>vho9XDf-IDOR2Oisvo^#h}M9m~r_tEm&nvxRi`YMyAJ%XzJ(Yq&=P)n++Q-@5l zRc5xZ%t{ul#5S-Zw1n{4R;+9#!qG= zY+)`l>M>)rNdG^r*|1bRU;JZcWg-Wj3u%2s+}+yhLP4gek+RW`@qgQ`9c=Xv!d}Y@ zUm~Br#H-{~hJ6g5#WQpy(8R&P(IW`4!r|v({7WEX!Km@v8`DPih35Q&0`r-$Qz&4% z8xNnQmxhP2f-DLjlZH$g9J=b}nSNnr!|^|wNe67Gw?Ou}O96;elTc-GILz4jb^Mo@ z2VAQEy}42;BR0Z>*8GG2)&}A_3UuC{y@=h447x)H_3xWX)Oq!;pjZ@Fw@(@u07l?@ zVo+7X{Vr9OyTc;c{wS?g*AQ*e81Axy{|~Q@?)|w}tYOILLlg&~Tp#YFzxvMrd-3aw zi>QnZqej)791d8bwszxB2Uug3kx7jcZGT~|U z9NjeA(+Z)vU=fMuXn4yS7Cm#qH9hE;Kqcj2(ajL9E|K^UskdxDt`u0{pz)z?!aOb; zU16gZNF;J(X9{LZmZbX{_vU?>L*~PMSD@#O76c0&SN1a05}Txe(FjNwRYI`&+jS*} zr3s%v8&-%cv}wm2>8qYIlu6utUc1|P0f~c%BoSai|Af_jkDy|vs}LD2SCBkqHVG71X@PQ&o(Bl6*>1$`5<}eR}f?v>)BUC+z2$g7i+V)9F1&VjsKTp-E2H?ym1I za)W}mZoZ+W!?!Mjx47f}&kOM76qR$me0`rf4vh3)70yqVN3BfxgNBZ>zaxV%TeY4y z3On@oTw~-yMJIaE0h&095G*$vmXL@%B(-y0gtrzfbxJaatZo`H?1?YKc!aq}2W>TX zT}s>lodMy92wLQ>E7C_=$q`&g-S39{&Ckl&;JgsD?8{xurnz3H5F)$b19go)d#(g& z_hyAWI?(z`6kx12Mm@4_-Lb_BUsK|ZbNfobHf7tF1=St}6ROe6oY!K@L&A&=Ce79K zY?DF@#r~>ry)-J=6vur`%Ik2n)6SEY6YldiAZ+taYi7fJtMzqPjzW?i#W+fqN;$7= zeLSFgcOp)dKptsMZcDGobC*QKiPHcFa#7XP1ka2wOeTk=$KgaGt)C9Plq2Vi;DiJr zhLldWFoEe+9vpoFh+%g>qG8|SET0xeUuKo5xx#NY7D&6|y)Bl1GGuf|QcorzCJnTWf4PSPiOZ%|f(n?Q0{YZQWXlT_9UFL89uRF~8wSq%*f5qtJ$ z$IF!s=@8dronSJjqP5 zzG-68?6Q|YJNf)yZ)iUlH68WhMQZd6Cn*6g3uhJapNAN1)(rMe3zru1<@bG8Gc)2f zg0%&R6&zc!{tcWkM2!<5FN9AYA?GN--7@p=-XkByY5I3fj{YB75>OP1oUYfqRPr~6 z;3;U9F1GygDsbu|Eh5~q)@8AMdL%*0NMG`F9CHpNR<{7T#pf1N$2Yn>aW$C9Q$8^# z26Q7L+ssV(l;FCoRWy!F-F+sIQG=wEaO@ia2hMsGcI0h;$4TD$L=$OS4K4-X8Cd6E zo3mQVe{nkT44VaAVHjP$$2?(Z+h~Dmq5>;Xj^Sr~#HIh<8DU6bW=7{^pN(>00_y*m z$^4e(m$%L~$c*ar3oh9 z1dnZsWw}Z+3ok?^NciYD|B%dvgv2;KxuF{P;THi>_mNN{1Xpun+pX3o7gJYqBxJ){^dzS!C!kJ9Ql%#QC-2OM!(+c8Nztd-_$2FsxQ{TCD$x^QiMYA0b3N@6nnSetw7=Y>LtiR7bOtjOwedM;uIp80jGZ`Z@3!I}$CukDSUrE!jN{-hsLWz z!AZN`mT{5jzp*W2;}1L$hKr-O(Bc}#9q+&ck?6O5N&}XSui8IuQzZf*!t3|RJZ#ja zvIOog)B)Ra1>-Q(xQH!^l@lz8#lhaoi(LM6xO^@cOuK>oP22{T?dRUGA$snkgA>g- zUKp%)Uo}XL*4W0Iu)+h{etsA~4uDBp+tPk{K6qCw?;4%D@h_XQkW+-Hz4`LH)}Vk$ zrWj{1O@Up}=m&g4tPl;?B=80!{bp}x%?M}EuWjPoKElDmSDp)kdWkR*Vg2W-=nxv> z4?MU7MbXSyMX>HCXt_KZ-7TDbCeDoGHMM?(AyH1o2CxQTi)6xz-E8a$PntnLidb=` zTMBI%waMr&^JaCs-ery_m{r>!lvHRZpPX_Ys7k2qydsKx9tY%-D{JhDC*4A(@xIK^ zQ(~Q;pF{PqORRe(rT(kR{B0^w5=HfAiifQ+jer}6J$Bamea`O6YM~=(J4FAJ00TLG zQ`8?BFOiF@{o48!=lX?rX4tUi9u!n;ZFO}s&L_Nc=SeXNr6Gx~TXANyAy&3=5_^V? zW@J9QSxGhwoU5I9g6~7e_a@M{tCZ;NLaEhTu+FLy{%F8@&iX(%et18(X8HQ^fQP5n zK4ScnGbk@C8uVcNym#L1i6SY{ZN=!haOg`T+G{Mt_a&y69i81kJ9V8!_1BV!Xvh9L zpUA&>RZY1_Q^!X-vxQbpY*=fya4VRiatLU-Jut3k19a5Vv(68r4x!8#*xbgedH#YF z&1AX!qU5*FdX`G$`Lnl|N>y4I?}T~GIY}lohvVr^bkMk%b-5 zEMWn(=f8ZUTE+cXCa)-U`rY>z)wf(H+FEa(`ug|~Xcg)><^LH*phsl{NP+(b3Dsx;u^YN~r>}wdyUBVdr zz2u5ao(uW;O9dxDorPOubi7X<24WcsY52V`D4mSHV!!TOsMM5ua^(DP&W0i zki$L?(0ET@iVgPls*c|-^s@U=6Ie~ZU;FnuKNcw&*V5I6T3KOYW@fI74pNA-98Jo6 zftTt$;qBpt=4FG$Q`!6M*uQ-_qwL8l#S;-f-eja&G4=@n9UH` zay5?mg7x>^clF`GKad>fs-4Y1`PMslp?|LE2HE&U?>!Gj&;G-W0p|<^L6GBz8is+{ z@cC5V?Q-LSC-f%#YhI6F84KI!HwIPgoZp)|F;axw?^=em4EF4Fy1j@HLoc-q2uj^>3G^-T zN9J;|d5&H)M?msYh`|J$8NrJ6k1Vx5Ur!l{YN}4$5)loCzt)$w5De zSQaLMSai$W>2PiTP~*U6UA66EVN(LM2CWB8->Cj8&S3GIM!{`{D%Xo5!td#!c4kF- zW&VOFx87~D-%cJJl_Rxt#4??)HB6&T*+idAxdUG@YvGfSbNNc-c>wYBA=-|u2i|0C zD`Hq<#&j0%r{Bx~qWAXZ0M`9==I0BOn_DXaS2fm5h?<`LW*3oc-6~;>mH#VP1DTjx zfv0So^1>)JN-BP9(O1(s_ZZ8sBHME)`xEI6!qOT}5(V|Bh z#s2;CLSvO!>G`AgzS�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�PT{1j`Ok2FG4|Dl9fc^k!I+Z$Ia? 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

Nk0Zv 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 TrA_Aw0)BUI|EE{2>k|2Yik>{> literal 0 HcmV?d00001 diff --git a/build.zig b/build.zig index b4210d8..1015a9e 100644 --- a/build.zig +++ b/build.zig @@ -41,9 +41,10 @@ pub fn build(b: *std.Build) void { const zmath = b.dependency("zmath", .{}); exe.root_module.addImport("zmath", zmath.module("root")); - // zigimg - const zigimg = b.dependency("zigimg", .{}); - exe.root_module.addImport("zigimg", zigimg.module("zigimg")); + // zstbi + const zstbi = b.dependency("zstbi", .{}); + exe.root_module.addImport("zstbi", zstbi.module("root")); + exe.linkLibrary(zstbi.artifact("zstbi")); // --- diff --git a/build.zig.zon b/build.zig.zon index f20f1f2..e6f7f3b 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -5,18 +5,11 @@ .dependencies = .{ .zmath = .{ .path = "libs/zmath" }, + .zstbi = .{ .path = "libs/zstbi" }, .vulkan_zig = .{ .url = "https://github.com/Snektron/vulkan-zig/archive/9f6e6177b1fdb3ed22231d9216a24480e84cfa5e.tar.gz", .hash = "1220f2961df224f7d35dee774b26194b8b937cc252fa8e4023407776c58521d53e38", }, - // .sdl = .{ - // .url = "https://github.com/ikskuh/SDL.zig/archive/9663dc70c19b13afcb4b9f596c928d7b2838e548.tar.gz", - // .hash = "12202141beb92d68ef5088538ff761d5c3ecd2d4e11867c89fbbdcd9f814b8cba8ee", - // }, - .zigimg = .{ - .url = "https://github.com/zigimg/zigimg/archive/d9dbbe22b5f7b5f1f4772169ed93ffeed8e8124d.tar.gz", - .hash = "122013646f7038ecc71ddf8a0d7de346d29a6ec40140af57f838b0a975c69af512b0", - }, }, .paths = .{ diff --git a/libs/zstbi/LICENSE b/libs/zstbi/LICENSE new file mode 100644 index 0000000..3db02da --- /dev/null +++ b/libs/zstbi/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2021 Michal Ziulek +Copyright (c) 2024 zig-gamedev contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/libs/zstbi/README.md b/libs/zstbi/README.md new file mode 100644 index 0000000..aafc2db --- /dev/null +++ b/libs/zstbi/README.md @@ -0,0 +1,93 @@ +# zstbi v0.10.0 - stb image bindings + +## Features + +* Supports Zig memory allocators +* Supports decoding most popular formats +* Supports HDR images +* Supports 8-bits and 16-bits per channel +* Supports image resizing +* Supports image writing (.png, .jpg) + +## Getting started + +Copy `zstbi` to a subdirectory of your project and add the following to your `build.zig.zon` .dependencies: +```zig + .zstbi = .{ .path = "libs/zstbi" }, +``` + +Then in your `build.zig` add: +```zig +pub fn build(b: *std.Build) void { + const exe = b.addExecutable(.{ ... }); + + const zstbi = b.dependency("zstbi", .{}); + exe.root_module.addImport("zstbi", zstbi.module("root")); + exe.linkLibrary(zstbi.artifact("zstbi")); +} +``` +Now in your code you may import and use `zstbi`. + +Init the lib. `zstbi.init()` is cheap and you may call it whenever you need to change memory allocator. Must be called from the main thread. +```zig +const zstbi = @import("zstbi"); + +zstbi.init(allocator); +defer zstbi.deinit(); +``` +```zig +pub const Image = struct { + data: []u8, + width: u32, + height: u32, + num_components: u32, + bytes_per_component: u32, + bytes_per_row: u32, + is_hdr: bool, + ... +``` +```zig +pub fn loadFromFile(pathname: [:0]const u8, forced_num_components: u32) !Image + +pub fn loadFromMemory(data: []const u8, forced_num_components: u32) !Image + +pub fn createEmpty(width: u32, height: u32, num_components: u32, args: struct { + bytes_per_component: u32 = 0, + bytes_per_row: u32 = 0, +}) !Image + +pub fn info(pathname: [:0]const u8) struct { + is_supported: bool, + width: u32, + height: u32, + num_components: u32, +} + +pub fn resize(image: *const Image, new_width: u32, new_height: u32) Image + +pub fn writeToFile( + image: *const Image, + filename: [:0]const u8, + image_format: ImageWriteFormat, +) ImageWriteError!void + +pub fn writeToFn( + image: *const Image, + write_fn: *const fn (ctx: ?*anyopaque, data: ?*anyopaque, size: c_int) callconv(.C) void, + context: ?*anyopaque, + image_format: ImageWriteFormat, +) ImageWriteError!void +``` +```zig +var image = try zstbi.Image.loadFromFile("data/image.png", forced_num_components); +defer image.deinit(); + +const new_resized_image = image.resize(1024, 1024); +``` +Misc functions: +```zig +pub fn isHdr(filename: [:0]const u8) bool +pub fn is16bit(filename: [:0]const u8) bool + +pub fn setFlipVerticallyOnLoad(should_flip: bool) void +``` diff --git a/libs/zstbi/build.zig b/libs/zstbi/build.zig new file mode 100644 index 0000000..87372e2 --- /dev/null +++ b/libs/zstbi/build.zig @@ -0,0 +1,52 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const optimize = b.standardOptimizeOption(.{}); + const target = b.standardTargetOptions(.{}); + + _ = b.addModule("root", .{ + .root_source_file = b.path("src/zstbi.zig"), + }); + + const zstbi_lib = b.addStaticLibrary(.{ + .name = "zstbi", + .target = target, + .optimize = optimize, + }); + zstbi_lib.addIncludePath(b.path("libs/stbi")); + if (optimize == .Debug) { + // TODO: Workaround for Zig bug. + zstbi_lib.addCSourceFile(.{ + .file = b.path("src/zstbi.c"), + .flags = &.{ + "-std=c99", + "-fno-sanitize=undefined", + "-g", + "-O0", + }, + }); + } else { + zstbi_lib.addCSourceFile(.{ + .file = b.path("src/zstbi.c"), + .flags = &.{ + "-std=c99", + "-fno-sanitize=undefined", + }, + }); + } + zstbi_lib.linkLibC(); + b.installArtifact(zstbi_lib); + + const test_step = b.step("test", "Run zstbi tests"); + + const tests = b.addTest(.{ + .name = "zstbi-tests", + .root_source_file = b.path("src/zstbi.zig"), + .target = target, + .optimize = optimize, + }); + tests.linkLibrary(zstbi_lib); + b.installArtifact(tests); + + test_step.dependOn(&b.addRunArtifact(tests).step); +} diff --git a/libs/zstbi/build.zig.zon b/libs/zstbi/build.zig.zon new file mode 100644 index 0000000..73463fb --- /dev/null +++ b/libs/zstbi/build.zig.zon @@ -0,0 +1,11 @@ +.{ + .name = "zstbi", + .version = "0.10.0", + .paths = .{ + "build.zig", + "build.zig.zon", + "libs", + "src", + "README.md", + }, +} diff --git a/libs/zstbi/libs/stbi/stb_image.h b/libs/zstbi/libs/stbi/stb_image.h new file mode 100644 index 0000000..5e807a0 --- /dev/null +++ b/libs/zstbi/libs/stbi/stb_image.h @@ -0,0 +1,7987 @@ +/* stb_image - v2.28 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes + 2.26 (2020-07-13) many minor fixes + 2.25 (2020-02-02) fix warnings + 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically + 2.23 (2019-08-11) fix clang static analysis warning + 2.22 (2019-03-04) gif fixes, fix warnings + 2.21 (2019-02-25) fix typo in comment + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes + 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet JPGs) + Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski + Phil Jordan Dave Moore Roy Eltham + Hayaki Saito Nathan Reed Won Chun + Luke Graham Johan Duparc Nick Verigakis the Horde3D community + Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Eugene Golushkov Laurent Gomila Cort Stratton github:snagar + Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex + Cass Everitt Ryamond Barbiero github:grim210 + Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw + Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus + Josh Tobin Neil Bickford Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko github:mosra + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and fill it. + 80% of merge conflicts on stb PRs are due to people adding their name at the end + of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data); +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy-to-use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the existing +// interface; if you attempt to load an HDR file, it will be automatically remapped +// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit (char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#if defined(_MSC_VER) || defined(__SYMBIAN32__) +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + int ch; + fseek((FILE*) user, n, SEEK_CUR); + ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user) || ferror((FILE *) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum +{ + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL +STBI_THREAD_LOCAL +#endif +const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX/b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__addsizes_valid(a*b*c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a*b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a*b*c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two signed shorts is valid, 0 on overflow. +static int stbi__mul2shorts_valid(short a, short b) +{ + if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); + #else + STBI_NOTUSED(bpc); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); + #endif + + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp, ri); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *) stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); + if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h>>1); row++) { + stbi_uc *row0 = bytes + row*bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *) result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *) result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f,x,y,comp,req_comp); + fclose(f); + return result; +} + + +#endif //!STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_mem(&s,buffer,len); + + result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s,f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; + #else + STBI_NOTUSED(f); + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; + #endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) { + for (j=0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc) (i+1); + if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); + } + } + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if(c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i=0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + while (x == 255) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) return 1; + m = stbi__get_marker(j); + } + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i=0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i=0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s],s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static const int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = +{ + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 +}; +static const stbi_uc stbi__zdefault_distance[32] = +{ + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n*bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior; + int filter = *raw++; + + if (filter > 4) + return stbi__err("invalid filter","Corrupt PNG"); + + if (depth < 8) { + if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); + cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k=0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes+1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1)*filter_bytes; + #define STBI__CASE(f) \ + case f: \ + for (k=0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: memcpy(cur, raw, nk); break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; + } + #undef STBI__CASE + raw += nk; + } else { + STBI_ASSERT(img_n+1 == out_n); + #define STBI__CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ + for (k=0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; + } + #undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + stride*j; // start at the beginning of the row again + for (i=0; i < x; ++i,cur+=output_bytes) { + cur[filter_bytes+1] = 255; + } + } + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k=x*img_n; k >= 2; k-=2, ++in) { + *cur++ = scale * ((*in >> 4) ); + *cur++ = scale * ((*in ) & 0x0f); + } + if (k > 0) *cur++ = scale * ((*in >> 4) ); + } else if (depth == 2) { + for (k=x*img_n; k >= 4; k-=4, ++in) { + *cur++ = scale * ((*in >> 6) ); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in ) & 0x03); + } + if (k > 0) *cur++ = scale * ((*in >> 6) ); + if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k=x*img_n; k >= 8; k-=8, ++in) { + *cur++ = scale * ((*in >> 7) ); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in ) & 0x01); + } + if (k > 0) *cur++ = scale * ((*in >> 7) ); + if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride*j; + if (img_n == 1) { + for (q=x-1; q >= 0; --q) { + cur[q*2+1] = 255; + cur[q*2+0] = cur[q]; + } + } else { + STBI_ASSERT(img_n == 3); + for (q=x-1; q >= 0; --q) { + cur[q*4+3] = 255; + cur[q*4+2] = cur[q*3+2]; + cur[q*4+1] = cur[q*3+1]; + cur[q*4+0] = cur[q*3+0]; + } + } + } + } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16*)cur; + + for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { + *cur16 = (cur[0] << 8) | cur[1]; + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, + a->out + (j*x+i)*out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *) 1; +} + + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256*4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind( s ); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc) init_code; + g->codes[init_code].suffix = (stbi_uc) init_code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *) stbi__malloc(4 * pcount); + g->background = (stbi_uc *) stbi__malloc(4 * pcount); + g->history = (stbi_uc *) stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy( g->background, g->out, 4 * g->w * g->h ); + } + + // clear my history; + memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind( s ); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind( s ); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained,dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind( s); + return 0; + } + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, s->img_n, req_comp, s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + } + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + if((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if(*x == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) +{ + #ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; + #endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/libs/zstbi/libs/stbi/stb_image_resize.h b/libs/zstbi/libs/stbi/stb_image_resize.h new file mode 100644 index 0000000..c8a2567 --- /dev/null +++ b/libs/zstbi/libs/stbi/stb_image_resize.h @@ -0,0 +1,2634 @@ +/* stb_image_resize - v0.97 - public domain image resizing + by Jorge L Rodriguez (@VinoBS) - 2014 + http://github.com/nothings/stb + + Written with emphasis on usability, portability, and efficiency. (No + SIMD or threads, so it be easily outperformed by libs that use those.) + Only scaling and translation is supported, no rotations or shears. + Easy API downsamples w/Mitchell filter, upsamples w/cubic interpolation. + + COMPILING & LINKING + In one C/C++ file that #includes this file, do this: + #define STB_IMAGE_RESIZE_IMPLEMENTATION + before the #include. That will create the implementation in that file. + + QUICKSTART + stbir_resize_uint8( input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, num_channels) + stbir_resize_float(...) + stbir_resize_uint8_srgb( input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, + num_channels , alpha_chan , 0) + stbir_resize_uint8_srgb_edgemode( + input_pixels , in_w , in_h , 0, + output_pixels, out_w, out_h, 0, + num_channels , alpha_chan , 0, STBIR_EDGE_CLAMP) + // WRAP/REFLECT/ZERO + + FULL API + See the "header file" section of the source for API documentation. + + ADDITIONAL DOCUMENTATION + + SRGB & FLOATING POINT REPRESENTATION + The sRGB functions presume IEEE floating point. If you do not have + IEEE floating point, define STBIR_NON_IEEE_FLOAT. This will use + a slower implementation. + + MEMORY ALLOCATION + The resize functions here perform a single memory allocation using + malloc. To control the memory allocation, before the #include that + triggers the implementation, do: + + #define STBIR_MALLOC(size,context) ... + #define STBIR_FREE(ptr,context) ... + + Each resize function makes exactly one call to malloc/free, so to use + temp memory, store the temp memory in the context and return that. + + ASSERT + Define STBIR_ASSERT(boolval) to override assert() and not use assert.h + + OPTIMIZATION + Define STBIR_SATURATE_INT to compute clamp values in-range using + integer operations instead of float operations. This may be faster + on some platforms. + + DEFAULT FILTERS + For functions which don't provide explicit control over what filters + to use, you can change the compile-time defaults with + + #define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_something + #define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_something + + See stbir_filter in the header-file section for the list of filters. + + NEW FILTERS + A number of 1D filter kernels are used. For a list of + supported filters see the stbir_filter enum. To add a new filter, + write a filter function and add it to stbir__filter_info_table. + + PROGRESS + For interactive use with slow resize operations, you can install + a progress-report callback: + + #define STBIR_PROGRESS_REPORT(val) some_func(val) + + The parameter val is a float which goes from 0 to 1 as progress is made. + + For example: + + static void my_progress_report(float progress); + #define STBIR_PROGRESS_REPORT(val) my_progress_report(val) + + #define STB_IMAGE_RESIZE_IMPLEMENTATION + #include "stb_image_resize.h" + + static void my_progress_report(float progress) + { + printf("Progress: %f%%\n", progress*100); + } + + MAX CHANNELS + If your image has more than 64 channels, define STBIR_MAX_CHANNELS + to the max you'll have. + + ALPHA CHANNEL + Most of the resizing functions provide the ability to control how + the alpha channel of an image is processed. The important things + to know about this: + + 1. The best mathematically-behaved version of alpha to use is + called "premultiplied alpha", in which the other color channels + have had the alpha value multiplied in. If you use premultiplied + alpha, linear filtering (such as image resampling done by this + library, or performed in texture units on GPUs) does the "right + thing". While premultiplied alpha is standard in the movie CGI + industry, it is still uncommon in the videogame/real-time world. + + If you linearly filter non-premultiplied alpha, strange effects + occur. (For example, the 50/50 average of 99% transparent bright green + and 1% transparent black produces 50% transparent dark green when + non-premultiplied, whereas premultiplied it produces 50% + transparent near-black. The former introduces green energy + that doesn't exist in the source image.) + + 2. Artists should not edit premultiplied-alpha images; artists + want non-premultiplied alpha images. Thus, art tools generally output + non-premultiplied alpha images. + + 3. You will get best results in most cases by converting images + to premultiplied alpha before processing them mathematically. + + 4. If you pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, the + resizer does not do anything special for the alpha channel; + it is resampled identically to other channels. This produces + the correct results for premultiplied-alpha images, but produces + less-than-ideal results for non-premultiplied-alpha images. + + 5. If you do not pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, + then the resizer weights the contribution of input pixels + based on their alpha values, or, equivalently, it multiplies + the alpha value into the color channels, resamples, then divides + by the resultant alpha value. Input pixels which have alpha=0 do + not contribute at all to output pixels unless _all_ of the input + pixels affecting that output pixel have alpha=0, in which case + the result for that pixel is the same as it would be without + STBIR_FLAG_ALPHA_PREMULTIPLIED. However, this is only true for + input images in integer formats. For input images in float format, + input pixels with alpha=0 have no effect, and output pixels + which have alpha=0 will be 0 in all channels. (For float images, + you can manually achieve the same result by adding a tiny epsilon + value to the alpha channel of every image, and then subtracting + or clamping it at the end.) + + 6. You can suppress the behavior described in #5 and make + all-0-alpha pixels have 0 in all channels by #defining + STBIR_NO_ALPHA_EPSILON. + + 7. You can separately control whether the alpha channel is + interpreted as linear or affected by the colorspace. By default + it is linear; you almost never want to apply the colorspace. + (For example, graphics hardware does not apply sRGB conversion + to the alpha channel.) + + CONTRIBUTORS + Jorge L Rodriguez: Implementation + Sean Barrett: API design, optimizations + Aras Pranckevicius: bugfix + Nathan Reed: warning fixes + + REVISIONS + 0.97 (2020-02-02) fixed warning + 0.96 (2019-03-04) fixed warnings + 0.95 (2017-07-23) fixed warnings + 0.94 (2017-03-18) fixed warnings + 0.93 (2017-03-03) fixed bug with certain combinations of heights + 0.92 (2017-01-02) fix integer overflow on large (>2GB) images + 0.91 (2016-04-02) fix warnings; fix handling of subpixel regions + 0.90 (2014-09-17) first released version + + LICENSE + See end of file for license information. + + TODO + Don't decode all of the image data when only processing a partial tile + Don't use full-width decode buffers when only processing a partial tile + When processing wide images, break processing into tiles so data fits in L1 cache + Installable filters? + Resize that respects alpha test coverage + (Reference code: FloatImage::alphaTestCoverage and FloatImage::scaleAlphaToCoverage: + https://code.google.com/p/nvidia-texture-tools/source/browse/trunk/src/nvimage/FloatImage.cpp ) +*/ + +#ifndef STBIR_INCLUDE_STB_IMAGE_RESIZE_H +#define STBIR_INCLUDE_STB_IMAGE_RESIZE_H + +#ifdef _MSC_VER +typedef unsigned char stbir_uint8; +typedef unsigned short stbir_uint16; +typedef unsigned int stbir_uint32; +#else +#include +typedef uint8_t stbir_uint8; +typedef uint16_t stbir_uint16; +typedef uint32_t stbir_uint32; +#endif + +#ifndef STBIRDEF +#ifdef STB_IMAGE_RESIZE_STATIC +#define STBIRDEF static +#else +#ifdef __cplusplus +#define STBIRDEF extern "C" +#else +#define STBIRDEF extern +#endif +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// Easy-to-use API: +// +// * "input pixels" points to an array of image data with 'num_channels' channels (e.g. RGB=3, RGBA=4) +// * input_w is input image width (x-axis), input_h is input image height (y-axis) +// * stride is the offset between successive rows of image data in memory, in bytes. you can +// specify 0 to mean packed continuously in memory +// * alpha channel is treated identically to other channels. +// * colorspace is linear or sRGB as specified by function name +// * returned result is 1 for success or 0 in case of an error. +// #define STBIR_ASSERT() to trigger an assert on parameter validation errors. +// * Memory required grows approximately linearly with input and output size, but with +// discontinuities at input_w == output_w and input_h == output_h. +// * These functions use a "default" resampling filter defined at compile time. To change the filter, +// you can change the compile-time defaults by #defining STBIR_DEFAULT_FILTER_UPSAMPLE +// and STBIR_DEFAULT_FILTER_DOWNSAMPLE, or you can use the medium-complexity API. + +STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels); + +STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels); + + +// The following functions interpret image data as gamma-corrected sRGB. +// Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel, +// or otherwise provide the index of the alpha channel. Flags value +// of 0 will probably do the right thing if you're not sure what +// the flags mean. + +#define STBIR_ALPHA_CHANNEL_NONE -1 + +// Set this flag if your texture has premultiplied alpha. Otherwise, stbir will +// use alpha-weighted resampling (effectively premultiplying, resampling, +// then unpremultiplying). +#define STBIR_FLAG_ALPHA_PREMULTIPLIED (1 << 0) +// The specified alpha channel should be handled as gamma-corrected value even +// when doing sRGB operations. +#define STBIR_FLAG_ALPHA_USES_COLORSPACE (1 << 1) + +STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags); + + +typedef enum +{ + STBIR_EDGE_CLAMP = 1, + STBIR_EDGE_REFLECT = 2, + STBIR_EDGE_WRAP = 3, + STBIR_EDGE_ZERO = 4, +} stbir_edge; + +// This function adds the ability to specify how requests to sample off the edge of the image are handled. +STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode); + +////////////////////////////////////////////////////////////////////////////// +// +// Medium-complexity API +// +// This extends the easy-to-use API as follows: +// +// * Alpha-channel can be processed separately +// * If alpha_channel is not STBIR_ALPHA_CHANNEL_NONE +// * Alpha channel will not be gamma corrected (unless flags&STBIR_FLAG_GAMMA_CORRECT) +// * Filters will be weighted by alpha channel (unless flags&STBIR_FLAG_ALPHA_PREMULTIPLIED) +// * Filter can be selected explicitly +// * uint16 image type +// * sRGB colorspace available for all types +// * context parameter for passing to STBIR_MALLOC + +typedef enum +{ + STBIR_FILTER_DEFAULT = 0, // use same filter type that easy-to-use API chooses + STBIR_FILTER_BOX = 1, // A trapezoid w/1-pixel wide ramps, same result as box for integer scale ratios + STBIR_FILTER_TRIANGLE = 2, // On upsampling, produces same results as bilinear texture filtering + STBIR_FILTER_CUBICBSPLINE = 3, // The cubic b-spline (aka Mitchell-Netrevalli with B=1,C=0), gaussian-esque + STBIR_FILTER_CATMULLROM = 4, // An interpolating cubic spline + STBIR_FILTER_MITCHELL = 5, // Mitchell-Netrevalli filter with B=1/3, C=1/3 +} stbir_filter; + +typedef enum +{ + STBIR_COLORSPACE_LINEAR, + STBIR_COLORSPACE_SRGB, + + STBIR_MAX_COLORSPACES, +} stbir_colorspace; + +// The following functions are all identical except for the type of the image data + +STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + +STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + +STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context); + + + +////////////////////////////////////////////////////////////////////////////// +// +// Full-complexity API +// +// This extends the medium API as follows: +// +// * uint32 image type +// * not typesafe +// * separate filter types for each axis +// * separate edge modes for each axis +// * can specify scale explicitly for subpixel correctness +// * can specify image source tile using texture coordinates + +typedef enum +{ + STBIR_TYPE_UINT8 , + STBIR_TYPE_UINT16, + STBIR_TYPE_UINT32, + STBIR_TYPE_FLOAT , + + STBIR_MAX_TYPES +} stbir_datatype; + +STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context); + +STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float x_scale, float y_scale, + float x_offset, float y_offset); + +STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float s0, float t0, float s1, float t1); +// (s0, t0) & (s1, t1) are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use. + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBIR_INCLUDE_STB_IMAGE_RESIZE_H + + + + + +#ifdef STB_IMAGE_RESIZE_IMPLEMENTATION + +#ifndef STBIR_ASSERT +#include +#define STBIR_ASSERT(x) assert(x) +#endif + +// For memset +#include + +#include + +#ifndef STBIR_MALLOC +#include +// use comma operator to evaluate c, to avoid "unused parameter" warnings +#define STBIR_MALLOC(size,c) ((void)(c), malloc(size)) +#define STBIR_FREE(ptr,c) ((void)(c), free(ptr)) +#endif + +#ifndef _MSC_VER +#ifdef __cplusplus +#define stbir__inline inline +#else +#define stbir__inline +#endif +#else +#define stbir__inline __forceinline +#endif + + +// should produce compiler error if size is wrong +typedef unsigned char stbir__validate_uint32[sizeof(stbir_uint32) == 4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBIR__NOTUSED(v) (void)(v) +#else +#define STBIR__NOTUSED(v) (void)sizeof(v) +#endif + +#define STBIR__ARRAY_SIZE(a) (sizeof((a))/sizeof((a)[0])) + +#ifndef STBIR_DEFAULT_FILTER_UPSAMPLE +#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM +#endif + +#ifndef STBIR_DEFAULT_FILTER_DOWNSAMPLE +#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL +#endif + +#ifndef STBIR_PROGRESS_REPORT +#define STBIR_PROGRESS_REPORT(float_0_to_1) +#endif + +#ifndef STBIR_MAX_CHANNELS +#define STBIR_MAX_CHANNELS 64 +#endif + +#if STBIR_MAX_CHANNELS > 65536 +#error "Too many channels; STBIR_MAX_CHANNELS must be no more than 65536." +// because we store the indices in 16-bit variables +#endif + +// This value is added to alpha just before premultiplication to avoid +// zeroing out color values. It is equivalent to 2^-80. If you don't want +// that behavior (it may interfere if you have floating point images with +// very small alpha values) then you can define STBIR_NO_ALPHA_EPSILON to +// disable it. +#ifndef STBIR_ALPHA_EPSILON +#define STBIR_ALPHA_EPSILON ((float)1 / (1 << 20) / (1 << 20) / (1 << 20) / (1 << 20)) +#endif + + + +#ifdef _MSC_VER +#define STBIR__UNUSED_PARAM(v) (void)(v) +#else +#define STBIR__UNUSED_PARAM(v) (void)sizeof(v) +#endif + +// must match stbir_datatype +static unsigned char stbir__type_size[] = { + 1, // STBIR_TYPE_UINT8 + 2, // STBIR_TYPE_UINT16 + 4, // STBIR_TYPE_UINT32 + 4, // STBIR_TYPE_FLOAT +}; + +// Kernel function centered at 0 +typedef float (stbir__kernel_fn)(float x, float scale); +typedef float (stbir__support_fn)(float scale); + +typedef struct +{ + stbir__kernel_fn* kernel; + stbir__support_fn* support; +} stbir__filter_info; + +// When upsampling, the contributors are which source pixels contribute. +// When downsampling, the contributors are which destination pixels are contributed to. +typedef struct +{ + int n0; // First contributing pixel + int n1; // Last contributing pixel +} stbir__contributors; + +typedef struct +{ + const void* input_data; + int input_w; + int input_h; + int input_stride_bytes; + + void* output_data; + int output_w; + int output_h; + int output_stride_bytes; + + float s0, t0, s1, t1; + + float horizontal_shift; // Units: output pixels + float vertical_shift; // Units: output pixels + float horizontal_scale; + float vertical_scale; + + int channels; + int alpha_channel; + stbir_uint32 flags; + stbir_datatype type; + stbir_filter horizontal_filter; + stbir_filter vertical_filter; + stbir_edge edge_horizontal; + stbir_edge edge_vertical; + stbir_colorspace colorspace; + + stbir__contributors* horizontal_contributors; + float* horizontal_coefficients; + + stbir__contributors* vertical_contributors; + float* vertical_coefficients; + + int decode_buffer_pixels; + float* decode_buffer; + + float* horizontal_buffer; + + // cache these because ceil/floor are inexplicably showing up in profile + int horizontal_coefficient_width; + int vertical_coefficient_width; + int horizontal_filter_pixel_width; + int vertical_filter_pixel_width; + int horizontal_filter_pixel_margin; + int vertical_filter_pixel_margin; + int horizontal_num_contributors; + int vertical_num_contributors; + + int ring_buffer_length_bytes; // The length of an individual entry in the ring buffer. The total number of ring buffers is stbir__get_filter_pixel_width(filter) + int ring_buffer_num_entries; // Total number of entries in the ring buffer. + int ring_buffer_first_scanline; + int ring_buffer_last_scanline; + int ring_buffer_begin_index; // first_scanline is at this index in the ring buffer + float* ring_buffer; + + float* encode_buffer; // A temporary buffer to store floats so we don't lose precision while we do multiply-adds. + + int horizontal_contributors_size; + int horizontal_coefficients_size; + int vertical_contributors_size; + int vertical_coefficients_size; + int decode_buffer_size; + int horizontal_buffer_size; + int ring_buffer_size; + int encode_buffer_size; +} stbir__info; + + +static const float stbir__max_uint8_as_float = 255.0f; +static const float stbir__max_uint16_as_float = 65535.0f; +static const double stbir__max_uint32_as_float = 4294967295.0; + + +static stbir__inline int stbir__min(int a, int b) +{ + return a < b ? a : b; +} + +static stbir__inline float stbir__saturate(float x) +{ + if (x < 0) + return 0; + + if (x > 1) + return 1; + + return x; +} + +#ifdef STBIR_SATURATE_INT +static stbir__inline stbir_uint8 stbir__saturate8(int x) +{ + if ((unsigned int) x <= 255) + return x; + + if (x < 0) + return 0; + + return 255; +} + +static stbir__inline stbir_uint16 stbir__saturate16(int x) +{ + if ((unsigned int) x <= 65535) + return x; + + if (x < 0) + return 0; + + return 65535; +} +#endif + +static float stbir__srgb_uchar_to_linear_float[256] = { + 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, 0.002428f, 0.002732f, 0.003035f, + 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f, + 0.008023f, 0.008568f, 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, 0.014444f, + 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, 0.021219f, 0.022174f, 0.023153f, 0.024158f, + 0.025187f, 0.026241f, 0.027321f, 0.028426f, 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f, + 0.038204f, 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, 0.051269f, 0.052861f, + 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f, + 0.074214f, 0.076185f, 0.078187f, 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f, + 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, 0.116971f, 0.119538f, 0.122139f, + 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f, + 0.155926f, 0.158961f, 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, 0.187821f, + 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, 0.215861f, 0.219526f, 0.223228f, 0.226966f, + 0.230740f, 0.234551f, 0.238398f, 0.242281f, 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f, + 0.274677f, 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, 0.313989f, 0.318547f, + 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f, + 0.376262f, 0.381326f, 0.386430f, 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f, + 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, 0.479320f, 0.485150f, 0.491021f, + 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f, + 0.564712f, 0.571125f, 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, 0.630757f, + 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, 0.686685f, 0.693872f, 0.701102f, 0.708376f, + 0.715694f, 0.723055f, 0.730461f, 0.737911f, 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f, + 0.799103f, 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, 0.871367f, 0.879622f, + 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, + 0.982251f, 0.991102f, 1.0f +}; + +static float stbir__srgb_to_linear(float f) +{ + if (f <= 0.04045f) + return f / 12.92f; + else + return (float)pow((f + 0.055f) / 1.055f, 2.4f); +} + +static float stbir__linear_to_srgb(float f) +{ + if (f <= 0.0031308f) + return f * 12.92f; + else + return 1.055f * (float)pow(f, 1 / 2.4f) - 0.055f; +} + +#ifndef STBIR_NON_IEEE_FLOAT +// From https://gist.github.com/rygorous/2203834 + +typedef union +{ + stbir_uint32 u; + float f; +} stbir__FP32; + +static const stbir_uint32 fp32_to_srgb8_tab4[104] = { + 0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d, 0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d, + 0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a, 0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a, + 0x010e0033, 0x01280033, 0x01410033, 0x015b0033, 0x01750033, 0x018f0033, 0x01a80033, 0x01c20033, + 0x01dc0067, 0x020f0067, 0x02430067, 0x02760067, 0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067, + 0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce, 0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5, + 0x06970158, 0x07420142, 0x07e30130, 0x087b0120, 0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2, + 0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180, 0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143, + 0x11070264, 0x1238023e, 0x1357021d, 0x14660201, 0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af, + 0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad, 0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240, + 0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392, 0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300, + 0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5, 0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401, + 0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559, + 0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723, +}; + +static stbir_uint8 stbir__linear_to_srgb_uchar(float in) +{ + static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps + static const stbir__FP32 minval = { (127-13) << 23 }; + stbir_uint32 tab,bias,scale,t; + stbir__FP32 f; + + // Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively. + // The tests are carefully written so that NaNs map to 0, same as in the reference + // implementation. + if (!(in > minval.f)) // written this way to catch NaNs + in = minval.f; + if (in > almostone.f) + in = almostone.f; + + // Do the table lookup and unpack bias, scale + f.f = in; + tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20]; + bias = (tab >> 16) << 9; + scale = tab & 0xffff; + + // Grab next-highest mantissa bits and perform linear interpolation + t = (f.u >> 12) & 0xff; + return (unsigned char) ((bias + scale*t) >> 16); +} + +#else +// sRGB transition values, scaled by 1<<28 +static int stbir__srgb_offset_to_linear_scaled[256] = +{ + 0, 40738, 122216, 203693, 285170, 366648, 448125, 529603, + 611080, 692557, 774035, 855852, 942009, 1033024, 1128971, 1229926, + 1335959, 1447142, 1563542, 1685229, 1812268, 1944725, 2082664, 2226148, + 2375238, 2529996, 2690481, 2856753, 3028870, 3206888, 3390865, 3580856, + 3776916, 3979100, 4187460, 4402049, 4622919, 4850123, 5083710, 5323731, + 5570236, 5823273, 6082892, 6349140, 6622065, 6901714, 7188133, 7481369, + 7781466, 8088471, 8402427, 8723380, 9051372, 9386448, 9728650, 10078021, + 10434603, 10798439, 11169569, 11548036, 11933879, 12327139, 12727857, 13136073, + 13551826, 13975156, 14406100, 14844697, 15290987, 15745007, 16206795, 16676389, + 17153826, 17639142, 18132374, 18633560, 19142734, 19659934, 20185196, 20718552, + 21260042, 21809696, 22367554, 22933648, 23508010, 24090680, 24681686, 25281066, + 25888850, 26505076, 27129772, 27762974, 28404716, 29055026, 29713942, 30381490, + 31057708, 31742624, 32436272, 33138682, 33849884, 34569912, 35298800, 36036568, + 36783260, 37538896, 38303512, 39077136, 39859796, 40651528, 41452360, 42262316, + 43081432, 43909732, 44747252, 45594016, 46450052, 47315392, 48190064, 49074096, + 49967516, 50870356, 51782636, 52704392, 53635648, 54576432, 55526772, 56486700, + 57456236, 58435408, 59424248, 60422780, 61431036, 62449032, 63476804, 64514376, + 65561776, 66619028, 67686160, 68763192, 69850160, 70947088, 72053992, 73170912, + 74297864, 75434880, 76581976, 77739184, 78906536, 80084040, 81271736, 82469648, + 83677792, 84896192, 86124888, 87363888, 88613232, 89872928, 91143016, 92423512, + 93714432, 95015816, 96327688, 97650056, 98982952, 100326408, 101680440, 103045072, + 104420320, 105806224, 107202800, 108610064, 110028048, 111456776, 112896264, 114346544, + 115807632, 117279552, 118762328, 120255976, 121760536, 123276016, 124802440, 126339832, + 127888216, 129447616, 131018048, 132599544, 134192112, 135795792, 137410592, 139036528, + 140673648, 142321952, 143981456, 145652208, 147334208, 149027488, 150732064, 152447968, + 154175200, 155913792, 157663776, 159425168, 161197984, 162982240, 164777968, 166585184, + 168403904, 170234160, 172075968, 173929344, 175794320, 177670896, 179559120, 181458992, + 183370528, 185293776, 187228736, 189175424, 191133888, 193104112, 195086128, 197079968, + 199085648, 201103184, 203132592, 205173888, 207227120, 209292272, 211369392, 213458480, + 215559568, 217672656, 219797792, 221934976, 224084240, 226245600, 228419056, 230604656, + 232802400, 235012320, 237234432, 239468736, 241715280, 243974080, 246245120, 248528464, + 250824112, 253132064, 255452368, 257785040, 260130080, 262487520, 264857376, 267239664, +}; + +static stbir_uint8 stbir__linear_to_srgb_uchar(float f) +{ + int x = (int) (f * (1 << 28)); // has headroom so you don't need to clamp + int v = 0; + int i; + + // Refine the guess with a short binary search. + i = v + 128; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 64; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 32; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 16; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 8; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 4; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 2; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + i = v + 1; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; + + return (stbir_uint8) v; +} +#endif + +static float stbir__filter_trapezoid(float x, float scale) +{ + float halfscale = scale / 2; + float t = 0.5f + halfscale; + STBIR_ASSERT(scale <= 1); + + x = (float)fabs(x); + + if (x >= t) + return 0; + else + { + float r = 0.5f - halfscale; + if (x <= r) + return 1; + else + return (t - x) / scale; + } +} + +static float stbir__support_trapezoid(float scale) +{ + STBIR_ASSERT(scale <= 1); + return 0.5f + scale / 2; +} + +static float stbir__filter_triangle(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x <= 1.0f) + return 1 - x; + else + return 0; +} + +static float stbir__filter_cubic(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return (4 + x*x*(3*x - 6))/6; + else if (x < 2.0f) + return (8 + x*(-12 + x*(6 - x)))/6; + + return (0.0f); +} + +static float stbir__filter_catmullrom(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return 1 - x*x*(2.5f - 1.5f*x); + else if (x < 2.0f) + return 2 - x*(4 + x*(0.5f*x - 2.5f)); + + return (0.0f); +} + +static float stbir__filter_mitchell(float x, float s) +{ + STBIR__UNUSED_PARAM(s); + + x = (float)fabs(x); + + if (x < 1.0f) + return (16 + x*x*(21 * x - 36))/18; + else if (x < 2.0f) + return (32 + x*(-60 + x*(36 - 7*x)))/18; + + return (0.0f); +} + +static float stbir__support_zero(float s) +{ + STBIR__UNUSED_PARAM(s); + return 0; +} + +static float stbir__support_one(float s) +{ + STBIR__UNUSED_PARAM(s); + return 1; +} + +static float stbir__support_two(float s) +{ + STBIR__UNUSED_PARAM(s); + return 2; +} + +static stbir__filter_info stbir__filter_info_table[] = { + { NULL, stbir__support_zero }, + { stbir__filter_trapezoid, stbir__support_trapezoid }, + { stbir__filter_triangle, stbir__support_one }, + { stbir__filter_cubic, stbir__support_two }, + { stbir__filter_catmullrom, stbir__support_two }, + { stbir__filter_mitchell, stbir__support_two }, +}; + +stbir__inline static int stbir__use_upsampling(float ratio) +{ + return ratio > 1; +} + +stbir__inline static int stbir__use_width_upsampling(stbir__info* stbir_info) +{ + return stbir__use_upsampling(stbir_info->horizontal_scale); +} + +stbir__inline static int stbir__use_height_upsampling(stbir__info* stbir_info) +{ + return stbir__use_upsampling(stbir_info->vertical_scale); +} + +// This is the maximum number of input samples that can affect an output sample +// with the given filter +static int stbir__get_filter_pixel_width(stbir_filter filter, float scale) +{ + STBIR_ASSERT(filter != 0); + STBIR_ASSERT(filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + + if (stbir__use_upsampling(scale)) + return (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2); + else + return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2 / scale); +} + +// This is how much to expand buffers to account for filters seeking outside +// the image boundaries. +static int stbir__get_filter_pixel_margin(stbir_filter filter, float scale) +{ + return stbir__get_filter_pixel_width(filter, scale) / 2; +} + +static int stbir__get_coefficient_width(stbir_filter filter, float scale) +{ + if (stbir__use_upsampling(scale)) + return (int)ceil(stbir__filter_info_table[filter].support(1 / scale) * 2); + else + return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2); +} + +static int stbir__get_contributors(float scale, stbir_filter filter, int input_size, int output_size) +{ + if (stbir__use_upsampling(scale)) + return output_size; + else + return (input_size + stbir__get_filter_pixel_margin(filter, scale) * 2); +} + +static int stbir__get_total_horizontal_coefficients(stbir__info* info) +{ + return info->horizontal_num_contributors + * stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); +} + +static int stbir__get_total_vertical_coefficients(stbir__info* info) +{ + return info->vertical_num_contributors + * stbir__get_coefficient_width (info->vertical_filter, info->vertical_scale); +} + +static stbir__contributors* stbir__get_contributor(stbir__contributors* contributors, int n) +{ + return &contributors[n]; +} + +// For perf reasons this code is duplicated in stbir__resample_horizontal_upsample/downsample, +// if you change it here change it there too. +static float* stbir__get_coefficient(float* coefficients, stbir_filter filter, float scale, int n, int c) +{ + int width = stbir__get_coefficient_width(filter, scale); + return &coefficients[width*n + c]; +} + +static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max) +{ + switch (edge) + { + case STBIR_EDGE_ZERO: + return 0; // we'll decode the wrong pixel here, and then overwrite with 0s later + + case STBIR_EDGE_CLAMP: + if (n < 0) + return 0; + + if (n >= max) + return max - 1; + + return n; // NOTREACHED + + case STBIR_EDGE_REFLECT: + { + if (n < 0) + { + if (n < max) + return -n; + else + return max - 1; + } + + if (n >= max) + { + int max2 = max * 2; + if (n >= max2) + return 0; + else + return max2 - n - 1; + } + + return n; // NOTREACHED + } + + case STBIR_EDGE_WRAP: + if (n >= 0) + return (n % max); + else + { + int m = (-n) % max; + + if (m != 0) + m = max - m; + + return (m); + } + // NOTREACHED + + default: + STBIR_ASSERT(!"Unimplemented edge type"); + return 0; + } +} + +stbir__inline static int stbir__edge_wrap(stbir_edge edge, int n, int max) +{ + // avoid per-pixel switch + if (n >= 0 && n < max) + return n; + return stbir__edge_wrap_slow(edge, n, max); +} + +// What input pixels contribute to this output pixel? +static void stbir__calculate_sample_range_upsample(int n, float out_filter_radius, float scale_ratio, float out_shift, int* in_first_pixel, int* in_last_pixel, float* in_center_of_out) +{ + float out_pixel_center = (float)n + 0.5f; + float out_pixel_influence_lowerbound = out_pixel_center - out_filter_radius; + float out_pixel_influence_upperbound = out_pixel_center + out_filter_radius; + + float in_pixel_influence_lowerbound = (out_pixel_influence_lowerbound + out_shift) / scale_ratio; + float in_pixel_influence_upperbound = (out_pixel_influence_upperbound + out_shift) / scale_ratio; + + *in_center_of_out = (out_pixel_center + out_shift) / scale_ratio; + *in_first_pixel = (int)(floor(in_pixel_influence_lowerbound + 0.5)); + *in_last_pixel = (int)(floor(in_pixel_influence_upperbound - 0.5)); +} + +// What output pixels does this input pixel contribute to? +static void stbir__calculate_sample_range_downsample(int n, float in_pixels_radius, float scale_ratio, float out_shift, int* out_first_pixel, int* out_last_pixel, float* out_center_of_in) +{ + float in_pixel_center = (float)n + 0.5f; + float in_pixel_influence_lowerbound = in_pixel_center - in_pixels_radius; + float in_pixel_influence_upperbound = in_pixel_center + in_pixels_radius; + + float out_pixel_influence_lowerbound = in_pixel_influence_lowerbound * scale_ratio - out_shift; + float out_pixel_influence_upperbound = in_pixel_influence_upperbound * scale_ratio - out_shift; + + *out_center_of_in = in_pixel_center * scale_ratio - out_shift; + *out_first_pixel = (int)(floor(out_pixel_influence_lowerbound + 0.5)); + *out_last_pixel = (int)(floor(out_pixel_influence_upperbound - 0.5)); +} + +static void stbir__calculate_coefficients_upsample(stbir_filter filter, float scale, int in_first_pixel, int in_last_pixel, float in_center_of_out, stbir__contributors* contributor, float* coefficient_group) +{ + int i; + float total_filter = 0; + float filter_scale; + + STBIR_ASSERT(in_last_pixel - in_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. + + contributor->n0 = in_first_pixel; + contributor->n1 = in_last_pixel; + + STBIR_ASSERT(contributor->n1 >= contributor->n0); + + for (i = 0; i <= in_last_pixel - in_first_pixel; i++) + { + float in_pixel_center = (float)(i + in_first_pixel) + 0.5f; + coefficient_group[i] = stbir__filter_info_table[filter].kernel(in_center_of_out - in_pixel_center, 1 / scale); + + // If the coefficient is zero, skip it. (Don't do the <0 check here, we want the influence of those outside pixels.) + if (i == 0 && !coefficient_group[i]) + { + contributor->n0 = ++in_first_pixel; + i--; + continue; + } + + total_filter += coefficient_group[i]; + } + + // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. + // It would be true in exact math but is at best approximately true in floating-point math, + // and it would not make sense to try and put actual bounds on this here because it depends + // on the image aspect ratio which can get pretty extreme. + //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(in_last_pixel + 1) + 0.5f - in_center_of_out, 1/scale) == 0); + + STBIR_ASSERT(total_filter > 0.9); + STBIR_ASSERT(total_filter < 1.1f); // Make sure it's not way off. + + // Make sure the sum of all coefficients is 1. + filter_scale = 1 / total_filter; + + for (i = 0; i <= in_last_pixel - in_first_pixel; i++) + coefficient_group[i] *= filter_scale; + + for (i = in_last_pixel - in_first_pixel; i >= 0; i--) + { + if (coefficient_group[i]) + break; + + // This line has no weight. We can skip it. + contributor->n1 = contributor->n0 + i - 1; + } +} + +static void stbir__calculate_coefficients_downsample(stbir_filter filter, float scale_ratio, int out_first_pixel, int out_last_pixel, float out_center_of_in, stbir__contributors* contributor, float* coefficient_group) +{ + int i; + + STBIR_ASSERT(out_last_pixel - out_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(scale_ratio) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. + + contributor->n0 = out_first_pixel; + contributor->n1 = out_last_pixel; + + STBIR_ASSERT(contributor->n1 >= contributor->n0); + + for (i = 0; i <= out_last_pixel - out_first_pixel; i++) + { + float out_pixel_center = (float)(i + out_first_pixel) + 0.5f; + float x = out_pixel_center - out_center_of_in; + coefficient_group[i] = stbir__filter_info_table[filter].kernel(x, scale_ratio) * scale_ratio; + } + + // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. + // It would be true in exact math but is at best approximately true in floating-point math, + // and it would not make sense to try and put actual bounds on this here because it depends + // on the image aspect ratio which can get pretty extreme. + //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(out_last_pixel + 1) + 0.5f - out_center_of_in, scale_ratio) == 0); + + for (i = out_last_pixel - out_first_pixel; i >= 0; i--) + { + if (coefficient_group[i]) + break; + + // This line has no weight. We can skip it. + contributor->n1 = contributor->n0 + i - 1; + } +} + +static void stbir__normalize_downsample_coefficients(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, int input_size, int output_size) +{ + int num_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); + int num_coefficients = stbir__get_coefficient_width(filter, scale_ratio); + int i, j; + int skip; + + for (i = 0; i < output_size; i++) + { + float scale; + float total = 0; + + for (j = 0; j < num_contributors; j++) + { + if (i >= contributors[j].n0 && i <= contributors[j].n1) + { + float coefficient = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0); + total += coefficient; + } + else if (i < contributors[j].n0) + break; + } + + STBIR_ASSERT(total > 0.9f); + STBIR_ASSERT(total < 1.1f); + + scale = 1 / total; + + for (j = 0; j < num_contributors; j++) + { + if (i >= contributors[j].n0 && i <= contributors[j].n1) + *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0) *= scale; + else if (i < contributors[j].n0) + break; + } + } + + // Optimize: Skip zero coefficients and contributions outside of image bounds. + // Do this after normalizing because normalization depends on the n0/n1 values. + for (j = 0; j < num_contributors; j++) + { + int range, max, width; + + skip = 0; + while (*stbir__get_coefficient(coefficients, filter, scale_ratio, j, skip) == 0) + skip++; + + contributors[j].n0 += skip; + + while (contributors[j].n0 < 0) + { + contributors[j].n0++; + skip++; + } + + range = contributors[j].n1 - contributors[j].n0 + 1; + max = stbir__min(num_coefficients, range); + + width = stbir__get_coefficient_width(filter, scale_ratio); + for (i = 0; i < max; i++) + { + if (i + skip >= width) + break; + + *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i) = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i + skip); + } + + continue; + } + + // Using min to avoid writing into invalid pixels. + for (i = 0; i < num_contributors; i++) + contributors[i].n1 = stbir__min(contributors[i].n1, output_size - 1); +} + +// Each scan line uses the same kernel values so we should calculate the kernel +// values once and then we can use them for every scan line. +static void stbir__calculate_filters(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, float shift, int input_size, int output_size) +{ + int n; + int total_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); + + if (stbir__use_upsampling(scale_ratio)) + { + float out_pixels_radius = stbir__filter_info_table[filter].support(1 / scale_ratio) * scale_ratio; + + // Looping through out pixels + for (n = 0; n < total_contributors; n++) + { + float in_center_of_out; // Center of the current out pixel in the in pixel space + int in_first_pixel, in_last_pixel; + + stbir__calculate_sample_range_upsample(n, out_pixels_radius, scale_ratio, shift, &in_first_pixel, &in_last_pixel, &in_center_of_out); + + stbir__calculate_coefficients_upsample(filter, scale_ratio, in_first_pixel, in_last_pixel, in_center_of_out, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); + } + } + else + { + float in_pixels_radius = stbir__filter_info_table[filter].support(scale_ratio) / scale_ratio; + + // Looping through in pixels + for (n = 0; n < total_contributors; n++) + { + float out_center_of_in; // Center of the current out pixel in the in pixel space + int out_first_pixel, out_last_pixel; + int n_adjusted = n - stbir__get_filter_pixel_margin(filter, scale_ratio); + + stbir__calculate_sample_range_downsample(n_adjusted, in_pixels_radius, scale_ratio, shift, &out_first_pixel, &out_last_pixel, &out_center_of_in); + + stbir__calculate_coefficients_downsample(filter, scale_ratio, out_first_pixel, out_last_pixel, out_center_of_in, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); + } + + stbir__normalize_downsample_coefficients(contributors, coefficients, filter, scale_ratio, input_size, output_size); + } +} + +static float* stbir__get_decode_buffer(stbir__info* stbir_info) +{ + // The 0 index of the decode buffer starts after the margin. This makes + // it okay to use negative indexes on the decode buffer. + return &stbir_info->decode_buffer[stbir_info->horizontal_filter_pixel_margin * stbir_info->channels]; +} + +#define STBIR__DECODE(type, colorspace) ((int)(type) * (STBIR_MAX_COLORSPACES) + (int)(colorspace)) + +static void stbir__decode_scanline(stbir__info* stbir_info, int n) +{ + int c; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int input_w = stbir_info->input_w; + size_t input_stride_bytes = stbir_info->input_stride_bytes; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir_edge edge_horizontal = stbir_info->edge_horizontal; + stbir_edge edge_vertical = stbir_info->edge_vertical; + size_t in_buffer_row_offset = stbir__edge_wrap(edge_vertical, n, stbir_info->input_h) * input_stride_bytes; + const void* input_data = (char *) stbir_info->input_data + in_buffer_row_offset; + int max_x = input_w + stbir_info->horizontal_filter_pixel_margin; + int decode = STBIR__DECODE(type, colorspace); + + int x = -stbir_info->horizontal_filter_pixel_margin; + + // special handling for STBIR_EDGE_ZERO because it needs to return an item that doesn't appear in the input, + // and we want to avoid paying overhead on every pixel if not STBIR_EDGE_ZERO + if (edge_vertical == STBIR_EDGE_ZERO && (n < 0 || n >= stbir_info->input_h)) + { + for (; x < max_x; x++) + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + return; + } + + switch (decode) + { + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((float)((const unsigned char*)input_data)[input_pixel_index + c]) / stbir__max_uint8_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_uchar_to_linear_float[((const unsigned char*)input_data)[input_pixel_index + c]]; + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned char*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint8_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned short*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint16_as_float; + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear((float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float)); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = ((const float*)input_data)[input_pixel_index + c]; + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): + for (; x < max_x; x++) + { + int decode_pixel_index = x * channels; + int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; + for (c = 0; c < channels; c++) + decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((const float*)input_data)[input_pixel_index + c]); + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + decode_buffer[decode_pixel_index + alpha_channel] = ((const float*)input_data)[input_pixel_index + alpha_channel]; + } + + break; + + default: + STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); + break; + } + + if (!(stbir_info->flags & STBIR_FLAG_ALPHA_PREMULTIPLIED)) + { + for (x = -stbir_info->horizontal_filter_pixel_margin; x < max_x; x++) + { + int decode_pixel_index = x * channels; + + // If the alpha value is 0 it will clobber the color values. Make sure it's not. + float alpha = decode_buffer[decode_pixel_index + alpha_channel]; +#ifndef STBIR_NO_ALPHA_EPSILON + if (stbir_info->type != STBIR_TYPE_FLOAT) { + alpha += STBIR_ALPHA_EPSILON; + decode_buffer[decode_pixel_index + alpha_channel] = alpha; + } +#endif + for (c = 0; c < channels; c++) + { + if (c == alpha_channel) + continue; + + decode_buffer[decode_pixel_index + c] *= alpha; + } + } + } + + if (edge_horizontal == STBIR_EDGE_ZERO) + { + for (x = -stbir_info->horizontal_filter_pixel_margin; x < 0; x++) + { + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + } + for (x = input_w; x < max_x; x++) + { + for (c = 0; c < channels; c++) + decode_buffer[x*channels + c] = 0; + } + } +} + +static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length) +{ + return &ring_buffer[index * ring_buffer_length]; +} + +static float* stbir__add_empty_ring_buffer_entry(stbir__info* stbir_info, int n) +{ + int ring_buffer_index; + float* ring_buffer; + + stbir_info->ring_buffer_last_scanline = n; + + if (stbir_info->ring_buffer_begin_index < 0) + { + ring_buffer_index = stbir_info->ring_buffer_begin_index = 0; + stbir_info->ring_buffer_first_scanline = n; + } + else + { + ring_buffer_index = (stbir_info->ring_buffer_begin_index + (stbir_info->ring_buffer_last_scanline - stbir_info->ring_buffer_first_scanline)) % stbir_info->ring_buffer_num_entries; + STBIR_ASSERT(ring_buffer_index != stbir_info->ring_buffer_begin_index); + } + + ring_buffer = stbir__get_ring_buffer_entry(stbir_info->ring_buffer, ring_buffer_index, stbir_info->ring_buffer_length_bytes / sizeof(float)); + memset(ring_buffer, 0, stbir_info->ring_buffer_length_bytes); + + return ring_buffer; +} + + +static void stbir__resample_horizontal_upsample(stbir__info* stbir_info, float* output_buffer) +{ + int x, k; + int output_w = stbir_info->output_w; + int channels = stbir_info->channels; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; + float* horizontal_coefficients = stbir_info->horizontal_coefficients; + int coefficient_width = stbir_info->horizontal_coefficient_width; + + for (x = 0; x < output_w; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int out_pixel_index = x * channels; + int coefficient_group = coefficient_width * x; + int coefficient_counter = 0; + + STBIR_ASSERT(n1 >= n0); + STBIR_ASSERT(n0 >= -stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n1 >= -stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n0 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); + STBIR_ASSERT(n1 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); + + switch (channels) { + case 1: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 1; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + } + break; + case 2: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 2; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + } + break; + case 3: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 3; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + } + break; + case 4: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * 4; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + STBIR_ASSERT(coefficient != 0); + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; + } + break; + default: + for (k = n0; k <= n1; k++) + { + int in_pixel_index = k * channels; + float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; + int c; + STBIR_ASSERT(coefficient != 0); + for (c = 0; c < channels; c++) + output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; + } + break; + } + } +} + +static void stbir__resample_horizontal_downsample(stbir__info* stbir_info, float* output_buffer) +{ + int x, k; + int input_w = stbir_info->input_w; + int channels = stbir_info->channels; + float* decode_buffer = stbir__get_decode_buffer(stbir_info); + stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; + float* horizontal_coefficients = stbir_info->horizontal_coefficients; + int coefficient_width = stbir_info->horizontal_coefficient_width; + int filter_pixel_margin = stbir_info->horizontal_filter_pixel_margin; + int max_x = input_w + filter_pixel_margin * 2; + + STBIR_ASSERT(!stbir__use_width_upsampling(stbir_info)); + + switch (channels) { + case 1: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 1; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 1; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + } + } + break; + + case 2: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 2; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 2; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + } + } + break; + + case 3: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 3; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 3; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + } + } + break; + + case 4: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * 4; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int out_pixel_index = k * 4; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; + output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; + output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; + output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; + } + } + break; + + default: + for (x = 0; x < max_x; x++) + { + int n0 = horizontal_contributors[x].n0; + int n1 = horizontal_contributors[x].n1; + + int in_x = x - filter_pixel_margin; + int in_pixel_index = in_x * channels; + int max_n = n1; + int coefficient_group = coefficient_width * x; + + for (k = n0; k <= max_n; k++) + { + int c; + int out_pixel_index = k * channels; + float coefficient = horizontal_coefficients[coefficient_group + k - n0]; + for (c = 0; c < channels; c++) + output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; + } + } + break; + } +} + +static void stbir__decode_and_resample_upsample(stbir__info* stbir_info, int n) +{ + // Decode the nth scanline from the source image into the decode buffer. + stbir__decode_scanline(stbir_info, n); + + // Now resample it into the ring buffer. + if (stbir__use_width_upsampling(stbir_info)) + stbir__resample_horizontal_upsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); + else + stbir__resample_horizontal_downsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); + + // Now it's sitting in the ring buffer ready to be used as source for the vertical sampling. +} + +static void stbir__decode_and_resample_downsample(stbir__info* stbir_info, int n) +{ + // Decode the nth scanline from the source image into the decode buffer. + stbir__decode_scanline(stbir_info, n); + + memset(stbir_info->horizontal_buffer, 0, stbir_info->output_w * stbir_info->channels * sizeof(float)); + + // Now resample it into the horizontal buffer. + if (stbir__use_width_upsampling(stbir_info)) + stbir__resample_horizontal_upsample(stbir_info, stbir_info->horizontal_buffer); + else + stbir__resample_horizontal_downsample(stbir_info, stbir_info->horizontal_buffer); + + // Now it's sitting in the horizontal buffer ready to be distributed into the ring buffers. +} + +// Get the specified scan line from the ring buffer. +static float* stbir__get_ring_buffer_scanline(int get_scanline, float* ring_buffer, int begin_index, int first_scanline, int ring_buffer_num_entries, int ring_buffer_length) +{ + int ring_buffer_index = (begin_index + (get_scanline - first_scanline)) % ring_buffer_num_entries; + return stbir__get_ring_buffer_entry(ring_buffer, ring_buffer_index, ring_buffer_length); +} + + +static void stbir__encode_scanline(stbir__info* stbir_info, int num_pixels, void *output_buffer, float *encode_buffer, int channels, int alpha_channel, int decode) +{ + int x; + int n; + int num_nonalpha; + stbir_uint16 nonalpha[STBIR_MAX_CHANNELS]; + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) + { + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + float alpha = encode_buffer[pixel_index + alpha_channel]; + float reciprocal_alpha = alpha ? 1.0f / alpha : 0; + + // unrolling this produced a 1% slowdown upscaling a large RGBA linear-space image on my machine - stb + for (n = 0; n < channels; n++) + if (n != alpha_channel) + encode_buffer[pixel_index + n] *= reciprocal_alpha; + + // We added in a small epsilon to prevent the color channel from being deleted with zero alpha. + // Because we only add it for integer types, it will automatically be discarded on integer + // conversion, so we don't need to subtract it back out (which would be problematic for + // numeric precision reasons). + } + } + + // build a table of all channels that need colorspace correction, so + // we don't perform colorspace correction on channels that don't need it. + for (x = 0, num_nonalpha = 0; x < channels; ++x) + { + if (x != alpha_channel || (stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) + { + nonalpha[num_nonalpha++] = (stbir_uint16)x; + } + } + + #define STBIR__ROUND_INT(f) ((int) ((f)+0.5)) + #define STBIR__ROUND_UINT(f) ((stbir_uint32) ((f)+0.5)) + + #ifdef STBIR__SATURATE_INT + #define STBIR__ENCODE_LINEAR8(f) stbir__saturate8 (STBIR__ROUND_INT((f) * stbir__max_uint8_as_float )) + #define STBIR__ENCODE_LINEAR16(f) stbir__saturate16(STBIR__ROUND_INT((f) * stbir__max_uint16_as_float)) + #else + #define STBIR__ENCODE_LINEAR8(f) (unsigned char ) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint8_as_float ) + #define STBIR__ENCODE_LINEAR16(f) (unsigned short) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint16_as_float) + #endif + + switch (decode) + { + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned char*)output_buffer)[index] = STBIR__ENCODE_LINEAR8(encode_buffer[index]); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned char*)output_buffer)[index] = stbir__linear_to_srgb_uchar(encode_buffer[index]); + } + + if (!(stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned char *)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR8(encode_buffer[pixel_index+alpha_channel]); + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned short*)output_buffer)[index] = STBIR__ENCODE_LINEAR16(encode_buffer[index]); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned short*)output_buffer)[index] = (unsigned short)STBIR__ROUND_INT(stbir__linear_to_srgb(stbir__saturate(encode_buffer[index])) * stbir__max_uint16_as_float); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned short*)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR16(encode_buffer[pixel_index + alpha_channel]); + } + + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__saturate(encode_buffer[index])) * stbir__max_uint32_as_float); + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__linear_to_srgb(stbir__saturate(encode_buffer[index]))) * stbir__max_uint32_as_float); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((unsigned int*)output_buffer)[pixel_index + alpha_channel] = (unsigned int)STBIR__ROUND_INT(((double)stbir__saturate(encode_buffer[pixel_index + alpha_channel])) * stbir__max_uint32_as_float); + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < channels; n++) + { + int index = pixel_index + n; + ((float*)output_buffer)[index] = encode_buffer[index]; + } + } + break; + + case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): + for (x=0; x < num_pixels; ++x) + { + int pixel_index = x*channels; + + for (n = 0; n < num_nonalpha; n++) + { + int index = pixel_index + nonalpha[n]; + ((float*)output_buffer)[index] = stbir__linear_to_srgb(encode_buffer[index]); + } + + if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) + ((float*)output_buffer)[pixel_index + alpha_channel] = encode_buffer[pixel_index + alpha_channel]; + } + break; + + default: + STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); + break; + } +} + +static void stbir__resample_vertical_upsample(stbir__info* stbir_info, int n) +{ + int x, k; + int output_w = stbir_info->output_w; + stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; + float* vertical_coefficients = stbir_info->vertical_coefficients; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int ring_buffer_entries = stbir_info->ring_buffer_num_entries; + void* output_data = stbir_info->output_data; + float* encode_buffer = stbir_info->encode_buffer; + int decode = STBIR__DECODE(type, colorspace); + int coefficient_width = stbir_info->vertical_coefficient_width; + int coefficient_counter; + int contributor = n; + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; + int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + + int n0,n1, output_row_start; + int coefficient_group = coefficient_width * contributor; + + n0 = vertical_contributors[contributor].n0; + n1 = vertical_contributors[contributor].n1; + + output_row_start = n * stbir_info->output_stride_bytes; + + STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); + + memset(encode_buffer, 0, output_w * sizeof(float) * channels); + + // I tried reblocking this for better cache usage of encode_buffer + // (using x_outer, k, x_inner), but it lost speed. -- stb + + coefficient_counter = 0; + switch (channels) { + case 1: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 1; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + } + } + break; + case 2: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 2; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + } + } + break; + case 3: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 3; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; + } + } + break; + case 4: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * 4; + encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; + encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; + encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; + encode_buffer[in_pixel_index + 3] += ring_buffer_entry[in_pixel_index + 3] * coefficient; + } + } + break; + default: + for (k = n0; k <= n1; k++) + { + int coefficient_index = coefficient_counter++; + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + for (x = 0; x < output_w; ++x) + { + int in_pixel_index = x * channels; + int c; + for (c = 0; c < channels; c++) + encode_buffer[in_pixel_index + c] += ring_buffer_entry[in_pixel_index + c] * coefficient; + } + } + break; + } + stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, encode_buffer, channels, alpha_channel, decode); +} + +static void stbir__resample_vertical_downsample(stbir__info* stbir_info, int n) +{ + int x, k; + int output_w = stbir_info->output_w; + stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; + float* vertical_coefficients = stbir_info->vertical_coefficients; + int channels = stbir_info->channels; + int ring_buffer_entries = stbir_info->ring_buffer_num_entries; + float* horizontal_buffer = stbir_info->horizontal_buffer; + int coefficient_width = stbir_info->vertical_coefficient_width; + int contributor = n + stbir_info->vertical_filter_pixel_margin; + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; + int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + int n0,n1; + + n0 = vertical_contributors[contributor].n0; + n1 = vertical_contributors[contributor].n1; + + STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); + + for (k = n0; k <= n1; k++) + { + int coefficient_index = k - n0; + int coefficient_group = coefficient_width * contributor; + float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; + + float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); + + switch (channels) { + case 1: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 1; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + } + break; + case 2: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 2; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + } + break; + case 3: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 3; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; + } + break; + case 4: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * 4; + ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; + ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; + ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; + ring_buffer_entry[in_pixel_index + 3] += horizontal_buffer[in_pixel_index + 3] * coefficient; + } + break; + default: + for (x = 0; x < output_w; x++) + { + int in_pixel_index = x * channels; + + int c; + for (c = 0; c < channels; c++) + ring_buffer_entry[in_pixel_index + c] += horizontal_buffer[in_pixel_index + c] * coefficient; + } + break; + } + } +} + +static void stbir__buffer_loop_upsample(stbir__info* stbir_info) +{ + int y; + float scale_ratio = stbir_info->vertical_scale; + float out_scanlines_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(1/scale_ratio) * scale_ratio; + + STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); + + for (y = 0; y < stbir_info->output_h; y++) + { + float in_center_of_out = 0; // Center of the current out scanline in the in scanline space + int in_first_scanline = 0, in_last_scanline = 0; + + stbir__calculate_sample_range_upsample(y, out_scanlines_radius, scale_ratio, stbir_info->vertical_shift, &in_first_scanline, &in_last_scanline, &in_center_of_out); + + STBIR_ASSERT(in_last_scanline - in_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); + + if (stbir_info->ring_buffer_begin_index >= 0) + { + // Get rid of whatever we don't need anymore. + while (in_first_scanline > stbir_info->ring_buffer_first_scanline) + { + if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) + { + // We just popped the last scanline off the ring buffer. + // Reset it to the empty state. + stbir_info->ring_buffer_begin_index = -1; + stbir_info->ring_buffer_first_scanline = 0; + stbir_info->ring_buffer_last_scanline = 0; + break; + } + else + { + stbir_info->ring_buffer_first_scanline++; + stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; + } + } + } + + // Load in new ones. + if (stbir_info->ring_buffer_begin_index < 0) + stbir__decode_and_resample_upsample(stbir_info, in_first_scanline); + + while (in_last_scanline > stbir_info->ring_buffer_last_scanline) + stbir__decode_and_resample_upsample(stbir_info, stbir_info->ring_buffer_last_scanline + 1); + + // Now all buffers should be ready to write a row of vertical sampling. + stbir__resample_vertical_upsample(stbir_info, y); + + STBIR_PROGRESS_REPORT((float)y / stbir_info->output_h); + } +} + +static void stbir__empty_ring_buffer(stbir__info* stbir_info, int first_necessary_scanline) +{ + int output_stride_bytes = stbir_info->output_stride_bytes; + int channels = stbir_info->channels; + int alpha_channel = stbir_info->alpha_channel; + int type = stbir_info->type; + int colorspace = stbir_info->colorspace; + int output_w = stbir_info->output_w; + void* output_data = stbir_info->output_data; + int decode = STBIR__DECODE(type, colorspace); + + float* ring_buffer = stbir_info->ring_buffer; + int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); + + if (stbir_info->ring_buffer_begin_index >= 0) + { + // Get rid of whatever we don't need anymore. + while (first_necessary_scanline > stbir_info->ring_buffer_first_scanline) + { + if (stbir_info->ring_buffer_first_scanline >= 0 && stbir_info->ring_buffer_first_scanline < stbir_info->output_h) + { + int output_row_start = stbir_info->ring_buffer_first_scanline * output_stride_bytes; + float* ring_buffer_entry = stbir__get_ring_buffer_entry(ring_buffer, stbir_info->ring_buffer_begin_index, ring_buffer_length); + stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, ring_buffer_entry, channels, alpha_channel, decode); + STBIR_PROGRESS_REPORT((float)stbir_info->ring_buffer_first_scanline / stbir_info->output_h); + } + + if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) + { + // We just popped the last scanline off the ring buffer. + // Reset it to the empty state. + stbir_info->ring_buffer_begin_index = -1; + stbir_info->ring_buffer_first_scanline = 0; + stbir_info->ring_buffer_last_scanline = 0; + break; + } + else + { + stbir_info->ring_buffer_first_scanline++; + stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; + } + } + } +} + +static void stbir__buffer_loop_downsample(stbir__info* stbir_info) +{ + int y; + float scale_ratio = stbir_info->vertical_scale; + int output_h = stbir_info->output_h; + float in_pixels_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(scale_ratio) / scale_ratio; + int pixel_margin = stbir_info->vertical_filter_pixel_margin; + int max_y = stbir_info->input_h + pixel_margin; + + STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); + + for (y = -pixel_margin; y < max_y; y++) + { + float out_center_of_in; // Center of the current out scanline in the in scanline space + int out_first_scanline, out_last_scanline; + + stbir__calculate_sample_range_downsample(y, in_pixels_radius, scale_ratio, stbir_info->vertical_shift, &out_first_scanline, &out_last_scanline, &out_center_of_in); + + STBIR_ASSERT(out_last_scanline - out_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); + + if (out_last_scanline < 0 || out_first_scanline >= output_h) + continue; + + stbir__empty_ring_buffer(stbir_info, out_first_scanline); + + stbir__decode_and_resample_downsample(stbir_info, y); + + // Load in new ones. + if (stbir_info->ring_buffer_begin_index < 0) + stbir__add_empty_ring_buffer_entry(stbir_info, out_first_scanline); + + while (out_last_scanline > stbir_info->ring_buffer_last_scanline) + stbir__add_empty_ring_buffer_entry(stbir_info, stbir_info->ring_buffer_last_scanline + 1); + + // Now the horizontal buffer is ready to write to all ring buffer rows. + stbir__resample_vertical_downsample(stbir_info, y); + } + + stbir__empty_ring_buffer(stbir_info, stbir_info->output_h); +} + +static void stbir__setup(stbir__info *info, int input_w, int input_h, int output_w, int output_h, int channels) +{ + info->input_w = input_w; + info->input_h = input_h; + info->output_w = output_w; + info->output_h = output_h; + info->channels = channels; +} + +static void stbir__calculate_transform(stbir__info *info, float s0, float t0, float s1, float t1, float *transform) +{ + info->s0 = s0; + info->t0 = t0; + info->s1 = s1; + info->t1 = t1; + + if (transform) + { + info->horizontal_scale = transform[0]; + info->vertical_scale = transform[1]; + info->horizontal_shift = transform[2]; + info->vertical_shift = transform[3]; + } + else + { + info->horizontal_scale = ((float)info->output_w / info->input_w) / (s1 - s0); + info->vertical_scale = ((float)info->output_h / info->input_h) / (t1 - t0); + + info->horizontal_shift = s0 * info->output_w / (s1 - s0); + info->vertical_shift = t0 * info->output_h / (t1 - t0); + } +} + +static void stbir__choose_filter(stbir__info *info, stbir_filter h_filter, stbir_filter v_filter) +{ + if (h_filter == 0) + h_filter = stbir__use_upsampling(info->horizontal_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; + if (v_filter == 0) + v_filter = stbir__use_upsampling(info->vertical_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; + info->horizontal_filter = h_filter; + info->vertical_filter = v_filter; +} + +static stbir_uint32 stbir__calculate_memory(stbir__info *info) +{ + int pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); + int filter_height = stbir__get_filter_pixel_width(info->vertical_filter, info->vertical_scale); + + info->horizontal_num_contributors = stbir__get_contributors(info->horizontal_scale, info->horizontal_filter, info->input_w, info->output_w); + info->vertical_num_contributors = stbir__get_contributors(info->vertical_scale , info->vertical_filter , info->input_h, info->output_h); + + // One extra entry because floating point precision problems sometimes cause an extra to be necessary. + info->ring_buffer_num_entries = filter_height + 1; + + info->horizontal_contributors_size = info->horizontal_num_contributors * sizeof(stbir__contributors); + info->horizontal_coefficients_size = stbir__get_total_horizontal_coefficients(info) * sizeof(float); + info->vertical_contributors_size = info->vertical_num_contributors * sizeof(stbir__contributors); + info->vertical_coefficients_size = stbir__get_total_vertical_coefficients(info) * sizeof(float); + info->decode_buffer_size = (info->input_w + pixel_margin * 2) * info->channels * sizeof(float); + info->horizontal_buffer_size = info->output_w * info->channels * sizeof(float); + info->ring_buffer_size = info->output_w * info->channels * info->ring_buffer_num_entries * sizeof(float); + info->encode_buffer_size = info->output_w * info->channels * sizeof(float); + + STBIR_ASSERT(info->horizontal_filter != 0); + STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late + STBIR_ASSERT(info->vertical_filter != 0); + STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late + + if (stbir__use_height_upsampling(info)) + // The horizontal buffer is for when we're downsampling the height and we + // can't output the result of sampling the decode buffer directly into the + // ring buffers. + info->horizontal_buffer_size = 0; + else + // The encode buffer is to retain precision in the height upsampling method + // and isn't used when height downsampling. + info->encode_buffer_size = 0; + + return info->horizontal_contributors_size + info->horizontal_coefficients_size + + info->vertical_contributors_size + info->vertical_coefficients_size + + info->decode_buffer_size + info->horizontal_buffer_size + + info->ring_buffer_size + info->encode_buffer_size; +} + +static int stbir__resize_allocated(stbir__info *info, + const void* input_data, int input_stride_in_bytes, + void* output_data, int output_stride_in_bytes, + int alpha_channel, stbir_uint32 flags, stbir_datatype type, + stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace, + void* tempmem, size_t tempmem_size_in_bytes) +{ + size_t memory_required = stbir__calculate_memory(info); + + int width_stride_input = input_stride_in_bytes ? input_stride_in_bytes : info->channels * info->input_w * stbir__type_size[type]; + int width_stride_output = output_stride_in_bytes ? output_stride_in_bytes : info->channels * info->output_w * stbir__type_size[type]; + +#ifdef STBIR_DEBUG_OVERWRITE_TEST +#define OVERWRITE_ARRAY_SIZE 8 + unsigned char overwrite_output_before_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_tempmem_before_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_output_after_pre[OVERWRITE_ARRAY_SIZE]; + unsigned char overwrite_tempmem_after_pre[OVERWRITE_ARRAY_SIZE]; + + size_t begin_forbidden = width_stride_output * (info->output_h - 1) + info->output_w * info->channels * stbir__type_size[type]; + memcpy(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); + memcpy(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE); +#endif + + STBIR_ASSERT(info->channels >= 0); + STBIR_ASSERT(info->channels <= STBIR_MAX_CHANNELS); + + if (info->channels < 0 || info->channels > STBIR_MAX_CHANNELS) + return 0; + + STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); + + if (info->horizontal_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) + return 0; + if (info->vertical_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) + return 0; + + if (alpha_channel < 0) + flags |= STBIR_FLAG_ALPHA_USES_COLORSPACE | STBIR_FLAG_ALPHA_PREMULTIPLIED; + + if (!(flags&STBIR_FLAG_ALPHA_USES_COLORSPACE) || !(flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) { + STBIR_ASSERT(alpha_channel >= 0 && alpha_channel < info->channels); + } + + if (alpha_channel >= info->channels) + return 0; + + STBIR_ASSERT(tempmem); + + if (!tempmem) + return 0; + + STBIR_ASSERT(tempmem_size_in_bytes >= memory_required); + + if (tempmem_size_in_bytes < memory_required) + return 0; + + memset(tempmem, 0, tempmem_size_in_bytes); + + info->input_data = input_data; + info->input_stride_bytes = width_stride_input; + + info->output_data = output_data; + info->output_stride_bytes = width_stride_output; + + info->alpha_channel = alpha_channel; + info->flags = flags; + info->type = type; + info->edge_horizontal = edge_horizontal; + info->edge_vertical = edge_vertical; + info->colorspace = colorspace; + + info->horizontal_coefficient_width = stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); + info->vertical_coefficient_width = stbir__get_coefficient_width (info->vertical_filter , info->vertical_scale ); + info->horizontal_filter_pixel_width = stbir__get_filter_pixel_width (info->horizontal_filter, info->horizontal_scale); + info->vertical_filter_pixel_width = stbir__get_filter_pixel_width (info->vertical_filter , info->vertical_scale ); + info->horizontal_filter_pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); + info->vertical_filter_pixel_margin = stbir__get_filter_pixel_margin(info->vertical_filter , info->vertical_scale ); + + info->ring_buffer_length_bytes = info->output_w * info->channels * sizeof(float); + info->decode_buffer_pixels = info->input_w + info->horizontal_filter_pixel_margin * 2; + +#define STBIR__NEXT_MEMPTR(current, newtype) (newtype*)(((unsigned char*)current) + current##_size) + + info->horizontal_contributors = (stbir__contributors *) tempmem; + info->horizontal_coefficients = STBIR__NEXT_MEMPTR(info->horizontal_contributors, float); + info->vertical_contributors = STBIR__NEXT_MEMPTR(info->horizontal_coefficients, stbir__contributors); + info->vertical_coefficients = STBIR__NEXT_MEMPTR(info->vertical_contributors, float); + info->decode_buffer = STBIR__NEXT_MEMPTR(info->vertical_coefficients, float); + + if (stbir__use_height_upsampling(info)) + { + info->horizontal_buffer = NULL; + info->ring_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); + info->encode_buffer = STBIR__NEXT_MEMPTR(info->ring_buffer, float); + + STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->encode_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); + } + else + { + info->horizontal_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); + info->ring_buffer = STBIR__NEXT_MEMPTR(info->horizontal_buffer, float); + info->encode_buffer = NULL; + + STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->ring_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); + } + +#undef STBIR__NEXT_MEMPTR + + // This signals that the ring buffer is empty + info->ring_buffer_begin_index = -1; + + stbir__calculate_filters(info->horizontal_contributors, info->horizontal_coefficients, info->horizontal_filter, info->horizontal_scale, info->horizontal_shift, info->input_w, info->output_w); + stbir__calculate_filters(info->vertical_contributors, info->vertical_coefficients, info->vertical_filter, info->vertical_scale, info->vertical_shift, info->input_h, info->output_h); + + STBIR_PROGRESS_REPORT(0); + + if (stbir__use_height_upsampling(info)) + stbir__buffer_loop_upsample(info); + else + stbir__buffer_loop_downsample(info); + + STBIR_PROGRESS_REPORT(1); + +#ifdef STBIR_DEBUG_OVERWRITE_TEST + STBIR_ASSERT(memcmp(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); + STBIR_ASSERT(memcmp(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE) == 0); +#endif + + return 1; +} + + +static int stbir__resize_arbitrary( + void *alloc_context, + const void* input_data, int input_w, int input_h, int input_stride_in_bytes, + void* output_data, int output_w, int output_h, int output_stride_in_bytes, + float s0, float t0, float s1, float t1, float *transform, + int channels, int alpha_channel, stbir_uint32 flags, stbir_datatype type, + stbir_filter h_filter, stbir_filter v_filter, + stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace) +{ + stbir__info info; + int result; + size_t memory_required; + void* extra_memory; + + stbir__setup(&info, input_w, input_h, output_w, output_h, channels); + stbir__calculate_transform(&info, s0,t0,s1,t1,transform); + stbir__choose_filter(&info, h_filter, v_filter); + memory_required = stbir__calculate_memory(&info); + extra_memory = STBIR_MALLOC(memory_required, alloc_context); + + if (!extra_memory) + return 0; + + result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes, + output_data, output_stride_in_bytes, + alpha_channel, flags, type, + edge_horizontal, edge_vertical, + colorspace, extra_memory, memory_required); + + STBIR_FREE(extra_memory, alloc_context); + + return result; +} + +STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); +} + +STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_FLOAT, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); +} + +STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_SRGB); +} + +STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode) +{ + return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, + edge_wrap_mode, edge_wrap_mode, STBIR_COLORSPACE_SRGB); +} + +STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + +STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT16, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + + +STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, + void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_FLOAT, filter, filter, + edge_wrap_mode, edge_wrap_mode, space); +} + + +STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + + +STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float x_scale, float y_scale, + float x_offset, float y_offset) +{ + float transform[4]; + transform[0] = x_scale; + transform[1] = y_scale; + transform[2] = x_offset; + transform[3] = y_offset; + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + 0,0,1,1,transform,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + +STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, + void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, + stbir_datatype datatype, + int num_channels, int alpha_channel, int flags, + stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, + stbir_filter filter_horizontal, stbir_filter filter_vertical, + stbir_colorspace space, void *alloc_context, + float s0, float t0, float s1, float t1) +{ + return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, + output_pixels, output_w, output_h, output_stride_in_bytes, + s0,t0,s1,t1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, + edge_mode_horizontal, edge_mode_vertical, space); +} + +#endif // STB_IMAGE_RESIZE_IMPLEMENTATION + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ \ No newline at end of file diff --git a/libs/zstbi/libs/stbi/stb_image_write.h b/libs/zstbi/libs/stbi/stb_image_write.h new file mode 100644 index 0000000..023d71e --- /dev/null +++ b/libs/zstbi/libs/stbi/stb_image_write.h @@ -0,0 +1,1724 @@ +/* stb_image_write - v1.16 - public domain - http://nothings.org/stb + writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 + no warranty implied; use at your own risk + + Before #including, + + #define STB_IMAGE_WRITE_IMPLEMENTATION + + in the file that you want to have the implementation. + + Will probably not work correctly with strict-aliasing optimizations. + +ABOUT: + + This header file is a library for writing images to C stdio or a callback. + + The PNG output is not optimal; it is 20-50% larger than the file + written by a decent optimizing implementation; though providing a custom + zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. + This library is designed for source code compactness and simplicity, + not optimal image file size or run-time performance. + +BUILDING: + + You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. + You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace + malloc,realloc,free. + You can #define STBIW_MEMMOVE() to replace memmove() + You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function + for PNG compression (instead of the builtin one), it must have the following signature: + unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); + The returned data will be freed with STBIW_FREE() (free() by default), + so it must be heap allocated with STBIW_MALLOC() (malloc() by default), + +UNICODE: + + If compiling for Windows and you wish to use Unicode filenames, compile + with + #define STBIW_WINDOWS_UTF8 + and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert + Windows wchar_t filenames to utf8. + +USAGE: + + There are five functions, one for each image file format: + + int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); + int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); + + void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically + + There are also five equivalent functions that use an arbitrary write function. You are + expected to open/close your file-equivalent before and after calling these: + + int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); + int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + + where the callback is: + void stbi_write_func(void *context, void *data, int size); + + You can configure it with these global variables: + int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE + int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression + int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode + + + You can define STBI_WRITE_NO_STDIO to disable the file variant of these + functions, so the library will not use stdio.h at all. However, this will + also disable HDR writing, because it requires stdio for formatted output. + + Each function returns 0 on failure and non-0 on success. + + The functions create an image file defined by the parameters. The image + is a rectangle of pixels stored from left-to-right, top-to-bottom. + Each pixel contains 'comp' channels of data stored interleaved with 8-bits + per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is + monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. + The *data pointer points to the first byte of the top-left-most pixel. + For PNG, "stride_in_bytes" is the distance in bytes from the first byte of + a row of pixels to the first byte of the next row of pixels. + + PNG creates output files with the same number of components as the input. + The BMP format expands Y to RGB in the file format and does not + output alpha. + + PNG supports writing rectangles of data even when the bytes storing rows of + data are not consecutive in memory (e.g. sub-rectangles of a larger image), + by supplying the stride between the beginning of adjacent rows. The other + formats do not. (Thus you cannot write a native-format BMP through the BMP + writer, both because it is in BGR order and because it may have padding + at the end of the line.) + + PNG allows you to set the deflate compression level by setting the global + variable 'stbi_write_png_compression_level' (it defaults to 8). + + HDR expects linear float data. Since the format is always 32-bit rgb(e) + data, alpha (if provided) is discarded, and for monochrome data it is + replicated across all three channels. + + TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed + data, set the global variable 'stbi_write_tga_with_rle' to 0. + + JPEG does ignore alpha channels in input data; quality is between 1 and 100. + Higher quality looks better but results in a bigger image. + JPEG baseline (no JPEG progressive). + +CREDITS: + + + Sean Barrett - PNG/BMP/TGA + Baldur Karlsson - HDR + Jean-Sebastien Guay - TGA monochrome + Tim Kelsey - misc enhancements + Alan Hickman - TGA RLE + Emmanuel Julien - initial file IO callback implementation + Jon Olick - original jo_jpeg.cpp code + Daniel Gibson - integrate JPEG, allow external zlib + Aarni Koskela - allow choosing PNG filter + + bugfixes: + github:Chribba + Guillaume Chereau + github:jry2 + github:romigrou + Sergio Gonzalez + Jonas Karlsson + Filip Wasil + Thatcher Ulrich + github:poppolopoppo + Patrick Boettcher + github:xeekworx + Cap Petschulat + Simon Rodriguez + Ivan Tikhonov + github:ignotion + Adam Schackart + Andrew Kensler + +LICENSE + + See end of file for license information. + +*/ + +#ifndef INCLUDE_STB_IMAGE_WRITE_H +#define INCLUDE_STB_IMAGE_WRITE_H + +#include + +// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' +#ifndef STBIWDEF +#ifdef STB_IMAGE_WRITE_STATIC +#define STBIWDEF static +#else +#ifdef __cplusplus +#define STBIWDEF extern "C" +#else +#define STBIWDEF extern +#endif +#endif +#endif + +#ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations +STBIWDEF int stbi_write_tga_with_rle; +STBIWDEF int stbi_write_png_compression_level; +STBIWDEF int stbi_write_force_png_filter; +#endif + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); + +#ifdef STBIW_WINDOWS_UTF8 +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif +#endif + +typedef void stbi_write_func(void *context, void *data, int size); + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + +STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); + +#endif//INCLUDE_STB_IMAGE_WRITE_H + +#ifdef STB_IMAGE_WRITE_IMPLEMENTATION + +#ifdef _WIN32 + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif + #ifndef _CRT_NONSTDC_NO_DEPRECATE + #define _CRT_NONSTDC_NO_DEPRECATE + #endif +#endif + +#ifndef STBI_WRITE_NO_STDIO +#include +#endif // STBI_WRITE_NO_STDIO + +#include +#include +#include +#include + +#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) +// ok +#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." +#endif + +#ifndef STBIW_MALLOC +#define STBIW_MALLOC(sz) malloc(sz) +#define STBIW_REALLOC(p,newsz) realloc(p,newsz) +#define STBIW_FREE(p) free(p) +#endif + +#ifndef STBIW_REALLOC_SIZED +#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz) +#endif + + +#ifndef STBIW_MEMMOVE +#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) +#endif + + +#ifndef STBIW_ASSERT +#include +#define STBIW_ASSERT(x) assert(x) +#endif + +#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff) + +#ifdef STB_IMAGE_WRITE_STATIC +static int stbi_write_png_compression_level = 8; +static int stbi_write_tga_with_rle = 1; +static int stbi_write_force_png_filter = -1; +#else +int stbi_write_png_compression_level = 8; +int stbi_write_tga_with_rle = 1; +int stbi_write_force_png_filter = -1; +#endif + +static int stbi__flip_vertically_on_write = 0; + +STBIWDEF void stbi_flip_vertically_on_write(int flag) +{ + stbi__flip_vertically_on_write = flag; +} + +typedef struct +{ + stbi_write_func *func; + void *context; + unsigned char buffer[64]; + int buf_used; +} stbi__write_context; + +// initialize a callback-based context +static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context) +{ + s->func = c; + s->context = context; +} + +#ifndef STBI_WRITE_NO_STDIO + +static void stbi__stdio_write(void *context, void *data, int size) +{ + fwrite(data,1,size,(FILE*) context); +} + +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) +#ifdef __cplusplus +#define STBIW_EXTERN extern "C" +#else +#define STBIW_EXTERN extern +#endif +STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbiw__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + +static int stbi__start_write_file(stbi__write_context *s, const char *filename) +{ + FILE *f = stbiw__fopen(filename, "wb"); + stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f); + return f != NULL; +} + +static void stbi__end_write_file(stbi__write_context *s) +{ + fclose((FILE *)s->context); +} + +#endif // !STBI_WRITE_NO_STDIO + +typedef unsigned int stbiw_uint32; +typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; + +static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int)); + s->func(s->context,&x,1); + break; } + case '2': { int x = va_arg(v,int); + unsigned char b[2]; + b[0] = STBIW_UCHAR(x); + b[1] = STBIW_UCHAR(x>>8); + s->func(s->context,b,2); + break; } + case '4': { stbiw_uint32 x = va_arg(v,int); + unsigned char b[4]; + b[0]=STBIW_UCHAR(x); + b[1]=STBIW_UCHAR(x>>8); + b[2]=STBIW_UCHAR(x>>16); + b[3]=STBIW_UCHAR(x>>24); + s->func(s->context,b,4); + break; } + default: + STBIW_ASSERT(0); + return; + } + } +} + +static void stbiw__writef(stbi__write_context *s, const char *fmt, ...) +{ + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); +} + +static void stbiw__write_flush(stbi__write_context *s) +{ + if (s->buf_used) { + s->func(s->context, &s->buffer, s->buf_used); + s->buf_used = 0; + } +} + +static void stbiw__putc(stbi__write_context *s, unsigned char c) +{ + s->func(s->context, &c, 1); +} + +static void stbiw__write1(stbi__write_context *s, unsigned char a) +{ + if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) + stbiw__write_flush(s); + s->buffer[s->buf_used++] = a; +} + +static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c) +{ + int n; + if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) + stbiw__write_flush(s); + n = s->buf_used; + s->buf_used = n+3; + s->buffer[n+0] = a; + s->buffer[n+1] = b; + s->buffer[n+2] = c; +} + +static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d) +{ + unsigned char bg[3] = { 255, 0, 255}, px[3]; + int k; + + if (write_alpha < 0) + stbiw__write1(s, d[comp - 1]); + + switch (comp) { + case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case + case 1: + if (expand_mono) + stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp + else + stbiw__write1(s, d[0]); // monochrome TGA + break; + case 4: + if (!write_alpha) { + // composite against pink background + for (k = 0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; + stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); + break; + } + if (write_alpha > 0) + stbiw__write1(s, d[comp - 1]); +} + +static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) +{ + stbiw_uint32 zero = 0; + int i,j, j_end; + + if (y <= 0) + return; + + if (stbi__flip_vertically_on_write) + vdir *= -1; + + if (vdir < 0) { + j_end = -1; j = y-1; + } else { + j_end = y; j = 0; + } + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + unsigned char *d = (unsigned char *) data + (j*x+i)*comp; + stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); + } + stbiw__write_flush(s); + s->func(s->context, &zero, scanline_pad); + } +} + +static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) +{ + if (y < 0 || x < 0) { + return 0; + } else { + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); + stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono); + return 1; + } +} + +static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data) +{ + if (comp != 4) { + // write RGB bitmap + int pad = (-x*3) & 3; + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header + } else { + // RGBA bitmaps need a v4 header + // use BI_BITFIELDS mode with 32bpp and alpha mask + // (straight BI_RGB with alpha mask doesn't work in most readers) + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0, + "11 4 22 4" "4 44 22 444444 4444 4 444 444 444 444", + 'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header + 108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header + } +} + +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_bmp_core(&s, x, y, comp, data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_bmp_core(&s, x, y, comp, data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif //!STBI_WRITE_NO_STDIO + +static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data) +{ + int has_alpha = (comp == 2 || comp == 4); + int colorbytes = has_alpha ? comp-1 : comp; + int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 + + if (y < 0 || x < 0) + return 0; + + if (!stbi_write_tga_with_rle) { + return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0, + "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); + } else { + int i,j,k; + int jend, jdir; + + stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8); + + if (stbi__flip_vertically_on_write) { + j = 0; + jend = y; + jdir = 1; + } else { + j = y-1; + jend = -1; + jdir = -1; + } + for (; j != jend; j += jdir) { + unsigned char *row = (unsigned char *) data + j * x * comp; + int len; + + for (i = 0; i < x; i += len) { + unsigned char *begin = row + i * comp; + int diff = 1; + len = 1; + + if (i < x - 1) { + ++len; + diff = memcmp(begin, row + (i + 1) * comp, comp); + if (diff) { + const unsigned char *prev = begin; + for (k = i + 2; k < x && len < 128; ++k) { + if (memcmp(prev, row + k * comp, comp)) { + prev += comp; + ++len; + } else { + --len; + break; + } + } + } else { + for (k = i + 2; k < x && len < 128; ++k) { + if (!memcmp(begin, row + k * comp, comp)) { + ++len; + } else { + break; + } + } + } + } + + if (diff) { + unsigned char header = STBIW_UCHAR(len - 1); + stbiw__write1(s, header); + for (k = 0; k < len; ++k) { + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); + } + } else { + unsigned char header = STBIW_UCHAR(len - 129); + stbiw__write1(s, header); + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); + } + } + } + stbiw__write_flush(s); + } + return 1; +} + +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_tga_core(&s, x, y, comp, (void *) data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_tga_core(&s, x, y, comp, (void *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR writer +// by Baldur Karlsson + +#define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) + +#ifndef STBI_WRITE_NO_STDIO + +static void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) +{ + int exponent; + float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); + + if (maxcomp < 1e-32f) { + rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; + } else { + float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; + + rgbe[0] = (unsigned char)(linear[0] * normalize); + rgbe[1] = (unsigned char)(linear[1] * normalize); + rgbe[2] = (unsigned char)(linear[2] * normalize); + rgbe[3] = (unsigned char)(exponent + 128); + } +} + +static void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte) +{ + unsigned char lengthbyte = STBIW_UCHAR(length+128); + STBIW_ASSERT(length+128 <= 255); + s->func(s->context, &lengthbyte, 1); + s->func(s->context, &databyte, 1); +} + +static void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data) +{ + unsigned char lengthbyte = STBIW_UCHAR(length); + STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code + s->func(s->context, &lengthbyte, 1); + s->func(s->context, data, length); +} + +static void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline) +{ + unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; + unsigned char rgbe[4]; + float linear[3]; + int x; + + scanlineheader[2] = (width&0xff00)>>8; + scanlineheader[3] = (width&0x00ff); + + /* skip RLE for images too small or large */ + if (width < 8 || width >= 32768) { + for (x=0; x < width; x++) { + switch (ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + s->func(s->context, rgbe, 4); + } + } else { + int c,r; + /* encode into scratch buffer */ + for (x=0; x < width; x++) { + switch(ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + scratch[x + width*0] = rgbe[0]; + scratch[x + width*1] = rgbe[1]; + scratch[x + width*2] = rgbe[2]; + scratch[x + width*3] = rgbe[3]; + } + + s->func(s->context, scanlineheader, 4); + + /* RLE each component separately */ + for (c=0; c < 4; c++) { + unsigned char *comp = &scratch[width*c]; + + x = 0; + while (x < width) { + // find first run + r = x; + while (r+2 < width) { + if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) + break; + ++r; + } + if (r+2 >= width) + r = width; + // dump up to first run + while (x < r) { + int len = r-x; + if (len > 128) len = 128; + stbiw__write_dump_data(s, len, &comp[x]); + x += len; + } + // if there's a run, output it + if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd + // find next byte after run + while (r < width && comp[r] == comp[x]) + ++r; + // output run up to r + while (x < r) { + int len = r-x; + if (len > 127) len = 127; + stbiw__write_run_data(s, len, comp[x]); + x += len; + } + } + } + } + } +} + +static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data) +{ + if (y <= 0 || x <= 0 || data == NULL) + return 0; + else { + // Each component is stored separately. Allocate scratch space for full output scanline. + unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); + int i, len; + char buffer[128]; + char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; + s->func(s->context, header, sizeof(header)-1); + +#ifdef __STDC_LIB_EXT1__ + len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#else + len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#endif + s->func(s->context, buffer, len); + + for(i=0; i < y; i++) + stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i)); + STBIW_FREE(scratch); + return 1; + } +} + +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_hdr_core(&s, x, y, comp, (float *) data); +} + +STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif // STBI_WRITE_NO_STDIO + + +////////////////////////////////////////////////////////////////////////////// +// +// PNG writer +// + +#ifndef STBIW_ZLIB_COMPRESS +// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() +#define stbiw__sbraw(a) ((int *) (void *) (a) - 2) +#define stbiw__sbm(a) stbiw__sbraw(a)[0] +#define stbiw__sbn(a) stbiw__sbraw(a)[1] + +#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) +#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) +#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) + +#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) +#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) +#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) + +static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) +{ + int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; + void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2); + STBIW_ASSERT(p); + if (p) { + if (!*arr) ((int *) p)[1] = 0; + *arr = (void *) ((int *) p + 2); + stbiw__sbm(*arr) = m; + } + return *arr; +} + +static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) +{ + while (*bitcount >= 8) { + stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); + *bitbuffer >>= 8; + *bitcount -= 8; + } + return data; +} + +static int stbiw__zlib_bitrev(int code, int codebits) +{ + int res=0; + while (codebits--) { + res = (res << 1) | (code & 1); + code >>= 1; + } + return res; +} + +static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) +{ + int i; + for (i=0; i < limit && i < 258; ++i) + if (a[i] != b[i]) break; + return i; +} + +static unsigned int stbiw__zhash(unsigned char *data) +{ + stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + return hash; +} + +#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) +#define stbiw__zlib_add(code,codebits) \ + (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) +#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) +// default huffman tables +#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) +#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) +#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) +#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) +#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) +#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) + +#define stbiw__ZHASH 16384 + +#endif // STBIW_ZLIB_COMPRESS + +STBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) +{ +#ifdef STBIW_ZLIB_COMPRESS + // user provided a zlib compress implementation, use that + return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); +#else // use builtin + static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 }; + static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 }; + static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; + unsigned int bitbuf=0; + int i,j, bitcount=0; + unsigned char *out = NULL; + unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); + if (hash_table == NULL) + return NULL; + if (quality < 5) quality = 5; + + stbiw__sbpush(out, 0x78); // DEFLATE 32K window + stbiw__sbpush(out, 0x5e); // FLEVEL = 1 + stbiw__zlib_add(1,1); // BFINAL = 1 + stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman + + for (i=0; i < stbiw__ZHASH; ++i) + hash_table[i] = NULL; + + i=0; + while (i < data_len-3) { + // hash next 3 bytes of data to be compressed + int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; + unsigned char *bestloc = 0; + unsigned char **hlist = hash_table[h]; + int n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32768) { // if entry lies within window + int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); + if (d >= best) { best=d; bestloc=hlist[j]; } + } + } + // when hash table entry is too long, delete half the entries + if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { + STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); + stbiw__sbn(hash_table[h]) = quality; + } + stbiw__sbpush(hash_table[h],data+i); + + if (bestloc) { + // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal + h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); + hlist = hash_table[h]; + n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32767) { + int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); + if (e > best) { // if next match is better, bail on current match + bestloc = NULL; + break; + } + } + } + } + + if (bestloc) { + int d = (int) (data+i - bestloc); // distance back + STBIW_ASSERT(d <= 32767 && best <= 258); + for (j=0; best > lengthc[j+1]-1; ++j); + stbiw__zlib_huff(j+257); + if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); + for (j=0; d > distc[j+1]-1; ++j); + stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); + if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); + i += best; + } else { + stbiw__zlib_huffb(data[i]); + ++i; + } + } + // write out final bytes + for (;i < data_len; ++i) + stbiw__zlib_huffb(data[i]); + stbiw__zlib_huff(256); // end of block + // pad with 0 bits to byte boundary + while (bitcount) + stbiw__zlib_add(0,1); + + for (i=0; i < stbiw__ZHASH; ++i) + (void) stbiw__sbfree(hash_table[i]); + STBIW_FREE(hash_table); + + // store uncompressed instead if compression was worse + if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) { + stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 + for (j = 0; j < data_len;) { + int blocklen = data_len - j; + if (blocklen > 32767) blocklen = 32767; + stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression + stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN + stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN + stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); + memcpy(out+stbiw__sbn(out), data+j, blocklen); + stbiw__sbn(out) += blocklen; + j += blocklen; + } + } + + { + // compute adler32 on input + unsigned int s1=1, s2=0; + int blocklen = (int) (data_len % 5552); + j=0; + while (j < data_len) { + for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; } + s1 %= 65521; s2 %= 65521; + j += blocklen; + blocklen = 5552; + } + stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s2)); + stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s1)); + } + *out_len = stbiw__sbn(out); + // make returned pointer freeable + STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); + return (unsigned char *) stbiw__sbraw(out); +#endif // STBIW_ZLIB_COMPRESS +} + +static unsigned int stbiw__crc32(unsigned char *buffer, int len) +{ +#ifdef STBIW_CRC32 + return STBIW_CRC32(buffer, len); +#else + static unsigned int crc_table[256] = + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + unsigned int crc = ~0u; + int i; + for (i=0; i < len; ++i) + crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; + return ~crc; +#endif +} + +#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4) +#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); +#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) + +static void stbiw__wpcrc(unsigned char **data, int len) +{ + unsigned int crc = stbiw__crc32(*data - len - 4, len+4); + stbiw__wp32(*data, crc); +} + +static unsigned char stbiw__paeth(int a, int b, int c) +{ + int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); + if (pa <= pb && pa <= pc) return STBIW_UCHAR(a); + if (pb <= pc) return STBIW_UCHAR(b); + return STBIW_UCHAR(c); +} + +// @OPTIMIZE: provide an option that always forces left-predict or paeth predict +static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer) +{ + static int mapping[] = { 0,1,2,3,4 }; + static int firstmap[] = { 0,1,0,5,6 }; + int *mymap = (y != 0) ? mapping : firstmap; + int i; + int type = mymap[filter_type]; + unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); + int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; + + if (type==0) { + memcpy(line_buffer, z, width*n); + return; + } + + // first loop isn't optimized since it's just one pixel + for (i = 0; i < n; ++i) { + switch (type) { + case 1: line_buffer[i] = z[i]; break; + case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; + case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break; + case 5: line_buffer[i] = z[i]; break; + case 6: line_buffer[i] = z[i]; break; + } + } + switch (type) { + case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; + case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; + case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; + case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; + case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; + } +} + +STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) +{ + int force_filter = stbi_write_force_png_filter; + int ctype[5] = { -1, 0, 4, 2, 6 }; + unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; + unsigned char *out,*o, *filt, *zlib; + signed char *line_buffer; + int j,zlen; + + if (stride_bytes == 0) + stride_bytes = x * n; + + if (force_filter >= 5) { + force_filter = -1; + } + + filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; + line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } + for (j=0; j < y; ++j) { + int filter_type; + if (force_filter > -1) { + filter_type = force_filter; + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); + } else { // Estimate the best filter by running through all of them: + int best_filter = 0, best_filter_val = 0x7fffffff, est, i; + for (filter_type = 0; filter_type < 5; filter_type++) { + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); + + // Estimate the entropy of the line using this filter; the less, the better. + est = 0; + for (i = 0; i < x*n; ++i) { + est += abs((signed char) line_buffer[i]); + } + if (est < best_filter_val) { + best_filter_val = est; + best_filter = filter_type; + } + } + if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); + filter_type = best_filter; + } + } + // when we get here, filter_type contains the filter type, and line_buffer contains the data + filt[j*(x*n+1)] = (unsigned char) filter_type; + STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); + } + STBIW_FREE(line_buffer); + zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level); + STBIW_FREE(filt); + if (!zlib) return 0; + + // each tag requires 12 bytes of overhead + out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); + if (!out) return 0; + *out_len = 8 + 12+13 + 12+zlen + 12; + + o=out; + STBIW_MEMMOVE(o,sig,8); o+= 8; + stbiw__wp32(o, 13); // header length + stbiw__wptag(o, "IHDR"); + stbiw__wp32(o, x); + stbiw__wp32(o, y); + *o++ = 8; + *o++ = STBIW_UCHAR(ctype[n]); + *o++ = 0; + *o++ = 0; + *o++ = 0; + stbiw__wpcrc(&o,13); + + stbiw__wp32(o, zlen); + stbiw__wptag(o, "IDAT"); + STBIW_MEMMOVE(o, zlib, zlen); + o += zlen; + STBIW_FREE(zlib); + stbiw__wpcrc(&o, zlen); + + stbiw__wp32(o,0); + stbiw__wptag(o, "IEND"); + stbiw__wpcrc(&o,0); + + STBIW_ASSERT(o == out + *out_len); + + return out; +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) +{ + FILE *f; + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + + f = stbiw__fopen(filename, "wb"); + if (!f) { STBIW_FREE(png); return 0; } + fwrite(png, 1, len, f); + fclose(f); + STBIW_FREE(png); + return 1; +} +#endif + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes) +{ + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + func(context, png, len); + STBIW_FREE(png); + return 1; +} + + +/* *************************************************************************** + * + * JPEG writer + * + * This is based on Jon Olick's jo_jpeg.cpp: + * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html + */ + +static const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18, + 24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 }; + +static void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) { + int bitBuf = *bitBufP, bitCnt = *bitCntP; + bitCnt += bs[1]; + bitBuf |= bs[0] << (24 - bitCnt); + while(bitCnt >= 8) { + unsigned char c = (bitBuf >> 16) & 255; + stbiw__putc(s, c); + if(c == 255) { + stbiw__putc(s, 0); + } + bitBuf <<= 8; + bitCnt -= 8; + } + *bitBufP = bitBuf; + *bitCntP = bitCnt; +} + +static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) { + float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; + float z1, z2, z3, z4, z5, z11, z13; + + float tmp0 = d0 + d7; + float tmp7 = d0 - d7; + float tmp1 = d1 + d6; + float tmp6 = d1 - d6; + float tmp2 = d2 + d5; + float tmp5 = d2 - d5; + float tmp3 = d3 + d4; + float tmp4 = d3 - d4; + + // Even part + float tmp10 = tmp0 + tmp3; // phase 2 + float tmp13 = tmp0 - tmp3; + float tmp11 = tmp1 + tmp2; + float tmp12 = tmp1 - tmp2; + + d0 = tmp10 + tmp11; // phase 3 + d4 = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781f; // c4 + d2 = tmp13 + z1; // phase 5 + d6 = tmp13 - z1; + + // Odd part + tmp10 = tmp4 + tmp5; // phase 2 + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + // The rotator is modified from fig 4-8 to avoid extra negations. + z5 = (tmp10 - tmp12) * 0.382683433f; // c6 + z2 = tmp10 * 0.541196100f + z5; // c2-c6 + z4 = tmp12 * 1.306562965f + z5; // c2+c6 + z3 = tmp11 * 0.707106781f; // c4 + + z11 = tmp7 + z3; // phase 5 + z13 = tmp7 - z3; + + *d5p = z13 + z2; // phase 6 + *d3p = z13 - z2; + *d1p = z11 + z4; + *d7p = z11 - z4; + + *d0p = d0; *d2p = d2; *d4p = d4; *d6p = d6; +} + +static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) { + int tmp1 = val < 0 ? -val : val; + val = val < 0 ? val-1 : val; + bits[1] = 1; + while(tmp1 >>= 1) { + ++bits[1]; + } + bits[0] = val & ((1<0)&&(DU[end0pos]==0); --end0pos) { + } + // end0pos = first element in reverse order !=0 + if(end0pos == 0) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + return DU[0]; + } + for(i = 1; i <= end0pos; ++i) { + int startpos = i; + int nrzeroes; + unsigned short bits[2]; + for (; DU[i]==0 && i<=end0pos; ++i) { + } + nrzeroes = i-startpos; + if ( nrzeroes >= 16 ) { + int lng = nrzeroes>>4; + int nrmarker; + for (nrmarker=1; nrmarker <= lng; ++nrmarker) + stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); + nrzeroes &= 15; + } + stbiw__jpg_calcBits(DU[i], bits); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); + } + if(end0pos != 63) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + } + return DU[0]; +} + +static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) { + // Constants that don't pollute global namespace + static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; + static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d}; + static const unsigned char std_ac_luminance_values[] = { + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; + static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; + static const unsigned char std_ac_chrominance_values[] = { + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + // Huffman tables + static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}}; + static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}}; + static const unsigned short YAC_HT[256][2] = { + {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const unsigned short UVAC_HT[256][2] = { + {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22, + 37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99}; + static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}; + static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, + 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; + + int row, col, i, k, subsample; + float fdtbl_Y[64], fdtbl_UV[64]; + unsigned char YTable[64], UVTable[64]; + + if(!data || !width || !height || comp > 4 || comp < 1) { + return 0; + } + + quality = quality ? quality : 90; + subsample = quality <= 90 ? 1 : 0; + quality = quality < 1 ? 1 : quality > 100 ? 100 : quality; + quality = quality < 50 ? 5000 / quality : 200 - quality * 2; + + for(i = 0; i < 64; ++i) { + int uvti, yti = (YQT[i]*quality+50)/100; + YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti); + uvti = (UVQT[i]*quality+50)/100; + UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti); + } + + for(row = 0, k = 0; row < 8; ++row) { + for(col = 0; col < 8; ++col, ++k) { + fdtbl_Y[k] = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + } + } + + // Write Headers + { + static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 }; + static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 }; + const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width), + 3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 }; + s->func(s->context, (void*)head0, sizeof(head0)); + s->func(s->context, (void*)YTable, sizeof(YTable)); + stbiw__putc(s, 1); + s->func(s->context, UVTable, sizeof(UVTable)); + s->func(s->context, (void*)head1, sizeof(head1)); + s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1); + s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); + stbiw__putc(s, 0x10); // HTYACinfo + s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1); + s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); + stbiw__putc(s, 1); // HTUDCinfo + s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); + stbiw__putc(s, 0x11); // HTUACinfo + s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); + s->func(s->context, (void*)head2, sizeof(head2)); + } + + // Encode 8x8 macroblocks + { + static const unsigned short fillBits[] = {0x7F, 7}; + int DCY=0, DCU=0, DCV=0; + int bitBuf=0, bitCnt=0; + // comp == 2 is grey+alpha (alpha is ignored) + int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; + const unsigned char *dataR = (const unsigned char *)data; + const unsigned char *dataG = dataR + ofsG; + const unsigned char *dataB = dataR + ofsB; + int x, y, pos; + if(subsample) { + for(y = 0; y < height; y += 16) { + for(x = 0; x < width; x += 16) { + float Y[256], U[256], V[256]; + for(row = y, pos = 0; row < y+16; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+16; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + + // subsample U,V + { + float subU[64], subV[64]; + int yy, xx; + for(yy = 0, pos = 0; yy < 8; ++yy) { + for(xx = 0; xx < 8; ++xx, ++pos) { + int j = yy*32+xx*2; + subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f; + subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f; + } + } + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + } else { + for(y = 0; y < height; y += 8) { + for(x = 0; x < width; x += 8) { + float Y[64], U[64], V[64]; + for(row = y, pos = 0; row < y+8; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+8; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + + // Do the bit alignment of the EOI marker + stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); + } + + // EOI + stbiw__putc(s, 0xFF); + stbiw__putc(s, 0xD9); + + return 1; +} + +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality); +} + + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +#endif // STB_IMAGE_WRITE_IMPLEMENTATION + +/* Revision history + 1.16 (2021-07-11) + make Deflate code emit uncompressed blocks when it would otherwise expand + support writing BMPs with alpha channel + 1.15 (2020-07-13) unknown + 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels + 1.13 + 1.12 + 1.11 (2019-08-11) + + 1.10 (2019-02-07) + support utf8 filenames in Windows; fix warnings and platform ifdefs + 1.09 (2018-02-11) + fix typo in zlib quality API, improve STB_I_W_STATIC in C++ + 1.08 (2018-01-29) + add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter + 1.07 (2017-07-24) + doc fix + 1.06 (2017-07-23) + writing JPEG (using Jon Olick's code) + 1.05 ??? + 1.04 (2017-03-03) + monochrome BMP expansion + 1.03 ??? + 1.02 (2016-04-02) + avoid allocating large structures on the stack + 1.01 (2016-01-16) + STBIW_REALLOC_SIZED: support allocators with no realloc support + avoid race-condition in crc initialization + minor compile issues + 1.00 (2015-09-14) + installable file IO function + 0.99 (2015-09-13) + warning fixes; TGA rle support + 0.98 (2015-04-08) + added STBIW_MALLOC, STBIW_ASSERT etc + 0.97 (2015-01-18) + fixed HDR asserts, rewrote HDR rle logic + 0.96 (2015-01-17) + add HDR output + fix monochrome BMP + 0.95 (2014-08-17) + add monochrome TGA output + 0.94 (2014-05-31) + rename private functions to avoid conflicts with stb_image.h + 0.93 (2014-05-27) + warning fixes + 0.92 (2010-08-01) + casts to unsigned char to fix warnings + 0.91 (2010-07-17) + first public release + 0.90 first internal release +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ \ No newline at end of file diff --git a/libs/zstbi/src/zstbi.c b/libs/zstbi/src/zstbi.c new file mode 100644 index 0000000..18ff077 --- /dev/null +++ b/libs/zstbi/src/zstbi.c @@ -0,0 +1,32 @@ +#include + +void* (*zstbiMallocPtr)(size_t size) = NULL; +void* (*zstbiReallocPtr)(void* ptr, size_t size) = NULL; +void (*zstbiFreePtr)(void* ptr) = NULL; + +#define STBI_MALLOC(size) zstbiMallocPtr(size) +#define STBI_REALLOC(ptr, size) zstbiReallocPtr(ptr, size) +#define STBI_FREE(ptr) zstbiFreePtr(ptr) + +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + +void* (*zstbirMallocPtr)(size_t size, void* context) = NULL; +void (*zstbirFreePtr)(void* ptr, void* context) = NULL; + +#define STBIR_MALLOC(size, context) zstbirMallocPtr(size, context) +#define STBIR_FREE(ptr, context) zstbirFreePtr(ptr, context) + +#define STB_IMAGE_RESIZE_IMPLEMENTATION +#include "stb_image_resize.h" + +void* (*zstbiwMallocPtr)(size_t size) = NULL; +void* (*zstbiwReallocPtr)(void* ptr, size_t size) = NULL; +void (*zstbiwFreePtr)(void* ptr) = NULL; + +#define STBIW_MALLOC(size) zstbiwMallocPtr(size) +#define STBIW_REALLOC(ptr, size) zstbiwReallocPtr(ptr, size) +#define STBIW_FREE(ptr) zstbiwFreePtr(ptr) + +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "stb_image_write.h" diff --git a/libs/zstbi/src/zstbi.zig b/libs/zstbi/src/zstbi.zig new file mode 100644 index 0000000..b0908f7 --- /dev/null +++ b/libs/zstbi/src/zstbi.zig @@ -0,0 +1,619 @@ +const std = @import("std"); +const testing = std.testing; +const assert = std.debug.assert; + +pub fn init(allocator: std.mem.Allocator) void { + assert(mem_allocator == null); + mem_allocator = allocator; + mem_allocations = std.AutoHashMap(usize, usize).init(allocator); + + // stb image + zstbiMallocPtr = zstbiMalloc; + zstbiReallocPtr = zstbiRealloc; + zstbiFreePtr = zstbiFree; + // stb image resize + zstbirMallocPtr = zstbirMalloc; + zstbirFreePtr = zstbirFree; + // stb image write + zstbiwMallocPtr = zstbiMalloc; + zstbiwReallocPtr = zstbiRealloc; + zstbiwFreePtr = zstbiFree; +} + +pub fn deinit() void { + assert(mem_allocator != null); + assert(mem_allocations.?.count() == 0); + + setFlipVerticallyOnLoad(false); + setFlipVerticallyOnWrite(false); + + mem_allocations.?.deinit(); + mem_allocations = null; + mem_allocator = null; +} + +pub const JpgWriteSettings = struct { + quality: u32, +}; + +pub const ImageWriteFormat = union(enum) { + png, + jpg: JpgWriteSettings, +}; + +pub const ImageWriteError = error{ + CouldNotWriteImage, +}; + +pub const Image = struct { + data: []u8, + width: u32, + height: u32, + num_components: u32, + bytes_per_component: u32, + bytes_per_row: u32, + is_hdr: bool, + + pub fn info(pathname: [:0]const u8) struct { + is_supported: bool, + width: u32, + height: u32, + num_components: u32, + } { + assert(mem_allocator != null); + + var w: c_int = 0; + var h: c_int = 0; + var c: c_int = 0; + const is_supported = stbi_info(pathname, &w, &h, &c); + return .{ + .is_supported = if (is_supported == 1) true else false, + .width = @as(u32, @intCast(w)), + .height = @as(u32, @intCast(h)), + .num_components = @as(u32, @intCast(c)), + }; + } + + pub fn loadFromFile(pathname: [:0]const u8, forced_num_components: u32) !Image { + assert(mem_allocator != null); + + var width: u32 = 0; + var height: u32 = 0; + var num_components: u32 = 0; + var bytes_per_component: u32 = 0; + var bytes_per_row: u32 = 0; + var is_hdr = false; + + const data = if (isHdr(pathname)) data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_loadf( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 2; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = true; + + // Convert each component from f32 to f16. + var ptr_f16 = @as([*]f16, @ptrCast(ptr.?)); + const num = width * height * num_components; + var i: u32 = 0; + while (i < num) : (i += 1) { + ptr_f16[i] = @as(f16, @floatCast(ptr.?[i])); + } + break :data @as([*]u8, @ptrCast(ptr_f16))[0 .. height * bytes_per_row]; + } else data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const is_16bit = is16bit(pathname); + const ptr = if (is_16bit) @as(?[*]u8, @ptrCast(stbi_load_16( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ))) else stbi_load( + pathname, + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = if (is_16bit) 2 else 1; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = false; + + break :data @as([*]u8, @ptrCast(ptr))[0 .. height * bytes_per_row]; + }; + + return Image{ + .data = data, + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = is_hdr, + }; + } + + pub fn loadFromMemory(data: []const u8, forced_num_components: u32) !Image { + assert(mem_allocator != null); + + var width: u32 = 0; + var height: u32 = 0; + var num_components: u32 = 0; + var bytes_per_component: u32 = 0; + var bytes_per_row: u32 = 0; + var is_hdr = false; + + const image_data = if (isHdrFromMem(data)) data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_loadf_from_memory( + data.ptr, + @as(c_int, @intCast(data.len)), + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 2; + bytes_per_row = width * num_components * bytes_per_component; + is_hdr = true; + + // Convert each component from f32 to f16. + var ptr_f16 = @as([*]f16, @ptrCast(ptr.?)); + const num = width * height * num_components; + var i: u32 = 0; + while (i < num) : (i += 1) { + ptr_f16[i] = @as(f16, @floatCast(ptr.?[i])); + } + break :data @as([*]u8, @ptrCast(ptr_f16))[0 .. height * bytes_per_row]; + } else data: { + var x: c_int = undefined; + var y: c_int = undefined; + var ch: c_int = undefined; + const ptr = stbi_load_from_memory( + data.ptr, + @as(c_int, @intCast(data.len)), + &x, + &y, + &ch, + @as(c_int, @intCast(forced_num_components)), + ); + if (ptr == null) return error.ImageInitFailed; + + num_components = if (forced_num_components == 0) @as(u32, @intCast(ch)) else forced_num_components; + width = @as(u32, @intCast(x)); + height = @as(u32, @intCast(y)); + bytes_per_component = 1; + bytes_per_row = width * num_components * bytes_per_component; + + break :data @as([*]u8, @ptrCast(ptr))[0 .. height * bytes_per_row]; + }; + + return Image{ + .data = image_data, + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = is_hdr, + }; + } + + pub fn createEmpty(width: u32, height: u32, num_components: u32, args: struct { + bytes_per_component: u32 = 0, + bytes_per_row: u32 = 0, + }) !Image { + assert(mem_allocator != null); + + const bytes_per_component = if (args.bytes_per_component == 0) 1 else args.bytes_per_component; + const bytes_per_row = if (args.bytes_per_row == 0) + width * num_components * bytes_per_component + else + args.bytes_per_row; + + const size = height * bytes_per_row; + + const data = @as([*]u8, @ptrCast(zstbiMalloc(size))); + @memset(data[0..size], 0); + + return Image{ + .data = data[0..size], + .width = width, + .height = height, + .num_components = num_components, + .bytes_per_component = bytes_per_component, + .bytes_per_row = bytes_per_row, + .is_hdr = false, + }; + } + + pub fn resize(image: *const Image, new_width: u32, new_height: u32) Image { + assert(mem_allocator != null); + + // TODO: Add support for HDR images + const new_bytes_per_row = new_width * image.num_components * image.bytes_per_component; + const new_size = new_height * new_bytes_per_row; + const new_data = @as([*]u8, @ptrCast(zstbiMalloc(new_size))); + stbir_resize_uint8( + image.data.ptr, + @as(c_int, @intCast(image.width)), + @as(c_int, @intCast(image.height)), + 0, + new_data, + @as(c_int, @intCast(new_width)), + @as(c_int, @intCast(new_height)), + 0, + @as(c_int, @intCast(image.num_components)), + ); + return .{ + .data = new_data[0..new_size], + .width = new_width, + .height = new_height, + .num_components = image.num_components, + .bytes_per_component = image.bytes_per_component, + .bytes_per_row = new_bytes_per_row, + .is_hdr = image.is_hdr, + }; + } + + pub fn writeToFile( + image: Image, + filename: [:0]const u8, + image_format: ImageWriteFormat, + ) ImageWriteError!void { + assert(mem_allocator != null); + + const w = @as(c_int, @intCast(image.width)); + const h = @as(c_int, @intCast(image.height)); + const comp = @as(c_int, @intCast(image.num_components)); + const result = switch (image_format) { + .png => stbi_write_png(filename.ptr, w, h, comp, image.data.ptr, 0), + .jpg => |settings| stbi_write_jpg( + filename.ptr, + w, + h, + comp, + image.data.ptr, + @as(c_int, @intCast(settings.quality)), + ), + }; + // if the result is 0 then it means an error occured (per stb image write docs) + if (result == 0) { + return ImageWriteError.CouldNotWriteImage; + } + } + + pub fn writeToFn( + image: Image, + write_fn: *const fn (ctx: ?*anyopaque, data: ?*anyopaque, size: c_int) callconv(.C) void, + context: ?*anyopaque, + image_format: ImageWriteFormat, + ) ImageWriteError!void { + assert(mem_allocator != null); + + const w = @as(c_int, @intCast(image.width)); + const h = @as(c_int, @intCast(image.height)); + const comp = @as(c_int, @intCast(image.num_components)); + const result = switch (image_format) { + .png => stbi_write_png_to_func(write_fn, context, w, h, comp, image.data.ptr, 0), + .jpg => |settings| stbi_write_jpg_to_func( + write_fn, + context, + w, + h, + comp, + image.data.ptr, + @as(c_int, @intCast(settings.quality)), + ), + }; + // if the result is 0 then it means an error occured (per stb image write docs) + if (result == 0) { + return ImageWriteError.CouldNotWriteImage; + } + } + + pub fn deinit(image: *Image) void { + stbi_image_free(image.data.ptr); + image.* = undefined; + } +}; + +/// `pub fn setHdrToLdrScale(scale: f32) void` +pub const setHdrToLdrScale = stbi_hdr_to_ldr_scale; + +/// `pub fn setHdrToLdrGamma(gamma: f32) void` +pub const setHdrToLdrGamma = stbi_hdr_to_ldr_gamma; + +/// `pub fn setLdrToHdrScale(scale: f32) void` +pub const setLdrToHdrScale = stbi_ldr_to_hdr_scale; + +/// `pub fn setLdrToHdrGamma(gamma: f32) void` +pub const setLdrToHdrGamma = stbi_ldr_to_hdr_gamma; + +pub fn isHdr(filename: [:0]const u8) bool { + return stbi_is_hdr(filename) != 0; +} + +pub fn isHdrFromMem(buffer: []const u8) bool { + return stbi_is_hdr_from_memory(buffer.ptr, @as(c_int, @intCast(buffer.len))) != 0; +} + +pub fn is16bit(filename: [:0]const u8) bool { + return stbi_is_16_bit(filename) != 0; +} + +pub fn setFlipVerticallyOnLoad(should_flip: bool) void { + stbi_set_flip_vertically_on_load(if (should_flip) 1 else 0); +} + +pub fn setFlipVerticallyOnWrite(should_flip: bool) void { + stbi_flip_vertically_on_write(if (should_flip) 1 else 0); +} + +var mem_allocator: ?std.mem.Allocator = null; +var mem_allocations: ?std.AutoHashMap(usize, usize) = null; +var mem_mutex: std.Thread.Mutex = .{}; +const mem_alignment = 16; + +extern var zstbiMallocPtr: ?*const fn (size: usize) callconv(.C) ?*anyopaque; +extern var zstbiwMallocPtr: ?*const fn (size: usize) callconv(.C) ?*anyopaque; + +fn zstbiMalloc(size: usize) callconv(.C) ?*anyopaque { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const mem = mem_allocator.?.alignedAlloc( + u8, + mem_alignment, + size, + ) catch @panic("zstbi: out of memory"); + + mem_allocations.?.put(@intFromPtr(mem.ptr), size) catch @panic("zstbi: out of memory"); + + return mem.ptr; +} + +extern var zstbiReallocPtr: ?*const fn (ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque; +extern var zstbiwReallocPtr: ?*const fn (ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque; + +fn zstbiRealloc(ptr: ?*anyopaque, size: usize) callconv(.C) ?*anyopaque { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const old_size = if (ptr != null) mem_allocations.?.get(@intFromPtr(ptr.?)).? else 0; + const old_mem = if (old_size > 0) + @as([*]align(mem_alignment) u8, @ptrCast(@alignCast(ptr)))[0..old_size] + else + @as([*]align(mem_alignment) u8, undefined)[0..0]; + + const new_mem = mem_allocator.?.realloc(old_mem, size) catch @panic("zstbi: out of memory"); + + if (ptr != null) { + const removed = mem_allocations.?.remove(@intFromPtr(ptr.?)); + std.debug.assert(removed); + } + + mem_allocations.?.put(@intFromPtr(new_mem.ptr), size) catch @panic("zstbi: out of memory"); + + return new_mem.ptr; +} + +extern var zstbiFreePtr: ?*const fn (maybe_ptr: ?*anyopaque) callconv(.C) void; +extern var zstbiwFreePtr: ?*const fn (maybe_ptr: ?*anyopaque) callconv(.C) void; + +fn zstbiFree(maybe_ptr: ?*anyopaque) callconv(.C) void { + if (maybe_ptr) |ptr| { + mem_mutex.lock(); + defer mem_mutex.unlock(); + + const size = mem_allocations.?.fetchRemove(@intFromPtr(ptr)).?.value; + const mem = @as([*]align(mem_alignment) u8, @ptrCast(@alignCast(ptr)))[0..size]; + mem_allocator.?.free(mem); + } +} + +extern var zstbirMallocPtr: ?*const fn (size: usize, maybe_context: ?*anyopaque) callconv(.C) ?*anyopaque; + +fn zstbirMalloc(size: usize, _: ?*anyopaque) callconv(.C) ?*anyopaque { + return zstbiMalloc(size); +} + +extern var zstbirFreePtr: ?*const fn (maybe_ptr: ?*anyopaque, maybe_context: ?*anyopaque) callconv(.C) void; + +fn zstbirFree(maybe_ptr: ?*anyopaque, _: ?*anyopaque) callconv(.C) void { + zstbiFree(maybe_ptr); +} + +extern fn stbi_info(filename: [*:0]const u8, x: *c_int, y: *c_int, comp: *c_int) c_int; + +extern fn stbi_load( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u8; + +extern fn stbi_load_16( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u16; + +extern fn stbi_loadf( + filename: [*:0]const u8, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]f32; + +pub extern fn stbi_load_from_memory( + buffer: [*]const u8, + len: c_int, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]u8; + +pub extern fn stbi_loadf_from_memory( + buffer: [*]const u8, + len: c_int, + x: *c_int, + y: *c_int, + channels_in_file: *c_int, + desired_channels: c_int, +) ?[*]f32; + +extern fn stbi_image_free(image_data: ?[*]u8) void; + +extern fn stbi_hdr_to_ldr_scale(scale: f32) void; +extern fn stbi_hdr_to_ldr_gamma(gamma: f32) void; +extern fn stbi_ldr_to_hdr_scale(scale: f32) void; +extern fn stbi_ldr_to_hdr_gamma(gamma: f32) void; + +extern fn stbi_is_16_bit(filename: [*:0]const u8) c_int; +extern fn stbi_is_hdr(filename: [*:0]const u8) c_int; +extern fn stbi_is_hdr_from_memory(buffer: [*]const u8, len: c_int) c_int; + +extern fn stbi_set_flip_vertically_on_load(flag_true_if_should_flip: c_int) void; +extern fn stbi_flip_vertically_on_write(flag: c_int) void; // flag is non-zero to flip data vertically + +extern fn stbir_resize_uint8( + input_pixels: [*]const u8, + input_w: c_int, + input_h: c_int, + input_stride_in_bytes: c_int, + output_pixels: [*]u8, + output_w: c_int, + output_h: c_int, + output_stride_in_bytes: c_int, + num_channels: c_int, +) void; + +extern fn stbi_write_jpg( + filename: [*:0]const u8, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + quality: c_int, +) c_int; + +extern fn stbi_write_png( + filename: [*:0]const u8, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + stride_in_bytes: c_int, +) c_int; + +extern fn stbi_write_png_to_func( + func: *const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.C) void, + context: ?*anyopaque, + w: c_int, + h: c_int, + comp: c_int, + data: [*]const u8, + stride_in_bytes: c_int, +) c_int; + +extern fn stbi_write_jpg_to_func( + func: *const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.C) void, + context: ?*anyopaque, + x: c_int, + y: c_int, + comp: c_int, + data: [*]const u8, + quality: c_int, +) c_int; + +test "zstbi basic" { + init(testing.allocator); + defer deinit(); + + var im1 = try Image.createEmpty(8, 6, 4, .{}); + defer im1.deinit(); + + try testing.expect(im1.width == 8); + try testing.expect(im1.height == 6); + try testing.expect(im1.num_components == 4); +} + +test "zstbi resize" { + init(testing.allocator); + defer deinit(); + + var im1 = try Image.createEmpty(32, 32, 4, .{}); + defer im1.deinit(); + + var im2 = im1.resize(8, 6); + defer im2.deinit(); + + try testing.expect(im2.width == 8); + try testing.expect(im2.height == 6); + try testing.expect(im2.num_components == 4); +} + +test "zstbi write and load file" { + init(testing.allocator); + defer deinit(); + + const pth = try std.fs.selfExeDirPathAlloc(testing.allocator); + defer testing.allocator.free(pth); + try std.posix.chdir(pth); + + var img = try Image.createEmpty(8, 6, 4, .{}); + defer img.deinit(); + + try img.writeToFile("test_img.png", ImageWriteFormat.png); + try img.writeToFile("test_img.jpg", .{ .jpg = .{ .quality = 80 } }); + + var img_png = try Image.loadFromFile("test_img.png", 0); + defer img_png.deinit(); + + try testing.expect(img_png.width == img.width); + try testing.expect(img_png.height == img.height); + try testing.expect(img_png.num_components == img.num_components); + + var img_jpg = try Image.loadFromFile("test_img.jpg", 0); + defer img_jpg.deinit(); + + try testing.expect(img_jpg.width == img.width); + try testing.expect(img_jpg.height == img.height); + try testing.expect(img_jpg.num_components == 3); // RGB JPEG + + try std.fs.cwd().deleteFile("test_img.png"); + try std.fs.cwd().deleteFile("test_img.jpg"); +} diff --git a/profile.json b/profile.json new file mode 100644 index 0000000..ddcec6a --- /dev/null +++ b/profile.json @@ -0,0 +1 @@ +{"meta":{"categories":[{"name":"Other","color":"grey","subcategories":["Other"]},{"name":"User","color":"yellow","subcategories":["Other"]},{"name":"Kernel","color":"orange","subcategories":["Other"]}],"debug":false,"extensions":{"baseURL":[],"id":[],"length":0,"name":[]},"interval":1.0,"preprocessedProfileVersion":46,"processType":0,"product":"./zig-out/bin/vulkan-test","sampleUnits":{"eventDelay":"ms","threadCPUDelta":"µs","time":"ms"},"startTime":1722876330128.0261,"symbolicated":false,"pausedRanges":[],"version":24,"usesOnlyOneStackType":true,"doesNotUseFrameImplementation":true,"sourceCodeIsNotOnSearchfox":true,"markerSchema":[]},"libs":[{"name":"libc.so.6","path":"/usr/lib64/libc.so.6","debugName":"libc.so.6","debugPath":"/usr/lib64/libc.so.6","breakpadId":"AAAB538F45D969A6F2BDCD25F471D80E0","codeId":"8f53abaad945a669f2bdcd25f471d80e077568ef","arch":null},{"name":"ld-linux-x86-64.so.2","path":"/usr/lib64/ld-linux-x86-64.so.2","debugName":"ld-linux-x86-64.so.2","debugPath":"/usr/lib64/ld-linux-x86-64.so.2","breakpadId":"A9CCAACB213FE29BE32FD8E01FF304530","codeId":"cbaacca93f219be2e32fd8e01ff304537bba9328","arch":null},{"name":"vulkan-test","path":"/home/przmk/Projects/zig/vulkan-test/zig-out/bin/vulkan-test","debugName":"vulkan-test","debugPath":"/home/przmk/Projects/zig/vulkan-test/zig-out/bin/vulkan-test","breakpadId":"55AB59981A1EBAEF781251A5CF8253200","codeId":null,"arch":null},{"name":"libSDL2-2.0.so.0.3000.3","path":"/usr/lib64/libSDL2-2.0.so.0.3000.3","debugName":"libSDL2-2.0.so.0.3000.3","debugPath":"/usr/lib64/libSDL2-2.0.so.0.3000.3","breakpadId":"D79220417CB1B6641668E0B1279EC05A0","codeId":"412092d7b17c64b61668e0b1279ec05adfa7e03c","arch":null},{"name":"libdbus-1.so.3.32.4","path":"/usr/lib64/libdbus-1.so.3.32.4","debugName":"libdbus-1.so.3.32.4","debugPath":"/usr/lib64/libdbus-1.so.3.32.4","breakpadId":"3C0436548C1D09EB30FA411717D273D30","codeId":"5436043c1d8ceb0930fa411717d273d3c6c6bf60","arch":null},{"name":"libwayland-client.so.0.22.0","path":"/usr/lib64/libwayland-client.so.0.22.0","debugName":"libwayland-client.so.0.22.0","debugPath":"/usr/lib64/libwayland-client.so.0.22.0","breakpadId":"09FBBA8D44FDC84B5F7BDDCE949756E70","codeId":"8dbafb09fd444bc85f7bddce949756e72c7b907c","arch":null},{"name":"libvulkan.so.1.3.283","path":"/usr/lib64/libvulkan.so.1.3.283","debugName":"libvulkan.so.1.3.283","debugPath":"/usr/lib64/libvulkan.so.1.3.283","breakpadId":"5AE142D36E73D1D2A0D09EEA7CDE7D8A0","codeId":"d342e15a736ed2d1a0d09eea7cde7d8abc6fb453","arch":null},{"name":"libLLVM.so.18.1","path":"/usr/lib64/libLLVM.so.18.1","debugName":"libLLVM.so.18.1","debugPath":"/usr/lib64/libLLVM.so.18.1","breakpadId":"869E8B9172A933E515E45CFEBB0DD7DF0","codeId":"918b9e86a972e53315e45cfebb0dd7dff770b055","arch":null},{"name":"libstdc++.so.6.0.33","path":"/usr/lib64/libstdc++.so.6.0.33","debugName":"libstdc++.so.6.0.33","debugPath":"/usr/lib64/libstdc++.so.6.0.33","breakpadId":"FD3EDB79125FCA738C42ABD22D1D9FD60","codeId":"79db3efd5f1273ca8c42abd22d1d9fd63cffe57c","arch":null},{"name":"libvulkan_intel_hasvk.so","path":"/usr/lib64/libvulkan_intel_hasvk.so","debugName":"libvulkan_intel_hasvk.so","debugPath":"/usr/lib64/libvulkan_intel_hasvk.so","breakpadId":"5CBBEA03E613A6765638273BB805A2990","codeId":"03eabb5c13e676a65638273bb805a2998380ef44","arch":null},{"name":"libffi.so.8.1.2","path":"/usr/lib64/libffi.so.8.1.2","debugName":"libffi.so.8.1.2","debugPath":"/usr/lib64/libffi.so.8.1.2","breakpadId":"03BF90A144E61C18ADAB122962AB83AE0","codeId":"a190bf03e644181cadab122962ab83ae96271696","arch":null},{"name":"libxkbcommon.so.0.0.0","path":"/usr/lib64/libxkbcommon.so.0.0.0","debugName":"libxkbcommon.so.0.0.0","debugPath":"/usr/lib64/libxkbcommon.so.0.0.0","breakpadId":"95B74E5EBFACD37573F2930E5D0E84A50","codeId":"5e4eb795acbf75d373f2930e5d0e84a568225bab","arch":null},{"name":"libVkLayer_khronos_validation.so","path":"/usr/lib64/libVkLayer_khronos_validation.so","debugName":"libVkLayer_khronos_validation.so","debugPath":"/usr/lib64/libVkLayer_khronos_validation.so","breakpadId":"4EE8857AB7839D4FBAE90E7468C7360A0","codeId":"7a85e84e83b74f9dbae90e7468c7360ad9892911","arch":null},{"name":"libVkLayer_MESA_device_select.so","path":"/usr/lib64/libVkLayer_MESA_device_select.so","debugName":"libVkLayer_MESA_device_select.so","debugPath":"/usr/lib64/libVkLayer_MESA_device_select.so","breakpadId":"DE0C615CAD8E54891EB39A8494675F0F0","codeId":"5c610cde8ead89541eb39a8494675f0f01083bde","arch":null},{"name":"libvulkan_freedreno.so","path":"/usr/lib64/libvulkan_freedreno.so","debugName":"libvulkan_freedreno.so","debugPath":"/usr/lib64/libvulkan_freedreno.so","breakpadId":"B7E489218C5BB328022C95890A68D9330","codeId":"2189e4b75b8c28b3022c95890a68d933465a3012","arch":null},{"name":"libexpat.so.1.9.2","path":"/usr/lib64/libexpat.so.1.9.2","debugName":"libexpat.so.1.9.2","debugPath":"/usr/lib64/libexpat.so.1.9.2","breakpadId":"E6DE648439075D8A407040011331F73B0","codeId":"8464dee607398a5d407040011331f73b27da02b4","arch":null},{"name":"libvulkan_intel.so","path":"/usr/lib64/libvulkan_intel.so","debugName":"libvulkan_intel.so","debugPath":"/usr/lib64/libvulkan_intel.so","breakpadId":"CE56CEDC5A7361C48352CBB362D7A9260","codeId":"dcce56ce735ac4618352cbb362d7a92604e016f8","arch":null},{"name":"libvulkan_lvp.so","path":"/usr/lib64/libvulkan_lvp.so","debugName":"libvulkan_lvp.so","debugPath":"/usr/lib64/libvulkan_lvp.so","breakpadId":"24E12433CB6388821C7D88F7EF1482F10","codeId":"3324e12463cb82881c7d88f7ef1482f1f0a9b08c","arch":null},{"name":"libvulkan_nouveau.so","path":"/usr/lib64/libvulkan_nouveau.so","debugName":"libvulkan_nouveau.so","debugPath":"/usr/lib64/libvulkan_nouveau.so","breakpadId":"4AEFE422B28AA5E563407278C6BF7CDE0","codeId":"22e4ef4a8ab2e5a563407278c6bf7cde10d01ae9","arch":null},{"name":"libvulkan_radeon.so","path":"/usr/lib64/libvulkan_radeon.so","debugName":"libvulkan_radeon.so","debugPath":"/usr/lib64/libvulkan_radeon.so","breakpadId":"33A75895050143BDDD591080473B4A5D0","codeId":"9558a7330105bd43dd591080473b4a5d2723ca50","arch":null},{"name":"libdrm_amdgpu.so.1.0.0","path":"/usr/lib64/libdrm_amdgpu.so.1.0.0","debugName":"libdrm_amdgpu.so.1.0.0","debugPath":"/usr/lib64/libdrm_amdgpu.so.1.0.0","breakpadId":"F6792A7397A3736B6CFFC0E8F0F77F8C0","codeId":"732a79f6a3976b736cffc0e8f0f77f8c5897ce93","arch":null},{"name":"libdrm.so.2.4.0","path":"/usr/lib64/libdrm.so.2.4.0","debugName":"libdrm.so.2.4.0","debugPath":"/usr/lib64/libdrm.so.2.4.0","breakpadId":"667670A07184073C04D5E2052B1F82CC0","codeId":"a070766684713c0704d5e2052b1f82cc36f8466d","arch":null},{"name":"libvulkan_powervr_mesa.so","path":"/usr/lib64/libvulkan_powervr_mesa.so","debugName":"libvulkan_powervr_mesa.so","debugPath":"/usr/lib64/libvulkan_powervr_mesa.so","breakpadId":"8C3DF4459893D3CD9E6F6F37873EEA9C0","codeId":"45f43d8c9398cdd39e6f6f37873eea9cba06a02d","arch":null},{"name":"[vdso]","path":"[vdso]","debugName":"[vdso]","debugPath":"[vdso]","breakpadId":"3222DF0F102766010529E5615C813CD00","codeId":"0fdf2232271001660529e5615c813cd0d23d4158","arch":null},{"name":"libwayland-cursor.so.0.22.0","path":"/usr/lib64/libwayland-cursor.so.0.22.0","debugName":"libwayland-cursor.so.0.22.0","debugPath":"/usr/lib64/libwayland-cursor.so.0.22.0","breakpadId":"10BCAF5A3C9BFB9258F49F7507066EEC0","codeId":"5aafbc109b3c92fb58f49f7507066eec5949a735","arch":null}],"threads":[{"frameTable":{"length":1,"address":[940811],"inlineDepth":[0],"category":[1],"subcategory":[0],"func":[0],"nativeSymbol":[null],"innerWindowID":[null],"implementation":[null],"line":[null],"column":[null],"optimizations":[null]},"funcTable":{"length":1,"name":[1],"isJS":[false],"relevantForJS":[false],"resource":[0],"fileName":[null],"lineNumber":[null],"columnNumber":[null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"samply","isMainThread":true,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425","processName":"samply","processShutdownTime":7353001.849467,"processStartupTime":0.0,"processType":"default","registerTime":0.0,"resourceTable":{"length":1,"lib":[0],"name":[0],"host":[null],"type":[1]},"samples":{"length":6,"stack":[0,0,0,0,0,0],"time":[7353001.796229,7353001.814623,7353001.822117,7353001.828959,7353001.835552,7353001.843136],"weight":[1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,18,7,6,6,7]},"stackTable":{"length":1,"prefix":[null],"frame":[0],"category":[1],"subcategory":[0]},"stringArray":["libc.so.6","0xe5b0b"],"tid":"32425","unregisterTime":7353001.849467},{"frameTable":{"length":1516,"address":[-1,118855,123741,117237,130942,11559,5410,10428,37415,86388,84477,83982,991460,172362,172167,1136014,1127773,994138,991566,109326,1176307,602542,601058,5752,602355,51459,50335,53253,61318,43661,40551,1176147,107776,102535,96342,202343,201575,201019,94660,109770,827798,1123749,51466,87263,144955,52603,86603,47964,144764,827960,1144721,34586,23115,22434,19942,194251,169729,122614,40937,59544,40499,41210,39982,151006,41049,121657,43639,532884,580181,589823,40518,43443,52708,36799,30859,61116,61356,43454,41064,40577,40210,150886,40381,50427,5569,21804,21558,4350469,5336502,5429651,5429174,754885,694715,687283,684927,4637967,42215024,40468,41136,41148,39909,43796,534383,587743,582994,1104970,40509,40414,994210,993062,840787,847562,1147754,880602,169599,108215,103978,1627140,104105,1627119,841434,834518,1121701,20269,34029,22175,36949,1101359,130000,112367,86433,112386,108587,104351,100783,71964,684851,1101746,40623,15414,15215,131420,131815,84286,1570044,133125,84176,131683,131439,17483,1002164,1153460,195204,170546,126552,119962,43934,38618,38942,39122,37775,1114467,1000281,1003438,1155632,1468742,1398789,1731672,1155479,1468583,1765568,1107901,169552,43696,587883,592179,529840,1088011,1001130,1005419,200791,36473,155972,202970,139676,43667,10479326,9195892,10479531,5407331,5012514,4913063,4885415,3386431,10479651,2316906,10479806,259452,196131,195962,138879,14341,3886483,3729545,3890991,153666,650979,3208010,1803958,641272,641162,1803709,271375,1105067,3207870,3200629,3200037,60974,9550,51653,46136,17567,437482,4212542,4205269,4204677,47118,28413,70610,678794,5989950,5982709,5982117,46540,28433,27342,22211,21868,9112,155131,615726,3160449,3158796,2093930,6457598,6449397,6448805,17558,1302176,5244606,5237365,5236773,44430,34963,154834,5227698,5225700,3894832,8542951,5028045,164380,162362,2072081,2069137,2068847,1316673,1684436,31255,46811,31730,1084587,32716,29058,45950,32687,1142061,1684808,2083946,48927,48217,31545,29159,532901,581300,580862,1102741,713297,710376,276546,49199,30360,28540,1897105,1894097,1893744,616081,613160,630935,625202,876877,877036,227352,2750494,1180814,1178863,1172644,646881,1179133,1178057,1176914,1140755,4272352,630599,876314,228872,615941,3159735,3158626,1627857,1624993,1624640,8543097,164192,143465,281654,1162417,1472556,1767360,2188020,1114928,1015978,1016688,1164615,206258,17640,19388,35911,1167803,19073,29055,1016235,206802,111908,600357,9850,8228,88057,1016519,1018541,1058561,1060272,1174603,4221341,5146027,1748241,1746727,29995,1103485,1059669,1060944,1175579,4222556,5146422,1747489,1747164,1737291,1143404,1115055,1023497,1024552,1169318,207794,129683,147044,3860589,159548,1176257,576088,573931,573301,1373574,1304107,1310818,581036,1108674,576126,676013,1354131,1353680,1349268,1347093,2030009,2028390,1347839,1346385,1488152,1482650,1473459,1004139,1666386,22600,46015,679985,668518,662750,1394461,1386846,1367305,1365086,1357231,5234352,680196,671416,1386883,1376256,576220,597789,591070,1376423,2018974,3412265,2518412,576266,615743,604662,3413126,3407334,604684,2555917,2554559,688986,576281,655391,654506,1353265,1346065,3412347,3400744,576322,718243,711399,577445,2788372,2755568,576363,1580606,1550862,2786399,2754775,2754310,2555332,2555244,684951,1581456,3406180,3404107,2541262,2540135,576407,755128,754260,3403609,2540274,2539552,2555713,687479,755215,3404690,2518880,576429,769725,760807,577240,2556466,2584263,571762,414676,768517,3406579,684109,3862201,3865432,3782374,3702094,4911782,688931,1023942,1049274,183532,264924,1570071,1115182,1063199,1067904,1177416,4269764,3453962,3443487,21995,14281,1064941,1069324,1151348,1464649,1757831,1463645,1746094,2171758,2482013,2153569,2451888,2690850,1115963,1078577,1019310,1020744,1167722,1469548,1146063,1458802,1756283,1746374,2172407,1117482,1107203,1101897,1095846,1096741,1196614,1265944,1698714,2150540,1755232,2180893,1369558,1717722,1163038,3386416,1499774,1996513,2248636,2602803,2789212,2789046,2788724,2785421,2784064,2783435,2781507,1719404,1207124,1504777,1999079,1592007,1598536,2065210,2150720,1504879,1999403,2250228,2606703,2801618,2942709,2801454,2942258,2249984,2606210,2795802,2940764,3126150,3209457,2801296,2942620,2942689,3126389,3209567,3236077,3255423,2786954,2930031,3123188,2929832,3122832,3200768,3235833,2942502,2942248,2942241,2942489,2942554,2942778,2942130,2942341,2942718,2942434,3123850,2800284,2786152,2799676,2942713,2801704,3209299,2942254,3122763,2855861,2941288,3126636,3209799,2942399,2940691,3208275,2942406,3123323,2159850,2458914,1718698,2942069,2855842,2801274,3122844,3201415,3386262,2942509,2802019,2942929,2942441,3255428,3235816,2942194,2940697,2942250,2940776,2795326,2939896,3126156,3201292,2942208,2800745,2940890,3123059,2782225,3235867,3240886,2942345,2802174,2929947,2159651,2250070,2603915,3255406,3386268,2159621,2159677,2786293,2800137,2603905,2802339,2942941,3201666,3126776,2800488,2942384,2942445,3123575,1718710,2800291,2801968,3240782,3123446,2159910,3209271,2929993,2795334,2800168,3123025,2942705,2786970,3126097,2604087,2940093,3209805,3235883,3247696,3208362,2942420,2800759,3200752,2782165,3208267,2942270,2782129,2942696,3208303,1994345,2151528,1494330,1495429,3201303,2941526,3255479,3264097,3264229,2782086,3386548,2942949,2941815,2786361,2782417,2604126,2800213,2942428,-1,3235993,3248374,2942819,2603579,2159719,2942953,2942117,3127385,3123703,2942499,2942564,3123246,3201123,2942575,2782274,2802003,2942102,3386242,2942923,1141320,3386318,3235859,3208366,2942468,3236086,2799924,2800438,2794501,3201109,3123854,2855932,2941294,3386256,3201255,2802352,3209576,1141312,3122781,2942630,3201355,2942337,2940827,3209265,2930163,2782072,1718696,2786974,2800368,2801284,3240040,3247744,3126830,2940770,2941402,3386532,3208328,3200822,2801924,3201193,2802187,3122791,3126390,2942291,3209333,3208335,2929972,2458903,2159846,2942052,2782191,3264177,2799255,3127355,1141339,2800178,3201223,1718703,2800922,3201623,2801261,2802032,2782172,3247724,3123414,3235910,3240091,2782048,2930138,2800171,3247700,2799886,3209795,3126138,2942774,2930036,3209273,2942616,3248014,2800958,3386557,3264243,2782507,3386310,1495639,1984487,2786413,2782536,2794534,2604400,2942701,2782368,2458990,3255612,2855835,3247770,3201673,2782500,2942676,3240117,3263989,3240750,3386049,3208341,2942007,3123064,2800514,2941003,2604029,2942475,3123073,3203803,3264248,2942479,3240098,2942536,3201446,2942395,1985156,3255470,3386052,2942668,2604279,2942602,2802361,3255461,2603964,3123863,3200836,2942431,1718726,3123428,2942486,3209882,2801733,2604026,3123557,2800521,2800311,3247988,3123529,2942136,2782569,3126240,3125995,2941009,2782087,2942277,2942682,3247868,3208443,2941078,3240132,2782238,2942133,2801144,2800445,2159808,2802193,3201665,1141328,2942057,3123096,1096538,1097703,1231489,1616442,2071860,3386447,1103527,1099771,1098003,1081844,1187815,197178,4026118,826433,1890600,1009979,1674557,1670351,1666234,17778,1104821,1105034,1231670,3912688,5030738,1180959,1662720,19817,47136,2780401,1373686,1718506,3209809,2159912,2603426,2604425,2799696,2786159,2603911,3127039,3123560,2942412,3209459,2942609,2800235,3248130,2604046,2941194,3203944,2941513,2800495,3127022,2782361,2941804,3200977,2941565,2782402,3255415,1994148,2800541,2799863,3123793,2929856,3122912,3207921,3209705,3209505,3201484,2786983,3248199,2800379,3200907,3240239,3201754,3127054,2942140,1494336,3201562,2939968,2782324,2942415,2942047,2930176,2800994,2800715,2942543,2458919,2941874,2940705,3126024,2800538,2604214,2786914,2786211,3123654,3208396,1718713,2942034,2801063,2603960,3255430,2941887,2941952,1984885,2798736,2802200,3247824,3127123,2794688,2942634,3209807,2786206,1719446,2940701,3264259,2783130,2783096,3208411,2942039,3240543,3126972,2604156,2786114,2800392,2802045,2801721,2799350,3126367,1118014,1100104,1098945,1099460,1234173,3858072,1945833,1967876,2002666,50595,1118248,1113495,1111096,1082825,1071728,1181848,3911561,5174627,645588,1128926,1125653,1123106,1124161,1247849,4060658,1779708,1777404,971371,920035,1125014,1127060,1244406,3966133,6762747,7041520,971621,862548,5024494,1122713,1123668,1247018,4057217,1029332,395517,645378,1125755,1124415,1105266,1232186,3959018,1724568,392369,387748,387612,1122654,1123560,1246819,4010292,5193272,2679417,2752526,1125491,1127428,1245397,4273280,1703186,1703655,1713522,1084828,1126421,1099327,1233833,3870456,5029892,1976359,1944298,1941932,1939189,1429311,1678695,26619,1128325,1129802,238773,237633,1090855,1117706,34329,30708,30284,691565,684020,1942562,1090845,25053,1168971,1771925,1418602,3664327,3643662,3869835,2446147,3083998,848708,3959700,5031053,1899182,1183664,1662484,1122746,1123777,1247194,4030702,8425851,1278820,1712893,49988,1712953,50482,1713244,1122197,1123272,1246307,4046125,1956113,1952427,1091675,1076436,622986,616165,1128983,1125690,1027062,1022594,1495796,1126728,1127620,1248129,4228528,1705207,1741057,32454,689037,678652,1122415,1099174,1233405,4007656,1007795,864160,247516,1953150,1093151,1166117,3966978,8342743,8064496,7997180,1166792,1264404,974514,1662428,1166733,1090742,21058,633316,1124609,7776260,7659581,5282374,5282350,5282234,1713395,1968457,687120,8342690,8636531,7997319,924292,1122797,1123891,1247406,4094092,5910841,9343140,6762706,7029132,1703760,4228737,8581248,8229801,5114726,7776208,2345962,795903,578030,577884,1029473,924448,1151453,4045476,2635462,2634756,7890829,8003101,7986530,1095176,688297,683863,664977,663330,2480692,682151,665802,1299092,1927285,1123074,1124036,1247645,4056385,5140732,1889731,1078205,1011636,1713423,2003357,50380,1741288,21239,1122272,1123373,1246485,4012348,8459115,8600581,1122090,1098413,1232834,3869039,6763302,6735915,7198304,1740689,1125252,1127234,1244932,3931246,10041409,3869282,6765102,6736488,1244364,3386200,4030269,1051771,4045036,2681612,2677327,792952,991494,3965653,8747452,4055706,1416593,864235,3965602,5112943,5282289,3869149,827384,1096058,1889017,1013392,1888891,1964028,6762685,2444170,2431792,2049644,2041134,1069671,1013695,1090825,3958903,978436,5024336,1013428,1669709,1672548,1777432,2250619,2235523,1117645,32308,4094899,8482874,1201963,28040,1124750,1105427,1232689,3913479,5721612,4010732,8423928,585691,645392,1703784,7029201,7019159,7136308,1705809,1427723,1681262,4045859,778856,10041392,2450653,5697744,4061582,8062365,8171967,907068,613969,4273378,8542760,8540725,8196165,754667,687245,4093978,7198103,7139968,4131479,4271573,3457925,3457032,8007325,633319,1129691,1704411,1901642,8542502,1703269,1737827,1716204,51099,237812,234552,1313430,932156,2748,1777386,1681378,8454474,7755092,7752712,8163192,8159657,1117658,24494,24237,3870604,2425400,8398602,533818,2445832,3016650,3110269,687500,1166173,1942776,2002345,50985,3870340,8392228,921304,8078904,1122396,1124236,1247964,4048755,1956206,1964206,1947894,1091699,2045371,3386501,5193707,5282351,1676801,1091780,1106707,14719,1087124,1108391,14863,12779,11240,10043,9916,1104614,11084,3386047,12049,10259,13401,13567,587412,587360,534467,12001,5883652,1129085,1135071,1315390,981638,932435,664997,8163274,387401,678017,3914008,5031430,1899278,1183895,1660240,1146027,1942885,1936117,1968630,50080,1681391,1669508,26121,16521,6815672,1128160,1132790,1250040,1252060,1135039,1249338,1688998,3969852,8280064,8017338,677952,1134752,1255331,1693937,207935,110520,3842504,1165077,576876,615061,1338210,1134827,1255523,1694394,205493,13882,3841337,141614,1303312,2070829,2068650,1331322,205598,169058,169143,7608,4337,170710,273567,4914898,4885284,4885244,10323746,10323650,10323479,678230,205953,112180,172174,275117,274912,28448756,-1,-1,937645,-1,-1],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":1516,"name":[0,2,3,4,5,6,7,8,9,10,11,12,14,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,258,259,260,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[-1,0,0,0,0,0,0,0,0,0,0,0,1,2,2,1,1,1,1,3,3,2,2,0,2,0,0,0,0,0,0,3,4,4,4,4,4,4,4,3,3,3,0,0,0,0,0,0,0,3,3,5,5,5,5,6,6,6,0,0,0,0,0,0,0,6,6,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,8,2,2,2,7,7,0,0,0,0,6,2,2,2,2,0,0,1,1,3,3,3,3,6,6,6,9,6,9,3,3,3,5,10,10,10,3,11,11,11,11,11,11,11,11,2,3,11,11,11,11,11,11,2,11,11,11,11,11,1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,2,6,6,2,2,2,2,1,1,6,0,0,6,6,0,12,12,12,12,12,12,12,1,12,12,12,12,12,12,6,13,12,12,12,6,14,14,14,2,2,14,2,2,14,14,14,15,15,15,15,15,9,9,9,9,15,15,15,16,16,16,16,15,15,15,15,15,15,6,17,17,17,18,18,18,18,15,19,19,19,19,15,15,6,19,19,12,12,12,6,6,19,19,19,19,19,20,21,21,2,20,20,21,21,2,19,19,21,21,21,21,2,2,2,2,22,22,22,21,21,21,18,18,18,17,17,17,17,17,17,17,17,17,17,17,2,17,17,17,17,17,17,17,17,17,17,17,9,9,9,12,6,6,6,1,1,1,1,1,1,1,1,6,13,13,5,2,13,21,1,6,6,2,0,0,0,1,1,1,1,1,12,12,19,19,5,2,1,1,1,12,12,19,19,19,2,1,1,1,1,6,6,6,12,6,19,19,19,19,2,2,2,2,2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,21,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,19,19,19,2,19,19,19,19,19,19,19,19,19,2,2,19,19,2,12,12,12,12,12,2,1,1,6,6,2,1,1,1,1,12,12,12,10,10,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,12,12,19,19,19,19,19,20,1,1,1,12,12,19,19,20,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,19,19,19,21,1,1,1,1,1,1,12,12,2,1,1,1,1,1,12,12,12,12,12,1,1,1,12,12,12,12,12,12,1,1,1,12,12,12,2,1,1,1,1,12,12,12,12,12,1,1,1,12,12,12,12,1,1,1,12,19,19,19,2,1,1,1,12,12,19,19,19,19,19,19,20,1,1,3,3,3,3,5,5,5,2,2,19,3,5,2,12,12,12,12,12,12,12,8,12,12,19,19,19,1,1,1,12,12,12,19,21,19,21,19,1,1,1,12,19,19,19,19,19,19,19,19,19,19,19,1,1,1,12,19,19,5,2,2,1,1,1,12,12,12,12,19,19,19,12,12,12,12,19,19,12,19,19,3,5,2,1,12,12,12,12,12,19,19,2,12,12,12,8,1,1,1,12,12,12,12,12,19,12,12,12,12,12,12,12,12,12,12,8,2,12,12,12,12,12,12,19,19,19,19,19,19,19,19,19,19,1,1,1,12,12,19,19,19,19,19,21,19,5,1,1,1,12,12,12,1,1,1,12,12,12,12,19,1,1,1,12,12,12,12,12,1,1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,19,19,19,19,19,12,12,12,12,12,12,19,3,12,12,12,19,19,19,12,12,12,3,5,12,12,12,5,1,1,1,12,12,12,12,12,2,19,12,12,12,19,19,19,12,12,12,12,12,12,12,12,8,2,12,12,12,12,8,2,12,12,12,12,12,12,12,12,2,1,19,19,12,19,19,19,21,3,3,3,2,23,12,19,12,12,12,12,12,3,5,5,12,12,12,12,12,12,12,2,19,19,19,21,12,12,12,12,1,1,1,12,19,19,19,19,12,1,12,12,19,3,3,24,2,2,24,24,24,24,24,2,24,1,24,24,24,24,2,2,2,24,12,1,1,3,2,2,19,12,12,2,12,12,19,19,19,2,19,19,19,21,19,19,5,5,12,1,1,1,1,1,1,1,12,12,12,2,1,1,1,6,6,12,19,19,19,19,1,1,1,6,13,12,6,19,19,19,19,6,6,6,0,0,12,2,12,12,12,12,12,12,2,6,6,2,2,2,7,-1,-1,2,-1,-1],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"vulkan-test","isMainThread":true,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353001.849467,"resourceTable":{"length":25,"lib":[1,2,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"name":[1,13,15,22,36,56,61,94,99,126,134,139,198,214,220,232,245,257,261,267,287,289,308,1396,1439],"host":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"type":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]},"samples":{"length":3588,"stack":[0,11,33,41,52,52,52,52,52,52,61,67,83,84,85,88,88,88,88,88,88,89,94,95,96,103,84,84,104,104,104,104,104,104,105,106,107,108,110,111,123,125,84,126,127,128,129,134,135,136,108,149,153,168,175,180,183,185,185,185,185,185,185,186,188,207,218,226,242,255,257,259,265,267,271,273,277,281,291,299,309,322,326,335,344,347,361,366,388,396,404,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,423,429,439,455,464,477,490,502,518,538,559,568,574,585,596,598,602,611,617,627,639,654,663,671,685,686,691,696,713,725,743,760,782,790,790,796,798,804,806,807,818,819,820,821,822,823,824,825,826,796,796,827,796,828,828,829,830,831,832,796,833,834,835,834,798,831,836,796,822,830,837,838,820,839,828,796,840,834,841,842,843,822,844,845,820,846,848,804,852,853,822,854,855,856,825,857,820,796,822,836,843,858,859,860,822,796,832,861,846,862,822,866,867,834,868,869,798,822,824,870,796,871,820,823,872,822,796,822,807,834,873,874,834,853,875,876,834,846,832,861,796,834,853,877,878,804,881,853,882,836,837,883,822,842,834,826,867,884,886,887,871,872,796,796,867,837,843,867,888,867,822,834,889,890,867,830,867,820,891,836,836,892,893,822,836,866,894,895,804,896,798,796,796,796,822,877,825,899,877,877,857,836,836,796,806,878,867,876,846,834,796,820,834,796,836,892,834,900,901,836,832,846,902,834,903,862,796,834,820,796,822,905,907,804,908,910,872,804,886,895,866,895,834,842,912,796,834,872,884,857,884,914,857,916,917,852,876,826,866,820,822,918,840,828,927,830,822,867,822,822,842,831,875,820,796,836,928,929,840,836,796,833,930,872,846,804,796,861,905,842,853,931,934,891,936,937,823,834,938,895,836,940,941,824,836,822,822,796,834,820,942,943,875,840,834,944,834,891,945,842,836,887,886,861,848,867,867,905,946,796,947,796,822,877,868,830,948,807,877,798,822,836,867,822,949,835,796,836,931,950,822,861,842,931,832,882,884,854,830,831,875,882,855,846,861,867,829,796,952,853,853,953,905,956,875,831,957,796,873,836,892,958,959,960,820,961,871,796,962,872,826,854,829,836,963,964,836,796,877,830,867,867,967,796,822,968,873,834,970,930,972,822,973,842,895,974,823,975,976,822,830,887,853,825,825,970,796,822,905,820,887,977,820,796,825,875,978,943,979,980,857,981,878,982,983,821,822,822,839,825,834,988,796,840,993,994,834,829,804,819,835,995,999,829,822,798,858,846,820,1000,872,872,826,1005,1006,875,1007,798,855,798,861,1009,868,822,889,836,1010,806,796,876,824,1011,1012,823,796,1013,867,796,834,867,830,887,884,822,1015,1016,822,931,1017,1018,1019,834,796,1020,806,828,796,881,820,822,872,892,820,822,836,820,867,836,1022,1023,1024,889,796,873,836,837,820,836,843,1025,1026,855,877,820,836,834,877,1027,846,836,834,870,834,822,1028,1030,796,1031,875,867,855,872,1032,867,1033,1034,867,834,882,836,820,822,822,836,867,843,834,1035,836,852,834,866,836,822,873,1037,931,873,838,1038,1040,1041,857,873,840,867,796,796,822,820,877,959,796,1042,820,873,804,858,871,1043,824,871,1044,887,1045,834,806,1046,836,822,877,1047,822,884,895,1048,858,836,822,804,1049,828,834,903,872,907,822,796,1050,887,822,796,1051,834,798,822,1052,843,806,874,1053,855,867,1054,1022,1000,822,822,822,796,834,852,837,836,858,1055,858,887,836,895,842,1056,846,867,1058,931,822,828,1059,840,825,806,872,1026,1044,1060,820,1062,943,887,833,820,1063,834,1064,846,872,828,798,1063,822,940,846,874,877,823,842,828,796,878,853,834,836,982,877,806,981,823,867,832,878,796,824,822,1065,840,853,1066,1067,872,861,834,824,867,853,884,822,875,807,818,857,831,905,857,1068,836,895,839,852,905,798,834,959,867,871,840,1069,1070,829,1026,836,1071,796,822,796,828,1072,830,822,796,822,834,834,978,836,796,1073,826,796,818,882,796,828,1074,895,867,878,806,895,857,867,825,1075,862,823,796,1076,871,1063,861,834,834,1035,858,829,1077,857,1078,853,798,1079,826,843,943,831,796,831,895,887,796,796,825,867,1041,1080,819,858,806,1081,970,798,807,853,796,796,826,895,1082,834,848,822,836,807,1084,872,1085,905,1086,867,874,807,796,836,871,1074,871,916,821,832,884,804,798,940,825,861,824,905,857,1087,1088,872,824,1089,1049,830,843,834,796,804,892,872,829,1091,1092,831,798,858,820,1093,820,830,912,857,822,834,959,857,875,806,872,822,798,938,836,822,836,1056,867,836,1094,892,796,855,834,889,822,1095,895,1096,1049,823,1097,836,1098,834,822,846,982,853,1049,822,820,884,834,834,846,905,820,1099,1100,796,1101,1031,1102,857,877,884,822,887,796,834,796,853,855,804,806,796,807,1044,806,822,1103,840,820,1104,1105,822,854,1066,834,1049,822,875,822,1000,857,1011,1106,796,892,822,873,1107,1105,1108,1109,867,822,1086,1110,834,852,822,1059,857,840,1112,836,846,871,796,871,836,871,834,822,826,806,796,798,883,848,884,853,822,825,895,867,855,796,836,796,837,820,914,964,862,870,895,867,1113,840,836,821,1114,822,825,796,830,823,834,882,796,798,931,1105,828,1017,931,905,895,1115,861,853,796,846,798,822,905,871,822,822,798,804,828,823,832,1116,832,807,796,1000,1050,1117,798,834,796,871,798,1113,887,999,901,867,796,1118,822,1119,796,1120,846,796,1121,832,820,895,1122,1123,796,822,952,858,834,840,862,857,822,895,822,1124,858,826,848,929,875,822,798,836,843,1125,878,843,838,834,846,892,822,822,873,848,876,834,834,826,1118,834,846,1041,852,834,796,835,798,867,806,1050,796,882,1074,861,830,1126,820,820,861,822,796,872,828,830,867,822,834,1127,1030,821,836,852,834,1128,1129,873,1104,846,895,1056,853,796,826,822,1130,877,862,822,1131,1026,1063,950,796,1132,1056,1133,858,1134,907,1074,959,853,796,867,857,832,968,874,848,1135,882,822,796,881,828,804,836,834,874,796,834,867,796,822,1136,1137,857,883,838,830,1006,887,848,884,825,1138,820,870,843,994,868,1139,875,1140,842,1058,881,872,796,822,798,840,1131,796,822,931,796,820,804,1141,840,858,1052,867,834,823,867,834,901,1044,798,807,882,968,980,834,830,828,1143,836,884,868,1058,832,834,1144,806,916,828,1145,1146,822,1000,855,1148,796,820,804,887,824,1150,820,822,843,1152,834,822,882,820,895,822,804,836,806,830,1108,835,796,983,870,834,820,929,861,840,894,825,1153,882,834,1154,871,821,1136,862,1155,887,871,900,828,884,846,867,806,830,931,796,1049,970,821,929,1156,1157,959,824,798,1158,834,1160,807,796,1108,834,796,831,874,855,877,884,1085,1161,843,834,823,831,878,855,1032,867,866,836,822,1162,1163,822,1138,855,820,822,852,1131,836,871,804,834,796,887,822,892,878,822,1054,820,852,807,836,1030,1164,843,1166,807,1168,842,875,824,884,806,796,1075,876,858,836,875,1105,866,1169,870,796,1170,834,843,836,871,867,882,830,1171,796,842,859,836,836,828,882,804,834,1172,1058,873,1032,1032,807,828,796,834,1173,1128,859,853,867,843,829,1056,848,804,822,823,842,798,1049,875,872,831,832,1174,855,1175,870,834,1176,1177,973,807,834,892,1178,830,1012,931,832,1179,854,822,1180,1181,848,834,1182,887,828,843,1063,1183,1056,858,833,930,833,1012,834,873,822,830,1184,1153,804,824,959,1185,832,1186,1173,853,945,853,1164,829,974,855,1172,853,1075,828,830,843,825,1187,843,1172,1153,1187,853,853,930,828,853,820,1153,872,853,1164,840,1188,884,1187,807,823,834,827,798,882,798,1153,1178,872,834,1189,798,804,1190,856,1191,964,1188,1193,796,964,825,1194,872,1196,1173,1197,1198,1199,822,884,999,1200,1189,1060,1201,1189,1185,1184,833,1202,1203,835,834,796,1153,974,974,1189,1153,995,1204,848,1205,825,822,1206,872,828,834,830,1207,1138,830,835,974,1188,895,905,1012,1153,1173,826,822,1173,796,848,891,908,1208,824,828,867,1185,848,873,848,804,881,872,807,1189,1049,824,1178,1209,1210,1051,822,1211,1049,875,853,843,1212,822,834,1213,1214,886,1189,1178,834,875,872,895,1178,848,1215,804,1164,1188,999,1200,1203,1216,931,796,1017,895,822,830,796,974,1010,822,942,1189,901,820,1012,796,835,892,822,826,822,1075,867,974,1217,1178,835,834,974,827,1189,1012,1108,931,1108,796,1218,825,830,822,1188,842,1203,1219,1220,835,1203,1216,887,832,872,1221,836,889,1222,1056,807,830,905,1203,1153,830,829,892,895,1188,1178,836,1222,1204,1223,1173,871,1198,1188,834,1224,1184,807,848,796,895,824,829,834,1225,1131,1226,855,1138,1204,823,878,854,842,853,895,867,871,1203,1227,1189,1216,892,835,1056,1173,884,873,828,833,974,1228,830,1178,820,807,931,1199,796,1189,830,1000,1199,869,974,1012,822,834,887,1229,796,1010,830,892,1012,1187,1184,862,1075,834,825,1092,1135,867,873,806,1017,1178,853,824,796,871,1230,1164,931,1188,872,828,1216,1201,1063,828,832,1172,1188,1193,804,970,1231,825,1216,806,830,834,1232,1164,1172,1222,1064,1233,796,1234,1235,873,892,798,796,834,1219,1049,861,1236,871,825,1153,1237,1216,843,830,796,1216,974,931,1172,882,1238,857,1121,1164,1187,1200,822,1219,843,1118,878,858,853,1153,1239,1185,1056,1240,857,1222,944,1188,826,1189,855,884,1153,843,825,882,807,1204,796,828,855,892,798,830,974,855,1153,861,1063,1241,1188,823,1189,1222,931,875,828,884,881,1242,878,1153,1243,1189,1243,1012,866,882,842,887,822,974,1075,892,1012,828,820,853,1178,1178,1116,798,1056,1200,1216,1244,1245,1058,895,828,1066,853,882,873,831,1216,1012,973,974,822,822,858,843,1153,875,1138,1247,1153,1228,1248,1249,842,1250,796,823,854,1216,1012,892,796,1251,1252,1012,1189,834,822,1255,1256,1242,1257,872,1085,1204,1216,822,1188,1164,892,974,834,1258,804,1260,1189,854,804,1153,798,868,1266,1283,1294,1310,790,1012,967,1164,1311,872,1312,798,834,834,1208,872,883,1216,1197,834,1233,830,1184,1153,1153,959,843,873,974,832,1178,1153,1189,1153,878,1313,829,1314,796,836,829,1316,873,858,804,1085,834,826,881,1178,826,824,796,1317,931,867,878,1257,1318,1319,834,1318,1188,855,806,1026,1320,834,1321,888,796,1322,807,855,930,974,964,1108,822,1188,1323,822,974,855,1321,1324,974,974,895,1224,1325,974,1012,1153,1081,1012,882,1153,822,804,798,1186,825,869,834,1201,1326,807,1248,828,824,1327,999,1116,942,1325,829,1193,1056,848,826,855,1056,941,1188,1010,853,960,1153,1203,804,892,846,1049,857,828,853,1122,884,829,822,843,1328,882,1200,830,974,1329,821,878,1330,1056,832,832,1153,974,1216,1248,1216,905,1204,1188,945,1200,826,873,1248,1331,1188,824,834,931,881,839,931,1332,882,1187,822,974,931,856,1228,1056,873,830,1188,834,796,1319,1328,820,868,796,1333,857,1184,853,1178,1329,1136,822,1108,826,1334,796,1201,878,1201,1189,1049,1335,828,1336,831,1333,1337,822,806,959,1338,1188,848,905,804,834,798,1328,887,1185,1012,1191,1138,1197,1339,905,981,1340,1189,1060,854,834,855,1341,848,881,1342,884,796,1138,1187,796,1343,1056,822,804,866,1344,1188,834,1328,848,892,942,1252,834,1345,1346,866,842,853,1012,1188,1085,871,1178,840,1166,804,1203,1347,824,1030,1153,821,806,1056,796,1216,1348,829,1193,1100,1319,1248,1178,843,830,1342,1164,1350,884,1172,1017,858,931,1178,1153,1185,1173,1351,884,1030,846,1188,1352,1356,995,974,1178,1357,873,1116,1358,1232,1359,1118,842,853,843,1313,1178,1242,829,1154,931,833,872,825,1056,1173,1223,829,959,798,1360,1203,871,1189,995,1221,981,804,1178,1188,1361,823,1154,824,1056,974,842,822,1218,905,1190,895,796,853,1362,806,873,979,796,796,857,1363,1105,978,875,1218,1056,895,834,796,1364,1049,832,829,807,974,1216,832,824,884,1185,1228,875,807,828,905,931,1106,974,828,846,828,825,1313,1216,1187,843,1365,930,1066,959,974,881,1366,1216,1188,798,822,826,1206,1346,1199,1216,1153,823,931,895,1367,889,1178,1113,824,895,1056,848,1131,873,1346,796,804,1188,1138,804,822,832,1153,848,1211,1216,1085,1124,1368,855,796,1369,1178,974,1370,804,905,1372,1228,853,1184,1153,853,1185,843,1373,1374,1173,853,870,1026,1368,832,945,833,1216,834,1375,848,967,1376,1138,1216,884,806,892,974,974,1178,835,1216,940,1178,1377,796,836,1173,995,848,1378,903,1184,1056,830,1153,832,1379,887,978,943,1056,1118,806,892,836,1216,796,884,1178,852,836,1348,855,1059,1240,804,1248,974,1153,834,1200,881,1362,1204,852,830,1236,1380,875,855,884,1189,1189,804,826,892,804,855,1172,884,820,843,1216,887,1198,829,974,1197,1153,1187,1381,1153,796,1153,1382,1230,796,829,1203,1097,1153,1383,1049,1189,839,1384,825,1153,1385,1189,1210,1200,1386,1216,1024,1199,1216,1177,833,1216,825,1178,828,1199,823,1164,1199,1311,1164,867,855,1173,822,1153,857,833,901,1314,796,970,1256,1153,1216,1173,861,1188,829,1189,846,1053,822,822,930,804,974,887,1185,867,1153,872,931,848,1050,892,1216,1387,842,873,796,1153,1388,877,822,1188,892,822,1321,853,892,1390,1085,848,1049,1108,931,872,830,1188,873,830,828,1185,974,1359,824,804,1056,960,798,807,796,901,1391,804,1060,858,1199,1189,1065,1248,853,1385,884,974,1011,822,1216,1153,1216,1392,855,821,1153,830,999,798,853,1108,825,798,830,1219,1012,857,942,830,1393,895,1257,945,1187,981,836,1394,974,826,1206,830,1216,1395,931,1166,857,828,914,1026,1388,1377,1396,1058,826,905,833,1049,862,871,832,1178,1184,905,1397,826,822,1203,1200,884,1102,887,834,1153,1189,1228,836,1049,941,798,1199,1189,895,931,822,1075,974,1153,1399,804,1216,1379,1121,855,804,820,945,878,855,1012,854,1172,822,1131,931,1400,1216,1172,1063,1401,1203,842,853,823,832,1402,1248,836,857,839,1403,881,895,1228,1203,1012,1404,1017,884,1216,931,858,1405,1406,826,1049,1153,974,796,824,798,1407,1408,1222,1236,834,872,895,829,1189,843,848,1058,1173,1409,873,1172,1185,1049,796,974,1012,1325,1184,959,1204,1012,834,995,862,862,853,1188,1410,1187,1392,826,1411,1403,796,1108,1189,1243,804,974,1412,870,798,842,873,1178,796,855,804,1103,1121,973,1188,828,1012,1413,1184,881,822,855,892,1414,1188,830,1184,1219,834,1333,1060,1049,804,882,1415,1388,1200,862,1216,1328,1416,828,1108,892,1012,1212,858,1188,1228,1188,796,1012,842,852,892,883,1172,1012,1184,1012,833,1012,1058,1204,828,1060,858,796,1248,804,834,834,853,861,1422,1328,798,878,824,1178,1423,1241,829,796,1178,1056,796,1200,822,1164,1153,884,931,1424,1392,1216,834,857,1425,872,872,855,1049,822,895,836,1178,1426,798,1184,830,977,822,831,1216,1427,828,905,834,1428,804,1010,873,796,1429,981,1430,1184,836,826,1093,1431,1433,798,968,1434,1178,1153,884,905,1178,796,828,1138,1248,855,974,1063,1108,858,1436,867,873,1172,873,1056,853,830,853,895,1012,836,1199,832,807,1153,829,796,872,1248,1189,1203,1153,1058,857,1401,895,823,901,1188,973,853,1056,1210,867,1200,833,940,842,1425,834,1189,884,981,1437,1189,798,1188,1138,798,834,834,1012,1438,843,796,872,892,828,1189,1153,1188,832,892,882,1439,974,1429,1189,1153,1178,1328,1056,855,1184,1210,895,866,872,826,1441,857,964,1075,1442,1433,872,1200,1173,1443,1394,822,834,829,834,822,1010,1189,1444,1378,825,859,1445,1178,798,825,834,1216,822,878,822,1178,858,1172,1049,1392,1216,1216,931,821,867,830,1108,1233,1164,1446,1189,807,1232,822,823,826,853,798,1447,1010,868,1173,1448,869,1027,1248,942,1449,1219,1026,826,1450,895,830,1451,1173,941,1452,1248,1189,832,1216,1444,796,1216,826,843,1153,959,873,878,822,1173,878,1153,804,853,798,1173,1453,1454,822,836,1189,1056,872,1185,882,884,852,974,1153,822,1204,843,855,1216,1056,796,1385,854,1236,892,873,823,807,1455,1189,884,872,1464,1476,1485,1495,1501,1504,1511,1520,1527,1535,1550,1567,1568,1571,1575,1579,1585,1591,1595,1599,1601,1616,1626,1633,1636,1640,1642,1643,1647,1648,1651,1652,1657,1660,1585,1585,1662,1664,1599,1670,1672,1673,1676,1678,1682,1684,1686,1652,1692,1585,1698,1702,1710,1715,1717,1550,1723,1730,1732,1585,1737,1741,1743,1550,1746,1750,1751,1753,1756,1762,1769,1770,1775,1776,1778,1550,1779,1782,1785,1788,1791,1794,1795,1800,1804,1805,1808,1816,1550,1818,1819,1820,1821,1822,1672,1652,1826,1832,1833,1769,1835,1837,1842,1844,1851,1585,1852,1858,1863,1864,1868,1652,1873,1876,1880,1885,1886,1892,1585,1894,1550,1896,1904,1906,1585,1911,1912,1917,1923,1925,1931,1934,1923,1938,1939,1940,1945,1945,1652,1946,1550,1686,1951,1952,1956,1571,1962,1550,1968,1686,1550,1970,1599,1971,1770,1973,1974,1550,1988,1998,2008,2020,2020,2034,2049,2054,2057,2067,2071,2074,2077],"time":[7353001.884843,7353002.546294,7353004.048839,7353005.341767,7353007.1034,7353007.11424,7353007.121223,7353007.128196,7353007.134718,7353007.14107,7353007.181043,7353014.829157,7353023.55973,7353025.903489,7353027.92915,7353029.129967,7353029.147289,7353029.156967,7353029.165844,7353029.176103,7353029.187644,7353029.210556,7353029.398413,7353030.526817,7353031.511375,7353032.458985,7353033.415241,7353034.382637,7353035.137582,7353035.154784,7353035.164241,7353035.173067,7353035.182665,7353035.191712,7353035.215325,7353035.467631,7353036.796515,7353037.956588,7353039.042072,7353040.095277,7353041.130259,7353042.156604,7353043.175566,7353044.190119,7353045.198311,7353046.213967,7353047.231927,7353048.234278,7353049.235237,7353050.234151,7353051.233887,7353052.230027,7353053.22832,7353054.226504,7353055.232862,7353056.25484,7353057.264144,7353058.06356,7353058.074039,7353058.082585,7353058.089969,7353058.096812,7353058.112841,7353058.148727,7353058.410621,7353060.559359,7353061.993628,7353063.376512,7353064.627722,7353065.811779,7353066.94395,7353068.015048,7353070.39867,7353071.273686,7353072.157879,7353073.077427,7353074.10261,7353075.047966,7353075.99813,7353076.948616,7353078.052094,7353079.015903,7353079.971017,7353080.927985,7353081.898727,7353082.877034,7353083.85505,7353086.070792,7353087.268304,7353088.141156,7353088.962652,7353089.688273,7353089.71931,7353089.74639,7353089.768922,7353089.789239,7353089.81153,7353089.835364,7353089.857585,7353089.900474,7353090.00107,7353090.025966,7353090.047877,7353090.063856,7353090.088101,7353090.108338,7353090.12558,7353090.150606,7353090.317785,7353090.332072,7353090.340788,7353090.350706,7353090.365714,7353090.383637,7353090.41243,7353090.562968,7353090.573678,7353090.581923,7353090.590579,7353090.599465,7353090.608642,7353090.73704,7353090.751957,7353090.763028,7353090.776272,7353090.786691,7353090.797982,7353090.815845,7353090.888619,7353090.956194,7353090.969569,7353090.978135,7353090.986881,7353090.994525,7353091.002159,7353091.02995,7353091.073842,7353091.084331,7353091.091995,7353091.099409,7353091.106522,7353091.113705,7353091.190066,7353091.202168,7353091.214742,7353091.225752,7353091.235199,7353091.244847,7353091.269132,7353091.314065,7353091.32743,7353091.336216,7353091.344682,7353091.352887,7353091.361262,7353091.400515,7353091.409481,7353091.417757,7353091.42503,7353091.433335,7353091.440539,7353091.528932,7353091.543298,7353091.554218,7353091.564948,7353091.575638,7353091.585476,7353091.607046,7353091.767502,7353092.502299,7353093.673031,7353094.838714,7353106.698396,7353108.486247,7353109.997829,7353112.741536,7353113.747373,7353114.761757,7353115.742237,7353116.719061,7353117.705212,7353118.695121,7353119.682795,7353120.67681,7353121.168218,7353121.672449,7353122.210663,7353122.811052,7353123.362139,7353123.86592,7353124.698016,7353125.695649,7353126.695245,7353127.690994,7353128.690139,7353131.014742,7353132.51348,7353133.538142,7353134.513393,7353135.496038,7353136.474044,7353137.461227,7353138.451085,7353139.43927,7353140.435149,7353141.439624,7353142.433018,7353143.427154,7353144.422222,7353145.419533,7353146.415733,7353147.414898,7353148.411058,7353149.408029,7353150.40505,7353151.405368,7353152.404052,7353153.402536,7353154.401351,7353155.415283,7353156.458349,7353157.461893,7353158.448996,7353159.438503,7353160.4281,7353161.420573,7353162.41526,7353163.411861,7353164.409303,7353165.407206,7353166.404668,7353167.402871,7353168.40382,7353169.404728,7353170.403162,7353171.400774,7353172.419275,7353173.457953,7353174.449214,7353175.435345,7353176.424492,7353177.416884,7353178.412232,7353179.410646,7353180.406485,7353181.403086,7353182.400147,7353183.39788,7353184.413104,7353185.441223,7353186.463231,7353187.499264,7353188.5152,7353189.536636,7353190.541582,7353191.510121,7353192.480262,7353193.457357,7353194.440663,7353195.429729,7353196.42105,7353197.414545,7353198.408981,7353199.405341,7353200.404877,7353201.403581,7353202.416762,7353203.444681,7353204.465486,7353205.492202,7353206.51434,7353207.519426,7353208.521556,7353209.522295,7353210.523163,7353211.52351,7353212.524359,7353213.524726,7353214.524492,7353215.525291,7353216.525007,7353217.525013,7353218.526012,7353219.528553,7353220.527949,7353221.526653,7353222.534314,7353223.540663,7353224.538896,7353225.536659,7353226.5339,7353227.531453,7353228.530047,7353229.528851,7353230.528417,7353231.527452,7353232.526347,7353233.526814,7353234.527573,7353235.526618,7353236.526404,7353237.525549,7353238.524805,7353239.530091,7353240.53139,7353241.530726,7353242.530191,7353243.529276,7353244.52775,7353245.528188,7353246.527123,7353247.526438,7353248.525794,7353249.52573,7353250.540865,7353251.540601,7353252.53633,7353253.535305,7353254.532507,7353255.548132,7353256.569689,7353257.561891,7353258.55218,7353259.544272,7353260.538969,7353261.534938,7353262.532661,7353263.530443,7353264.528987,7353265.527662,7353266.527137,7353267.526593,7353268.525508,7353269.525505,7353270.525051,7353271.524406,7353272.529783,7353273.531473,7353274.529967,7353275.529663,7353276.528237,7353277.527883,7353278.52837,7353279.527696,7353280.526971,7353281.526036,7353282.526173,7353283.525399,7353284.525215,7353285.525242,7353286.524788,7353287.524103,7353288.530622,7353289.532262,7353290.537999,7353291.538316,7353292.540167,7353293.541155,7353294.538737,7353295.535829,7353296.53303,7353297.530823,7353298.529588,7353299.528593,7353300.528098,7353301.528045,7353302.526729,7353303.526215,7353304.527694,7353305.534514,7353306.535873,7353307.534477,7353308.534775,7353309.532908,7353310.53057,7353311.528533,7353312.5284,7353313.527835,7353314.52677,7353315.526837,7353316.526233,7353317.525648,7353318.524994,7353319.525331,7353320.524296,7353321.534031,7353322.541481,7353323.539234,7353324.53916,7353325.537063,7353326.533944,7353327.532869,7353328.53499,7353329.534055,7353330.531817,7353331.530692,7353332.529086,7353333.52799,7353334.528067,7353335.527102,7353336.526257,7353337.526144,7353338.530789,7353339.533771,7353340.535201,7353341.535548,7353342.53301,7353343.530773,7353344.529137,7353345.528512,7353346.527657,7353347.527514,7353348.526469,7353349.525754,7353350.524959,7353351.524696,7353352.524292,7353353.523908,7353354.529545,7353355.542525,7353356.542492,7353357.538051,7353358.53414,7353359.531522,7353360.530036,7353361.529943,7353362.529539,7353363.528363,7353364.527719,7353365.527114,7353366.525999,7353367.525355,7353368.525091,7353369.524336,7353370.533249,7353371.538005,7353372.536068,7353373.538269,7353374.53504,7353375.532101,7353376.529784,7353377.530071,7353378.53126,7353379.529804,7353380.52973,7353381.528174,7353382.526748,7353383.525893,7353384.525189,7353385.524154,7353386.52412,7353387.534216,7353388.537238,7353389.53471,7353390.531481,7353391.529764,7353392.527637,7353393.526241,7353394.526038,7353395.526566,7353396.527003,7353397.526228,7353398.525604,7353399.525691,7353400.525096,7353401.524282,7353402.523858,7353403.52682,7353404.536915,7353405.536171,7353406.532911,7353407.536986,7353408.533937,7353409.530728,7353410.52867,7353411.527225,7353412.527151,7353413.52829,7353414.527165,7353415.525719,7353416.524954,7353417.523719,7353418.523645,7353419.523251,7353420.522557,7353421.533614,7353422.537057,7353423.534679,7353424.531751,7353425.529864,7353426.528338,7353427.528675,7353428.529674,7353429.529229,7353430.528204,7353431.526388,7353432.525182,7353433.202122,7353433.709049,7353434.218319,7353434.820781,7353435.288886,7353435.747303,7353436.271982,7353436.919888,7353437.651129,7353438.471474,7353439.326683,7353440.220534,7353441.141605,7353442.083885,7353443.042515,7353444.012486,7353444.991574,7353445.971765,7353446.959589,7353447.949026,7353448.94216,7353449.936627,7353450.932676,7353451.929988,7353452.924775,7353453.922618,7353454.932853,7353455.934343,7353456.935362,7353457.948673,7353458.944001,7353459.937716,7353460.933535,7353461.93238,7353462.925884,7353463.922895,7353464.920147,7353465.918241,7353466.916925,7353467.91634,7353468.915115,7353469.915062,7353470.916641,7353471.924302,7353472.924579,7353473.923474,7353474.920195,7353475.918248,7353476.916201,7353477.915276,7353478.915984,7353479.915299,7353480.913954,7353481.91387,7353482.912975,7353483.91212,7353484.911135,7353485.910441,7353486.910227,7353487.917127,7353488.926431,7353489.924113,7353490.936573,7353491.932632,7353492.929132,7353493.922707,7353494.919348,7353495.91664,7353496.915765,7353497.91499,7353498.914666,7353499.914432,7353500.913217,7353501.912142,7353502.911537,7353503.911063,7353504.923483,7353505.926074,7353506.924658,7353507.928232,7353508.928479,7353509.158594,7353509.713609,7353510.270497,7353510.793463,7353512.141433,7353513.459567,7353514.390747,7353515.305466,7353516.238138,7353517.189275,7353518.156321,7353519.129738,7353520.11087,7353521.103974,7353522.097919,7353523.092436,7353524.084298,7353525.077953,7353526.07278,7353527.068509,7353528.068085,7353529.068051,7353530.065804,7353531.064198,7353532.063744,7353533.064221,7353534.062675,7353535.061309,7353536.060525,7353537.065511,7353538.070376,7353539.070764,7353540.075259,7353541.073592,7353542.072016,7353543.071783,7353544.070187,7353545.06831,7353546.067265,7353547.067632,7353548.06817,7353549.070711,7353550.068594,7353551.070143,7353552.070711,7353553.069486,7353554.069342,7353555.082133,7353556.081909,7353557.077227,7353558.074298,7353559.070789,7353560.06755,7353561.065863,7353562.064828,7353563.065917,7353564.065432,7353565.084575,7353566.08365,7353567.077785,7353568.072603,7353569.069013,7353570.083536,7353571.085757,7353572.08342,7353573.08,7353574.079436,7353575.076968,7353576.071535,7353577.068275,7353578.069044,7353579.070403,7353580.07086,7353581.069444,7353582.06855,7353583.068296,7353584.069685,7353585.068239,7353586.065691,7353587.064345,7353588.069251,7353589.080519,7353590.079223,7353591.0793,7353592.077634,7353593.076588,7353594.076585,7353595.077995,7353596.077049,7353597.076155,7353598.076011,7353599.074425,7353600.073841,7353601.074288,7353602.073353,7353603.071216,7353604.069389,7353605.071751,7353606.075995,7353607.079368,7353608.077401,7353609.075224,7353610.072786,7353611.07145,7353612.072168,7353613.071484,7353614.072392,7353615.072619,7353616.074029,7353617.072713,7353618.071237,7353619.06918,7353620.067333,7353621.069955,7353622.082845,7353623.082161,7353624.078792,7353625.081954,7353626.082331,7353627.078451,7353628.076414,7353629.073666,7353630.071729,7353631.072026,7353632.069819,7353633.068313,7353634.100659,7353635.101517,7353636.094902,7353637.087696,7353638.094475,7353639.102066,7353640.094118,7353641.088273,7353642.08262,7353643.077507,7353644.07544,7353645.073944,7353646.071787,7353647.071122,7353648.070368,7353649.071557,7353650.071824,7353651.074485,7353651.603432,7353652.198311,7353652.778412,7353653.415178,7353654.142271,7353654.943851,7353655.869851,7353656.727435,7353657.597522,7353658.498576,7353659.436197,7353660.411148,7353661.396688,7353662.488164,7353663.555855,7353664.519395,7353665.482002,7353666.456422,7353667.756944,7353669.258226,7353670.173887,7353671.067788,7353671.998567,7353672.934525,7353673.878108,7353674.833662,7353675.800748,7353676.776761,7353677.760728,7353678.749314,7353679.741115,7353680.734319,7353681.729127,7353682.724775,7353683.722297,7353684.72008,7353685.797419,7353686.796995,7353687.77931,7353688.792491,7353689.790684,7353690.776364,7353691.764369,7353692.752233,7353693.742552,7353694.735526,7353695.731515,7353696.728186,7353697.725508,7353698.739049,7353699.737643,7353700.73181,7353701.726045,7353702.721784,7353703.718645,7353704.72322,7353705.729549,7353706.727762,7353707.723441,7353708.719621,7353709.717203,7353710.715417,7353711.714321,7353712.714528,7353713.714104,7353714.71378,7353715.713176,7353716.712482,7353717.711456,7353718.710712,7353719.709837,7353720.712418,7353721.719929,7353722.720908,7353723.719642,7353724.722754,7353725.721068,7353726.718841,7353727.716543,7353728.719505,7353729.721326,7353730.719479,7353731.717602,7353732.716587,7353733.714971,7353734.713164,7353735.711578,7353736.710593,7353737.715308,7353738.725844,7353739.728126,7353740.724135,7353741.719783,7353742.716875,7353743.714557,7353744.713763,7353745.714771,7353746.714067,7353747.71255,7353748.711896,7353749.71071,7353750.709715,7353751.709512,7353752.709358,7353753.708844,7353754.714682,7353755.717684,7353756.716769,7353757.714952,7353758.71519,7353759.713463,7353760.711797,7353761.712495,7353762.72824,7353763.728488,7353764.724497,7353765.721989,7353766.719211,7353767.717114,7353768.715137,7353769.713791,7353770.716473,7353771.742007,7353772.748355,7353773.740668,7353774.734122,7353775.727827,7353776.724458,7353777.72186,7353778.719131,7353779.716093,7353780.713945,7353781.712319,7353782.711084,7353783.710089,7353784.709494,7353785.70889,7353786.708816,7353787.716417,7353788.719329,7353789.721069,7353790.721417,7353791.718658,7353792.71612,7353793.714584,7353794.71397,7353795.713435,7353796.712701,7353797.712217,7353798.711192,7353799.710627,7353800.710073,7353801.709358,7353802.708604,7353803.70832,7353804.713897,7353805.718863,7353806.718088,7353807.716031,7353808.714435,7353809.651626,7353810.592834,7353811.158739,7353811.750412,7353812.399621,7353813.140589,7353813.955323,7353814.808058,7353815.698302,7353816.618983,7353817.561623,7353818.520654,7353819.387916,7353820.225112,7353820.749951,7353821.297553,7353821.942323,7353822.649309,7353823.433046,7353824.280652,7353825.16772,7353826.084914,7353826.447323,7353827.787748,7353828.717235,7353829.607028,7353830.530003,7353831.458287,7353832.403673,7353833.364377,7353834.336031,7353835.31563,7353836.300459,7353837.289776,7353838.311733,7353839.318543,7353840.307148,7353841.296766,7353842.287876,7353843.280439,7353844.308688,7353845.303015,7353846.29155,7353847.28269,7353848.276887,7353849.272355,7353850.268985,7353851.266908,7353852.265402,7353853.263435,7353854.26754,7353855.301209,7353856.297067,7353857.290372,7353858.283446,7353859.276359,7353860.270255,7353861.295048,7353862.290576,7353863.28363,7353864.276113,7353865.269838,7353866.266528,7353867.263059,7353868.260962,7353869.258774,7353870.262558,7353871.285968,7353872.300051,7353873.291562,7353874.284035,7353875.276368,7353876.270383,7353877.300666,7353878.298549,7353879.287886,7353880.280479,7353881.273623,7353882.26836,7353883.265231,7353884.261691,7353885.259934,7353886.257907,7353887.257043,7353888.280342,7353889.281772,7353890.275958,7353891.272548,7353892.267766,7353893.276068,7353894.305499,7353895.29682,7353896.285396,7353897.277327,7353898.271012,7353899.26596,7353900.263001,7353901.260593,7353902.258586,7353903.257231,7353904.259682,7353905.277482,7353906.274022,7353907.271354,7353908.267093,7353909.263853,7353910.261115,7353911.288061,7353912.28374,7353913.277986,7353914.27095,7353915.266619,7353916.265995,7353917.268245,7353918.266008,7353919.263179,7353920.260521,7353921.753829,7353922.757262,7353923.75243,7353924.749682,7353925.743126,7353926.739156,7353927.736367,7353928.734731,7353929.732634,7353930.731809,7353931.730413,7353932.729568,7353933.730447,7353934.730363,7353935.730531,7353936.730788,7353937.73386,7353938.742813,7353939.741267,7353940.740533,7353941.738135,7353942.736569,7353943.734241,7353944.733246,7353945.732561,7353946.732558,7353947.732886,7353948.733093,7353949.732949,7353950.732275,7353951.73124,7353952.730755,7353953.72959,7353954.75844,7353955.767864,7353956.761208,7353957.754523,7353958.7494,7353959.741693,7353960.739505,7353961.741395,7353962.738086,7353963.735087,7353964.73296,7353965.731083,7353966.730539,7353967.729695,7353968.730062,7353969.729237,7353970.731829,7353971.753696,7353972.755135,7353973.749532,7353974.7451,7353975.740448,7353976.73787,7353977.735001,7353978.733435,7353979.73197,7353980.731015,7353981.729739,7353982.728954,7353983.727879,7353984.727385,7353985.727051,7353986.726877,7353987.733226,7353988.744413,7353989.743308,7353990.741561,7353991.738713,7353992.735744,7353993.733006,7353994.73152,7353995.730615,7353996.729249,7353997.728324,7353998.72778,7353999.727346,7354000.727523,7354001.72798,7354002.728208,7354003.728966,7354004.741015,7354005.750319,7354006.746268,7354007.741706,7354008.738958,7354009.735929,7354010.733721,7354011.732306,7354012.731411,7354013.730556,7354014.72938,7354015.728736,7354016.728663,7354017.72879,7354018.748803,7354019.747337,7354020.743607,7354021.749976,7354022.747367,7354023.742465,7354024.738014,7354025.734794,7354026.732317,7354027.730791,7354028.730517,7354029.729812,7354030.729088,7354031.728173,7354032.728129,7354033.728938,7354034.728464,7354035.727919,7354036.727876,7354037.732581,7354038.741925,7354039.739828,7354040.736759,7354041.733821,7354042.731794,7354043.730087,7354044.728952,7354045.728949,7354046.728424,7354047.727479,7354048.726755,7354049.72623,7354050.726327,7354051.726164,7354052.72615,7354053.727029,7354054.743296,7354055.755825,7354056.750883,7354057.746712,7354058.739756,7354059.735916,7354060.735933,7354061.73651,7354062.734223,7354063.732046,7354064.73072,7354065.729324,7354066.728499,7354067.727815,7354068.72716,7354069.727137,7354070.727705,7354071.739012,7354072.740011,7354073.737243,7354074.735266,7354075.732958,7354076.731112,7354077.729896,7354078.729692,7354079.728737,7354080.728173,7354081.727318,7354082.741491,7354083.742299,7354084.738339,7354085.735821,7354086.733293,7354087.735744,7354088.739658,7354089.739044,7354090.736065,7354091.733266,7354092.731139,7354093.729533,7354094.728768,7354095.728475,7354096.728281,7354097.727586,7354098.727002,7354099.726578,7354100.726144,7354101.72602,7354102.726408,7354103.726134,7354104.73126,7354105.740725,7354106.740601,7354107.738935,7354108.735555,7354109.732807,7354110.732934,7354111.734343,7354112.732256,7354113.7307,7354114.729334,7354115.728129,7354116.727785,7354117.727241,7354118.727478,7354119.727284,7354120.727281,7354121.732537,7354122.733646,7354123.731839,7354124.731415,7354125.729929,7354126.728594,7354127.72823,7354128.728707,7354129.729495,7354130.72841,7354131.727645,7354132.727362,7354133.726858,7354134.727215,7354135.726951,7354136.726197,7354137.727305,7354138.73724,7354139.739181,7354140.736392,7354141.733424,7354142.731206,7354143.72972,7354144.729066,7354145.728632,7354146.727977,7354147.726992,7354148.726107,7354149.727276,7354150.727113,7354151.72734,7354152.726996,7354153.726181,7354154.737919,7354155.744879,7354156.74143,7354157.7434,7354158.737616,7354159.734036,7354160.734203,7354161.735773,7354162.733786,7354163.731358,7354164.729471,7354165.728246,7354166.727301,7354167.727207,7354168.726873,7354169.726049,7354170.727217,7354171.739627,7354172.740165,7354173.737006,7354174.734017,7354175.731519,7354176.729562,7354177.728196,7354178.728504,7354179.727449,7354180.726894,7354181.72656,7354182.725896,7354183.726353,7354184.72606,7354185.725906,7354186.725412,7354187.730578,7354188.73855,7354189.736993,7354190.734185,7354191.731707,7354192.730692,7354193.729366,7354194.728612,7354195.728398,7354196.727744,7354197.727259,7354198.726806,7354199.726662,7354200.726759,7354201.726265,7354202.726361,7354203.727831,7354204.738538,7354205.749975,7354206.745704,7354207.742395,7354208.738785,7354209.735185,7354210.744659,7354211.745598,7354212.741737,7354213.736935,7354214.733395,7354215.730727,7354216.729782,7354217.728737,7354218.727822,7354219.727097,7354220.727104,7354221.736859,7354222.73949,7354223.736672,7354224.733814,7354225.731336,7354226.729569,7354227.728574,7354228.727859,7354229.727566,7354230.728244,7354231.727519,7354232.727245,7354233.726811,7354234.726437,7354235.725873,7354236.725389,7354237.728832,7354238.738236,7354239.740427,7354240.737057,7354241.733608,7354242.73134,7354243.729594,7354244.728368,7354245.728736,7354246.727811,7354247.726916,7354248.726171,7354249.726569,7354250.726385,7354251.725881,7354252.725166,7354253.724592,7354254.73091,7354255.736417,7354256.736404,7354257.734677,7354258.7323,7354259.730063,7354260.729228,7354261.73208,7354262.732567,7354263.732904,7354264.731469,7354265.732828,7354266.74125,7354267.740115,7354268.739871,7354269.738756,7354270.738161,7354271.73897,7354272.736843,7354273.735126,7354274.735183,7354275.73507,7354276.734295,7354278.554196,7354279.557819,7354280.530786,7354281.505286,7354282.486858,7354283.472639,7354284.462777,7354285.4551,7354286.449536,7354287.445505,7354288.453317,7354289.449877,7354290.44807,7354291.444942,7354292.441752,7354293.439455,7354294.439131,7354295.440059,7354296.439795,7354297.437929,7354298.436373,7354299.435748,7354300.434873,7354301.434109,7354302.433464,7354303.43298,7354304.43441,7354305.439055,7354306.439843,7354307.439489,7354308.437562,7354309.435786,7354310.435602,7354311.43593,7354312.437188,7354313.436314,7354314.435629,7354315.43753,7354316.436524,7354317.435169,7354318.434204,7354319.433138,7354320.43561,7354321.449392,7354322.453987,7354323.449526,7354324.446697,7354325.442977,7354326.439828,7354327.43725,7354328.438649,7354329.436362,7354330.436589,7354331.436355,7354332.43525,7354333.436449,7354334.435824,7354335.434639,7354336.433624,7354337.442387,7354338.470776,7354339.467466,7354340.461382,7354341.454245,7354342.448321,7354343.443649,7354344.44031,7354345.439766,7354346.438931,7354347.437305,7354348.43658,7354349.435805,7354350.435051,7354351.433945,7354352.433211,7354353.433127,7354354.439726,7354355.450453,7354356.450189,7354357.446459,7354358.442528,7354359.440111,7354360.437703,7354361.437519,7354362.437286,7354363.436,7354364.435917,7354365.434892,7354366.434297,7354367.434975,7354368.43421,7354369.434478,7354370.433623,7354371.443478,7354372.448524,7354373.445355,7354374.442787,7354375.439638,7354376.43727,7354377.435223,7354378.436151,7354379.435357,7354380.435604,7354381.434629,7354382.435217,7354383.434472,7354384.434779,7354385.433734,7354386.43323,7354387.433126,7354388.437651,7354389.438099,7354390.436894,7354391.436019,7354392.436176,7354393.43471,7354394.435678,7354395.436346,7354396.436463,7354397.435729,7354398.435044,7354399.4347,7354400.435368,7354401.434353,7354402.434279,7354403.433645,7354404.438361,7354405.446943,7354406.446379,7354407.442819,7354408.440171,7354409.437773,7354410.435706,7354411.434801,7354412.435329,7354413.436949,7354414.435903,7354415.434898,7354416.434254,7354417.433489,7354418.432614,7354419.432331,7354420.431396,7354421.442793,7354422.449573,7354423.445873,7354424.445749,7354425.442369,7354426.440773,7354427.438436,7354428.43707,7354429.436516,7354430.435631,7354431.434345,7354432.4334,7354433.432906,7354434.432301,7354435.431687,7354436.431003,7354437.431801,7354438.440113,7354439.44571,7354440.443012,7354441.439953,7354442.437525,7354443.435759,7354444.435004,7354445.43484,7354446.436009,7354447.435585,7354448.435141,7354449.434296,7354450.433331,7354451.432396,7354452.432083,7354453.431498,7354454.438568,7354455.450427,7354456.448961,7354457.445421,7354458.44152,7354459.439593,7354460.437266,7354461.43558,7354462.436889,7354463.435763,7354464.434227,7354465.433383,7354466.432638,7354467.431973,7354468.43185,7354469.431947,7354470.434608,7354471.445996,7354472.446634,7354473.443234,7354474.440356,7354475.438108,7354476.436161,7354477.434666,7354478.435213,7354479.434258,7354480.434035,7354481.43332,7354482.433577,7354483.432843,7354484.431978,7354485.431283,7354486.430839,7354487.432188,7354488.444718,7354489.445576,7354490.4437,7354491.435011,7354492.421933,7354493.401071,7354494.38594,7354495.364808,7354496.340399,7354497.312675,7354498.294418,7354499.271452,7354500.249238,7354501.225912,7354502.205871,7354503.180171,7354504.154881,7354505.130072,7354506.105493,7354507.076757,7354508.049212,7354509.018633,7354509.994074,7354510.974084,7354511.951609,7354512.931409,7354513.907061,7354514.874407,7354515.847113,7354516.81968,7354517.792476,7354518.766715,7354519.735534,7354520.709994,7354521.688871,7354522.663622,7354523.637781,7354524.611589,7354525.579657,7354526.552964,7354527.528225,7354528.502054,7354529.471093,7354530.436176,7354531.411456,7354532.384183,7354533.364393,7354534.34295,7354535.315787,7354536.290627,7354537.265056,7354538.239516,7354539.214807,7354540.187263,7354541.156253,7354542.129891,7354543.104972,7354544.085232,7354545.065332,7354546.043739,7354547.01956,7354547.993299,7354548.965915,7354549.939673,7354550.906749,7354551.876851,7354552.849847,7354553.824197,7354554.799538,7354555.777023,7354556.743458,7354557.717347,7354558.692658,7354559.668259,7354560.642008,7354561.611859,7354562.583463,7354563.555969,7354564.53092,7354565.506832,7354566.478075,7354567.453106,7354568.427245,7354569.402306,7354570.37943,7354571.352698,7354572.331866,7354573.30893,7354574.286205,7354575.26367,7354576.241786,7354577.213371,7354578.190425,7354579.170044,7354580.147339,7354581.125365,7354582.099754,7354583.071409,7354584.044746,7354585.020178,7354585.995739,7354586.966873,7354587.941583,7354588.916814,7354589.892856,7354590.870472,7354591.847316,7354592.819782,7354593.794161,7354594.766456,7354595.741928,7354596.718011,7354597.688924,7354598.665607,7354599.643593,7354600.619385,7354601.593434,7354602.564808,7354603.542604,7354604.52085,7354605.501311,7354606.481852,7354607.459427,7354608.429198,7354609.402956,7354610.37945,7354611.357716,7354612.336875,7354613.306425,7354614.281516,7354615.259301,7354616.23877,7354617.219081,7354618.196005,7354619.177267,7354620.158349,7354621.144179,7354622.136973,7354623.129576,7354624.124794,7354625.120152,7354626.117844,7354627.114765,7354628.112588,7354629.111283,7354630.110057,7354631.109262,7354632.108888,7354633.107092,7354634.106557,7354635.106364,7354636.161172,7354636.643222,7354637.126735,7354637.740168,7354638.426575,7354639.182141,7354640.005201,7354640.861592,7354641.754722,7354642.676955,7354643.620717,7354644.599165,7354645.567593,7354646.543846,7354647.525178,7354648.51143,7354649.501318,7354650.494421,7354651.488467,7354652.485018,7354653.48275,7354654.491383,7354655.497972,7354656.494392,7354657.48991,7354658.484707,7354659.481869,7354660.479321,7354661.500857,7354662.497308,7354663.491724,7354664.487002,7354665.483873,7354666.480534,7354667.475231,7354668.474015,7354669.472379,7354670.471193,7354671.469467,7354672.477007,7354673.475602,7354674.473665,7354675.470315,7354676.469531,7354677.483664,7354678.48342,7354679.4798,7354680.475278,7354681.472229,7354682.470493,7354683.469197,7354684.469184,7354685.468429,7354686.467615,7354687.467701,7354688.471475,7354689.47048,7354690.469254,7354691.467949,7354692.466874,7354693.4664,7354694.480793,7354695.478325,7354696.474395,7354697.471466,7354698.469339,7354699.466701,7354700.466457,7354701.466073,7354702.465078,7354703.464764,7354704.46479,7354705.470738,7354706.470895,7354707.4697,7354708.466771,7354709.465786,7354710.463769,7354711.477982,7354712.476306,7354713.473297,7354714.470899,7354715.469463,7354716.466755,7354717.464598,7354718.464234,7354719.46382,7354720.462704,7354721.462441,7354722.467607,7354723.467814,7354724.46737,7354725.466565,7354726.46536,7354727.479523,7354728.480572,7354729.475399,7354730.472851,7354731.470162,7354732.468045,7354733.467591,7354734.466957,7354735.465811,7354736.465407,7354737.464923,7354738.463207,7354739.469084,7354740.469311,7354741.468106,7354742.466971,7354743.464984,7354744.479437,7354745.47744,7354746.474732,7354747.472054,7354748.470167,7354749.468691,7354750.466394,7354751.465328,7354752.464563,7354753.46445,7354754.464357,7354755.472579,7354756.478987,7354757.47662,7354758.474983,7354759.471634,7354760.469817,7354761.482347,7354762.478777,7354763.475388,7354764.472319,7354765.470091,7354766.468806,7354767.465797,7354768.465002,7354769.464588,7354770.463824,7354771.46393,7354772.468486,7354773.467891,7354774.465273,7354775.464629,7354776.464666,7354777.479049,7354778.480278,7354779.476668,7354780.473479,7354781.471091,7354782.469645,7354783.468009,7354784.467364,7354785.465237,7354786.472898,7354787.472975,7354788.469155,7354789.474271,7354790.472925,7354791.470457,7354792.468561,7354793.465882,7354794.479714,7354795.477728,7354796.474588,7354797.472141,7354798.470675,7354799.468498,7354800.467723,7354801.466818,7354802.466454,7354803.465569,7354804.464684,7354805.470492,7354806.468825,7354807.46783,7354808.466745,7354809.465459,7354810.463382,7354811.478156,7354812.476019,7354813.473331,7354814.471103,7354815.468225,7354816.465296,7354817.464551,7354818.464388,7354819.462732,7354820.461035,7354821.461222,7354822.467611,7354823.467908,7354824.466763,7354825.465938,7354826.465043,7354827.478725,7354828.480345,7354829.476364,7354830.471762,7354831.470116,7354832.468179,7354833.466894,7354834.465658,7354835.465134,7354836.46475,7354837.464075,7354838.466837,7354839.471833,7354840.470307,7354841.468861,7354842.465532,7354843.464857,7354844.477167,7354845.474609,7354846.472411,7354847.469032,7354848.467145,7354849.46598,7354850.465566,7354851.465282,7354852.463034,7354853.462681,7354854.462587,7354855.469987,7354856.471106,7354857.469901,7354858.468274,7354859.466578,7354860.466054,7354861.480007,7354862.479923,7354863.476243,7354864.472954,7354865.470125,7354866.468609,7354867.467123,7354868.465938,7354869.464662,7354870.464158,7354871.463744,7354872.468289,7354873.468286,7354874.467561,7354875.466406,7354876.46501,7354877.477971,7354878.477867,7354879.474538,7354880.486316,7354881.482295,7354882.477343,7354883.473513,7354884.470604,7354885.468186,7354886.46674,7354887.464333,7354888.466914,7354889.466911,7354890.466046,7354891.465392,7354892.464437,7354893.464323,7354894.478927,7354895.476179,7354896.473861,7354897.47004,7354898.467623,7354899.466808,7354900.466133,7354901.464207,7354902.463432,7354903.463038,7354904.462764,7354905.468081,7354906.46942,7354907.468806,7354908.467971,7354909.466836,7354910.466001,7354911.477489,7354912.475231,7354913.472573,7354914.490623,7354915.491792,7354916.48717,7354917.482859,7354918.478778,7354919.475148,7354920.47227,7354921.470012,7354922.489766,7354923.48842,7354924.483838,7354925.479316,7354926.475436,7354927.489899,7354928.488944,7354929.484403,7354930.480362,7354931.476592,7354932.474034,7354933.471346,7354934.469208,7354935.467923,7354936.467318,7354937.466484,7354938.465719,7354939.478098,7354940.477154,7354941.474365,7354942.470685,7354943.46974,7354944.482781,7354945.479451,7354946.4751,7354947.472161,7354948.469683,7354949.468428,7354950.466992,7354951.465957,7354952.464942,7354953.464037,7354954.463392,7354955.469891,7354956.477722,7354957.475705,7354958.474269,7354959.471782,7354960.468993,7354961.482415,7354962.479847,7354963.476227,7354964.472927,7354965.4706,7354966.468092,7354967.466636,7354968.46529,7354969.464746,7354970.464683,7354971.463818,7354972.469255,7354973.469301,7354974.468016,7354975.46671,7354976.465985,7354977.479357,7354978.480916,7354979.476685,7354980.473386,7354981.470227,7354982.469172,7354983.465572,7354984.464316,7354985.463371,7354986.463158,7354987.462874,7354988.468311,7354989.470411,7354990.469175,7354991.466397,7354992.465252,7354993.463074,7354994.478249,7354995.476122,7354996.473504,7354997.470445,7354998.468859,7354999.467323,7355000.465967,7355001.464982,7355002.464337,7355003.463603,7355004.461676,7355005.466983,7355006.468492,7355007.467747,7355008.467073,7355009.466168,7355010.465003,7355011.479516,7355012.478631,7355013.475061,7355014.471782,7355015.468282,7355016.464863,7355017.463898,7355018.463544,7355019.46309,7355020.462806,7355021.46137,7355022.46869,7355023.468016,7355024.46654,7355025.465524,7355026.464379,7355027.479003,7355028.480132,7355029.476101,7355030.472471,7355031.469783,7355032.467856,7355033.465939,7355034.464954,7355035.464109,7355036.463555,7355037.463161,7355038.466604,7355039.47665,7355040.475003,7355041.472265,7355042.480587,7355043.479542,7355044.490639,7355045.485466,7355046.482187,7355047.477755,7355048.473785,7355049.470646,7355050.468168,7355051.466461,7355052.465136,7355053.46395,7355054.462234,7355055.467981,7355056.469521,7355057.467564,7355058.465858,7355059.465173,7355060.464228,7355061.478511,7355062.476635,7355063.474117,7355064.47222,7355065.468399,7355066.466312,7355067.463764,7355068.464352,7355069.462666,7355070.4612,7355071.461357,7355072.466453,7355073.467542,7355074.471365,7355075.472184,7355076.473433,7355077.496402,7355078.49715,7355079.488922,7355080.482236,7355081.477063,7355082.474004,7355083.470845,7355084.468989,7355085.467522,7355086.466698,7355087.466444,7355088.470939,7355089.484902,7355090.482554,7355091.477872,7355092.473621,7355093.471183,7355094.484214,7355095.481055,7355096.477465,7355097.473905,7355098.471257,7355099.469671,7355100.467584,7355101.46708,7355102.465594,7355103.466883,7355104.465126,7355105.46917,7355106.481981,7355107.480946,7355108.47991,7355109.476761,7355110.473191,7355111.486352,7355112.487501,7355114.354169,7355115.468296,7355116.313246,7355117.258683,7355118.229195,7355119.208102,7355120.191929,7355121.181778,7355122.199176,7355123.195126,7355124.185134,7355125.176695,7355126.171753,7355127.167962,7355128.191001,7355129.184356,7355130.177119,7355131.170894,7355132.167134,7355133.162763,7355134.160846,7355135.158769,7355136.158135,7355137.157771,7355138.156726,7355139.163615,7355140.163321,7355141.161875,7355142.16049,7355143.159204,7355144.173898,7355145.170548,7355146.166257,7355147.162627,7355148.159759,7355149.156449,7355150.154823,7355151.153808,7355152.153163,7355153.151998,7355154.152025,7355155.157361,7355156.157859,7355157.155561,7355158.154947,7355159.154193,7355160.153738,7355161.169214,7355162.167237,7355163.162926,7355164.159386,7355165.155355,7355166.153889,7355167.152984,7355168.152139,7355169.151505,7355170.15094,7355171.150537,7355172.156544,7355173.158314,7355174.155356,7355175.154902,7355176.153926,7355177.152721,7355178.166423,7355179.164887,7355180.172628,7355181.168247,7355182.162032,7355183.158532,7355184.156265,7355185.154589,7355186.153132,7355187.150965,7355188.15543,7355189.156639,7355190.154883,7355191.155471,7355192.154555,7355193.15341,7355194.167533,7355195.164645,7355196.160684,7355197.157655,7355198.155287,7355199.153561,7355200.152526,7355201.15093,7355202.150345,7355203.150101,7355204.150138,7355205.161806,7355206.167524,7355207.164054,7355208.159102,7355209.156383,7355210.154627,7355211.16884,7355212.165621,7355213.16174,7355214.158491,7355215.155933,7355216.154257,7355217.152861,7355218.152126,7355219.151442,7355220.151218,7355221.149491,7355222.155469,7355223.154965,7355224.154732,7355225.155039,7355226.153653,7355227.153019,7355228.167712,7355229.165024,7355230.161394,7355231.158055,7355232.155757,7355233.152628,7355234.151633,7355235.151029,7355236.150334,7355237.14988,7355238.150468,7355239.157808,7355240.158246,7355241.156679,7355242.154753,7355243.153267,7355244.167329,7355245.165092,7355246.161392,7355247.158253,7355248.155905,7355249.154159,7355250.152773,7355251.150626,7355252.150092,7355253.149908,7355254.149714,7355255.155482,7355256.156831,7355257.155715,7355258.154129,7355259.153044,7355260.15265,7355261.166092,7355262.164566,7355263.161456,7355264.156985,7355265.153586,7355266.152119,7355267.150073,7355268.149548,7355269.149375,7355270.149391,7355271.149418,7355272.153192,7355273.156505,7355274.154378,7355275.153102,7355276.152177,7355277.151392,7355278.164934,7355279.164079,7355280.161852,7355281.159975,7355282.157217,7355283.154939,7355284.152001,7355285.151096,7355286.149389,7355287.149035,7355288.14807,7355289.156903,7355290.157802,7355291.156236,7355292.154519,7355293.153614,7355294.16939,7355295.167002,7355296.162721,7355297.159262,7355298.156373,7355299.154276,7355300.1528,7355301.151755,7355302.151,7355303.150796,7355304.150423,7355305.156881,7355306.16358,7355307.161413,7355308.158434,7355309.156207,7355310.152877,7355311.166319,7355312.164402,7355313.163598,7355314.160188,7355315.15757,7355316.155332,7355317.153536,7355318.15223,7355319.151265,7355320.150511,7355321.148664,7355322.152878,7355323.152434,7355324.15228,7355325.150985,7355326.149198,7355327.149005,7355328.163779,7355329.162924,7355330.160246,7355331.157307,7355332.15493,7355333.152111,7355334.149693,7355335.149299,7355336.148164,7355337.148261,7355338.14942,7355339.157411,7355340.160233,7355341.156824,7355342.153725,7355343.152168,7355344.16578,7355345.163443,7355346.160033,7355347.155822,7355348.154016,7355349.15276,7355350.151855,7355351.151161,7355352.150616,7355353.148809,7355354.149167,7355355.157349,7355356.157977,7355357.156471,7355358.153923,7355359.151224,7355360.150279,7355361.164773,7355362.162566,7355363.159266,7355364.156518,7355365.153078,7355366.151522,7355367.150647,7355368.150354,7355369.15023,7355370.148844,7355371.149382,7355372.1556,7355373.156959,7355374.155864,7355375.154108,7355376.152581,7355377.150615,7355378.164377,7355379.16232,7355380.159612,7355381.156853,7355382.154826,7355383.15306,7355384.151974,7355385.151049,7355386.150475,7355387.150772,7355388.150669,7355389.158911,7355390.157976,7355391.15659,7355392.154723,7355393.153087,7355394.166629,7355395.163439,7355396.16013,7355397.157031,7355398.154754,7355399.153158,7355400.151952,7355401.151277,7355402.149531,7355403.149858,7355404.149765,7355405.155542,7355406.157423,7355407.158251,7355408.156434,7355409.154477,7355410.152751,7355411.165691,7355412.164636,7355413.160856,7355414.157937,7355415.15554,7355416.153863,7355417.152497,7355418.151312,7355419.149125,7355420.149362,7355421.147796,7355422.153002,7355423.156145,7355424.155049,7355425.153433,7355426.152538,7355427.150792,7355428.16758,7355429.166735,7355430.164086,7355431.160166,7355432.156947,7355433.154609,7355434.153243,7355435.152198,7355436.151985,7355437.1511,7355438.150345,7355439.158617,7355440.158213,7355441.155946,7355442.15437,7355443.152913,7355444.168188,7355445.1654,7355446.161119,7355447.158501,7355448.155873,7355449.154106,7355450.15252,7355451.151274,7355452.151291,7355453.150807,7355454.150183,7355455.154287,7355456.156067,7355457.155172,7355458.153516,7355459.151098,7355460.150263,7355461.164005,7355462.162068,7355463.15945,7355464.156482,7355465.154164,7355466.152808,7355467.151903,7355468.151109,7355469.151125,7355470.149289,7355471.149065,7355472.154171,7355473.15526,7355474.152922,7355475.151536,7355476.150722,7355477.148765,7355478.161745,7355479.161943,7355480.159335,7355481.155114,7355482.153026,7355483.150238,7355484.148171,7355485.147647,7355486.147774,7355487.146588,7355488.145613,7355489.152733,7355490.156106,7355491.155181,7355492.153705,7355493.152369,7355494.166652,7355495.163493,7355496.159783,7355497.156694,7355498.154266,7355499.151759,7355500.150844,7355501.151111,7355502.150617,7355503.149982,7355504.149728,7355505.154394,7355506.153088,7355507.151011,7355508.149645,7355509.149241,7355510.149028,7355511.16274,7355512.160462,7355513.157704,7355514.155046,7355515.153179,7355516.151753,7355517.150708,7355518.150685,7355519.15006,7355520.149506,7355521.149673,7355522.154389,7355523.153303,7355524.152609,7355525.151524,7355526.150949,7355527.150144,7355528.163967,7355529.164164,7355530.160824,7355531.157325,7355532.153615,7355533.151948,7355534.152015,7355535.15124,7355536.150405,7355537.149721,7355538.149948,7355539.156837,7355540.156985,7355541.155649,7355542.153742,7355543.152196,7355544.164175,7355545.161837,7355546.158428,7355547.155719,7355548.153602,7355549.151976,7355550.151642,7355551.150707,7355552.149932,7355553.149819,7355554.162519,7355555.168527,7355556.169175,7355557.165114,7355558.160803,7355559.157443,7355560.154775,7355561.171112,7355562.169075,7355563.165986,7355564.161615,7355565.158005,7355566.155297,7355567.154141,7355568.152585,7355569.150167,7355570.149663,7355571.149129,7355572.154516,7355573.155815,7355574.1551,7355575.152021,7355576.149403,7355577.148819,7355578.161719,7355579.160614,7355580.157886,7355581.155197,7355582.153241,7355583.152636,7355584.151511,7355585.150486,7355586.149641,7355587.150029,7355588.149504,7355589.156063,7355590.154407,7355591.152951,7355592.151565,7355593.15086,7355594.165514,7355595.162495,7355596.159086,7355597.155556,7355598.153689,7355599.152935,7355600.15228,7355601.149832,7355602.149198,7355603.149155,7355604.14875,7355605.155099,7355606.158131,7355607.156896,7355608.155009,7355609.153193,7355610.150875,7355611.16625,7355612.163502,7355613.159531,7355614.15517,7355615.153043,7355616.152468,7355617.150261,7355618.163372,7355619.162878,7355620.159358,7355621.15657,7355622.161626,7355623.161772,7355624.159245,7355625.156046,7355626.154018,7355627.152613,7355628.166796,7355629.1654,7355630.1618,7355631.15812,7355632.156143,7355633.154246,7355634.151317,7355635.150663,7355636.150409,7355637.149605,7355638.149371,7355639.15635,7355640.156377,7355641.154681,7355642.152954,7355643.151789,7355644.165221,7355645.162121,7355646.158732,7355647.155894,7355648.154197,7355649.152691,7355650.151275,7355651.15039,7355652.150176,7355653.149662,7355654.149198,7355655.154074,7355656.154692,7355657.153687,7355658.152671,7355659.151707,7355660.150772,7355661.164233,7355662.162597,7355663.160189,7355664.1571,7355665.155614,7355666.153768,7355667.152512,7355668.151777,7355669.1494,7355670.147433,7355671.147419,7355672.152506,7355673.153284,7355674.152589,7355675.151704,7355676.149517,7355677.148822,7355678.162895,7355679.160488,7355680.157719,7355681.155672,7355682.153655,7355683.152119,7355684.151234,7355685.151131,7355686.150546,7355687.149832,7355688.149197,7355689.154544,7355690.15408,7355691.152764,7355692.15199,7355693.150624,7355694.163965,7355695.161728,7355696.158779,7355697.159587,7355698.15742,7355699.154872,7355700.151633,7355701.150587,7355702.149623,7355703.148958,7355704.148614,7355705.157698,7355706.163224,7355707.159675,7355708.157007,7355709.154529,7355710.152852,7355711.165362,7355712.162153,7355713.160386,7355714.157899,7355715.155331,7355716.153173,7355717.152359,7355718.151133,7355719.150308,7355720.149634,7355721.149029,7355722.153634,7355723.155525,7355724.154239,7355725.152894,7355726.152269,7355727.151044,7355728.163974,7355729.163169,7355730.160331,7355731.156901,7355732.154554,7355733.152707,7355734.151461,7355735.150556,7355736.148299,7355737.147705,7355738.147551,7355739.155563,7355740.157172,7355741.156097,7355742.15406,7355743.152785,7355744.164974,7355745.161835,7355746.165929,7355747.163131,7355748.15915,7355749.156071,7355750.154695,7355751.155002,7355752.153336,7355753.152001,7355754.151206,7355755.158917,7355756.161979,7355757.159231,7355758.154949,7355759.152572,7355760.150234,7355761.164748,7355762.162961,7355763.162898,7355764.159558,7355765.156389,7355766.154152,7355767.152195,7355768.149427,7355769.149153,7355770.14943,7355771.152422,7355772.171094,7355773.171862,7355774.16734,7355775.162688,7355776.159209,7355777.177349,7355778.175071,7355779.169438,7355780.164425,7355781.160314,7355782.155953,7355783.154136,7355784.15235,7355785.151195,7355786.149158,7355787.148804,7355788.148309,7355789.15577,7355790.156227,7355791.154521,7355792.153085,7355793.151188,7355794.166363,7355795.164476,7355796.161047,7355797.157557,7355798.15567,7355799.152762,7355800.151216,7355801.15001,7355802.149095,7355803.148781,7355804.148508,7355805.154566,7355806.154702,7355807.153627,7355808.152422,7355809.149944,7355810.148969,7355811.164003,7355812.163379,7355813.161412,7355814.157882,7355815.155525,7355816.153427,7355817.151781,7355818.150566,7355819.149631,7355820.147664,7355821.14732,7355822.155391,7355823.155509,7355824.154564,7355825.152827,7355826.151662,7355827.165213,7355828.165701,7355829.160488,7355830.157159,7355831.153248,7355832.151622,7355833.149044,7355834.148269,7355835.147705,7355836.147511,7355837.147338,7355838.147314,7355839.152611,7355840.151416,7355841.149408,7355842.148584,7355843.14806,7355844.163635,7355845.160937,7355846.157577,7355847.154979,7355848.153343,7355849.151987,7355850.149499,7355851.148724,7355852.14819,7355853.147676,7355854.147322,7355855.152679,7355856.152656,7355857.15172,7355858.149603,7355859.149129,7355860.148505,7355861.16366,7355862.163636,7355863.160598,7355864.155955,7355865.153307,7355866.151321,7355867.149975,7355868.14911,7355869.148596,7355870.148121,7355871.148008,7355872.154657,7355873.155084,7355874.163797,7355875.163834,7355876.159012,7355877.171702,7355878.169725,7355879.16297,7355880.158819,7355881.156231,7355882.154073,7355883.152227,7355884.149799,7355885.148804,7355886.147388,7355887.145792,7355888.146089,7355889.151716,7355890.151843,7355891.152321,7355892.151767,7355893.15006,7355894.165345,7355895.162637,7355896.158916,7355897.155928,7355898.15351,7355899.151954,7355900.150728,7355901.148411,7355902.148007,7355903.147803,7355904.14773,7355905.153598,7355906.155237,7355907.154913,7355908.153207,7355909.15143,7355910.150936,7355911.164358,7355912.161319,7355913.1584,7355914.155532,7355915.153274,7355916.151528,7355917.150372,7355918.149297,7355919.148542,7355920.147988,7355921.147745,7355922.152981,7355923.152126,7355924.151782,7355925.150907,7355926.150754,7355927.164275,7355928.162759,7355929.158889,7355930.15591,7355931.153392,7355932.151535,7355933.15009,7355934.149475,7355935.148881,7355936.148246,7355937.148063,7355938.147889,7355939.15533,7355940.156919,7355941.155193,7355942.153897,7355943.152231,7355944.165161,7355945.162794,7355946.159044,7355947.156115,7355948.153537,7355949.15168,7355950.150365,7355951.149189,7355952.148615,7355953.148431,7355954.147967,7355955.153765,7355956.15323,7355957.152265,7355958.15095,7355959.150936,7355960.150071,7355961.170275,7355962.166555,7355963.16011,7355964.156069,7355965.153451,7355966.151675,7355967.150289,7355968.149244,7355969.147267,7355970.145671,7355971.145798,7355972.151415,7355973.151582,7355974.150707,7355975.151756,7355976.15082,7355977.164262,7355978.164349,7355979.160649,7355980.156959,7355981.154221,7355982.152104,7355983.149165,7355984.14814,7355985.147686,7355986.147271,7355987.146978,7355988.146864,7355989.153162,7355990.151797,7355991.150261,7355992.149646,7355993.148912,7355994.163004,7355995.159805,7355996.156185,7355997.153567,7355998.15149,7355999.150014,7356000.148889,7356001.147984,7356002.156346,7356003.156152,7356004.153805,7356005.156857,7356006.155551,7356007.153565,7356008.152589,7356009.151494,7356010.150239,7356011.173048,7356012.169858,7356013.168382,7356014.169822,7356015.164699,7356016.160528,7356017.158451,7356018.155452,7356019.152954,7356020.151498,7356021.150072,7356022.155279,7356023.15251,7356024.151926,7356025.150731,7356026.149405,7356027.162716,7356028.162322,7356029.158542,7356030.155543,7356031.153065,7356032.151149,7356033.149713,7356034.148697,7356035.148053,7356036.147559,7356037.147365,7356038.146951,7356039.155063,7356040.154859,7356041.153013,7356042.151176,7356043.150031,7356044.161979,7356045.158941,7356046.155701,7356047.153053,7356048.151176,7356049.149731,7356050.148695,7356051.146598,7356052.146254,7356053.146131,7356054.146308,7356055.152135,7356056.152353,7356057.151638,7356058.150593,7356059.149628,7356060.147791,7356061.161643,7356062.184542,7356063.156477,7356064.144893,7356065.139359,7356066.13617,7356067.133822,7356068.131936,7356069.130319,7356070.129294,7356071.12842,7356072.136662,7356073.135997,7356074.13422,7356075.132785,7356076.133142,7356077.132167,7356078.148714,7356079.144623,7356080.139841,7356081.136191,7356082.133393,7356083.131346,7356084.130761,7356085.129786,7356086.128971,7356087.128698,7356088.127092,7356089.13362,7356090.133637,7356091.130789,7356092.128371,7356093.126634,7356094.141218,7356095.138439,7356096.134138,7356097.132091,7356098.130525,7356099.12934,7356100.128635,7356101.128001,7356102.127667,7356103.127183,7356104.126769,7356105.131945,7356106.132823,7356107.130606,7356108.129701,7356109.127694,7356110.12713,7356111.141252,7356112.139125,7356113.140575,7356114.137345,7356115.134347,7356116.132019,7356117.130373,7356118.127825,7356119.127,7356120.126907,7356121.12533,7356122.134214,7356123.13412,7356124.132394,7356125.130858,7356126.129803,7356127.128697,7356128.143421,7356129.141234,7356130.137413,7356131.134294,7356132.130915,7356133.12991,7356134.128825,7356135.128421,7356136.127696,7356137.127061,7356138.128381,7356139.13491,7356140.132241,7356141.130475,7356142.12972,7356143.128545,7356144.142056,7356145.138717,7356146.135327,7356147.132679,7356148.130763,7356149.129697,7356150.128862,7356151.126695,7356152.126341,7356153.126107,7356154.126054,7356155.138073,7356156.13812,7356157.135282,7356158.133114,7356159.131378,7356160.129842,7356161.143283,7356162.140655,7356163.141594,7356164.137994,7356165.134715,7356166.132196,7356167.13039,7356168.129335,7356169.12865,7356170.128066,7356171.128273,7356172.136094,7356173.134608,7356174.132822,7356175.132768,7356176.131072,7356177.129836,7356178.143048,7356179.139377,7356180.135838,7356181.131737,7356182.12987,7356183.128835,7356184.12796,7356185.127646,7356186.127022,7356187.127169,7356188.126233,7356189.132953,7356190.132128,7356191.130882,7356192.128194,7356193.127179,7356194.140901,7356195.137712,7356196.134533,7356197.130903,7356198.129136,7356199.128091,7356200.127958,7356201.127914,7356202.12724,7356203.127357,7356204.127794,7356205.133281,7356206.132987,7356207.130579,7356208.129023,7356209.128109,7356210.126152,7356211.140876,7356212.138578,7356213.147141,7356214.141717,7356215.137476,7356216.134137,7356217.131979,7356218.130644,7356219.129378,7356220.127762,7356221.127178,7356222.132645,7356223.13188,7356224.130674,7356225.129369,7356226.128264,7356227.127499,7356228.142393,7356229.140436,7356230.136906,7356231.134949,7356232.132422,7356233.130775,7356234.12955,7356235.128865,7356236.128962,7356237.128598,7356238.128034,7356239.135004,7356240.136403,7356241.133945,7356242.131577,7356243.130011,7356244.142802,7356245.138761,7356246.135421,7356247.131751,7356248.128592,7356249.127847,7356250.127644,7356251.1273,7356252.127176,7356253.126272,7356254.124645,7356255.133028,7356256.137182,7356257.137069,7356258.13437,7356259.131942,7356260.130206,7356261.143217,7356262.140068,7356263.140485,7356264.137517,7356265.134337,7356266.133773,7356267.133579,7356268.133716,7356269.133463,7356270.132618,7356271.133436,7356272.141888,7356273.20408,7356274.197124,7356275.185509,7356276.172843,7356277.197174,7356278.190779,7356279.17677,7356280.165977,7356281.157137,7356282.151834,7356283.148024,7356284.145356,7356285.143499,7356286.141713,7356287.140738,7356288.137969,7356289.157612,7356290.16355,7356291.157806,7356292.151751,7356293.14714,7356294.161523,7356295.155659,7356296.150025,7356297.145734,7356298.142385,7356299.139456,7356300.138211,7356301.136624,7356302.13606,7356303.135476,7356304.13455,7356305.134798,7356306.146516,7356307.147074,7356308.144326,7356309.141387,7356310.139269,7356311.152972,7356312.149863,7356313.146132,7356314.142052,7356315.138742,7356316.135854,7356317.134017,7356318.133393,7356319.132608,7356320.131713,7356321.129606,7356322.138209,7356323.138716,7356324.136609,7356325.135684,7356326.1353,7356327.151046,7356328.150331,7356329.14597,7356330.14221,7356331.138901,7356332.136273,7356333.134015,7356334.133471,7356335.13462,7356336.141399,7356338.026671,7356339.163209,7356371.710536,7356388.843175,7356405.368463,7356421.79616,7356438.436751,7356454.439303,7356455.166446,7356470.681208,7356488.126104,7356520.096645,7356537.479957,7356554.591878,7356570.990351,7356587.414392,7356603.558055,7356619.982196,7356636.762966,7356653.373311,7356653.891608,7356670.282508,7356686.822203,7356703.068917,7356719.851961,7356736.775865,7356753.546686,7356769.97812,7356785.804768,7356786.946737,7356803.412485,7356819.459249,7356820.468733,7356837.068088,7356869.755212,7356886.562371,7356902.981142,7356903.756113,7356919.553597,7356920.065552,7356920.931281,7356937.027687,7356953.281764,7356953.709344,7356969.375966,7356970.562798,7356986.713694,7356987.522438,7357003.88756,7357020.127381,7357036.803928,7357052.913348,7357054.211786,7357070.956839,7357087.260859,7357103.699065,7357104.704743,7357121.16478,7357137.387028,7357137.590293,7357153.664729,7357154.813289,7357171.066145,7357187.339988,7357187.796781,7357203.389687,7357204.427725,7357220.340501,7357220.927896,7357237.278813,7357238.099779,7357254.318049,7357270.229554,7357271.638265,7357287.872595,7357304.070469,7357320.391429,7357320.890992,7357336.459653,7357337.552551,7357353.376384,7357354.385397,7357370.846957,7357387.030874,7357403.177323,7357404.635165,7357421.421845,7357437.610231,7357454.180021,7357454.832657,7357470.563628,7357471.406414,7357487.256906,7357488.159453,7357504.122462,7357521.035506,7357537.870135,7357554.072737,7357570.681388,7357587.027295,7357603.768071,7357620.310881,7357621.670712,7357638.285586,7357654.572273,7357670.811863,7357686.965715,7357687.92175,7357688.307723,7357704.474349,7357720.743785,7357736.943902,7357738.174284,7357754.451645,7357770.809864,7357771.247151,7357787.587768,7357788.13559,7357804.951384,7357821.058399,7357837.264888,7357854.097324,7357870.77345,7357886.924516,7357887.508675,7357907.796812,7357908.374118,7357909.028918,7357909.778362,7357910.579681,7357911.43418,7357912.331497,7357913.253369,7357914.197372,7357915.158918,7357916.130783,7357935.645551,7357968.886038,7357985.940162,7358017.771657,7358035.933878,7358068.499178,7358085.204768,7358101.181904,7358101.908786,7358118.346763,7358134.689213,7358166.504538,7358167.265252,7358183.653657,7358216.071064,7358232.810126,7358248.740836,7358265.763022,7358266.868213,7358283.53388,7358299.750559,7358300.729527,7358301.912311,7358303.327304,7358304.379297,7358305.411813,7358306.492399,7358307.568947,7358308.632341,7358309.691296,7358317.031382,7358318.220758,7358319.47798],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,661,1502,1292,1213,10,6,6,6,6,39,772,3458,2343,2025,1124,17,9,8,10,11,22,187,1128,984,947,956,967,684,17,9,8,9,9,23,252,1328,1160,1085,1053,1034,1026,1018,1014,1008,1015,1017,1002,1000,998,999,996,998,998,1006,1021,1009,762,10,8,7,6,16,35,261,1119,1434,1382,1251,1184,1132,1071,2383,875,884,919,951,945,950,950,965,963,955,956,970,978,978,2215,1197,872,821,645,31,27,22,20,22,23,22,42,27,24,21,15,24,20,17,25,87,14,8,9,15,17,28,45,10,8,8,8,9,41,14,11,13,10,11,17,42,19,13,8,8,7,7,27,19,10,7,7,7,7,33,12,12,11,9,9,24,13,13,8,8,8,8,18,8,8,7,8,7,22,14,10,10,10,9,21,160,734,1100,1165,2115,1717,1511,915,896,1014,980,976,986,989,987,994,418,504,538,600,551,503,794,997,999,995,999,985,1075,1024,975,982,978,987,989,988,995,1004,993,994,995,997,996,999,996,996,997,1000,998,998,998,1013,1043,1003,987,989,989,992,994,996,997,997,997,998,1000,1000,998,997,1018,1038,991,986,989,992,995,998,995,996,997,997,1015,1028,1022,1014,1015,1021,1004,968,970,977,983,989,991,993,994,996,999,998,1013,1027,1020,1026,1022,1005,1002,1000,1000,1000,1000,1000,999,1000,999,1000,1000,1002,999,998,1007,1006,998,997,997,997,998,998,999,999,998,1000,1000,999,999,999,999,1005,1001,999,999,999,998,1000,998,999,999,999,998,999,995,998,997,1015,1021,992,990,992,994,995,997,997,998,998,999,999,998,999,999,999,1005,1001,998,999,998,999,1000,999,999,999,1000,999,999,1000,999,999,1006,1001,1005,1000,1001,1000,997,997,997,997,998,999,999,999,998,999,1001,1006,1001,998,1000,998,997,997,999,999,998,1000,999,999,999,1000,998,1009,1007,997,999,997,996,998,1002,999,997,998,998,998,1000,999,999,999,1004,1002,1001,1000,997,997,998,999,999,999,998,999,999,999,999,999,1005,1012,999,995,996,997,998,999,999,998,999,999,998,999,999,999,1008,1004,998,1002,996,997,997,1000,1001,998,999,998,998,999,999,998,999,1010,1003,997,996,998,997,998,999,1000,1000,999,999,1000,999,999,999,1002,1010,999,996,1004,996,996,997,998,999,1001,998,998,999,998,999,999,999,1011,1003,997,997,998,998,1000,1000,999,998,998,998,629,506,509,602,468,458,524,647,731,820,855,893,921,942,958,969,979,980,987,989,993,994,996,997,994,997,1010,1001,1001,1013,995,993,995,998,993,997,997,998,998,999,998,999,1001,1007,1000,998,996,998,997,999,1000,999,998,999,999,999,999,999,999,1006,1009,997,1012,996,996,993,996,997,999,999,999,999,998,998,999,999,1012,1002,998,1003,1000,169,555,556,522,1292,1318,931,914,932,951,967,973,981,993,993,994,991,993,994,995,999,999,997,998,999,1000,998,998,999,1004,1004,1000,1004,998,998,999,998,998,998,1000,1000,1002,997,1001,1000,998,999,1012,999,995,997,996,996,998,998,1001,999,1019,999,994,994,996,997,1002,997,996,999,997,994,996,1000,1001,1000,998,999,999,1001,998,997,998,1004,1011,998,1000,998,998,999,1001,999,999,999,998,999,1000,999,997,998,1002,1004,1003,998,997,997,998,1000,999,1000,1000,1001,998,998,997,998,1002,1012,999,996,1003,1000,996,997,997,998,1000,997,998,998,1000,993,992,1006,1007,992,994,994,994,997,998,997,999,999,1001,1000,1002,467,594,580,636,727,801,828,857,870,901,937,974,985,1091,1067,963,962,974,1235,1501,915,893,930,935,943,955,967,976,983,988,991,993,994,995,997,997,1007,999,982,1013,998,985,988,987,990,992,995,996,997,996,998,994,994,995,996,1004,1006,998,995,996,997,998,998,1000,999,999,999,999,998,999,999,1002,1007,1000,998,1003,998,997,997,1002,1001,998,998,998,998,998,998,999,1004,1010,1002,996,995,997,997,999,1001,999,998,999,998,999,999,999,999,1005,1003,999,998,1000,998,998,1000,998,1000,996,997,997,997,998,998,1002,1025,1006,992,993,993,996,997,997,996,997,998,998,999,999,999,999,1007,1002,1001,1000,997,997,998,999,999,999,999,998,999,999,999,999,999,1005,1004,999,997,998,870,941,565,591,649,740,814,852,890,920,942,959,802,837,524,547,644,706,783,847,887,917,327,1240,929,889,922,928,945,960,971,979,984,989,997,1006,988,989,991,992,993,994,988,991,994,995,996,997,998,998,1004,1020,995,993,993,992,993,994,995,993,992,993,996,996,997,997,1003,1003,1014,991,992,992,994,993,997,989,992,993,994,996,996,998,997,999,1011,1001,994,996,995,994,997,991,988,991,993,994,997,997,997,998,1002,1004,996,997,995,996,997,997,995,994,992,995,999,1002,997,997,997,1451,1003,995,997,993,996,997,998,997,999,998,999,1000,999,1000,1000,1003,1008,998,999,997,998,997,999,999,999,1000,1000,999,999,998,999,998,1013,1009,993,993,994,992,997,1001,996,997,997,998,999,999,1000,999,1002,1021,1001,994,995,995,997,997,998,998,999,998,999,998,999,999,999,1006,1011,998,998,997,997,997,998,999,998,999,999,999,1000,1000,1000,1000,1012,1009,995,995,997,996,997,998,999,999,998,999,999,1000,1004,998,996,1006,997,995,995,996,997,998,999,999,999,999,999,1000,999,999,999,1004,1009,997,996,997,997,998,998,999,999,999,999,999,1000,999,999,1000,1016,1012,995,995,993,996,1000,1000,997,997,998,998,999,999,999,999,1000,1011,1000,997,998,997,998,998,999,999,999,999,998,1000,996,997,997,1002,1003,999,997,997,997,998,999,999,999,999,999,999,999,999,1000,999,1005,1009,999,998,996,997,1000,1001,997,998,998,998,999,999,1000,999,999,1005,1001,998,999,998,998,999,1000,1000,998,999,999,999,1000,999,999,1001,1009,1001,997,997,997,998,999,999,999,999,999,1001,999,1000,999,999,1011,1006,996,1001,994,996,1000,1001,998,997,998,998,999,999,999,999,1001,1012,1000,996,997,997,998,998,1000,998,999,999,999,1000,999,999,999,1005,1007,998,997,997,998,998,999,999,999,999,999,999,1000,999,1000,1001,1010,1011,995,996,996,996,996,1000,996,995,996,997,999,998,999,999,1000,1009,1002,997,997,997,998,999,999,999,1000,999,999,999,999,999,999,1003,1009,1002,996,996,997,998,998,1000,999,999,999,1000,999,999,999,999,1006,1005,999,998,997,997,999,1002,1000,1000,998,1001,1008,998,999,998,999,1000,997,998,1000,999,999,1722,1003,972,974,981,985,990,992,994,995,1007,996,998,996,996,997,999,1000,999,998,998,999,999,999,999,999,1001,1004,1000,999,998,998,999,1000,1001,999,999,1001,998,998,999,998,1002,1013,1004,995,997,996,996,997,1001,997,1000,999,998,1001,999,998,998,1008,1028,996,993,992,994,995,996,999,999,998,999,999,999,998,999,999,1006,1010,999,996,996,997,997,999,999,998,999,998,999,1000,999,1000,999,1009,1005,996,997,996,997,997,1000,999,1000,999,1000,999,1000,998,999,999,1004,1000,998,999,1000,998,1000,1000,1000,999,999,999,1000,998,999,999,1004,1008,999,996,997,997,997,999,1000,1001,998,998,999,999,999,999,999,1011,1006,996,999,996,998,997,998,999,999,998,999,999,999,999,999,1000,1008,1005,997,996,997,998,999,999,1001,999,999,999,999,999,999,999,1007,1011,998,996,996,998,997,998,1001,998,998,999,999,999,999,1000,1002,1011,1000,996,997,997,998,998,1000,999,999,999,1000,999,999,999,999,1001,1012,1000,998,991,986,979,984,978,975,972,981,977,977,976,979,974,974,975,975,971,972,969,975,980,977,979,975,967,972,972,972,974,968,974,978,974,974,973,968,973,975,973,969,965,975,972,980,978,972,974,974,974,975,972,968,973,975,980,980,978,975,973,972,973,967,970,972,974,975,977,966,973,975,975,973,969,971,972,974,975,971,975,974,975,977,973,979,977,977,977,978,971,977,979,977,978,974,971,973,975,975,971,974,975,976,977,976,972,974,972,975,976,970,976,977,975,974,971,977,978,980,980,977,969,973,976,978,979,969,975,977,979,980,976,981,981,985,992,992,995,995,997,996,997,998,998,999,999,998,999,999,1038,482,483,600,686,755,823,856,893,922,943,958,968,976,981,986,989,993,994,996,997,998,1006,996,995,994,997,997,996,996,994,995,996,996,994,998,998,998,998,998,998,998,996,999,999,999,996,995,996,998,998,999,999,999,1000,998,999,998,998,998,999,999,997,996,997,997,997,999,999,999,999,1000,998,1000,998,997,999,997,999,998,996,997,998,997,997,999,999,998,999,999,1000,999,999,998,999,1001,994,997,997,997,999,999,998,999,999,998,999,1000,998,998,998,999,998,997,997,998,998,997,998,999,999,999,1000,1006,997,998,996,998,998,996,996,996,997,998,996,999,999,999,1000,999,999,997,999,1000,999,1001,996,996,997,998,998,999,997,999,1000,996,997,998,997,998,997,998,998,996,997,998,997,999,999,999,999,999,998,998,999,998,998,997,999,997,997,997,997,997,999,999,998,998,1000,999,1000,998,999,999,999,1001,996,995,998,998,998,998,999,999,999,1002,995,998,998,996,999,997,997,997,996,998,998,999,999,997,999,999,999,1001,998,998,998,999,998,999,996,996,997,998,998,998,998,999,999,999,999,999,998,998,998,999,996,1011,995,995,996,997,997,998,997,997,999,999,999,999,999,1000,997,997,996,997,999,999,998,999,999,999,999,1001,999,999,998,999,997,997,997,996,1001,995,995,995,996,997,997,999,998,995,995,996,997,999,995,995,996,997,997,997,998,999,999,999,1005,999,997,996,999,998,996,995,997,997,998,998,998,998,999,999,999,1007,997,998,997,997,998,997,996,996,997,997,998,998,999,999,999,999,1000,998,998,999,998,1001,995,996,996,998,996,998,999,999,999,999,1002,998,997,998,997,999,997,997,996,998,998,998,999,999,999,998,999,1001,999,999,999,998,1000,999,996,996,996,996,999,999,999,999,998,999,999,998,998,998,999,1001,995,996,997,998,998,999,999,999,999,997,1010,998,997,997,998,996,994,996,995,996,996,997,998,998,998,998,999,1001,998,998,999,999,998,998,997,998,996,997,997,1000,998,998,1000,999,1001,1003,1000,1001,997,1000,991,993,994,996,996,998,998,999,999,1004,1004,997,995,995,997,997,996,996,996,997,998,997,999,998,1001,998,998,1004,998,998,996,996,997,1001,1121,897,844,945,970,978,983,989,991,995,990,991,995,996,996,993,992,993,996,995,998,997,999,999,998,999,999,998,998,998,997,996,995,996,997,996,998,998,999,998,1000,996,1000,997,999,999,999,999,998,995,996,995,998,999,999,999,999,999,999,1001,997,999,999,998,999,998,1007,995,993,996,997,998,998,997,999,1001,998,1000,999,998,998,997,996,996,997,998,998,998,999,999,1000,999,1005,996,995,997,998,998,996,996,996,997,998,998,999,999,999,998,999,999,999,1000,998,999,998,997,996,996,997,996,999,999,999,999,1000,1002,1000,998,998,998,998,997,996,996,997,998,998,997,999,999,999,999,1001,998,998,998,999,998,998,996,995,996,998,997,999,999,1000,1000,998,1003,997,998,999,999,998,999,997,998,997,997,997,999,998,999,999,1000,1000,998,998,999,998,997,995,996,997,997,998,998,999,999,999,1000,1006,997,997,997,996,998,998,999,996,997,997,998,998,999,999,998,998,999,999,998,998,999,999,999,997,997,997,997,997,999,998,1000,1001,1002,1002,996,996,998,998,997,996,995,998,998,999,999,999,998,1000,1000,1000,998,997,997,999,999,997,996,997,996,998,999,999,999,998,1000,999,1001,998,998,998,998,998,997,997,997,997,998,998,999,999,1000,999,1000,999,998,998,998,998,996,996,996,997,998,998,999,998,1000,999,999,1001,1000,998,998,998,998,998,996,997,997,998,998,998,997,1000,998,999,1003,998,998,999,998,999,999,997,996,996,997,998,998,999,999,999,999,999,997,998,998,998,997,995,997,997,998,998,998,1000,999,999,998,1001,999,998,997,999,999,998,997,997,997,998,999,999,1000,998,999,999,1001,997,998,999,998,998,1000,997,995,997,997,997,999,1000,998,999,1001,1003,999,998,998,998,996,996,996,997,997,999,1000,999,999,999,999,998,997,998,999,999,999,997,997,997,998,998,998,999,999,999,1000,999,998,999,998,999,999,999,1000,996,996,996,998,1000,999,999,999,1000,1000,1000,998,998,998,997,997,996,997,997,998,999,999,999,999,999,1000,1000,995,995,996,997,997,997,996,995,996,997,998,998,997,999,999,999,1001,999,996,997,999,998,998,997,997,998,999,998,998,999,1000,999,999,998,998,998,999,999,996,996,996,998,999,999,997,999,999,999,997,1003,998,998,998,997,998,997,996,995,997,999,997,999,999,996,997,997,1000,997,996,997,998,998,998,996,996,998,998,997,999,999,999,999,999,1000,998,998,998,998,996,996,997,998,998,998,999,999,999,999,999,1000,998,998,999,999,998,998,997,996,998,998,998,999,997,998,999,999,1000,999,999,997,999,999,997,997,997,997,998,999,999,999,999,999,999,999,998,999,998,998,997,997,1000,997,997,996,998,999,999,999,1000,1005,996,997,997,998,998,996,998,997,997,997,999,998,999,999,999,999,1001,998,998,999,998,998,999,997,996,997,998,998,999,997,999,999,1000,1001,998,997,998,998,996,996,997,996,996,998,1000,998,998,999,1000,1003,997,995,997,997,999,998,999,996,996,997,998,997,999,1000,1002,999,1000,995,995,996,996,997,994,994,995,995,998,998,998,997,999,999,1001,1000,998,998,998,998,998,996,996,998,997,998,998,999,999,999,998,1000,998,998,997,999,999,999,998,996,997,997,998,998,999,998,999,999,1000,999,998,998,998,1000,994,996,996,998,997,999,999,999,999,999,1000,998,997,999,999,1000,997,996,997,998,998,997,999,999,999,999,999,999,999,997,999,999,1000,999,996,995,997,998,998,999,999,999,999,1000,1000,999,1000,995,996,998,993,995,997,997,998,997,999,998,998,1000,999,1000,1000,999,998,999,997,996,997,997,998,998,997,999,999,999,999,1001,999,998,998,999,998,996,997,997,997,998,998,998,999,999,999,998,999,999,999,999,998,998,996,997,997,998,998,999,999,999,999,999,1001,1001,998,998,998,998,997,996,997,997,998,998,998,999,999,999,999,999,999,998,999,999,1005,996,993,995,997,998,998,998,998,998,1000,1000,1000,999,1001,999,998,1000,996,996,997,997,997,998,999,999,999,999,999,998,998,999,999,998,996,996,997,997,998,998,999,998,999,997,997,998,998,999,998,998,999,996,998,1001,994,995,997,997,997,998,998,998,997,999,998,998,998,999,996,997,997,998,998,998,999,999,999,999,999,999,998,998,998,997,996,996,997,998,998,998,997,999,999,1000,999,1000,999,998,999,998,998,1022,971,988,994,996,997,998,998,998,999,1000,999,998,998,1000,999,998,995,995,996,997,997,999,999,999,999,998,1000,1000,997,997,998,999,997,995,997,998,998,999,999,999,999,999,999,1000,997,999,997,999,999,997,1001,996,997,997,998,997,999,999,998,1001,999,998,998,998,998,998,997,996,996,996,998,998,999,999,999,1001,1000,997,998,999,998,998,996,996,997,998,998,999,997,999,999,999,999,1000,997,997,998,998,998,997,1000,996,996,997,998,998,999,999,1000,999,998,998,999,998,998,998,996,996,995,998,998,999,999,999,1000,999,999,999,998,997,998,999,996,996,996,998,998,999,999,999,1000,1000,999,999,997,998,999,998,999,997,1001,994,995,996,997,998,998,998,999,999,999,998,998,998,999,998,998,996,998,997,998,998,999,1000,999,999,999,1001,997,997,998,998,995,996,996,996,999,999,999,999,999,998,999,1004,999,997,997,998,998,996,1000,997,996,999,999,1000,999,999,1000,1008,1013,993,988,987,988,993,985,989,991,994,996,997,998,998,999,997,1000,1005,994,993,995,996,994,994,995,996,997,998,998,999,999,999,1000,1005,1000,997,997,997,997,996,996,995,996,997,998,999,999,999,997,999,1000,997,999,999,998,999,995,996,996,997,997,999,1001,1006,1000,1015,1398,1831,1344,1184,1258,821,727,277,2001,1539,1944,1706,1063,1075,864,1203,1430,1324,518,998,1261,1052,1520,1682,1537,1089,634,948,1010,796,1009,1298,2061,1368,1203,728,712,357,865,843,1019,427,539,1085,861,808,1087,1027,1463,968,1298,1538,1129,1215,1005,1233,789,187,889,1072,1011,1109,456,487,890,695,386,1144,709,914,737,1155,981,975,1093,499,460,921,609,862,1064,873,1051,1240,1489,853,1080,652,545,734,672,789,776,1557,1553,981,1319,1173,1379,1313,1244,1126,970,983,995,762,385,908,862,987,1057,970,1108,437,1068,547,1371,822,1000,1351,1263,922,584,715,577,654,749,801,854,897,921,944,961,971,1736,2115,1354,1453,2547,17012,1003,681,631,1218,1078,1321,678,1162,1550,1356,760,1072,965,1056,952,978,1078,1246,1051,1032,1080,1076,1063,1058,1739,1189,1162]},"stackTable":{"length":2078,"prefix":[null,null,1,2,3,4,5,6,7,8,9,10,null,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,19,34,35,36,37,38,39,40,18,42,43,44,45,46,47,48,49,50,51,49,53,54,55,56,57,58,59,60,42,62,63,64,65,66,null,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,80,82,82,86,87,82,69,90,91,92,93,82,81,79,97,98,99,100,101,102,80,80,81,82,82,86,109,82,77,112,113,114,115,116,117,118,119,120,121,122,115,124,82,82,82,86,90,130,131,132,133,82,82,null,137,138,139,140,141,142,143,144,145,146,147,148,68,150,151,152,16,154,155,156,157,158,159,160,161,162,163,164,165,166,167,166,169,170,171,172,173,174,164,176,177,178,179,179,181,182,179,184,179,179,187,null,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,null,208,209,210,211,212,213,214,215,216,217,68,219,220,221,222,223,224,225,208,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,228,243,244,245,246,247,248,249,250,251,252,253,254,254,256,256,258,251,260,261,262,263,264,263,266,null,268,269,270,263,272,263,274,275,276,243,278,279,280,279,282,283,284,285,286,287,288,289,290,284,292,293,294,295,296,297,298,283,300,301,302,303,304,305,306,307,308,283,310,311,312,313,314,315,316,317,318,319,320,321,282,323,324,325,283,327,328,329,330,331,332,333,334,283,336,337,338,339,340,341,342,343,282,345,346,279,348,349,350,351,352,353,354,355,356,357,358,359,360,357,362,363,364,365,null,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,374,389,390,391,392,393,394,395,374,397,398,399,400,401,402,403,352,405,406,407,408,409,410,411,412,413,414,415,416,417,415,419,420,421,422,407,424,425,426,427,428,374,430,431,432,433,434,435,436,437,438,348,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,null,456,457,458,459,460,461,462,463,null,465,466,467,468,469,470,471,472,473,474,475,476,456,478,479,480,481,482,483,484,485,486,487,488,489,456,491,492,493,494,495,496,497,498,499,500,501,492,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,null,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,528,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,539,560,561,562,563,564,565,566,567,539,569,570,571,572,573,528,575,576,577,578,579,580,581,582,583,584,528,586,587,588,589,590,591,592,593,594,595,592,597,587,599,600,601,528,603,604,605,606,607,608,609,610,528,612,613,614,615,616,528,618,619,620,621,622,623,624,625,626,618,628,629,630,631,632,633,634,635,636,637,638,528,640,641,642,643,644,645,646,647,648,649,650,651,652,653,640,655,656,657,658,659,660,661,662,528,664,665,666,667,668,669,670,664,672,673,674,675,676,677,678,679,680,681,682,683,684,525,525,687,688,689,690,519,692,693,694,695,null,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,697,714,715,716,717,718,719,720,721,722,723,724,null,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,null,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,null,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,null,783,784,785,786,787,788,789,null,791,792,793,794,795,794,797,792,799,800,801,802,803,794,805,797,802,808,809,810,811,812,813,814,815,816,817,805,805,797,805,795,795,797,805,795,795,797,797,797,805,795,797,813,797,805,794,811,795,794,805,797,794,803,795,815,847,801,849,850,851,795,795,797,801,797,795,797,803,797,795,813,863,864,865,795,805,795,847,805,805,795,794,805,797,805,805,815,879,880,795,797,805,794,885,797,795,810,817,797,797,801,795,795,801,800,897,898,879,797,794,801,813,904,817,906,805,794,909,812,911,792,913,810,915,911,911,898,919,920,921,922,923,924,925,926,794,797,913,805,924,932,933,794,935,879,849,898,939,794,795,797,813,865,794,794,906,795,915,813,951,939,922,954,955,800,794,813,795,811,898,913,805,897,965,966,805,924,969,817,971,803,797,794,816,904,803,805,904,805,805,805,803,984,985,986,987,954,989,990,991,992,801,797,810,996,997,998,797,921,1001,1002,1003,1004,909,801,922,1008,913,794,795,955,null,1014,971,797,913,911,885,797,1021,813,795,921,795,805,813,879,1029,797,904,794,797,880,909,1036,915,805,1039,817,851,797,809,794,794,800,879,805,813,850,847,851,801,880,795,879,1057,794,808,885,1061,815,805,879,805,801,803,812,998,935,865,811,794,795,794,906,971,849,801,795,801,904,1083,797,803,879,794,879,989,1090,794,991,802,805,939,851,812,803,864,863,805,998,805,1083,879,997,802,922,794,1039,1111,805,794,879,865,794,805,879,794,794,904,971,813,817,906,904,812,794,971,794,850,898,797,795,812,803,797,971,795,794,998,1142,997,998,915,987,1147,922,1149,800,1151,805,904,1003,864,810,847,933,1159,971,879,904,795,906,1165,906,1167,851,1083,805,805,797,813,797,794,801,795,913,795,813,925,997,805,797,906,795,797,805,879,795,812,1192,1147,810,1195,805,913,797,795,794,810,805,795,913,813,879,805,865,805,813,797,850,794,913,795,939,813,795,794,794,797,971,813,795,1149,802,805,898,801,998,795,797,971,851,795,801,906,1008,795,805,795,797,794,794,989,1246,797,805,797,863,794,null,1253,1254,1192,795,797,813,1259,746,1261,1262,1263,1264,1265,745,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,745,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,770,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,850,951,797,922,913,1315,794,811,885,913,805,849,813,797,805,797,803,805,797,794,971,913,801,797,805,879,801,794,849,1008,991,880,797,801,879,801,904,810,851,1349,794,794,813,1353,1354,1355,850,808,879,811,971,794,1142,992,906,925,849,797,797,986,1008,1371,879,897,904,805,805,812,794,794,795,1195,885,864,805,795,795,797,966,1389,797,879,801,805,955,801,1192,989,1398,898,794,913,795,811,811,813,803,865,797,805,805,794,913,810,801,801,939,1417,1418,1419,1420,1421,794,1192,797,794,971,849,800,797,966,811,1432,801,997,1435,851,795,795,1002,1440,851,797,797,906,879,849,913,811,794,794,803,794,794,802,null,1456,1457,1458,1459,1460,1461,1462,1463,1457,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,null,1477,1478,1479,1480,1481,1482,1483,1484,15,1486,1487,1488,1489,1490,1491,1492,1493,1494,1486,1496,1497,1498,1499,1500,1493,1502,1503,1487,1505,1506,1507,1508,1509,1510,1486,1512,1513,1514,1515,1516,1517,1518,1519,1487,1521,1522,1523,1524,1525,1526,1486,1528,1529,1530,1531,1532,1533,1534,1486,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,15,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1542,1554,1569,1570,1492,1572,1573,1574,1538,1576,1577,1578,1515,1580,1581,1582,1583,1584,1487,1586,1587,1588,1589,1590,1533,1592,1593,1594,1533,1596,1597,1598,1533,1600,1487,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1486,1617,1618,1619,1620,1621,1622,1623,1624,1625,1487,1627,1628,1629,1630,1631,1632,1606,1634,1635,1498,1637,1638,1639,1635,1641,1493,1583,1644,1645,1646,1635,1554,1649,1650,1512,1525,1653,1654,1655,1656,1533,1658,1659,1637,1661,1639,1663,1487,1665,1666,1667,1668,1669,1499,1671,1532,1619,1674,1675,1576,1677,1524,1679,1680,1681,1508,1683,1663,1685,1604,1687,1688,1689,1690,1691,1634,1693,1694,1695,1696,1697,1694,1699,1700,1701,1487,1703,1704,1705,1706,1707,1708,1709,1533,1711,1712,1713,1714,1621,1716,1487,1718,1719,1720,1721,1722,1487,1724,1725,1726,1727,1728,1729,1621,1731,1486,1733,1734,1735,1736,1726,1738,1739,1740,1497,1742,1588,1744,1745,1604,1747,1748,1749,1493,1498,1752,1705,1754,1755,1498,1757,1758,1759,1760,1761,1726,1763,1764,1765,1766,1767,1768,1499,1576,1771,1772,1773,1774,1766,1554,1777,1515,1493,1780,1781,1766,1783,1784,1492,1786,1787,1561,1789,1790,1667,1792,1793,1569,1512,1796,1797,1798,1799,1523,1801,1802,1803,1532,1671,1806,1807,1620,1809,1810,1811,1812,1813,1814,1815,1604,1817,1736,1576,1757,1490,1638,1823,1824,1825,1530,1827,1828,1829,1830,1831,1667,1729,1834,null,1836,1530,1838,1839,1840,1841,1551,1843,1620,1845,1846,1847,1848,1849,1850,1828,1532,1853,1854,1855,1856,1857,1553,1859,1860,1861,1862,1492,1814,1865,1866,1867,1727,1869,1870,1871,1872,1561,1874,1875,1538,1877,1878,1879,1576,1881,1882,1883,1884,1635,1542,1887,1888,1889,1890,1891,1538,1893,1494,1895,1487,1897,1898,1899,1900,1901,1902,1903,1772,1905,1744,1907,1908,1909,1910,1545,1561,1913,1914,1915,1916,1914,1918,1919,1920,1921,1922,1919,1924,1918,1926,1927,1928,1929,1930,1918,1932,1933,1918,1935,1936,1937,1937,1936,1918,1941,1942,1943,1944,1754,15,1947,1948,1949,1950,1695,1871,1953,1954,1955,1798,1957,1958,1959,1960,1961,1542,1963,1964,1965,1966,1967,1814,1969,1783,1569,1972,1877,15,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1975,1989,1990,1991,1992,1993,1994,1995,1996,1997,1975,1999,2000,2001,2002,2003,2004,2005,2006,2007,1975,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2011,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2021,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2045,2050,2051,2052,2053,2040,2055,2056,2011,2058,2059,2060,2061,2062,2063,2064,2065,2066,13,2068,2069,2070,null,2072,2073,null,2075,2076],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,6,24,25,6,26,6,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,21,22,23,6,24,42,43,44,25,6,26,6,45,8,46,47,48,49,50,51,52,53,54,55,56,57,21,22,23,6,24,25,6,26,6,27,28,29,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,5,6,7,73,74,48,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,15,16,108,109,110,111,112,113,55,114,115,116,117,114,115,118,119,108,109,120,121,122,52,53,123,124,125,126,127,128,129,130,131,132,133,134,135,93,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,157,157,158,157,159,157,159,157,157,158,160,161,162,163,164,165,166,167,168,169,170,171,172,65,173,102,174,175,176,177,178,179,180,57,21,22,23,6,24,25,6,26,6,45,181,182,183,184,21,22,23,6,24,25,6,26,6,27,59,28,185,29,98,83,84,85,86,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,217,218,219,226,227,228,229,230,231,232,217,218,219,233,234,235,236,237,238,239,240,241,242,243,244,245,246,217,218,219,220,247,248,249,250,251,217,218,252,253,247,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,183,200,201,257,258,259,260,261,262,263,264,265,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,212,213,292,293,294,289,290,291,212,213,295,296,297,298,299,300,301,302,209,210,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,289,280,281,282,283,284,285,321,259,260,322,323,324,325,326,327,328,166,167,168,169,170,171,329,330,331,332,333,334,335,336,337,53,123,124,125,126,338,278,279,280,339,291,212,213,340,331,332,341,342,343,22,23,6,344,345,346,44,347,348,349,350,351,352,353,354,355,51,356,357,358,359,360,361,362,363,364,51,52,53,123,124,125,126,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,282,283,383,384,385,386,387,388,389,390,391,392,393,391,392,394,395,396,397,398,399,400,401,274,275,402,403,404,405,406,407,408,409,410,411,412,404,405,413,414,415,416,417,405,413,418,419,420,421,93,136,422,423,424,405,413,418,419,420,421,93,136,425,426,427,428,429,430,431,432,433,387,434,435,419,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,93,452,453,387,434,435,419,425,454,454,454,455,456,457,458,459,460,387,434,435,419,425,461,456,462,463,464,451,465,466,460,387,434,435,419,425,467,468,469,470,471,472,473,474,475,476,477,405,413,418,419,425,478,456,462,463,464,451,93,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,353,354,355,51,52,53,123,124,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,503,504,505,521,522,508,509,510,511,523,524,525,526,527,528,529,530,531,518,519,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,502,503,504,505,506,522,508,509,510,511,550,551,552,553,554,555,556,537,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,562,588,589,589,590,591,592,593,592,594,573,572,562,595,586,591,596,597,594,598,589,599,600,601,602,603,604,605,606,607,570,608,587,608,609,572,573,585,610,602,611,612,613,614,615,586,587,616,617,588,564,590,618,602,591,594,593,619,620,621,599,622,592,623,624,588,625,626,627,628,590,629,630,564,631,632,633,634,635,636,637,638,639,640,641,642,643,644,624,645,646,647,648,649,650,651,652,574,575,576,577,653,581,619,620,621,654,630,655,608,582,583,627,656,657,658,659,569,570,660,661,662,663,664,665,666,667,628,621,668,669,670,578,671,650,672,673,674,675,676,677,678,611,679,606,680,662,603,604,681,682,683,684,685,686,687,688,689,690,636,675,691,692,693,694,695,696,579,580,581,619,697,698,689,699,700,701,640,675,699,700,701,702,703,704,705,706,707,708,709,710,621,711,712,713,714,715,716,717,718,719,720,721,626,689,722,723,724,703,725,726,727,728,729,730,731,732,718,719,733,734,735,736,737,738,739,740,599,741,680,742,688,743,744,593,745,703,746,747,730,748,749,750,751,752,753,754,755,756,704,757,758,759,714,760,761,762,763,764,662,765,702,766,611,767,768,769,770,668,669,771,772,773,774,775,776,777,776,778,779,780,781,630,703,697,782,634,758,783,784,785,622,786,787,788,789,714,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,780,805,806,807,808,809,774,810,702,811,812,813,814,815,816,817,818,819,820,821,822,640,823,824,825,641,797,826,827,828,829,830,831,832,833,834,811,835,710,829,836,643,837,838,821,839,840,841,842,843,829,844,845,846,821,684,847,848,671,621,849,850,851,852,853,854,854,855,856,844,844,857,858,859,860,861,628,862,863,864,865,866,684,767,867,808,868,869,852,870,871,872,873,874,808,875,876,877,878,879,880,881,636,882,883,884,852,885,879,860,886,887,639,884,710,840,840,888,889,619,890,891,732,892,721,893,873,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,401,274,275,914,915,916,917,918,919,920,921,922,274,275,923,924,925,517,518,519,520,503,504,505,506,507,508,509,510,511,926,927,846,597,928,929,930,931,657,932,661,933,934,935,854,774,936,846,937,938,939,940,941,885,863,942,943,944,945,946,749,650,616,947,948,949,950,951,692,952,953,954,955,956,957,958,959,960,961,962,963,964,703,965,966,967,968,969,892,970,702,703,971,972,973,974,975,976,977,978,979,814,704,980,879,863,750,872,607,570,722,842,981,872,814,982,650,893,873,983,984,985,722,986,987,988,989,990,750,616,991,992,993,994,995,996,692,693,694,695,815,997,998,814,661,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,683,974,585,1008,1010,1011,1012,805,1013,965,1014,1015,1016,1017,1018,734,1019,1020,1021,1022,524,525,894,895,896,897,898,899,900,1023,1024,1025,1026,1027,1028,1029,1030,1031,274,275,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,401,274,275,1103,1104,1105,1106,1107,52,53,123,124,125,126,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,366,1131,1132,1133,1134,1135,1136,1137,1138,274,275,1139,1140,274,275,1141,1090,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1109,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,401,274,275,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1066,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,274,275,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1250,1265,1266,1267,1268,1269,1270,1271,1272,1263,1273,1274,1275,1276,1066,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1189,1190,1191,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,357,1305,1306,1058,1307,1308,1309,1310,1311,1312,1313,1314,1109,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1096,1097,1098,1099,1334,1335,275,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1117,1356,1357,1358,1359,1360,1361,703,1362,1363,1029,1030,1031,274,275,1364,1365,1366,1367,1368,274,275,1369,1370,1371,1372,1373,1374,1375,1248,274,275,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1350,1391,1392,1393,1029,1394,1395,274,275,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1189,1190,1191,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,102,103,104,105,1428,93,136,1429,1427,102,1430,1431,1432,1433,282,283,284,285,1434,1435,1436,1437,1438,1439,1440,1441,1442,1164,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,274,275,1454,1090,1455,1456,1457,1458,1459,1460,1461,1462,502,503,504,505,521,522,508,509,510,511,1463,1464,1465,1466,1467,1468,1441,1442,1164,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1090,1491,1492,323,324,325,326,327,328,166,167,168,169,170,171,1493,343,22,23,6,344,1494,84,1495,1496,1497,1498,1499,1500,485,1501,1502,1503,1164,1504,345,346,44,1505,1506,343,22,23,6,344,345,346,44,1507,1508,1509,1510,1511,1512,1513,1514,1515,1513],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["0x7fa1ca74fb0b","ld-linux-x86-64.so.2","0x1d047","0x1e35d","0x1c9f5","0x1ff7e","0x2d27","0x1522","0x28bc","0x9227","0x15174","0x149fd","0x1480e","vulkan-test","0xf20e4","libc.so.6","0x2a14a","0x2a087","0x11558e","0x11355d","0xf2b5a","0xf214e","libSDL2-2.0.so.0.3000.3","0x1ab0e","0x11f2f3","0x931ae","0x92be2","0x1678","0x930f3","0xc903","0xc49f","0xd005","0xef86","0xaa8d","0x9e67","0x11f253","libdbus-1.so.3.32.4","0x1a500","0x19087","0x17856","0x31667","0x31367","0x3113b","0x171c4","0x1acca","0xca196","0x1125a5","0xc90a","0x154df","0x2363b","0xcd7b","0x1524b","0xbb5c","0x2357c","0xca238","0x117791","libwayland-client.so.0.22.0","0x871a","0x5a4b","0x57a2","0x4de6","libvulkan.so.1.3.283","0x2f6cb","0x29701","0x1def6","0x9fe9","0xe898","0x9e33","0xa0fa","0x9c2e","0x24dde","0xa059","0x1db39","0xaa77","0x82194","0x8da55","0x8ffff","0x9e46","0xa9b3","0xcde4","0x8fbf","0x788b","0xeebc","0xefac","0xa9be","0xa068","0x9e81","0x9d12","0x24d66","0x9dbd","0xc4fb","0x15c1","0x552c","0x5436","libLLVM.so.18.1","0x426205","0x516db6","0x52d993","0x52d7b6","libstdc++.so.6.0.33","0xb84c5","0xa99bb","0xa7cb3","0xa737f","0x46c50f","0x2842670","0x9e14","0xa0b0","0xa0bc","0x9be5","0xab14","0x8276f","0x8f7df","0x8e552","0x10dc4a","0x9e3d","0x9dde","0xf2ba2","0xf2726","0xcd453","0xceeca","0x11836a","0xd6fda","0x2967f","0x1a6b7","0x1962a","libvulkan_intel_hasvk.so","0x18d404","0x196a9","0x18d3ef","0xcd6da","0xcbbd6","0x111da5","0x4f2d","libffi.so.8.1.2","0x84ed","0x569f","0x9055","0x10ce2f","libxkbcommon.so.0.0.0","0x1fbd0","0x1b6ef","0x151a1","0x1b702","0x1a82b","0x1979f","0x189af","0x1191c","0xa7333","0x10cfb2","0x9eaf","0x3c36","0x3b6f","0x2015c","0x202e7","0x1493e","0x17f4fc","0x20805","0x148d0","0x20263","0x2016f","0x444b","0xf4ab4","0x1199b4","0x2fa84","0x29a32","0x1ee58","0x1d49a","0xab9e","0x96da","0x981e","0x98d2","0x938f","0x110163","0xf4359","0xf4fae","0x11a230","0x166946","0x155805","0x1a6c58","0x11a197","0x1668a7","0x1af0c0","0x10e7bd","0x29650","0xaab0","0x8f86b","0x90933","0x815b0","0x109a0b","0xf46aa","0xf576b","0x31057","0x8e79","0x26144","0x318da","0x2219c","0xaa93","libVkLayer_khronos_validation.so","0x9fe6de","0x8c5174","0x9fe7ab","0x528263","0x4c7c22","0x4af7a7","0x4a8ba7","0x33ac3f","0x9fe823","0x235a6a","0x9fe8be","0x3f57c","0x2fe23","0x2fd7a","0x21e7f","libVkLayer_MESA_device_select.so","0x3805","0x3b4d93","0x38e889","0x3b5f2f","0x25842","libvulkan_freedreno.so","0x9eee3","0x30f34a","0x1b86b6","0x9c8f8","0x9c88a","0x1b85bd","0x4240f","0x10dcab","0x30f2be","0x30d675","0x30d425","libexpat.so.1.9.2","0xee2e","0x254e","0xc9c5","0xb438","0x449f","0x6acea","0x40473e","0x402ad5","0x402885","0xb80e","0x6efd","0x113d2","libvulkan_intel.so","0xa5b8a","0x5b663e","0x5b49f5","0x5b47a5","0xb5cc","0x6f11","0x6ace","0x56c3","0x556c","0x2398","0x25dfb","libvulkan_lvp.so","0x9652e","0x303981","0x30330c","libvulkan_nouveau.so","0x1ff36a","0x6288fe","0x6268f5","0x6266a5","0x4496","libvulkan_radeon.so","0x13dea0","0x5006be","0x4fea75","0x4fe825","0xad8e","0x8893","0x25cd2","0x4fc4b2","0x4fbce4","0x3b6e30","0x825ae7","0x4cb8cd","0x2821c","0x27a3a","0x1f9e11","0x1f9291","0x1f916f","0x141741","0x19b3d4","libdrm_amdgpu.so.1.0.0","0x7a17","libdrm.so.2.4.0","0xb6db","0x7bf2","0x108cab","0x7fcc","0x7182","0xb37e","0x7faf","0x116d2d","0x19b548","0x1fcc6a","0xbf1f","0xbc59","0x7b39","0x71e7","0x821a5","0x8deb4","0x8dcfe","0x10d395","libvulkan_powervr_mesa.so","0xae251","0xad6e8","0x43842","0xc02f","0x7698","0x6f7c","0x1cf291","0x1ce6d1","0x1ce570","0x96691","0x95b28","0x9a097","0x98a32","0xd614d","0xd61ec","0x37818","0x29f81e","0x12048e","0x11fcef","0x11e4a4","0x9dee1","0x11fdfd","0x11f9c9","0x11f552","0x116813","0x4130e0","0x99f47","0xd5f1a","0x37e08","0x96605","0x3036b7","0x303262","0x18d6d1","0x18cba1","0x18ca40","0x825b79","0x28160","0x23069","0x44c36","0x11bcb1","0x16782c","0x1af7c0","0x2162f4","0x110330","0xf80aa","0xf8370","0x11c547","0x325b2","0x44e8","0x4bbc","0x8c47","0x11d1bb","0x4a81","0x717f","0xf81ab","0x327d2","0x1b524","0x92925","0x267a","0x2024","0x157f9","0xf82c7","0xf8aad","0x102701","0x102db0","0x11ec4b","0x40699d","0x4e85ab","0x1aad11","0x1aa727","0x752b","0x10d67d","0x102b55","0x103050","0x11f01b","0x406e5c","0x4e8736","0x1aaa21","0x1aa8dc","0x1a824b","0x11726c","0x1103af","0xf9e09","0xfa228","0x11d7a6","0x32bb2","0x1fa93","0x23e64","0x3ae86d","0x26f3c","0x11f2c1","0x8ca58","0x8c1eb","0x8bf75","0x14f586","0x13e62b","0x140062","0x8ddac","0x10eac2","0x8ca7e","0xa50ad","0x14a993","0x14a7d0","0x149694","0x148e15","0x1ef9b9","0x1ef366","0x1490ff","0x148b51","0x16b518","0x169f9a","0x167bb3","0xf526b","0x196d52","0x5848","0xb3bf","0xa6031","0xa3366","0xa1cde","0x15471d","0x15295e","0x14dd09","0x14d45e","0x14b5af","0x4fdeb0","0xa6104","0xa3eb8","0x152983","0x150000","0x8cadc","0x91f1d","0x904de","0x1500a7","0x1ece9e","0x341129","0x266d8c","0x8cb0a","0x9653f","0x939f6","0x341486","0x33fde6","0x93a0c","0x27000d","0x26fabf","0xa835a","0x8cb19","0xa001f","0x9fcaa","0x14a631","0x148a11","0x34117b","0x33e428","0x8cb42","0xaf5a3","0xadae7","0x8cfa5","0x2a8c14","0x2a0bf0","0x8cb6b","0x181e3e","0x17aa0e","0x2a845f","0x2a08d7","0x2a0706","0x26fdc4","0x26fd6c","0xa7397","0x182190","0x33f964","0x33f14b","0x26c6ce","0x26c267","0x8cb97","0xb85b8","0xb8254","0x33ef59","0x26c2f2","0x26c020","0x26ff41","0xa7d77","0xb860f","0x33f392","0x266f60","0x8cbad","0xbbebd","0xb9be7","0x8ced8","0x270232","0x276ec7","0x8b972","0x653d4","0xbba05","0x33faf3","0xa704d","0x3aeeb9","0x3afb58","0x39b6e6","0x387d4e","0x4af2a6","0xa8323","0xf9fc6","0x1002ba","0x2ccec","0x40adc","0x17f517","0x11042e","0x10391f","0x104b80","0x11f748","0x4126c4","0x34b40a","0x348b1f","0x55eb","0x37c9","0x103fed","0x10510c","0x119174","0x165949","0x1ad287","0x16555d","0x1aa4ae","0x21236e","0x25df5d","0x20dc61","0x2569b0","0x290f22","0x11073b","0x107531","0xf8dae","0xf9348","0x11d16a","0x166c6c","0x117ccf","0x164272","0x1acc7b","0x1aa5c6","0x2125f7","0x110d2a","0x10e503","0x10d049","0x10b8a6","0x10bc25","0x124246","0x135118","0x19eb9a","0x20d08c","0x1ac860","0x21471d","0x14e5d6","0x1a35da","0x11bf1e","0x33ac30","0x16e27e","0x1e76e1","0x224fbc","0x27b733","0x2a8f5c","0x2a8eb6","0x2a8d74","0x2a808d","0x2a7b40","0x2a78cb","0x2a7143","0x1a3c6c","0x126b54","0x16f609","0x1e80e7","0x184ac7","0x186448","0x1f833a","0x20d140","0x16f66f","0x1e822b","0x2255f4","0x27c66f","0x2abfd2","0x2ce6f5","0x2abf2e","0x2ce532","0x225500","0x27c482","0x2aa91a","0x2cdf5c","0x2fb386","0x30f8f1","0x2abe90","0x2ce69c","0x2ce6e1","0x2fb475","0x30f95f","0x3160ed","0x31ac7f","0x2a868a","0x2cb56f","0x2fa7f4","0x2cb4a8","0x2fa690","0x30d700","0x315ff9","0x2ce626","0x2ce528","0x2ce521","0x2ce619","0x2ce65a","0x2ce73a","0x2ce4b2","0x2ce585","0x2ce6fe","0x2ce5e2","0x2faa8a","0x2aba9c","0x2a8368","0x2ab83c","0x2ce6f9","0x2ac028","0x30f853","0x2ce52e","0x2fa64b","0x2b93b5","0x2ce168","0x2fb56c","0x30fa47","0x2ce5bf","0x2cdf13","0x30f453","0x2ce5c6","0x2fa87b","0x20f4ea","0x258522","0x1a39aa","0x2ce475","0x2b93a2","0x2abe7a","0x2fa69c","0x30d987","0x33ab96","0x2ce62d","0x2ac163","0x2ce7d1","0x2ce5e9","0x31ac84","0x315fe8","0x2ce4f2","0x2cdf19","0x2ce52a","0x2cdf68","0x2aa73e","0x2cdbf8","0x2fb38c","0x30d90c","0x2ce500","0x2abc69","0x2cdfda","0x2fa773","0x2a7411","0x31601b","0x3173b6","0x2ce589","0x2ac1fe","0x2cb51b","0x20f423","0x225556","0x27bb8b","0x31ac6e","0x33ab9c","0x20f405","0x20f43d","0x2a83f5","0x2aba09","0x27bb81","0x2ac2a3","0x2ce7dd","0x30da82","0x2fb5f8","0x2abb68","0x2ce5b0","0x2ce5ed","0x2fa977","0x1a39b6","0x2abaa3","0x2ac130","0x31734e","0x2fa8f6","0x20f526","0x30f837","0x2cb549","0x2aa746","0x2aba28","0x2fa751","0x2ce6f1","0x2a869a","0x2fb351","0x27bc37","0x2cdcbd","0x30fa4d","0x31602b","0x318e50","0x30f4aa","0x2ce5d4","0x2abc77","0x30d6f0","0x2a73d5","0x30f44b","0x2ce53e","0x2a73b1","0x2ce6e8","0x30f46f","0x1e6e69","0x20d468","0x16cd3a","0x16d185","0x30d917","0x2ce256","0x31acb7","0x31ce61","0x31cee5","0x2a7386","0x33acb4","0x2ce7e5","0x2ce377","0x2a8439","0x2a74d1","0x27bc5e","0x2aba55","0x2ce5dc","0x130f2ef00007ffe","0x316099","0x3190f6","0x2ce763","0x27ba3b","0x20f467","0x2ce7e9","0x2ce4a5","0x2fb859","0x2fa9f7","0x2ce623","0x2ce664","0x2fa82e","0x30d863","0x2ce66f","0x2a7442","0x2ac153","0x2ce496","0x33ab82","0x2ce7cb","0x116a48","0x33abce","0x316013","0x30f4ae","0x2ce604","0x3160f6","0x2ab934","0x2abb36","0x2aa405","0x30d855","0x2faa8e","0x2b93fc","0x2ce16e","0x33ab90","0x30d8e7","0x2ac2b0","0x30f968","0x116a40","0x2fa65d","0x2ce6a6","0x30d94b","0x2ce581","0x2cdf9b","0x30f831","0x2cb5f3","0x2a7378","0x1a39a8","0x2a869e","0x2abaf0","0x2abe84","0x317068","0x318e80","0x2fb62e","0x2cdf62","0x2ce1da","0x33aca4","0x30f488","0x30d736","0x2ac104","0x30d8a9","0x2ac20b","0x2fa667","0x2fb476","0x2ce553","0x30f875","0x30f48f","0x2cb534","0x258517","0x20f4e6","0x2ce464","0x2a73ef","0x31ceb1","0x2ab697","0x2fb83b","0x116a5b","0x2aba32","0x30d8c7","0x1a39af","0x2abd1a","0x30da57","0x2abe6d","0x2ac170","0x2a73dc","0x318e6c","0x2fa8d6","0x316046","0x31709b","0x2a7360","0x2cb5da","0x2aba2b","0x318e54","0x2ab90e","0x30fa43","0x2fb37a","0x2ce736","0x2cb574","0x30f839","0x2ce698","0x318f8e","0x2abd3e","0x33acbd","0x31cef3","0x2a752b","0x33abc6","0x16d257","0x1e47e7","0x2a846d","0x2a7548","0x2aa426","0x27bd70","0x2ce6ed","0x2a74a0","0x25856e","0x31ad3c","0x2b939b","0x318e9a","0x30da89","0x2a7524","0x2ce6d4","0x3170b5","0x31cdf5","0x31732e","0x33aac1","0x30f495","0x2ce437","0x2fa778","0x2abb82","0x2ce04b","0x27bbfd","0x2ce60b","0x2fa781","0x30e2db","0x31cef8","0x2ce60f","0x3170a2","0x2ce648","0x30d9a6","0x2ce5bb","0x1e4a84","0x31acae","0x33aac4","0x2ce6cc","0x27bcf7","0x2ce68a","0x2ac2b9","0x31aca5","0x27bbbc","0x2faa97","0x30d744","0x2ce5df","0x1a39c6","0x2fa8e4","0x2ce616","0x30fa9a","0x2ac045","0x27bbfa","0x2fa965","0x2abb89","0x2abab7","0x318f74","0x2fa949","0x2ce4b8","0x2a7569","0x2fb3e0","0x2fb2eb","0x2ce051","0x2a7387","0x2ce545","0x2ce6da","0x318efc","0x30f4fb","0x2ce096","0x3170c4","0x2a741e","0x2ce4b5","0x2abdf8","0x2abb3d","0x20f4c0","0x2ac211","0x30da81","0x116a50","0x2ce469","0x2fa798","0x10bb5a","0x10bfe7","0x12ca81","0x18aa3a","0x1f9d34","0x33ac4f","0x10d6a7","0x10c7fb","0x10c113","0x1081f4","0x121fe7","0x3023a","0x3d6f06","0xc9c41","0x1cd928","0xf693b","0x198d3d","0x197ccf","0x196cba","0x4572","0x10dbb5","0x10dc8a","0x12cb36","0x3bb3f0","0x4cc352","0x12051f","0x195f00","0x4d69","0xb820","0x2a6cf1","0x14f5f6","0x1a38ea","0x30fa51","0x20f528","0x27b9a2","0x27bd89","0x2ab850","0x2a836f","0x27bb87","0x2fb6ff","0x2fa968","0x2ce5cc","0x30f8f3","0x2ce691","0x2aba6b","0x319002","0x27bc0e","0x2ce10a","0x30e368","0x2ce249","0x2abb6f","0x2fb6ee","0x2a7499","0x2ce36c","0x30d7d1","0x2ce27d","0x2a74c2","0x31ac77","0x1e6da4","0x2abb9d","0x2ab8f7","0x2faa51","0x2cb4c0","0x2fa6e0","0x30f2f1","0x30f9e9","0x30f921","0x30d9cc","0x2a86a7","0x319047","0x2abafb","0x30d78b","0x31712f","0x30dada","0x2fb70e","0x2ce4bc","0x16cd40","0x30da1a","0x2cdc40","0x2a7474","0x2ce5cf","0x2ce45f","0x2cb600","0x2abd62","0x2abc4b","0x2ce64f","0x258527","0x2ce3b2","0x2cdf21","0x2fb308","0x2abb9a","0x27bcb6","0x2a8662","0x2a83a3","0x2fa9c6","0x30f4cc","0x1a39b9","0x2ce452","0x2abda7","0x27bbb8","0x31ac86","0x2ce3bf","0x2ce400","0x1e4975","0x2ab490","0x2ac218","0x318ed0","0x2fb753","0x2aa4c0","0x2ce6aa","0x30fa4f","0x2a839e","0x1a3c96","0x2cdf1d","0x31cf03","0x2a779a","0x2a7778","0x30f4db","0x2ce457","0x31725f","0x2fb6bc","0x27bc7c","0x2a8342","0x2abb08","0x2ac17d","0x2ac039","0x2ab6f6","0x2fb45f","0x110f3e","0x10c948","0x10c4c1","0x10c6c4","0x12d4fd","0x3ade98","0x1db0e9","0x1e0704","0x1e8eea","0xc5a3","0x111028","0x10fd97","0x10f438","0x1085c9","0x105a70","0x120898","0x3baf89","0x4ef563","0x9d9d4","0x1139de","0x112d15","0x112322","0x112741","0x130a69","0x3df5f2","0x1b27fc","0x1b1efc","0xed26b","0xe09e3","0x112a96","0x113294","0x12fcf6","0x3c84b5","0x6730fb","0x6b71f0","0xed365","0xd2954","0x4caaee","0x112199","0x112554","0x13072a","0x3de881","0xfb4d4","0x608fd","0x9d902","0x112d7b","0x11283f","0x10dd72","0x12cd3a","0x3c68ea","0x1a5098","0x5fcb1","0x5eaa4","0x5ea1c","0x11215e","0x1124e8","0x130663","0x3d3134","0x4f3e38","0x28e279","0x2a000e","0x112c73","0x113404","0x1300d5","0x413480","0x19fd12","0x19fee7","0x1a2572","0x108d9c","0x113015","0x10c63f","0x12d3a9","0x3b0ef8","0x4cc004","0x1e2827","0x1daaea","0x1da1ac","0x1d96f5","0x15cf3f","0x199d67","0x67fb","0x113785","0x113d4a","0x3a4b5","0x3a041","0x10a527","0x110e0a","0x8619","0x77f4","0x764c","0xa8d6d","0xa6ff4","0x1da422","0x10a51d","0x61dd","0x11d64b","0x1b0995","0x15a56a","0x37e9c7","0x37990e","0x3b0c8b","0x255343","0x2f0ede","0xcf344","0x3c6b94","0x4cc48d","0x1cfaae","0x120fb0","0x195e14","0x1121ba","0x1125c1","0x1307da","0x3d80ee","0x80917b","0x138364","0x1a22fd","0xc344","0x1a2339","0xc532","0x1a245c","0x111f95","0x1123c8","0x130463","0x3dbd2d","0x1dd911","0x1dcaab","0x10a85b","0x106cd4","0x9818a","0x966e5","0x113a17","0x112d3a","0xfabf6","0xf9a82","0x16d2f4","0x113148","0x1134c4","0x130b81","0x4085b0","0x1a04f7","0x1a9101","0x7ec6","0xa838d","0xa5afc","0x11206f","0x10c5a6","0x12d1fd","0x3d26e8","0xf60b3","0xd2fa0","0x3c6dc","0x1dcd7e","0x10ae1f","0x11cb25","0x3c8802","0x7f4cd7","0x7b0df0","0x7a06fc","0x11cdc8","0x134b14","0xedeb2","0x195ddc","0x11cd8d","0x10a4b6","0x5242","0x9a9e4","0x112901","0x76a804","0x74e03d","0x509a46","0x509a2e","0x5099ba","0x1a24f3","0x1e0949","0xa7c10","0x7f4ca2","0x83c873","0x7a0787","0xe1a84","0x1121ed","0x112633","0x1308ae","0x3e788c","0x5a3139","0x8e90a4","0x6730d2","0x6b418c","0x19ff50","0x408681","0x82f080","0x7d93a9","0x4e0b66","0x76a7d0","0x23cbea","0xc24ff","0x8d1ee","0x8d15c","0xfb561","0xe1b20","0x1191dd","0x3dbaa4","0x2836c6","0x283404","0x78678d","0x7a1e1d","0x79dd62","0x10b608","0xa80a9","0xa6f57","0xa2591","0xa1f22","0x25da34","0xa68a7","0xa28ca","0x13d294","0x1d6875","0x112302","0x1126c4","0x13099d","0x3de541","0x4e70fc","0x1cd5c3","0x1073bd","0xf6fb4","0x1a250f","0x1e919d","0xc4cc","0x1a91e8","0x52f7","0x111fe0","0x11242d","0x130515","0x3d393c","0x81136b","0x833c05","0x111f2a","0x10c2ad","0x12cfc2","0x3b096f","0x673326","0x66c82b","0x6dd660","0x1a8f91","0x112b84","0x113342","0x12ff04","0x3bfc6e","0x993841","0x3b0a62","0x673a2e","0x66ca68","0x12fccc","0x33ab58","0x3d7f3d","0x100c7b","0x3db8ec","0x28eb0c","0x28da4f","0xc1978","0xf2106","0x3c82d5","0x8579bc","0x3de29a","0x159d91","0xd2feb","0x3c82a2","0x4e046f","0x5099f1","0x3b09dd","0xc9ff8","0x10b97a","0x1cd2f9","0xf7690","0x1cd27b","0x1df7fc","0x6730bd","0x254b8a","0x251b30","0x1f466c","0x1f252e","0x105267","0xf77bf","0x10a509","0x3c6877","0xeee04","0x4caa50","0xf76b4","0x197a4d","0x198564","0x1b1f18","0x22577b","0x221c83","0x110dcd","0x7e34","0x3e7bb3","0x81703a","0x12572b","0x6d88","0x11298e","0x10de13","0x12cf31","0x3bb707","0x574e0c","0x3d32ec","0x8089f8","0x8efdb","0x9d910","0x19ff68","0x6b41d1","0x6b1a97","0x6ce434","0x1a0751","0x15c90b","0x19a76e","0x3dbc23","0xbe268","0x993830","0x2564dd","0x56f0d0","0x3df98e","0x7b059d","0x7cb1bf","0xdd73c","0x95e51","0x4134e2","0x825a28","0x825235","0x7d1045","0xb83eb","0xa7c8d","0x3e781a","0x6dd597","0x6cf280","0x3f0a97","0x412dd5","0x34c385","0x34c008","0x7a2e9d","0x9a9e7","0x113cdb","0x1a01db","0x1d044a","0x825926","0x19fd65","0x1a8463","0x1a2fec","0xc79b","0x3a0f4","0x39438","0x140a96","0xe393c","[vdso]","0xabc","0x1b1eea","0x19a7e2","0x81014a","0x765554","0x764c08","0x7c8f78","0x7c81a9","0x110dda","0x5fae","0x5ead","0x3b0f8c","0x250238","0x80270a","0x8253a","0x255208","0x2e07ca","0x2f757d","0xa7d8c","0x11cb5d","0x1da4f8","0x1e8da9","0xc729","0x3b0e84","0x800e24","0xe0ed8","0x7b4638","0x11205c","0x11278c","0x130adc","0x3dc773","0x1dd96e","0x1df8ae","0x1db8f6","0x10a873","0x1f35bb","0x33ac85","0x4f3feb","0x509a2f","0x199601","0x10a8c4","0x10e313","libwayland-cursor.so.0.22.0","0x397f","0x109694","0x10e9a7","0x3a0f","0x31eb","0x2be8","0x273b","0x26bc","0x10dae6","0x2b4c","0x33aabf","0x2f11","0x2813","0x3459","0x34ff","0x8f694","0x8f660","0x827c3","0x2ee1","0x59c704","0x113a7d","0x1151df","0x14123e","0xefa86","0xe3a53","0xa25a5","0x7c8fca","0x5e949","0xa5881","0x3bb918","0x4cc606","0x1cfb0e","0x121097","0x195550","0x117cab","0x1da565","0x1d8af5","0x1e09f6","0xc3a0","0x19a7ef","0x197984","0x6609","0x4089","0x67ffb8","0x1136e0","0x1148f6","0x1312f8","0x131adc","0x1151bf","0x13103a","0x19c5a6","0x3c933c","0x7e5800","0x7a55ba","0xa5840","0x1150a0","0x1327a3","0x19d8f1","0x32c3f","0x1afb8","0x3aa1c8","0x11c715","0x8cd6c","0x96295","0x146b62","0x1150eb","0x132863","0x19daba","0x322b5","0x363a","0x3a9d39","0x2292e","0x13e310","0x1f992d","0x1f90aa","0x14507a","0x3231e","0x29462","0x294b7","0x1db8","0x10f1","0x29ad6","0x42c9f","0x4afed2","0x4a8b24","0x4a8afc","0x9d8722","0x9d86c2","0x9d8617","0xa5956","0x32481","0x1b634","0x2a08e","0x432ad","0x431e0","0x1b217f4","0x3a30393b30303d73","0x65722e2a3a30393a","0xe4ead","0x50444c4f006b6d79","0x3b30303d7077732d"],"tid":"32425.1","unregisterTime":7358320.435097},{"frameTable":{"length":8,"address":[1160189,1160203,619782,1305973,510293,1307869,653255,605161],"inlineDepth":[0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7],"nativeSymbol":[null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null]},"funcTable":{"length":8,"name":[1,2,3,5,6,7,8,9],"isJS":[false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false],"resource":[0,0,0,1,1,1,0,0],"fileName":[null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"SDLTimer","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353006.382599,"resourceTable":{"length":2,"lib":[0,3],"name":[0,4],"host":[null,null],"type":[1,1]},"samples":{"length":7,"stack":[0,0,0,0,0,0,7],"time":[7353006.442259,7353006.453911,7353006.461174,7353006.467886,7353006.474378,7353006.48086,7353006.543737],"weight":[1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,11,7,6,6,6,62]},"stackTable":{"length":8,"prefix":[null,null,1,2,3,4,5,6],"frame":[0,1,2,3,4,5,6,7],"category":[1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b3fd","0x11b40b","0x97506","libSDL2-2.0.so.0.3000.3","0x13ed75","0x7c955","0x13f4dd","0x9f7c7","0x93be9"],"tid":"32427","unregisterTime":7358316.33167},{"frameTable":{"length":21,"address":[1160189,1160203,619782,2735323,2574815,641272,641162,2581268,1063093,1121587,1120865,1108674,2582318,2580367,2578148,646881,2580637,2579561,2579090,2547150,2536450],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":21,"name":[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"vulkan-:disk$0","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7353087.884652,"resourceTable":{"length":2,"lib":[0,19],"name":[0,4],"host":[null,null],"type":[1,1]},"samples":{"length":74,"stack":[0,0,0,0,0,0,11,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,20],"time":[7353087.93761,7353087.950243,7353087.955373,7353087.960201,7353087.96478,7353087.970501,7353088.077678,7353088.221614,7353088.23577,7353088.243274,7353088.250377,7353088.257711,7353088.265776,7353088.367584,7353088.382131,7353088.392089,7353088.401927,7353088.411044,7353088.41984,7353088.44659,7353088.670202,7353088.68525,7353088.695149,7353088.704255,7353088.713172,7353088.721718,7353088.747645,7353088.841599,7353088.856136,7353088.865844,7353088.876323,7353088.886462,7353088.89641,7353088.919393,7353089.109834,7353089.126465,7353089.138197,7353089.147624,7353089.15652,7353089.165217,7353089.18861,7353089.404078,7353089.424165,7353089.436457,7353089.450223,7353089.463377,7353089.475089,7353089.49181,7353090.346949,7353090.364672,7353090.373979,7353090.394497,7353090.40703,7353090.41763,7353090.438759,7353090.527563,7353090.538453,7353090.546728,7353090.554843,7353090.562477,7353090.571083,7353090.662081,7353090.674103,7353090.683631,7353090.691906,7353090.700161,7353090.708136,7353090.772044,7353090.785729,7353090.796479,7353090.807209,7353090.817809,7353090.82946,7353090.85106],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[0,12,5,4,4,5,107,80,14,7,7,7,8,27,14,9,9,9,8,26,76,15,9,9,8,8,25,20,14,9,10,10,9,22,56,16,11,9,8,8,23,60,20,12,13,13,11,16,95,17,9,20,12,10,21,45,10,8,8,7,8,26,12,9,8,8,7,21,13,10,10,10,11,21]},"stackTable":{"length":21,"prefix":[null,null,1,2,3,4,5,6,7,8,9,10,6,12,13,14,12,16,17,18,19],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b3fd","0x11b40b","0x97506","libvulkan_radeon.so","0x29bcdb","0x2749df","0x9c8f8","0x9c88a","0x276314","0x1038b5","0x111d33","0x111a61","0x10eac2","0x27672e","0x275f8f","0x2756e4","0x9dee1","0x27609d","0x275c69","0x275a92","0x26ddce","0x26b402"],"tid":"32428","unregisterTime":7358303.109732},{"frameTable":{"length":28,"address":[1160203,619782,947555,8159828,8231598,907007,615992,605161,8232732,639969,605863,8232591,8169438,8169442,8169810,7869442,8231542,8169645,8158404,7996956,641272,641162,941928,-1,8170306,8157711,8079871,640160],"inlineDepth":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"func":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"nativeSymbol":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"innerWindowID":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"implementation":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"line":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"column":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"optimizations":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"funcTable":{"length":28,"name":[1,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"isJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"relevantForJS":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"resource":[0,0,1,2,2,1,0,0,2,0,0,2,2,2,2,2,2,2,2,2,0,0,1,-1,2,2,2,0],"fileName":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"lineNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"columnNumber":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"markers":{"length":0,"category":[],"data":[],"endTime":[],"name":[],"phase":[],"startTime":[]},"name":"Thread <32431>","isMainThread":false,"nativeSymbols":{"length":0,"address":[],"functionSize":[],"libIndex":[],"name":[]},"pausedRanges":[],"pid":"32425.1","processName":"vulkan-test","processShutdownTime":7358320.435097,"processStartupTime":7353001.849467,"processType":"default","registerTime":7355112.772217,"resourceTable":{"length":3,"lib":[0,8,12],"name":[0,3,5],"host":[null,null,null],"type":[1,1,1]},"samples":{"length":13,"stack":[7,7,10,7,12,13,10,15,16,22,23,26,27],"time":[7356520.303988,7356786.269276,7357437.271536,7357637.213375,7357654.214242,7357670.671755,7357720.522005,7357753.701209,7357820.60906,7357934.983238,7358034.611676,7358117.492686,7358215.792579],"weight":[1,1,1,1,1,1,1,1,1,1,1,1,1],"weightType":"samples","threadCPUDelta":[878,1128,3363,1003,199,141,264,185,364,345,404,371,300]},"stackTable":{"length":28,"prefix":[null,0,1,2,3,4,5,6,3,8,9,3,11,11,11,14,3,11,17,18,19,20,21,null,11,24,25,8],"frame":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"category":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1],"subcategory":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"stringArray":["libc.so.6","0x11b40b","0x97506","libstdc++.so.6.0.33","0xe7563","libVkLayer_khronos_validation.so","0x7c8254","0x7d9aae","0xdd6ff","0x96638","0x93be9","0x7d9f1c","0x9c3e1","0x93ea7","0x7d9e8f","0x7ca7de","0x7ca7e2","0x7ca952","0x781402","0x7d9a76","0x7ca8ad","0x7c7cc4","0x7a061c","0x9c8f8","0x9c88a","0xe5f68","0xffffffff912000ad","0x7cab42","0x7c7a0f","0x7b49ff","0x9c4a0"],"tid":"32431","unregisterTime":7358301.200997}],"pages":[],"profilerOverhead":[],"counters":[]} \ No newline at end of file diff --git a/src/vulkan_renderer.zig b/src/vulkan_renderer.zig index 205662e..f1336ec 100644 --- a/src/vulkan_renderer.zig +++ b/src/vulkan_renderer.zig @@ -4,7 +4,8 @@ const vk = @import("vulkan"); const builtin = @import("builtin"); const shaders = @import("shaders"); const zm = @import("zmath"); -const img = @import("zigimg"); +// const img = @import("zigimg"); +const img = @import("zstbi"); const Utilities = @import("utilities.zig"); const QueueFamilyIndices = Utilities.QueueFamilyIndices; @@ -99,6 +100,7 @@ pub const VulkanRenderer = struct { vp_uniform_buffer_memory: []vk.DeviceMemory, // Assets + image_files: std.ArrayList(img.Image), texture_images: std.ArrayList(vk.Image), texture_image_memory: std.ArrayList(vk.DeviceMemory), texture_image_views: std.ArrayList(vk.ImageView), @@ -131,6 +133,8 @@ pub const VulkanRenderer = struct { self.allocator = allocator; self.vkb = try BaseDispatch.load(try sdl.vulkan.getVkGetInstanceProcAddr()); + img.init(allocator); + try self.createInstance(); try self.createSurface(); @@ -157,6 +161,7 @@ pub const VulkanRenderer = struct { try self.createSynchronisation(); + self.image_files = std.ArrayList(img.Image).init(self.allocator); self.texture_images = std.ArrayList(vk.Image).init(self.allocator); self.texture_image_memory = std.ArrayList(vk.DeviceMemory).init(self.allocator); self.texture_image_views = std.ArrayList(vk.ImageView).init(self.allocator); @@ -186,7 +191,6 @@ pub const VulkanRenderer = struct { .{ .pos = .{ 0.4, -0.4, 0.0 }, .col = .{ 1.0, 0.0, 0.0 }, .tex = .{ 0.0, 0.0 } }, // 2 .{ .pos = .{ 0.4, 0.4, 0.0 }, .col = .{ 1.0, 0.0, 0.0 }, .tex = .{ 0.0, 1.0 } }, // 3 }; - var mesh_vertices2 = [_]Vertex{ .{ .pos = .{ -0.25, 0.6, 0.0 }, .col = .{ 0.0, 0.0, 1.0 }, .tex = .{ 1.0, 1.0 } }, // 0 .{ .pos = .{ -0.25, -0.6, 0.0 }, .col = .{ 0.0, 0.0, 1.0 }, .tex = .{ 1.0, 0.0 } }, // 1 @@ -220,7 +224,7 @@ pub const VulkanRenderer = struct { self.graphics_command_pool, &mesh_vertices2, &mesh_indices, - try self.createTexture("test.png"), + try self.createTexture("giraffe.png"), self.allocator, ); @@ -298,6 +302,11 @@ pub const VulkanRenderer = struct { self.instance.destroyDebugUtilsMessengerEXT(self.debug_utils.?, null); } + for (0..self.image_files.items.len) |i| { + self.image_files.items[i].deinit(); + } + self.image_files.deinit(); + self.device.destroySampler(self.texture_sampler, null); for ( @@ -367,6 +376,8 @@ pub const VulkanRenderer = struct { self.allocator.destroy(self.device.wrapper); self.allocator.destroy(self.instance.wrapper); + + img.deinit(); } fn createInstance(self: *Self) !void { @@ -607,14 +618,14 @@ pub const VulkanRenderer = struct { // But must happen before... .dst_subpass = 0, .dst_stage_mask = .{ .color_attachment_output_bit = true }, - .dst_access_mask = .{ .memory_read_bit = true, .memory_write_bit = true }, + .dst_access_mask = .{ .color_attachment_read_bit = true, .color_attachment_write_bit = true }, }, // Conversion from VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR vk.SubpassDependency{ // Transition must happen after... .src_subpass = 0, .src_stage_mask = .{ .color_attachment_output_bit = true }, - .src_access_mask = .{ .memory_read_bit = true, .memory_write_bit = true }, + .src_access_mask = .{ .color_attachment_read_bit = true, .color_attachment_write_bit = true }, // But must happen before... .dst_subpass = vk.SUBPASS_EXTERNAL, .dst_stage_mask = .{ .bottom_of_pipe_bit = true }, @@ -1170,10 +1181,9 @@ pub const VulkanRenderer = struct { }, .p_clear_values = &clear_values, // List of clear values .clear_value_count = @intCast(clear_values.len), - .framebuffer = undefined, + .framebuffer = self.swapchain_framebuffers[current_image], }; - render_pass_begin_info.framebuffer = self.swapchain_framebuffers[current_image]; const command_buffer = self.command_buffers[current_image]; // Start recording commands to command buffer @@ -1506,8 +1516,8 @@ pub const VulkanRenderer = struct { // Create staging buffer to hold loaded data, ready to copy to device var image_staging_buffer: vk.Buffer = undefined; - defer self.device.destroyBuffer(image_staging_buffer, null); var image_staging_buffer_memory: vk.DeviceMemory = undefined; + defer self.device.destroyBuffer(image_staging_buffer, null); defer self.device.freeMemory(image_staging_buffer_memory, null); try Utilities.createBuffer( @@ -1521,10 +1531,16 @@ pub const VulkanRenderer = struct { &image_staging_buffer_memory, ); + std.debug.print("Image size: {d}\n", .{image_size}); + // Copy data to staging buffer const data = try self.device.mapMemory(image_staging_buffer_memory, 0, image_size, .{}); - const image_data: *[]const u8 = @ptrCast(@alignCast(data)); - image_data.* = image; + const image_data: [*]u8 = @ptrCast(@alignCast(data)); + + // std.debug.print("Data len: {d}\tImage len:{d}\n", .{ image_data., image.len }); + // image_data.* = image; + // std.mem.copyForwards(u8, image_data, image); + @memcpy(image_data, image[0..]); self.device.unmapMemory(image_staging_buffer_memory); // Create image to hold final texture @@ -1532,7 +1548,7 @@ pub const VulkanRenderer = struct { const tex_image: vk.Image = try self.createImage( width, height, - .r8g8b8a8_unorm, + .r8g8b8a8_srgb, .optimal, .{ .transfer_dst_bit = true, .sampled_bit = true }, .{ .device_local_bit = true }, @@ -1585,7 +1601,7 @@ pub const VulkanRenderer = struct { // Create image view and add to list const image_view = try self.createImageView( self.texture_images.items[texture_image_loc], - .r8g8b8a8_unorm, + .r8g8b8a8_srgb, .{ .color_bit = true }, ); @@ -1640,23 +1656,19 @@ pub const VulkanRenderer = struct { fn loadTextureFile(self: *Self, file_name: []const u8, width: *u32, height: *u32, image_size: *vk.DeviceSize) ![]const u8 { const path_concat = [2][]const u8{ "./assets/textures/", file_name }; - const path = try std.mem.concat(self.allocator, u8, &path_concat); + const path = try std.mem.concatWithSentinel(self.allocator, u8, &path_concat, 0); defer self.allocator.free(path); - var image = try img.Image.fromFilePath(self.allocator, path); - defer image.deinit(); + const image = try img.Image.loadFromFile(path, 0); + try self.image_files.append(image); - if (!image.pixelFormat().isRgba()) { - try image.convert(.rgba32); - } - - width.* = @intCast(image.width); - height.* = @intCast(image.height); + width.* = image.width; + height.* = image.height; // Calculate image size using given and known data image_size.* = width.* * height.* * 4; - return image.rawBytes(); + return image.data; } }; @@ -1666,13 +1678,13 @@ fn chooseBestSurfaceFormat(formats: []vk.SurfaceFormatKHR) vk.SurfaceFormatKHR { // If only one format available and is undefined, then this means all formats are available if (formats.len == 1 and formats[0].format == vk.Format.undefined) { return .{ - .format = vk.Format.r8g8b8a8_unorm, + .format = vk.Format.r8g8b8a8_srgb, .color_space = vk.ColorSpaceKHR.srgb_nonlinear_khr, }; } for (formats) |format| { - if ((format.format == vk.Format.r8g8b8a8_unorm or format.format == vk.Format.b8g8r8a8_unorm) and format.color_space == vk.ColorSpaceKHR.srgb_nonlinear_khr) { + if ((format.format == vk.Format.r8g8b8a8_srgb or format.format == vk.Format.b8g8r8a8_srgb) and format.color_space == vk.ColorSpaceKHR.srgb_nonlinear_khr) { return format; } }

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%0DYerZDlzB84`)|j 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