From 0c103de28f321e2fa769c5662212f77324e46562 Mon Sep 17 00:00:00 2001 From: jdg Date: Wed, 1 Sep 2021 18:34:13 +0200 Subject: [PATCH] first commit (2009-03-30) --- bin/chpwd.ini | 5 + bin/wrt54gl_chpwd.exe | Bin 0 -> 886784 bytes bin/wrt54gl_chpwd.tds | Bin 0 -> 851968 bytes bin/zlib1.dll | Bin 0 -> 59904 bytes obj/THTTPdownloader.obj | Bin 0 -> 38981 bytes obj/base64.obj | Bin 0 -> 16707 bytes obj/mainGUI.obj | Bin 0 -> 47122 bytes obj/tsplash.obj | Bin 0 -> 24137 bytes obj/wrt54gl_chpwd.obj | Bin 0 -> 20351 bytes src/THTTPdownloader.cpp | 180 ++++ src/THTTPdownloader.ddp | Bin 0 -> 51 bytes src/THTTPdownloader.dfm | 57 ++ src/THTTPdownloader.h | 42 + src/THTTPdownloader.~cpp | 181 ++++ src/THTTPdownloader.~ddp | Bin 0 -> 51 bytes src/THTTPdownloader.~dfm | 57 ++ src/THTTPdownloader.~h | 42 + src/TZlib/DLL_FAQ.txt | 397 ++++++++ src/TZlib/GZipHelper.h | 474 +++++++++ src/TZlib/Gziphelper.html | 63 ++ src/TZlib/README.txt | 53 + src/TZlib/USAGE.txt | 94 ++ src/TZlib/Zip/adler32.c | 48 + src/TZlib/Zip/compress.c | 68 ++ src/TZlib/Zip/crc32.c | 162 +++ src/TZlib/Zip/deflate.c | 1350 +++++++++++++++++++++++++ src/TZlib/Zip/deflate.h | 318 ++++++ src/TZlib/Zip/gzio.c | 875 ++++++++++++++++ src/TZlib/Zip/infblock.c | 403 ++++++++ src/TZlib/Zip/infblock.h | 39 + src/TZlib/Zip/infcodes.c | 251 +++++ src/TZlib/Zip/infcodes.h | 27 + src/TZlib/Zip/inffast.c | 183 ++++ src/TZlib/Zip/inffast.h | 17 + src/TZlib/Zip/inffixed.h | 151 +++ src/TZlib/Zip/inflate.c | 366 +++++++ src/TZlib/Zip/inftrees.c | 454 +++++++++ src/TZlib/Zip/inftrees.h | 58 ++ src/TZlib/Zip/infutil.c | 87 ++ src/TZlib/Zip/infutil.h | 98 ++ src/TZlib/Zip/maketree.c | 51 + src/TZlib/Zip/trees.c | 1214 ++++++++++++++++++++++ src/TZlib/Zip/trees.h | 128 +++ src/TZlib/Zip/uncompr.c | 58 ++ src/TZlib/Zip/zconf.h | 279 ++++++ src/TZlib/Zip/zlib.h | 893 +++++++++++++++++ src/TZlib/Zip/zutil.c | 225 +++++ src/TZlib/Zip/zutil.h | 220 ++++ src/TZlib/gzipdemo/ReadMe.txt | 32 + src/TZlib/gzipdemo/gzipdemo.cpp | 36 + src/TZlib/gzipdemo/gzipdemo.ncb | Bin 0 -> 125952 bytes src/TZlib/gzipdemo/gzipdemo.sln | 21 + src/TZlib/gzipdemo/gzipdemo.suo | Bin 0 -> 11776 bytes src/TZlib/gzipdemo/gzipdemo.vcproj | 226 +++++ src/TZlib/gzipdemo/stdafx.cpp | 8 + src/TZlib/gzipdemo/stdafx.h | 12 + src/TZlib/include/zconf.h | 332 ++++++ src/TZlib/include/zlib.h | 1357 +++++++++++++++++++++++++ src/TZlib/lib/zdll.exp | Bin 0 -> 6109 bytes src/TZlib/lib/zdll.lib | Bin 0 -> 10590 bytes src/TZlib/lib/zdllbor.lib | Bin 0 -> 5120 bytes src/TZlib/lib/zlib.def | 60 ++ src/TZlib/test/example_d.exe | Bin 0 -> 8704 bytes src/TZlib/test/minigzip_d.exe | Bin 0 -> 4608 bytes src/TZlib/test/testzlib_d.exe | Bin 0 -> 5120 bytes src/TZlib/test/untgz_d.exe | Bin 0 -> 7168 bytes src/TZlib/zlib1.dll | Bin 0 -> 59904 bytes src/base64.c | 111 ++ src/base64.cpp | 94 ++ src/base64.h | 10 + src/base64.~cpp | 94 ++ src/base64.~h | 10 + src/mainGUI.cpp | 245 +++++ src/mainGUI.ddp | Bin 0 -> 51 bytes src/mainGUI.dfm | 143 +++ src/mainGUI.h | 62 ++ src/mainGUI.~cpp | 246 +++++ src/mainGUI.~ddp | Bin 0 -> 51 bytes src/mainGUI.~dfm | 143 +++ src/mainGUI.~h | 62 ++ src/tsplash.cpp | 88 ++ src/tsplash.ddp | Bin 0 -> 51 bytes src/tsplash.dfm | 1505 ++++++++++++++++++++++++++++ src/tsplash.h | 33 + src/wrt54gl_chpwd.bpr | 159 +++ src/wrt54gl_chpwd.cpp | 46 + src/wrt54gl_chpwd.res | Bin 0 -> 876 bytes src/wrt54gl_chpwd.~bpr | 160 +++ src/wrt54gl_chpwd.~cpp | 46 + src/zdllbor.lib | Bin 0 -> 5120 bytes 90 files changed, 15009 insertions(+) create mode 100644 bin/chpwd.ini create mode 100644 bin/wrt54gl_chpwd.exe create mode 100644 bin/wrt54gl_chpwd.tds create mode 100644 bin/zlib1.dll create mode 100644 obj/THTTPdownloader.obj create mode 100644 obj/base64.obj create mode 100644 obj/mainGUI.obj create mode 100644 obj/tsplash.obj create mode 100644 obj/wrt54gl_chpwd.obj create mode 100644 src/THTTPdownloader.cpp create mode 100644 src/THTTPdownloader.ddp create mode 100644 src/THTTPdownloader.dfm create mode 100644 src/THTTPdownloader.h create mode 100644 src/THTTPdownloader.~cpp create mode 100644 src/THTTPdownloader.~ddp create mode 100644 src/THTTPdownloader.~dfm create mode 100644 src/THTTPdownloader.~h create mode 100644 src/TZlib/DLL_FAQ.txt create mode 100644 src/TZlib/GZipHelper.h create mode 100644 src/TZlib/Gziphelper.html create mode 100644 src/TZlib/README.txt create mode 100644 src/TZlib/USAGE.txt create mode 100644 src/TZlib/Zip/adler32.c create mode 100644 src/TZlib/Zip/compress.c create mode 100644 src/TZlib/Zip/crc32.c create mode 100644 src/TZlib/Zip/deflate.c create mode 100644 src/TZlib/Zip/deflate.h create mode 100644 src/TZlib/Zip/gzio.c create mode 100644 src/TZlib/Zip/infblock.c create mode 100644 src/TZlib/Zip/infblock.h create mode 100644 src/TZlib/Zip/infcodes.c create mode 100644 src/TZlib/Zip/infcodes.h create mode 100644 src/TZlib/Zip/inffast.c create mode 100644 src/TZlib/Zip/inffast.h create mode 100644 src/TZlib/Zip/inffixed.h create mode 100644 src/TZlib/Zip/inflate.c create mode 100644 src/TZlib/Zip/inftrees.c create mode 100644 src/TZlib/Zip/inftrees.h create mode 100644 src/TZlib/Zip/infutil.c create mode 100644 src/TZlib/Zip/infutil.h create mode 100644 src/TZlib/Zip/maketree.c create mode 100644 src/TZlib/Zip/trees.c create mode 100644 src/TZlib/Zip/trees.h create mode 100644 src/TZlib/Zip/uncompr.c create mode 100644 src/TZlib/Zip/zconf.h create mode 100644 src/TZlib/Zip/zlib.h create mode 100644 src/TZlib/Zip/zutil.c create mode 100644 src/TZlib/Zip/zutil.h create mode 100644 src/TZlib/gzipdemo/ReadMe.txt create mode 100644 src/TZlib/gzipdemo/gzipdemo.cpp create mode 100644 src/TZlib/gzipdemo/gzipdemo.ncb create mode 100644 src/TZlib/gzipdemo/gzipdemo.sln create mode 100644 src/TZlib/gzipdemo/gzipdemo.suo create mode 100644 src/TZlib/gzipdemo/gzipdemo.vcproj create mode 100644 src/TZlib/gzipdemo/stdafx.cpp create mode 100644 src/TZlib/gzipdemo/stdafx.h create mode 100644 src/TZlib/include/zconf.h create mode 100644 src/TZlib/include/zlib.h create mode 100644 src/TZlib/lib/zdll.exp create mode 100644 src/TZlib/lib/zdll.lib create mode 100644 src/TZlib/lib/zdllbor.lib create mode 100644 src/TZlib/lib/zlib.def create mode 100644 src/TZlib/test/example_d.exe create mode 100644 src/TZlib/test/minigzip_d.exe create mode 100644 src/TZlib/test/testzlib_d.exe create mode 100644 src/TZlib/test/untgz_d.exe create mode 100644 src/TZlib/zlib1.dll create mode 100644 src/base64.c create mode 100644 src/base64.cpp create mode 100644 src/base64.h create mode 100644 src/base64.~cpp create mode 100644 src/base64.~h create mode 100644 src/mainGUI.cpp create mode 100644 src/mainGUI.ddp create mode 100644 src/mainGUI.dfm create mode 100644 src/mainGUI.h create mode 100644 src/mainGUI.~cpp create mode 100644 src/mainGUI.~ddp create mode 100644 src/mainGUI.~dfm create mode 100644 src/mainGUI.~h create mode 100644 src/tsplash.cpp create mode 100644 src/tsplash.ddp create mode 100644 src/tsplash.dfm create mode 100644 src/tsplash.h create mode 100644 src/wrt54gl_chpwd.bpr create mode 100644 src/wrt54gl_chpwd.cpp create mode 100644 src/wrt54gl_chpwd.res create mode 100644 src/wrt54gl_chpwd.~bpr create mode 100644 src/wrt54gl_chpwd.~cpp create mode 100644 src/zdllbor.lib diff --git a/bin/chpwd.ini b/bin/chpwd.ini new file mode 100644 index 0000000..9a334e8 --- /dev/null +++ b/bin/chpwd.ini @@ -0,0 +1,5 @@ +[APs] +count=3 +AP1=192.168.1.80;admin;admin;elW1lvFYCX37p +AP2=192.168.1.160;admin;admin;1234567891234 +AP3=192.168.1.240;admin;admin;1234567891234 diff --git a/bin/wrt54gl_chpwd.exe b/bin/wrt54gl_chpwd.exe new file mode 100644 index 0000000000000000000000000000000000000000..4ab5ce1c2661890c4f95b77af020da8bb00cb441 GIT binary patch literal 886784 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�(Q>9TSZ9VI>k`j*+uVL%&(+smt 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.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

muV{t^p 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%0A0B_5^m1HNegO8r@o1CwnPD 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%0A5UDp0Gy?Sm=YSnP{UQ1p567sO`6Ul5zP730JE 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

w&=u9W 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 z%0D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�mu5Z^mcXPahQpG)&tEzOt|2*{pHHgM0OGprU1+m+SI6otMEi2it1&P(1=A zJ(MGm>7fjGqaMo9&;pZts2s=lP~dJ-_uj-sm)$aX_DWm^EJ$T{b6KuJ2V_|)*4{>I zh8vJGW1~d!a_1!y`@$Xlu#xq-DwBMDDzzlvh@6ppH!`MB`OJ~KMC2@L0#67D3&hks z$2Y4Wx(S7}L@II4CyFX&pYHgqJMCSb53Pi5I__G3RzkY1vS;&ZTbdJn_v@C^b!kpy z(wY-q*1C<m~;3S_0!yGr``4!x_ifjYT4;HDA(N~zapszgrpiP+h#OzMrO8L68?o&y|L8eHLq^SjI5 z1s(+&L|0PXJO+Osv3$FWt+7hL0UI9guB^zOV5tOzL`vJxZ`Ou9cvTxx%uE|nK;H%( zcUv8dM)YVPbXei*kXCNMsz?wiRvLOg*;06{_+9b^q#o2O(uu z3|V|zv$Lj8G9`puzFOUqpa#R7xgvWpoXvXY$YJdh34#1K6@yW#1ygr{SA3K))N7zs zM!~Gc_$NDL7KLOC>c?Zm8}s$iEgLtT30kI8Sfjm;#3J<_3Xx`n25rzwST8h=c0-}X z+;Z*2?jG*YyK1eDcs6^)#GhQj~tuUh>={{*@0GXlDu1y1w0*!ucJ`7}rMm;`=2J!KeSRQVSJ9gOQ zWKIeDL~|>H5DZz&<$Q29A>H@1VY#m!cjLKot^1?t;V_)bP~&TJNpmoyRaOfy+a<55 zi}2X>V2so64(qJAUQBQn-1eT%f-zVHWGRP}K`y18ZNd+#MP@X&RJgjIDuv6yZbi7% z>7^~u6;`#tYinr>BCzrnU^=K$53Bkm>VYX}Y4zw=t4F_7Ju3}7P(8k}dJ~#Bb{gUmD)YZ;oHuVrU(@8G6BPlvhoUD|hiGO+npS-RySP+Ms`+B;$v8B} ztM7)4*y068EH+;bvy~Sc`lVcK0LY3hJL6P|O;0y@xlCxX$rXbm|XFM~UEkm?*63Wbt(2@rQ`sM47)C%kw4_E9JQi@ti!Dq2=Yt$MmvO zv8N`CoMnjyW15KAb}l!;XE4_DV(mj{7>jCGqx!4Ot10jX0qbD1!N=j`=@5JO$k$3Y zqVBzQF>)*c zazM@^%<#T4Hb_(}OgNp>bx+3n*Ckg&I&RB;LQl@=LuG*=Y)zcCZtoNav#+qUciwhL z70oFw!AJpj9Y?~hqWuNNV(Sl-bD*ONrXTgrl-a=HuqHDb`{XsjY&I2_r^OV{PCGTT zSI3hArC&-(yAzyKze?0+0o`^2G?J02q-yXjtRmA(MQxqrkgllv zMwlTId`ub;E5MlXAFDXZ7(YMM?55S5w zocE@4rRHY%2;@>`zZ6iIBGaNG5gV~lg%KMC`QN>&dpy~Qp`1pwVpUaa_TZfGJOL<0 z+(oL;Sq;ew8Tx6vMJp82i>(k!rJ-&_E{t=AP-cYy<_3{yg@}%~LLkWz~7>{{pE~q#=NPnCoXfgOG{eBkM4@Gr$@27fZsAR#q z1V79YPJDu|>9Bw~ipy&-?t)Zet{ZY_HXwC`AsTm(n%#s*OOhdJ8k~Vl`!SwNm`=bw z)nkIqtHg{sU=w~#7%`(lfJ&KI6MD&;Deac?36r=mwjuf)X}pzk76eEzWaAuI05i+ja~-2VB4-tLFo z{+Ac8yRH9?dmvw!cR&s&ObnT?8xPwN9b-li5Buh;s~>XzUCrCqHUwh)E-q)v?f3!v zSFg`cfBPY~|M1iO#fRMf{%_t)@kXgz`{>IL-774AU^^ylcld%JU{F>!;9wP>BleEt zBuOduKeLqFGtKG^%WiQo32CL}txZo&BVF{~45urZw?A=LkBYlz3ra?c!!C4N=u=N( zfMel!Hg7PZM{x&TMKMc@j`PT`YT`tST+k|#x-NV3;%fK>RCOU#bum0$x+W#8e9M}2 zL>~*P+v*6=%5?;e4#^#XV?oPw#FAAl(GjIJm30JK_L1**J|d#Svgs8%u}l7eCnk=K zYO3g*N}!c$kk-GOa1xB1$~s6(DuL=S^49_*eq2>nQHu}L#g)WrcD8VwS{i>1J6oWd z$~Xl|WSoLD?Cg|)AmkLN4kL{^JFTJ?A981>#E>A&&76E>>$|Y4D#bXt@>18bgahI@ zj%lDHqfeOVbtux-gPXIK9YZo0kO_g-D+j;o5d6T2sFUQPPexAB*IH7^OgN3CqHS_e zJ54ar2OK!GQt_>1GkgS|G*cqkKyV_HlHf2=Yt(7h1qBTxx4D>FGNTSXbmR0z7g$ljin#)~f#Ety3l{f1N+zPqHo*-&j-cgtn z4BbsxswZwzVRcUs$GL7sS!qvDlWLC%bAjlVdcsl@c{hbpPne?SJ#o_t%X`9dEcJvb z%l3qAQlp+ArIMz-=GKX-Cu-TAKw+*YNP!xUiJMkf-4n!dt|w4d+7r|ywtnIB#4X$n z6Z`D{P0Ve$9KVfvA&*-ivvM0mTK`Yd-e5kv1wN_!Z-LD1H241#n(JrNTVV5+T5E>I zEihDb0NJzA(nXit#mL(jKugt|YSc1h5{+7hNW%fNOcjDkEkovZn%igqEyLz5wN@TL z%P>@904;l~3YKfv@DrGqn0JoU;r&!MWj;8lDVDc)*e91vUy9bO$X4j4AmS! zc5F%)y}qa!h?=xiz3Bj2hD@SS%MfWefR?F3P^o3e+)i^F4WMP%yrtI4185nBTEFmK zD_;YddqVbdc`o|;w>`EPBooL$z0-bGbeyip>9$1*n}Q-7hvNOcS^=@aUN+f;L)=;!*_4T z)6?!?+8fY@yh)pJ+I!c%=;8G%x-j9CkXSY8!&X~6UJe-|2nx?%SCL^E#xrC{HeH>n zwuB!X5ZJEdsCO~BsAA}6`h2Lgyvy98#u+4B1)%GJ?DR#ZF^YrA#*C%s`5GLA21n|G z$TeLgWZM#_#d$HuO{(QJwm0t%bz7H|6P@R1&3#YZoFy7WM%qe0?mK<8eL$K#SmhZ^ zZl_jySXfb-QRlD3jndU_5Py2q(B{JsU7q5Zrr|{4v2Z1?YI!rKsaVaQ4EU9AU1r2J#JwFdQ>`zE1tlJI7+A=d za_f0WCLrfut6r{S%4Gt=TLY`IDMvyaXUhAfrrf0RsWRo*VJtD_hDfz32bmI6ZphRz z<^9!iQ*KCAnsP8yGS=j7po^Q;rkrzN6*@Cd_E%+7E>|yUK`m3hl*ZOFFLOrpMJzNC7o=hfTgcG=X`#FQJ9`lftoS=BS;;K!Kq ze%6%VkOgMSA8D^mUmQCtM#Hif{pj7n$?#H5bRuF->p5cZBy82=q83rj$m;%);S}}* z8ID(~Dg<7@XwjfT8L?@N?vcry6U>?z)aVdv)c6bCi`7Z{PsiQf=xy)ata~}eg{v#o zl`?jEKx;$9?#d%_d5`C8G=_;)gGKp=^;|JLpio@&M%~F6CP_7`ciW69(l}l1SG9dH?Z$T1Z~M}WrENd+;#H@Z%<@Qk$ZN}Yzb58o9H;s1zJ|j+LN~w?488Y$IXv&4 zji(nq-T4nq1tc81Y)m@ ziD0U)^1JZ%;}kQ)TM7XM?vwU{%3QX|WKL=rxj{AX$hs=Th83PKS>dpcK z90Rg9J6A1GXQ5p|>v`bKN(|EL=eQxP51Ttg?BLATrucUydNy7MSJkTN40G5@Bra!-MmAqf2Ff@&Mh7xL{c~k#5YN%OR3aFzGgh-xL85|< z;b;2tcqtn}uUCn3afzv1o8QJ}bm+{Xc~YTX@0k%qF=rY;>ha}P@VI*w)9PVIW%yLc z7B{?~RgS8HeA3E6^&L&8+bzZ_-F$&ml(-B#!hYZs7x%AZJ(cHFe%Zlsf)w9S*3o z8vk**%zZOCf%_Z+=l+TAvbsi&yBj7}R~I!fSSFuXU0mBi4IPffl0$Pw)3dUX4ci#l zgG?K9y<*$=>!?Q>zWzQKUrc&a^3N!doI1IX@iHtVy^S<)V;260w^{Q|cimh6_%3my zlJZINk$Y2E5YSV|yk}(j)F+4Ab}ZxKo66uH_qg(pP#S z^-O)n9X+j~HFO_UVYJsi0Ik~{BnB`%ufbQ@TV0PbHMwDZ@ z0iwyPYQh;5$v}9*YQ?oSAM-Z+hzJn669Gbh6ksk$0*oj~(#Ks}t(3{Dr5V~LccL6r ziNi`VunBrp1DhLL)XaLo8Or93S(jcD2}dt_*UG&R6PBvP)&4k&gswccEBg{Hr#xF+ zD9VjI-P!B$+l$`iJ2fjd!n~$MGLB(kmKn*8s%$$*6=?I4tPwe?&>bWw)w-Zo#!!~G zNG(mC=^$J?`Ndj}G+V5RjmhB!V#s(SIb7%O2LYaHUj0I$VTCUG(X>K`*hn_Mqx++9 zYpq5bt3o_Ep~BLZ2cvR`CUnyeLpN2+i}S&FVfK&$&$$YZmTR*y-tWd4nGx>ohf}wH zkTtv7C@#CbE49+6T?mF+r&giHDzw?~az1^xu`(XhO6sv%->mDDy4qo{M?jWru0N_I zo5N$0h1z8#n?tUYYz|Q`zbA2xRxmlVP_hk&rC*hlbV+&5_V`Zibr-k#8QJF6$k#I% zS+e_3_=d|UZ%OjF*@o6&Ifv_5M!z<+wJxG7M4B;C#gXQIP9%BO>?{i2ZthVA63&p5 zSxLNSY+h`5a^UW}fx~9p#n-*rYfRK?scGX)P750@ar?t_csDRj+uRtMC6KI+3D@NF zn^U(DzuIec{F2*Y;$s274Wv`bZv#4p->>ObJC_bg`%9fg^;$sQStRs~vxp+=EC%yV z)k&G@DXo|ESy?_^Es5ujyU2Y@;W%5L$fhh}jus4dcMzx{o@28b?{9O(Mf5K_^$*6A zcV`!PCkIdd>IZ7f44lVlCB$?5lo8M1@MMtFx8312Hq-Fxj~RRGI)A%iQG0#4rrqpL zhRN{HBNZ6Y5K|KtrpsT#O&y|fi<50`;ui=uaUVqm7G1z%~ zs^7n`qj*}Nhl2^NN};S`jPG1S#>+M2^v*Tpbh(C{-MNOGE!U9Z&NXDTTtk*bJHK=7 zKVPo>v(`UoGLst9GWl#;*AHE(4QWMM%WuS_pk_aC(qvj#X$0NsFCm+0Ge2XgIwlS4 zI9{S1kZd>+tweu^v5~ry(&E$BKhfOWnducQg)6`EC5u(PDO}+@*Och&V(nfT-Mywn z!MEB?nccmn%$8HI$<>`}3Rr41RuHaKdpg*gYZ(2dof$$^2W!`x7_h~qS|`$;MUxdD zf?R~Cwl@DSjfp?is!m>5N=xN0Huiv18UA%GL^=iy=d(gJ%dQWaOq|o-T~#=8)ohmj zZ&TNzDBnUzdl7Q z{Px;%*0e1VXJ_t|^7Q)bRyjMrA!p}|vvY9v>GJ*mdDAhmd|i{@VO`V3@338s>-x7; zf33dF#^oCt`-WqdJ-Agf#-54ROGZuxO=dLg>IpG+e9bjorn@S}*kxGaq5tCIkr-po zqXf2@HY2NI>64K8dv8c4WM0*fBxL^H8eB92H3V^$&h&k)oB_sfA2#l7c#GG zN)j@E|4qq+%qyFcgv{T6Q!*j*%BCbC^Y`DBOvt>dDQU?3y*DKnGS4-|h0GhD4rU?q zeoG9Q=jyBqndk8GA#)i+3NU=Jp@cXt&~G@O)d-o(O@-xKhSdjS$UF*>JIM+sU_|HfKDFy;9U-d1Vs}C4pk~=oJ{Sg3Sa zgHQ1~fZB#^Ktm;t7@n%5yTUD>3W05CoeF1wDjcJ|V|)GoPRMQ?h6QW3VRC)d`VX|s z??fwzpJgn`>7D9})1}&QwiK32LUAYhuUM)L=Xa|2&X;P#=uWj^v{V~rcd89h@Tjgu z`{K`A*5@SHQ>Z|T{H+S;RuFWl0Ji>CbgI1!oQI-+!kVFs^ub2(F?cIe(J8B20oXbZ4?rZLQC5z-ZN3 zwu+X<*ALG|y>ldnDO%r9JlShg8DmmVLNgdgU^DZ2<$3?*kMtK=W)HO^4x zR31f6Fp!$d(0jbFD26 z=4OymPcQ?xkqhQ7)4J+lZib5}nALlVq=uWiT#b1T}A1aseO8#2M% ziZ&#{-1pjsOfa{i4ZnkvfYy1e=0xl0$XDT%gtnW@X6a0!$fjcdxT#DV{;i2eUE=H>xW>Bv#SmH;`b{ znrg(oGXjz0-ZF3!jiY;va_~_mu-Z!E6B)pblK4ahCCrsw^?J{2IH!T2((3+I-Jpq1 zkcqHKqfB_MpVy_|Jv`~YdU>?@Y^OUI4SP7~RfJap{RozKCXi^9wJQkRE*ENL)Pgk2 zR=kRfso(mWnq6xY0noITB91XjewOGO9Fo0xA7FTuF3iWll;aq$mk* zZ-Qr|@syQ3o@H&32(|wGyTONgkL0E@F&|~Ukqon-uVzGQ&b02rUq(qadV4&Vg`eHP6yQOb2>LR^*=V8k1vPs zl83G1H@bgN27EppFDCRp0IeqftPC=JLA?|_eYsm^+Pv6Qk7)y3gJ}aUPe^oj>!VjV-Sr76!+TSil=^k`d1?K%whn>gQXd_YbEUIe zpW2N(=$3?{I!JPM>o?_g1)~^}oZSWtRk@h;N!c3$%j(SSaiZiRIlJ{66L!?1=u6Hn zEUa^Ok%y`;yOP=tpK@37@84{6*&`#@lIL5$jj~6p*{$QzYRH-%ZGE;No6+DmX2dD^;zLQk8XV3IuT2DMpFyDxa!{nge_v~rsl zPP=`*gv#*}`{f$0$}g|aZ7cOenNt^gqN$h5fa~~|3_SHOWmb&WSdWzkt}d~Xb#-I6 zRExdbEwx?9e9jsUW&N(|iwt?ShrY}2TO!VGIu z{5u)UA513$`|5YC*PqAgB6}rCGt<-}xwxFYF3uuh*$!8u#%I{T8x@5OXc*D22#OIr#J#E2=?rFi zB~ld1INY0^(>}`DLlwpoq3jdyVj)OO=_x?mj4`uv7Hl$F5ZEEN4s}{ioPSovpnHT~ zu38Nk6$=uDE)UXjp$okp2>p35hT%vglCPT0?kwEkn=I?Am=tJOjCM+(^vRC8oGUGp7eYK(iiZaehN@ZDPkjJgB7bo*vF zwW>Ei>t6IQS0SLF{Vlf7aTf)BdKZ~GyNgVX?jlp?t$%v=1~1OD-$ky9)_0t&hSOru z9TgYFe73SE^h@dRO79}uqdUpfEGNv_T^1%%ul^TW2k11*O=r9ADZ(^Zb>7O9H&N5Y z{G#<=-y(y2@8fp4yiGAuU);JF|EpUR<6A5&u`d-_iN%+t$ToZDVh>NXrv> zX@&JRrP8%c15$Qv z(~o_&-@TrsOY=|fB2%Sn8>4#pwGH-4qxITd5OlJ(xeH7sYn!{kRI;|Y3rrNts!JC}dURr<0v0<^)v*37Rc+Wxy6pT{CBF=|7Tvo1 zh6lfR+x`zG-{s$Qz{+&lXC2}_H(b_{)_?UkWLg(~b3t!lsl*3-ZwtKYy{((yiygH7 zqdO9la6*qgF7@2YoW|vj~BBZQXqF{!-=w2=FCF_ zF~Tkumjk-~za%a$`CKiBt4==+@NS6HEH3#-JUEYsRH38pWL#Wo+kD4VXx!TL4asjo zx~*?v7joSC&pZh(i{-V@FmfAK>7VE!eOHDoW%s*dDsXz&7%J`>L+5vmq0wDqXl5UZ zy({AkVU>S;w?_UVc%S($xDSibos-cFbBRk1a3_4M$+g)>9nh&QH|J-jN;<&f=gPIV zgXhT(pb4EyO4uH(LuuUlsFIWljnpId)rvw&Ey()A<{MBdzX9VnlKbxKU@={&?c|YYr=j! z6aTIo7_AABKs>i5T#7TkChS+O2_YTYQEsv(G$@VMgtFSw&6MgjVHs}KnlO*6)`b14 zHKA#1<(lySC-2REBu%#auzVqTNlB!*Uh@K ze<#j~__l~|i7%_VW*S_kI={2Ui4!LxPMkR5)lo$vPmTs8O(=6us5|UBGNB|hQ#*C{ zp3tjtWQ93U_<_`XFl+mGx$p-hzp_Jo~!_MT9$9P;;sL@9Gm zD5MJQ37J@ONA9Kl+?}6&{;nt2CPwwNzew!-(6q?T57j(q=lA_^dyLI^r-f2|y}97k z$12J&Y6r-1tym?oKL622W}n}}p++B79Ooy~xtTHv>hlXq=03{w%?0(()YblaSjaEU zZTrRiJlY?&bm5bQh@fA4Wi0G{{`m*p{`1|>YbTL-T9wOqbTy#`SB9Hulwy!1tDQpG zJnjTpeqytJ-|i!Xg9Lfpq?zk*l;K|9-wZzv>7z=IfcKRA2!n}_RL)vuIQMRc<998l z$oUcBFaQjHh#*W*gcX%ARYQN1^_NGt)xJVC^80ArC}JNY9SlGvpcWIPJaii+EUg(W zd>oT++PfV=pz*u8VZHWE^(v_BxFX24pH&}5mM=-A_M=Mug+%-4@=~bs??$|*X%2%> zRa9sQs{eL^grYFM9jZc#LG8D)J}1Qu>UMH@+;E;uQ7#uZ`COFS`1Y=!MNU2!Ca3Pj zx}}rPg~_Sn8E$g&xiGn_;6AId^0_cMex<_M74q3aZr)}ny4c7^Y8tzl^n-3sh81jO z!DgSZKN@>n1-bP$py1N9)g6xBQQ_*^i!3%g#|DF|0I&N_Lq@-yfi(ZAl8vICA%Z+e zZAPdX6w(+DnAQ_*u@9s1UalbLQ!vC`hh*ghBjLx}QSIMAy=euC6r{=wPpfE2M($BwZ=@DoV!E zv|{}T$E7}gFD=+yN4y&Db}RE{>#kXCEd=Fj;6_Bu3CXTj6JzKxt)>{# z4M~rW@IO6DZE%ztgrYhOP^N8HNcWbLek|Gw`ytsPHD&23rJtHoVxN=t)=w))!G{X6 zbCWs4#mzCLxVY&l#YN6Br8vpSoZ%wpm{OeNWX^Drb4)2tax!PQ$T_AICpnojT;v>6 z3dkj=6xHz=QwmV5Qws3POerxo)+q&ylEXZTl%7(6kQ~P`1U2kpQwlKbhAnf3OPh`< z#Ys-)3>P`almc=|SFGAI<|(DGYnB-w6a8u#;>jrm;GyFmKlJC!J8W@^YX9I~aYM}H zloF#%bS>@3m{L?b6jw-PnNrkuszPp?Qq)H{F6)${Khm;1XG%$crl%CEt!2&`$vGj) zB4bWaV6HgQJC_Zo!buzcp>J+`Xm! ze{qt60g}lnl3ONIgl)u20)NyCAetcvAUJ1HRdkxT3sAj9Ka`iCA~VG&j@S%oRZ0iP z5JU1zJUJ&*n#lwL+hg|kv*Fg*^h zZ&`f$ZTkU@y02NksruaZZ<9NE1?|4pv@OAC1xDVvbsIh5!QLm5cpaX?V1ACgXBYi_ zQ5_TYdxM+lYsD>cxl2#PI5=*jxEoZ4RPNwQoFUg2_1_X(zQ^(+wm2|nSj0?EBSGz@ z3n~}{(*Q?AU-negT7t=#EXY|D#)8CmIAP*|rB!d(R+Z2jw!l`s5fwUKE2%f271JBh zkLay$*8o8|^+x+^tKMu_MsI|*YU?9fEjbhyIarULlhuCBNhhJYS0SL&bFLE)!UT8t7s{a7;OOgI?S*e zb&34-HR4zORMqQ5<%Jvpbp}YO8#U&NN=pPp*4B_Nn;6|$1(YPVgn+-Bz*1#0sB%r4 ziYd3$G;xi0rl;5wVS*gVshg~jGO)oe5BqmQ-nu|@Va`t60(>K<711kZQF&7>jZ8HL z$0lqF@#CL7Tq%P_<=6w9$%XIi*;%II2kIpa zy#EIyskSw=y)Ik!MUR=tk)ad2K2thDnN#T1sgvSVTskREVMcPqta9jQl?Kf&eZ-h! zJwP+}d$h_7S?uk2L~Ce7M=QG__Xxq7&RP@9LB!q|7ZF>)v4q2DwcsT?9c1m&iO)fd@D zq}Ez?EUIi*4olb0E02}OOR_xm1}CwrN;N16ZdQJ36P5yRu{F}p!v7(KtVYYjcz1Z& zi6w}HiOqfnjjF44xH<~uz2RIeq8tT9rsUkibZ+5=UbGYOMnCAZWLKGNl-?zmx+hV+ zQCKGxZ4^pxM}?+~TV8eUvV=}D&{`=KJIG@2D(czvgOPSmf{^NcZ+zWH!H_o{{UBxc zb$cuke~Q^mhX@`_TdFJ|mfszna-kp8v^>_>?!Rrno8VZsI~?4rLxtrsGGX%<^l=O@ z4(PT>pwEjX%Pk=uo&EN3Ql&&I^+W~GnbZVtA?*_OE#9F(rEqXMK9$KT8 z@j>`1Q^-(gu}54bzehH8GMl+NeuQT@X#elEw3@sWbJTidhgiQS~M?x;aJ|$6!C)ZvdH*B8D#rjqdr#{GVUD0(d8hl z&iqKo7A)zS_AU3dxbSvcwF>V7O$+aUbP4YOw+a6@wdU^zPp|vfoKsBqEM`Re$p$#u zZZjSiXmR~J8sH$T^q*?LXC@3==T%wj9(TKtXCAKqC=sI7ZKM7zP7CM)={wOi=l-#`Q zdsw*Tj$I;uKyLJ5>0y_~{T}k@&ac|VeInCUti&2fY)aU7c<|;nBYHhXMj#6!+ zc~7?*CsdYJW7Yg87Oj?`AGW$ftp*!+tBaGxF|08^{P986KNt+Y*slHe+$*7drt2gi z<=fL#=`FGz419>2rK6b=PW0PbDy$bw=0+bv62a!H`7_*er(AsY*XkjJA=0PA3^MsZ zNi@8dSCN_UIo)yZ8kstGgK6&yFN)n_(Te-PSWff?@GEad^PlNa5do~7M#l>KEy8lF zfl^+AqG2GbxE+Sf?rZ-fX@j4<)a>gh7@{0xNk&n_t4^)<-K2yR^yb9B8L|kMmM8htvn1Mqxe(g--jbrKArjd>WNL z)H(D%n#*cIzxIDdF|nNo@?Cd2S6%JXdGhqt>EJ-HvO&$=N z-y-f0(G-+3Ln4(Y!lvED9%YQ_;T~=``eBS3SSrWrzP4|;`A&5pfN8$b9<{q_0Z_`3 zM-02PBQI_s*^az89k(MdPQ&fUJG`+#{2DN>eksl<*)PAw#`c0QQR+x;x66r+x1Gt9 zN=QxXn9FH%I!XYhW9ZQdsXOfV2|c(S^(i7R%Zqzlao5(Y1_A--k9R>(TQi^Q;S|MG zXr6+9*3ej5Yf3RtO4r1mHir-e^7IbTn~)Aq79fQEW`;yEOBIm_g#JdTBOPxP4TWub zh}5JCfkZb>0%1pu+yo%Ox7i}Xa7P{9B&?~j0_g&S4`;FLsdm3G*=K>6JklJ7S^X3O>ISdw(eXp%Ze*7BaCyTjbL0X}g=f%4J(5qI6aKHfKr^W1f(X1aOli1!!E_O@V z{da>l-n@sOvLRuF$vHvj1Lw5+BYO;B{F4^V<90amZh3Ipc@=?6)01;4xEBAje{q}8 zT!NZDUM_X$Zl&gZ8t$Z~Wh-^`9a4)7?$9mM9ElBlyeFKHu(>!S=dI0kdT*!*-b+3a zvgyuogo9Y^ur^d4v|a*jaWo!2ywfA3J9_z2Rbw!rxn3JtcCKJdy;fLi`w9mS)n-fW zK#NP=aY^mKmbivl9O>5UxQ6)vFHYJp{{|p+k1F({{Db*|t7~z+m5jb42aZx9?yYp} z&9H11DH0}hV#nO{vZ}*u!sreau(`*DwMaX%USu`FAI7Vgni!tGbn#42L1tFjEx*FcPkeroq79srw*&^#Z{vRPiuVFajxjeb>=@ z5!~r~dNmq9J(D9zq#sRt<2KF_>EN(;gA%iFx`^i?PWD2rRL8hgHN0)LyIquQ4xy** zn;O#qiAk#yaIHy%JMmDYraAW}m&QM;W}MiLi{e}DyN4N{wM8z!Q73RLwoM^jwg-fh zNmVNMhbpdA^jT`vO+F)|Z`9@&TVF4|mKdo?z0UMBFHf(CLy=xpeF2wVOSHx4^}h?p zQVXdwaD_PXs=ibnV&vc)9=?*o#j`y@LyY5wN64d{{mC*c8adZ)6j2CTR7K9FcyrZW zm~$LH{Xta4k?5*@wzSSSt=8S(sD0f#OvhONag@65!0M+4)N9qLpsQlr7BivO{vy^n zgC3S6cfshs_IIL<@Kcd=nLE%{T-~@$q2gH8+h23_eTktutG+MJGOO>4Q$gRmy0tiw zaM|qYjN-KNy0rwQ-wW+k$1l}w;)k8DONsriBMW&kNU>8G&Cc0hm+;DLU~;{lLA=c#5k4~m55Jku$*cEq}xEzwBL8x!eDhL2;FaS~8rC*0Titi>`x zgWj9FwqKYci<^Cr*B1+LbD*Yo6|oJK?C;%M25l2`;-U6XSI|_zY_TOopM$pv)Qz;@gljtKC*T>}xEHC?;j*--WP_VhE&aV_;B!M+UVO zhND|ywPW&j9q2dc1{B`zPqBqW4@fX(*~K}|M=U7l7(POC9(-k3o2p|TPqvQOqN+JZU-J*Ue^s?5 z0cSZqk3IktO9A;MMIa*+Jz0BCh4CcOeO@8I>B8e_KF+CxnMNS z=78yGy8swbi&;gu)1TApiLCEg_*x7Xz9bQ#YL@asd>2UZ_qQSkE!}6O?8rjP+mal# zv|OcZDXvc(54CT4I0}-PCE1^e@5xbaDpe#$x%m)T;V8eNBTXU0pHUq+&rU!-lh?5R z4sx-{UvmA7{OOdxEO5&jC+1J1YXt;-kp@sA<2df+Eu`$j-MaFK89=y3!V;#uSPM$u zFQcoWysAwoIzWTWj$>~|J$uz^&V8Sel7Lq{R9D%S(=MqjDB@Ba=5B9@UbUBCql=7{K+%%9)MYVMsEY@$3&)}W zEtw1D1*_SfC{&_3ITb?i0F3HRJ0F*D(Vb?PonvbyDt)*&K|1_w4Y%lEN=DE|fxu&@ z_OK@GMt(lyD{whdX3uNZBILq=4(|c6MXgxC@DEjgd>RJ#fNyeM1^G~ z4q!=BDm}R^zL>k83~XsinI6FA--XmB$5yM&x%ss0BRNAZd3j0X(%#D9c!a+l$IiNL zli7FP&8KA-qGmrXYm{Zox0;aBiIF z%xH?%50uQW!mG8su~jv>#(u&c*oE~XCQ=sa0nELHdO&YxOKq}qdccQfp&sxdTyyn+ z4>6aNT<>4(#D}osw5FA+(~suRsv}~fG2UKbVEd6$k~hY5B%wD9IhjK8X4Ro%9oj`i zV97tE&t776`?I*HlU`Z4q)u=mR3NK0OF@>#;R1={4((TSNYksfh?EU;dwyXCv}D;_ zStgE!w&y>pyZ{%8KB=lDceh0QHm_UkQ*>(G62>tyx}^lI%x)<`C#PFVP|EC<5_Eo2 zd6jt;zQEc+&EvQ$K(1yXoDOvqQJ-#S17Hy9qh*RghWixq0m<#B`AW1UIdooazj+Q; zjw8CkRwrNT*XTKi2}}|XPBCRFa%+x$PD@Q?K3lJQ{Sm6qVdCUUH0Gg}&|731LV#zSDnRM=D_l8=6qPm_X|~$L066ad>W)!V7rvti3}jEPT$mqTi(LYpcO zlZ!8Z!r9P$iqxbtp7Q8&&D$r5hN?dbG`8$(S=`}vjIF(AETW99 zeW!@JgPi`8$JT+9znN(wJy>&Pj5Ue{$P1~>LFZyj4mR|qU6=dBWP zzU0XI&)Bb=JX-v#HH7OB7PM12>`anv8;_^YrSx!Z|^aVOmf? z83oHu0d?0$W|tzPpy4F=p1Z^~3NY93C}=t*FQ5whC;)A}$9fdvs3DKxyBedN%tl$qu6%EnG_RGI`!gV^0wfUAQcM^tk{g!&;L#c3 z*>dRpg!t$a$izb&)dzqCj6df#ojwIG3K}&VXE9cMHu6luTEp6Z!Rk1F&NBXQEaQb! zMqU#vn5DfflHo{^30>n1qJ&u1m}w(=`{atBx35jOA(uG~nU7w=PQ~BZbo4T)ThC+4 zM!0kl9a}LY)CmYStvMF3g|z0tO~rqV5iUPx8N~=2P8qckzHfDA+5;BBVua0{hEPVB zUY(9}jIfh!gkVZrux4Y$!t+@KN`~qL0@L*B^Of*_W#_Txlu#R>J}a^9wu^ef61a)o zcBc7ZO(EvDp3{tMAIL^i+y}DxZ8&+p=k2gDzs=_>p_t#6Q$lTi+W*;1$T1~^jz%Wo z61Zi|FZ6!fInBuSesS~5_kLT-`|YH8#!hLqx6LVXkJm?NL$Ny>YAo7bCb4iL$Px|8 z718!*Lyb3M2ShBr8M9kbYBPqMn{YGM(VMZuS<;k<^HHqPD%I(kEb`%z!yJzALJ@qi zh<@x8U61AWwKQ~y4pT!(TiP+EBv&Jf*Uz%yLqU8RFQ)}Sndq4VQVoMR(enbJ8%oj( zJ7gpiSCTFw<#?$Hk>Hkqgwg}xB6mS;f= zufw5V8$>EH==I${$MQvc&ifjw`B7&#eewT>V!x6==POYe*Z)ERY9Lnt(ZHcU1=he(fzgWlL6A{p-H?cnKUUfQ9F{&i>LDpB>uLa(p_=c4)#{9NMxEF1NaoK-J?vcNwR5QdRH~@lT)|qs!$l zMz`usfZM;8#Ftq#m%p@s-4~zPZzRyQ%@<|A>5I=sx0OIAqswJ2Mz`&Q%d_ZC3DoRa z)FG^%MRy;a5znG~2|fi!5fUrHS#-Y&4YsBOKN4mZJ@m!rS@g&gebh0t=y3%Stb>!% z6yk3DvBhf zOot|{#i1cNGq$13c7_qLF^wfrwF7Xh^22zbp2oZh&>FniSo6eZ57gjw{CXuKG$CSN z=1C*a+u}`c0_=*neDP^5FB_WeDl}LRJLO4;MTtf1dJ|v)_FVXmDKlk~``!fDBo93C zVjoz0zapB7ERB} zVu|hJ#6iVj!yy$;^Re2816SL}=~J>4`#5__o@^iI36|PE9NJk-+Q)@2zSzfQ0$V*xy$QYb4}ieYtb4 z9#>iafR)vJRzmT;)|G@zWS>2*dw<2?U@o~Z@8178P}}cv!(_(=W=Iw!{T&|H{5-8g0VN; zOUM=WZ1G0wIvnL6f6*L?7hNm+p%$hw*(Dl@8+#8-SO>)Zt43{VFtA4+rH*#7*+ho4^PQ z(Z>2w5+DAYo|JJpNwW{PL|AkT!GT*Nj;Q1Jgd8b~gcF35CuAw{jZJ@lWhd!aV5Dp@;vTUGMOC8*3rLMBn_-^ceF9d0s2a6bnbWv8>bJYN zPJ0*J1!x-m=Ps!I5w~RjvFI;HFMOBpios|&QMoj@?NeFA@D>ymgUsmH!zW<%U#fmR zniVH|IMBW_wzRxX#$eaUf5jGZ{QM;~*nKfND#@#Hk<$bJu*;1TNP!nU^dv0=Z@9xi5EMtrZv!=`9 z9?pzx+!&8$O_!6(jtyD!+~m7K`?fdN?aseYPhEB<)AqF2nwp~xwe!&hg-(3&`P$lP zDRj|@Tw6Qy!Ie}x7iy#`_2kIIBP9FGGyc!-)w zbuh2Jd?+M*r-4F)2o-#g1I7wI%!Zncf{z}R2`l*6!6UBVlWZs&NX^D+3P=yU@Hr_S zc)!ivc2*dH8Js)e!;XwGxG0Q3i?e3qGK3!vdhc2{y{T`Nd(oeS`Ik1ef8|>6)d{n} z%NDwxRYc7?)0~56UE_46LTmE1>%YPyaH9|~6W(;e#-7F&!dr!anees^Hua9S5Z);S%!GGc zur`VJ3ITttbi8kYHNMWMT4hGCKl+5#eNYx}Ua>nYgeK!*fmt1u!QoaN=b*6G(yclv zi^r`xErb?t)ma%FZq<1PN@!&1R$Y|ERHYv!Q13~{9_9=B?> z5L&!dYh`eb)hJ#!D1*D(87wVMc%X00m@EssnWCyEJxWYQVpwdJ&Y$!|*sU3pWns5t zRI4v3MA)4flVxFdQ&hEP{gx9V?B0yY^6p?iN;O^VUAA8b*-%XCFbx#l-wUauY$)Cb z9H)THami#gsJ}&vvwsz<6NIXAj zXHI$)U^1{~W7)u}#};O@fuYFItm(42%`{m(%={b}?FJz3%B<=BvC{5pimb8d@(-mY z#z31TUwcFrf1nz%K5GtQfOG;1)o(l!dG3KtCv{J|iL5B42euxO1^2-AtU1JcVCRv@ z^N`(*Q?EXa%aGlhHC+~WKTTF!ir+*o;vUSJF5CBEifq!u*rd(~zohN^=n+}4eIL)7 zL)^Yk9*I2nz^RkEr`@D`;Or4ua1Wf%nnSz?E*^e!Qd(w_qx-NHJvNc8p#v=Q^mZQ zjXnPS%j$qe(aS{AXqxN%pxL?;jyy1n+J-nHN zYwcmMmLA^nMCTsf&c;snFc?b@?|7o(WG)9Y-NWE2J-p|G%ZlDlqu#{^@w~FE*dPXg zR`h`;Z8(^Txp=S>Z)BY9<=~3%j1Fkx zOnnAFa^{EqePB1%&k5N?RPjfrg$Pt{E_n5^>grKD7|%Tf)s9^2^B;W_;W6p;;fP^M zb2DWU)aTg|^m~&D=AO^kUfO-UIM<#I$04_c_0K-8QTw62iw{r%3+tZ`YTr)An&-L_ zWDW+?zT-0mhaI1FxIg2w!Cr*!5%t*BlRj7T(63@S*2Rm%``-AvKYTm)#?)YMR3y=C zG!qm|0M>DLroM>i4839afG66P*@jlC(BPZWs|gZ$y0{x$X=NBO)~e9p31B@zLc%#t zU5t9YFQ}fK%(NSx=)@dnt0l1~?*?6B&e&TOu$zr-Pi$%Ujwd>czU#ntME)1!4d1JP zjl>;KY-#v`C;FxG0EY=|xwT+-0JaM}i{0Vvs6FmsG*Zevp9lXwkIJJ*A^xXI@Z%ZN zwr2zv*Mm+7K6!3({U=IYr_W3*vX$CDVlz2=jV~mS6-qom^crQYoF}#fCRRMr zc?GfRgN+qbSC&v~mGE)Y=8Z2ahz)N7pQ|SH;yvRuK@b$SoXxf5(P9W;bRi@#uo*wcoUF`)D!<&Po$ObF_C)Xivl*h39te-J@NUW z>&E(4C45YH-uR+`9d81xfL%{~9gNwlgpUcy8($P~;7x!PaOjDDBSYY*5WqB||3dhqhlUEZP zPs5G%*z{vo_Ki|zw(@k$kUsh}%%s!So`xF@RUCczF&p1~u966G_EC)h4nO<}$hKq4 zp8_jk+m`^p`+z*(Y6Nfq;!i-7u;)*Km9Xzipf8qiP>ldKp#B8(2GpMdE8*Cez(kaA zQjGw%p#B6z31|KkSPAEz1V;Cwgo|nfunqMmAWB#|@|)C68(gkN1o zVW(TS<{_nEk3V{~BY8-dA9VYhjiuucx&N{DU;Y3UaQ5l-Tgec?bC%XTq|}(fo`SAD za2}E)qU}KH2(RXo@oF|!o`e^Lm|;V!Pr{6Ew5@sZ>PX_)dIjueW5W|$62~?@(P@{C z<60l=QK#RLv##w*_;?4-8=rz@u##PG0+K^i9$)g1NC`}1zcLLxoK}g3x0S!-lorlz{gpY~N8(%D7)tdk-V9gU>=OL|E!pEfKjV}t=^d`Ux z*z&~Jc}Uxp@G&uYeqwiHd2y@wET3;nvKTO zFq4#)=F@PK)F3}*t~?~i?pHc(_34;38*5L)Oge4-X}Hl)MH-PGvoH^7vl@YBW6Pg_ z9Jg=#Q(z_R_!7{0NW0YtG#h*V1Vjn@{uEdV2fhS!9@1eo0@#516A&dF`%_>gocI#Z zc}S<#2w)59Pe7D#?oWZ0aN$Y7y5;$j$*6_vW#y9=Yhtl|!D(JYh=8G%bx;U zz_uTOE3tr`D(JXW=8G;Cu;+`y(MT zO8B@)#c_uQLYDD&eDYi8sC|;KG{# zJ!^!@B_;9cT}fOSX5^*Iax+f^8JitHWJ*8A&~Nx*Q?FyvDTzG6BPb(PI8L;_;!S{7 z>bR#|694Tum{KLb2bAz;3TqW9VDhOzfvTaS6E-T4_-~aWHZ=v=NXH{pIooG@75oyH zo=b77vBXf}q*-?B0ijDPSP0+^=CNCQ284I&Kd1{u}=07D%I>x{pb@r4z=|}-jE>>ZQ zIlkoBXQmfV&lI7Hr)4_jE?rt$<2+@b!BSqo{9yUAW-4Bd23at;$*h;2$~i!#6;xZt zdz*OFP97|8%$n{2l!PU2f-Fnhxx028Wn_wa$a-IyB~6|-S2anWuEeYnpEj>Or_HtZ zD+Q}!eWpU(c&cLK{YueQ#=EJ7D6oQ<2DCAXWjN%`fAo$EW`?cD<-!5R?F17oo8!9q5t;LQ?ORvIh910H`ei?KeW2K=f{qn{ zFS;~-#TQ>rR{YTQf#O;fbOg72(WUVlzWChuO+R#fB)3%s9RVL-bZPvKFFrSZ*AHDE zDDG83$C-*Rx-|a47oQt{=!dQk6pyN)<2=O|T^fH<1;4R=>W6L)6wfN*<21z^U!SIU z6Ced5r0$8Y4-}UgUK0);u_gXEQ}Mr(`LC^oytD$uaHADlFZBURQTA)1_vS=(2-`A5%=+Ps>yS>5Zr5%KB|qW176p zlC#37G1HZ&XNtwh(=wG#U3*%t>;u=UFfH4q%yQ$YSz>YZlq|*VZapPWPI1|;!qT3U zV|SOSLno@VYfs9t6R1m4&dyg%Vk}m_LK6QAISlv;iOlCn` Ig-PW7BkL~94Iw8 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�h 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 literal 0 HcmV?d00001 diff --git a/obj/THTTPdownloader.obj b/obj/THTTPdownloader.obj new file mode 100644 index 0000000000000000000000000000000000000000..ac977d3f7ce0984ac2751e3668c02d92536846dc GIT binary patch literal 38981 zcmeHwe_+(rmG7M-NCYHN5l|7MMny#=1O)+g@?-d+1VS?T0*Vd8%s>W{nPD;s&}y4+ zhrA{GWxBS=KDsMyx;qJW>%L7_`__WCo-^IsRx=?7mJ2admAZ)=r4)?zyMp{y7iKnJ;z+g!th1+V!u#__;-5cdZboL{H7^ zMgBz_d@+Aps5^r31S_Jk$d;I|!?$6RByEF#lN{Is8$w}!dsiU1p)(!`1UJuV6T5vt z(l-622i9LUPCecp+O*-*q3C^|_D90p$40Y{b-#x`(An>M7+vvDJN2>29LD39cNoha z4@H*;+oO;wbW&$d>f(!^)a{{gXT<*$VOe2fskwM8-Tw9sYeV5?#zazHATB}_jCamy zBV6?+T}v*WuBMQ`%@YX4X?TyCXlgGW4Gqshbs5IzjYQhPFFC%)Ov36ejj)xW&UlSK z9yYmE;4teV9d+?oyNQexed0GBSaA6iJ;x*#J};gfafRRlG{GO~=m@lLxeS^B9(L3d zCX$o_=c73uP=;54Dv+W_A$FHR6-d)1s>?9I##ksE55@}D_0G0nd%G_hx(owsCR8- z4iIx|#tOvLxwEqy3P`*v98)A3JqW983iU31F0;mbf{~3sRKracPVS3RYuLf4DQmf>eOc5|#kVPywqD zA;BgEqbZPPZ7~UOt};~U@d7V1(*cK`zk=-wseK8yh*r&^Z1KJ#B8&|;e0Ec;Rp#UTlKg4(eDu5%w9e%l!QGn0Y5o9l= z02v{E@CL@^h#5P4eu@B!~qybTX+uQ%1j(tLr^T*VlM!N(fw0 zzpQC>OJhlEZF6%m{>1+A;_E`ViUg;YyGq8%REZd0D#Xxyai2TqN|w74mM&JgZCfl_ zwb0z#b$hY-AB}`@`%Adm#n4=FkDHH`++O`tR@;c65^OT+?q zYh`_1&C<$?C8?-f49yVJ+?6}xmC>sEa|R?_GsVzDVj-}5>b$j=fPRV?dIarr@VW!R zPCpEwFSgvarb=sDkZ$gE3fGNd=w@+)Z2MpyiiK;X7`k0la1GzQ z%ILf*n>8u}gzGjjv|QB4392t>Kv9<%S}3YU%@v7heGpzrWTzDE`Q~7~H~2R?nr4kym2B$&263I)e=cW$KW$ZxuI5GRKtH8Di)@aknIQ(XFfnHr=wOa7`6McVQxUEol50RG{xhF_l@6$Et6TGE0ljybJTEO$^-vqs}$Q zGJzY#kY#8`*^PB#Xqvc2(vhvXC?RRhCn%Mh0=9nbSqlkLhehIkDeuh}+ZYN^DQ=dHy=a`D^F*JlR$tdLstbF_L<)HWta{o7 z>Y-QiOG(++qMEJ3qfL)G!GzwnLhCM~9lEn@%X+n$ZCkQNU>lFeKc+6w(!$6}|A0AV z&3;@5X@_IAHWW55hX_|d3@sK9aK-tS3wC=wu7I_La0x6J+wAiPE8|rUN*pWT#b6&h z7+W5RJas#J;}5{!p>F2SGkuyot>>GqSGNZ#g@!On)a@s4qB7exTMW6y;tRCSOKvU- zQW9p+T zqZq4Y?l>s8AtLezOqgKDPqwAG5k54$LJp}mia)tRTrpBSQY7|FFPi}L;o$blZCxQT zk-7@DV;zikV<~EFr6|C&1BYGlTI}^bwX)t@C&ssS1UvlEoic%gACP0Yw={Gg_J0G? z&vheO+#CxAsj9CX7({7nYb)O-fTc$xdP$?x?Ww^#FLAfTV`eQ6`l7PuP$cX|xaHJd z-4$QGS-MniQ0Ww`2&2eDd(Un}5l%jCs0U+VU%MNN*XUfO7qtS#84>JUAL0>SKo z<;UHE-8Qq!8H_3#0i2!*>rNhbv{JO2+$llF`=N};>3+gNsZr+OG;WO((a4% z6sg0*o$~HbdvFWrW#KRuI=I?uxdvK6B%vz;)rr#qE-*#yg%M!LdmC9HMS z(-4feMFLKdLZ~TvD>|UnWWMb-O~Fp5fkF~((~KsxHWcqPb8m2PfID#HlornZrpMkb zHJd42H~M0*JZ8Sqgrx;^MY>|J;%+6T_t=UWgwbHbUS^ZwB?8<+$slTJWwQqBbsP;h ze0e(?7F7C{0ky(4P6au@Y+TNu-EbFdTvAeKF}JhwIP0)>c5&AJi;9Y*g4RL>JBvhC zmdD!$?SvdaLgeLdWrtdF1hZVP~0FmD~RVkEtl2g-_{N^@zpLJa(5A(I4Zmx0j%O7r-fN+;8m)l&RG0Bpl#E7yF! z)_OK;(IJ`A6OWfz-p$dtTU=$;Ct4^FuxR3%G`F&#+$zB9Qz1BzZtUn=Z;QII)`JaX zJP~BX1K1d1X=N14Vv(+BtsH<;=Hw#wvsVTVkflx%!K*Hdlm)s@!XH1AZ?4IpR#Bz3~BBJUTBpMj3c*yS! z?!Z*36Qkx|=QdwgbbFh9-9h<4Hp$L5MG3$1(G|6dr{)w}`P1A8=d+}((HABOx>_kP zv&yrw$Ss?q=Sec_N#57i?g_=LQm8s~g;%X~3|0V^S zIX$EmaMM`_)FHFFSOqtXYF8I&kHky~aVT_huWD^&uSh!8;@Z~Mn$1vR5Yvg*b9m8I z9Va%b%Yrxw-WChV-4j?l<;+&yn_A#De>DPeVN@pFn9?R_XFRw((#crzo%`NQQRXPT z)>bpZ&rNdzzfwiWr<|CCJr}yQ&$`=F$ia_G3NU%=Y^JIFj&mX zOR+BysN4ZcVmtEDadD#H*0aD#^z@@P}{YcsET%nLgMzk zwbuGVh+Sgn$0uj5%Ie!WZO6>{I=4`9esUkki@7Q24`Ll@=N*E)!@ToC?Nrk173L#O z@ntiARaeKRAjLdH;k^0IJlO@!@ty6#F=iqh+;)MPxGfJin!7eh+t2O5+5A%++}3^p z#QDU{8w+)qQ#wCSzce9@k-*@<0ch*kqhWDyxdXHDJOs>V=e zSOslw4t*M1z_izMs}n<+#n20o8zS$Ts_fW`xz)qllBAaAeF(^+Nl~}B zqSYVsSI-lZTe0hay~QByLCnEwfE5P{Y7fE6r}fFsw1$s%%D5tM@MPfhKR=Ky!;2k`Aods zur^eWUloz0MaY`vqeHD!<=on_vh&)Pwc!A4r=KUdYJv4b0B&eJ|0IC8BTrYfM24W) zs%)x~p~$AWy=&U9Y{^inHQ~?*;k}$fv1ju5G1Lkose(MXaidj%%{%z)1jc(sh{$NAP=_$5jOeD9AjU;R;@G?a*6wXT~ zF@NMaq;ylp;t?!g_+t^NE+D)PW#E$Ku)6c;ziftM@q5szYEra0;#}`m=F_}Bo6DhW zi>Hjzs&6r4cK$Jt#g!x?I)?t6_R+rPq)^aE3LyJuUUlQPu0y@jHTI9Un+0Pr75kuh zjnGp3j;Tq4?Q7&!3R=e>XOJBUiRzI&bzq#B z!NGt!J!4q=eB{#1!pQsDWgm~_>0>Q^C8w?pzd-v~(DKnnaTr?@qwP2@KhWVZj?cVa ze^lB#+MjYFUF!!gX@9D62d+M5-NtlI^JK`UTz4G%>c4%t3>!bAq7{T(a&yR>qrA(L z9jWDY9chnf^sFnS<%#@kn(nZg=96XxNB%PfbtfuoyI-oiT0AqKC#!UzoLeffiBduA zc9rz}MtDo`Q^M;AtS9g|fhP!TAn+uCPZ4M(u#td|z$OBI0s#U+0-FhJA<#x3L|`j{ zrwFtY=pYa#5FrpHu#G^BKqrAXfi42w1hx~{L0~6=PrCp85#`tFibN10>eLI_$WzZ_&tV4 z82%l@Hy9pec#Pqj4F8_tKQMfY;s0RxeTM&&;cB{ou}=}2Fha}Rq? zU~>nGrl4p-P7$&v3h`CE5gD9=pFk4*D_wZa?q*;z@JFAkCeZ&C4_62*KyZ_Nfk=gK zQH3A^g;>NTD}$jxq!XF<2|w&29H4uHVSglmm0oPYuYUtg)4D|!_ZIvS-phl=v)X$( zs3ER+nwnNORn)Csh4=DmR@JX&=2Xq8!f(F|@n@3-UUn=IF8qf#7%_p{L>gZ$#_7b7 zcXz$rtnF?&_t|kDpime;H~zWLbN&@dbH?VQo)1ce@%`$z4bOSbNqEkd|F!FDb`7KD zeBb9w(1X$NZlLcf%16~*@5Lp?Pd#A_Klwdz;5Lye*Yt6j8Q%02sav!)scLV!DD$w^ z)1RvIri)XXH2n(Ezd@ui^_Narnb86w=x6Zr5^=pl#8gRyrdOmIxa$^?#vo+Z&EUwc zw=JIJ%HmgQ!_E}IhuY;Y8m%=onRXYYR5tE&X0_Y5ar^) z6(S?N>2ad}HUY?b{H&P7WjVT2aks2q>P_D#`mY!1E4Y?;mvN!3^&y<)UUb)ARFWRg z1J#d|oEaHu)Q>d&dSs+oTicg>9*Mqv{eZ^1$#13b?MQ+;=Y75VQC9u-=A%o?OGRJH z`H`hFC_P0OiL;nMqkQB`C(v{Cn|;Y$sQKYqV;_ARN2QdV>wD&0;+be1%RA=nkOO1>s%oF)<*M%=W-FbHwaw|mf5l)va-ua;dXMp&wmtW&ilV(_m7vmtghVeJ!VxEvLa*rYz|>-FWC4 z;7xiy;0)t9imKCno=mbKgXB6{ttHcR2u2#!PG(m-k!(1jR6Eg>^t`KZ#zyx}vf&-O zo-sbz@{UnzTr;v}A@k}TXW;z&ZqD7oO33(TVyV7O5j^n%MHEJN@YpMMP zafq}l={e4wVfe|0w~TV)?pwxDJes_HD`^@*9{XDkt^9o4dH(R8ts=Rv@uwpr-xlR0 z1-8WX^*)P!6R!~zWnb_xDKrq!_XE%%M`h~KD7i66yZ+i`=u0e_kqS4CWXKS(#YQQn zipJC?s?*7qV||`uO&Gu-vi+c*y|)jElz+ zYkFzwMFQW_8dJZ}^a%q+nttWLHOLycUDGEG+^^{q2R!t+Q`4^+cvgF60QJj;zvV3& zc#Z1+K+`7=pTJXwo_>v|!AVFB-b$&5(Qt4Tflm<#6ZkBFFA(?&fp2I}4}M3}%Lo5O z)31KN+*@>TI+`E6Pt&hGxJc8lIru1Q9ekWXT+^o<{3ggactq2$6aC|0-F^$E(rAx0 z9;)QT5qnx&jz~Ren;vjs*lF`22=O9*$=M@J};x)>JuzeXgww7|c^?ja~d(-jRgmOQG=w;aL z2_V~e=H)A?KOs7$S~)Qhg1nMxynZ^CDhK z+VJT44~webH1-iypr@9{i;6^0f3l_D>AgR>%wBnto_+^Ccb{^ejUUNHhEW-;k%wsA zHgw0ne?mR|aGJp@sWcTvl8l0}aAfTyX)tc9*);kfdfwRuIo#o@z?Byd$qwFO} z<9j~Y^1MAh&-0CkW&>H$vtJT!Eg#P%8=gZgDTc|G=b8@9C-Y-dW%w5!+4}_()6k1dzGdhCh!D-XEpu$ z%$HH)YgFSeHGO&tW~VgueSpkQkU=Ldzn`bYx%zF!-18cbt8CX5WNz`F zBHcvGNj1aRM{c#zR6>4p$#0;=_%1cSH=={SeF1{KZGg#Ms?o^3tcNBMw$t#SOAT&f z?4x37OgyEB)?mQjCLciN9411Oy#iIJ-8pcXsw=)IFv3$F&+Y{Cf$BPZpe!aa@p|cE zPQ<4sULzbLewCq;Cg~zLMV$HrqJT}_p{6W~a#*8q$v8%1lAKux-jH=<@(E?ROV*Tx z8;vE&-t%CgHL2Mnpb}>UMuNg(id2q(5^@V)2Y(C>VBc`v`!!^WH^gG;z*_;0VX!+t z%G`5qGg|1clP8w!J%_&fl5K!Q<_woYQ7`4fS0hJ_IZJgFy0{C8r!N_xx-zDc>1Wx~ zb5ZM3V=whGSGvPiK67vz4B`7v!>E0kipcPa{ws^q zgF;v*?R`L7Hc<{c;>rgXrWFKm8saM zT`soKi#|)izbFKsMzg-;I^*@rXIn92@4M6@Nf0fp#hf0S4$bB!?~H14oSP6-n$TlYviB`~$jPGN=VTFgoU98+3?JT9E#3P3 z0Yxisn9+9mfiJNOb5&*{baEC{gf^;5Q{9yMQ%X_PlX(?|@H{4@euu1qHOLy+ig*kf zS~k2Nn)~M{8~83fgyDa{(+}whPR-=O2}lh>9Vbio1g?e|is_Uh(=d3Dz##(U4-Nhs zfaupmy7W@E$*^sRm?7Wh+~|F>o8&&3H+@42z7w_u?<-1Qscu;%j-1DSmGNY0;_yar zN_0(zS6K|%Z7w7q-=a&aFRB?xn{ju8}xW-ka{aGI5ydiLQl-!?P(7zba`^C3E}B;Ldx~ z2BYi6x-}k{Oh4e%Z_waqg2<(gn`O^TL~`Hxe}{I-EYOFRU-$~D8E3F&q67ipkBsJ$ z;vX(%Zhdx(@mNXm_j}*md4>M^2yD&kznW0f*KpogjNRSWPfl=~J%YO}=U@NV34Pqk zFeahvnlwWfi8M9Hw$G&l~`22oA)|3^_8AwGSGspmlxKje8Xa|>}Ur~GWrGd5ha z+MhO`3HJv|I-{gdD(MqSTJG^my52GKi8jJ@T&ed~PT4V~>_|>oS}A)qr|cEwd3=Qs zFDuW~=aAC&MJ4@0PQ8>;)}K@Myi&GbNk6BgpH?iO7ftLv!A#j|)Ndl({oCg@51f;__51KfPt;mVPP{@hH^#ln0@J0gd z1a=VEMc`Qi&l4c@!-Re~P2ep8?-KZcz&U`QlzP)w!7BwI^gmfhU^#(x1lkDfAh6q; zp8S*jlu8j8BJe7KV+7tIK!l5aoDjh?B@P#hxdH+~W>M6O<-{-h17pkwZIn?gRtkAV zebFN4^%T3ROwh>;mUpbJ6(WsoXzHNcJnd0`CrUZ$nIrnwh%`bKI=WSfaf2N7qY~o+ zq1LZqE}@^od|0iCG!x=Y-z)lOiS%S4N~ydA%LqP*Fa+*tIzP5qarYDRp0v-NW{CbS zSGtU=iWJL`JbRL@opY!u!bw*kO$1ipkMb!!S4q2-G(_I6^MaB-qNGnM>GNh9U;No) z;>QuSjc10Eu2<3rJ48)d?Bs&;(M^37M4yAn6k_0RmA1PZNN+PssEWc#*&> z1db3mPT&NA4+xwE7#0Mk6R0FGm%tJN%L!~G02Q4e`oAgCm})*fJx;FK8Ry`z`n?ZV z8b2^MW^lO7o3l9h^PHR_MjGUS4}1#y;Lpio2f=7KZ+bq|q*T-y-=QPE#jT}Jf8F>B zCHtN{+xuR8Cc-1nIjS>T$k+%ce=;!goUFj6^>K5{-u4l05}8Tf^tIR?Tmy#_Cm(KT zVXBe9daY6P-!9TuOa9Z!eqLDt$O50Wo)1jq)7nX7DX(EA#xdO}-J#bFvvp>==zmD0 zua!N>_1e*mQpl6@anhtS^Z~Om_vjhZel<<|)uJD#$x|ph|7kMLMsPfgqj9n?_GvQR zXj2T!Y_3G-hxkbU!s(k01O_>UyP75|$k5gFoUSAXY?E;hSGrze8LO*l9B|xl zi2+B^Ck;4mvjUC^GvEL#ZybAkuy(hI^o*SGWm`vkoOkm$Z@Ta}ZxsE@UFn(TIM2!8 zruw6!o^#aBbmNV4I3HiUFutt!qxhte1Vtkw92xYE#HXsyM>!mUwGxTLR125qs^9)_ z9G}Yc?WNe|)N$l4O?b|gBz{*E`>NH!88bmz`n%GuD?aj^KN&AO$`QwJA@8TYjAqpz znYETCes@Lem#9+`zbgmB>nBUs7oRcSNW4LD#YD3d(amX8FO6SqRX>N)lHQT7e@AwC z{_LW7nc8Df?3and6myCA_*aM~obRM%KnBHLzn<=zED)Ki;qOoLrYloB2}xn@{Acmu4TSx00PyKa z#!K{l&r6io`_boci1*>Gnz45y9*g%bnw^fQe_yMc0I*37P+?$ z5#uPiIPu9zK5GYv7Ri0A2d127k+zq^ZH}*T7_WrTi6f=PnZB1u4_1}+UWsuS9OmD1 zv~jJmm!fuiE@TjI9G-zpOJ+?aArWsbKEvaC{baeF#$oE2#4~4@P1FU+sNp&D`pN0V zXBNLi*t0b155c2PiW&L?-djk4(ds{Om@>usu1AcQXtE5RtUk|ab$elbpDb%Q-Dl8T z=G(3?5p_*7=df$C!6Jdpg5J3pi4@g)euQ`)o9)(~1SH60l&Ab2u5YigYej0i)|C1w zLhA-??Z5$iW1so5$k#5$SRC%+#o;!IbF4-1 z7SaFr0@jJ#D{I@!w1BWa2hrFR|FYg)crZ1N)r{1R6wTm0CH-~QH)BkFyE)rL$Q>HR zK4dG~WXBGWc`+1)8!^Zp7_4+7Y{9D2f9Qf#ka@mRr0&$#reazXI}*3c(dXmn9isn6 zk-j5`qw;la#cP?xT)gwbT)bWM`$T${#6>X^ef|c2^}@?(3y@b$fAlF9>xB7g=%Phl z*|98<5SBmtLoV4YZ~DPZy*Ir;^mm9fZhXMVag;_?smDgKk&^a@uvnOiML_9swD8!C zls0yr+518Y(7}|TNaK14`Go3tmt#!o2NT6UA>|c|4NC8-&^j$FO6?r(Rnyxu2nrz3 zPm1(CqsQ#VsMSw4m%U1_~c$Lj4V3Uk0=^oDBD4FME`t&@R;=wegT4xTawMCM)Bg~@riI`tWC&|Jd<4U@upF?B>o1i z1yYZw0zx=P#s?P)+=&p27z*6gjR2KkHBA%Ap9AGAg!5@aXFQTO?PLW*Yui9zoyq_Qkq_uc|p_bGcRhoCo`n!OEWKP`m)R` zn!Y^qs-~~Vq&5A~%n?n0EOSiLS7zSQ^oGoFO<$FHN7Gkl-qrNR%n40jlR2sBO__|Q zH)lT3bZ_Rgrnh9yXu6g;tLbYq=QMp?=Den_9~PSa_;87)KQUaY=^KV8Y5J4H<(mGf z;VGKlIy_y|HxAFxbl-4=rf(Xq)O0`XdsYw6*7U&eTul!S&)4+L!wWTi%kabC?(i4A z>GI*1G`(&3Z!|qLd|2!G)$n(S2SmC`8tw79Q)ubj29aBW=_JD-XdbVl*}GoT zx8h|Bk)CJzQ74);b{>p>R`+jqz4!E0iH>vSxbpsnEN(erZl&yc@3Z60OzWOMuDf5U z=^dGCyy-=$Y1mo881GL#r0HSNze%L4Etl<+y?4-3YJ9)RxoeL@#Ig'SW${qhD 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 literal 0 HcmV?d00001 diff --git a/obj/tsplash.obj b/obj/tsplash.obj new file mode 100644 index 0000000000000000000000000000000000000000..a7219c2dc05d16519309c04402f41e64f62ee861 GIT binary patch literal 24137 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 Mr;^{v3drdH0b_D?HUIzs literal 0 HcmV?d00001 diff --git a/obj/wrt54gl_chpwd.obj b/obj/wrt54gl_chpwd.obj new file mode 100644 index 0000000000000000000000000000000000000000..71e220be913bc056bb0a8ffab6eb3b1ae7180cb7 GIT binary patch literal 20351 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 Zc>jn>)C!!+0?54a6Y`;I+=ybc{|6qj1w;S< literal 0 HcmV?d00001 diff --git a/src/THTTPdownloader.cpp b/src/THTTPdownloader.cpp new file mode 100644 index 0000000..7044152 --- /dev/null +++ b/src/THTTPdownloader.cpp @@ -0,0 +1,180 @@ +#define CHUNK 16384 +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "THTTPdownloader.h" +#include "TZlib\GZipHelper.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +THTTPdownloader *HTTPdownloader; + +//--------------------------------------------------------------------------- +__fastcall THTTPdownloader::THTTPdownloader(TComponent* Owner) + : TForm(Owner) +{ + headers = new TList(); +} +//--------------------------------------------------------------------------- +int __fastcall THTTPdownloader::descargarHTML(char *host, char *request, TStream *out) +{ + TMemoryStream* in = new TMemoryStream(); + char buffer[4096]; + + int pos,readed; + int currSize,lastSize; + + AnsiString line; + HTTPheaders_list HeaderStruct; + httpResult->Clear(); + + for (int i = 0; i < headers->Count; i++) + { + HeaderStruct = (HTTPheaders_list) headers->Items[i]; + delete HeaderStruct; + } + headers->Clear(); + + + TcpClient1->RemoteHost = AnsiString( host ); + TcpClient1->RemotePort = 80; + TcpClient1->Open(); + + + if ( TcpClient1->Connected ) + { + statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Conectado a: ")+AnsiString(host)); + +/* ¿ver que se envia? + if ( Visible && debug->Checked ) ShowMessage("Cierre esta ventana para continuar"); +*/ + + TcpClient1->SendBuf(request,StrLen(request)); + + + bool R,W,T; + bool atStart = true; + bool inHeaders = true; + + while (TcpClient1->Connected) + { + R=TcpClient1->WaitForData(20000); + if (!TcpClient1->Connected || !R) break; + + if ( inHeaders ) + line = TcpClient1->Receiveln(); + else { + readed = TcpClient1->ReceiveBuf(buffer,4096); + if(readed<=0) break; + } + + + if ( atStart ) + { + atStart = false; //if (!preg_match('/HTTP\/(\\d\\.\\d)\\s*(\\d+)\\s*(.*)/', line, m)) return false; + httpResult->SelAttributes->Color = clGreen; + httpResult->Paragraph->Numbering = nsBullet; + httpResult->Lines->Add(line); + if ( line.SubString(1,4)!="HTTP" ) return -1; + continue; + } + + if (inHeaders) + { + if ( line.Trim() == "" ) + { + inHeaders = false; + continue; + } + + pos = line.AnsiPos(":"); + if (pos==0) + { + // Skip to the next header + continue; + } + + HeaderStruct = new THTTP_headers; + HeaderStruct->key = line.SubString(1,pos-1).Trim().LowerCase(); + HeaderStruct->value = line.SubString(pos+1,line.Length()).Trim(); + headers->Add(HeaderStruct); + + httpResult->SelAttributes->Color = clRed; + httpResult->Paragraph->Numbering = nsBullet; + httpResult->Lines->Add(line); + + continue; + } + + in->Write(buffer,readed); + } + TcpClient1->Close(); + + statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Leidos: ")+AnsiString(readed)+"/"+AnsiString(in->Size)); + + bool gziped=false; + for ( pos=0;posCount; pos++ ) + { + HeaderStruct = (HTTPheaders_list)headers->Items[pos]; + if ( HeaderStruct->key=="content-encoding" ) + { + gziped= (HeaderStruct->value=="gzip"); + break; + } + } + + httpResult->Paragraph->Numbering = nsNone; + if ( gziped ) + { + in->Position=0; + CGZIP2A plain((unsigned char *)in->Memory,(int)in->Size); + out->Write(plain.psz,plain.Length);out->Write("",1); + httpResult->Lines->Add(plain.psz); + } else { + in->Write("",1);in->Position = 0; + out->Write(in->Memory,in->Size); + httpResult->Lines->Add((char *)in->Memory); + } + + if ( debug->Checked ) + { + DateSeparator = '-'; + TimeSeparator = ';'; + statusBar->Clear(); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("RX: ------------------------------------------------------------------"); + statusBar->Lines->Assign(httpResult->Lines); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("TX: ------------------------------------------------------------------"); + statusBar->Lines->Add(request); +// statusBar->Lines->SaveToFile( ExtractFilePath(Application->ExeName)+"log\\"+DateTimeToStr(Now())+".http.rtf" ); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("EOT ------------------------------------------------------------------"); + } + + delete in; + } else { + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("ERROR CONECTANDO a: ")+AnsiString(host)); + return -1; + } + + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall THTTPdownloader::FormDestroy(TObject *Sender) +{ + HTTPheaders_list HeaderStruct; + + // Clean up – must free memory for the items as well as the list + for (int i = 0; i < headers->Count; i++) + { + HeaderStruct = (HTTPheaders_list) headers->Items[i]; + delete HeaderStruct; + } + delete headers; +} +//--------------------------------------------------------------------------- + + + + diff --git a/src/THTTPdownloader.ddp b/src/THTTPdownloader.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/src/THTTPdownloader.dfm b/src/THTTPdownloader.dfm new file mode 100644 index 0000000..4f9cd1d --- /dev/null +++ b/src/THTTPdownloader.dfm @@ -0,0 +1,57 @@ +object HTTPdownloader: THTTPdownloader + Left = 462 + Top = 523 + Width = 648 + Height = 474 + Caption = 'HTTPdownloader' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object httpResult: TRichEdit + Left = 0 + Top = 0 + Width = 640 + Height = 344 + Align = alClient + ScrollBars = ssBoth + TabOrder = 0 + end + object Panel1: TPanel + Left = 0 + Top = 344 + Width = 640 + Height = 99 + Align = alBottom + BevelOuter = bvNone + Caption = 'Panel1' + TabOrder = 1 + object statusBar: TRichEdit + Left = 0 + Top = 19 + Width = 640 + Height = 80 + Align = alBottom + ScrollBars = ssVertical + TabOrder = 0 + end + object debug: TCheckBox + Left = 0 + Top = 0 + Width = 97 + Height = 17 + Caption = 'Modo Debug' + TabOrder = 1 + end + end + object TcpClient1: TTcpClient + Left = 96 + Top = 64 + end +end diff --git a/src/THTTPdownloader.h b/src/THTTPdownloader.h new file mode 100644 index 0000000..60dfce2 --- /dev/null +++ b/src/THTTPdownloader.h @@ -0,0 +1,42 @@ +//--------------------------------------------------------------------------- + +#ifndef THTTPdownloaderH +#define THTTPdownloaderH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +typedef struct HTTP_headers + +{ + AnsiString key; + AnsiString value; +} THTTP_headers; + +typedef THTTP_headers* HTTPheaders_list; +//--------------------------------------------------------------------------- +class THTTPdownloader : public TForm +{ +__published: // IDE-managed Components + TTcpClient *TcpClient1; + TRichEdit *httpResult; + TPanel *Panel1; + TRichEdit *statusBar; + TCheckBox *debug; + void __fastcall FormDestroy(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall THTTPdownloader(TComponent* Owner); + TList *headers; + + int __fastcall descargarHTML(char *host, char *request, TStream *out); +}; +//--------------------------------------------------------------------------- +extern PACKAGE THTTPdownloader *HTTPdownloader; +//--------------------------------------------------------------------------- +#endif diff --git a/src/THTTPdownloader.~cpp b/src/THTTPdownloader.~cpp new file mode 100644 index 0000000..eca3318 --- /dev/null +++ b/src/THTTPdownloader.~cpp @@ -0,0 +1,181 @@ +#define CHUNK 16384 +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "THTTPdownloader.h" +#include "TZlib\GZipHelper.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +THTTPdownloader *HTTPdownloader; + +//--------------------------------------------------------------------------- +__fastcall THTTPdownloader::THTTPdownloader(TComponent* Owner) + : TForm(Owner) +{ + headers = new TList(); +} +//--------------------------------------------------------------------------- +int __fastcall THTTPdownloader::descargarHTML(char *host, char *request, TStream *out) +{ + TMemoryStream* in = new TMemoryStream(); + char buffer[4096]; + + int pos,readed; + int currSize,lastSize; + + AnsiString line; + HTTPheaders_list HeaderStruct; + httpResult->Clear(); + + for (int i = 0; i < headers->Count; i++) + { + HeaderStruct = (HTTPheaders_list) headers->Items[i]; + delete HeaderStruct; + } + headers->Clear(); + + + TcpClient1->RemoteHost = AnsiString( host ); + TcpClient1->RemotePort = 80; + TcpClient1->Open(); + + + if ( TcpClient1->Connected ) + { + statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Conectado a: ")+AnsiString(host)); + +/* ¿ver que se envia? + if ( Visible && debug->Checked ) ShowMessage("Cierre esta ventana para continuar"); +*/ + + TcpClient1->SendBuf(request,StrLen(request)); + + + bool R,W,T; + bool atStart = true; + bool inHeaders = true; + + while (TcpClient1->Connected) + { + R=TcpClient1->WaitForData(20000); + if (!TcpClient1->Connected) break; +// if (!TcpClient1->Connected || !R) break; + + if ( inHeaders ) + line = TcpClient1->Receiveln(); + else { + readed = TcpClient1->ReceiveBuf(buffer,4096); + if(readed<=0) break; + } + + + if ( atStart ) + { + atStart = false; //if (!preg_match('/HTTP\/(\\d\\.\\d)\\s*(\\d+)\\s*(.*)/', line, m)) return false; + httpResult->SelAttributes->Color = clGreen; + httpResult->Paragraph->Numbering = nsBullet; + httpResult->Lines->Add(line); + if ( line.SubString(1,4)!="HTTP" ) return -1; + continue; + } + + if (inHeaders) + { + if ( line.Trim() == "" ) + { + inHeaders = false; + continue; + } + + pos = line.AnsiPos(":"); + if (pos==0) + { + // Skip to the next header + continue; + } + + HeaderStruct = new THTTP_headers; + HeaderStruct->key = line.SubString(1,pos-1).Trim().LowerCase(); + HeaderStruct->value = line.SubString(pos+1,line.Length()).Trim(); + headers->Add(HeaderStruct); + + httpResult->SelAttributes->Color = clRed; + httpResult->Paragraph->Numbering = nsBullet; + httpResult->Lines->Add(line); + + continue; + } + + in->Write(buffer,readed); + } + TcpClient1->Close(); + + statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Leidos: ")+AnsiString(readed)+"/"+AnsiString(in->Size)); + + bool gziped=false; + for ( pos=0;posCount; pos++ ) + { + HeaderStruct = (HTTPheaders_list)headers->Items[pos]; + if ( HeaderStruct->key=="content-encoding" ) + { + gziped= (HeaderStruct->value=="gzip"); + break; + } + } + + httpResult->Paragraph->Numbering = nsNone; + if ( gziped ) + { + in->Position=0; + CGZIP2A plain((unsigned char *)in->Memory,(int)in->Size); + out->Write(plain.psz,plain.Length);out->Write("",1); + httpResult->Lines->Add(plain.psz); + } else { + in->Write("",1);in->Position = 0; + out->Write(in->Memory,in->Size); + httpResult->Lines->Add((char *)in->Memory); + } + + if ( debug->Checked ) + { + DateSeparator = '-'; + TimeSeparator = ';'; + statusBar->Clear(); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("RX: ------------------------------------------------------------------"); + statusBar->Lines->Assign(httpResult->Lines); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("TX: ------------------------------------------------------------------"); + statusBar->Lines->Add(request); +// statusBar->Lines->SaveToFile( ExtractFilePath(Application->ExeName)+"log\\"+DateTimeToStr(Now())+".http.rtf" ); + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add("EOT ------------------------------------------------------------------"); + } + + delete in; + } else { + statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("ERROR CONECTANDO a: ")+AnsiString(host)); + return -1; + } + + return 0; +} +//--------------------------------------------------------------------------- +void __fastcall THTTPdownloader::FormDestroy(TObject *Sender) +{ + HTTPheaders_list HeaderStruct; + + // Clean up – must free memory for the items as well as the list + for (int i = 0; i < headers->Count; i++) + { + HeaderStruct = (HTTPheaders_list) headers->Items[i]; + delete HeaderStruct; + } + delete headers; +} +//--------------------------------------------------------------------------- + + + + diff --git a/src/THTTPdownloader.~ddp b/src/THTTPdownloader.~ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/src/THTTPdownloader.~dfm b/src/THTTPdownloader.~dfm new file mode 100644 index 0000000..4f9cd1d --- /dev/null +++ b/src/THTTPdownloader.~dfm @@ -0,0 +1,57 @@ +object HTTPdownloader: THTTPdownloader + Left = 462 + Top = 523 + Width = 648 + Height = 474 + Caption = 'HTTPdownloader' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object httpResult: TRichEdit + Left = 0 + Top = 0 + Width = 640 + Height = 344 + Align = alClient + ScrollBars = ssBoth + TabOrder = 0 + end + object Panel1: TPanel + Left = 0 + Top = 344 + Width = 640 + Height = 99 + Align = alBottom + BevelOuter = bvNone + Caption = 'Panel1' + TabOrder = 1 + object statusBar: TRichEdit + Left = 0 + Top = 19 + Width = 640 + Height = 80 + Align = alBottom + ScrollBars = ssVertical + TabOrder = 0 + end + object debug: TCheckBox + Left = 0 + Top = 0 + Width = 97 + Height = 17 + Caption = 'Modo Debug' + TabOrder = 1 + end + end + object TcpClient1: TTcpClient + Left = 96 + Top = 64 + end +end diff --git a/src/THTTPdownloader.~h b/src/THTTPdownloader.~h new file mode 100644 index 0000000..60dfce2 --- /dev/null +++ b/src/THTTPdownloader.~h @@ -0,0 +1,42 @@ +//--------------------------------------------------------------------------- + +#ifndef THTTPdownloaderH +#define THTTPdownloaderH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +typedef struct HTTP_headers + +{ + AnsiString key; + AnsiString value; +} THTTP_headers; + +typedef THTTP_headers* HTTPheaders_list; +//--------------------------------------------------------------------------- +class THTTPdownloader : public TForm +{ +__published: // IDE-managed Components + TTcpClient *TcpClient1; + TRichEdit *httpResult; + TPanel *Panel1; + TRichEdit *statusBar; + TCheckBox *debug; + void __fastcall FormDestroy(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall THTTPdownloader(TComponent* Owner); + TList *headers; + + int __fastcall descargarHTML(char *host, char *request, TStream *out); +}; +//--------------------------------------------------------------------------- +extern PACKAGE THTTPdownloader *HTTPdownloader; +//--------------------------------------------------------------------------- +#endif diff --git a/src/TZlib/DLL_FAQ.txt b/src/TZlib/DLL_FAQ.txt new file mode 100644 index 0000000..ad4286f --- /dev/null +++ b/src/TZlib/DLL_FAQ.txt @@ -0,0 +1,397 @@ + + Frequently Asked Questions about ZLIB1.DLL + + +This document describes the design, the rationale, and the usage +of the official DLL build of zlib, named ZLIB1.DLL. If you have +general questions about zlib, you should see the file "FAQ" found +in the zlib distribution, or at the following location: + http://www.gzip.org/zlib/zlib_faq.html + + + 1. What is ZLIB1.DLL, and how can I get it? + + - ZLIB1.DLL is the official build of zlib as a DLL. + (Please remark the character '1' in the name.) + + Pointers to a precompiled ZLIB1.DLL can be found in the zlib + web site at: + http://www.zlib.org/ + + Applications that link to ZLIB1.DLL can rely on the following + specification: + + * The exported symbols are exclusively defined in the source + files "zlib.h" and "zlib.def", found in an official zlib + source distribution. + * The symbols are exported by name, not by ordinal. + * The exported names are undecorated. + * The calling convention of functions is "C" (CDECL). + * The ZLIB1.DLL binary is linked to MSVCRT.DLL. + + The archive in which ZLIB1.DLL is bundled contains compiled + test programs that must run with a valid build of ZLIB1.DLL. + It is recommended to download the prebuilt DLL from the zlib + web site, instead of building it yourself, to avoid potential + incompatibilities that could be introduced by your compiler + and build settings. If you do build the DLL yourself, please + make sure that it complies with all the above requirements, + and it runs with the precompiled test programs, bundled with + the original ZLIB1.DLL distribution. + + If, for any reason, you need to build an incompatible DLL, + please use a different file name. + + + 2. Why did you change the name of the DLL to ZLIB1.DLL? + What happened to the old ZLIB.DLL? + + - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required + compilation settings that were incompatible to those used by + a static build. The DLL settings were supposed to be enabled + by defining the macro ZLIB_DLL, before including "zlib.h". + Incorrect handling of this macro was silently accepted at + build time, resulting in two major problems: + + * ZLIB_DLL was missing from the old makefile. When building + the DLL, not all people added it to the build options. In + consequence, incompatible incarnations of ZLIB.DLL started + to circulate around the net. + + * When switching from using the static library to using the + DLL, applications had to define the ZLIB_DLL macro and + to recompile all the sources that contained calls to zlib + functions. Failure to do so resulted in creating binaries + that were unable to run with the official ZLIB.DLL build. + + The only possible solution that we could foresee was to make + a binary-incompatible change in the DLL interface, in order to + remove the dependency on the ZLIB_DLL macro, and to release + the new DLL under a different name. + + We chose the name ZLIB1.DLL, where '1' indicates the major + zlib version number. We hope that we will not have to break + the binary compatibility again, at least not as long as the + zlib-1.x series will last. + + There is still a ZLIB_DLL macro, that can trigger a more + efficient build and use of the DLL, but compatibility no + longer dependents on it. + + + 3. Can I build ZLIB.DLL from the new zlib sources, and replace + an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier? + + - In principle, you can do it by assigning calling convention + keywords to the macros ZEXPORT and ZEXPORTVA. In practice, + it depends on what you mean by "an old ZLIB.DLL", because the + old DLL exists in several mutually-incompatible versions. + You have to find out first what kind of calling convention is + being used in your particular ZLIB.DLL build, and to use the + same one in the new build. If you don't know what this is all + about, you might be better off if you would just leave the old + DLL intact. + + + 4. Can I compile my application using the new zlib interface, and + link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or + earlier? + + - The official answer is "no"; the real answer depends again on + what kind of ZLIB.DLL you have. Even if you are lucky, this + course of action is unreliable. + + If you rebuild your application and you intend to use a newer + version of zlib (post- 1.1.4), it is strongly recommended to + link it to the new ZLIB1.DLL. + + + 5. Why are the zlib symbols exported by name, and not by ordinal? + + - Although exporting symbols by ordinal is a little faster, it + is risky. Any single glitch in the maintenance or use of the + DEF file that contains the ordinals can result in incompatible + builds and frustrating crashes. Simply put, the benefits of + exporting symbols by ordinal do not justify the risks. + + Technically, it should be possible to maintain ordinals in + the DEF file, and still export the symbols by name. Ordinals + exist in every DLL, and even if the dynamic linking performed + at the DLL startup is searching for names, ordinals serve as + hints, for a faster name lookup. However, if the DEF file + contains ordinals, the Microsoft linker automatically builds + an implib that will cause the executables linked to it to use + those ordinals, and not the names. It is interesting to + notice that the GNU linker for Win32 does not suffer from this + problem. + + It is possible to avoid the DEF file if the exported symbols + are accompanied by a "__declspec(dllexport)" attribute in the + source files. You can do this in zlib by predefining the + ZLIB_DLL macro. + + + 6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling + convention. Why not use the STDCALL convention? + STDCALL is the standard convention in Win32, and I need it in + my Visual Basic project! + + (For readability, we use CDECL to refer to the convention + triggered by the "__cdecl" keyword, STDCALL to refer to + the convention triggered by "__stdcall", and FASTCALL to + refer to the convention triggered by "__fastcall".) + + - Most of the native Windows API functions (without varargs) use + indeed the WINAPI convention (which translates to STDCALL in + Win32), but the standard C functions use CDECL. If a user + application is intrinsically tied to the Windows API (e.g. + it calls native Windows API functions such as CreateFile()), + sometimes it makes sense to decorate its own functions with + WINAPI. But if ANSI C or POSIX portability is a goal (e.g. + it calls standard C functions such as fopen()), it is not a + sound decision to request the inclusion of , or to + use non-ANSI constructs, for the sole purpose to make the user + functions STDCALL-able. + + The functionality offered by zlib is not in the category of + "Windows functionality", but is more like "C functionality". + + Technically, STDCALL is not bad; in fact, it is slightly + faster than CDECL, and it works with variable-argument + functions, just like CDECL. It is unfortunate that, in spite + of using STDCALL in the Windows API, it is not the default + convention used by the C compilers that run under Windows. + The roots of the problem reside deep inside the unsafety of + the K&R-style function prototypes, where the argument types + are not specified; but that is another story for another day. + + The remaining fact is that CDECL is the default convention. + Even if an explicit convention is hard-coded into the function + prototypes inside C headers, problems may appear. The + necessity to expose the convention in users' callbacks is one + of these problems. + + The calling convention issues are also important when using + zlib in other programming languages. Some of them, like Ada + (GNAT) and Fortran (GNU G77), have C bindings implemented + initially on Unix, and relying on the C calling convention. + On the other hand, the pre- .NET versions of Microsoft Visual + Basic require STDCALL, while Borland Delphi prefers, although + it does not require, FASTCALL. + + In fairness to all possible uses of zlib outside the C + programming language, we choose the default "C" convention. + Anyone interested in different bindings or conventions is + encouraged to maintain specialized projects. The "contrib/" + directory from the zlib distribution already holds a couple + of foreign bindings, such as Ada, C++, and Delphi. + + + 7. I need a DLL for my Visual Basic project. What can I do? + + - Define the ZLIB_WINAPI macro before including "zlib.h", when + building both the DLL and the user application (except that + you don't need to define anything when using the DLL in Visual + Basic). The ZLIB_WINAPI macro will switch on the WINAPI + (STDCALL) convention. The name of this DLL must be different + than the official ZLIB1.DLL. + + Gilles Vollant has contributed a build named ZLIBWAPI.DLL, + with the ZLIB_WINAPI macro turned on, and with the minizip + functionality built in. For more information, please read + the notes inside "contrib/vstudio/readme.txt", found in the + zlib distribution. + + + 8. I need to use zlib in my Microsoft .NET project. What can I + do? + + - Henrik Ravn has contributed a .NET wrapper around zlib. Look + into contrib/dotzlib/, inside the zlib distribution. + + + 9. If my application uses ZLIB1.DLL, should I link it to + MSVCRT.DLL? Why? + + - It is not required, but it is recommended to link your + application to MSVCRT.DLL, if it uses ZLIB1.DLL. + + The executables (.EXE, .DLL, etc.) that are involved in the + same process and are using the C run-time library (i.e. they + are calling standard C functions), must link to the same + library. There are several libraries in the Win32 system: + CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc. + Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that + depend on it should also be linked to MSVCRT.DLL. + + +10. Why are you saying that ZLIB1.DLL and my application should + be linked to the same C run-time (CRT) library? I linked my + application and my DLLs to different C libraries (e.g. my + application to a static library, and my DLLs to MSVCRT.DLL), + and everything works fine. + + - If a user library invokes only pure Win32 API (accessible via + and the related headers), its DLL build will work + in any context. But if this library invokes standard C API, + things get more complicated. + + There is a single Win32 library in a Win32 system. Every + function in this library resides in a single DLL module, that + is safe to call from anywhere. On the other hand, there are + multiple versions of the C library, and each of them has its + own separate internal state. Standalone executables and user + DLLs that call standard C functions must link to a C run-time + (CRT) library, be it static or shared (DLL). Intermixing + occurs when an executable (not necessarily standalone) and a + DLL are linked to different CRTs, and both are running in the + same process. + + Intermixing multiple CRTs is possible, as long as their + internal states are kept intact. The Microsoft Knowledge Base + articles KB94248 "HOWTO: Use the C Run-Time" and KB140584 + "HOWTO: Link with the Correct C Run-Time (CRT) Library" + mention the potential problems raised by intermixing. + + If intermixing works for you, it's because your application + and DLLs are avoiding the corruption of each of the CRTs' + internal states, maybe by careful design, or maybe by fortune. + + Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such + as those provided by Borland, raises similar problems. + + +11. Why are you linking ZLIB1.DLL to MSVCRT.DLL? + + - MSVCRT.DLL exists on every Windows 95 with a new service pack + installed, or with Microsoft Internet Explorer 4 or later, and + on all other Windows 4.x or later (Windows 98, Windows NT 4, + or later). It is freely distributable; if not present in the + system, it can be downloaded from Microsoft or from other + software provider for free. + + The fact that MSVCRT.DLL does not exist on a virgin Windows 95 + is not so problematic. Windows 95 is scarcely found nowadays, + Microsoft ended its support a long time ago, and many recent + applications from various vendors, including Microsoft, do not + even run on it. Furthermore, no serious user should run + Windows 95 without a proper update installed. + + +12. Why are you not linking ZLIB1.DLL to + <> ? + + - We considered and abandoned the following alternatives: + + * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or + LIBCMT.LIB) is not a good option. People are using the DLL + mainly to save disk space. If you are linking your program + to a static C library, you may as well consider linking zlib + in statically, too. + + * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because + CRTDLL.DLL is present on every Win32 installation. + Unfortunately, it has a series of problems: it does not + work properly with Microsoft's C++ libraries, it does not + provide support for 64-bit file offsets, (and so on...), + and Microsoft discontinued its support a long time ago. + + * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied + with the Microsoft .NET platform, and Visual C++ 7.0/7.1, + raises problems related to the status of ZLIB1.DLL as a + system component. According to the Microsoft Knowledge Base + article KB326922 "INFO: Redistribution of the Shared C + Runtime Component in Visual C++ .NET", MSVCR70.DLL and + MSVCR71.DLL are not supposed to function as system DLLs, + because they may clash with MSVCRT.DLL. Instead, the + application's installer is supposed to put these DLLs + (if needed) in the application's private directory. + If ZLIB1.DLL depends on a non-system runtime, it cannot + function as a redistributable system component. + + * Linking ZLIB1.DLL to non-Microsoft runtimes, such as + Borland's, or Cygwin's, raises problems related to the + reliable presence of these runtimes on Win32 systems. + It's easier to let the DLL build of zlib up to the people + who distribute these runtimes, and who may proceed as + explained in the answer to Question 14. + + +13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL, + how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0 + (Visual Studio .NET) or newer? + + - Due to the problems explained in the Microsoft Knowledge Base + article KB326922 (see the previous answer), the C runtime that + comes with the VC7 environment is no longer considered a + system component. That is, it should not be assumed that this + runtime exists, or may be installed in a system directory. + Since ZLIB1.DLL is supposed to be a system component, it may + not depend on a non-system component. + + In order to link ZLIB1.DLL and your application to MSVCRT.DLL + in VC7, you need the library of Visual C++ 6.0 or older. If + you don't have this library at hand, it's probably best not to + use ZLIB1.DLL. + + We are hoping that, in the future, Microsoft will provide a + way to build applications linked to a proper system runtime, + from the Visual C++ environment. Until then, you have a + couple of alternatives, such as linking zlib in statically. + If your application requires dynamic linking, you may proceed + as explained in the answer to Question 14. + + +14. I need to link my own DLL build to a CRT different than + MSVCRT.DLL. What can I do? + + - Feel free to rebuild the DLL from the zlib sources, and link + it the way you want. You should, however, clearly state that + your build is unofficial. You should give it a different file + name, and/or install it in a private directory that can be + accessed by your application only, and is not visible to the + others (e.g. it's not in the SYSTEM or the SYSTEM32 directory, + and it's not in the PATH). Otherwise, your build may clash + with applications that link to the official build. + + For example, in Cygwin, zlib is linked to the Cygwin runtime + CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. + + +15. May I include additional pieces of code that I find useful, + link them in ZLIB1.DLL, and export them? + + - No. A legitimate build of ZLIB1.DLL must not include code + that does not originate from the official zlib source code. + But you can make your own private DLL build, under a different + file name, as suggested in the previous answer. + + For example, zlib is a part of the VCL library, distributed + with Borland Delphi and C++ Builder. The DLL build of VCL + is a redistributable file, named VCLxx.DLL. + + +16. May I remove some functionality out of ZLIB1.DLL, by enabling + macros like NO_GZCOMPRESS or NO_GZIP at compile time? + + - No. A legitimate build of ZLIB1.DLL must provide the complete + zlib functionality, as implemented in the official zlib source + code. But you can make your own private DLL build, under a + different file name, as suggested in the previous answer. + + +17. I made my own ZLIB1.DLL build. Can I test it for compliance? + + - We prefer that you download the official DLL from the zlib + web site. If you need something peculiar from this DLL, you + can send your suggestion to the zlib mailing list. + + However, in case you do rebuild the DLL yourself, you can run + it with the test programs found in the DLL distribution. + Running these test programs is not a guarantee of compliance, + but a failure can imply a detected problem. + +** + +This document is written and maintained by +Cosmin Truta diff --git a/src/TZlib/GZipHelper.h b/src/TZlib/GZipHelper.h new file mode 100644 index 0000000..b3a695f --- /dev/null +++ b/src/TZlib/GZipHelper.h @@ -0,0 +1,474 @@ +/* version: 1.0, Feb, 2003 + Author : Gao Dasheng + Copyright (C) 1995-2002 Gao Dasheng(dsgao@hotmail.com) + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +////////////////////////////////////////////////////////////////////////////// + Introduce: + This file includes two classes CA2GZIP and CGZIP2A which do compressing and + uncompressing in memory. and It 's very easy to use for small data compressing. + Some compress and uncompress codes came from gzip unzip function of zlib 1.1.x. + + Usage: + these two classes work used with zlib 1.1.x (http://www.gzip.org/zlib/). + They were tested in Window OS. + Exmaple: + #include "GZipHelper.h" + void main() + { + char plainText[]="Plain text here"; + CA2GZIP gzip(plainText,strlen(plainText)); // do compressing here; + LPGZIP pgzip=gzip.pgzip; // pgzip is zipped data pointer, you can use it directly + int len=gzip.Length; // Length is length of zipped data; + + CGZIP2A plain(pgzip,len); // do decompressing here + + char *pplain=plain.psz; // psz is plain data pointer + int aLen=plain.Length; // Length is length of unzipped data. + } +////////////////////////////////////////////////////////////////////////////// +*/ + + +#ifndef __GZipHelper__ +#define __GZipHelper__ + +#include "zip/zutil.h" + + +#define EOF 0 + +#define ALLOC(size) malloc(size) +#define TRYFREE(p) {if (p) free(p);} +#define Z_BUFSIZE 4096 +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define RESERVED 0xE0 /* bits 5..7: reserved */ + +typedef unsigned char GZIP; +typedef GZIP* LPGZIP; + +static const int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ + +template< int t_nBufferLength = 1024 ,int t_nLevel=Z_DEFAULT_COMPRESSION,int t_nStrategy=Z_DEFAULT_STRATEGY> +class CA2GZIPT +{ + public: + LPGZIP pgzip; + int Length; + public: + CA2GZIPT(char* lpsz,int len=-1):pgzip(0),Length(0) + { + Init(lpsz,len); + } + ~CA2GZIPT() + { + if(pgzip!=m_buffer) TRYFREE(pgzip); + } + void Init(char *lpsz,int len=-1) + { + if(lpsz==0) + { + pgzip=0; + Length=0; + return ; + } + if(len==-1) + { + len=(int)strlen(lpsz); + } + m_CurrentBufferSize=t_nBufferLength; + pgzip=m_buffer; + + + m_zstream.zalloc = (alloc_func)0; + m_zstream.zfree = (free_func)0; + m_zstream.opaque = (voidpf)0; + m_zstream.next_in = Z_NULL; + m_zstream.next_out = Z_NULL; + m_zstream.avail_in = 0; + m_zstream.avail_out = 0; + m_z_err = Z_OK; + m_crc = crc32(0L, Z_NULL, 0); + int err = deflateInit2(&(m_zstream), t_nLevel,Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, t_nStrategy); + m_outbuf = (Byte*)ALLOC(Z_BUFSIZE); + m_zstream.next_out = m_outbuf; + if (err != Z_OK || m_outbuf == Z_NULL) + { + destroy(); + return ; + } + m_zstream.avail_out = Z_BUFSIZE; + GZIP header[10]={0x1f,0x8b,Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE}; + write(header,10); + + m_zstream.next_in = (Bytef*)lpsz; + m_zstream.avail_in = len; + while (m_zstream.avail_in != 0) + { + if (m_zstream.avail_out == 0) + { + m_zstream.next_out = m_outbuf; + this->write(m_outbuf,Z_BUFSIZE); + m_zstream.avail_out = Z_BUFSIZE; + } + m_z_err = deflate(&m_zstream,Z_NO_FLUSH); + if (m_z_err != Z_OK) break; + } + m_crc = crc32(m_crc, (const Bytef *)lpsz, len); + if (finish() != Z_OK) { destroy(); return ;} + putLong(m_crc); + putLong (m_zstream.total_in); + destroy(); + } + private: + GZIP m_buffer[t_nBufferLength]; + int m_CurrentBufferSize; + z_stream m_zstream; + int m_z_err; /* error code for last stream operation */ + unsigned char *m_outbuf; /* output buffer */ + uLong m_crc; /* crc32 of uncompressed data */ + + int write(LPGZIP buf,int count) + { + if(buf==0) return 0; + if(Length+count>m_CurrentBufferSize) + { + int nTimes=(Length+count)/t_nBufferLength +1; + LPGZIP pTemp=pgzip; + pgzip=static_cast( malloc(nTimes*t_nBufferLength)); + m_CurrentBufferSize=nTimes*t_nBufferLength; + memcpy(pgzip,pTemp,Length); + if(pTemp!=m_buffer) free(pTemp); + } + memcpy(pgzip+Length,buf,count); + Length+=count; + return count; + } + + int finish() + { + uInt len; + int done = 0; + m_zstream.avail_in = 0; + for (;;) + { + len = Z_BUFSIZE - m_zstream.avail_out; + if (len != 0) + { + write(m_outbuf,len); + m_zstream.next_out = m_outbuf; + m_zstream.avail_out = Z_BUFSIZE; + } + if (done) break; + m_z_err = deflate(&(m_zstream), Z_FINISH); + if (len == 0 && m_z_err == Z_BUF_ERROR) m_z_err = Z_OK; + + done = (m_zstream.avail_out != 0 || m_z_err == Z_STREAM_END); + if (m_z_err != Z_OK && m_z_err != Z_STREAM_END) break; + } + return m_z_err == Z_STREAM_END ? Z_OK : m_z_err; + } + int destroy() + { + int err = Z_OK; + if (m_zstream.state != NULL) { + err = deflateEnd(&(m_zstream)); + } + if (m_z_err < 0) err = m_z_err; + TRYFREE(m_outbuf); + return err; + } + + void putLong (uLong x) + { + for(int n = 0; n < 4; n++) { + unsigned char c=(unsigned char)(x & 0xff); + write(&c,1); + x >>= 8; + } + } +}; +typedef CA2GZIPT<10> CA2GZIP; + + +template< int t_nBufferLength = 1024> +class CGZIP2AT +{ + public: + char *psz; + int Length; + CGZIP2AT(LPGZIP pgzip,int len):m_gzip(pgzip),m_gziplen(len),psz(0),Length(0),m_pos(0) + { + Init(); + } + ~CGZIP2AT() + { + if(psz!=m_buffer) TRYFREE(psz); + } + void Init() + { + if(m_gzip==0) + { + psz=0; + Length=0; + return ; + } + m_CurrentBufferSize=t_nBufferLength; + psz=m_buffer; + memset(psz,0,m_CurrentBufferSize+1); + + m_zstream.zalloc = (alloc_func)0; + m_zstream.zfree = (free_func)0; + m_zstream.opaque = (voidpf)0; + m_zstream.next_in = m_inbuf = Z_NULL; + m_zstream.next_out = Z_NULL; + m_zstream.avail_in = m_zstream.avail_out = 0; + m_z_err = Z_OK; + m_z_eof = 0; + m_transparent = 0; + m_crc = crc32(0L, Z_NULL, 0); + + m_zstream.next_in =m_inbuf = (unsigned char *)ALLOC(Z_BUFSIZE); + int err = inflateInit2(&(m_zstream), -MAX_WBITS); + if (err != Z_OK || m_inbuf == Z_NULL) + { + destroy(); + return; + } + m_zstream.avail_out = Z_BUFSIZE; + check_header(); + char outbuf[Z_BUFSIZE]; + int nRead; + while(true) + { + nRead=gzread(outbuf,Z_BUFSIZE); + if(nRead<=0) break; + write(outbuf,nRead); + } + destroy(); + } + private: + char m_buffer[t_nBufferLength+1]; + int m_CurrentBufferSize; + z_stream m_zstream; + int m_z_err; /* error code for last stream operation */ + unsigned char *m_inbuf; /* output buffer */ + uLong m_crc; /* crc32 of uncompressed data */ + int m_z_eof; + int m_transparent; + + int m_pos; + LPGZIP m_gzip; + int m_gziplen; + + void check_header() + { + int method; /* method byte */ + int flags; /* flags byte */ + uInt len; + int c; + + /* Check the gzip magic header */ + for (len = 0; len < 2; len++) { + c = get_byte(); + if (c != gz_magic[len]) { + if (len != 0) m_zstream.avail_in++, m_zstream.next_in--; + if (c != EOF) { + m_zstream.avail_in++, m_zstream.next_in--; + m_transparent = 1; + } + m_z_err =m_zstream.avail_in != 0 ? Z_OK : Z_STREAM_END; + return; + } + } + method = get_byte(); + flags = get_byte(); + if (method != Z_DEFLATED || (flags & RESERVED) != 0) { + m_z_err = Z_DATA_ERROR; + return; + } + /* Discard time, xflags and OS code: */ + for (len = 0; len < 6; len++) (void)get_byte(); + + if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ + len = (uInt)get_byte(); + len += ((uInt)get_byte())<<8; + /* len is garbage if EOF but the loop below will quit anyway */ + while (len-- != 0 && get_byte() != EOF) ; + } + if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ + while ((c = get_byte()) != 0 && c != EOF) ; + } + if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ + while ((c = get_byte()) != 0 && c != EOF) ; + } + if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ + for (len = 0; len < 2; len++) (void)get_byte(); + } + m_z_err = m_z_eof ? Z_DATA_ERROR : Z_OK; + } + + int get_byte() + { + if (m_z_eof) return EOF; + if (m_zstream.avail_in == 0) + { + errno = 0; + m_zstream.avail_in =read(m_inbuf,Z_BUFSIZE); + if(m_zstream.avail_in == 0) + { + m_z_eof = 1; + return EOF; + } + m_zstream.next_in = m_inbuf; + } + m_zstream.avail_in--; + return *(m_zstream.next_in)++; + } + int read(LPGZIP buf,int size) + { + int nRead=size; + if(m_pos+size>=m_gziplen) + { + nRead=m_gziplen-m_pos; + } + if(nRead<=0) return 0; + memcpy(buf,m_gzip+m_pos,nRead); + m_pos+=nRead; + return nRead; + } + + int gzread(char* buf,int len) + { + Bytef *start = (Bytef*)buf; /* starting point for crc computation */ + unsigned char *next_out; /* == stream.next_out but not forced far (for MSDOS) */ + + + if (m_z_err == Z_DATA_ERROR || m_z_err == Z_ERRNO) return -1; + if (m_z_err == Z_STREAM_END) return 0; /* EOF */ + + next_out = (unsigned char *)buf; + m_zstream.next_out = (Bytef*)buf; + m_zstream.avail_out = len; + while (m_zstream.avail_out != 0) { + if (m_transparent) + { + /* Copy first the lookahead bytes: */ + uInt n = m_zstream.avail_in; + if (n > m_zstream.avail_out) n = m_zstream.avail_out; + if (n > 0) + { + zmemcpy(m_zstream.next_out,m_zstream.next_in, n); + next_out += n; + m_zstream.next_out = next_out; + m_zstream.next_in += n; + m_zstream.avail_out -= n; + m_zstream.avail_in -= n; + } + if (m_zstream.avail_out > 0) { + m_zstream.avail_out -=read(next_out,m_zstream.avail_out); + } + len -= m_zstream.avail_out; + m_zstream.total_in += (uLong)len; + m_zstream.total_out += (uLong)len; + if (len == 0) m_z_eof = 1; + return (int)len; + } + if (m_zstream.avail_in == 0 && !m_z_eof) + { + errno = 0; + m_zstream.avail_in = read(m_inbuf,Z_BUFSIZE); + if (m_zstream.avail_in == 0) + { + m_z_eof = 1; + } + m_zstream.next_in = m_inbuf; + } + m_z_err = inflate(&(m_zstream), Z_NO_FLUSH); + if (m_z_err == Z_STREAM_END) + { + /* Check CRC and original size */ + m_crc = crc32(m_crc, start, (uInt)(m_zstream.next_out - start)); + start = m_zstream.next_out; + if (getLong() != m_crc) { + m_z_err = Z_DATA_ERROR; + }else + { + (void)getLong(); + check_header(); + if (m_z_err == Z_OK) + { + uLong total_in = m_zstream.total_in; + uLong total_out = m_zstream.total_out; + inflateReset(&(m_zstream)); + m_zstream.total_in = total_in; + m_zstream.total_out = total_out; + m_crc = crc32(0L, Z_NULL, 0); + } + } + } + if (m_z_err != Z_OK || m_z_eof) break; + } + m_crc = crc32(m_crc, start, (uInt)(m_zstream.next_out - start)); + return (int)(len - m_zstream.avail_out); + } + uLong getLong() + { + uLong x = (uLong)get_byte(); + int c; + x += ((uLong)get_byte())<<8; + x += ((uLong)get_byte())<<16; + c = get_byte(); + if (c == EOF) m_z_err = Z_DATA_ERROR; + x += ((uLong)c)<<24; + return x; + } + int write(char* buf,int count) + { + if(buf==0) return 0; + if(Length+count>m_CurrentBufferSize) + { + int nTimes=(Length+count)/t_nBufferLength +1; + char *pTemp=psz; + psz=static_cast( malloc(nTimes*t_nBufferLength+1)); + m_CurrentBufferSize=nTimes*t_nBufferLength; + memset(psz,0,m_CurrentBufferSize+1); + memcpy(psz,pTemp,Length); + if(pTemp!=m_buffer) free(pTemp); + } + memcpy(psz+Length,buf,count); + Length+=count; + return count; + } + int destroy() + { + int err = Z_OK; + if (m_zstream.state != NULL) { + err = inflateEnd(&(m_zstream)); + } + if (m_z_err < 0) err = m_z_err; + TRYFREE(m_inbuf); + return err; +} + +}; +typedef CGZIP2AT<> CGZIP2A; +#endif \ No newline at end of file diff --git a/src/TZlib/Gziphelper.html b/src/TZlib/Gziphelper.html new file mode 100644 index 0000000..32d5600 --- /dev/null +++ b/src/TZlib/Gziphelper.html @@ -0,0 +1,63 @@ + + + +

+Two classes for doing Gzip in memory! +


+ + + +This article was contributed by +
Gao dasheng. + + +

+ + +

Environment: OS independend + +

+ + +Now many applications need API to do gzip in memory. Zlib form http://www.gzip.org/zlib provides gzip and ungzip function,but they is for file,It's very inconvenience to compress and decompress small data compressing in memory. I ported the gzip and ungzip function to two template class CA2GZIP and CGZIP2A to do gzip in memory, and they also allocate and deallocate memory automatically. +It works with zlib from http://www.gzip.org/zlib. +the following is some codes for how to use them. + + + + + +

+     #include "GZipHelper.h"
+	 void main()
+	 {
+        char plainText[]="Plain text here";
+		CA2GZIP gzip(plainText,strlen(plainText));  // do compressing here;
+		LPGZIP pgzip=gzip.pgzip;  // pgzip is zipped data pointer, you can use it irectly
+		int len=gzip.Length;      // Length is length of zipped data;
+
+		CGZIP2A plain(pgzip,len);  // do uncompressing here
+
+		char *pplain=plain.psz;    // psz is plain data pointer
+		int  aLen=plain.Length;    // Length is length of unzipped data.
+	 }
+
+
+
+ +

Downloads

+ + +Download demo project - 142 Kb
+ + +Download source - 142 Kb
+ +

History

+Date Posted: Jun 20, 2003]
+ +
+ + + + \ No newline at end of file diff --git a/src/TZlib/README.txt b/src/TZlib/README.txt new file mode 100644 index 0000000..5c1ac22 --- /dev/null +++ b/src/TZlib/README.txt @@ -0,0 +1,53 @@ + +What's here +=========== + The official ZLIB1.DLL + + +Source +====== + zlib version 1.2.3 + available at http://www.gzip.org/zlib/ + + +Specification and rationale +=========================== + See the accompanying DLL_FAQ.txt + + +Usage +===== + See the accompanying USAGE.txt + + +Build info +========== + Contributed by Gilles Vollant + + Compiler: Microsoft Visual C++ Toolkit 2003 + Library: Microsoft Visual C++ 6.0 (to link with MSVCRT.DLL) + + +Copyright notice +================ + (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + diff --git a/src/TZlib/USAGE.txt b/src/TZlib/USAGE.txt new file mode 100644 index 0000000..2ba73b9 --- /dev/null +++ b/src/TZlib/USAGE.txt @@ -0,0 +1,94 @@ + +Installing ZLIB1.DLL +==================== + Copy ZLIB1.DLL to the SYSTEM or the SYSTEM32 directory. + + +Using ZLIB1.DLL with Microsoft Visual C++ +========================================= + 1. Install the supplied header files "zlib.h" and "zconf.h" + into a directory found in the INCLUDE path list. + + 2. Install the supplied library files "zdll.exp" and "zdll.lib" + into a directory found in the LIB path list. + + 3. Add "zdll.exp" or "zdll.lib" to your project. + + Notes: + - Usually, you don't need both the .exp file and the .lib file. + - If you wish, you may rename "zdll.exp" to "zlib1.exp", and/or + rename "zdll.lib" to "zlib1.lib". + + +Using ZLIB1.DLL with Borland C++ +================================ + 1. Install the supplied header files "zlib.h" and "zconf.h" + into a directory found in the INCLUDE path list. + + 2. Build the import library using the IMPLIB tool: + implib -a -c -f lib\zdllbor.lib zlib1.dll + + OR + + 2' Convert the supplied library file "zdll.lib" to OMF format, + using the COFF2OMF tool: + coff2omf lib\zdll.lib lib\zdllbor.lib + + 3. Install "zdllbor.lib" into a directory found in the LIB path + list. + + 4. Add "zdllbor.lib" to your project. + + Notes: + - The modules that are linked with "zdllbor.lib" must be compiled + using a 4-byte alignment (option -a): + bcc32 -a -c myprog.c + bcc32 myprog.obj zdllbor.lib + - If you wish, you may use "zlib1.lib" instead of "zdllbor.lib". + + +Using ZLIB1.DLL with gcc/MinGW +============================== + 1. Install the supplied header files "zlib.h" and "zconf.h" + into the INCLUDE directory. + + 2. Build the import library from the supplied "zlib.def": + dlltool -D zlib1.dll -d lib/zlib.def -l lib/libzdll.a + + OR + + 2' Copy the supplied library file "zdll.lib" to "libzdll.a": + cp lib/zdll.lib lib/libzdll.a + + 3. Install "libzdll.a" into the LIB directory. + + 4. Add "libzdll.a" to your project, or use the -lzdll option. + + +Using ZLIB1.DLL with gcc/Cygwin +=============================== + ZLIB1.DLL is not designed to work with Cygwin. The Cygwin + system has its own DLL build of zlib, named CYGZ.DLL. + + +Rebuilding ZLIB1.DLL +==================== + Depending on your build environment, use the appropriate + makefile from the win32/ directory, found in the zlib source + distribution. + + Your custom build has to comply with the requirements stated + in DLL_FAQ.txt, including (but not limited to) the following: + - It must be built from an unaltered zlib source distribution. + - It must be linked to MSVCRT.DLL. + - The macros that compile out certain portions of the zlib + code (such as NO_GZCOMPRESS, NO_GZIP) must not be enabled. + - The ZLIB_WINAPI macro must not be enabled. + + Furthermore, it has to run successfully with the test suite + found in this package. + + It is recommended, however, to use the supplied ZLIB1.DLL, + instead of rebuilding it yourself. You should rebuild it + only if you have a special reason. + diff --git a/src/TZlib/Zip/adler32.c b/src/TZlib/Zip/adler32.c new file mode 100644 index 0000000..98323a8 --- /dev/null +++ b/src/TZlib/Zip/adler32.c @@ -0,0 +1,48 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +#define BASE 65521L /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int k; + + if (buf == Z_NULL) return 1L; + + while (len > 0) { + k = len < NMAX ? len : NMAX; + len -= k; + while (k >= 16) { + DO16(buf); + buf += 16; + k -= 16; + } + if (k != 0) do { + s1 += *buf++; + s2 += s1; + } while (--k); + s1 %= BASE; + s2 %= BASE; + } + return (s2 << 16) | s1; +} diff --git a/src/TZlib/Zip/compress.c b/src/TZlib/Zip/compress.c new file mode 100644 index 0000000..d52e522 --- /dev/null +++ b/src/TZlib/Zip/compress.c @@ -0,0 +1,68 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; +#ifdef MAXSEG_64K + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} diff --git a/src/TZlib/Zip/crc32.c b/src/TZlib/Zip/crc32.c new file mode 100644 index 0000000..d2e0492 --- /dev/null +++ b/src/TZlib/Zip/crc32.c @@ -0,0 +1,162 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +#define local static + +#ifdef DYNAMIC_CRC_TABLE + +local int crc_table_empty = 1; +local uLongf crc_table[256]; +local void make_crc_table OF((void)); + +/* + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. +*/ +local void make_crc_table() +{ + uLong c; + int n, k; + uLong poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* make exclusive-or pattern from polynomial (0xedb88320L) */ + poly = 0L; + for (n = 0; n < sizeof(p)/sizeof(Byte); n++) + poly |= 1L << (31 - p[n]); + + for (n = 0; n < 256; n++) + { + c = (uLong)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[n] = c; + } + crc_table_empty = 0; +} +#else +/* ======================================================================== + * Table of CRC-32's of all single-byte values (made by make_crc_table) + */ +local const uLongf crc_table[256] = { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL +}; +#endif + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const uLongf * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) make_crc_table(); +#endif + return (const uLongf *)crc_table; +} + +/* ========================================================================= */ +#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); +#define DO2(buf) DO1(buf); DO1(buf); +#define DO4(buf) DO2(buf); DO2(buf); +#define DO8(buf) DO4(buf); DO4(buf); + +/* ========================================================================= */ +uLong ZEXPORT crc32(crc, buf, len) + uLong crc; + const Bytef *buf; + uInt len; +{ + if (buf == Z_NULL) return 0L; +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + crc = crc ^ 0xffffffffL; + while (len >= 8) + { + DO8(buf); + len -= 8; + } + if (len) do { + DO1(buf); + } while (--len); + return crc ^ 0xffffffffL; +} diff --git a/src/TZlib/Zip/deflate.c b/src/TZlib/Zip/deflate.c new file mode 100644 index 0000000..51a50a0 --- /dev/null +++ b/src/TZlib/Zip/deflate.c @@ -0,0 +1,1350 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in ftp://ds.internic.net/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +local block_state deflate_slow OF((deflate_state *s, int flush)); +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */ + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int noheader = 0; + static const char* my_version = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == Z_NULL) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == Z_NULL) strm->zfree = zcfree; + + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#ifdef FASTEST + level = 1; +#endif + + if (windowBits < 0) { /* undocumented feature: suppress zlib header */ + noheader = 1; + windowBits = -windowBits; + } + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->noheader = noheader; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->status != INIT_STATE) return Z_STREAM_ERROR; + + s = strm->state; + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); +#ifndef USE_DICT_HEAD + dictionary += dictLength - length; /* use the tail of the dictionary */ +#endif + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR; + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->noheader < 0) { + s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ + } + s->status = s->noheader ? BUSY_STATE : INIT_STATE; + strm->adler = 1; + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + + if (level == Z_DEFAULT_COMPRESSION) { + level = 6; + } + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the zlib header */ + if (s->status == INIT_STATE) { + + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags = (s->level-1) >> 1; + + if (level_flags > 3) level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = 1L; + } + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUFF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->noheader) return Z_STREAM_END; + + /* Write the zlib trailer (adler32) */ + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + s->noheader = -1; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + *dest = *source; + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + *ds = *ss; + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (!strm->state->noheader) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +} + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +#ifndef FASTEST +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2: + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} + +#else /* FASTEST */ +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 only + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return len <= s->lookahead ? len : s->lookahead; +} +#endif /* FASTEST */ +#endif /* ASMV */ + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if strstart == 0 + * and lookahead == 1 (input done one byte at time) + */ + more--; + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + } else if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY) { + s->match_length = longest_match (s, hash_head); + } + /* longest_match() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in hash table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY) { + s->match_length = longest_match (s, hash_head); + } + /* longest_match() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED || + (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} diff --git a/src/TZlib/Zip/deflate.h b/src/TZlib/Zip/deflate.h new file mode 100644 index 0000000..c5958df --- /dev/null +++ b/src/TZlib/Zip/deflate.h @@ -0,0 +1,318 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2002 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef _DEFLATE_H +#define _DEFLATE_H + +#include "zutil.h" + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define INIT_STATE 42 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + int pending; /* nb of bytes in the pending buffer */ + int noheader; /* suppress zlib header and adler32 */ + Byte data_type; /* UNKNOWN, BINARY or ASCII */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to supress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + int last_eob_len; /* bit length of EOB code for last block */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + + /* in trees.c */ +void _tr_init OF((deflate_state *s)); +int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); +void _tr_align OF((deflate_state *s)); +void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif diff --git a/src/TZlib/Zip/gzio.c b/src/TZlib/Zip/gzio.c new file mode 100644 index 0000000..da73c0f --- /dev/null +++ b/src/TZlib/Zip/gzio.c @@ -0,0 +1,875 @@ +/* gzio.c -- IO on .gz files + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Compile this file with -DNO_DEFLATE to avoid the compression code. + */ + +/* @(#) $Id$ */ + +#include + +#include "zutil.h" + +struct internal_state {int dummy;}; /* for buggy compilers */ + +#ifndef Z_BUFSIZE +# ifdef MAXSEG_64K +# define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ +# else +# define Z_BUFSIZE 16384 +# endif +#endif +#ifndef Z_PRINTF_BUFSIZE +# define Z_PRINTF_BUFSIZE 4096 +#endif + +#define ALLOC(size) malloc(size) +#define TRYFREE(p) {if (p) free(p);} + +static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ + +/* gzip flag byte */ +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define RESERVED 0xE0 /* bits 5..7: reserved */ + +typedef struct gz_stream { + z_stream stream; + int z_err; /* error code for last stream operation */ + int z_eof; /* set if end of input file */ + FILE *file; /* .gz file */ + Byte *inbuf; /* input buffer */ + Byte *outbuf; /* output buffer */ + uLong crc; /* crc32 of uncompressed data */ + char *msg; /* error message */ + char *path; /* path name for debugging only */ + int transparent; /* 1 if input file is not a .gz file */ + char mode; /* 'w' or 'r' */ + long startpos; /* start of compressed data in file (header skipped) */ +} gz_stream; + + +local gzFile gz_open OF((const char *path, const char *mode, int fd)); +local int do_flush OF((gzFile file, int flush)); +local int get_byte OF((gz_stream *s)); +local void check_header OF((gz_stream *s)); +local int destroy OF((gz_stream *s)); +local void putLong OF((FILE *file, uLong x)); +local uLong getLong OF((gz_stream *s)); + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb"). The file is given either by file descriptor + or path name (if fd == -1). + gz_open return NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). +*/ +local gzFile gz_open (path, mode, fd) + const char *path; + const char *mode; + int fd; +{ + int err; + int level = Z_DEFAULT_COMPRESSION; /* compression level */ + int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ + char *p = (char*)mode; + gz_stream *s; + char fmode[80]; /* copy of mode, without the compression level */ + char *m = fmode; + + if (!path || !mode) return Z_NULL; + + s = (gz_stream *)ALLOC(sizeof(gz_stream)); + if (!s) return Z_NULL; + + s->stream.zalloc = (alloc_func)0; + s->stream.zfree = (free_func)0; + s->stream.opaque = (voidpf)0; + s->stream.next_in = s->inbuf = Z_NULL; + s->stream.next_out = s->outbuf = Z_NULL; + s->stream.avail_in = s->stream.avail_out = 0; + s->file = NULL; + s->z_err = Z_OK; + s->z_eof = 0; + s->crc = crc32(0L, Z_NULL, 0); + s->msg = NULL; + s->transparent = 0; + + s->path = (char*)ALLOC(strlen(path)+1); + if (s->path == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + strcpy(s->path, path); /* do this early for debugging */ + + s->mode = '\0'; + do { + if (*p == 'r') s->mode = 'r'; + if (*p == 'w' || *p == 'a') s->mode = 'w'; + if (*p >= '0' && *p <= '9') { + level = *p - '0'; + } else if (*p == 'f') { + strategy = Z_FILTERED; + } else if (*p == 'h') { + strategy = Z_HUFFMAN_ONLY; + } else { + *m++ = *p; /* copy the mode */ + } + } while (*p++ && m != fmode + sizeof(fmode)); + if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; + + if (s->mode == 'w') { +#ifdef NO_DEFLATE + err = Z_STREAM_ERROR; +#else + err = deflateInit2(&(s->stream), level, + Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); + /* windowBits is passed < 0 to suppress zlib header */ + + s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); +#endif + if (err != Z_OK || s->outbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } else { + s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); + + err = inflateInit2(&(s->stream), -MAX_WBITS); + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are + * present after the compressed stream. + */ + if (err != Z_OK || s->inbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } + s->stream.avail_out = Z_BUFSIZE; + + errno = 0; + s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); + + if (s->file == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + if (s->mode == 'w') { + /* Write a very simple .gz header: + */ + fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], + Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); + s->startpos = 10L; + /* We use 10L instead of ftell(s->file) to because ftell causes an + * fflush on some systems. This version of the library doesn't use + * startpos anyway in write mode, so this initialization is not + * necessary. + */ + } else { + check_header(s); /* skip the .gz header */ + s->startpos = (ftell(s->file) - s->stream.avail_in); + } + + return (gzFile)s; +} + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. +*/ +gzFile ZEXPORT gzopen (path, mode) + const char *path; + const char *mode; +{ + return gz_open (path, mode, -1); +} + +/* =========================================================================== + Associate a gzFile with the file descriptor fd. fd is not dup'ed here + to mimic the behavio(u)r of fdopen. +*/ +gzFile ZEXPORT gzdopen (fd, mode) + int fd; + const char *mode; +{ + char name[20]; + + if (fd < 0) return (gzFile)Z_NULL; + sprintf(name, "", fd); /* for debugging */ + + return gz_open (name, mode, fd); +} + +/* =========================================================================== + * Update the compression level and strategy + */ +int ZEXPORT gzsetparams (file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + /* Make room to allow flushing */ + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + } + s->stream.avail_out = Z_BUFSIZE; + } + + return deflateParams (&(s->stream), level, strategy); +} + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ +local int get_byte(s) + gz_stream *s; +{ + if (s->z_eof) return EOF; + if (s->stream.avail_in == 0) { + errno = 0; + s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) s->z_err = Z_ERRNO; + return EOF; + } + s->stream.next_in = s->inbuf; + } + s->stream.avail_in--; + return *(s->stream.next_in)++; +} + +/* =========================================================================== + Check the gzip header of a gz_stream opened for reading. Set the stream + mode to transparent if the gzip magic header is not present; set s->err + to Z_DATA_ERROR if the magic header is present but the rest of the header + is incorrect. + IN assertion: the stream s has already been created sucessfully; + s->stream.avail_in is zero for the first time, but may be non-zero + for concatenated .gz files. +*/ +local void check_header(s) + gz_stream *s; +{ + int method; /* method byte */ + int flags; /* flags byte */ + uInt len; + int c; + + /* Check the gzip magic header */ + for (len = 0; len < 2; len++) { + c = get_byte(s); + if (c != gz_magic[len]) { + if (len != 0) s->stream.avail_in++, s->stream.next_in--; + if (c != EOF) { + s->stream.avail_in++, s->stream.next_in--; + s->transparent = 1; + } + s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END; + return; + } + } + method = get_byte(s); + flags = get_byte(s); + if (method != Z_DEFLATED || (flags & RESERVED) != 0) { + s->z_err = Z_DATA_ERROR; + return; + } + + /* Discard time, xflags and OS code: */ + for (len = 0; len < 6; len++) (void)get_byte(s); + + if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ + len = (uInt)get_byte(s); + len += ((uInt)get_byte(s))<<8; + /* len is garbage if EOF but the loop below will quit anyway */ + while (len-- != 0 && get_byte(s) != EOF) ; + } + if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ + for (len = 0; len < 2; len++) (void)get_byte(s); + } + s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; +} + + /* =========================================================================== + * Cleanup then free the given gz_stream. Return a zlib error code. + Try freeing in the reverse order of allocations. + */ +local int destroy (s) + gz_stream *s; +{ + int err = Z_OK; + + if (!s) return Z_STREAM_ERROR; + + TRYFREE(s->msg); + + if (s->stream.state != NULL) { + if (s->mode == 'w') { +#ifdef NO_DEFLATE + err = Z_STREAM_ERROR; +#else + err = deflateEnd(&(s->stream)); +#endif + } else if (s->mode == 'r') { + err = inflateEnd(&(s->stream)); + } + } + if (s->file != NULL && fclose(s->file)) { +#ifdef ESPIPE + if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ +#endif + err = Z_ERRNO; + } + if (s->z_err < 0) err = s->z_err; + + TRYFREE(s->inbuf); + TRYFREE(s->outbuf); + TRYFREE(s->path); + TRYFREE(s); + return err; +} + +/* =========================================================================== + Reads the given number of uncompressed bytes from the compressed file. + gzread returns the number of bytes actually read (0 for end of file). +*/ +int ZEXPORT gzread (file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + Bytef *start = (Bytef*)buf; /* starting point for crc computation */ + Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ + + if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; + + if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; + if (s->z_err == Z_STREAM_END) return 0; /* EOF */ + + next_out = (Byte*)buf; + s->stream.next_out = (Bytef*)buf; + s->stream.avail_out = len; + + while (s->stream.avail_out != 0) { + + if (s->transparent) { + /* Copy first the lookahead bytes: */ + uInt n = s->stream.avail_in; + if (n > s->stream.avail_out) n = s->stream.avail_out; + if (n > 0) { + zmemcpy(s->stream.next_out, s->stream.next_in, n); + next_out += n; + s->stream.next_out = next_out; + s->stream.next_in += n; + s->stream.avail_out -= n; + s->stream.avail_in -= n; + } + if (s->stream.avail_out > 0) { + s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out, + s->file); + } + len -= s->stream.avail_out; + s->stream.total_in += (uLong)len; + s->stream.total_out += (uLong)len; + if (len == 0) s->z_eof = 1; + return (int)len; + } + if (s->stream.avail_in == 0 && !s->z_eof) { + + errno = 0; + s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) { + s->z_err = Z_ERRNO; + break; + } + } + s->stream.next_in = s->inbuf; + } + s->z_err = inflate(&(s->stream), Z_NO_FLUSH); + + if (s->z_err == Z_STREAM_END) { + /* Check CRC and original size */ + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + start = s->stream.next_out; + + if (getLong(s) != s->crc) { + s->z_err = Z_DATA_ERROR; + } else { + (void)getLong(s); + /* The uncompressed length returned by above getlong() may + * be different from s->stream.total_out) in case of + * concatenated .gz files. Check for such files: + */ + check_header(s); + if (s->z_err == Z_OK) { + uLong total_in = s->stream.total_in; + uLong total_out = s->stream.total_out; + + inflateReset(&(s->stream)); + s->stream.total_in = total_in; + s->stream.total_out = total_out; + s->crc = crc32(0L, Z_NULL, 0); + } + } + } + if (s->z_err != Z_OK || s->z_eof) break; + } + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + + return (int)(len - s->stream.avail_out); +} + + +/* =========================================================================== + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ +int ZEXPORT gzgetc(file) + gzFile file; +{ + unsigned char c; + + return gzread(file, &c, 1) == 1 ? c : -1; +} + + +/* =========================================================================== + Reads bytes from the compressed file until len-1 characters are + read, or a newline character is read and transferred to buf, or an + end-of-file condition is encountered. The string is then terminated + with a null character. + gzgets returns buf, or Z_NULL in case of error. + + The current implementation is not optimized at all. +*/ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + char *b = buf; + if (buf == Z_NULL || len <= 0) return Z_NULL; + + while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; + *buf = '\0'; + return b == buf && len > 0 ? Z_NULL : b; +} + + +#ifndef NO_DEFLATE +/* =========================================================================== + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of bytes actually written (0 in case of error). +*/ +int ZEXPORT gzwrite (file, buf, len) + gzFile file; + const voidp buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.next_in = (Bytef*)buf; + s->stream.avail_in = len; + + while (s->stream.avail_in != 0) { + + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + break; + } + s->stream.avail_out = Z_BUFSIZE; + } + s->z_err = deflate(&(s->stream), Z_NO_FLUSH); + if (s->z_err != Z_OK) break; + } + s->crc = crc32(s->crc, (const Bytef *)buf, len); + + return (int)(len - s->stream.avail_in); +} + +/* =========================================================================== + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). +*/ +#ifdef STDC +#include + +int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) +{ + char buf[Z_PRINTF_BUFSIZE]; + va_list va; + int len; + + va_start(va, format); +#ifdef HAS_vsnprintf + (void)vsnprintf(buf, sizeof(buf), format, va); +#else + (void)vsprintf(buf, format, va); +#endif + va_end(va); + len = strlen(buf); /* some *sprintf don't return the nb of bytes written */ + if (len <= 0) return 0; + + return gzwrite(file, buf, (unsigned)len); +} +#else /* not ANSI C */ + +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + char buf[Z_PRINTF_BUFSIZE]; + int len; + +#ifdef HAS_snprintf + snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +#else + sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +#endif + len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */ + if (len <= 0) return 0; + + return gzwrite(file, buf, len); +} +#endif + +/* =========================================================================== + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned char cc = (unsigned char) c; /* required for big endian systems */ + + return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; +} + + +/* =========================================================================== + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ +int ZEXPORT gzputs(file, s) + gzFile file; + const char *s; +{ + return gzwrite(file, (char*)s, (unsigned)strlen(s)); +} + + +/* =========================================================================== + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. +*/ +local int do_flush (file, flush) + gzFile file; + int flush; +{ + uInt len; + int done = 0; + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.avail_in = 0; /* should be zero already anyway */ + + for (;;) { + len = Z_BUFSIZE - s->stream.avail_out; + + if (len != 0) { + if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { + s->z_err = Z_ERRNO; + return Z_ERRNO; + } + s->stream.next_out = s->outbuf; + s->stream.avail_out = Z_BUFSIZE; + } + if (done) break; + s->z_err = deflate(&(s->stream), flush); + + /* Ignore the second of two consecutive flushes: */ + if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; + + /* deflate has finished flushing only when it hasn't used up + * all the available space in the output buffer: + */ + done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); + + if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; + } + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} + +int ZEXPORT gzflush (file, flush) + gzFile file; + int flush; +{ + gz_stream *s = (gz_stream*)file; + int err = do_flush (file, flush); + + if (err) return err; + fflush(s->file); + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} +#endif /* NO_DEFLATE */ + +/* =========================================================================== + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error. + SEEK_END is not implemented, returns error. + In this version of the library, gzseek can be extremely slow. +*/ +z_off_t ZEXPORT gzseek (file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || whence == SEEK_END || + s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { + return -1L; + } + + if (s->mode == 'w') { +#ifdef NO_DEFLATE + return -1L; +#else + if (whence == SEEK_SET) { + offset -= s->stream.total_in; + } + if (offset < 0) return -1L; + + /* At this point, offset is the number of zero bytes to write. */ + if (s->inbuf == Z_NULL) { + s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ + zmemzero(s->inbuf, Z_BUFSIZE); + } + while (offset > 0) { + uInt size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (uInt)offset; + + size = gzwrite(file, s->inbuf, size); + if (size == 0) return -1L; + + offset -= size; + } + return (z_off_t)s->stream.total_in; +#endif + } + /* Rest of function is for reading only */ + + /* compute absolute position */ + if (whence == SEEK_CUR) { + offset += s->stream.total_out; + } + if (offset < 0) return -1L; + + if (s->transparent) { + /* map to fseek */ + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; + + s->stream.total_in = s->stream.total_out = (uLong)offset; + return offset; + } + + /* For a negative seek, rewind and use positive seek */ + if ((uLong)offset >= s->stream.total_out) { + offset -= s->stream.total_out; + } else if (gzrewind(file) < 0) { + return -1L; + } + /* offset is now the number of bytes to skip. */ + + if (offset != 0 && s->outbuf == Z_NULL) { + s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); + } + while (offset > 0) { + int size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (int)offset; + + size = gzread(file, s->outbuf, (uInt)size); + if (size <= 0) return -1L; + offset -= size; + } + return (z_off_t)s->stream.total_out; +} + +/* =========================================================================== + Rewinds input file. +*/ +int ZEXPORT gzrewind (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r') return -1; + + s->z_err = Z_OK; + s->z_eof = 0; + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + s->crc = crc32(0L, Z_NULL, 0); + + if (s->startpos == 0) { /* not a compressed file */ + rewind(s->file); + return 0; + } + + (void) inflateReset(&s->stream); + return fseek(s->file, s->startpos, SEEK_SET); +} + +/* =========================================================================== + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. +*/ +z_off_t ZEXPORT gztell (file) + gzFile file; +{ + return gzseek(file, 0L, SEEK_CUR); +} + +/* =========================================================================== + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ +int ZEXPORT gzeof (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + return (s == NULL || s->mode != 'r') ? 0 : s->z_eof; +} + +/* =========================================================================== + Outputs a long in LSB order to the given file +*/ +local void putLong (file, x) + FILE *file; + uLong x; +{ + int n; + for (n = 0; n < 4; n++) { + fputc((int)(x & 0xff), file); + x >>= 8; + } +} + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets z_err in case + of error. +*/ +local uLong getLong (s) + gz_stream *s; +{ + uLong x = (uLong)get_byte(s); + int c; + + x += ((uLong)get_byte(s))<<8; + x += ((uLong)get_byte(s))<<16; + c = get_byte(s); + if (c == EOF) s->z_err = Z_DATA_ERROR; + x += ((uLong)c)<<24; + return x; +} + +/* =========================================================================== + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. +*/ +int ZEXPORT gzclose (file) + gzFile file; +{ + int err; + gz_stream *s = (gz_stream*)file; + + if (s == NULL) return Z_STREAM_ERROR; + + if (s->mode == 'w') { +#ifdef NO_DEFLATE + return Z_STREAM_ERROR; +#else + err = do_flush (file, Z_FINISH); + if (err != Z_OK) return destroy((gz_stream*)file); + + putLong (s->file, s->crc); + putLong (s->file, s->stream.total_in); +#endif + } + return destroy((gz_stream*)file); +} + +/* =========================================================================== + Returns the error message for the last error which occured on the + given compressed file. errnum is set to zlib error number. If an + error occured in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ +const char* ZEXPORT gzerror (file, errnum) + gzFile file; + int *errnum; +{ + char *m; + gz_stream *s = (gz_stream*)file; + + if (s == NULL) { + *errnum = Z_STREAM_ERROR; + return (const char*)ERR_MSG(Z_STREAM_ERROR); + } + *errnum = s->z_err; + if (*errnum == Z_OK) return (const char*)""; + + m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); + + if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); + + TRYFREE(s->msg); + s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); + strcpy(s->msg, s->path); + strcat(s->msg, ": "); + strcat(s->msg, m); + return (const char*)s->msg; +} diff --git a/src/TZlib/Zip/infblock.c b/src/TZlib/Zip/infblock.c new file mode 100644 index 0000000..943e849 --- /dev/null +++ b/src/TZlib/Zip/infblock.c @@ -0,0 +1,403 @@ +/* infblock.c -- interpret and process block types to last block + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "infblock.h" +#include "inftrees.h" +#include "infcodes.h" +#include "infutil.h" + +struct inflate_codes_state {int dummy;}; /* for buggy compilers */ + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + +/* Table for deflate from PKZIP's appnote.txt. */ +local const uInt border[] = { /* Order of the bit length code lengths */ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +/* + Notes beyond the 1.93a appnote.txt: + + 1. Distance pointers never point before the beginning of the output + stream. + 2. Distance pointers can point back across blocks, up to 32k away. + 3. There is an implied maximum of 7 bits for the bit length table and + 15 bits for the actual data. + 4. If only one code exists, then it is encoded using one bit. (Zero + would be more efficient, but perhaps a little confusing.) If two + codes exist, they are coded using one bit each (0 and 1). + 5. There is no way of sending zero distance codes--a dummy must be + sent if there are none. (History: a pre 2.0 version of PKZIP would + store blocks with no distance codes, but this was discovered to be + too harsh a criterion.) Valid only for 1.93a. 2.04c does allow + zero distance codes, which is sent as one code of zero bits in + length. + 6. There are up to 286 literal/length codes. Code 256 represents the + end-of-block. Note however that the static length tree defines + 288 codes just to fill out the Huffman codes. Codes 286 and 287 + cannot be used though, since there is no length base or extra bits + defined for them. Similarily, there are up to 30 distance codes. + However, static trees define 32 codes (all 5 bits) to fill out the + Huffman codes, but the last two had better not show up in the data. + 7. Unzip can check dynamic Huffman blocks for complete code sets. + The exception is that a single code would not be complete (see #4). + 8. The five bits following the block type is really the number of + literal codes sent minus 257. + 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits + (1+6+6). Therefore, to output three times the length, you output + three codes (1+1+1), whereas to output four times the same length, + you only need two codes (1+3). Hmm. + 10. In the tree reconstruction algorithm, Code = Code + Increment + only if BitLength(i) is not zero. (Pretty obvious.) + 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) + 12. Note: length code 284 can represent 227-258, but length code 285 + really is 258. The last length deserves its own, short code + since it gets used a lot in very redundant files. The length + 258 is special since 258 - 3 (the min match length) is 255. + 13. The literal/length and distance code bit lengths are read as a + single stream of lengths. It is possible (and advantageous) for + a repeat code (16, 17, or 18) to go across the boundary between + the two sets of lengths. + */ + + +void inflate_blocks_reset(s, z, c) +inflate_blocks_statef *s; +z_streamp z; +uLongf *c; +{ + if (c != Z_NULL) + *c = s->check; + if (s->mode == BTREE || s->mode == DTREE) + ZFREE(z, s->sub.trees.blens); + if (s->mode == CODES) + inflate_codes_free(s->sub.decode.codes, z); + s->mode = TYPE; + s->bitk = 0; + s->bitb = 0; + s->read = s->write = s->window; + if (s->checkfn != Z_NULL) + z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0); + Tracev((stderr, "inflate: blocks reset\n")); +} + + +inflate_blocks_statef *inflate_blocks_new(z, c, w) +z_streamp z; +check_func c; +uInt w; +{ + inflate_blocks_statef *s; + + if ((s = (inflate_blocks_statef *)ZALLOC + (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL) + return s; + if ((s->hufts = + (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL) + { + ZFREE(z, s); + return Z_NULL; + } + if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL) + { + ZFREE(z, s->hufts); + ZFREE(z, s); + return Z_NULL; + } + s->end = s->window + w; + s->checkfn = c; + s->mode = TYPE; + Tracev((stderr, "inflate: blocks allocated\n")); + inflate_blocks_reset(s, z, Z_NULL); + return s; +} + + +int inflate_blocks(s, z, r) +inflate_blocks_statef *s; +z_streamp z; +int r; +{ + uInt t; /* temporary storage */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Bytef *p; /* input data pointer */ + uInt n; /* bytes available there */ + Bytef *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + + /* copy input/output information to locals (UPDATE macro restores) */ + LOAD + + /* process input based on current state */ + while (1) switch (s->mode) + { + case TYPE: + NEEDBITS(3) + t = (uInt)b & 7; + s->last = t & 1; + switch (t >> 1) + { + case 0: /* stored */ + Tracev((stderr, "inflate: stored block%s\n", + s->last ? " (last)" : "")); + DUMPBITS(3) + t = k & 7; /* go to byte boundary */ + DUMPBITS(t) + s->mode = LENS; /* get length of stored block */ + break; + case 1: /* fixed */ + Tracev((stderr, "inflate: fixed codes block%s\n", + s->last ? " (last)" : "")); + { + uInt bl, bd; + inflate_huft *tl, *td; + + inflate_trees_fixed(&bl, &bd, &tl, &td, z); + s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z); + if (s->sub.decode.codes == Z_NULL) + { + r = Z_MEM_ERROR; + LEAVE + } + } + DUMPBITS(3) + s->mode = CODES; + break; + case 2: /* dynamic */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + s->last ? " (last)" : "")); + DUMPBITS(3) + s->mode = TABLE; + break; + case 3: /* illegal */ + DUMPBITS(3) + s->mode = BAD; + z->msg = (char*)"invalid block type"; + r = Z_DATA_ERROR; + LEAVE + } + break; + case LENS: + NEEDBITS(32) + if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) + { + s->mode = BAD; + z->msg = (char*)"invalid stored block lengths"; + r = Z_DATA_ERROR; + LEAVE + } + s->sub.left = (uInt)b & 0xffff; + b = k = 0; /* dump bits */ + Tracev((stderr, "inflate: stored length %u\n", s->sub.left)); + s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE); + break; + case STORED: + if (n == 0) + LEAVE + NEEDOUT + t = s->sub.left; + if (t > n) t = n; + if (t > m) t = m; + zmemcpy(q, p, t); + p += t; n -= t; + q += t; m -= t; + if ((s->sub.left -= t) != 0) + break; + Tracev((stderr, "inflate: stored end, %lu total out\n", + z->total_out + (q >= s->read ? q - s->read : + (s->end - s->read) + (q - s->window)))); + s->mode = s->last ? DRY : TYPE; + break; + case TABLE: + NEEDBITS(14) + s->sub.trees.table = t = (uInt)b & 0x3fff; +#ifndef PKZIP_BUG_WORKAROUND + if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) + { + s->mode = BAD; + z->msg = (char*)"too many length or distance symbols"; + r = Z_DATA_ERROR; + LEAVE + } +#endif + t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); + if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL) + { + r = Z_MEM_ERROR; + LEAVE + } + DUMPBITS(14) + s->sub.trees.index = 0; + Tracev((stderr, "inflate: table sizes ok\n")); + s->mode = BTREE; + case BTREE: + while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10)) + { + NEEDBITS(3) + s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7; + DUMPBITS(3) + } + while (s->sub.trees.index < 19) + s->sub.trees.blens[border[s->sub.trees.index++]] = 0; + s->sub.trees.bb = 7; + t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb, + &s->sub.trees.tb, s->hufts, z); + if (t != Z_OK) + { + r = t; + if (r == Z_DATA_ERROR) + { + ZFREE(z, s->sub.trees.blens); + s->mode = BAD; + } + LEAVE + } + s->sub.trees.index = 0; + Tracev((stderr, "inflate: bits tree ok\n")); + s->mode = DTREE; + case DTREE: + while (t = s->sub.trees.table, + s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) + { + inflate_huft *h; + uInt i, j, c; + + t = s->sub.trees.bb; + NEEDBITS(t) + h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]); + t = h->bits; + c = h->base; + if (c < 16) + { + DUMPBITS(t) + s->sub.trees.blens[s->sub.trees.index++] = c; + } + else /* c == 16..18 */ + { + i = c == 18 ? 7 : c - 14; + j = c == 18 ? 11 : 3; + NEEDBITS(t + i) + DUMPBITS(t) + j += (uInt)b & inflate_mask[i]; + DUMPBITS(i) + i = s->sub.trees.index; + t = s->sub.trees.table; + if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || + (c == 16 && i < 1)) + { + ZFREE(z, s->sub.trees.blens); + s->mode = BAD; + z->msg = (char*)"invalid bit length repeat"; + r = Z_DATA_ERROR; + LEAVE + } + c = c == 16 ? s->sub.trees.blens[i - 1] : 0; + do { + s->sub.trees.blens[i++] = c; + } while (--j); + s->sub.trees.index = i; + } + } + s->sub.trees.tb = Z_NULL; + { + uInt bl, bd; + inflate_huft *tl, *td; + inflate_codes_statef *c; + + bl = 9; /* must be <= 9 for lookahead assumptions */ + bd = 6; /* must be <= 9 for lookahead assumptions */ + t = s->sub.trees.table; + t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), + s->sub.trees.blens, &bl, &bd, &tl, &td, + s->hufts, z); + if (t != Z_OK) + { + if (t == (uInt)Z_DATA_ERROR) + { + ZFREE(z, s->sub.trees.blens); + s->mode = BAD; + } + r = t; + LEAVE + } + Tracev((stderr, "inflate: trees ok\n")); + if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL) + { + r = Z_MEM_ERROR; + LEAVE + } + s->sub.decode.codes = c; + } + ZFREE(z, s->sub.trees.blens); + s->mode = CODES; + case CODES: + UPDATE + if ((r = inflate_codes(s, z, r)) != Z_STREAM_END) + return inflate_flush(s, z, r); + r = Z_OK; + inflate_codes_free(s->sub.decode.codes, z); + LOAD + Tracev((stderr, "inflate: codes end, %lu total out\n", + z->total_out + (q >= s->read ? q - s->read : + (s->end - s->read) + (q - s->window)))); + if (!s->last) + { + s->mode = TYPE; + break; + } + s->mode = DRY; + case DRY: + FLUSH + if (s->read != s->write) + LEAVE + s->mode = DONE; + case DONE: + r = Z_STREAM_END; + LEAVE + case BAD: + r = Z_DATA_ERROR; + LEAVE + default: + r = Z_STREAM_ERROR; + LEAVE + } +} + + +int inflate_blocks_free(s, z) +inflate_blocks_statef *s; +z_streamp z; +{ + inflate_blocks_reset(s, z, Z_NULL); + ZFREE(z, s->window); + ZFREE(z, s->hufts); + ZFREE(z, s); + Tracev((stderr, "inflate: blocks freed\n")); + return Z_OK; +} + + +void inflate_set_dictionary(s, d, n) +inflate_blocks_statef *s; +const Bytef *d; +uInt n; +{ + zmemcpy(s->window, d, n); + s->read = s->write = s->window + n; +} + + +/* Returns true if inflate is currently at the end of a block generated + * by Z_SYNC_FLUSH or Z_FULL_FLUSH. + * IN assertion: s != Z_NULL + */ +int inflate_blocks_sync_point(s) +inflate_blocks_statef *s; +{ + return s->mode == LENS; +} diff --git a/src/TZlib/Zip/infblock.h b/src/TZlib/Zip/infblock.h new file mode 100644 index 0000000..4cf0fa9 --- /dev/null +++ b/src/TZlib/Zip/infblock.h @@ -0,0 +1,39 @@ +/* infblock.h -- header to use infblock.c + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +struct inflate_blocks_state; +typedef struct inflate_blocks_state FAR inflate_blocks_statef; + +extern inflate_blocks_statef * inflate_blocks_new OF(( + z_streamp z, + check_func c, /* check function */ + uInt w)); /* window size */ + +extern int inflate_blocks OF(( + inflate_blocks_statef *, + z_streamp , + int)); /* initial return code */ + +extern void inflate_blocks_reset OF(( + inflate_blocks_statef *, + z_streamp , + uLongf *)); /* check value on output */ + +extern int inflate_blocks_free OF(( + inflate_blocks_statef *, + z_streamp)); + +extern void inflate_set_dictionary OF(( + inflate_blocks_statef *s, + const Bytef *d, /* dictionary */ + uInt n)); /* dictionary length */ + +extern int inflate_blocks_sync_point OF(( + inflate_blocks_statef *s)); diff --git a/src/TZlib/Zip/infcodes.c b/src/TZlib/Zip/infcodes.c new file mode 100644 index 0000000..aa7b3a0 --- /dev/null +++ b/src/TZlib/Zip/infcodes.c @@ -0,0 +1,251 @@ +/* infcodes.c -- process literals and length/distance pairs + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "infblock.h" +#include "infcodes.h" +#include "infutil.h" +#include "inffast.h" + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + +typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + START, /* x: set up for LEN */ + LEN, /* i: get length/literal/eob next */ + LENEXT, /* i: getting length extra (have base) */ + DIST, /* i: get distance next */ + DISTEXT, /* i: getting distance extra */ + COPY, /* o: copying bytes in window, waiting for space */ + LIT, /* o: got literal, waiting for output space */ + WASH, /* o: got eob, possibly still output waiting */ + END, /* x: got eob and all data flushed */ + BADCODE} /* x: got error */ +inflate_codes_mode; + +/* inflate codes private state */ +struct inflate_codes_state { + + /* mode */ + inflate_codes_mode mode; /* current inflate_codes mode */ + + /* mode dependent information */ + uInt len; + union { + struct { + inflate_huft *tree; /* pointer into tree */ + uInt need; /* bits needed */ + } code; /* if LEN or DIST, where in tree */ + uInt lit; /* if LIT, literal */ + struct { + uInt get; /* bits to get for extra */ + uInt dist; /* distance back to copy from */ + } copy; /* if EXT or COPY, where and how much */ + } sub; /* submode */ + + /* mode independent information */ + Byte lbits; /* ltree bits decoded per branch */ + Byte dbits; /* dtree bits decoder per branch */ + inflate_huft *ltree; /* literal/length/eob tree */ + inflate_huft *dtree; /* distance tree */ + +}; + + +inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z) +uInt bl, bd; +inflate_huft *tl; +inflate_huft *td; /* need separate declaration for Borland C++ */ +z_streamp z; +{ + inflate_codes_statef *c; + + if ((c = (inflate_codes_statef *) + ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL) + { + c->mode = START; + c->lbits = (Byte)bl; + c->dbits = (Byte)bd; + c->ltree = tl; + c->dtree = td; + Tracev((stderr, "inflate: codes new\n")); + } + return c; +} + + +int inflate_codes(s, z, r) +inflate_blocks_statef *s; +z_streamp z; +int r; +{ + uInt j; /* temporary storage */ + inflate_huft *t; /* temporary pointer */ + uInt e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Bytef *p; /* input data pointer */ + uInt n; /* bytes available there */ + Bytef *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + Bytef *f; /* pointer to copy strings from */ + inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ + + /* copy input/output information to locals (UPDATE macro restores) */ + LOAD + + /* process input and output based on current state */ + while (1) switch (c->mode) + { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + case START: /* x: set up for LEN */ +#ifndef SLOW + if (m >= 258 && n >= 10) + { + UPDATE + r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); + LOAD + if (r != Z_OK) + { + c->mode = r == Z_STREAM_END ? WASH : BADCODE; + break; + } + } +#endif /* !SLOW */ + c->sub.code.need = c->lbits; + c->sub.code.tree = c->ltree; + c->mode = LEN; + case LEN: /* i: get length/literal/eob next */ + j = c->sub.code.need; + NEEDBITS(j) + t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); + DUMPBITS(t->bits) + e = (uInt)(t->exop); + if (e == 0) /* literal */ + { + c->sub.lit = t->base; + Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", t->base)); + c->mode = LIT; + break; + } + if (e & 16) /* length */ + { + c->sub.copy.get = e & 15; + c->len = t->base; + c->mode = LENEXT; + break; + } + if ((e & 64) == 0) /* next table */ + { + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + if (e & 32) /* end of block */ + { + Tracevv((stderr, "inflate: end of block\n")); + c->mode = WASH; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid literal/length code"; + r = Z_DATA_ERROR; + LEAVE + case LENEXT: /* i: getting length extra (have base) */ + j = c->sub.copy.get; + NEEDBITS(j) + c->len += (uInt)b & inflate_mask[j]; + DUMPBITS(j) + c->sub.code.need = c->dbits; + c->sub.code.tree = c->dtree; + Tracevv((stderr, "inflate: length %u\n", c->len)); + c->mode = DIST; + case DIST: /* i: get distance next */ + j = c->sub.code.need; + NEEDBITS(j) + t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); + DUMPBITS(t->bits) + e = (uInt)(t->exop); + if (e & 16) /* distance */ + { + c->sub.copy.get = e & 15; + c->sub.copy.dist = t->base; + c->mode = DISTEXT; + break; + } + if ((e & 64) == 0) /* next table */ + { + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid distance code"; + r = Z_DATA_ERROR; + LEAVE + case DISTEXT: /* i: getting distance extra */ + j = c->sub.copy.get; + NEEDBITS(j) + c->sub.copy.dist += (uInt)b & inflate_mask[j]; + DUMPBITS(j) + Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist)); + c->mode = COPY; + case COPY: /* o: copying bytes in window, waiting for space */ + f = q - c->sub.copy.dist; + while (f < s->window) /* modulo window size-"while" instead */ + f += s->end - s->window; /* of "if" handles invalid distances */ + while (c->len) + { + NEEDOUT + OUTBYTE(*f++) + if (f == s->end) + f = s->window; + c->len--; + } + c->mode = START; + break; + case LIT: /* o: got literal, waiting for output space */ + NEEDOUT + OUTBYTE(c->sub.lit) + c->mode = START; + break; + case WASH: /* o: got eob, possibly more output */ + if (k > 7) /* return unused byte, if any */ + { + Assert(k < 16, "inflate_codes grabbed too many bytes") + k -= 8; + n++; + p--; /* can always return one */ + } + FLUSH + if (s->read != s->write) + LEAVE + c->mode = END; + case END: + r = Z_STREAM_END; + LEAVE + case BADCODE: /* x: got error */ + r = Z_DATA_ERROR; + LEAVE + default: + r = Z_STREAM_ERROR; + LEAVE + } +#ifdef NEED_DUMMY_RETURN + return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ +#endif +} + + +void inflate_codes_free(c, z) +inflate_codes_statef *c; +z_streamp z; +{ + ZFREE(z, c); + Tracev((stderr, "inflate: codes free\n")); +} diff --git a/src/TZlib/Zip/infcodes.h b/src/TZlib/Zip/infcodes.h new file mode 100644 index 0000000..531d419 --- /dev/null +++ b/src/TZlib/Zip/infcodes.h @@ -0,0 +1,27 @@ +/* infcodes.h -- header to use infcodes.c + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +struct inflate_codes_state; +typedef struct inflate_codes_state FAR inflate_codes_statef; + +extern inflate_codes_statef *inflate_codes_new OF(( + uInt, uInt, + inflate_huft *, inflate_huft *, + z_streamp )); + +extern int inflate_codes OF(( + inflate_blocks_statef *, + z_streamp , + int)); + +extern void inflate_codes_free OF(( + inflate_codes_statef *, + z_streamp )); + diff --git a/src/TZlib/Zip/inffast.c b/src/TZlib/Zip/inffast.c new file mode 100644 index 0000000..655eaf0 --- /dev/null +++ b/src/TZlib/Zip/inffast.c @@ -0,0 +1,183 @@ +/* inffast.c -- process literals and length/distance pairs fast + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "infblock.h" +#include "infcodes.h" +#include "infutil.h" +#include "inffast.h" + +struct inflate_codes_state {int dummy;}; /* for buggy compilers */ + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + +/* macros for bit input with no checking and for returning unused bytes */ +#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;} + +/* Called with number of bytes left to write in window at least 258 + (the maximum string length) and number of input bytes available + at least ten. The ten bytes are six bytes for the longest length/ + distance pair plus four bytes for overloading the bit buffer. */ + +int inflate_fast(bl, bd, tl, td, s, z) +uInt bl, bd; +inflate_huft *tl; +inflate_huft *td; /* need separate declaration for Borland C++ */ +inflate_blocks_statef *s; +z_streamp z; +{ + inflate_huft *t; /* temporary pointer */ + uInt e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Bytef *p; /* input data pointer */ + uInt n; /* bytes available there */ + Bytef *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + uInt ml; /* mask for literal/length tree */ + uInt md; /* mask for distance tree */ + uInt c; /* bytes to copy */ + uInt d; /* distance back to copy from */ + Bytef *r; /* copy source pointer */ + + /* load input, output, bit values */ + LOAD + + /* initialize masks */ + ml = inflate_mask[bl]; + md = inflate_mask[bd]; + + /* do until not enough input or output space for fast loop */ + do { /* assume called with m >= 258 && n >= 10 */ + /* get literal/length code */ + GRABBITS(20) /* max bits for literal/length code */ + if ((e = (t = tl + ((uInt)b & ml))->exop) == 0) + { + DUMPBITS(t->bits) + Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? + "inflate: * literal '%c'\n" : + "inflate: * literal 0x%02x\n", t->base)); + *q++ = (Byte)t->base; + m--; + continue; + } + do { + DUMPBITS(t->bits) + if (e & 16) + { + /* get extra bits for length */ + e &= 15; + c = t->base + ((uInt)b & inflate_mask[e]); + DUMPBITS(e) + Tracevv((stderr, "inflate: * length %u\n", c)); + + /* decode distance base of block to copy */ + GRABBITS(15); /* max bits for distance code */ + e = (t = td + ((uInt)b & md))->exop; + do { + DUMPBITS(t->bits) + if (e & 16) + { + /* get extra bits to add to distance base */ + e &= 15; + GRABBITS(e) /* get extra bits (up to 13) */ + d = t->base + ((uInt)b & inflate_mask[e]); + DUMPBITS(e) + Tracevv((stderr, "inflate: * distance %u\n", d)); + + /* do the copy */ + m -= c; + r = q - d; + if (r < s->window) /* wrap if needed */ + { + do { + r += s->end - s->window; /* force pointer in window */ + } while (r < s->window); /* covers invalid distances */ + e = s->end - r; + if (c > e) + { + c -= e; /* wrapped copy */ + do { + *q++ = *r++; + } while (--e); + r = s->window; + do { + *q++ = *r++; + } while (--c); + } + else /* normal copy */ + { + *q++ = *r++; c--; + *q++ = *r++; c--; + do { + *q++ = *r++; + } while (--c); + } + } + else /* normal copy */ + { + *q++ = *r++; c--; + *q++ = *r++; c--; + do { + *q++ = *r++; + } while (--c); + } + break; + } + else if ((e & 64) == 0) + { + t += t->base; + e = (t += ((uInt)b & inflate_mask[e]))->exop; + } + else + { + z->msg = (char*)"invalid distance code"; + UNGRAB + UPDATE + return Z_DATA_ERROR; + } + } while (1); + break; + } + if ((e & 64) == 0) + { + t += t->base; + if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0) + { + DUMPBITS(t->bits) + Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? + "inflate: * literal '%c'\n" : + "inflate: * literal 0x%02x\n", t->base)); + *q++ = (Byte)t->base; + m--; + break; + } + } + else if (e & 32) + { + Tracevv((stderr, "inflate: * end of block\n")); + UNGRAB + UPDATE + return Z_STREAM_END; + } + else + { + z->msg = (char*)"invalid literal/length code"; + UNGRAB + UPDATE + return Z_DATA_ERROR; + } + } while (1); + } while (m >= 258 && n >= 10); + + /* not enough input or output--restore pointers and return */ + UNGRAB + UPDATE + return Z_OK; +} diff --git a/src/TZlib/Zip/inffast.h b/src/TZlib/Zip/inffast.h new file mode 100644 index 0000000..ac643b3 --- /dev/null +++ b/src/TZlib/Zip/inffast.h @@ -0,0 +1,17 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +extern int inflate_fast OF(( + uInt, + uInt, + inflate_huft *, + inflate_huft *, + inflate_blocks_statef *, + z_streamp )); diff --git a/src/TZlib/Zip/inffixed.h b/src/TZlib/Zip/inffixed.h new file mode 100644 index 0000000..e997507 --- /dev/null +++ b/src/TZlib/Zip/inffixed.h @@ -0,0 +1,151 @@ +/* inffixed.h -- table for decoding fixed codes + * Generated automatically by the maketree.c program + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +local uInt fixed_bl = 9; +local uInt fixed_bd = 5; +local inflate_huft fixed_tl[] = { + {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, + {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192}, + {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160}, + {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224}, + {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144}, + {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208}, + {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176}, + {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240}, + {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, + {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200}, + {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168}, + {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232}, + {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152}, + {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216}, + {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184}, + {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248}, + {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, + {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196}, + {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164}, + {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228}, + {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148}, + {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212}, + {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180}, + {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244}, + {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204}, + {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172}, + {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236}, + {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156}, + {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220}, + {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188}, + {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252}, + {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, + {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194}, + {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162}, + {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226}, + {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146}, + {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210}, + {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178}, + {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242}, + {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, + {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202}, + {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170}, + {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234}, + {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154}, + {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218}, + {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186}, + {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250}, + {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, + {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198}, + {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166}, + {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230}, + {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150}, + {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214}, + {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182}, + {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246}, + {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206}, + {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174}, + {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238}, + {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158}, + {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222}, + {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190}, + {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254}, + {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, + {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193}, + {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161}, + {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225}, + {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145}, + {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209}, + {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177}, + {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241}, + {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, + {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201}, + {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169}, + {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233}, + {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153}, + {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217}, + {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185}, + {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249}, + {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, + {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197}, + {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165}, + {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229}, + {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149}, + {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213}, + {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181}, + {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245}, + {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205}, + {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173}, + {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237}, + {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157}, + {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221}, + {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189}, + {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253}, + {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, + {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195}, + {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163}, + {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227}, + {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147}, + {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211}, + {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179}, + {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243}, + {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, + {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203}, + {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171}, + {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235}, + {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155}, + {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219}, + {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187}, + {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251}, + {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, + {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199}, + {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167}, + {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231}, + {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151}, + {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215}, + {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183}, + {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247}, + {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, + {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207}, + {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175}, + {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239}, + {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159}, + {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223}, + {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191}, + {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255} + }; +local inflate_huft fixed_td[] = { + {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097}, + {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385}, + {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193}, + {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577}, + {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145}, + {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577}, + {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289}, + {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577} + }; diff --git a/src/TZlib/Zip/inflate.c b/src/TZlib/Zip/inflate.c new file mode 100644 index 0000000..5577e02 --- /dev/null +++ b/src/TZlib/Zip/inflate.c @@ -0,0 +1,366 @@ +/* inflate.c -- zlib interface to inflate modules + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "infblock.h" + +struct inflate_blocks_state {int dummy;}; /* for buggy compilers */ + +typedef enum { + METHOD, /* waiting for method byte */ + FLAG, /* waiting for flag byte */ + DICT4, /* four dictionary check bytes to go */ + DICT3, /* three dictionary check bytes to go */ + DICT2, /* two dictionary check bytes to go */ + DICT1, /* one dictionary check byte to go */ + DICT0, /* waiting for inflateSetDictionary */ + BLOCKS, /* decompressing blocks */ + CHECK4, /* four check bytes to go */ + CHECK3, /* three check bytes to go */ + CHECK2, /* two check bytes to go */ + CHECK1, /* one check byte to go */ + DONE, /* finished check, done */ + BAD} /* got an error--stay here */ +inflate_mode; + +/* inflate private state */ +struct internal_state { + + /* mode */ + inflate_mode mode; /* current inflate mode */ + + /* mode dependent information */ + union { + uInt method; /* if FLAGS, method byte */ + struct { + uLong was; /* computed check value */ + uLong need; /* stream check value */ + } check; /* if CHECK, check values to compare */ + uInt marker; /* if BAD, inflateSync's marker bytes count */ + } sub; /* submode */ + + /* mode independent information */ + int nowrap; /* flag for no wrapper */ + uInt wbits; /* log2(window size) (8..15, defaults to 15) */ + inflate_blocks_statef + *blocks; /* current inflate_blocks state */ + +}; + + +int ZEXPORT inflateReset(z) +z_streamp z; +{ + if (z == Z_NULL || z->state == Z_NULL) + return Z_STREAM_ERROR; + z->total_in = z->total_out = 0; + z->msg = Z_NULL; + z->state->mode = z->state->nowrap ? BLOCKS : METHOD; + inflate_blocks_reset(z->state->blocks, z, Z_NULL); + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + + +int ZEXPORT inflateEnd(z) +z_streamp z; +{ + if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) + return Z_STREAM_ERROR; + if (z->state->blocks != Z_NULL) + inflate_blocks_free(z->state->blocks, z); + ZFREE(z, z->state); + z->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + + +int ZEXPORT inflateInit2_(z, w, version, stream_size) +z_streamp z; +int w; +const char *version; +int stream_size; +{ + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != sizeof(z_stream)) + return Z_VERSION_ERROR; + + /* initialize state */ + if (z == Z_NULL) + return Z_STREAM_ERROR; + z->msg = Z_NULL; + if (z->zalloc == Z_NULL) + { + z->zalloc = zcalloc; + z->opaque = (voidpf)0; + } + if (z->zfree == Z_NULL) z->zfree = zcfree; + if ((z->state = (struct internal_state FAR *) + ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL) + return Z_MEM_ERROR; + z->state->blocks = Z_NULL; + + /* handle undocumented nowrap option (no zlib header or check) */ + z->state->nowrap = 0; + if (w < 0) + { + w = - w; + z->state->nowrap = 1; + } + + /* set window size */ + if (w < 8 || w > 15) + { + inflateEnd(z); + return Z_STREAM_ERROR; + } + z->state->wbits = (uInt)w; + + /* create inflate_blocks state */ + if ((z->state->blocks = + inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w)) + == Z_NULL) + { + inflateEnd(z); + return Z_MEM_ERROR; + } + Tracev((stderr, "inflate: allocated\n")); + + /* reset state */ + inflateReset(z); + return Z_OK; +} + + +int ZEXPORT inflateInit_(z, version, stream_size) +z_streamp z; +const char *version; +int stream_size; +{ + return inflateInit2_(z, DEF_WBITS, version, stream_size); +} + + +#define NEEDBYTE {if(z->avail_in==0)return r;r=f;} +#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++) + +int ZEXPORT inflate(z, f) +z_streamp z; +int f; +{ + int r; + uInt b; + + if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL) + return Z_STREAM_ERROR; + f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; + r = Z_BUF_ERROR; + while (1) switch (z->state->mode) + { + case METHOD: + NEEDBYTE + if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED) + { + z->state->mode = BAD; + z->msg = (char*)"unknown compression method"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + if ((z->state->sub.method >> 4) + 8 > z->state->wbits) + { + z->state->mode = BAD; + z->msg = (char*)"invalid window size"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + z->state->mode = FLAG; + case FLAG: + NEEDBYTE + b = NEXTBYTE; + if (((z->state->sub.method << 8) + b) % 31) + { + z->state->mode = BAD; + z->msg = (char*)"incorrect header check"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + Tracev((stderr, "inflate: zlib header ok\n")); + if (!(b & PRESET_DICT)) + { + z->state->mode = BLOCKS; + break; + } + z->state->mode = DICT4; + case DICT4: + NEEDBYTE + z->state->sub.check.need = (uLong)NEXTBYTE << 24; + z->state->mode = DICT3; + case DICT3: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE << 16; + z->state->mode = DICT2; + case DICT2: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE << 8; + z->state->mode = DICT1; + case DICT1: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE; + z->adler = z->state->sub.check.need; + z->state->mode = DICT0; + return Z_NEED_DICT; + case DICT0: + z->state->mode = BAD; + z->msg = (char*)"need dictionary"; + z->state->sub.marker = 0; /* can try inflateSync */ + return Z_STREAM_ERROR; + case BLOCKS: + r = inflate_blocks(z->state->blocks, z, r); + if (r == Z_DATA_ERROR) + { + z->state->mode = BAD; + z->state->sub.marker = 0; /* can try inflateSync */ + break; + } + if (r == Z_OK) + r = f; + if (r != Z_STREAM_END) + return r; + r = f; + inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); + if (z->state->nowrap) + { + z->state->mode = DONE; + break; + } + z->state->mode = CHECK4; + case CHECK4: + NEEDBYTE + z->state->sub.check.need = (uLong)NEXTBYTE << 24; + z->state->mode = CHECK3; + case CHECK3: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE << 16; + z->state->mode = CHECK2; + case CHECK2: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE << 8; + z->state->mode = CHECK1; + case CHECK1: + NEEDBYTE + z->state->sub.check.need += (uLong)NEXTBYTE; + + if (z->state->sub.check.was != z->state->sub.check.need) + { + z->state->mode = BAD; + z->msg = (char*)"incorrect data check"; + z->state->sub.marker = 5; /* can't try inflateSync */ + break; + } + Tracev((stderr, "inflate: zlib check ok\n")); + z->state->mode = DONE; + case DONE: + return Z_STREAM_END; + case BAD: + return Z_DATA_ERROR; + default: + return Z_STREAM_ERROR; + } +#ifdef NEED_DUMMY_RETURN + return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ +#endif +} + + +int ZEXPORT inflateSetDictionary(z, dictionary, dictLength) +z_streamp z; +const Bytef *dictionary; +uInt dictLength; +{ + uInt length = dictLength; + + if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0) + return Z_STREAM_ERROR; + + if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR; + z->adler = 1L; + + if (length >= ((uInt)1<state->wbits)) + { + length = (1<state->wbits)-1; + dictionary += dictLength - length; + } + inflate_set_dictionary(z->state->blocks, dictionary, length); + z->state->mode = BLOCKS; + return Z_OK; +} + + +int ZEXPORT inflateSync(z) +z_streamp z; +{ + uInt n; /* number of bytes to look at */ + Bytef *p; /* pointer to bytes */ + uInt m; /* number of marker bytes found in a row */ + uLong r, w; /* temporaries to save total_in and total_out */ + + /* set up */ + if (z == Z_NULL || z->state == Z_NULL) + return Z_STREAM_ERROR; + if (z->state->mode != BAD) + { + z->state->mode = BAD; + z->state->sub.marker = 0; + } + if ((n = z->avail_in) == 0) + return Z_BUF_ERROR; + p = z->next_in; + m = z->state->sub.marker; + + /* search */ + while (n && m < 4) + { + static const Byte mark[4] = {0, 0, 0xff, 0xff}; + if (*p == mark[m]) + m++; + else if (*p) + m = 0; + else + m = 4 - m; + p++, n--; + } + + /* restore */ + z->total_in += p - z->next_in; + z->next_in = p; + z->avail_in = n; + z->state->sub.marker = m; + + /* return no joy or set up to restart on a new block */ + if (m != 4) + return Z_DATA_ERROR; + r = z->total_in; w = z->total_out; + inflateReset(z); + z->total_in = r; z->total_out = w; + z->state->mode = BLOCKS; + return Z_OK; +} + + +/* Returns true if inflate is currently at the end of a block generated + * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH + * but removes the length bytes of the resulting empty stored block. When + * decompressing, PPP checks that at the end of input packet, inflate is + * waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(z) +z_streamp z; +{ + if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL) + return Z_STREAM_ERROR; + return inflate_blocks_sync_point(z->state->blocks); +} diff --git a/src/TZlib/Zip/inftrees.c b/src/TZlib/Zip/inftrees.c new file mode 100644 index 0000000..f89e801 --- /dev/null +++ b/src/TZlib/Zip/inftrees.c @@ -0,0 +1,454 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#if !defined(BUILDFIXED) && !defined(STDC) +# define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */ +#endif + +const char inflate_copyright[] = + " inflate 1.1.4 Copyright 1995-2002 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ +struct internal_state {int dummy;}; /* for buggy compilers */ + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + + +local int huft_build OF(( + uIntf *, /* code lengths in bits */ + uInt, /* number of codes */ + uInt, /* number of "simple" codes */ + const uIntf *, /* list of base values for non-simple codes */ + const uIntf *, /* list of extra bits for non-simple codes */ + inflate_huft * FAR*,/* result: starting table */ + uIntf *, /* maximum lookup bits (returns actual) */ + inflate_huft *, /* space for trees */ + uInt *, /* hufts used in space */ + uIntf * )); /* space for values */ + +/* Tables for deflate from PKZIP's appnote.txt. */ +local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */ + 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}; + /* see note #13 above about 258 */ +local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */ + 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, 112, 112}; /* 112==invalid */ +local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */ + 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}; +local const uInt cpdext[30] = { /* Extra bits for distance codes */ + 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}; + +/* + Huffman code decoding is performed using a multi-level table lookup. + The fastest way to decode is to simply build a lookup table whose + size is determined by the longest code. However, the time it takes + to build this table can also be a factor if the data being decoded + is not very long. The most common codes are necessarily the + shortest codes, so those codes dominate the decoding time, and hence + the speed. The idea is you can have a shorter table that decodes the + shorter, more probable codes, and then point to subsidiary tables for + the longer codes. The time it costs to decode the longer codes is + then traded against the time it takes to make longer tables. + + This results of this trade are in the variables lbits and dbits + below. lbits is the number of bits the first level table for literal/ + length codes can decode in one step, and dbits is the same thing for + the distance codes. Subsequent tables are also less than or equal to + those sizes. These values may be adjusted either when all of the + codes are shorter than that, in which case the longest code length in + bits is used, or when the shortest code is *longer* than the requested + table size, in which case the length of the shortest code in bits is + used. + + There are two different values for the two tables, since they code a + different number of possibilities each. The literal/length table + codes 286 possible values, or in a flat code, a little over eight + bits. The distance table codes 30 possible values, or a little less + than five bits, flat. The optimum values for speed end up being + about one bit more than those, so lbits is 8+1 and dbits is 5+1. + The optimum values may differ though from machine to machine, and + possibly even between compilers. Your mileage may vary. + */ + + +/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */ +#define BMAX 15 /* maximum bit length of any code */ + +local int huft_build(b, n, s, d, e, t, m, hp, hn, v) +uIntf *b; /* code lengths in bits (all assumed <= BMAX) */ +uInt n; /* number of codes (assumed <= 288) */ +uInt s; /* number of simple-valued codes (0..s-1) */ +const uIntf *d; /* list of base values for non-simple codes */ +const uIntf *e; /* list of extra bits for non-simple codes */ +inflate_huft * FAR *t; /* result: starting table */ +uIntf *m; /* maximum lookup bits, returns actual */ +inflate_huft *hp; /* space for trees */ +uInt *hn; /* hufts used in space */ +uIntf *v; /* working area: values in order of bit length */ +/* Given a list of code lengths and a maximum table size, make a set of + tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR + if the given code set is incomplete (the tables are still built in this + case), or Z_DATA_ERROR if the input is invalid. */ +{ + + uInt a; /* counter for codes of length k */ + uInt c[BMAX+1]; /* bit length count table */ + uInt f; /* i repeats in table every f entries */ + int g; /* maximum code length */ + int h; /* table level */ + register uInt i; /* counter, current code */ + register uInt j; /* counter */ + register int k; /* number of bits in current code */ + int l; /* bits per table (returned in m) */ + uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */ + register uIntf *p; /* pointer into c[], b[], or v[] */ + inflate_huft *q; /* points to current table */ + struct inflate_huft_s r; /* table entry for structure assignment */ + inflate_huft *u[BMAX]; /* table stack */ + register int w; /* bits before this table == (l * h) */ + uInt x[BMAX+1]; /* bit offsets, then code stack */ + uIntf *xp; /* pointer into x */ + int y; /* number of dummy codes added */ + uInt z; /* number of entries in current table */ + + + /* Generate counts for each bit length */ + p = c; +#define C0 *p++ = 0; +#define C2 C0 C0 C0 C0 +#define C4 C2 C2 C2 C2 + C4 /* clear c[]--assume BMAX+1 is 16 */ + p = b; i = n; + do { + c[*p++]++; /* assume all entries <= BMAX */ + } while (--i); + if (c[0] == n) /* null input--all zero length codes */ + { + *t = (inflate_huft *)Z_NULL; + *m = 0; + return Z_OK; + } + + + /* Find minimum and maximum length, bound *m by those */ + l = *m; + for (j = 1; j <= BMAX; j++) + if (c[j]) + break; + k = j; /* minimum code length */ + if ((uInt)l < j) + l = j; + for (i = BMAX; i; i--) + if (c[i]) + break; + g = i; /* maximum code length */ + if ((uInt)l > i) + l = i; + *m = l; + + + /* Adjust last length count to fill out codes, if needed */ + for (y = 1 << j; j < i; j++, y <<= 1) + if ((y -= c[j]) < 0) + return Z_DATA_ERROR; + if ((y -= c[i]) < 0) + return Z_DATA_ERROR; + c[i] += y; + + + /* Generate starting offsets into the value table for each length */ + x[1] = j = 0; + p = c + 1; xp = x + 2; + while (--i) { /* note that i == g from above */ + *xp++ = (j += *p++); + } + + + /* Make a table of values in order of bit lengths */ + p = b; i = 0; + do { + if ((j = *p++) != 0) + v[x[j]++] = i; + } while (++i < n); + n = x[g]; /* set n to length of v */ + + + /* Generate the Huffman codes and for each, make the table entries */ + x[0] = i = 0; /* first Huffman code is zero */ + p = v; /* grab values in bit order */ + h = -1; /* no tables yet--level -1 */ + w = -l; /* bits decoded == (l * h) */ + u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */ + q = (inflate_huft *)Z_NULL; /* ditto */ + z = 0; /* ditto */ + + /* go through the bit lengths (k already is bits in shortest code) */ + for (; k <= g; k++) + { + a = c[k]; + while (a--) + { + /* here i is the Huffman code of length k bits for value *p */ + /* make tables up to required level */ + while (k > w + l) + { + h++; + w += l; /* previous table always l bits */ + + /* compute minimum size table less than or equal to l bits */ + z = g - w; + z = z > (uInt)l ? l : z; /* table size upper limit */ + if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ + { /* too few codes for k-w bit table */ + f -= a + 1; /* deduct codes from patterns left */ + xp = c + k; + if (j < z) + while (++j < z) /* try smaller tables up to z bits */ + { + if ((f <<= 1) <= *++xp) + break; /* enough codes to use up j bits */ + f -= *xp; /* else deduct codes from patterns */ + } + } + z = 1 << j; /* table entries for j-bit table */ + + /* allocate new table */ + if (*hn + z > MANY) /* (note: doesn't matter for fixed) */ + return Z_DATA_ERROR; /* overflow of MANY */ + u[h] = q = hp + *hn; + *hn += z; + + /* connect to last table, if there is one */ + if (h) + { + x[h] = i; /* save pattern for backing up */ + r.bits = (Byte)l; /* bits to dump before this table */ + r.exop = (Byte)j; /* bits in this table */ + j = i >> (w - l); + r.base = (uInt)(q - u[h-1] - j); /* offset to this table */ + u[h-1][j] = r; /* connect to last table */ + } + else + *t = q; /* first table is returned result */ + } + + /* set up table entry in r */ + r.bits = (Byte)(k - w); + if (p >= v + n) + r.exop = 128 + 64; /* out of values--invalid code */ + else if (*p < s) + { + r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */ + r.base = *p++; /* simple code is just the value */ + } + else + { + r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */ + r.base = d[*p++ - s]; + } + + /* fill code-like entries with r */ + f = 1 << (k - w); + for (j = i >> w; j < z; j += f) + q[j] = r; + + /* backwards increment the k-bit code i */ + for (j = 1 << (k - 1); i & j; j >>= 1) + i ^= j; + i ^= j; + + /* backup over finished tables */ + mask = (1 << w) - 1; /* needed on HP, cc -O bug */ + while ((i & mask) != x[h]) + { + h--; /* don't need to update q */ + w -= l; + mask = (1 << w) - 1; + } + } + } + + + /* Return Z_BUF_ERROR if we were given an incomplete table */ + return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; +} + + +int inflate_trees_bits(c, bb, tb, hp, z) +uIntf *c; /* 19 code lengths */ +uIntf *bb; /* bits tree desired/actual depth */ +inflate_huft * FAR *tb; /* bits tree result */ +inflate_huft *hp; /* space for trees */ +z_streamp z; /* for messages */ +{ + int r; + uInt hn = 0; /* hufts used in space */ + uIntf *v; /* work area for huft_build */ + + if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL) + return Z_MEM_ERROR; + r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, + tb, bb, hp, &hn, v); + if (r == Z_DATA_ERROR) + z->msg = (char*)"oversubscribed dynamic bit lengths tree"; + else if (r == Z_BUF_ERROR || *bb == 0) + { + z->msg = (char*)"incomplete dynamic bit lengths tree"; + r = Z_DATA_ERROR; + } + ZFREE(z, v); + return r; +} + + +int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z) +uInt nl; /* number of literal/length codes */ +uInt nd; /* number of distance codes */ +uIntf *c; /* that many (total) code lengths */ +uIntf *bl; /* literal desired/actual bit depth */ +uIntf *bd; /* distance desired/actual bit depth */ +inflate_huft * FAR *tl; /* literal/length tree result */ +inflate_huft * FAR *td; /* distance tree result */ +inflate_huft *hp; /* space for trees */ +z_streamp z; /* for messages */ +{ + int r; + uInt hn = 0; /* hufts used in space */ + uIntf *v; /* work area for huft_build */ + + /* allocate work area */ + if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) + return Z_MEM_ERROR; + + /* build literal/length tree */ + r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v); + if (r != Z_OK || *bl == 0) + { + if (r == Z_DATA_ERROR) + z->msg = (char*)"oversubscribed literal/length tree"; + else if (r != Z_MEM_ERROR) + { + z->msg = (char*)"incomplete literal/length tree"; + r = Z_DATA_ERROR; + } + ZFREE(z, v); + return r; + } + + /* build distance tree */ + r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v); + if (r != Z_OK || (*bd == 0 && nl > 257)) + { + if (r == Z_DATA_ERROR) + z->msg = (char*)"oversubscribed distance tree"; + else if (r == Z_BUF_ERROR) { +#ifdef PKZIP_BUG_WORKAROUND + r = Z_OK; + } +#else + z->msg = (char*)"incomplete distance tree"; + r = Z_DATA_ERROR; + } + else if (r != Z_MEM_ERROR) + { + z->msg = (char*)"empty distance tree with lengths"; + r = Z_DATA_ERROR; + } + ZFREE(z, v); + return r; +#endif + } + + /* done */ + ZFREE(z, v); + return Z_OK; +} + + +/* build fixed tables only once--keep them here */ +#ifdef BUILDFIXED +local int fixed_built = 0; +#define FIXEDH 544 /* number of hufts used by fixed tables */ +local inflate_huft fixed_mem[FIXEDH]; +local uInt fixed_bl; +local uInt fixed_bd; +local inflate_huft *fixed_tl; +local inflate_huft *fixed_td; +#else +#include "inffixed.h" +#endif + + +int inflate_trees_fixed(bl, bd, tl, td, z) +uIntf *bl; /* literal desired/actual bit depth */ +uIntf *bd; /* distance desired/actual bit depth */ +inflate_huft * FAR *tl; /* literal/length tree result */ +inflate_huft * FAR *td; /* distance tree result */ +z_streamp z; /* for memory allocation */ +{ +#ifdef BUILDFIXED + /* build fixed tables if not already */ + if (!fixed_built) + { + int k; /* temporary variable */ + uInt f = 0; /* number of hufts used in fixed_mem */ + uIntf *c; /* length list for huft_build */ + uIntf *v; /* work area for huft_build */ + + /* allocate memory */ + if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) + return Z_MEM_ERROR; + if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) + { + ZFREE(z, c); + return Z_MEM_ERROR; + } + + /* literal table */ + for (k = 0; k < 144; k++) + c[k] = 8; + for (; k < 256; k++) + c[k] = 9; + for (; k < 280; k++) + c[k] = 7; + for (; k < 288; k++) + c[k] = 8; + fixed_bl = 9; + huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, + fixed_mem, &f, v); + + /* distance table */ + for (k = 0; k < 30; k++) + c[k] = 5; + fixed_bd = 5; + huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, + fixed_mem, &f, v); + + /* done */ + ZFREE(z, v); + ZFREE(z, c); + fixed_built = 1; + } +#endif + *bl = fixed_bl; + *bd = fixed_bd; + *tl = fixed_tl; + *td = fixed_td; + return Z_OK; +} diff --git a/src/TZlib/Zip/inftrees.h b/src/TZlib/Zip/inftrees.h new file mode 100644 index 0000000..affbb3b --- /dev/null +++ b/src/TZlib/Zip/inftrees.h @@ -0,0 +1,58 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Huffman code lookup table entry--this entry is four bytes for machines + that have 16-bit pointers (e.g. PC's in the small or medium model). */ + +typedef struct inflate_huft_s FAR inflate_huft; + +struct inflate_huft_s { + union { + struct { + Byte Exop; /* number of extra bits or operation */ + Byte Bits; /* number of bits in this code or subcode */ + } what; + uInt pad; /* pad structure to a power of 2 (4 bytes for */ + } word; /* 16-bit, 8 bytes for 32-bit int's) */ + uInt base; /* literal, length base, distance base, + or table offset */ +}; + +/* Maximum size of dynamic tree. The maximum found in a long but non- + exhaustive search was 1004 huft structures (850 for length/literals + and 154 for distances, the latter actually the result of an + exhaustive search). The actual maximum is not known, but the + value below is more than safe. */ +#define MANY 1440 + +extern int inflate_trees_bits OF(( + uIntf *, /* 19 code lengths */ + uIntf *, /* bits tree desired/actual depth */ + inflate_huft * FAR *, /* bits tree result */ + inflate_huft *, /* space for trees */ + z_streamp)); /* for messages */ + +extern int inflate_trees_dynamic OF(( + uInt, /* number of literal/length codes */ + uInt, /* number of distance codes */ + uIntf *, /* that many (total) code lengths */ + uIntf *, /* literal desired/actual bit depth */ + uIntf *, /* distance desired/actual bit depth */ + inflate_huft * FAR *, /* literal/length tree result */ + inflate_huft * FAR *, /* distance tree result */ + inflate_huft *, /* space for trees */ + z_streamp)); /* for messages */ + +extern int inflate_trees_fixed OF(( + uIntf *, /* literal desired/actual bit depth */ + uIntf *, /* distance desired/actual bit depth */ + inflate_huft * FAR *, /* literal/length tree result */ + inflate_huft * FAR *, /* distance tree result */ + z_streamp)); /* for memory allocation */ diff --git a/src/TZlib/Zip/infutil.c b/src/TZlib/Zip/infutil.c new file mode 100644 index 0000000..976d5e5 --- /dev/null +++ b/src/TZlib/Zip/infutil.c @@ -0,0 +1,87 @@ +/* inflate_util.c -- data and routines common to blocks and codes + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "infblock.h" +#include "inftrees.h" +#include "infcodes.h" +#include "infutil.h" + +struct inflate_codes_state {int dummy;}; /* for buggy compilers */ + +/* And'ing with mask[n] masks the lower n bits */ +uInt inflate_mask[17] = { + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +}; + + +/* copy as much as possible from the sliding window to the output area */ +int inflate_flush(s, z, r) +inflate_blocks_statef *s; +z_streamp z; +int r; +{ + uInt n; + Bytef *p; + Bytef *q; + + /* local copies of source and destination pointers */ + p = z->next_out; + q = s->read; + + /* compute number of bytes to copy as far as end of window */ + n = (uInt)((q <= s->write ? s->write : s->end) - q); + if (n > z->avail_out) n = z->avail_out; + if (n && r == Z_BUF_ERROR) r = Z_OK; + + /* update counters */ + z->avail_out -= n; + z->total_out += n; + + /* update check information */ + if (s->checkfn != Z_NULL) + z->adler = s->check = (*s->checkfn)(s->check, q, n); + + /* copy as far as end of window */ + zmemcpy(p, q, n); + p += n; + q += n; + + /* see if more to copy at beginning of window */ + if (q == s->end) + { + /* wrap pointers */ + q = s->window; + if (s->write == s->end) + s->write = s->window; + + /* compute bytes to copy */ + n = (uInt)(s->write - q); + if (n > z->avail_out) n = z->avail_out; + if (n && r == Z_BUF_ERROR) r = Z_OK; + + /* update counters */ + z->avail_out -= n; + z->total_out += n; + + /* update check information */ + if (s->checkfn != Z_NULL) + z->adler = s->check = (*s->checkfn)(s->check, q, n); + + /* copy */ + zmemcpy(p, q, n); + p += n; + q += n; + } + + /* update pointers */ + z->next_out = p; + s->read = q; + + /* done */ + return r; +} diff --git a/src/TZlib/Zip/infutil.h b/src/TZlib/Zip/infutil.h new file mode 100644 index 0000000..0c0ace3 --- /dev/null +++ b/src/TZlib/Zip/infutil.h @@ -0,0 +1,98 @@ +/* infutil.h -- types and macros common to blocks and codes + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +#ifndef _INFUTIL_H +#define _INFUTIL_H + +typedef enum { + TYPE, /* get type bits (3, including end bit) */ + LENS, /* get lengths for stored */ + STORED, /* processing stored block */ + TABLE, /* get table lengths */ + BTREE, /* get bit lengths tree for a dynamic block */ + DTREE, /* get length, distance trees for a dynamic block */ + CODES, /* processing fixed or dynamic block */ + DRY, /* output remaining window bytes */ + DONE, /* finished last block, done */ + BAD} /* got a data error--stuck here */ +inflate_block_mode; + +/* inflate blocks semi-private state */ +struct inflate_blocks_state { + + /* mode */ + inflate_block_mode mode; /* current inflate_block mode */ + + /* mode dependent information */ + union { + uInt left; /* if STORED, bytes left to copy */ + struct { + uInt table; /* table lengths (14 bits) */ + uInt index; /* index into blens (or border) */ + uIntf *blens; /* bit lengths of codes */ + uInt bb; /* bit length tree depth */ + inflate_huft *tb; /* bit length decoding tree */ + } trees; /* if DTREE, decoding info for trees */ + struct { + inflate_codes_statef + *codes; + } decode; /* if CODES, current state */ + } sub; /* submode */ + uInt last; /* true if this block is the last block */ + + /* mode independent information */ + uInt bitk; /* bits in bit buffer */ + uLong bitb; /* bit buffer */ + inflate_huft *hufts; /* single malloc for tree space */ + Bytef *window; /* sliding window */ + Bytef *end; /* one byte after sliding window */ + Bytef *read; /* window read pointer */ + Bytef *write; /* window write pointer */ + check_func checkfn; /* check function */ + uLong check; /* check on output */ + +}; + + +/* defines for inflate input/output */ +/* update pointers and return */ +#define UPDBITS {s->bitb=b;s->bitk=k;} +#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} +#define UPDOUT {s->write=q;} +#define UPDATE {UPDBITS UPDIN UPDOUT} +#define LEAVE {UPDATE return inflate_flush(s,z,r);} +/* get bytes and bits */ +#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} +#define NEEDBYTE {if(n)r=Z_OK;else LEAVE} +#define NEXTBYTE (n--,*p++) +#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<>=(j);k-=(j);} +/* output bytes */ +#define WAVAIL (uInt)(qread?s->read-q-1:s->end-q) +#define LOADOUT {q=s->write;m=(uInt)WAVAIL;} +#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} +#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} +#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} +#define OUTBYTE(a) {*q++=(Byte)(a);m--;} +/* load local pointers */ +#define LOAD {LOADIN LOADOUT} + +/* masks for lower bits (size given to avoid silly warnings with Visual C++) */ +extern uInt inflate_mask[17]; + +/* copy as much as possible from the sliding window to the output area */ +extern int inflate_flush OF(( + inflate_blocks_statef *, + z_streamp , + int)); + +struct internal_state {int dummy;}; /* for buggy compilers */ + +#endif diff --git a/src/TZlib/Zip/maketree.c b/src/TZlib/Zip/maketree.c new file mode 100644 index 0000000..5cfeb5d --- /dev/null +++ b/src/TZlib/Zip/maketree.c @@ -0,0 +1,51 @@ +/* maketree.c -- make inffixed.h table for decoding fixed codes + * Copyright (C) 1995-2002 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* This program is included in the distribution for completeness. + You do not need to compile or run this program since inffixed.h + is already included in the distribution. To use this program + you need to compile zlib with BUILDFIXED defined and then compile + and link this program with the zlib library. Then the output of + this program can be piped to inffixed.h. */ + +#include +#include +#include "zutil.h" +#include "inftrees.h" + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + +/* generate initialization table for an inflate_huft structure array */ +void maketree(uInt b, inflate_huft *t) +{ + int i, e; + + i = 0; + while (1) + { + e = t[i].exop; + if (e && (e & (16+64)) == 0) /* table pointer */ + { + fprintf(stderr, "maketree: cannot initialize sub-tables!\n"); + exit(1); + } + if (i % 4 == 0) + printf("\n "); + printf(" {{{%u,%u}},%u}", t[i].exop, t[i].bits, t[i].base); + if (++i == (1< +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {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}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {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}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +#define Buf_size (8 * 2*sizeof(char)) +/* Number of bits used within bi_buf. (bi_buf might be implemented on + * more than 16 bits on some systems.) + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local void set_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (value << s->bi_valid); + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (val << s->bi_valid);\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +#define MAX(a,b) (a >= b ? a : b) +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; + s->last_eob_len = 8; /* enough lookahead for inflate */ +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if (tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void _tr_stored_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + * The current inflate code requires 9 bits of lookahead. If the + * last two codes for the previous block (real code plus EOB) were coded + * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + * the last real code. In this case we send two empty static blocks instead + * of one. (There are no problems if the previous block is stored or fixed.) + * To simplify the code, we assume the worst case of last real code encoded + * on one bit only. + */ +void _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); + /* Of the 10 bits for the empty block, we have already sent + * (10 - bi_valid) bits. The lookahead for the last real code (before + * the EOB of the previous block) was thus at least one plus the length + * of the EOB plus what we have just sent of the empty static block. + */ + if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; +#endif + bi_flush(s); + } + s->last_eob_len = 7; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void _tr_flush_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is ascii or binary */ + if (s->data_type == Z_UNKNOWN) set_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute first the block length in bytes*/ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, eof); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+eof, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+eof, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (eof) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*eof)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); + s->last_eob_len = ltree[END_BLOCK].Len; +} + +/* =========================================================================== + * Set the data type to ASCII or BINARY, using a crude approximation: + * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. + * IN assertion: the fields freq of dyn_ltree are set and the total of all + * frequencies does not exceed 64K (to fit in an int on 16 bit machines). + */ +local void set_data_type(s) + deflate_state *s; +{ + int n = 0; + unsigned ascii_freq = 0; + unsigned bin_freq = 0; + while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; + while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; + while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; + s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + s->last_eob_len = 8; /* enough lookahead for inflate */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff --git a/src/TZlib/Zip/trees.h b/src/TZlib/Zip/trees.h new file mode 100644 index 0000000..1ca868b --- /dev/null +++ b/src/TZlib/Zip/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 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, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/src/TZlib/Zip/uncompr.c b/src/TZlib/Zip/uncompr.c new file mode 100644 index 0000000..57dd24a --- /dev/null +++ b/src/TZlib/Zip/uncompr.c @@ -0,0 +1,58 @@ +/* uncompr.c -- decompress a memory buffer + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +/* =========================================================================== + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; + + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + + err = inflateInit(&stream); + if (err != Z_OK) return err; + + err = inflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + inflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = inflateEnd(&stream); + return err; +} diff --git a/src/TZlib/Zip/zconf.h b/src/TZlib/Zip/zconf.h new file mode 100644 index 0000000..22b2a4d --- /dev/null +++ b/src/TZlib/Zip/zconf.h @@ -0,0 +1,279 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef _ZCONF_H +#define _ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateReset z_inflateReset +# define compress z_compress +# define compress2 z_compress2 +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table + +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +# define WIN32 +#endif +#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) +# ifndef __32BIT__ +# define __32BIT__ +# endif +#endif +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#if defined(MSDOS) && !defined(__32BIT__) +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC) +# define STDC +#endif +#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__) +# ifndef STDC +# define STDC +# endif +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Old Borland C incorrectly complains about missing returns: */ +#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) +# define NEED_DUMMY_RETURN +#endif + + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +#endif +#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) +# ifndef __32BIT__ +# define SMALL_MEDIUM +# define FAR _far +# endif +#endif + +/* Compile with -DZLIB_DLL for Windows DLL support */ +#if defined(ZLIB_DLL) +# if defined(_WINDOWS) || defined(WINDOWS) +# ifdef FAR +# undef FAR +# endif +# include +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR _cdecl _export +# endif +# endif +# if defined (__BORLANDC__) +# if (__BORLANDC__ >= 0x0500) && defined (WIN32) +# include +# define ZEXPORT __declspec(dllexport) WINAPI +# define ZEXPORTRVA __declspec(dllexport) WINAPIV +# else +# if defined (_Windows) && defined (__DLL__) +# define ZEXPORT _export +# define ZEXPORTVA _export +# endif +# endif +# endif +#endif + +#if defined (__BEOS__) +# if defined (ZLIB_DLL) +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +#endif + +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif +#ifndef ZEXTERN +# define ZEXTERN extern +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(MACOS) && !defined(TARGET_OS_MAC) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef unsigned char FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(inflate_blocks,"INBL") +# pragma map(inflate_blocks_new,"INBLNE") +# pragma map(inflate_blocks_free,"INBLFR") +# pragma map(inflate_blocks_reset,"INBLRE") +# pragma map(inflate_codes_free,"INCOFR") +# pragma map(inflate_codes,"INCO") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_flush,"INFLU") +# pragma map(inflate_mask,"INMA") +# pragma map(inflate_set_dictionary,"INSEDI2") +# pragma map(inflate_copyright,"INCOPY") +# pragma map(inflate_trees_bits,"INTRBI") +# pragma map(inflate_trees_dynamic,"INTRDY") +# pragma map(inflate_trees_fixed,"INTRFI") +# pragma map(inflate_trees_free,"INTRFR") +#endif + +#endif /* _ZCONF_H */ diff --git a/src/TZlib/Zip/zlib.h b/src/TZlib/Zip/zlib.h new file mode 100644 index 0000000..5979f04 --- /dev/null +++ b/src/TZlib/Zip/zlib.h @@ -0,0 +1,893 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.1.4, March 11th, 2002 + + Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef _ZLIB_H +#define _ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.1.4" + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: ascii or binary */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +/* Allowed flush values; see deflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Possible values of the data_type field */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + the compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + 0.1% larger than avail_in plus 12 bytes. If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update data_type if it can make a good guess about + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may some + introduce some output latency (reading input without producing any output) + except when forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much + output as possible to the output buffer. The flushing behavior of inflate is + not specified for values of the flush parameter other than Z_SYNC_FLUSH + and Z_FINISH, but the current implementation actually flushes as much output + as possible anyway. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster routine + may be used for the single inflate() call. + + If a preset dictionary is needed at this point (see inflateSetDictionary + below), inflate sets strm-adler to the adler32 checksum of the + dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise + it sets strm->adler to the adler32 checksum of all output produced + so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or + an error code as described below. At the end of the stream, inflate() + checks that its computed adler32 checksum is equal to that saved by the + compressor and returns Z_STREAM_END only if the checksum is correct. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect + adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent + (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if no progress is possible or if there was not + enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR + case, the application may then call inflateSync to look for a good + compression block. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match). Filtered data consists mostly of small values with a + somewhat random distribution. In this case, the compression algorithm is + tuned to compress them better. The effect of Z_FILTERED is to force more + Huffman coding and less string matching; it is somewhat intermediate + between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects + the compression ratio but not the correctness of the compressed output even + if it is not set appropriately. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. + + Upon return of this function, strm->adler is set to the Adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. If a compressed stream with a larger window size is given as + input, inflate() will return with the error code Z_DATA_ERROR instead of + trying to allocate a larger window. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative + memLevel). msg is set to null if there is no error message. inflateInit2 + does not perform any decompression apart from reading the zlib header if + present: this will be done by inflate(). (So next_in and avail_in may be + modified, but next_out and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate + if this call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler32 value returned by this call of + inflate. The compressor and decompressor must use exactly the same + dictionary (see deflateSetDictionary). + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least 0.1% larger than + sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h". (See the description + of deflateInit2 for more information about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + const voidp buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); + +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running crc with the bytes buf[0..len-1] and return the updated + crc. If buf is NULL, this function returns the required initial value + for the crc. Pre- and post-conditioning (one's complement) is performed + within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int err)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZLIB_H */ diff --git a/src/TZlib/Zip/zutil.c b/src/TZlib/Zip/zutil.c new file mode 100644 index 0000000..20b60fd --- /dev/null +++ b/src/TZlib/Zip/zutil.c @@ -0,0 +1,225 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +struct internal_state {int dummy;}; /* for buggy compilers */ + +#ifndef STDC +extern void exit OF((int)); +#endif + +const char *z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int z_verbose = verbose; + +void z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + + +#ifndef HAVE_MEMCPY + +void zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + +#ifdef __TURBOC__ +#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__) +/* Small and medium model in Turbo C are for now limited to near allocation + * with reduced MAX_WBITS and MAX_MEM_LEVEL + */ +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} +#endif +#endif /* __TURBOC__ */ + + +#if defined(M_I86) && !defined(__32BIT__) +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* MSC */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return (voidpf)calloc(items, size); +} + +void zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ diff --git a/src/TZlib/Zip/zutil.h b/src/TZlib/Zip/zutil.h new file mode 100644 index 0000000..2e06fcf --- /dev/null +++ b/src/TZlib/Zip/zutil.h @@ -0,0 +1,220 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef _Z_UTIL_H +#define _Z_UTIL_H + +#include "zlib.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#ifdef MSDOS +# define OS_CODE 0x00 +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +#endif + +#ifdef WIN32 /* Window 95 & Windows NT */ +# define OS_CODE 0x0b +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0F +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) +# define fdopen(fd,type) _fdopen(fd,type) +#endif + + + /* Common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#ifdef HAVE_STRERROR + extern char *strerror OF((int)); +# define zstrerror(errnum) strerror(errnum) +#else +# define zstrerror(errnum) "" +#endif + +#if defined(pyr) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + extern void zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int z_verbose; + extern void z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + + +typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf, + uInt len)); +voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); +void zcfree OF((voidpf opaque, voidpf ptr)); + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* _Z_UTIL_H */ diff --git a/src/TZlib/gzipdemo/ReadMe.txt b/src/TZlib/gzipdemo/ReadMe.txt new file mode 100644 index 0000000..c97d9eb --- /dev/null +++ b/src/TZlib/gzipdemo/ReadMe.txt @@ -0,0 +1,32 @@ +======================================================================== + CONSOLE APPLICATION : gzipdemo Project Overview +======================================================================== + +AppWizard has created this gzipdemo application for you. +This file contains a summary of what you will find in each of the files that +make up your gzipdemo application. + + +gzipdemo.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +gzipdemo.cpp + This is the main application source file. + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named gzipdemo.pch and a precompiled types file named StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" comments to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/src/TZlib/gzipdemo/gzipdemo.cpp b/src/TZlib/gzipdemo/gzipdemo.cpp new file mode 100644 index 0000000..27b1257 --- /dev/null +++ b/src/TZlib/gzipdemo/gzipdemo.cpp @@ -0,0 +1,36 @@ +// gzipdemo.cpp : Defines the entry point for the console application. +// + +#include "stdafx.h" +#include "../GZipHelper.h" +int _tmain(int argc, _TCHAR* argv[]) +{ + /* + FILE *ain=fopen("d:\\BigExample.txt","rb"); + fseek( ain,0,SEEK_END); + long size=ftell(ain); + fseek(ain,0,SEEK_SET); + + char* buffer=(char*)malloc(size); + size_t count0=fread(buffer,1,size,ain); + CA2GZIP gzip(buffer,size); + + FILE *aout=fopen("d:\\BigExample.gz","wb"); + size_t count1=fwrite(gzip.pgzip,1,gzip.Length,aout); + */ + + FILE *in=fopen("d:\\BigExample.gz","rb"); + FILE *out=fopen("c:\\BigExample.txt","wb"); + fseek( in,0,SEEK_END); + long size=ftell(in); + fseek(in,0,SEEK_SET); + LPGZIP buffer=(LPGZIP)malloc(size); + size_t count0=fread(buffer,1,size,in); + + CGZIP2A a(buffer,count0); + size_t count=strlen(a.psz); + size_t count1=fwrite(a.psz,1,a.Length,out); + + return 0; +} + diff --git a/src/TZlib/gzipdemo/gzipdemo.ncb b/src/TZlib/gzipdemo/gzipdemo.ncb new file mode 100644 index 0000000000000000000000000000000000000000..1062a698e6a3d88ba8aa97b76385348a03be998c GIT binary patch literal 125952 zcmeF42Y_8gz5i!!*_v(X$)?=wZj#;9P48rrO*XxU9!T93NP{GF$N~XF5u;QUBq$FA zq$nsT#Sj}Hf=Ur2lpr8aX^Kxof&4$;Ip^GaXGO*T)AycucQQG@`#ryz`OWW~GktzD zXWh!UGuIH!S}2L69E zaLJ${w&T>~L{;I3-IOReuk+9;EvM{yZGGdl2SxGas`p3}xob`XA1@6syssgCGdwF> zap+{$?;M%aKu!Z6PYvXKJhPR{RZasr4SWO*Y^8DEwyv%y>i_4Pd~-UOD;H9Vz?wqb z#U7S0CAbRK1LSSo*c^n-GZnZy9pA=qoUqW8;+}9=ZHTooWw^J6t#4c(ge^1Wxbqwz zNxF2)O%ZMYX(WoOR|Qyw>42LDW@pTsOA!7#nD+Ru5;h^sh3#nMMl0;pxr+j`Wr4cU2qS0ScUtB9hUyC+nR~E8@x2yna(&LYi}BG_rNC^mA>K;&xc`><(kl6 z%vE0V9s1VgRSwAK{&E`lSJr_0{&}y1@73`2=LdCt`n!&qPvBg=p2iYpC(hODX)Mp2 zhjaCM8Y?j8Iw( z08>k(#I%69GRyImlERLl{!hzNW_ICX@MYRI<*se>6NO#8bW#vsg{h+~Dg%>@GsEkW z@VYU)?&TVl16M$+Y>*#MnNYy*7x1~ioCf}{YhX*Ei^q6JrZB= z!j_mDaCIJ5YL3Nq6qc5+%&f#sE2NxAW94QRuA3LO!mPm^>|q_u=W(^TmdTAU%U-j$OVQE>8G-DHE6F%P(vo*1`6?T+)Jn?wq zMo;%k&DD0dUF4;)%v=+{ChpqcY5A6$Z{vJyg?Sj~V=K+E_E_6q`cqion6md@|7=0~`7p03uL$+$bcbT^q# z+t1kJy!>u4m&PuOT|okwG`5=0z~``qQ>O*8Y%{kav(I;ec@mj@>_l@l->;9IWbWtr z`q;^44DXPSonp4|{`uIc<}u#C^Su0?X0C``5p#W=v|dg(hsO?&&GDYw8BTv!p@U3$ zu$>b7V)L@6(-!k%oR6Jp*4y>=_g=bZnfq}LOQ(Cb`6+IP7vB!P)cXP~{fy4xi~eCN zzH?1A-=!b+6J|Ewufx(|cba4P&K*WuEO;L0nccjne%SNP9h5mfc7Yj7`QotjH+Z4B zjA#CaC-W!G9-PC{>0V@hBIoJgQ|1v|?1+vgR@K?W3c8qBekZOSOzi5JCU)`wYP*3Z zR#*l;-ZW5`>3Md=KTO3W`W~+Lg}CUifC=vd)(<}lTKqHlK5Dow$Ls#*@K@s1j$Fet zRo$e1=v~OC`+D~Je)R2L$@LWOs~$O*-`V~!u!;D42rIp)oDh8_Uhh6o|^bp;b&LbYx@u!6GsI9N>?_99I=G9P;oY`?kaqFskf6E^M zkG%MEe>n~OuWF!#_fP_))VnsOFDn5yKtz24ZoB^Vn|y;&`(Icw?p zo$m1!m}=Z-J*?35#?=d>4IHFfY$|bX%p#q)Hs+`Hr#9jEBKesAz?FLOmAdgsH@1<^ zN10h=S6Lq`H;>!L1B^6^Tz)IeFYPa_%6|TZva~e^#SV&<^E|9D+E68oyyn?_`vni{ zXvW#`_AO+|@O5$R@L$3gwM$FT`{MZG_`C3B(x`NOC5NT++s*97-7dZ~*4@>UKGwsm zv@5NT^)&a}`vWYUkCb`LKGq8BWnQtbw8E;)gxG|bi!U9v+RTp4ZiUsjcDT>i+iZ_* zZ^hTgToSva71r0h9DBJHR;wlLaX-E~Qxq?1h4nKX;vHIH{msbu$X3_@vnakOp4~Pt zp}nBCn~x1LEwPr^dwOotvwObvraE2||E2dVhnioT*UVTwOY{;;={*=`y5oB5JxGTg zMGta@Ig^jE0!;n85;NKi!c7xK*Z>=2`r{7uu(4(U?)x4#&J4xv^5PqB2IDq)d=tps zKy$T+9c1cp&v@8GH*QemVGX7hcdLg@GDC19J#4b+hwJTOjf~aRneLtrnrOZ5HEm0? z^)lV;;hlWg)9Ebp4RfctSz*yj@a@ktZDQSH#R@CTJZ1@HLv-ZMIsmh?}|X@t$_ z^e}XdwrRU$zOBPevu(CMb_C<5Pqf00G_TrMt?N^zzqci>&HW~16>;Xwu^6TnBV2REi+7jMLJl4R_-*vBWy+o&89u?z1mZm_*U~q zzUJCk8Eg&X8TmnXZs1RU&N2rZ~S#&YOBlt5n8|Bz^fe>wJFt}R9(>sjhuP? z*Uu1l}M_?As7s6W*HcYTLrmmeQtNs~0^!WYdGSZW%r30hPZ)GtLYYz!INxv>z6w=llA z8(+_EBU@^uBXFN1zNoEgiT^BnmOWl+P<{mI=DE4UyTGFMl4T_JMB4qQkgoEi`rcAw zZLwQzgNId^!_48PoiORZ@pWMIe~S5n7hflHk^Pk24;Hn*Eb9=Y)Au~SZl=YaX@3Zo zk-57$+n#M76ed|xlBI_m>(8z`E%O8#ANH}78^iapUS=!#@Ubd$Ch7WEwfPh>U+KwG zV~)iAz>}r78>@C$`aS4_Rt^vN(pX-Avf-W-KW;@?i9A z)ZeV+tx_NFHNs}Fo{Tm1HCw1?GFZy>BL{d`FV`=BZS_51Gj_^Mq$_im4`#`PI% zkS~))Z`TJs!o&J7PdLIPJgl$l`>ye1u61Kl6Ft5p#k#Af$2u|y9O`%^D|r%a5FL@b|q zkkSh9Qm{7oB78f1F}@t%)^tZd{qY*l|A6ycOo50cen|&Tr|+S{ojV~H@gm3x!$@C7uLEC7uLEC7uLEC7nZKW!+K7b>hMST7W2Y2!IVg@ zE-h>imgWoUYgZqpv4rV{bM;|5Y?4x^+?5HL_H~})b9EnSnUw0ReA+T)#&53|pn*1K z8tF!LpL!>igm&e0I^A+w;yr_MI*nCO)Ab0-=`=>!hjZm`8f!=Ll%21an5W2dK53QX zRSrdEUsUd?ENWf0MQvZTXS2&F)R_CrY2feDz!e>WHhl0s1mCrr|5Gffpsm-9vH0iU zi~0n*ss&cxF$miLpZW&p^4ut9ZZ#{RYZ+#5$MQ!O4zC^9ppXXs}HMBK#9u{|P z`1T$awAWV%BR$DnLi}piPxr7qSDqZ=h0Uj3SYd{FSb-}$dU#l&D<{^u_?V$|X%xBf zge4wdv1>~=cvu_P{;zRiBl${P8MDdbD@DJ>=46$3umx$9na|*^^{{fIwLJ&GGW`VY zmFn!)TV&dd6{fT89IQ(V3~%mxn|?B;xb>tXe-FVX{9GGT|f zK1-d;L`C7V6hLdm0jrZY(?3~Ff228|IUw~>)Gtv# zg}w_V!vvn6`XBXNEAi^DsE<;BSHDGlmS`=~RPL+qqCU%6ysJ0kRd;JFOZD|VT$LYv zXAvD;^&GO-P>HYg?}#^ALlymwu1Z7Sf3yclXn+nQ*)!~Jmv)ks@jl;iBS(a(9$6Q;#!sCmx zGiQhC;b94L4sM`_F-L$K?_qgvTz@%pic$TgHvCbzPj|`23QQl{$7YY4X&3VpJEaxI zz9YuI{ke!@*A~ehOS9D0jkeMHSP5hO7X|Be?Bk(cO5IxU>@hd>9VXk!c6}&cFt<_8 z7}Q8}zK2y%j|?@_$glb=0bg6{pnm47!io!NFG=_9s7D61n(t_Dmf?=^bkM;p$GQGa zy5G^!wMDM?_&S+$>^b&(N`q$|Jm1b{huvZS%fq_3xr0YMtgD-|X!7E#G@r1auqT8v z2l3HAv*+5oy|CR)Gwv=A>tR;m97cYFusuz!t+hUuGSlod`(4ttl9}?^GWxuP_rQj- z1iBi?lPfWocznZHo8Q|m@URJHqHVCZd03ZoKg)WIrMM{`-%PUtcZrwoEYsKawb|o@*333d zwy701hxPEEw%KEc*330i?bKG-JhRL0vh%!j=bP2I?7G=f``6hzufDdlCZ^lzt*}LI zeSPeeT2qSL1^D*(Uif-^BmRa~UVY!z*cRlGp9`=2+R&?itTn#!T5ItX`1a7>$2IB~ z>#F-IGxUt4Yt0SmTak|SEcI^b-BjMSUb!7t)sgy+Rjx?y;*lPN>ly0V>VE6Kc{X3` zdr^4hF{-bl>*Zh{=Ea*`KkIeR{pB?9kJ3Qv@xOn_{C~R4%NpyWy%3an!C0R^=4M^r z_ji0(QU6eL_^Pd9U9-zj&EdCo^TU~PHQ&w6`D1gzoSQ4R(y|n~dOh}fp8JON9Y^D6 znv*Fb9bsxe>wC-nc)Jj$=yH*UNx{BDG4PTQ^P&%!ir*1$Kz6sP;Hb%z2e=Ax``U6{sIv&#fw>LWi5Uo?K5Le`DK|IT8|{ldGkv@y<)8YmkEgP+w$47muX==K8~swvM4TEwE&e+X>te2me>VPo z;&Wx7`09B((TWl@okCAJ#3)4Bynlt7%#p-W=d>I>>Bu#hWgh@Ml7bXBJ=m8kx94SOp8y8 zXYY4PGJmuxzN!^A)O;@fxmMUPb3@{W#1b#RBTQAiI{tx|kJ0AX*!tN0UbD2D>1K6&b==2hm@DH~#uJ`SXS#Wo5n&pEo@Zg< zs=*xW@y!nGa(T~fp81viwLQht-y+7PC&zA!^x~e|Vl&g8WUr9SbEZ0*c}Z**+?2Q} z@#~1s>FQAPd3&X8=jH7%^N@YW4)t_!xH%9%5Z@KbXIvUbIGtwieMz#W^n}C-2_IWx zZcN;m$hJk0WE@BP&tCS@J=)YK>Jy*xu%)Ik))@1#W#)Ua@3q2~o8QKM8|&cZt=as* zK42@n?|hy4n*Exc=#>ZS&F#4CF`A^=VD{jAY@^xE_v>Su%$4ZR$2OY>NY}@XGr#7! z`PlJhJ@2@WZ86`8eWw++)w~sZs};75J!IA1ew`%tL7L)Ct*{f#O3D{Mjg!o2lvh4> zviU6Km5-fb-lrV$u~W@pzBeB`&8$kSYK5I{c2Exad}o+TDRX>myZJKT>Nj|wGUepi zW-mH8(|hlCnyKXNyB^<#SgzP(3cY8!%Up*$$9oShF>j*3fnI!hZ zN78)Ryuog+vFJ2YuH9fBv=6qzZZwlAb9}y=%y(noZH0Zs{3iCB*dxT9iSK4-eTaV<5_6F z?scB=e$rC^Lho60Rb8dLt89+2=$d^m8Z%J&ukx>;modAzMti@Sh+lP*%C`vH!u=b; z753*`BOmP(i}+N}Fh!9Lr?O9VN_0QkW2G`%ab3$*USS>%G2s=YF^M#nbB)3(Zqa%k zDl1j5D}UmTctk5MU9;)zxU=~cm+FPC=vKPa?;X%Hxazm&Iscj+g}?V+BxjU|=(p+| z)#Yk~M3~+u)hF#DSwi`u`+pV(atqV=u*QR5;P*1(lYcv;M?y!sSwQ@vtGMn7z2cUx zvc1!z`M>?=?Ehu;>$TSJO5WcDBW;GfspOR%PTz)Su!rB-rb&m5(}%ANY;LB*25a*s z_aYYY@tx`=(>jf7NJD!-G-s}P?0fJ^H`^|!xO0Cw4dgWN&(naL{|~=miZs5?Li1z3 z*Jw{5)dW4ut=^cRFqIQ$!x#1IIU&%j$DQP1s#Q)9bl2YzBu#BTXDZ3ztLK-IOX0J+&&L0GsolBC_Y39WGQ#H{w{zo zY9q#J@o6u9w!N=7~enLDuZpo^IWrl2Z&&X-Dw_H z>-wrUd02nOfevQf7VEVRXKhw~xm$Ood1863RZ<-xuX=Pm*T`$XxY|z_5#MFVEiXRR zCGz#)TANkI^#xv5JzvEkzN_#z;qSxio_-$(pYF@+IqA9RJ<)x=e|jd_zeRss{)SYe zr^b1141lRGR{Q0!`7y9$vgzr%wz5>}+TSmG=LaZ;}tI{1;!)rQs%It>v2G(O1^S#b7-xs!Y zfdY3h0?+N#>IgS zda!z9fypPnNT+@I2A{M~+H;6+$i`;(jB43|rswvk(m+0i)$X;QnV*}1wP4MusR7p8 zJkOhdGknU2SS{U8I}s1;`>>q|#L_>zayfv7IAqOKNF=4K_u#$o58-it6h1 z0akCyY?-}XSg8A2-pBT~y?w&NhO)-EgN+HBzi4U@c9zz8t2Upu;HeiZD-dx zzJ>DwYy`GcD{PanjoW4f*ho`u%kA@$&pkKEJj#^V68kM-E1S0je4{xRw~f6>I$gP* zcUOF4%oDgK>0s_s7DP)||F2 zYO=n!S~JP*@65K3Rm;es>|XtjZ#BPh{qlgX(bXZ&X4aJ8`>kai(`ei);@h&tjcwL4 zwy8SP+04>A?$T&tMe$hAW>zilt@a%{n_1Gm*hIz(?y#Osm?Fw9)ko|2-ge+`!0Y!`zRB%))e#XL)gjS! zIOTx)HnO=QO!ii!bA?&SyCLj)zW1-;73UvE2Un$~-*3Z17978L6;4;hsjK{_d3VGk z`Z%t-r!@3CN;l%wRWiu_i)f|2n((3(Pb5cV2j^Ylku99pxwf{2BO5qX$eH{5*VcfW z!^=AVSNr;!c;~a{_0_(f4;FpfYALGyuXi-}m(xH_1OK`jXnp>V_QQU=)%UMGMK=h0 z`thVm1$ot4A6ItN4;>z1vIp(f1Qo#(@@YNM9SYlKeO`oVJ<)^0?wwg4Vd^*U7)TkT z=v~;jn+KRXAR9}#cFR}~OS(Dy6Fe->G~o7;Mkc-jXA2_k_}Yf)7P~!Jd%UovZp`9* z4=ZyvcUpuEkMdDYpQX_(mdxzo4P>q`yK!!P0&5uqtgYFDyFp>Mtq!qvtkj+zVD-m^ zdTH-$?l`_vH-%USR)Q}L_=qluucKRU?)Y9kIpphP*5MqM=IhKX<%R&e3hNXp-RR=h z2?Tt_6#>@O%`f?3D@_aT3Qq^!X!%Vu>pZNxYcnqKupX|x`Sze}-S;w2<8JnzZ#6T# zdrh_Y((h0o`as_^3%#&)=KHwE754ebVLtlPyZes$ldwXv40?7j}s2$K35< z!_8B;pSpKrLl|}hqd6s}yC>ghw@<~##<_EEVzk3D@6~u(kljs(!L+5NVkgT4Xa8fm z!vGw15G~Rwvj;lEH_`1yl-=(9#myT6z6M&V)uxLV-y}D_qj8qJViU$U+1!fLIE#A; zTpEq$7M#Xe^3va6lerBy!OPop^EuoFVAtYrz-zDD6rQ8(alC|X4&Y1qEgRdSe*m3; zPqqOsf!1C))&B#L^Q-*+2L5im+KaNKSg1Jh?eLxP*XkZ&G%oWV&qH%WvZ;7G_hj?0 zADGtDi#{TYekQyh2h+XtxJst4bCuo3`@`RFaFskY@XPk08VIAB)?NSfx$oSt}bFE}a&$D)Nb?y&5`8vBc%iUhsF0MWC z3y-g>8$UhTu;S~b~x!OKT4 zH|KMX7q-gnE4|Fas@dze#2oKo*aXL|^|0RNP~1&kx_w-mr9gb?cc?ET&2!9|P8LRZ zQ~K&_X}PvHZ^38vvt0kxxpA%w9Unha!uq*!F0Db)9&+s;*WPihLD4?)FB4wx`o(yy zP5A?1kA(gOUVF-ibJhOxeq5*H&%)n@KM3CeuliVZ^ImA}J8$OtFg}HU8ov;)J?g4k zFMz%Ze-eHZUUjtA#He1>oXKZMyY*kN|CfkUK|YU*9~UoSES9R#VTeeHaER$LBr_%; zthLSkGGpD|emAcd+Tqa%-i^5agw-BmrBP<$j3oCpXAjNjzl=G7D{(a*mUOl+I(b;0 z`84hn56gFFc)g%B!sl6r^g4I&UJomDZMRWg*dk|3V~vLun=5dadRQCRuD{ZYuf*+7 zp5yVAI-3XEJiano(k*7Khn1V{xWl}#70wRFqaI&dW;@O^yF9F&+bf;tg$?E>8pOx5 z3H02-wd;3#d>xqs`I0%qi?0*w)y_7vgr%QbXSZ(bY>%&tYY*SxVO@>RhGb=}$-D1) z*Ef`8~Cb=^Ddhc0I zHvfT(bzrQ1=wNKNGrk{_efE0hgc+mH$8P&(#`)J_%bk+e*>LAM#FjB;zmoBOGt}s; zxryX&H1CqiL6yHzU*k2fhw#_p)%Q?YDq8omZF)Qdrm|K%*f5|8 zk3g$GBAe%n_#M%$&r-@mH?kSuF66l-yz0CqjlVBOevREnbKJr-PJa!UyymWT|C_|4 ztGvDwz3;0Ddk1pl{&E`ldo{3|cPFyLtFUk2ZV{#*DgDP;0k}(A@qL-Kzzz$`U-4;O zkL+niWvE&d+9y;=`IH%_k@cRs08^lp{)?M^xS6BjSO8+IDJpzqW zWcc#j`kIr(mmYJ=cXOj(5SEUwz_opM3DdXY;wyA*OO4lM_=;V*B^wZ}<4Ry82pY!)L-)!k#j}9GQ)Eb7NXMJ2aDScbe49^9oD1!+W^Bp(@Wa zd_AcfD~!$#&0r~N%MR}B&UHGaBU1^-&#?hrWX6HrTbd8^s46VD)a?TXjh0 z{R`}!Ef62ySHL&a?YGnV-AuZ}T-#rDSsr6<0pDd{3(T)sBeln&`LuecZnvul7RJmWb}@ z`hD&_kIx@%%+I(E2h4I^ zfqxbHMy|)>&%l=9&@|imdFs;5RHv7Q#=pD)Z9b=f_X``{Tx)@`ZXEtTVeEHTnINm0Iy3%l>iVdTEualAdwr#2;rn$IU&4+5^%S063#2^GGJFVD?Kb|Ai}ol!u{*V*f=Ylo-#3fx$MYlj~dg)MY@I$b+F z%~xcu$Mx{yD>m2L>+LYff_Oo?ZOqNMzT>j75;ND%wR7kmyZh9&fpk2lQ-n&Zd|H>HlNyzUv>IBF60Z=@c-VErM>x2T*8y3gZUNi z9*?i1c?tKBhjlV9<6iNw&dz?qQy$jEwPmgrwrbOwK<2Klt<}{_x6+;M*Ve z@#5?5+FHAnw|AoVrH8XSaJ|cKr01SyGw#R2if9};U8USu?!m(Di*&^~uDDygbgP^_ z!8)Z&-!ceWZN7rrsjy++p@7!9>>bV&c4{ytSU_#2zGky9f(BvxxN)u%ys&-Uc-qctm1Rn0Qy{cwl`}>GuS}4CU~%i4Kjz>!|d@MR`1T? zI6%6YutVKCW?>nbhdVo!-{M=%@QpI>;9l|K8|~~nU+M9UHI=r~&h=y-Z;r4>*t@*2 z4dy-EO&&JM+0lHKGXE^uvv_(x0nyeZzkQ@ZtQxc$2Z4~U7zCRW1i_}``KT^ zm(l4$)8F>DH+%X!*wov4d#HyU>dy3i&C|hQX1E=0ukq42l5=^-*>8J%N4s{gY(5jB?GrSIuUO9b?yeVUIBr>;!w6m&PV%D|xwxZ8gW+_l^rJ;+Y< z(mmPPCjE++#%a#BW^F^ZUbdS}c9Y$!u*XF5?Qk|Ef8@n?p4nhG*yr_a9T}C+=ev2F zksjYC%_;U2oAl({WlpuH+BqKICFV4Hn*FW!jIJT*uv9;J6yfm(LwocFU;=9fq!2O4ZeVK@i9pK4)gSo-p zV6|>2^Im<$*^jx``_6AMg|^TN%Y5gzVRQ78cE88>HMjpkScdNoXM489)89AT-iepJ zeB9;sA@uZ~MwZN8Vr1LiCC zEB10vR}Y$-+3&H<3;VFMQU4&aWZDrwVkgj#%ziK3pO`MTi*5GOc-(ZgU2UU>J;~ma zTkK3PZ%>1lh~hrIm0WqR3OcBhx$w@u2X>@+XF|1wp!%I@*xd)KVCtL>Q{-v_4JR@+mDm$;6Fk0By96gp zd<7}h0cD)}x6KasbX9@%*gAWvr}cF^V8`N~_tKcc zNzCKzC)Ji(+nh2fJ)^1iIrbJEBkaVDA=YFy9)GH^mB)tIH2bW1){OPyn`PJGI(g~N zv&Z2Mczg@7s`E8_tjD*=PQ*Rs@g0mcwAK3AN{?>^R>~Ufk)AB8?XkFV9=49%Zc}Wjhi$;Ra+7`0d)JP$8*yvAG`8CH zxMh;%3i6SXp0`=8Q#u;H%yT=zYHju5;yWwiJJIUAw!PlFc8Xnt8|~Tu9ugBpB@ZM`o zawhbl_-Oo6;oj$WG55d2^(Xi@@z3M0$EU!BeOFIPJio}oBRaaTIQ6||^NDVaNj71MJBmYeHm10;WfHA)bk(~b$rjPsX-8OgI>LU% zGs(`EXr(LPn$G^Mv|eD&q%~h8gVKrO5iKwND6Q7lC@;eI@~orht>3S<`mHpg@DbgO zGU7UT+hBf2LndJYk$Yvgrbac94Kx)9^vK zerMlPnC#z?ToG>+PV3equk^B?Z$z8Fw8d%3SS`dEgH1}9R)y13yR?NIgLyGn*SUIbst`Z;RgfN;kjJLNp zOTjW@B-W&G&rha3k)D&$>3i&}1dD9TXr55>VLvBq21~fLQ5T5siHYUG{6W&K@mePA zXN@72=hj+1|ASNN6T&qwnom4(LdJAB{oMs!Fhmfl4cb$ zyhb>!S&YsBS3b3VN;=5>`sdV0g2_{}G3=V)_BLi? zMQ)$Q30{1~Zf)t~Uf4En&iD;4Y>At{{+X9FO9Zt z?}j`7H_g}1?HT#H#~17qZ1(ihk#f7-Y!;T*b0^Bk3UjK**O^^}rRG{MA6?wulA*%F zx}gi}S!KIvfyY;Aw1@9g9@dSK=tgscm*4Jg&iy?P>*4l{^i|l<{!ABE6Kk#66yz&R z1kbV>tb{iv$@>?Ln^yCXJMqR{IxSP?SM!!?U)d}Vt8(klt%p^!DxkNyllY?gqS~$W ztugyNzTWHrtTk8gj#r>R)hpG+HURgcFvJV6zHW_dqZePTTR&ax@o6OjYY}D;R^N<^ zub*4~IwcONSlkY<+#xi*JzIi`XJ8E%RVZlCeJ5!|L67 z-CywzWzrbp)*?UV@eOtM`#N}O40G#xuN0P+S*JUXFmHI+2xqIq?Vn1^GSZa?u`Aij z!{9}XFxtQ4&h+gsdtB`6aeI8&`*XJT05PVGq|VOQME3enF~?Zp9HR~4&H#Q%XaCC9 zm+X4Uz8B{Jzr;SGBSzz?=f|t==L|8{9L4zlWBq9d@ZJP=#jqQ;G0*K4(mo*Vq12jQ z?c>yb%u9J!^I2~_9UVQuJF2nrr=kA~`g!gx4)6EndNOze*L%6jCb`!BYVW1?5#0p; zSp1>*%ka0sXW`S>x88HLHL}kG)Om%c(jHOSs(UJTwN6{KuA7im`+>wKOy7lmtIXC_ zUgJW!znlg>iUwZnsh)eODN2dkQU|Rxk3%Qe9}-|OR{d=;A9z@tvj)xx&YMZ|CCoO~ z1isRZu$1RP*d+Ten}RbAs7C^fwl}-H|C4t=F$;UGJpxO z9`(iPY$)~geZq>WR|zWs8%gUUupPh;Fse4%s_&Xx z=LYwMQ6+&-3vGwvF#RsBPXvxzh{xu!pIp?{D7qu(-1i@hJ~WxOPk4?CkiG zZqN8L9$%hoyS?UN`Sf+RaUw<+wDsS5+Fk86Wo>dA)<4{QQ=gfD+(sxioK9dGHoW;-%R?bjxruJ)E) z=3)Jf_Ix&b*Z}i7?t#VGVFzMs`dj8U4;y6e!p--v!ETS{#)a8o>)o39CNGU4Zte90 z2WRsQH80>k>%}+B+==_6^upr}bTHi6m6_v(9pUVvb@#%KbbCmDyC^&CD7Sz29uFJs z*6R24WFF(}N{sQav2M-nA`ctq*8e6wY`i}xZS$t$v$0s9gGufjq!T>8$>ssvSza2A<{P*=Pxn*Y8vOpAd{dpxp`&b6VTU?98uxkf9p?6S5AozX+^r|R-qXtw&W`)4|*_mz}QQS znkiTxr*(1~Yd8o$1wR>&jS)tqV!Xk!cos7ac-aMKJb`f^H@5I{Gvf`b$?Ffmq^D6Xj@HgUr0jB-5o4D${vTa};;L)Dpleo(M;VAq_-aFYLR6VURflpB9 z>fVX`))`hE@h^q^vX7|Wck+xCCflohrgqzv@alZB8fe|uSiqi?G5aa|)HYkoRqKd^ z>1;A#n)_JEw=;@+ZSWdbXzd^4JuQGo@yYA{h5UByy(}!cr~BD-c6>@NibryY*0_ae zU6q#j)!vHki$}I(vf~jQg&Rb^o3iwDDf#*-deV7Z3i|=SbANxXfl~u$&!6APAvq1? zH1KiP0962g8jIH{TuGBh>!E;(tB84+HuM2Y>8qF1deAP`PR!nQrRUlW%OgGLBX(eJ zCij=qKu!byx*EuR|NpwrE+=_T1OHtOXk57+tLi#XpKDD;?k}f-oCf}VG{DdZqi@)a z>;LbQ=Uh&68pvrN&_IgIop?(@5O+}Uzau~7zw#E&$ovre9|`^ONG!wHZt)sqdWnct zM*Xe7^1sFK54gYNIV{m2%shFN(8k57)zE*>UpW&e3}j>T$W6+-)f7ZlPRuQTPdpjk zFV4Dfys+0WJv!lC}<(B zr2Fj@m#sa8YN#*;T^kyve`aUGkC4FcSM>B}BLAO06hrSTyD;m?`pm+#y;{ikgn+cnwjY+-q9 zvZ|`!(*=`vw|;X1eI2^73o@Nj#(WX4s%2j6qx|jpC`>+&r)ck1%k;K;8%ob)JhDM} zAXoLui;(Gh=9GrTH+wTsj8p|LDHpE*ta&9D073A^}|6TF*=0$pv3=~X_t zd{rb@^Vl1aX&TCG=k&#ozwnp+?tD0l|DM3pvbb=Mz=jXuZ)iwq?()z7qVI7rGRZde zIHay*{_~^%xsoN;k`55b6X=zB`{ZJxizqt0DTiaF@B+6S%L87Yde}vBwo5;xY zT{ex3cKTZMp~1QJA%86a7G4@6p2UpcVYLd;GN~1ypSz!!e{FHHelK%~(O-|*`W}sW z6q#bo;kI#dF{%4ue^HtrcCV!scnButT0wvN=k7F1^c=e)(=5E3?+**3G}A{R_OxP3 z{Dr)=Vr%`AV$}V;x95!s($}%br1ioZ`H{rFX7I=N;r?7fEULx*F zYYLZ{f`;*X4}Jflj(1Eg{M6KfPY+MOlF|3bxgfoanT&U9=`=a7KYb{lbkzUQe;L7| z=QszMbY^1;VdAV?2>)6zS{N+Kj1ceI;(k$8eAK_xUuSH|zwyFRPBoEScOX*?akN6C zmbH$5>+jNWv=9Efe|PLOlM8l~m+vT_oZ7K_#?G^L)|^-K>78l|ZeON$AKtU!IcEJ_3c>$>A+diN+;TvNO9g+2ygX{0l=6;b8o~Y;-mfy& z;6#6!mnao{pWNuy65ajBT|e0V{HeWS`#1cuV-RPbgH_%anB$O1HiiRW1zgB-Osa8Pv^TVDbn<)OceMY3O=zH9OOtQ@$b0LHO zTgBPX>i0k8XG<7sBv;Ly)<^+AQ}tt#-G?JTRIC>7wVS@| zAF9>q_Nnju$Io7W zGal+|()@p1BL8|Z#i>U2^X}9Z1^ZDC&^Odx5bX<;4Sd-lmyLVbzCUv?Ycj#KXIu8{ zb#{Pk*vn?UY}7x5mkoN^oR^Jx*_4+JdD)DAJVm30FtQCP+mo{UE<5kCJE^fp?KRQf z64`W@4R_gWmyLGWl9pX|o!72&tEz`!qY{}l{?@ZNI0J7k*Bt}dM@W-iwgx)zI;j@Y zH?V^R4xjEq{B*z1W&C0rSM5DI2K*ZG_==tJN2SBc~4uEw2* z@IHOhhY6>(t2)n2YjG>!?SUVNS37xGHT$RV`S^4C(htJx46QoiZI54ppN=2FxRLfX z-A~%Gd2nGd=b)1xouhRTb=VeUSwk^51-cJ;S&#hZ*y*r3GgjA@-Ituv&b!0)c-eZuPuXp7ew&pOjtXE^K3W}VTj zGnuQoPQvSq<(u$D<=8w$7M-Q6vy*jJ@(=Jj3;7pZb=L9s@H)%*QT!~t&L-9w7xz$H z>P+Huz~=Fcb?&gv8Q#b9jU%tl{?*y=I%int3hNx<- zU3i^yroH5{2ckCS;&NktM7~`62{}~%%2trZLC%Ed1ia2ry#}wd&orL&CA`iu)7fP@ zt4w?7zJLz3Pf+KSX+3v4($!wLx6t)a^tB6J?QKLx($jvp(Y!YUp|$p1d+TI}Lu1+r zFzu_84G!7dkd2KPd3}XEy-b|flLw74Ydl1DiN=uDC6(ljFjs(m3LfpF)82~n2Ou-@ zoZX9W40<2Do5+vO?9{$GwjP)lizzeUISHO0qK9VU*Li~L^t?!0wmW32qZjGRK1WBw ztwB%cS@HzmVxG75y@2};}r_y=O7j~|W> z=b+aG=;B1Y_G<6r8Pq{*FUk4jZ5^`c{6g7?J_auv(6TGC1pFuPzD(S|$LpL^ov$*5 zJj=#NKjgUt9cdi)TD;C#>4u!`33D^Ls2;@mW%$RT|AZfloN5bb|G?Ye_2f%-NjmUN zsSmBS{W`O54`sOQ9_U;;ouR1ln?m$0dnE@GzigDqCW&m2Xum@j!p=h`+0A@}u$$q3 z16g%mozADbvXt)zJ;*+Z?2yVHv(A6Hi}ZCKqsA3pW_m zKm7vrP=b3p7fxrl>8xp;Ev>Vp-PzITL+3^7d}y5qt@EFC-m}hR(;3h1OlN*KK=0QT8WEk5BR|-?@6mvUaP!kbnP5vo^o+ z%;oi0^feWa{OOIE+dpyOxe;G~W&462bKk#u-Anmb9{FP8H^085^pDS+zT&dpAFR7> zb=64&Klt^|4<7r&8TTI8`R+NrF8a!GD}H%Z&p#|Ui zNfYDCU+vW6y-|M{yzj(YzrX$UXHWX!flmxBd9(V>_kVHX>j$A7?*wup>i_va?enroxs2Hpm7Ajbu2{d{de*RfVx-!+_dLZ#XQXSB3iAU`e;c;;7%M-mAe$`Wo^S1i^Nqs-Uzk<|iM~NbrA5*ARaZ{AzoM&LhWaD~m4Sj`nZ%4^sVyVC2X`ii>5d^?)#1V|vRxFu zC$dAOeaylSAzx}!i>~8q`+oR*3y8CG7zPoT@bp0dIdBmf==%SmDLHz*Hwa73aOt(Mjs?Q+ZY%X~rsWzH;`jJQ3 zM+^A78=bi&`XJ(0|3`Eeo28 zoEkF_oq|?B%RR?=FDBJ47G6v|lR}w?BeU9s!n@{9C#?geA!gGBn+c0F?1CQ_|PB!*Lk034Cau7X}JgOfWhu-|=*_;@p`jhu? z-V;fUp^2v_acaCmbc%E}=Av{vKlP)e`dA6*U8}ZRje&@#BRuL~ik^f-8ebE=fOw8h z1@sDV*$Wgt6nQkxA-XqVHI||HzkJ5Ng2mBwns zQwEQ0Q;42L4m9>6x+l2C1w`i|kH(IaR>2F;CGQV;)IxbSOm`IN?h2os>{@D!M`1g` zBb$n%bxQi_seoQizBIlhT-HT3#w0ok{bm^F5aN_w58;hSbYCd{K;qYUjqn7rX{<_g zjIbKtlALcfJ)3N-2=E@fC(WS@1CT-EPU7zZ|K+KGUWGgwOAy``9*qfz?o7I|5dl3A zdDJ%-z7kyHWTGwcX#7WXk`P}CWj-994Wa&fqkoP6NVZ*1JfGC~nfQwc>&9K7s|fpi zn8$A9QR8;vk%dK#pNP&!PL0WlP7qf1B}ETGX7%$$%gWJ1;j_?wQClD2h45=!MLgpq zX_&8m5cG+_imQ^6^ygjCQu{Piibv z{N<#parc1k?8ZYx4xoC>rlQ;9G|n!%E9u7i1aujBm+c_o!-!{6$S<4V8dnkCgLpJ{ zB>MBjuQApDZ|}zCiPr2oXJ1k_M})5-9@!ohJ)E!_Un+zy=y8VCn6L0+;=eo0dkuNl z7?tqP62Hd0L{B598s8P&6@HDUi*5(r6h1r4*QRk$;SH2DvW+BqC^BeVS9A?wH5MdV z)`>NrA-W4`$Cf|=Fdd;CZ3UDUd9od<}ii# zAzh7`i|!2nJ>ff9%saU={PvIJ+t>Vto}JmYFR3wV@s|)nb0VTk2`f8$qI)2N=BPv$ z6aNWe-UpI*jU5Xgjs7*pF1ib0WwTCnKf+E6`<-Mc0rQ&3A}y53czo z(L0dm&@k*ULR=W8TSvNE!uKu3`zD)t;;$nu+3gc8+umJ<1au79G&do925++F+C;Y@ zFPaw-t-+$`tj>!_S2mA?$B0MsMbcI3^`%yG#KKd=sW~ap1CW1HDCbDzd^^;65jx-3 zE8wXhevOTbUsmNcuO+%4VKpBsT6fM2;~AoO!hDTIhTnwoIJ@g1e@FN=AEvN_h(~jC zqR&Epjs1)6L|U?gC^|(vyTbTK5WnUFgm;BUb8Mpf6OZPSM0ey_XdXv-e{09Sq~>{r z7oxYT!+1s!kLE^%4+M|SMZFLi?hc<(HP0xoD&Xma9?lQ>J0rj59Tc`ZGF;yf(0YS3 zcNV18(e&>d(CyIYtzo)jNmn-f#50b3#peffFKEq43ok$(&5ej|OZ=Ma7u^@xTEh2# z=hkPEn)ef4h7?zYvUNeWUZKpT$gH_;@$})#(433t3gXnTR-!u) zR%;PN_aa@*QHmZxJl_xVGMv0YY~W2qgb9`nj^jC;lUl zLGxch*bZ*)T=WX`qj@XQgNaA$FGS~)uI!+Tw#cTrSJAUbMRTm8E8*ANspz)IqdBqw zFL!G;MC+6U&Buuz#}}qGAEI^ogyv2~FX7$LoS$e}ebpSj=mLIe9$It>A!@>~y}2Ws zl)?`pUl)aX>rYym8&+HQ)ia(;%3h&(4uePQJw&%BPR-GYu19{Y$q_vWJPqWhCCtuqnb2bndODta`u=9WeC zMBRD;(QOHPO_-N1NG+R^!WV*T{!?^MWY8R`=<&p(b3$U!Z!P?Jaw5+(34I&wv?Ibi z_92g28^9wo)Bo^9QtK_m-}05`lbRD%JVVe)yD-j!h*P#eg-<3mt$`8$u1))rS_2@w zkW{orNO;3Rk0oc5uHN$(y1tNnG}KRLG@&&Z;va?%HCHaWn6P<616mfAv<64Ps60`R&(0o8ACjp*B3n)=`{Z>x&YaUZz4{u zRTA9~d`8GW0e;y+6+REymWS^^D*xw6*+UgRA6#p-M0Y@MTBjm<7_wYz?~7njGO3#3P%+^@XAf;E~N=(X*koc13g{GH7j%=(XfUYh2nxPhay)QfnB6D>bb@(!00$ z!Y7h*!aVi@*BYcc@MSgolUf@i{ygHeT>`oW8MIzXcrmhRy`;*((Tq80J(Zr(Qy1(@ zYJHe^^2wvto9W%#&AX@dJHoH!-P0Nu(LIP?=f;W7t?d+DMOs>?C3+A~L+i0b_e4&uG1RkowdC=n zY@!SA!yTR3Cpw9qwVq1!aKdWctmsPeE4#;{kAh#e(?$1%)_Nn+I;%_PF^R50hgu&e zdI0fgy{+hSQqUSu(Vf7x)>U*{=x>F2>_;B8j#qNt#k_;okcp=X`L(7`v}_T|zOv}0 z&|1$dx`g<(K2~&ha8?}fo~!lTopyXNXeDEz%%$QxfOh~dLXSH0kePDOjy$!_w1GRq z%R51QdEAMEYIk-VOwuMmb+Td7eZ};p+~XLJ{AFOH$X_1! zlcZh2wScQ6mdr{m4qC!>q~psYTm`W+pT#v8QD(f6-}U@1bMo{cXL&rY3Z%)S-mXB3 zJo+=@mlpL!>q{%cw?hN&Ya-P=zA@F>c_xMLg|EU_<7@D}@qO@p@wNCmd_Vkb{2aV2 zL|fwRj|>Cw)4^uoXX1n0>#PRVAf?2w5z{<0r%@Qa^+`f1hJ;ziy<_ml;@9K5aK9@) z$z55gR7%=KIv8p+A&dDbNTN4K zZ(%v%EYj7&)5!hN+^^+cA$K}*FUGxjNH8D20KX8w2)`JAF#Ztyp?F3v2(8(ZGJHoU zc}X27{xY6NInSz`xb;S;cc*(={h~KYoSGdgM|X;w{y*2*_;c8mGJ$Q_;Cry58zw;I(^DO?C5`=$X$5h+w4qe`F>I6J``hf`lNP7wK6%m# zE0qfRzDv+SG5?plSf#NPzkA`U@O_E57C)FU`f7)Q4a3XMs!Et5uo8YJ_eL= zDEw&r82ng#d*T>C*g|sE0lFi;6TUOP3w|K?%D6j__=@0}j8+@*Q}9#qP55c}>G&D= znfO`w+4wp5x%heb`S=C+h4@AI#rSz>Vm^KWej$Dlej++-z)!+Y#y8@p;HTo7@CC?J z=;V{WG-|4uA(bQfyfZ4(^YI0E8c@iqQm_O%54t<|V`#7wX~)rC?k~`Q>YChNP6Ig& z{CjCYt=HUNP6Ig&{CjHPgEv2TQ+5B#^pQ=|*d=pLPBm^?#Q~nvPFc5kdh`0t&BrfU z1G%bs!=^Mb=!BJQVOD=s zsaI~^Y^t_wUA27mNrTo_nW{m922VR8%B7H{TQ@9Ux6!QIxK%#2{P;C1&CrT2vNbjNwXl(J+CN<;CA}nPy{@odHr8a`S_LYX{_J0a`}3*W$W^->o}h4 z_?4*%DgIx&b@__*%}3VO@>0|ZJvvp}&)WX|>*`W{QuQaTUVW4x-8tx>l(Z8(g7mX+ zh}7rjt|hLBf#|dLKD-#K@zBXYMU+-mrP=$tKEq@Bq?E+pzrD z=ByY`*tBldU(>>>=GE($Z*A6F8Iio0b7#z^hq-v(yroT(7MkJpV@8@eGv+RxJ#XHu zNz^ht}Rn_3$~qqVhM>&B0_ zcHlv4mv33Sbj#XxtGCukg*NU~n!dAP`IckrIDL36YhP!~T{Ly!;-!lgFPt%V+W%|s z%;O_3%7kBYfXF$>DQ7dx3^^tL*zlC>e{Vhxf;$gJhFsj80x!mgYAR6Pbf!WLk=_w0CX` zZT4C^ds?@8J>8wV)RBOfNqMo6F*rJaARo|d(a5yZL#$JoKx0FovNLcc;yM&g(XvWc z2v(n6St7*KNwzOgmrJqR>)zJc2^UMoM)sGMl#I|ubxB~2$)rN_)=4jsg?sgd0k#_a zl=T5qfMhg2I2_-vsV8idg#D>-BsyMFf`*NzQY)A4(Hz*fRFEE3@W*8d+$dy_W(PFX z2Zm!1L-_=8MPqn8JUrqh#xj8hSW_BEMKfcmxF#1i#fIab(FN>P`dC~*@e{f^M2 zq`tH2%ZrW0BPz?wOcZUH$0VCtw{F{RJL1EcYEPM3Z5hs_p>(uUYe6!gjqg9K#-ph; zG)j)q@TjNrw8>i&$-`(|tqn|GzN;^qj%L&({E$RR-@7-Q3Xf9wp=jiQXSks`CSAk+ z46Rpp3?gw5Z&={@yzPEwdypizaVaF>z9EtjoeOx9Y8PI*_ z{50nVha=LJ2pP6WUMx&!VtDTGRr$gnkc#l*rbiMJz9SUPw1Ew-g;Oxdc{RKewtK3l z-Kh}-Xk^4Q6~V%dG!=R>%OgXA={m;mIU6xhwPC}Wit5VB>cEz0I9@T57)u5=A^0PQ151@lV=jASd{B*y zdbEIyD}T!K#^UktDD9v&Jg{ysyr#;l0*7uWgNb+)1807-!7^$1tV63*whh_35*Zwe zWCDK8;g%j4eHM*+^!yQoWvW+Q-Qd{h=wX!{%Y=p!sZ3X>Wv1SZQEY;)Z6o@Fm!U?6 zUSpZz5gB`lALBdm-0ih&YY%no4)WGZPt)I?^=R%y+0xcWs5bORsp{|B)!r8jsv}0B zlm=qZD+R@>)cQ$WQm4_;;l=PKeYhSCls#S1je_ylL-Vy9<6OUTe)7P=d z>u&A}igUf<8t1NHcR!A*O4S#n>)Rfbn88Z5f08zsG%b#ri>isCXgm^C$uJ_0=pr+R zh?GEw^3zU??BHvZp}ihv3@}Dhg9+1JsMw%*nz5XWfC6S*XPUEgIMEcC1}#QU{~Fmf z_z6UK_cLaa>=~!*vn@cJGOE$p*|_Z;ok2(>D4L3gM?|$kOTN>uTJRc8quT+m2^4|R zBKs$kDH1UNCJ#IQ+1~6ISn~yOVmNBz#}X;@l3KNDm7@2EkBy4x5h_|Usm%XuZc-kT zZ(W`F&8j>%Xwm~!fd}1?lUS4CxQFAS?WOalK#o7Xj|4bAGRkwDqv`#wQ&+VUj82cI z5s4^@%kkFLE#-GTwPH@vRf#T=#-r;!5sMkk&Wk5Vq;KMf+KbH8s)pk+-Lz%Un0=>7 zi9?!iTFR1?&*?vKpaChesU z$0J@cLG2fWaQ$;i$t2E1*ZF3JY>J;RX?}E=;5mxj_ts@hd(2Mg{t7&`0LvVuz&{?H zPy>{W#$#kHr|xMZ4CHlhsr#scl%hwD!*s(=!*uD+gtI;t9hUF%G|HUfuBonG7u&FY z9g4fHBh-&JVuh$P*sVG{`dK3icDJ!YBq7X8+gf|tf-Dy8kRkj!G*j;`mXe4psY3nD zOzQG-Hq53+7G;wkQp8Jhuda^HzaXv+C`xla))`{f)fG!msb4mRx;hc>ES{k;3>P^O zaHOs{3B`TAs=7Mq9J6R=fk&duCH@G#`O7VR^~=Y=pwDSavnXfLimayn4l|gWLxE)Q zR6KrqY@m3+h}KD>wu^@k>hPj8jO0m4UNHxC(7=cqC|cjHMltC`p=3r>X2wZ8RA_w= zQJeajTUt8$L+Z%H5QBh{0~=**QhH?I+J=%6-NTnk6K>hnA7nOup#DI4!}|K8N7;I@ zty|KnBawzle||I^uZY)28cGf{HrAAGj9e+db&>jbc|)W=S;4;p{M)#(hM|wo2R+K3 z!3bvK(Q|YMgKa{FjHF7OEE^gsOYL+lRiA2zf!wE*iqV)@sEdtgWN9A2X+n=d@>) zsuJbd+FvC)QdQMp(diDVs%jHltMuGFq@$SBwI+m!q^eO}!T!xXZ9Z`_zV|ujs!4Vy z`QEk@((10LXRb4I$5vTQobOq*xP`;8Vv)dSroFR^TnvR)z{e-YRg$?n5hXbhPQ!th zgTboV*`UxJ^(?a+4W|y!;TO_oR7-wl@x(+boSYJM!YY&e$foXztVb|r8g3nSvTt1? z&weyBADy`gnn7AbwQTF?Y-{h>$t**)i2b>0jcTn_Wy$h#Y&4bisujVm4ETSl6=|*x z_=7@M8BUhIsiNLofz?oxNU7@Y&|fua^caJu^(GyQuO& zvsm<*N@x7?465-gKFwoq@Gz5R=1B1oPKHNVQGxU#1H&2&Lxf7NHjpd4L7_#%Qk+v4 zCQN%PVG<^#;gREY5_$-pl@vP>^qDVqSIuQHRIQtK)kBst#KtTHpvGkytyeP|nI#)v zgCtiBQ-?6A_?nF%)TI$@k<8&_ROaMjUvBC2bYI5E)EGS##&9Oayu%mr z)K%+@qYAS`&3aX}UbT$HjD4$QeV{B*?b}mjW`sdkhPj@MaXlFTuR(#Qu|6UMjH~pU zaGkDGtj4kgv#OPltOL_hsS=uHDupQAO#5F0|M3sXmsv48SlieR1iIR5VL$-yfkYTEL<7zk?Hbgm;t86#)1+h zhURyBDta)mk(~A{ShR1Ic3pcd1#&_uyBoY>MPR{VNgLQm0B?)-QN+P$lF~`{iEYV@ zzKqU^Fy{+r!U#JS8U!JjF>Gg@zx=8 zOIrwA6B08#!g32szIkgVwm1W3#6Pt>s39vL+E9Sdc%r35G*Xz?Q|YL!W#5);5l)9M zzgSw^z+KHG3^bM{!`gm4hG~R#imCR5$PoO=5hf+lbtOzibxG+((+Qt3ZD4%XVuDVR z`f+t%R$#NTDYkh>UTt@klPxDq3#G(20-<{$@ zk+5k7iq)u`!dBzqk+G<<3k7bOv&)qg*;T=E1||a{c}A+W4YWXjXXvq5pOH33pJm@z z!=9;!Gj`{QtiTK;D0kF{e3E3ttK(VBIm|78M8luL^6DkV)^2Q_-6vc z8DUeNmtM_DA_;ow8uPjHURRe$?f3A=_hfddJ+)O+?2V@OjQP~8SLrF0B-B`~q-QZB zPL}+Am`gE@CQ?dvH*B{HO|tqKVa+IAMcK4HN}F9{0l}yPnV4s>QSEw7AnQRPCOw~J z5?xkOr(?6buLDE>aB_9l*x%W^X?I7jl7C30e$TQ_+e%x-uew=9=n~Tb>+0WFRoQ4+ zVk86o-r8I(ar-xByf|ZwSTx0GfQ6=&xb9PV1)j1grGZ^j5lq0dB)#5hik=Pd%ykX?3}cZN86O;Myw4^L)@ zXqO+&*h3onOmXeX^$byr-k2dmL9_O|e!mZru78^GpKws`jg>6~vaeKaWG_%SC3cG) z9o;q67!{hky=Kf7UA(CLZLgl!9U16NN5=*e{cJ#B?a`BrMh^${&|h!39WtA6$!D(} z!)QYb`!pmEY%VN=>#YkL^>|Txj>U%|rBQjiy>0y+o!({@?CbNoLYvIMjM3d5HgREf z_rw%kAtr)-vM#Qp^#%L4^>wp3$?k(BWK*ll=+W>|w~mzA-uwX;@n+mX1i~P(wO1DzB;7 zXahzwc^yrq8!-GVEmg9wMX;@rf9vF5yZj5YM?!CVkezSJGY+v}h$%+T0JWCUV_xZl z(F&Y0d#5FGrg!K#aNWl}R#G(YQ=5#tL79_C$&hIit%hgX+@)%{P?x1cZ(`B`Pr>E;^flF^kQl)L4SXc&-$m;s522}gop^|ZGdfG#(2E1LJ9o<`14S01J z+s1=!Jzc5>q|rl3MqZG2wi2R=4ebiCPg&Ct z?COP#S|PVH6ue5+3SPm&wpnF(JEOwY=4>XAG&|HSCj@qPcC?^Q_0RTTpPr5_)tl{> zvSW#;^WY!R}aYsHgNxU)@?VGQ;{ zz4RA?Lmc_x#pbBH+1%FIA4KVsX7jf8_Aa_Xy-_(gr_Ih)!P?Q?+_#IUdfObo+q$=Q z_w4BA4eXsvX*EAY`-)9L3;}xgs$*a%5eu(g9@7I*=iSTe4cxk0sfQx$t@by3(a`K7 zh(_YP`$&$L+{w4vC8*jW(EX<9u9YPV7R$dAbT@h;|Br{-p(eWnL&)?|ql2YSJ{}sa zRL!m#hdF?snADBv#mL3-EHz+?#AOn8ZGu7t1881}V^cSSWcq0~rgGRXScp(IO{rGfnDeZ-$B-gdz&@-6Ec?B5L(jjZIP zkgzHsFJ?z+C>Y%8F^p%~l9$$Peda~_IrkXh3{3)=&?{C9l&pA|Wghl|iWZ3ZZLL_K zwiFcxB>^Ct9x+4!a9EP@Lv8D(*xYp1GSTdCS*cBNe&BP=u5>hJ2+J~h?r z)~+M_-kwlTdpir#G7y%NO!TKQW;zn!lv!97S0yXF;l#k6%6)REYEV?Y^{FyGG9k4- z)%Z|ahDLh3d?owoaqj4o4f2(oY7kd@i=L|C6j!HpF%ZPn?T1kz9X(yU;HXKtUfjYu z!NcYOarO0S7sFj#@OqQ{_U+J~>nqg`iC%(U&Ul&9lFCEvK&fn?pAdbZV){*vDGjqT z0K=d4)^BDYVoFPi*yAn9{4_FQM3_fSDi|k;WiBE!LvM$ctz7NqJ7Z#4vhyUCsl)r( zYha3|amsNWg~3`DWs1b=>m!!zR*y63Fq19qELB;V$=11@{i+FBd5hU@PZ!dYEwGeG z^T9LZ3rh^Il#N3X<0h$?f!J*B2@}}!Ey*;B2uFiu4z0Ok4j?gR(U?^%G9qhc-gufb z$Xe%)hrJP5jP}xz3G2mP_9#pDW9%gNCX#yMF1%FZX+MUS8b$cEko$T=gb`B{5e@y! z%volXdQ7NsJFk^-l16995URWhYZ{=p85xcrP_azZc-yF+WG%&$uAAbH`!r-{jh=KK z=!%#zRGEQ<9fw(@nwv(x3_6X~3Jz5_k`~(GO5CzQUj2+>wyK;$u(_Y|jq60F+@|4Y~RCp7tb83CXn|aY~P1muJY`?&E+luGblJ%1$oa#10LEWWwbs~~J-zE%2F@45P zGgxTJQK1otRC}hS%WGDw#yH+32PUYav@#-QL|qq*Tx?CGqB5@2O-{2ZX{1^wM<0j` z+U75<#V-~T?o$cAtZ;g^5HUZVA(jrvh?TG94JBp|iaY)?zh>Cyp0MHVKlozavGDo;|&pO-^#mOt;>mLt-YtyRfy;A^8Il zy;)B-vgYu~4vO54+4XC}wFBXSuybI+q$wV$xbMqMTvw-$<;;f2>GH3uYmq}evqK># zfo2&si54qFDkq1gcxuJv#`JZ*>&HxY=880@mKY3lw_B?^htSOq`!uJehcg2W1NG+Z zK*IryuLNUrJL2qAZ;02sJJlPK6}g@25@M&<4M~%_XInp?f8cnwEPOT`G@jT()DfF= zKxZNUiF%YnInCQmAd&o&%zhcQLMutHoLrd_OLAvVv!*U7oBVCQ^>KH{fBis%Em!>k z`zECl+jP7%)gT6|`sheH8qnDuRV8fkTPYicF?-97{vu}&v_Cuj>yLK`fr(GAK`_wR z*dQYkIbooGk8%=edoy1pD3MuKY01HjP$^4GSK8l-gB4YEyt9+8;$W#RsAl9rDTHQa z{b++pY%o!%9evHcx?~3%Bo;|mtgz@V)5-Mr1WJz>9NIAj$x(9xT~`hn22u@0SsxJ2 z>*^A2Xv*N|s2p}UB4ltr-MX~7Fp%eGd41Hf|EMCpIXY2xu)MrMe^@||yX!|QDr_yQ zBc`r%8T)j(CknF11dKA$K^$~<4j1Le&S|MNl{EvE>jr8aMRWY9a^x$PYv{8{P%Ote z=2;vC)++hJM^jCS5>icxY{>YC30HA*+>3zistOapA8z_ z@4bBbvzE@h*?#fD7WefyC8h@ib0P*~$@IeS9u>>yh2BS9ywd0)4opLWbRN?LNryk3 z7#QQ=GzrmR(}dV{c&DLT8wv+&^cI`q^y{qvvD`V${DPZPGQ|XwBctr8R&BE0YZro5 z8^-?r<`&kCurh>{SU^;Zjxa+X?2n|(#J~*3{LQG&-tFSS&c19Dq38}+H%Qypp_;#GEt$c9@!ufy83|LG0A1(z>#*w0ol@HfZ&kI0Dt`~4P~_USVK z)?HpM-@>s=*+RBHVr&f#6Z(vX=5_YtLM-W+t-Cr7hX6SB!P$k}K4!4Xw`m*?VwCIH zjg9O0){oxdt+%XWC6J>TQtc7>vXdr5pI^`)VbOF->y>yyW~DjYFp@2VA81MuiI{MX z^>}(y{hmm~oK7e&CqzCl#Bime(N87kGqhXwtLxb?p9a!r9%RS1p-^u>HYCDyjbRZ{ z*d-s3pji+t(PpL_#Pu2*;{#LrYysTO(tC)vuRJH5PSGfo6j~oN*kkIaMDi_l;w+wh z@g-?kK48(yJiBnSw?9xX^k=Xx+Q9BQci%Y#32_pb?8wzcDHLJQ*y?X1wkz2 zn-vu^(e%k-V(ost!YUz%%D%Z>(cs`(I^@9(3|5X4URS3Z?7^AB1i7`p!jNf>zUoG9EJlSXj9QzL_k^6yn973*)G250 zrXbNXj%mE7VF(9Ov;-r_h3KT%Q#|$8)28@lzhhQBq-Y^@nxf?}*yMX}Q_$(rgtRiY zKNZqzzPE-(lCL-w2J+3oaoY(M2AOnvf!Pl5^CgaT?U^zx9yXFl90(WXpr&LRDz*BN z?^F5x=TutFm#(HMius0NVIm5^(idOzDh$wH)G}Y|6(Slm8oSUN{Q8Vs5&!IIGkZuy zhD*gVq+0cfY)x5qh&8n+5>F~}N*Q$kbv-4(96mH-PG|Hs6}293DA_|+q~S6&@dpo6 za_|QlQv%F4<_fuzNa~^7l-RbXEmk-!G|{O_OXnO-3>4*vzXH#xyka;-fp{Ezo7(6( zQ&+4fz?-98e96*^k>4d}r7G9$`$0~Rul8~$!0uH_y_MUGP^L*jzeJGgkpg}T*T7*=U~w@)nQ_X??hv%d%W}noA@FVsgiYg|~9a&!?eLF07S{TZ@5Q8Z4I`3%r?& zbY_Cb*31;D^ktN_O(u?9PAV5J3dqHO=ffYlL`yFGy?GgKF5?ndTBh_RjZ3&mN-nG| z245`T%ULyCbpuc3((V`G%{`QFI*`j#j}XXeXcpSJ!{yO{QonQjev04I7btbm(tJI9 zkxL~%?eJ3&$OTWWT$&~DL%BDi2z&`XMmxAnYKc-!a$gRx8Cu`PBk)n`>OZM_0l65; zg%I%{wQ1hD)`Z9AKAOAseU7%HtSi{MbsRFTpH~ zy_h@&7DKndKNZNC@y-4JFu3GWNP*hr=2!lgH09pq?blXjeBVc|^53TZ{*5i?5vRNh zh2Ow~C!62z!WX%`wUWC3#6sgI|K)PL+b_(y-M6a(N?#_rVhQDEIxDv@9dv5J8&SuXv2iKmaYb2_|yk}!e4L(U7~ zuaM2xAxnRRzbRXvm(zAG$N%kCU%Y>@Qnw(Ra#8Nx~ZQ< z!heQNU3@C?wiVsn3k}dL7tehIzP=N>Ifd)OS_UwSib?jTWKe6 zN1lF0yq{Bsz4(n%Cb|67g-O!A*l&E~qS>7`zb(*T3XkQI({I81eaPrblZm3u~h4KJ>5qHQAoK0HHtmo^*MAFMtS*Ba=O3zOv%aJdN62e~ABI`}g6auzhn z#ka-aE=Mj;hQ4cQKS|osrL@84;8QV>%S%s0j!vSl6c{CsnLsWb6}Z7^*JqK(!)F?Q zxx`f9LL2@g>wXN`=%y}Rcog2067LWA|FGK)q1_;t7a@Ogf$9H57XQrqBKY;s7ob-x zk9N>c$)&6UeopJe$Xl)t%$aUpS!Ssf&obS{DJMbP;ad|im_zlZRf zsB0hUmodI0Ke_Bu;CbRNJIB1c|C{i;3jWK*t6zqWAMnTp$u3-G>+w>`JsqSdpARR1 z1u;9r=5<&BPdlX97d;Q!YvVJ@xnuG|FYd=fkTA&+DnHpTeVM#Qjr1M^}~5y~DPT zgS63d>PjvR7Z@e%igqr`?En!SddbzOHg>}gF<(rMq^DSJYdKzO8 z^zI|n>0avd^%o(Nq*)G+J<53tuWaFujN&9NbaiEFuC2inJbo)nE1^^0&;1%KnQ*6 z!yb6O4t)LO_gV6t4K$%s7emWK$i~Uk!?MNb1b84Yj!c{euLWMB-hKE8dHC=mv|mrT zeE1sfXQ1&)>fvopxgK=hCGGid}AZ&(>0LtcD1-^ow>?zMgC)zqKB zJ(Qym9zX{qdE`>#2auCH~MazXUz$Vr5BD_^D5 zHtORak&~0*qkvps|Dvr|xupDf@VC^754V7;5bi<#e7MG`pW(}m@7b1j;@WD%kLW25#1$4U*w(aHs?M~nY{czCgZirCi(btKqqXXILKkh%4ZQ zT%!KMRml7{$_^cJfp`dA^d-{XMLpbiHhqaxAAeVB(idh`t{+fj9uOUZ9e=S84}n8zJH=V1Qrl}2len= zA7gQN{(nUNKE<;e{rkl;xNaHU^Ca$95%wT@Ax(Q&5AN^7W4Vl7E*U=;*?8vy zXh%ogi<}*Smyf`&#Y>nQ@O;IoH_7)L;tKqN@|=jg`Y^Z^x}AC#|78ux`Bi=l?54Ia zYCV&@!2K)wmml-~6lqVmknst8>mtoK`F|p$RIiooW7N@IPF`im#tl3Im9+mYl<|&* zv`73-BaK{G@56WC!v&Q8%am;;daJh_dAPt2W&UW(BR=oq8#RuOnl3TX~SM6!j#q-{D8B z%=pRw8>|lFNQ{Pmqr3uXWb_Df@pm@d_?rLU0N0J^$Znn&;87t|SY8+U7rK8(JK6`Y z3*jDzehGWn!S^ZXx`{G9+hS5ZeK!5Y6^sj^X$bvTPu&(mEq#{{Z-hSrOD|`vjI4Db z=Qr~l4_2UaEf%^C1Nh<@NLB_l-%nM2L5_H{&oPHghQ3HL~;s1Rr zgLfB{^%(rRXCZBod~b5vo{wLC|H1l4(GPQh8)=^|WR@A%owS3G1!!By*3;1WUfQk; z*F)nL%JFCF_DR~<-M0PJtyJnV%ASNz=fKpfA5`{qF;(z=O#2Z^^HkwwNGZ#idH^se*=9+8e*qLG78jkVD`VD24aq zF3(EPoz&xx>Caw(@9#McJw{!&=})BY9w&|umym7)^awn4p81vk zKdQ;Sr{UF!@b%#_QZVUKsLtlOd{twc=Z@P?f5}^(Ld;(p$i}thwoq7hcl%cM_ z!cz?TtgiYZv^)o2P6E%nN&63{Fdn209uHo!yjV~CJ+@9I&9AH;eP$E&OFRB&`0+5Z za}oTRq>iV9gU~MU*Ini}0nY^94xXgLJL5}TP+o!k4u8G?{e|!_GFb>W+Olsi(09*m zE{v(v*O1@)sH?xGoW-EQ()l4g zxWMVQyQ_aZzpaWX}3T_55ITd_c&pVlyN!o^jX|*yq6`h>a~JvCR01Dq zKd*((A0v}x(0ls_4)ufOQ`QVx6&TT zV=wuClJ+&xjqRltJ!<9Y1JM5Xa^|>AIc(d=W6`!Ir) zd9}l%2iqC%L6Z+{y#K(qwPW!6ThJizWAOU$2l##}WxQ~k@1s;zDEHn&*iT-C3{_Eo z=TKhc=ze(m7VtgB`?>J-uc((6==%?Nab6R1H_AUrxyH!vgBI_*D0eY<6SUlhtUL{$ z9*6Hfd=Q!Y0)9i#_cQYNF#6<|mKVd#=%^;fK*aBdmtD}i5L&(sUw(zW6~bH3f<6bg zgg=U$E}}jKo~LX+e63Wef7_0HK+~628{fyE;}PV}h5h*b@jT{z$ipV$-i0jIf%9DC zs>I6GGsww}wjH`@dnof;%Frp$de7zHCjGB@K2Dk6N}kI}x8@T1DCqEEGrV`?k>UJ&=w|QNIjQkAVf612PL%26V z(>c`Xzh4Axw3E+MkIRuUf!ipPSffxoNb{s4v(@lA zfvkocem(&Gw-f(yr`^0JK>tD+?*!M)$p2b?T{s<`agcg`H;=&0w4G*fpKi3 zrH>+>3m>8GYmt|mTIiFBGaWomxWJ(<^DFeB6X&FW+RH zWit67fc-`kpYqowHYJ=cA4%ZvZkS5aK%=bBG8=J$Oe8qFNWyv;;{1kI3j{bPi)Ev7G zb2B$hXz!-U;pArXeP{bQ64SKubDTy$+7$K!CIvj0Aq#y`*qn$mk~|lp?58qjNz@$i z`zp~AWV)r*?ZvMY%Zjr9vTB@<=p?SW*8S?7rt>evlmA6;7gMpXd+Tuf@lxGYGVE8F zKorAr_5O8V_|?T{eC)Rj|24ETZkFNyiTp0Lewd?_?4@BEqF%>*gW28zJSX$qL;B_X?xvTQspGeBW13JC;E`$HP53Y2SEf(|skiXR)aD-v5Ab^$ z$gkk{V(?>@P|xuzc?NkfA*de^&a^>Qf`BQLI*D{laa1GzCHzWS!F@mJ&gFL$f0<5x zj)y6qIz*<+`0XW91;6hmT==qL<8g z#qUcz!o&CC&$Ll}6?!h?cOK?BFwcQJ4y?i@P3jkp`D*xD(=25RsP?Wg>SQzVM7?y< z%$j)i@?1yz{|J$m(9|kv#!ujPKF#+-yr0keoy5NyU2+G%>xt7uSQGCT5&m=BPw=}8 zKP(~YtK=tYOW zg$-IYi`o>v`&U#FDm= z=PI6g`0wYy*nd9>^AyZ;V4ef>9GK_8JO}1EFwcQ`4$O04o&)n7nCHMe2j)32&w+Uk N%yVF#1OJaW@LveIZzKQ! literal 0 HcmV?d00001 diff --git a/src/TZlib/gzipdemo/gzipdemo.sln b/src/TZlib/gzipdemo/gzipdemo.sln new file mode 100644 index 0000000..b035304 --- /dev/null +++ b/src/TZlib/gzipdemo/gzipdemo.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gzipdemo", "gzipdemo.vcproj", "{B013F279-7272-47D6-B8C9-B583C2BDE1B4}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B013F279-7272-47D6-B8C9-B583C2BDE1B4}.Debug.ActiveCfg = Debug|Win32 + {B013F279-7272-47D6-B8C9-B583C2BDE1B4}.Debug.Build.0 = Debug|Win32 + {B013F279-7272-47D6-B8C9-B583C2BDE1B4}.Release.ActiveCfg = Release|Win32 + {B013F279-7272-47D6-B8C9-B583C2BDE1B4}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/src/TZlib/gzipdemo/gzipdemo.suo b/src/TZlib/gzipdemo/gzipdemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..4905ab233bea87b742a9e3f72eb3d7332bee35da GIT binary patch literal 11776 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/TZlib/gzipdemo/stdafx.cpp b/src/TZlib/gzipdemo/stdafx.cpp new file mode 100644 index 0000000..a181ab2 --- /dev/null +++ b/src/TZlib/gzipdemo/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// gzipdemo.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/src/TZlib/gzipdemo/stdafx.h b/src/TZlib/gzipdemo/stdafx.h new file mode 100644 index 0000000..7680072 --- /dev/null +++ b/src/TZlib/gzipdemo/stdafx.h @@ -0,0 +1,12 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include +#include + +// TODO: reference additional headers your program requires here diff --git a/src/TZlib/include/zconf.h b/src/TZlib/include/zconf.h new file mode 100644 index 0000000..55d0b74 --- /dev/null +++ b/src/TZlib/include/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef unsigned char FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/src/TZlib/include/zlib.h b/src/TZlib/include/zlib.h new file mode 100644 index 0000000..62d0e46 --- /dev/null +++ b/src/TZlib/include/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/src/TZlib/lib/zdll.exp b/src/TZlib/lib/zdll.exp new file mode 100644 index 0000000000000000000000000000000000000000..2ca08c591a977ad1b7505b3b909a662817230ce6 GIT binary patch literal 6109 zcmeI0Uu+!39ml_M95#R<&Ob;(0wy@YA;H|8&-R(p)=8WYH;!W*hXM_3E_dt8H5cEp zcWx33wQ0ozRZ#^J5>%p69uVRom3YVlm8b-W2awvT52&hC9;y~qRfR+=A@z?U(eM0b zW^ZQ}^|=on*}whHXJ&S1fAeSOcQdPc@Q)9Fe_+>*Km(Fi4M){-r>rx|KG_RYd3}#p zmA=jYN&XF2qch93!4rz9^mYFKd9BFAOrrmQ%BW{pxQb%L{9E?_>;JL`R-p&0(Tg>> z0Rh(HM%;v((T7`bE7qYO>#+eFu?d@T8*axIY{fR*f$i9VJ8>5Va5r}19t>g^cH>?Q zVGr)ZUhKpD7{&w0A&&x98uc^z;cBCSaR5^7N=WN*Sw`Aj21ZKcwP%5fCOBAac6s?Aok#B0=CR5p&As&uij+&;@IZ&1;f zHZP`XE3PkfRPENXl=7lV-124 zNqfp%50oqCEK^!JC{?7K6j~sTG=-^p#*wDLX`#JkN?dPQcxkC(?|*`NuF2QM@=`MH zD~H5OYGxedT&Opq!;NySEmP&uC~njF;4B1ZCpa&+)2#qDo}9 zi)zsx74;C=7Ev8q^)3M>$+n8RNPA4w6xlXW&(O|_Izo1bsLQm+Ma__H7xgTy@MCq+F=cAu!XX`d4H9NAt`@6d*#o+sNU>V4YNqFx}oU(^S*Wl=AY z4U76E?HN(8kUb#kH?$Q|uaf0NeMDOob%iW1>UXq}sMp8}qCTcw6!iv~Is*jw18q&z zRkEU}PiW7IdXsEa)L&@pqOOsRiTadQokjw@MK&(#Z?xw`y-ijU)kC{Z)-6}`3coSK z(Z$vfHueWBSj~Tx0xse;eH)I|D{-^kTkQnVvn0Nwp&l*Q;y#PT`9$REzWx ziBBPEugsSDslaYNOOv?P`i{D<8bV8StKQbNZg6S(Y>d=5YINFG1&NCB^VWCYhdQpCF+8O5(XGKN2S zWE_9@ND0?HGJ#$WZOW^K9Qr(x#|DoSu+1YQ*y)iX_IP9zIggBC+#}1u#12t>lR95IJpkiBfa^edGl0)_KCOBS&(#j@ox^l0NHWxl&=M}4=>E~kzvQ+ujS zJs9BUTLlL;7BEXG6`!PHJ~ssUlK9XG@7yrZi79nVXk!>B474y6*rWp|CnWl^=qnTH z*iguid{aS^ivPNSUlMqxBHbjm{V&m)TcrBt1asZ+j0-Il>4vt0NK~OKwcG3t=jOyO zwnz<=)ut!uY?u_9VX=jJC~Qu<*XG>u4!wS-LUgt2b)ZcZM-o(1b-l`r38d|Ul(9=^ z8kc!O_6rFZDn4^&M9Z2**a=ml5L_pNMUMzgqcYt#IBhzteg>sxnJ`m~@2Lmnb?L&9le0&| Jsr?K4@gEyoqICcO literal 0 HcmV?d00001 diff --git a/src/TZlib/lib/zdll.lib b/src/TZlib/lib/zdll.lib new file mode 100644 index 0000000000000000000000000000000000000000..01f4e10e6ef05b1198d2e5b3410437611826e61a GIT binary patch literal 10590 zcmcgy&2L*b68||Ln?!Y6*G~NXAv;d2^uw_wImrTxz;&F(26a=zNrPUtiXy+r!YY;_ z$t@}r-FvYpiXM9^iaq7fbB;l7TlBDpoVq}fzo3VrXp0`&ogs&O#ycM||gK;H(?Uk3&r0;!)g z4gLr)4W~5CJO!9$ztc4OIlwgZSkq{lc%qTJnugvXInl`1n$CX&DEgjCqS^N}ogXBg z=ooVt@P2*Pqrs)+;$x(o5W=GTH52Qyl^+?m? zJn=+RcQj3W12E0>YMR(0o+$ZD=tC-rrpZQ3<6mkT`xaoDIHqZ=PCU`+Uo{PWM(;~B z{EN^hR1%&0N@$fzqS=I|IeH(aG2)q0G}crqm%H)i`db^fbF0^HUE8>^e*3MBT%%mN zw}@Qs=G$v)&CU3`YS*o||MK?DH*%}5-+rC+OAmH(>ft*b580JdO2yHUFSyRSfIttW7+a=u7LY?kQ$3ZzvHYNQd? z{FZdsL{+~{3~nCv?7zEh#K^gI-9xca*$K$KO=+Z?Ml2O0Cui9ae<(H_#17Dn?!?2l*<=xGAjb*8FBUsAkA9Y(>ip)dEYU&@$OeZfuw8IlHWd zYtl&jD$HsfSvB&U&oycAV~$EwFT8I2o*aqS+bvq=>lJbv+o2=Tnl!^a;9Na_ugv!K zS*_E!u8k~Z=lMa#<_DJmZ1e&3e&FE%@DoL&9|tKS4FgYSfbV93&ne129s<%--W>tn zq59WUesmuAp6ET&8Km;cS>OwzkExG$&j3$|Qqe<0bT zDPW$;J5+u%0rZl5i^^xD^C8hg(*Kg4`*sXCM)Eq9zn%s@qkey(cl?Ctt8>6AQG(v% z4q+uohodSbKIp*_yoNyxVHoo`j^~lUAFzOn=*0_o4yUk$SMf5&Z~?F29L{1IqnN@B zl9<38&SM-Y%wiHJFo4s@;3b?y8jI-1i|9iZBe;Y!IQD-+IZ7Vfai$3Vyl!O5~^D+I}tYR zRJ?boea|RFB8<01Ms~o+*6eTX#8JpFz3TX7xEA5X2^D^j@k3X1d-uaYiwNlN`_U-l z1wh#m%}Wa#muBekIEvo3EppdUMC3S%Nch3fQ5>Ol6p?xJFS3^NZ`zvku%;clIS(=W zu^!-FSrW@_MsC-lS#@55WP~O)(s59H+D1KT6|pv)Fv?_7H^y>UGLvv-B^lOBbj5no z7O`6-GPzORu99NIreY?CFzJEKSoAt5HuMTGsa%*;nbgRnQzktNlNXcTcsZTPVTujo z#WsPHxwbJ_`>aTrQPy*KKe%f{OS7wL3@uImQ({YLi`ddgqelYC6`OR`!QilI^laRe~N$wQxCf0h6;^%+;XXRuMC<3Zq&-`X^Z?`ymOS8Z-RsLZZ zDVNc=GGE%v*YmS!(?kIrbQH%k5ges*84Hg^kCPJhqvJ7tBYLJd{bw1;$498zN3olK zr|h6o80b4e67G$ECn(k*@9lrHRH#;JmHYK%YU4t3?Z(YFbaUh{T??ouxd+NMh)xg& zC}-fB1;H{ePI}Sfy?@2;zZ*2x=O4e>5t#8VQ{u#uEhAAQkrM)d&WAY7b+W zpzZ7x7OqXd$S#UoL@?+eMZV!+q#cmXM`D~WfG@@P?Nu}!{ zkgc^lM=_Rr-oeqytL;6sVVgKhdw5)uJnjVt$4`s*kC%<{y%!nJKfHuMo$sZ4jEvV( zpF#@n5JDJRYtw#l@s01J)SW8dOW2M(Uqx{k{Tf3b<_>}p6AuP72A>lTf)EoAP78uM zf_4exjKWYMFDex_N3zIXK-rwOnvex_fGQIf8VcQ%g*a|B8dt z%^d$#2j|do{20G`&BfzO_0YXL-htxQ(tHF*-`9s=w$|=iiaAYOWGv@PfbBaRT$?Cy j(Px2Cj_M4YVTEb+dc3-S+10a_>z_ zR*Xx*_Nu60wM9f*D~kHy4}~Do`cSZlsFYGfMB;-YK1mBc2!c50%-lIMcQ;SIDA=Z3M57nF zHGi}^>y=JKgQSswStlFo(DHuPqWyG2d%oxwM{;w~I?_=?=C{%GImsjcm7Hm}5IS45 z{}jNS4uw2mKTY_r2eNrJN%q_o-A0eKQC8|Q7mp|9pwSIovEEpW%>*C z^7keEMJU@8`-|WSTMYMy@uMC%QSb{h!Iw$~!FBxxU^tQOlx z@V&Me+GoVa!%pCYo058jHtP|5N3-5FuqNK`q!Vtd6vIl@EBNzE(H1({*0ZeNubgF( zU((MZf0msP?@&H0Ou5eI+MgE8idhSPTub3~l<`-t7hR{|JHG#&jz7j&Db3(vB}4ZU z;cDQl)%Q~Y%!oVV@k~Ae7N3x2KE6-Nb*DQ0hkl>XkhyI%J};lF zo+q|i^;a4862Kf`FCk0I*gNgc2K%}UJ^>b=kl&j4Dd-UPiX$mLA6-uo5s#VOE*D%* zlJUGWKX}sS2T6W#VR=5fd%@u2*y1B_u@xWlQMq38D_%JLs?J9-!Wx}1)M=?G`)jjd zF*Kf!W9EweBk-BUq;QS*FQ$W%&A0cD3*K0s?>mLk%LX6E*7Fhgs}*1F-**mHywY37 z{w2a1V*e6aXQ`7TKm%gStnzl&B+AqSq(j=o=DZlq9MBH zNt{)?4OKx{X&Bk)gVm-UrP;+OM~cletl4X55^0oFseVyYSd=`I+%JNx67Lt$M5UnO z5$hMFCrt0r`GYZ5OEdVp+9TyN1*4g{{GU3XSum?)E&MCPS?GVv=f;Bk?K+>ED64gu z@SV0;LXT4Z`lMd6K2UlDCyHOx!}>riu~Pg6T_3cXWqbQuP0wk&&GVg{_lif7=Zhe# z#pjFY&ssztE&Vm)4;M{T#fv{k#-E;Hn*O|1l5jg1)`53t$Xh7k%Lq0K+f`Tlc&$v-9p(o_@~(I0ZKj zz{lLcw{iNxoAL!%?chzKc~bXXz8p`3SZ~D8k3i)lR%`p|7uF4j>=NNHaEd&Rzg35^ z27jx(dK9=#rff0DV``fRxQ&yR+#;WhbyA&El)mj>H>JUoVrSex>`c6-KM~f;Tl=k8 z$M^ms`v-H-`~UWMI0LY;@6x`b@1EFOga;q_2DTm9yknC$xgHijfb#%L3j=doe?q@g zfAJ_#IV~%r7p+wKq50t^1|>%XH_hPIDZVX@&1!CIz13 z7?ZvKu=I|sqZc?Lsh8hOwo&8x5O4&dZ4|+8^Lp~nJx1f=wMYWr$BpEke-dMV0~4PY AO8@`> literal 0 HcmV?d00001 diff --git a/src/TZlib/lib/zlib.def b/src/TZlib/lib/zlib.def new file mode 100644 index 0000000..03bcf1c --- /dev/null +++ b/src/TZlib/lib/zlib.def @@ -0,0 +1,60 @@ +LIBRARY +; zlib data compression library + +EXPORTS +; basic functions + zlibVersion + deflate + deflateEnd + inflate + inflateEnd +; advanced functions + deflateSetDictionary + deflateCopy + deflateReset + deflateParams + deflateBound + deflatePrime + inflateSetDictionary + inflateSync + inflateCopy + inflateReset + inflateBack + inflateBackEnd + zlibCompileFlags +; utility functions + compress + compress2 + compressBound + uncompress + gzopen + gzdopen + gzsetparams + gzread + gzwrite + gzprintf + gzputs + gzgets + gzputc + gzgetc + gzungetc + gzflush + gzseek + gzrewind + gztell + gzeof + gzclose + gzerror + gzclearerr +; checksum functions + adler32 + crc32 +; various hacks, don't look :) + deflateInit_ + deflateInit2_ + inflateInit_ + inflateInit2_ + inflateBackInit_ + inflateSyncPoint + get_crc_table + zError diff --git a/src/TZlib/test/example_d.exe b/src/TZlib/test/example_d.exe new file mode 100644 index 0000000000000000000000000000000000000000..f9d4fabe5420f76a48e4db8946b8a2d3580a8ae4 GIT binary patch literal 8704 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 P)(+qo*MsqY)PcVNMZggJ literal 0 HcmV?d00001 diff --git a/src/TZlib/test/untgz_d.exe b/src/TZlib/test/untgz_d.exe new file mode 100644 index 0000000000000000000000000000000000000000..b0198a6ea012810fb09836058588c4d993fc59dc GIT binary patch literal 7168 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
Q6vTk!gT>3?mr+*tl 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�h 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 literal 0 HcmV?d00001 diff --git a/src/base64.c b/src/base64.c new file mode 100644 index 0000000..ddfaaa0 --- /dev/null +++ b/src/base64.c @@ -0,0 +1,111 @@ +// Base 64 encoder / decoder +#include +#include +//------------------------- +AnsiString Base64Encode(AnsiString slToEnc) +{ + //The Base64 Table + const char Base64Table[64]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + char * buftoenc = slToEnc.c_str(); + int bufsize = slToEnc.Length() + 1; + char * encbuf = new char[slToEnc.Length() * 5]; + encbuf[0] = '\0'; int ilStrLen = -1; + + int i=0; int b64byte[5]; + unsigned char *buftemp; + AnsiString slRetVal = EmptyStr; + buftemp=(unsigned char *)malloc(bufsize+2); + strcpy(buftemp,buftoenc); + if (fmod(bufsize,3)==1) + + { + buftemp[bufsize]='\0'; + buftemp[bufsize+1]='\0'; + } + if (fmod(bufsize,3)==2)buftemp[bufsize]='\0'; + + while (i>2; + b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4); + b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6); + + b64byte[3]=buftemp[i+2]&0x3F; + encbuf[i+(i/3)]=Base64Table[b64byte[0]]; + encbuf[i+(i/3)+1]=Base64Table[b64byte[1]]; + encbuf[i+(i/3)+2]=Base64Table[b64byte[2]]; + encbuf[i+(i/3)+3]=Base64Table[b64byte[3]]; + + i+=3; + } + free(buftemp); + if (fmod(bufsize,3)==0) ilStrLen = bufsize*8/6; + else if (fmod(bufsize,3)==1) ilStrLen = ((bufsize+2)*8/6)-2; + else if (fmod(bufsize,3)==2) ilStrLen = ((bufsize+1)*8/6)-1; + + else ilStrLen = -1; + if(ilStrLen > 0) slRetVal = AnsiString(encbuf).SubString(1, ilStrLen); + if(encbuf != NULL) { delete encbuf; encbuf = NULL; } + return slRetVal; +} +//------------------------ +AnsiString Base64Decode(AnsiString slToDec) +{ + //Base64 Table + const char Base64Table[64]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + char * buftodec = slToDec.c_str(); + int bufsize = slToDec.Length() + 1; + + char * decbuf = new char[slToDec.Length() * 5]; + decbuf[0] = '\0'; int ilStrLen = -1; + AnsiString slRetVal = EmptyStr; + int i=0; unsigned char binbyte[4]; + int cpos[5]; unsigned char *buftemp; + + buftemp=(unsigned char *)malloc(bufsize); + strcpy(buftemp,buftodec); + if (fmod(bufsize,4)==1) + { + buftemp[bufsize]='\0'; + + buftemp[bufsize+1]='\0'; + buftemp[bufsize+2]='\0'; + } + if (fmod(bufsize,4)==2) + { + + buftemp[bufsize]='\0'; + buftemp[bufsize+1]='\0'; + } + if (fmod(bufsize,4)==3)buftemp[bufsize]='\0'; + + while (i>4)); + binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2)); + binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f)); + + decbuf[i-(i/4)]=binbyte[0]; + decbuf[i-(i/4)+1]=binbyte[1]; + decbuf[i-(i/4)+2]=binbyte[2]; + i+=4; + } + free(buftemp); + + if (fmod(bufsize,4)==0) ilStrLen = bufsize*6/8; + else if (fmod(bufsize,4)==1) ilStrLen = ((bufsize+3)*6/8)-3; + else if (fmod(bufsize,4)==2) ilStrLen = ((bufsize+2)*6/8)-2; + else if (fmod(bufsize,4)==3) ilStrLen = ((bufsize+1)*6/8)-1; + else ilStrLen = -1; + if(ilStrLen > 0) slRetVal = AnsiString(decbuf).SubString(1, ilStrLen); + + if(decbuf != NULL) { delete decbuf; decbuf = NULL; } + return slRetVal; +} + + \ No newline at end of file diff --git a/src/base64.cpp b/src/base64.cpp new file mode 100644 index 0000000..ef126c9 --- /dev/null +++ b/src/base64.cpp @@ -0,0 +1,94 @@ +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Base 64 encoder / decoder +#include +#include + +#pragma hdrstop + +#include "Base64.h" + +//------------------------- +AnsiString Base64Encode(char *input) +{ + char keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + AnsiString output = ""; + char chr1, chr2, chr3; + char enc1, enc2, enc3, enc4; + int i = 0, l; + + l = strlen(input); + + do { + chr1 = input[i++]; + enc1 = chr1 >> 2; + + if ( i> 4); + + if ( i> 6); + enc4 = chr3 & 63; + } else { + enc3 = ((chr2 & 15) << 2); + enc4 = 64; + } + + } else { + enc2 = ((chr1 & 3) << 4); + enc3 = 64; + enc4 = 64; + } + + output += AnsiString(keyStr[enc1]) + AnsiString(keyStr[enc2]) + AnsiString(keyStr[enc3]) + AnsiString(keyStr[enc4]); + } while (i < l); + + return output; +} +//--------------------------------------------------------------------------- +AnsiString Base64Decode(char *input) +{ + char keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + AnsiString output = ""; + char chr1, chr2, chr3; + char enc1, enc2, enc3, enc4; + int i = 0, l; + + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = +// input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + l = strlen(input); + + do { + enc1 = strchr( keyStr, input[i++] ) - keyStr; + if (i> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output += AnsiString(chr1); + + if (enc3 != 64) { + output += AnsiString(chr2); + } + if (enc4 != 64) { + output += AnsiString(chr3); + } + } while (i < l); + + return output; + +} +//--------------------------------------------------------------------------- + + + +#pragma package(smart_init) diff --git a/src/base64.h b/src/base64.h new file mode 100644 index 0000000..e68a1c5 --- /dev/null +++ b/src/base64.h @@ -0,0 +1,10 @@ +//--------------------------------------------------------------------------- + +#ifndef Base64H +#define Base64H +//--------------------------------------------------------------------------- +AnsiString Base64Decode(char *input); +AnsiString Base64Encode(char *input); +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/src/base64.~cpp b/src/base64.~cpp new file mode 100644 index 0000000..015aeec --- /dev/null +++ b/src/base64.~cpp @@ -0,0 +1,94 @@ +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Base 64 encoder / decoder +#include +#include + +#pragma hdrstop + +#include "Base64.h" + +//------------------------- +AnsiString Base64Encode(char *input) +{ + char keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + AnsiString output = ""; + char chr1, chr2, chr3; + char enc1, enc2, enc3, enc4; + int i = 0, l; + + l = strlen(input); + + do { + chr1 = input[i++]; + enc1 = chr1 >> 2; + + if ( i> 4); + + if ( i> 6); + enc4 = chr3 & 63; + } else { + enc3 = ((chr2 & 15) << 2); + enc4 = 64; + } + + } else { + enc2 = ((chr1 & 3) << 4); + enc3 = 64; + enc4 = 64; + } + + output += AnsiString(keyStr[enc1]) + AnsiString(keyStr[enc2]) + AnsiString(keyStr[enc3]) + AnsiString(keyStr[enc4]); + } while (i < l); + + return output; +} +//--------------------------------------------------------------------------- +AnsiString Base64Decode(char *input) +{ + char keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + AnsiString output = ""; + char chr1, chr2, chr3; + char enc1, enc2, enc3, enc4; + int i = 0, l; + + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = +// input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + l = strlen(input); + + do { + enc1 = keyStr[ input[i++] ]; + if (i> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output += AnsiString(chr1); + + if (enc3 != 64) { + output += AnsiString(chr2); + } + if (enc4 != 64) { + output += AnsiString(chr3); + } + } while (i < l); + + return output; + +} +//--------------------------------------------------------------------------- + + + +#pragma package(smart_init) diff --git a/src/base64.~h b/src/base64.~h new file mode 100644 index 0000000..e68a1c5 --- /dev/null +++ b/src/base64.~h @@ -0,0 +1,10 @@ +//--------------------------------------------------------------------------- + +#ifndef Base64H +#define Base64H +//--------------------------------------------------------------------------- +AnsiString Base64Decode(char *input); +AnsiString Base64Encode(char *input); +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/src/mainGUI.cpp b/src/mainGUI.cpp new file mode 100644 index 0000000..a34213f --- /dev/null +++ b/src/mainGUI.cpp @@ -0,0 +1,245 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "inifiles.hpp" +#include "mainGUI.h" +#include "tsplash.h" +#include "stdio.h" +#include "THTTPdownloader.h" +#include "base64.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + #define IDM_ABOUTBOX 1 + HMENU pSysMenu = GetSystemMenu(this->Handle, FALSE); + if (pSysMenu != NULL) + { + AppendMenu(pSysMenu, MF_SEPARATOR,0,0); + AppendMenu(pSysMenu, MF_STRING, IDM_ABOUTBOX, "Acerca de..."); + } + WindowProc=MyWndProc; + + TIniFile *ini; + ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\chpwd.ini"); + StringGrid1->RowCount = 1 + ini->ReadInteger("aps","count",1); + + APs = new AP[StringGrid1->RowCount]; + + StringGrid1->ColWidths[0] = 200; + StringGrid1->ColWidths[1] = 50; + + StringGrid1->Cells[0][0] = "IP"; + StringGrid1->Cells[1][0] = "Status"; + + TStringList *StringList = new TStringList(); + int i; AnsiString aux; + for(i=1;iRowCount;i++){ + StringList->Clear(); + aux = ini->ReadString("aps","AP"+AnsiString(i),"0:0:0:0;user;pass;wep128pass"); + ExtractStrings(TSysCharSet()<<';',TSysCharSet(), (char *)aux.data(), StringList); + if ( StringList->Count == 4 ) { + APs[i-1].IP = StringList->Strings[0]; + APs[i-1].user = StringList->Strings[1]; + APs[i-1].pass = StringList->Strings[2]; + APs[i-1].wep = StringList->Strings[3]; + } + StringGrid1->RowHeights[i] = 14; + } + delete StringList; + + delete ini; + + currWEP->Text = APs[0].wep; + currHexWEP->Caption = wepASCII2HEX( currWEP->Text ); + + generarClaveWEP->Caption = ""; + + generarClaveWEPClick(0); + +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::wepASCII2HEX(AnsiString txt) { + char ascWEPkey[14], hexWEPkey[27]; + + sprintf(ascWEPkey,"%13s",(char *)txt.data()); + + BinToHex(ascWEPkey, hexWEPkey, 13); + hexWEPkey[26]='\0'; + + return AnsiString( hexWEPkey ); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::MyWndProc(Messages::TMessage &Message) +{ + HMENU hMenu; + hMenu = GetSystemMenu (this->Handle, FALSE); + if (Message.Msg == WM_SYSCOMMAND) + { + switch(Message.WParamLo) + { + case IDM_ABOUTBOX: + if ( Splash==NULL ) Splash = new TSplash(NULL); + Splash->pressKeyToClose = true; + Splash->Show(); + Splash->Repaint(); + break; + default: + WndProc(Message); + } + } else + WndProc(Message); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormShow(TObject *Sender) +{ + if(Splash){ + delete Splash; + Splash = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) +{ + + TIniFile *ini; + ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\chpwd.ini"); + for(int i=1;iRowCount;i++){ + ini->WriteString("aps","AP"+AnsiString(i),APs[i-1].IP+";"+APs[i-1].user+";"+APs[i-1].pass+";"+APs[i-1].wep); + } + delete ini; + + delete []APs; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, + int ARow, TRect &Rect, TGridDrawState State) +{ + if ( ARow>0 ) { + TStringGrid *grid; + grid = (TStringGrid *)Sender; + grid->Canvas->FillRect(Rect); + Rect.right -= 2; + + if ( ACol==0 ) DrawText( grid->Canvas->Handle, (char *)APs[ARow-1].IP.data(),APs[ARow-1].IP.Length(), &Rect,DT_LEFT ); else + if ( ACol==1 ) DrawText( grid->Canvas->Handle, (char *)APs[ARow-1].status.data(),APs[ARow-1].status.Length(), &Rect,DT_RIGHT ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::generarClaveWEPClick(TObject *Sender) +{ + char ascWEPkey[14], hexWEPkey[27]; + + Randomize(); + + int i, r; +// char charArray[] = {' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '\'', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'}; + char charArray[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', '+', 'l', '-', '.', 'm', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'o', 'p', 'q', 'r', 's', 't', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '_', '5', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '6', '7', '8', '9'}; + + int keyLengthInBytes = 13; + for(i=0;iText = AnsiString(ascWEPkey); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::newWEPChange(TObject *Sender) +{ + hexWEP->Caption = wepASCII2HEX( newWEP->Text ); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + if ( newWEP->Text.Length()!=13 ) { + ShowMessage("La nueva clave debe contener 13 dígitos."); + } else { + Button1->Caption = "Por favor, espere..."; + // Propagar la clave por los routers. + for (int i=0;iRowCount;i++) { + if ( updateRouter(APs[i].IP, APs[i].user, APs[i].pass, hexWEP->Caption) ) { + APs[i].wep = newWEP->Text; + APs[i].status = "OK"; + } else { + APs[i].status = "ERROR"; + } + } + Button1->Caption = "Aplicar Cambios"; + } +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::updateRouter(AnsiString IP, AnsiString user, AnsiString pass, AnsiString WEP) +{ + TMemoryStream* out; + + int error; + AnsiString Authorization, content, request, aux; + + aux = user+":"+pass; + Authorization = Base64Encode((char *)aux.data()); + +/* + request = "GET / HTTP/1.1\r\n"; + request+= "Host: "+IP+"\r\n"; + request+= "User-Agent: JDsoft\r\n"; + request+= "Accept: text/html;q=0.7\r\n"; + request+= "Accept-Language: es-es,es\r\n"; + request+= "Accept-Encoding: gzip,deflate\r\n"; + request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; + request+= "Authorization: Basic "+Authorization+"\r\n"; // YWRtaW46YWRtaW4= + request+= "Keep-Alive: 300\r\n"; + request+= "Proxy-Connection: keep-alive\r\n"; + request+= "\r\n"; + out = new TMemoryStream(); + error = HTTPdownloader->descargarHTML(IP.c_str(),request.c_str(),out); + + if ( error==-1 ) return false; +*/ + + content = "submit_button=WL_WPATable&change_action=&submit_type=&action=Apply&security_mode_last="; + content+= "&wl_wep_last=&security_mode2=wep&wl_key=1&wl_WEP_key=&wl_wep=restricted&wl_wep_bit=128"; + content+= "&wl_passphrase=&generateButton=Null"; + content+= "&wl_key1="+WEP; + content+= "&wl_key2=&wl_key3=&wl_key4="; + + request = "POST /apply.cgi HTTP/1.1\r\n"; + request+= "Host: "+IP+"\r\n"; + request+= "User-Agent: JDsoft\r\n"; + request+= "Accept: text/html;q=0.7\r\n"; + request+= "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\n"; + request+= "Accept-Encoding: gzip,deflate\r\n"; + request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; + request+= "Keep-Alive: 300\r\n"; + request+= "Proxy-Connection: keep-alive\r\n"; + request+= "Referer: http://"+IP+"/WL_WPATable.asp\r\n"; + request+= "Authorization: Basic "+Authorization+"\r\n"; + request+= "Content-Type: application/x-www-form-urlencoded\r\n"; + request+= "Content-Length: "+AnsiString(content.Length())+"\r\n\r\n"; + request+= content; + + + /*TMemoryStream* */ out = new TMemoryStream(); + error = HTTPdownloader->descargarHTML(IP.c_str(),request.c_str(),out); + + if ( error!=-1 ) { + char *pos, *posEnd; + out->Position=0; + pos=StrPos((char *)out->Memory,"Settings are successful."); + if ( pos<=0 ) error=-1; else error = 0; + } + + return (error!=-1); +} +//--------------------------------------------------------------------------- diff --git a/src/mainGUI.ddp b/src/mainGUI.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/src/mainGUI.dfm b/src/mainGUI.dfm new file mode 100644 index 0000000..981a4ca --- /dev/null +++ b/src/mainGUI.dfm @@ -0,0 +1,143 @@ +object Form1: TForm1 + Left = 499 + Top = 114 + Width = 301 + Height = 337 + Caption = 'WRT54GL chpwd' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object PageControl1: TPageControl + Left = 0 + Top = 0 + Width = 293 + Height = 306 + ActivePage = TabSheet1 + Align = alClient + TabIndex = 0 + TabOrder = 0 + TabPosition = tpBottom + object TabSheet1: TTabSheet + Caption = 'Inicio' + object Label2: TLabel + Left = 8 + Top = 112 + Width = 61 + Height = 13 + Caption = 'Cambiar a:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label1: TLabel + Left = 8 + Top = 16 + Width = 108 + Height = 13 + Caption = 'Clave WEP actual:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object hexWEP: TLabel + Left = 8 + Top = 184 + Width = 42 + Height = 13 + Caption = 'hexWEP' + end + object currHexWEP: TLabel + Left = 8 + Top = 88 + Width = 42 + Height = 13 + Caption = 'hexWEP' + end + object Button1: TButton + Left = 80 + Top = 220 + Width = 129 + Height = 25 + Caption = 'Aplicar Cambios' + TabOrder = 0 + OnClick = Button1Click + end + object newWEP: TEdit + Left = 7 + Top = 136 + Width = 226 + Height = 39 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Courier New' + Font.Style = [fsBold] + MaxLength = 13 + ParentFont = False + TabOrder = 1 + Text = '0123456789123' + OnChange = newWEPChange + end + object currWEP: TEdit + Left = 8 + Top = 40 + Width = 273 + Height = 41 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -29 + Font.Name = 'Courier New' + Font.Style = [fsBold] + MaxLength = 13 + ParentFont = False + ReadOnly = True + TabOrder = 2 + Text = 'currWEP' + end + object generarClaveWEP: TBitBtn + Left = 240 + Top = 136 + Width = 41 + Height = 41 + TabOrder = 3 + OnClick = generarClaveWEPClick + Kind = bkRetry + end + end + object TabSheet2: TTabSheet + Caption = 'Configurar APs' + ImageIndex = 1 + object StringGrid1: TStringGrid + Left = 0 + Top = 0 + Width = 285 + Height = 280 + Align = alClient + ColCount = 2 + FixedCols = 0 + TabOrder = 0 + OnDrawCell = StringGrid1DrawCell + RowHeights = ( + 24 + 26 + 12 + 24 + 24) + end + end + end +end diff --git a/src/mainGUI.h b/src/mainGUI.h new file mode 100644 index 0000000..b6b8f27 --- /dev/null +++ b/src/mainGUI.h @@ -0,0 +1,62 @@ + +//--------------------------------------------------------------------------- + +#ifndef mainGUIH +#define mainGUIH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +struct AP { + AnsiString IP; + AnsiString user; + AnsiString pass; + AnsiString wep; + AnsiString status; +}; +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TButton *Button1; + TEdit *newWEP; + TLabel *Label2; + TEdit *currWEP; + TLabel *Label1; + TTabSheet *TabSheet2; + TStringGrid *StringGrid1; + TBitBtn *generarClaveWEP; + TLabel *hexWEP; + TLabel *currHexWEP; + void __fastcall FormShow(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall StringGrid1DrawCell(TObject *Sender, int ACol, + int ARow, TRect &Rect, TGridDrawState State); + void __fastcall generarClaveWEPClick(TObject *Sender); + void __fastcall newWEPChange(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); +private: // User declarations + AP *APs; + + AnsiString __fastcall wepASCII2HEX(AnsiString txt); + +public: // User declarations + __fastcall TForm1(TComponent* Owner); + + void __fastcall MyWndProc(Messages::TMessage &Message); + + bool __fastcall updateRouter(AnsiString IP, AnsiString user, AnsiString pass, AnsiString WEP); + + +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/src/mainGUI.~cpp b/src/mainGUI.~cpp new file mode 100644 index 0000000..bb88f66 --- /dev/null +++ b/src/mainGUI.~cpp @@ -0,0 +1,246 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "inifiles.hpp" +#include "mainGUI.h" +#include "tsplash.h" +#include "stdio.h" +#include "THTTPdownloader.h" +#include "base64.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + #define IDM_ABOUTBOX 1 + HMENU pSysMenu = GetSystemMenu(this->Handle, FALSE); + if (pSysMenu != NULL) + { + AppendMenu(pSysMenu, MF_SEPARATOR,0,0); + AppendMenu(pSysMenu, MF_STRING, IDM_ABOUTBOX, "Acerca de..."); + } + WindowProc=MyWndProc; + + TIniFile *ini; + ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\chpwd.ini"); + StringGrid1->RowCount = 1 + ini->ReadInteger("aps","count",1); + + APs = new AP[StringGrid1->RowCount]; + + StringGrid1->ColWidths[0] = 200; + StringGrid1->ColWidths[1] = 50; + + StringGrid1->Cells[0][0] = "IP"; + StringGrid1->Cells[1][0] = "Status"; + + TStringList *StringList = new TStringList(); + int i; AnsiString aux; + for(i=1;iRowCount;i++){ + StringList->Clear(); + aux = ini->ReadString("aps","AP"+AnsiString(i),"0:0:0:0;user;pass;wep128pass"); + ExtractStrings(TSysCharSet()<<';',TSysCharSet(), (char *)aux.data(), StringList); + if ( StringList->Count == 4 ) { + APs[i-1].IP = StringList->Strings[0]; + APs[i-1].user = StringList->Strings[1]; + APs[i-1].pass = StringList->Strings[2]; + APs[i-1].wep = StringList->Strings[3]; + } + StringGrid1->RowHeights[i] = 14; + } + delete StringList; + + delete ini; + + currWEP->Text = APs[0].wep; + currHexWEP->Caption = wepASCII2HEX( currWEP->Text ); + + generarClaveWEP->Caption = ""; + + generarClaveWEPClick(0); + +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::wepASCII2HEX(AnsiString txt) { + char ascWEPkey[14], hexWEPkey[27]; + + sprintf(ascWEPkey,"%13s",(char *)txt.data()); + + BinToHex(ascWEPkey, hexWEPkey, 13); + hexWEPkey[26]='\0'; + + return AnsiString( hexWEPkey ); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::MyWndProc(Messages::TMessage &Message) +{ + HMENU hMenu; + hMenu = GetSystemMenu (this->Handle, FALSE); + if (Message.Msg == WM_SYSCOMMAND) + { + switch(Message.WParamLo) + { + case IDM_ABOUTBOX: + if ( Splash==NULL ) Splash = new TSplash(NULL); + Splash->pressKeyToClose = true; + Splash->Show(); + Splash->Repaint(); + break; + default: + WndProc(Message); + } + } else + WndProc(Message); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormShow(TObject *Sender) +{ + if(Splash){ + delete Splash; + Splash = NULL; + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) +{ + + TIniFile *ini; + ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\chpwd.ini"); + for(int i=1;iRowCount;i++){ + ini->WriteString("aps","AP"+AnsiString(i),APs[i-1].IP+";"+APs[i-1].user+";"+APs[i-1].pass+";"+APs[i-1].wep); + } + delete ini; + + delete []APs; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, + int ARow, TRect &Rect, TGridDrawState State) +{ + if ( ARow>0 ) { + TStringGrid *grid; + grid = (TStringGrid *)Sender; + grid->Canvas->FillRect(Rect); + Rect.right -= 2; + + if ( ACol==0 ) DrawText( grid->Canvas->Handle, (char *)APs[ARow-1].IP.data(),APs[ARow-1].IP.Length(), &Rect,DT_LEFT ); else + if ( ACol==1 ) DrawText( grid->Canvas->Handle, (char *)APs[ARow-1].status.data(),APs[ARow-1].status.Length(), &Rect,DT_RIGHT ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::generarClaveWEPClick(TObject *Sender) +{ + char ascWEPkey[14], hexWEPkey[27]; + + Randomize(); + + int i, r; +// char charArray[] = {' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '\'', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'}; + char charArray[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', '+', 'l', '-', '.', 'm', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'o', 'p', 'q', 'r', 's', 't', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '_', '5', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '6', '7', '8', '9'}; + + int keyLengthInBytes = 13; + for(i=0;iText = AnsiString(ascWEPkey); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::newWEPChange(TObject *Sender) +{ + hexWEP->Caption = wepASCII2HEX( newWEP->Text ); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + if ( newWEP->Text.Length()!=13 ) { + ShowMessage("La nueva clave debe contener 13 dígitos."); + } else { + Button1->Caption = "Por favor, espere..."; + // Propagar la clave por los routers. + for (int i=0;iRowCount;i++) { + if ( updateRouter(APs[i].IP, APs[i].user, APs[i].pass, hexWEP->Caption) ) { + APs[i].wep = newWEP->Text; + APs[i].status = "OK"; + } else { + APs[i].status = "ERROR"; + } + break; + } + Button1->Caption = "Aplicar Cambios"; + } +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::updateRouter(AnsiString IP, AnsiString user, AnsiString pass, AnsiString WEP) +{ + TMemoryStream* out; + + int error; + AnsiString Authorization, content, request, aux; + + aux = user+":"+pass; + Authorization = Base64Encode((char *)aux.data()); + +/* + request = "GET / HTTP/1.1\r\n"; + request+= "Host: "+IP+"\r\n"; + request+= "User-Agent: JDsoft\r\n"; + request+= "Accept: text/html;q=0.7\r\n"; + request+= "Accept-Language: es-es,es\r\n"; + request+= "Accept-Encoding: gzip,deflate\r\n"; + request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; + request+= "Authorization: Basic "+Authorization+"\r\n"; // YWRtaW46YWRtaW4= + request+= "Keep-Alive: 300\r\n"; + request+= "Proxy-Connection: keep-alive\r\n"; + request+= "\r\n"; + out = new TMemoryStream(); + error = HTTPdownloader->descargarHTML(IP.c_str(),request.c_str(),out); + + if ( error==-1 ) return false; +*/ + + content = "submit_button=WL_WPATable&change_action=&submit_type=&action=Apply&security_mode_last="; + content+= "&wl_wep_last=&security_mode2=wep&wl_key=1&wl_WEP_key=&wl_wep=restricted&wl_wep_bit=128"; + content+= "&wl_passphrase=&generateButton=Null"; + content+= "&wl_key1="+WEP; + content+= "&wl_key2=&wl_key3=&wl_key4="; + + request = "POST /apply.cgi HTTP/1.1\r\n"; + request+= "Host: "+IP+"\r\n"; + request+= "User-Agent: JDsoft\r\n"; + request+= "Accept: text/html;q=0.7\r\n"; + request+= "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\n"; + request+= "Accept-Encoding: gzip,deflate\r\n"; + request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; + request+= "Keep-Alive: 300\r\n"; + request+= "Proxy-Connection: keep-alive\r\n"; + request+= "Referer: http://"+IP+"/WL_WPATable.asp\r\n"; + request+= "Authorization: Basic "+Authorization+"\r\n"; + request+= "Content-Type: application/x-www-form-urlencoded\r\n"; + request+= "Content-Length: "+AnsiString(content.Length())+"\r\n\r\n"; + request+= content; + + + /*TMemoryStream* */ out = new TMemoryStream(); + error = HTTPdownloader->descargarHTML(IP.c_str(),request.c_str(),out); + + if ( error!=-1 ) { + char *pos, *posEnd; + out->Position=0; + pos=StrPos((char *)out->Memory,"Settings are successful."); + if ( pos<=0 ) error=-1; else error = 0; + } + + return (error!=-1); +} +//--------------------------------------------------------------------------- diff --git a/src/mainGUI.~ddp b/src/mainGUI.~ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/src/mainGUI.~dfm b/src/mainGUI.~dfm new file mode 100644 index 0000000..981a4ca --- /dev/null +++ b/src/mainGUI.~dfm @@ -0,0 +1,143 @@ +object Form1: TForm1 + Left = 499 + Top = 114 + Width = 301 + Height = 337 + Caption = 'WRT54GL chpwd' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object PageControl1: TPageControl + Left = 0 + Top = 0 + Width = 293 + Height = 306 + ActivePage = TabSheet1 + Align = alClient + TabIndex = 0 + TabOrder = 0 + TabPosition = tpBottom + object TabSheet1: TTabSheet + Caption = 'Inicio' + object Label2: TLabel + Left = 8 + Top = 112 + Width = 61 + Height = 13 + Caption = 'Cambiar a:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label1: TLabel + Left = 8 + Top = 16 + Width = 108 + Height = 13 + Caption = 'Clave WEP actual:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object hexWEP: TLabel + Left = 8 + Top = 184 + Width = 42 + Height = 13 + Caption = 'hexWEP' + end + object currHexWEP: TLabel + Left = 8 + Top = 88 + Width = 42 + Height = 13 + Caption = 'hexWEP' + end + object Button1: TButton + Left = 80 + Top = 220 + Width = 129 + Height = 25 + Caption = 'Aplicar Cambios' + TabOrder = 0 + OnClick = Button1Click + end + object newWEP: TEdit + Left = 7 + Top = 136 + Width = 226 + Height = 39 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -27 + Font.Name = 'Courier New' + Font.Style = [fsBold] + MaxLength = 13 + ParentFont = False + TabOrder = 1 + Text = '0123456789123' + OnChange = newWEPChange + end + object currWEP: TEdit + Left = 8 + Top = 40 + Width = 273 + Height = 41 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -29 + Font.Name = 'Courier New' + Font.Style = [fsBold] + MaxLength = 13 + ParentFont = False + ReadOnly = True + TabOrder = 2 + Text = 'currWEP' + end + object generarClaveWEP: TBitBtn + Left = 240 + Top = 136 + Width = 41 + Height = 41 + TabOrder = 3 + OnClick = generarClaveWEPClick + Kind = bkRetry + end + end + object TabSheet2: TTabSheet + Caption = 'Configurar APs' + ImageIndex = 1 + object StringGrid1: TStringGrid + Left = 0 + Top = 0 + Width = 285 + Height = 280 + Align = alClient + ColCount = 2 + FixedCols = 0 + TabOrder = 0 + OnDrawCell = StringGrid1DrawCell + RowHeights = ( + 24 + 26 + 12 + 24 + 24) + end + end + end +end diff --git a/src/mainGUI.~h b/src/mainGUI.~h new file mode 100644 index 0000000..b6b8f27 --- /dev/null +++ b/src/mainGUI.~h @@ -0,0 +1,62 @@ + +//--------------------------------------------------------------------------- + +#ifndef mainGUIH +#define mainGUIH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +struct AP { + AnsiString IP; + AnsiString user; + AnsiString pass; + AnsiString wep; + AnsiString status; +}; +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TButton *Button1; + TEdit *newWEP; + TLabel *Label2; + TEdit *currWEP; + TLabel *Label1; + TTabSheet *TabSheet2; + TStringGrid *StringGrid1; + TBitBtn *generarClaveWEP; + TLabel *hexWEP; + TLabel *currHexWEP; + void __fastcall FormShow(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall StringGrid1DrawCell(TObject *Sender, int ACol, + int ARow, TRect &Rect, TGridDrawState State); + void __fastcall generarClaveWEPClick(TObject *Sender); + void __fastcall newWEPChange(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); +private: // User declarations + AP *APs; + + AnsiString __fastcall wepASCII2HEX(AnsiString txt); + +public: // User declarations + __fastcall TForm1(TComponent* Owner); + + void __fastcall MyWndProc(Messages::TMessage &Message); + + bool __fastcall updateRouter(AnsiString IP, AnsiString user, AnsiString pass, AnsiString WEP); + + +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/src/tsplash.cpp b/src/tsplash.cpp new file mode 100644 index 0000000..fc331de --- /dev/null +++ b/src/tsplash.cpp @@ -0,0 +1,88 @@ +//--------------------------------------------------------------------------- + +#include +#include +#define min(a, b) (((a) < (b)) ? (a) : (b)) +#pragma hdrstop + +#include "tsplash.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TSplash *Splash; +//--------------------------------------------------------------------------- +__fastcall TSplash::TSplash(TComponent* Owner) + : TForm(Owner) +{ + pressKeyToClose = false; +} +//--------------------------------------------------------------------------- +void __fastcall TSplash::GetNextSpan(PByteArray row, int SpanLeft, int *SpanRight, TColor *SpanColor, int y) +{ + int column; + TColor TempColor; + + column = SpanLeft; + TempColor = MaskColor(SpanLeft,y); + while ( column <= ImageMap->Width && TempColor == MaskColor(column,y) ) column = column + 1;; + + *SpanRight = column - 1; + *SpanColor = TempColor; +} +//--------------------------------------------------------------------------- +TColor __fastcall TSplash::MaskColor(int x,int y) +{ + if ( ImageMap->Canvas->Pixels[x][y] == 0x00FF00FF ) return clFuchsia; else return clBlack; +} +//--------------------------------------------------------------------------- +void __fastcall TSplash::FormCreate(TObject *Sender) +{ + int y; + PByteArray row; + HRGN YRgn; + HRGN SpanRgn; + int SpanLeft; + int SpanRight; + TColor SpanColor; + + Canvas->Brush->Style = bsClear; + ImageMap = Image1->Picture->Bitmap; + WindowRgn = CreateRectRgn(0, 0, 0, 0); + for (y=0;yHeight;y++) { + YRgn = CreateRectRgn(0, y, 0, y); +// row = (PByteArray)ImageMap->ScanLine[y]; + + SpanLeft = 0; + SpanRight = 0; + do { + GetNextSpan(row, SpanLeft, &SpanRight, &SpanColor,y); + if ( SpanColor != clFuchsia ) { + SpanRgn = CreateRectRgn(SpanLeft, y, SpanRight + 1, y + 1); + CombineRgn(YRgn, YRgn, SpanRgn, RGN_OR); + DeleteObject(SpanRgn); + } + SpanLeft = SpanRight + 1; + } while ( SpanRight < (ImageMap->Width-1)); + CombineRgn(WindowRgn, WindowRgn, YRgn, RGN_OR); + DeleteObject(YRgn); + } + SetWindowRgn(Handle,WindowRgn,true); + DeleteObject(WindowRgn); +} +//--------------------------------------------------------------------------- + +void __fastcall TSplash::FormPaint(TObject *Sender) +{ + Canvas->Draw(0, 0, ImageMap); +} +//--------------------------------------------------------------------------- + + + +void __fastcall TSplash::Image1Click(TObject *Sender) +{ + if (pressKeyToClose) Close(); + +} +//--------------------------------------------------------------------------- + diff --git a/src/tsplash.ddp b/src/tsplash.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/src/tsplash.dfm b/src/tsplash.dfm new file mode 100644 index 0000000..c26da2f --- /dev/null +++ b/src/tsplash.dfm @@ -0,0 +1,1505 @@ +object Splash: TSplash + Left = 190 + Top = 106 + BorderIcons = [] + BorderStyle = bsNone + Caption = 'Splash' + ClientHeight = 245 + ClientWidth = 185 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + OnPaint = FormPaint + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = 0 + Top = 0 + Width = 185 + Height = 245 + AutoSize = True + Picture.Data = { + 07544269746D617022B80000424D22B80000000000003604000028000000B900 + 0000F50000000100080000000000ECB30000120B0000120B0000000100000000 + 000000000000FFFFFF000000FF000000CC000602FE000A06FD000A06F6000807 + E2001D1C62009695ED00F2F1FE00F4F2E8006E6E6000BABAB700A5A5A200D9D9 + D70039714400427D54007C958400518B6700196739002774470005572A000439 + 1B00056231000548250009534200083C380029585500175B62000E444E002A69 + 7800F3FAFE000F364D0022628800103B5B001C4C780008346700133A6C003361 + 9F00466DA200BBCFE900223C6100758DB100042D6B001A345C003F567B005E7A + A8007E99C4000428640009275C000D2B5D002A4D8B00566C91006C7C99000A30 + 7A00072152000D2B65000B214A00295EC80016326B001B3C79003366CC003464 + C4001E3A6E00172C5400263E6F004B72BE002E457000202F4C004B5F85000421 + 63000A3187000D2C6E001C48AA001A429A00152B5D002B56B7002953AD003567 + D100325EBE003B6AD5002E519D003B66C200406BCC003B63B9004169C3002D3D + 60006683BF00A8B3CC0003226C0006205C00143A91000E22540016327500244E + B400142B64002855C000254BA70025469A00233E82003B67CC00355BB500456E + D4004A71CD00385498002F457A00364E87005E82DD004460A0006C96FB004D68 + AC006C91EE005875BD00819BD90090ABEF008FA5D900092775000C2364001531 + 7C00142C6C001A3686001C337400233F8F00446DDD002D4587004C73DB00486A + C4004665B9005B81ED005678D6005876CA006E89D2000C236C000D215C00142C + 74001D347C0014214B001C2E6300324EA5001C2C5C003955AA00334B9700415D + AE005579E200678BF4006585E500526CB9006A8AEB00627DD2007794EE00829F + F800081A5500102A810009174A0012225C00142254000F193D001B2D6C00304E + B90024336B0023326500222E5A00526DC80026325D007390F8007B98F8003642 + 6C00041042000C1D63001125720012246C0016245C00243577001F2A5500758C + E50015267B0012216300243AA6001D2C74002F3C760018246300344CD0001B23 + 5300232D63002D376D001B267300151D58001B266D001B245C002C336600050F + 5F002C3DCA00222B76004955C2002530B700ECEDFA000811BA001E28D0000307 + 8C000D12DF001016A800181D920020224D00A8ABF4000202FE000202F9000203 + E5000202DC000202D3000202CE000206CA000202CA000202BC000303F0000304 + AA000606FE000606F8000606D9000606D1000606C7000C0CFC000C0CF4000B0B + DB000A0BC6000B0BD500030431000F10EB000E10CA0002021D001213FB001010 + DF001414F0001819F7001418C6001919DF001C1CEC0002020F002627EB003337 + F5004344E6005456FC005B5EE5007575E900C1C1F200D5D5F70049495100E2E2 + F700F4F4FB00FAFAFE00FEFEFE00FAFAFA00F5F5F500EAEAEA0002020200FF00 + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B9DA0FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50A0A2FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF8DC7B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010101010101 + 0101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF6F9B9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01000000000000000001FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF47A2A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000001FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A + D1C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000001FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF010000000000000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ABFA7FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF010000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EC3BAFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF0101010000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF010101FFFFFFFFFFFFFFFFFFFFFFFFFFFF010000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0101010101 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0101010101FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFACA19BFFFFFFFFFFFFFFFF010101010101FFFFFFFFFF010101 + 010101FFFFFFFFFFFFFF010101010101FFFFFFFFFFFF010101010101FFFFFFFF + FFFFFFFFFFFF0101000000010101FFFF0101010101FFFFFFFF01000000000000 + 01FFFFFFFF010101010101FFFFFFFFFFFFFFFFFF01010100000000000101FFFF + FFFFFFFFFFFFFFFFFFFFFF010100000000000101FFFFFFFFFFFFFFFFFFFF0101 + 01010101FFFFFFFFFFFF010101010101FFFFFFFFFFFF010101010101FFFFFFFF + FFFFFF7FAAAEFFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001 + FFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFFFF + FF0100000000000000000101000000000001FFFFFF0100000000000001FFFFFF + 0100000000000001FFFFFFFFFFFFFF010000000000000000000001FFFFFFFFFF + FFFFFFFFFF01010000000000000000000101FFFFFFFFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFF6F + C4BBFFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFFFF01000000 + 0000000000000001000000000001FFFFFF0100000000000001FFFFFF01000000 + 00000001FFFFFFFFFFFF0100000000000000000000000001FFFFFFFFFFFFFFFF + 010000000000000000000000000001FFFFFFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFF99DE44FFFF + FFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFFFFFFFF010000000000000000 + 00000000000000000001FFFFFF0100000000000001FFFFFF0100000000000001 + FFFFFFFFFF01000000000000000000000000000001FFFFFFFFFFFF0100000000 + 000000000000000000000001FFFFFFFFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFFFFFFFF8AD1C6FFFFFFFFFFFF + FF0100000000000001FFFFFF0100000000000001FFFFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFFFF0100000000000000000000000000 + 000000000001FFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF + 010000000000000000000000000000000001FFFFFFFF01000000000000000000 + 000000000000000001FFFFFFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFFFFFF8CA2A4FFFFFFFFFFFFFF010000 + 0000000001FFFFFF0100000000000001FFFFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFFFF010000000000000000000000000000000000 + 0001FFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF01000000 + 0000000000000000000000000001FFFFFFFF0100000000000000000000000000 + 0000000001FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFFFFFF55A4A9FFFFFFFFFFFFFF01000000000000 + 01FFFFFF0100000000000001FFFFFFFFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFFFF010000000000000001010101000000000000000001FFFF + FF0100000000000001FFFFFF0100000000000001FFFFFF010000000000000001 + 0101010000000000000001FFFF01000000000000000001010100000000000000 + 0001FFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFFFFFFFF48989DFFFFFFFFFFFFFF0100000000000001FFFFFF + 0100000000000001FFFFFFFFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFF010000000000000001FFFFFF010000 + 0000000001FFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF01 + 00000000000001FFFF010000000000000101FFFFFF010100000000000001FFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFFFFFFFF99DE44FFFFFFFFFFFFFF0100000000000001FFFFFF01000000 + 00000001FFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFFFF0100000000000001FFFFFF01000000000000 + 01FFFFFFFF010101010101FFFFFFFF0100000000000001FFFFFFFF0100000000 + 000001FF010000000000000001FFFFFFFFFF010000000000000001FFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + FFFFFFF68080FFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001 + FFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF01000000 + 00000001FFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFF + FFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFF01000000000001FF + 0100000000000001FFFFFFFFFFFFFF0100000000000001FFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFF3E + 9595FFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFF0100000000000001 + FFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFF + FFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFF0101010101FFFF01000000 + 00000001FFFFFFFFFFFFFF0100000000000001FFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFF40A1A3FFFF + FFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF + FFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001 + FFFFFFFFFFFFFF0100000000000001FFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFFFFFFFF8AD1C6FFFFFFFFFFFF + FF0100000000000001FFFFFF0100000000000001FFFFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFF01 + 000000000001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFF0100 + 000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFF + FFFFFF0100000000000001FFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFFFFFF99DE44FFFFFFFFFFFFFF010000 + 0000000001FFFFFF0100000000000001FFFFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFF0100000000 + 0001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFF010000000000 + 0001FFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFF01 + 00000000000001FFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFFFFFF93A9AEFFFFFFFFFFFFFF01000000000000 + 01FFFFFF0100000000000001FFFFFFFFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFF0100000000000001FFFFFFFFFFFF0100000000000001FFFF + FF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFF + FFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFF0100000000 + 000001FFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFF010000 + 0000000001FFFFFFFFFFFF41999BFFFFFFFFFFFFFF0100000000000001FFFFFF + 0100000000000001FFFFFFFFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFF0100000000000001FFFFFFFFFFFF0100000000000001FFFFFF010000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFF + FFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFF0100000000000001FF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFF01000000000000 + 01FFFFFFFFFFFF99DE44FFFFFFFFFFFFFF0100000000000001FFFFFF01000000 + 00000001FFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + 0100000000000001FFFFFFFFFFFF0100000000000001FFFFFF01000000000000 + 01FFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFF + FFFFFFFF0100000000000001FFFFFFFFFFFFFF0100000000000001FFFF010000 + 0000000001FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF + FFFFFF8AD1C6FFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001 + FFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFF01000000 + 00000001FFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFF + FFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFF010101010101FFFF + 0100000000000001FFFFFFFFFFFFFF0100000000000001FFFF01000000000000 + 01FFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFFB2 + A1A3FFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFF0100000000000000 + 01FFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFF + FFFFFFFFFFFFFF0100000000000001FFFFFFFF0100000000000001FFFF010000 + 0000000001FFFFFFFFFF010000000000000001FFFF0100000000000001FFFFFF + FF0100000000000001FFFFFFFF0100000000000001FFFFFFFFFFFF77A9ADFFFF + FFFFFFFFFF0100000000000001FFFFFF010000000000000001FFFFFF01000000 + 0000000001FFFF010101000000000000010101FFFF0100000000000001FFFFFF + FF010000000000000001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFFFF0100000000000001FFFFFFFF0100000000000001FFFF01000000000000 + 0001FFFFFF010100000000000001FFFFFF010000000000000001FFFFFF010000 + 000000000001FFFFFF0100000000000001FFFFFFFFFFFF2A9895FFFFFFFFFFFF + FF0100000000000001FFFFFF0100000000000000000101010100000000000000 + 01FF0100000000000000000000000001FFFF0000000000000001010101000000 + 000000000001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFF01 + 00000000000000010101010000000000000001FFFF0100000000000000000101 + 01000000000000000001FFFFFF01000000000000000001010100000000000000 + 00000101010000000000000001FFFFFFFFFFFF99DE44FFFFFFFFFFFFFF010000 + 0000000001FFFFFF010000000000000000000000000000000000000001FF0100 + 00000000000000000000000001FF000000000000000000000000000000000000 + 0001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01000000 + 0000000000000000000000000001FFFFFFFF0100000000000000000000000000 + 0000000001FFFFFFFF0100000000000000000000000000000000000000000000 + 000000000000000001FFFFFFFFFFFF47A2A4FFFFFFFFFFFFFF01000000000000 + 01FFFFFF0100000000000000000000000000000000000001FFFF010000000000 + 000000000000000001FF0100000000000000000000000000000000000001FFFF + FF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000 + 00000000000000000001FFFFFFFF010000000000000000000000000000000000 + 01FFFFFFFF010000000000000000000000000000000000000000000000000000 + 00000001FFFFFFFFFFFFFF9A9599FFFFFFFFFFFFFF0100000000000001FFFFFF + 0100000000000000000000000000000000000001FFFF01000000000000000000 + 0000000001FFFF01000000000000000000000000000000000001FFFFFF010000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000000 + 0000000001FFFFFFFFFFFF0100000000000000000000000000000001FFFFFFFF + FF01000000000000000000000000000000000000000000000000000000000001 + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFF0100000000000001FFFFFF01000000 + 000000010000000000000000000001FFFFFF0100000000000000000000000000 + 01FFFFFF010000000000000000000000000000000001FFFFFF01000000000000 + 01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000000000001 + FFFFFFFFFFFFFFFF010000000000000000000000000001FFFFFFFFFFFF010000 + 000000010000000000000000000001010000000000000000000001FFFFFFFFFF + FFFFFF48989DFFFFFFFFFFFFFF0100000000000001FFFFFF01000000000000FF + 01000000000000000001FFFFFFFF010000000000000000000000000001FFFFFF + FF0100000000000000000100000000000001FFFFFF0100000000000001FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010000000000000000000001FFFFFFFFFF + FFFFFFFFFF01010000000000000000000101FFFFFFFFFFFFFF01000000000001 + 01000000000000000001FFFF01010000000000000001FFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFF010101010101FFFFFFFFFF010101010101FFFF010100 + 0000000101FFFFFFFFFFFF01010100000000000001010101FFFFFFFFFFFF0101 + 0000000101010100000000000001FFFFFFFF010101010101FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF01010100000000010101FFFFFFFFFFFFFFFFFFFF + FFFFFF010101000000000101FFFFFFFFFFFFFFFFFFFF0101010101FFFF010101 + 0000000101FFFFFFFFFF01010000000101FFFFFFFFFFFFFFFFFFFF87A9B1FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01010101FF + FFFFFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFF010101FF + FFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF01010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF01010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010101FF + FFFFFFFFFFFFFFFF010101FFFFFFFFFFFFFFFFFFFFFFFFAA8E95FFFFFFFFFFFF + FFFF010101010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100 + 000000000001FFFFFFFF010101010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41A0A0FFFFFFFFFFFFFF010000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010000000000 + 0001FFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B9DA0FFFFFFFFFFFFFF01000000000000 + 01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010000 + 0000000000010101FFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFF + FF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFF0100000000000001FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01000000000000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFF010000 + 0000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF6699A0FFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000000 + 0001FFFFFFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFF01000000000000 + 01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF83B4ABFFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010000000000000000000001FFFF + FFFFFFFFFFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFF0100000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000000001FFFFFFFFFFFF + FFFFFFFFFFFF0100000000000001FFFFFF0100000000000001FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF309492FFFF + FFFFFFFFFFFF01000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF010000000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFFFF01000000000001FFFFFFFF01000000000001FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D9892FFFFFFFFFFFF + FFFFFF0101010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF01010101010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 0101010101FFFFFFFFFFFF0101010101FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86A0A1FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF7EA3A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF70C5BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C + 8E90FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF469C9DFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF469DA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFC29798FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2A574636FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCC846B389A899C574635FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF7358836947339C9A3A9D9D572EFFFFFFFFFFFFFFFFFFFFFFFFC7D7D7 + D5D5D5D5D5D5D5D5D5D7D7C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87CFC4FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 + 8382828D31335D385D5D9A9D9A894446FFFFFFFFFFC7C7D7D5D5D40303030303 + 030303D2D2D20303D4D5D7D7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF936C68688D + 323C60324C9B899A9A9A9A2D4142C1C7D7D5D5D4D403D2030303030303030303 + 03D2D2D2D2D2D2D4D4D5D7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68A2A5FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8495907E68688F5B604C38 + 869BB7899A3AA49BBFC7D7D503D2D2D2D2D20303030303030303030303030303 + 03D2D2D2D2D2D4D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D9892FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7183827E6767688F313333334C5D9A3A + 5DBB85C7D7D503D2D2D203030303030303030303030303030303030303030303 + 03D2D2D2D4D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF7343A39068826865688D31609B86ACBB5D9CACA9C7D5 + 03D4D2D203030303030303030303030303030303030303030303030303030303 + D203D4D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF94A7A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF74937190907E676843828D7660609B869B5D5D8AC7D4D2D2D20303 + 03030303030303030303030303030303030303030303030303030303030303D2 + D4D5D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 7282828290677E678295828D76869B86AC8A5D9CBAD7D2D2D203030303030303 + 0303030303030303030303030303030303030303030303030303030303D2D4D5 + D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 + 9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF849592827E + 827C7E677E826863A94C4C9B4CA0AC5DAAD7D203030303030303030303030303 + 030303030303030303030303030303030303030303030303030303D4D5D7D7FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7CC7B7FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8495916C68677E676567 + 7E67567B7A609EAB788A4C9CAAC5D20303030303030303030303030303030303 + 03030303030303030303030303030303030303030303030303D4D5D7FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45A29FFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF846C8181906754677E7E67673F657B + 77AD5E5E777A608CB0D703030303030303030303030303030303030303030303 + 030303030303030303030303030303030303030303D2D4D5D7FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF469C9AFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF84AF9481819067687E907E5465537F63ABAD5E5E + 5E88AD8AB0D70303030303030303030303030303030303030303030303030303 + 03030303030303030303030303030303030303D4D5D7FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF84AFA58191817E826790827E3E3E51546385875E5E87ADAD9E + 79C5D40303030303030303030303030303030303030303030303030303030303 + 0303030303030303030303030303030303D5D7FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF738496709181819090827E907E563E5454674B8764888788647A7AB0C50303 + 0303030303030303030303030303030303030303030303030303030303030303 + 03030303030303030303030303D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70706E + 81818190816C6C824E5068546754687B87AD5E5E8864888799D7030303030303 + 03030303030303D1D2D203D103D1D1D1D1D1D1D1D1D1D1D1D203030303030303 + 0303030303030303030303D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF509D99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7496A66E9190818181 + 81906C664B5067676854545CAAAD5E5E77AD5E5E99D503030303030303D2D1D1 + D1D1D1D1D1D0D0D1D0D0D0D0D0D0D1D1D0D1D1D1D1D1D1D2D103030303030303 + 03030303030303D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC + A19BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73A6A691918190819494946C664E + 4B5068676867687BAAAD887777883C3C99C503030303D2D1D1D1D1D0D1D0D0D0 + CFCFCFCFD6CFD6D6D6D6D6CFCFD0CFD0D0D0D0D0D1D1D1D1D2D2030303030303 + 03030303D4D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF72A6A56E9181816C6C929490664E6662566868 + 6751565CB3AD647979887A6099D5D2D2D1D1D1D0D0D0CFCFD6D6D6CECE020202 + 0202020202020202020202CED6D6CFD0D0D0D1D0D1D1D1D20303030303030303 + 03D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF7370A6A59696A592926C92946C3F666655663F67676854657B + B35E88888877492C99E4D1D1D0CFCFCFD602CD02020202020202020202020202 + 020202020202020202020202CED6D6CFD0D0D0D1D1D20303030303030303D5D7 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8AD1C6FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF74AFA66E916E9491916C91946C543E53555666537C67653F657B7A777B88 + AD5E3C40ABEAD0D0DAE4C5C9C9CAD7C5D1CECD02020202020202020202020202 + 0202020202020202020202CED6CFD0D0D1D1D1D2030303030303D4D5C73342FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72AF97 + 6E6E9181919292916E6C68657F655355663E677E513E3E7BB388797B6477ADA0 + A4C0EB6F360C0C0C0C0C0C0CF6B8D7D602020202020202020202020202020202 + 02020202020202020202CED6CFD0D0D1D2030303030303D4D73132333C40FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF7EA3A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF94A56E916E9191 + 919091A56C82A37EA36567803F517C674F3E3F7BAD887B646479775E392B0D0D + 0D0D0D0D0D0E0D0E0E12F6BBD002020202020202020202020202020202020202 + 020202020202020202D6CFD0D0D1D103030303D2D5C785AA473976AB78FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF48978FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8492A56E916E6E81A5A5A59190 + 828290A3A3A351565354514F3E3E537BB33D64C1C188793747300BFDFDFDFDFC + FCFDFDFD0F0F0E0C9DD002020202020202020202020202020202020202020202 + 020202020202CED6D0D0D1D1030303D2D4D55A5A5A5AAB855A76B176FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF74956CA5916E6E949496A5A5919082909082A3 + 6865657F686751673E3E567BC13D3DADC17A3D495B59F9010101010101010101 + 01FA0F0E0CCBD602020202020202020202020202020202020202020202020202 + 02020202CECFD0D0D1D20303D4D4C75A5A5A5A5A8585313131325BFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 + A6A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF727195929294A591916EA5A5949082819282A3A3A3A38268 + 5468677C3E3E567B885E3D7ABA7A408A9C59FB0101010101010101010101010F + 0EF6C90202020202020202020202020202020202020202020202020202020202 + 0202D6D1D1D1D10303D4D75A475A5A5A5A5A5A5A852C4798385DFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF8493956C92929281916E6E6E92829082908282A3A3A3A3685482825467 + 673F5479775E3DB3C1C15E9E5D59FA01FAFAFA0AF4F50101010101FC0F0CB8CE + 02020202020202020202020202020202020202020202020202020202020202CE + D103D1D1D203D5C72C372C5A5A5A5A5A5A474747475B989A3AFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D9C9CFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5893 + 8395908194916EA56EA57E7E8282827C8290A36868A39358588368676553543D + 3D7A40C1B3AD7A8785590101FCFDF7EF04DD09FA010101F90F0EF6D002020202 + 02020202020202020202020202020202020202020202020202020202CED003D1 + D2D2D4D775375A5A5A5A5A5A5A5A47474731474798989A5DFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7193838268906C + 91A56E6E91907E906C7F7E907E7EA38268712B30FF836868654F7F5C7A9EADAD + 877A3C5EAB590101FB0FA3040202E6C4FA010101FD0E0CDC0202020202020202 + 0202020202020202020202020202020202020202020202020202CFD2D0D1D2D5 + C7375A5A5A5A5A5A5A5A5A47474747315B5B5B5B38A844FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70A7ADFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7193A36868686C94706EA591 + 90829082827C7E82686883838284FFFFFF836867543E7F77879EADAD5E5E3C7A + AB59F9F9010FC604020202F4FA010101FD0D0CC9020202020202020202020202 + 0202020202020202020202020202020202020202020202CF03D1D1DCC75A7575 + 5A5A755A5A5A5A2C494747474747475B389A32FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF33969BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7180A37F56686C6C94967092828282A3A3 + 687E67686868828458FFFFFFFF836868513E56797A9EC15E5E3C3C5EAB95CCF4 + F5C4EF02020202CC01010101FD0D0CC902020202020202020202020202020202 + 0202020202020202020202020202020202020202CFD1D1D3D775373775753775 + 5A5A5A2C87764747474747A9983832FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF71438053688290909270706C82838283A383A3A36867 + 6782842FFFFFFFFFFF84546751655699B3ADC15E5E783D7A7AC60202DDE9DD02 + 020202CC010101FAFC0D0CCA0202020202020202020202020202020202020202 + 0202020202020202020202020202020202D0D1D2D5C748754848483748755A5A + 85854747474747475B4776FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF849595A3438068689081F3919583A3A3A3A3A3A3A3836867835846FF + FFFFFFFFFF8454513E6556777A7A9E5E5E5E3D5E42C0020202020202020202CC + 01010101FC0D0CCA020202020202020202020202020202020202020202020202 + 02020202020202020202020202CED0DBD5C75C5C4848484848485A5A5A85A95A + 5A47A99847475AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A + D0C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 + 6C7E827F80437F686C816C82A3A38080A3A3807FA3A3A38358FFFFFFFFFFFFFF + FF8454673E4F5477B39E785E5E5E3D8840C6020202020202020202CCFA010101 + FC0D0CCACD020202020202020202020202020202020202020202020202020202 + 020202020202020202CDCFD1DCC75C5C5C485C484848755A75755A4785474747 + 47474735FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF509D99FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF726C6C827F68 + 434383839582A37F7F8080A36F8093808093712FFFFFFFFFFFFFFFFFFF845168 + 543E80775E8AB35E3C3C5E8726C6020202020202020202CC01010101FC0D0CCA + 0202020202020202CDCDCDCDCDCDCDCECECDCECDCDCDCDCDCD02020202020202 + 0202020202CECEDFC5CA5C5C5C5C5C4879484837755A5A47474747474747BF46 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ABFA7FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96816C6C83A37FA3A3A3A3 + 808F8F8D8F808F8F8F8F8F8F8F712FFFFFFFFFFFFFFFFFFFFF957E68543F5087 + 879EB3875EAD3D5E3CEA020202020202020202CC010101FAFC0D0CCA02020202 + 020202CDCDCDCECECECED9D90606D9D9CECECDCDCDCD02020202020202020202 + CDCDCFC548484848379948374899484837755A474776317647475B6BFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F9CA3FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96AF6C8282686868A383A38F8D698B8D + 8F8D8F808F8D6D6D2FFFFFFFFFFFFFFFFFFFFFFF8E58676754555077BA3C3C9E + AD797AB340C6020202020202020202CC01010101FC0D0CCA020202020202CDCD + CDCECED906E3E8E8E8ECECE8E306D9CECECDCD020202020202020202D8E3C548 + 48373775755A755A85BB9898BF2C5A5A85BAAB4747475B2EFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF74AFAF706C6868686868A3938D8E8E8B8F8F8B8D8D8D + 8F6D2828FFFFFFFFFFFFFFD7D7D7D5D5C358515153535077BA3C3CBA7A777AB3 + 40EA020202020202020202CCFA010101FC0D0CCACD02020202CDCDCDCECEDEE3 + ECECEEEFF0F0EEEEEEECE306D9CE02020202020202020202DDC04B48372C3147 + BF47989AA89DE2E29A78858585AB855A4731476AFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF8AD1C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF74AF9696926C68686883836F8E8E8E8E6952528B8F8F8D8F6D35FF + FFFFFFD7D7D5D5D4D403D203C05867513F533F77BA3C3CB3C15E885E40C60202 + 02020202020202CC01010101FC0D0CCA0202020202CDCDCED6DEE8EEEFF0F2F2 + F2F3F2F2F0EEEBE306D9CDCD020202020202CDE9C0635C483731989AA8A8A8E5 + E5E5E5E2BBC1BA5AAAAA8547313C856AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 72AFA670926C6C82A383A38F8E8E69698E6969528B8D8F8F356DFFFFD7D7D5D5 + D4D2D2D2D2D20303C07167513F8053AABA3C5EBAC177797726C6020202020202 + 020202CC010101FAFC0D0CCA02020202CDCDCED9E3ECEEF0F2F3AF09090909AF + F3F2F0ECE3D9CECD0202020202D8EE66634B5C997531989AA89AE2E5EDE5E2A8 + A99975A9AABA855A4739AB2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF89A5ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84AF707070 + 6C6C8268A3838F63698E8E69698E8D8B8D8F6F46FFFFD7D7D5D4D2D2D2D10303 + 030303039F58514F3F5655AABA3C5EC1AD7A797726C6020202020202020202CC + 01010101FC0D0CCACD020202CDCED9D6E8EEF0F30909F4F4F4F4F4CC74F3F2F0 + EBDED9CE02020202E6B6535F4A4A4B4887315BA8A83AA8E2E5E2A85B2C48755A + 85AA85314747312EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 + 978FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF739594969494926C6C6C6C + 958D8D6969698D8B8D8D8F8F6F2869FFD7D5D5D3D2D1D2D20303030303030303 + 9F71543E3F535587BA3C5EB3AD5E774926EE020202020202020202CC01010101 + FC0D0CCACD020202CECED6E8EEF0F309CCF5F5F7F7C4F7F5F409F3F0EEE3D9CD + 020202EE54554D4A5F4A485C484798989AA8E2E2E2E29A983177755A85858531 + 4747A92EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74929192709292926C6C6C82558D8D8F + 8D8F8F8F8F8F80716F63D7D5D5DCDBD1D1D203030303030303030303C271653E + 3F538DAAC13C5EC1C15EB33C26EE020202020202020202CC01010101FC0D0CCA + 020202CD02D9DEEBF0F209CCF5F7C4F8F8F8F8C4F5F409F2EFEC06CE02E6F068 + 535F4D614A4A5C5C75475B98A8A8E2E2E2E29A98397A495A5AAB855A47475B35 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C9E9AFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF7495AF706C906C6C6C6C706C668F8F8F6F808F8F80 + 8093716FCAD5D5DCDBDBD1D10303030303030303030303038D71674F3F5355BC + B33C5EBAC15E887A26EC020202020202020202CC01010101FB0D0CCA020202CD + CED9E3EEF0F3CCF5F7F8F8F9F9F9F9F8F7F5CCF3F0ECDECDF06C3F3B3B3B3B4A + 4B625C37757698A8A8A8A8A8E2A89A5B8579755A8587AA2C3176A935FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFAFAF7092819092947070A3557F808F9393535593A371586B88 + C9D5DBD0D1D103030303030303030303030303D48B4351513F536687C15E5EC1 + C1B3883C8AEC020202020202020202CC01010101FC0D0CCACD0202CDCE06E8EE + F209F4F7C4F9F9FAFAFAF9FBC4F5CCF3F0EEE6F1843F613B3B61615F624B4837 + 77769A9A989898989AA8A8477548995A85AAAA8731764746FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7165A4FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF92969492949270A696958093A3A3A3807F657F7F95837D9CAE4139CAC9 + D3D1D1030303030303030303030303D4668367653E544D77AD3C5EB3C1AD883C + 9EDE020202020202020202CC0101010101FD0CCA040202CECEDEEBF0F309F5F7 + F8F9FAFAFAFAFAF9C4F5CCAFF0EEF2683B613B3E5F4D3F5F4A484879755B5B31 + 31315A399A9A9A9875377585AA855A8585475A46FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF + 9670919294A59482557FA37F7FA38383719584937A86A1B8412D4189B5B0C9C5 + 03D1030303030303030303D48D83673E3E544D77C1783CC1C1B3795EABD90202 + 02020202020202CC0101010101FA0FB202020202CEDEEEF0F3CCF5C4FBF9FAFA + FA01F9F9C4F5CCF3F2A3A34F3B3E3F3E3B3E3B4A4B4B63375A31313125373787 + A8A89A98AA4875858787AA8585AB5A2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF79ABA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF97A67092 + 7084439383A3A3A39393A3716F6D69AB86608A8AB58A8CBD8C419CBD85CAC5D3 + D1D10303030303D48D68543E3E554E77B33C3CBAC15E777A7606020202020202 + 02020209F5F5F5F5F5F5F5F2020202CECEDEEBF0F3CCF5C4F9F9FAFAFAF9F9FC + F7F5CCF383533B3B513B613B3E4D5F625F625E5E37773737484879779AA85D5B + 4977995AAA87AA8587AB5A46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF359798FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9497966C8295286D69 + 698E64B4ADABB5B1AC8A9BAC605D9BACACACACBB8AB8B5AC8C8CA2ABB0C9DCD2 + D10303D48D54544F3E534E77BC3C49C1C187775E8AEB020202020202020202D8 + DDDDDDDDDDDDDD0502020202CEDEECF0F309F5F7F8F9F9F9F9FBF8C4F5CC847F + 654F4F513B613E654D613B3B4A48485C37485C5C485C7B77A8A8385B319999A9 + 5A8585AA8785762EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7073979243855D9A9D9D9D9D9D + A8898989B7A1A4A18A5D8C5D9CB79C3A9CB79C8C4CAC4C8C4141ACAACAD5DCD4 + 8F683E3E3F53665EC13C875EC1B35E3C3CEB0202020202020202020202020202 + 0202020202020202CEDEECF0F209F4F7FDF8FCF8F80AC4F7CC43534F4F517C3E + 3F3E3E616156505C5C4B4B4B5C4B5C5C5C48346F9A98985B2C77755A5A5AAA87 + AAAB856AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96979694719EAECB9D9D9DCBCBCBCBCBCB + 89A2AEBD8A418A419CB7B79C895D9C9C9C9B5D9BB5B88C41415DA9C78B7E3E3E + 3F534E87C13C2537B35E5E3C9EC8020202020202020202020202020202020202 + 020202CDCED9E3EEF2F309F4F5F7F7C4C4F7F430803B3E4F514F3E3E543F5F3E + 51615C5C4B4B5C4B4B4B4B4B796958FF9A9A985B2C77755A75AA85AAAAAB852E + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF6E979292937AA1AE458989899DA89D8989B7B7B78C + 8C5D5D5D89CBB7B79CB79C9CB79B9B9B869BAC8A8A339C9A7B673E653F564E87 + C13C255E775E373C3CC8020202020202020202020202020202020202020202CD + CED9E3ECEEF2F309CCF4F5F4F4CCA366533B4F7C51513E3E3B6151514A4B4A4A + 4B4B4A4B4B4B4B642830FFFFA89A985B2C77755A7587AAAB87AB766AFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF499F9FFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFA66E81817F5E9E2D2D2D2D41899A89419CB7B7B7B88AA24C3A + B7B7B7B75D9CACB7B7605D869C9B9BB1B1418CAC8E673E3E3F534E77B33C875E + 5E5E5E3C3CC8020202020202020202020202020202020202020202CDCDCE06E3 + EEF0F2F3F30909CC72804D3E3E3E514F5151513B4F7E3F4A4A4A62624E4E625F + 4A5C5258FFFFFFFF898986472C37995A755E87AABAAB476AFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF389B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF706E949480787A8A8A8AA1A18CAE4189AE080808BDB79C9C899CB7B7B7 + B75D89895D5D868633865D5D5D5D9C868E683E3E3E548D875E3C3C5E5E77875E + 9EC8020202020202020202020202020202020202020202CDCECED9DEE3ECEFF0 + F2F2F395663B3B3B3B4F3E51513E3E51903B4A5F5F625F5F4A4A4A4A522830FF + FFFFFFFFAE9A9A5B2C379985AA5EAA758731852EFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFADA4A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 + 9492708F9EAD8AA0A1BEA18A8CBD9ABB893A5D9CACAC8AAC893A895D9C5D98BB + BB5D5D9B9B86B1B1B18698BF7B673E6553568D875E3C3C5E5E5E5E789EE30202 + 02020202020202020202020202020202CDCDCED6D6D6CF07DFEBEBEBF0F2808D + 503B3B3B3E3E7C673E517C7E614A4E5F5F5F5F4A5F4A52276DFFFFFFFFFFFFFF + A29A985B47779985875E5E877739496AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74707092948D + 3CA0BEB9ADB9A18AB5C1887B7D6B8E8B528B80568D693DAB989898985D5D5D86 + 9B9BA9A9A99BBD9A8E433F53555552875E3C3C5E5E5E5E7825C9C8CDCD020202 + 0202020202020202020202CECED6D607DAE4E0DCE0C5EAC068806650613E3E3E + 3E514F3E517E3E5F4A5F4E5F5F4A4A5F4A626D8BC7FFFFFFFFFFFFFFA29A985B + 5A777785875E5E875E49856AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFB9A39FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72949494708D9EB4B4AD + 9EB9A1B8B16D95A3807F805655803F535365558F8B7D3C32983A3A3A3A5D5D5D + 5D9CBBBF34685553665563495E3C3C5E773C875E9E3A3A85C9C8D902CD020202 + 0202020202CDCED6D607E1E0C5D7C7CACACA8B93553E5F5F3E3E3E517E4F3B7E + 7C3F4A4A5F5F625F5F4A5F632755C3C7FFFFFFFFFFFFFFFFA29A985B4977492C + 775E5E875E49496BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7292706E928FADB4B47A42B4BEB8 + 405871285555556666504D55505055558F8D8D697DAD335B9A389A9CB7899CA8 + 8E433F3E3F664B855E3C3C5E2C3C7A4978983A9D3A3AA9CAD3D6020202020202 + CDCED607E1DCD5D7C77549404C98346650615F4D503F4F7C3E3E90515F4A5F62 + 4E5F5F5F4E4A2228B6EAD7C7FFFFFFFFFFFFFFFFA29A5D5B605E855A755E5E87 + 5E497644FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68A2A5FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF7294706E708DADB444ADB4B4B9AE44FFFFC0 + B67F8F6F8F3F3F6166556666505066668D9F668B7BB086BBAC5D899869543E3E + 3F5563495E3C3C5E2C255E877838989C38383A9D3AA975C5CFCECD02CED607DC + D5D7D7D7C72C219DE2AB554E4E4E664D4E3F3E3F677E614A5F5F4E4E625F5F5F + 62278FEEE1D5D7FFFFFFFFFFFFFFFFFFA29A98383378495A855E5E8787AB7642 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D8D92FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF7470706E708BB4B4B9B4B4ADB42A2EFFFFD2E7EFEEEF + B6666D524E66559F6650538F663B509F668D8B7B7978989852673E3E53557B49 + 5E3C5E5E253C785E3C985D389A989838383A3A3A9AC7D7D0D6D6DBD5D5E0E0E4 + C99AE5E29A8B4D5F4D554E5F3F4D4D6767504A5F4E624E4E625F4A7B27B6E3DA + DCD7C7FFFFFFFFFFFFFFFFFFB79A5D5B3339A985AA87878787857640FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF7470706EAF8B44B944B944423D2D46FFFF03E7ECCE02CDE6F159 + 308F6963628B8B8B8B668D8D8B8B8B2752527B7766513E3E55558E783C3C3C5E + 2C25495E78869C5D9A9A98989A9A9A9AA8E2E2E2BFC7D7D4DFD6CFD7E2EDEDE2 + BA555F5F4A5F5F3B3B61674D4A62624A62624A4A4E623466EED6DFE0D7C7FFFF + FFFFFFFFFFFFFFFFAE9A9A5D8647A9ABABAB85AAAA76393CFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB29697FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF96967091946B42B9A7B96A6AA15D46FFFFD1EBE8D9CD0202EF0101F72974 + 588E7D8E5252634B6352637B635252525565533E3F537B5E3C3C7A7A2C3CAA87 + 5E869B8686475B985B9AA89AA89AA83A9DE5E2E2BFC7BFE5E5EDE2A852665F5F + 4A614A4A6165624B63626262624A4B4A6327B6E8D6E7E4D5D7C7FFFFFFFFFFFF + FFFFFFFFA29A9A985D984785AB858587AA858540FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9770 + 9191706BBE44BEA76AB4B88C46FF03D1EBE8CECD0202EFFA010101FA0B0F309F + 5234346434637B797B7B344B55A3803F3E567B783C9EB3B3785EAA49785B385B + 5B4747385B5B9AA8A8A8A89A3A9DE2E2E5EDEDEDE5E2E277665F5F4A5F4A4A4D + 4D4A4B4B637B4B4B62627B348FEED9CFE7E4D5D7C7FFFFFFFFFFFFFFFFFFFFFF + 41899A98983898B1ABA9ABAAAB85A97AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF6465A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96966E91707D + B944B9B97DB4A4B746FF03D1ECE8CECD0202EFFA010101FAFD0E12E8E6EFB68B + 346B6A88797B797B8056533F50807B493C609EB34987493C7886385B385B9898 + 475B5B98989AA8A8899D9DE2E5EDE5E5E2E2A8694D624E624A9F50625C5C4B5C + 7B4B4B634B64349FE8D6E3E7DBD5D7C7FFFFFFFFFFFFFFFFFFFFFFFFAEA89A9A + 383898A98585AB85AB85AA26FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFA49B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF966E916E946BB944B444 + 7D6ABEA246FF03D1ECDECECD0202EF01010101010F0EF6CF020202D8E9EEC06D + 6B5E887980563F5555807B493C3C7AB376853C783C3238385B3838985B475B5B + 38989A9A89899DE2E5E5E5EDE5E2AD665F4D4E4B624E4B5C5C4B7B797B634B7B + 6427C0DEE3EBE1DCD5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFA29A9A5D3A389885 + ABAB85AB85ABAA3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A + 9895FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96969494946AB944B4B96A6AA4A2 + 8EFF03DAECDECE020202EF01010101010F12F6D002020202020202CCC4292B69 + 8080535380807B493C3C9EB3787887495E3C39865B985B98985B5B9886865D98 + 5D89899DA8E2EDE5E2A8694E4D4E8B63634B5C4B485C4B4B5C5C5C6A66EEECEB + EBE0D4D5D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA29D985D3A9A9885AB85ABAA + ABAB4940FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E679AFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF96709494927DBEB444B4B9B9A157B2FFD2DA + E806CD020202EFFA010101FA0F0EF6CF02020202020202F3010101203080653F + 53557B873C9EB3B34976AAAA87647B793D4931989A9A98985B5D989A5D98899A + 9DE2E5E5E2A0555F4A4E63634B4B4B4B5C4B4B4B4B7B52C0EBE1DBD4D4D4D5FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA49A9C3A3A3838B1ABAAABABBAAB4926 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF967092706C3442B444B47D6ABEA7B2FFD2DAEC06CD02 + 0202EFFA010101FA0F12F6D002020202020204F1010101FB748F533E3F5564AB + 3C607A787649AA85B07B637B7B7B796488AB5BBF9A989898B18A8C8989E2EDE5 + A869664A4A4B7B635C5C4B4B4B4B4B797B8BEAD1030303D4D4FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF57A89C5D3A3A38A9ABAAAB85ABAB7826FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B9DA0FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF967094706C3D4444B4446A6ABE57B2FFD2DAEC06CE020202EF01 + 010101010F12F6CF02020202020202F1010101017455533F808088785EB1605E + 5E4985AB796363634B626363636363648885BFBF98864CB7B7A8E5E5AD8F9F4A + 4B63524B4B4B6363634B3D2872FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFA49D9C9C3A3A38B176AAABABABAB7826FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9A39FFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF967092928364B96A44B4B9B9A157B2FFD2DFECDECD020202EF0101010101 + 0F0EF6D002020202020202F1FA0101F984553F53558088873C787ABC7849395E + 79634B4B4B4A4B4A4B63638B8B63637B7A864C5DB7A8E5E269665F6263634B4B + 4B634B4B4B792FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF579D9C5D3A3A3833B1AAABAB85857626FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF439797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF70 + 6C92956442B47DB444B9BEA48BFFD2DFECDECE020202EFFA010101010F12F6D0 + 02020202020202F3FA01012058555050555688783C7AB3BC609E8749648D7B5C + 5C4B4A4A4A4A4B626263634E628B527B7776A8A08D7B7B637B7B7B7B7B647D5E + 2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 57A89C5D3A3A3A783949494987ABA93CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70709492933D + 44446A3DB4B4B9A48BFFD2DFEC06CE020202EFFA010101FA0F12F6CF02020202 + 020202090101FA2058805555558078397A3CAD9E9E785E328EE96C3080527B5C + 5C63626262625F5F9F8B6363637B648A76B176865B5B865B869A89A7FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A89C5D + 5D3A3849392C495E87ABA93CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF3A9491FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70946C6C802644444242 + 44B4BE57C2FFD2DAECDECD020202EF01010101010F0EF6D002020202020202F4 + 010101205856563F53567A789E7AB33C603C3C2DB204F1732929732B2834247B + 7B626263637B7737794B345BA8A8E2A8A8E2A89DA8AE1C19FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2EA89C5D5D3A3A39 + 39494987AB85A960FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B + 9DA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF706C6C6C933CB96A6A426AB4B9A7 + FFFFD1DAE806CD020202EF01010101010F12F6D0020202020202EF0A010101F8 + 587F3F5353687A76787A9E789E789E4C63DD0402EFF1EFA6CC73838F52343D3D + 3D8777794B4B4B85893A3A3A9D9D9DE257111417FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2EA89C5D5D5D9860392CAA87 + 8585A960FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF926C82836F8AA1B46AAD42B4B9A7FFFFD1DA + ECDECD020202EFFA010101010F12F6CF02020202CEDEF401010101F8847F6565 + 687F3C767A7AB3BC789E873CB2DD02CD0202020202EFE6DDE9EEC0647A78887B + 62624B5A8989898989893AA411101417FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46A89B9B985D9B3C7839AA87ABAAAA60 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF6C6C83436960B8B944AD44B4BEA7FFFFD2DAECDDCE02 + 0202EFFA010101FAFD0EF6DAD6CECEEBF0590B010101FAC495683F3F687F7876 + 3CB3B3609E3C7739C3D8CD0202CD0202020202050402CD05EE637B624E4E6275 + 5D98985D5D5D5D2A10101019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF46A89B869B8676788785AAAA7678AB39FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41A0A0FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF7482826843698AA1A0B4ADB444B9A7FFFFD2D1ECE8CECD0202EF01 + 01010101FB0F1246F62E0C120D0FFD01010101C4837F3F56687F78A9787A7ABC + 7878B03CC302CDCD02020202020202CDCD0204D802C08E5050504E75A9A98686 + 8638982A10101419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF46A89B86A9A9477678858787AB78B139FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DA09EFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF7482A37F836B8AA1BEADB4B444BEA7FFFF03D1EBE9D8CD0202EF0101010101 + 01FC0F0D0E0E0E0D0FFCFA01010101C4585365677E567847787ABA9E609E3C2D + C3CDCDCDCDCDCDCD0202CDCDCD02020202B6663B4F568FAB869BB1AC9B86982A + 10101419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF35BB8A606049498585AB87AD873C3C31FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF499F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF308283 + 68716BA28AA1AD6AB444A0B9FFFFFFD1EBEC06CD0202EFFA010101010101FAFC + FDFDFDFDFB010101010101F7435467677E689E76397A9E789E9E5E8AC304D9CE + D9CECECECECECDCDCDCD020204B65365656880AB86869B6086865D2D10101419 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 46867A887777778585AA877AB37A78472BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72829568806BA2 + 2D8AB842B4B9BEA7FFFFFFD2DFEEDDCECD02EFFA010101010101010101010101 + 010101010101F9F5687C7E689068B5A9608AB8A1A18A87B5C3E9E8E8E8DEDE06 + D9D9CECECDCDCD02D8B666563E3E508586A939394733765710101019FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35858877 + 9977994985875E87875E49982BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72829568436AAEA1B9A7BE + B9B9BE2EFFFFFFD2D0EEE8D9CD02EF01010101010101010101010101010101FA + 0101CCF1A3F27E68907EBC86B1608AA18A9EAA4C9FEFEEEEEEEEECECE8DE06D9 + CECECD02D8B6557F3E3F6675867660397660762A11101419FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAA7B7979777987 + 49875E5E775EAA5B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848383564342A4B8B9A7A4A0A0A4A7 + FFFFFF03D1EBE9DDCD02EF0101010101010101010101010101010AF5CCEF04EE + 827E7E68907EB1A9B19BA18A603C874CC2F2F2F0F2F0F0F0EEEEEBDE06CECE02 + D8B655533E506685767660397660B12A11101019FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F997B5C5C5C5C5EAA875E5E + 5E5E77472BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A9E9CFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF8468835680B957A1B9BEB8A1BEA12EFFFFFFFF + D2E7EEDECE02E6F1F1F1F1F1F1F1F1F1F1F1F1F1F1EFEFDD020202EF83F27E68 + 8182AB866060B58A8A9E5EAC58090909AFF3F3F2F0F0EEECE3DED9CED8B64E66 + 3E50668533765E3C7833325710101419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5879624BB24B4B874949775EAD7AC139 + 36FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF319B99FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF848271688F42A2B8BEBEBEA1B4BE2EFFFFFFFFD2D1ECE9 + D9CD020202020202020202020202020202020202020202EE827E7E828195B5A9 + 608AB59B8A3C879B2BF5F4F4F4CCCC09AFF2F0F0EBE8DECEDDB64E8D613F66AB + 86393C5E6060861C10101019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF584B62B24B4BB24949495EADADADADAC2BFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF5868717F5542AEA1A1A1A1A4A18C35FFFFFFFFD2D1EBEEDDCE0202 + 02020202020202020202020202020202020202EF83F27E829182B186608A9B5D + B5B1395B30F8F7F7F7F5F5F4CC09F3F2F0EBEB06DDB6629F50538FAB86765E3C + 3939321C10101419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF8F4B5F4AB24BB288878777AD5EADC19B36FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF5868A3806FB9A2A1A1A1A1A1A08C36FFFFFFFFFFD2DAEEE905CD0202020202 + 020202020202020202020202020202EF827E906C919076B160AC9B9BAC9B765B + 59FAF8F80AC4C4F7F5F4CC84F2F0EEE3DEB6628D3E658F7533393C5E8760321C + 11101019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF8D4B5F5FB263B2888787775E5EADC19B36FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF586883 + 5680B957A2A1A1BEA1BE8C36FFFFFFFFFF03D1EBECDE04CD0202020202020202 + 0202020202020202020202EF687E906CA58286B5604C9B9B9E60AA985901F9F9 + F9F9F8F8F7F7F4CCAFF2EEEBE6B64E663E3E8FAB33393C5E875E331C11101419 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 80635F4AB24BB24949497A777AADC18636FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF714371936FB9A4 + 2D2DBE2AA0BEA435FFFFFFFFFFFFD1D1EEE9D9CDCD0202020202020202020202 + 020202020202CDEF82829090A568A9BDBDB8B1B19E8C39B15901FAFAFAF9F9FB + F8C4F7F409F3F0EEE8B64E663F3F50AA86333C5E3C3C331C11101019FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F625F4A + B2B24B77AA49B37AB3ADC1602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF934368936FB9A42D2DBEA1 + A1A1A12EFFFFFFFFFFFF03D1E7EEDDD8CD020202020202020202020202020202 + 020202EF82906C81A56798BD4CB89BA99B9C78325901FAFAF9F9F9F9F8C4F7F5 + CCF3F2EEE8B64E503F554DAB76763C5E785E331C11111419FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF934A4A62C3634B77 + 77877AADB3ADAD7635FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 + 6AA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8043827169BEA42D2DBE2DB8BE572E + FFFFFFFFFFFFFF03D1ECEC0604CD0202020202020202020202020202020202EF + 906C6C81A55498AC8A8AA9B19B8A3C3259FAF9F9F9F9FBF80AC4F7F4CCF3F0EE + E9B64E50533F667676763C3C5E7A2D1C11111517FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3625F62B2B24A777777885E + ADADC16035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDA09EFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF934382716DA1A42DA4BE2AA1BEA135FFFFFFFF + FFFFFFFFD1DAEEE9D9CDCD020202020202020202020202020202CDEF6C908181 + 6E7F868AA18C9BA9B58A603859F90A0AF8C4C4C4F7F5F4CC09F2F0ECE8B64E50 + 3F55667676763C3C5E7A231C11111419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3625F4AB2B24B7999778887ADB3C160 + 35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83A5ABFFFFFFFFFFFF + FFFFFFFFFFFFFFFF30804382716D60A441A1BEA1A1BEA435FFFFFFFFFFFFFFFF + D2D1E7EEE906CDCD0202020202020202020202020202CDEF81818181A68086A1 + A1BDA9A9B18C608CF4C4F7F5F5F5F5F4F4F409AFF2F0EEE8DDC04E4D50536676 + 7676605E5E5E601511111419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFA3625F62B24A4A5C99775E7A88ADAD6035FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFF30934382836D8AA42D8ABEA4A1B9A12FFFFFFFFFFFFFFFFFFF03D1E7 + EEE606CDCD0202020202020202020202020202EF6C818181A680868C8A8A86A9 + B1ACB5AC30F4F4F4F4CCCC0909AFF3F2F0EEECDED9C04E663F3F4E85B1A9393C + 7787231C11111419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF83625F5FB2625F799977885E5EADAD7846FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + 30934382956DB8A42DA1A4A1B8B9A42FFFFFFFFFFFFFFFFFFFFF03D1EBEEE606 + CDCD02020202020202020202020202EF9281919196559B9B8CB89BB1B1BB9BAC + 9D573558AFF3F3F3F2F0F0EFEEE8DED9D9C04E663F3F4D85A986603C77872314 + 11101417FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF95625F5FB2625F79777788875EADAD6035FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF6465A4FFFFFFFFFFFFFFFFFFFFFFFFFFFF2B938382 + 95693CA42D8ABEA2B8A1A2FFFFFFFFFFFFFFFFFFFFFFFFD2D1EBEEE9DDCECD02 + 02020202020202020202CDEF908191A59666338C8C8A9BA9B1BB9BAC9A9CBB9C + B86A8DC2F0EFE9E8E8DE06CE06C05550503F5F85A9A9603C7787231411111417 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 95625F5FB24A5F7988887A875EADAD3946FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF839A9BFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B43828295698A8A + 2DA1A1BEBEB9A4FFFFFFFFFFFFFFFFFFFFFFFFFFD2D1EBEEE9DDD8CDCD020202 + 0202020202DDEE9094818192A555AC8C8C8A86B1869BAC5D98BBB5B1B18989CB + A08EC3ECDE060607E89F554D3B534EA986A933495E9E2314111114FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF844E5F5F + 4A4A5F6488885E87785EB37846FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF8DA7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58438382846BB8A1A1A1A1BE + BE4257FFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D1E7EEECDDD9CDCE020202020202 + DDF1969491949281A58DACB5BD8A9B86B186BB5D895D9CBBBB9B9B865D9C45BD + 64C3C6EEEBC28D5F3F658D76A986253C3C601E14131114FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF844E4D4D4A4A4E64 + 5EAD7AADADB3C1BC6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF58A3827E846BB8A1A1A1A1BEA1A02AFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF03D1DFEEEEE8DDD804CDCD02CDEF9597A692 + 81819294A58BA9B5B186869B86A99B89893AAC8A9B5D5D5D5D9B8C41B79D45BE + B2804E5F613F8B76B176393C25261A14111118FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848B4D9F5F4A4E88AA87ADAD + 9EBAC1B52EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFF58836C6C847DAEA1A1A1A1A1A1A1A7FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFD2D1D1EBEEECE8DDD902D8F2AFA5A69481909181F3 + A552B1B1A98686869B5D865D89895D9B9B5D3A32603886B19BB1BB5D988D6662 + 4D508BA9A986393C3C231A15111116FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9F4D61615F4DB347AA773C78BCC160 + 2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFF58826C6C846A8CA1A1A1A1BEBEA144FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF03D1DAEBEEECDEEEF296A6A5A5A591818192929162BCB5 + B19B9B5D5D5D9C5D5D5D5D9B9B869B9B32865B868686865B854E4D4E5F538BA9 + B18676493C231A14131016FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF50619F9F5F4D77A9875EAD7AB3C1AB2EFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF439391FFFFFFFFFFFFFFFFFFFF + FFFFFFFF71956C92956A8CB8A2A2A1A4BEA144FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFD2D2D1DAEEF29697969470A6A5818181816C944BBFBCBC8A9B9C + AEB79C5D5D5D5D9BB19B86B1865D9B9B9B5D5D5B5A4D4E624D6563A9B1A97631 + 3C261A15131016FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF9F3B509F5F9F7785783CAD3CB3C19E2EFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + 836C6C9484B48CBEBEA4BEBEBEA144FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFD1C6F297A6A5949696A5A58181818191944EB3AA7660B1869C9CBBBB + 5D5D86B1A95D9BB1BBBB9B8A8C4C9B5B5A665F624D538E47A99BB15E3C251A15 + 131519FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF9F619F9F615088AA8778AD3CB3C1B544FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF84826C94 + 6C428CA1BEA1BE57BEA044FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + C27297A6A5A591A5A5A56E81818191946853808F8B7B88AB4798865D9A5D8686 + B1B186B1B15D9BAC4CBDBB32314E4E4E50536347A986608749231A15131519A7 + 46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF663B505F616677AA875EAD3CB3C1B544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF586C6C9495428CA1 + A1BEBEBEBEA144FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72979797A5 + 9670916E91A56E81816E9051555353557F7F8F6F8D7B7A9B9A388686B19B869B + 9B869B9B86B1A95D5B8B8D4E4D505231B1B18676393318151314195D3A2DA2A7 + 35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF553B9F + C05F9F64878778AD3CB3C1BC2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF84A1A6FFFFFFFFFFFFFFFFFFFFFFFFFFFF826C929484A0B8A12DA1A1B9 + BEB8A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF729797A6A6A5A5949494 + A597A6A5917E655353568053803F567F80935650627B778531B176B1A9B19B86 + 9B9B08869B699F5F3F508B76B1A976AB78231815131417985D5DAC9B989EA046 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF664D9F9F616179 + BABA9E60607A9E876BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 + 9C9DFFFFFFFFFFFFFFFFFFFFFFFFFFFF82929491952ABEA12DA1A1BEBE4C2EFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74AF9697A6A6A5A5948192A5A5979794 + 6750807F55557FA3543F3E3F3E3E56685655664E634899ABA94731769B9B86A9 + 7869665F613F8E47A9B1AB784923181113181BBB5D5D868686ABAB864CB94436 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF554D5F9F614D77ABC1ADB3 + 60B37A876BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFF6C94707083A4BEBEA1A1A1A1B8B746FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFAF92A6A696A6A6A59494AFA5A5A697968268824343 + 807F7F507F5653513E3E6554509F9F4E4E5F4D8B7B998531315B76A9858B665F + 61548BA9B1A9A985391E181311161B9C5D5D869BB1ABABAB789B9B5D8AA74630 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803B5F615F4E8887AD9EADBCC1C187 + 6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFFFF6C92AF6E83A1BEBEA1A1A1A1A4B735FFFFFFFFFFFFFFFFFF + FFFFFFFFFF745892A56EA5A6A6A59494AF94A59797AF8492AF6C926C82676868 + 8F937F66533E3B3B3B615F5F4D4D625F4D66624B79757685858E9F5F3B546385 + B1A97639761E181111163A5D5D869BA9A985ABABABABB1765B473978426B35FF + FFFFFFFFFFFFFFFFFFFFFFFFFF533E61614D637878BCB3C1C1C1C1876BFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9599FFFFFFFFFFFFFFFFFFFF + FFFFFFFF8194A59671B8A2A1A2B8BEA4A19C35FFFFFFFFFFFFFFFFFFFFFFFFFF + 58958497969797A6A59494A5929497A69295AF849592926C81906C83582FFF2F + 2F433F6161615F4D5F9F9F5F5F5F5F4A628B8B7977524E615050638576A985AB + 391A141310163A5D5D324747A98686B186A976AB7685ABABBCBA9EA06A342BFF + FFFFFFFFFFFFFFFFFF565061614D775BB1ABB3C1BCBAC1876AFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89A3A9FFFFFFFFFFFFFFFFFFFFFFFFFFFF + 8170A5A5932D8AA1A2B8A1A4A14136FFFFFFFFFFFFFFFFFFFFFF747182947097 + A697A6A5A5AF9494A597AF92926C8495956C90826C6C7172FFFFFFFFFF151335 + 286F554D5F5F5F5F5F5F615F5F624B637B8B9F5F3B538E85A9B185763C1A1413 + 151938385B5B4747765D9B5D9B869B8686B1B1B1B1AB4949395EAD6A6D35FFFF + FFFFFFFFFF8061616162A99860B1C1C1BCBCC1B36AFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF429892FFFFFFFFFFFFFFFFFFFFFFFFFFFF8170A596 + 802DA2A1A2B8A2A2A28936FFFFFFFFFFFFFFFFFFFF8483836C9294A6A6A69694 + 919492A6A69292AF926C9583A3909095715874FFFFFFFFFFFF16151311111135 + 288F66528D4E5F5F5F4A63634B4E9F5F9F508B47A9B1AB76251A15131419985B + 9898474747868686869B86869B3232325B31393978BA75BAB3A0A02E3535FFFF + FF665F6150B0989B8AB5C1C1BCABBA876AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFF749470706E8041A2A1 + A2B8A2A2A2412BFFFFFFFFFFFFFFFFFF589592826C969797A6A6A59492A59794 + 926C6C9583836868A3A3A36F58FFFFFFFFFFFFFFFFFF181111101010151C4630 + 6F274E5F4A4E62624B629F616553525AB1A9AB39331A1113141B985B325B4747 + 47474747478686869B312C2C3185ABA9BABA855A8587BA789EADB435584E5F5F + 5C9A895DB59BB5BABCABBAB342FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF3F879CFFFFFFFFFFFFFFFFFFFFFFFFFF74916E6E6E802DA2A4A28CA2AE + 8C8936FFFFFFFFFFFFFF74586C92929291A6A59696A5A591A5A5946C6C958371 + 835467A383807174FFFFFFFFFFFFFFFFFFFF181411101010141717FFFFFF8383 + 8F524E634B4E4D503E658B47B1B1AB39231811111623775A4747474747474747 + 4776A986B1A97685AB85AA855A858549AB858585ABBAB3608537487B75389A5D + B59B08B5B5BCBCB342FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B + 9698FFFFFFFFFFFFFFFFFFFFFFFFFF749191A56E6D8CA2AEA2A2A2AEA28936FF + FFFFFFFFFF30586C819092AF91A5A5A6A6A5A5A6A5F36C6C838393A3836868A3 + 8F2FFFFFFFFFFFFFFFFFFFFFFFFFFF1811111010101417FFFFFFFFFFFF74716F + 8D5F66669F3B5F5AA9A976331E18131116244A4B4B99872C854747475B86B1B1 + A9868676768585858585855A85BAB3BCBCC1B3885E3C5E875E78769BB5A99BBB + BDB8A160A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFF729191A56E6989AEA2A1A2A2B8B8892BFFFFFFFFFF + 2B958482929296AF92A5A6A5A697A5926C6C6C95A3A3A3A3A3A3806F30FFFFFF + FFFFFFFFFFFFFFFFFFFFFF181411101010101917FFFFFFFFFFFFFFFF29804E50 + 3F4F5F5A607685261A14131016246363638B637B79778547474747A976474747 + 4776765A85855A8585ABAB87BAAB87AD885E5E5E5E3C3C9B9B9BACBBAC8AB83C + 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF469694FFFFFFFFFFFF + FFFFFFFFFFFFFF7291A56E968EAEA2A2A2AEA4B8B8A4FFFFFFFF7283AF92956C + 929484AF969494A697AF9595958383687FA3A3A3A36D2FFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF1810111010101419FFFFFFFFFFFFFFFFFF28663F3E659F5A + 5E7878261A1413141B5263634B4B63634B63637B7987494747314747474776A9 + A9A97685AA8785875E877AAD7A5E87785E3C8786869B9BBBBDACAC608AFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFF727091A6976BB8A2A2A28CA1B8BEA4FFFFFF5884929082826C92956C92 + AF969796AF8295958343A37FA3A3936F6D30FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF1811111010101917FFFFFFFFFFFFFFFF284D503E518BA95E492523 + 1A1513141E4B4B634A4B4B634B4B634B63637979775E2C2C314747B1B186A9A9 + A9B1AB85AA4987BA875E493C4976789B869B5D9BBBBDBB9B4CFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8BA2A7FFFFFFFFFFFFFFFFFFFFFFFFFF84 + 70A596967DAEA2A48C41B8A4B8AC74745884AF6C6C9595959582929196A69684 + 6C958383A3A3A3A37171282FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF1814131110111419FFFFFFFFFFFFFFFF6F4D503E5452B1873C252318111116 + 245C5C5C4B4B4A624B6363634B4B4B4B7B7B7977877749787660B186B1B576AB + AB87ABBA8787785E783160865D9B9BBDBBBD08A94CFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF609B9CFFFFFFFFFFFFFFFFFFFFFFFFFF7270919696 + 64AEAE8CB88AA19C8A8F8495AFAFAF92959583836C6C92A5A6AF958383717193 + 717F93936F3530FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1815 + 111011101617FFFFFFFFFFFFFF8F4D503E518B853160251E18111119FFFF2F69 + 7D645C4B4B634B634B4B5C4B5C5C4B7B7B6479774987ABB1A978B1B178B1A9AB + 85AA49785E78789B9B86BBBDBBBBB5B18CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFF7291A596AFADAEA2A4 + A18A5D6A71AF9270AFAFAF9283A3A3836C9496AF9583A3A393809393806F6F6D + 2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1811111011 + 1419FFFFFFFFFFFFFF8F4D6653658B85763C231A14131519FFFFFFFFFFFF6F34 + 7D77797B7B7B4B4B4B4B4B4B63634B4B5C5C799975ABAAAA877AABAB85AA4931 + 875E789BBBBB9BB1ACBBB5B18CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF3E9699FFFFFFFFFFFFFFFFFFFFFFFFFF72706EA6929EAEA2A14C3235AF + AF70707094AFAF95A3A3A36C94AF9583A3A3806F806F6F6D6F6D692BFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1814111110111619FF + FFFFFFFFFF8F4D6655568BAA393C231A15131419FFFFFFFFFFFFFFFFFF586D34 + 79797B634B4B634B4B634B4B4B634B4B7B5C7949498787ABAA8787873C5E39BB + 9BBDBB0808B508088CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFAF70A6A584B3AEA489258397969696AF95 + AFAF6C7FA38295AF95719393936F6F6F6D6D6D6D6936FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1815131111101617FFFFFFFF + FF55506650658B39603C1E181111181BFFFFFFFFFFFFFFFFFFFFFFFFFF2F8D63 + 7B7B7B4A4A4B4B634B4BB2B263634B5C5C5C77BAAA5E87873C9EACBBBBB50808 + 089B98604CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84A1A6FFFF + FFFFFFFFFFFFFFFFFFFFFFAF7070A5849EAE896A9697A69696AFAF92AF95A395 + 839584716F6F6F8F6D6D6F6D6D6D696B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18101311111419FFFFFFFFFF555066 + 5365638AA12A1E181311191CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2F6934 + 7B4B4A624B62634B63634B63634B7B7B7B79775E5E87399C5D9BB5080808A960 + 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B9698FFFFFFFFFFFF + FFFFFFFFFFFFFFAF70709684869B35739791A696707096AF9583839595716F6D + 6F8F698F6D6D8D8D6D6B35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF18111311111619FFFFFFFF55506653548B8A + 3C2D1A141314192EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF362E697B + 4B635C4B4B636363B2B263636262634B5C79B0985B5BBBBB08BDB5B8A2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFAF709696713C8473A66EA6A6917096948395959595716D6D69696D6969 + 696D6D6D692BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF1818111113101617FFFFFF55508D50548E8A2D231815 + 13141B2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F628B63 + 4B634B4B624A634A4B4B4A6262628BB25C77879B5DBBBD8A8CFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF309492FFFFFFFFFFFFFFFFFFFFFFFFFFAF + 7094AF92AF73A66EA66EA697946C6C959595956D466D6D6B6D6D6D69696D6B35 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF18141313111416FFFFFF55666650658B4C2D1E181111162146 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72555366624A4B4B + 4E624A6262624E4A4B624D9F9F9F8D8E7B3D393938FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFAF707096A6 + 979797A6979797966C926C6C95936D6D6D6D6D698E696D356D692FFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF18141113111819FFFF7F4D6666658E4C2D1A141315194146FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D8F654F7C907E4F4D4A4E624E + 5F626362664D4E66508B4D3F53808D342EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFF949696979797979797 + 96A696AFAFAF9595936D6D6D6D6D6D8D6D6D6F6D35FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF18151313111617FF7F506650658B4123181513141BB82EFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF6F805054517C7C81907E7E4F653E4D4D4E4E8D + 4E4E4E4E4E4E4E614D668F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF6F9B9DFFFFFFFFFFFFFFFFFFFFFFFFFF969797A6979797969796AF96AF + AFAF95936F6D6D6D6F8F6F8F6F6D352BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1815 + 131315161C8B3F6666658B5D1E18111116218A46FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF586D665365517E908190907C51517C7C7C513E3F9F66505F5F + 4D3B3B5F5228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFF979797979797979796AF9496AFAF956F6F + 6F6F6F6F8F6F8F6F6D2F30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1815131315 + 16243B66506563211B141315198A8A46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF6F8F505065677E7E90818181907C81817E514F3E65506655663B3E3F6628 + 84FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89A5ACFFFF + FFFFFFFFFFFFFFFFFFFFFF969797979797A6AFAFAFAFA6849393936F6F93936F + 6F6F9393692BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18151313181A3450 + 5554633A191513181BADB846FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF588F5555 + 553F677C677C90818181818181903E3E6565533F6653503B662758FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFF979797A6A696AFAFAFA6A6959393936F6F6F936F6F6F937169 + A0A2A74646FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18151211181A345065791B + 161010192D9E8A46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF807F7F503F3E655167 + 7C819181908181817C3E3E3E65808055503F506D93FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFF7397A69696AF969697AF95717193936F6F6F8F6F93716FAD4CA1BEB8A4 + A4A4574635FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18151215181D243423191611141B + B3B38A46FFFFFFFFFFFFFFFFFFFFFFFFFF715690513E653E3E51679081918191 + 91817E4F6567673E50503F5356554374FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F9EA3FFFFFFFFFFFFFFFFFFFFFFFFFF73 + 97A696AF9697A695717193939393936F939371716D9EB8A1A4BEA28AA0A0BEB8 + A2A4BE2E36FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18151215181D241E1915101921C1B38A46 + FFFFFFFFFFFFFFFFFFFFFFFF837E817C3F3B65514F7E909191816E6E907C653F + 553F55653E3E3F556F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFF9696AF94A6 + 97AF95A3717171939393939371716F6AB8A1A1A1A2A4A13C8AAEA2A2A1A1B88C + BDA2572E3636FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF18151215181D1A161514197A7A7A8A2EFFFFFFFF + FFFFFFFFFFFF586C907E543F3F3E51517E81916E916E917C3E65546568533F50 + 4F535584FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF8D9097FFFFFFFFFFFFFFFFFFFFFFFFFF707096A697AF837171 + 8371717193936F587146A18CA1A1A1A2A2A2A24C45454545AEA241A2A07A78B1 + BDB8A0A73635FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF1815121518181411162188B3ADB82EFFFFFFFFFFFFFFFF + 309590907E685556653E7C7C90916E6E91903E3F545354687F5465538058FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFF70969796958383717158939393 + 7193582F6AB7B8A1A4A1A1A2A2A2A2AE45454145A2AEAEAEA28A8AA1A1B8A0A1 + 8CB8B9A735FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF1D1815121518111519217A7AB3B52EFFFFFFFFFFFFFF8495907C82 + 673F3F3E65517E81916EA590545054545554547F5450667130FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFF9696AF68715858587171939371437169A0 + A1B8A2A2A1A1A2A2AEAEA2452D3C8AA1A18A89AEAE454545A2BEA28CB88C8CA4 + BD41A4A73536FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF522218151315181819333C5EADB82EFFFFFFFFFF306C907C7E56553E3E3E51 + 677E90916E906750663F53565456545666552BFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F9EA3FFFF + FFFFFFFFFFFFFFFFFFFFFFAF928383959583937193719393716DADA0B9BEA4A2 + A2A2A2AEB7B7A2AE8C8AA4A2A2AEAEAEAEB7CBB7A2A2B7B7AEAEA2A2A2B8AEB7 + BDAEA4572EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF274D22 + 18151215181A4C7A5E88B32EFFFFFF6C6C819090903E4E503E3E677E90908181 + 67555055555354544F67536F30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFF + FFFFFFFFFFFFFF587183839595958371719393938D6D6D696B6B6AA0A4AEB8A4 + A2AEA2AEAE8CA2A2AE41AEA2AECBB7B7AEB7B789CBB7AEA1AEB7BDAEA2B88A8C + 8989A4A72EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F3B4E22181513 + 1516213C7887786DFF7258928190907E544D503F5467677E818182664E665055 + 7F565368568F58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF302B587171719393718F8D8D698E69692E6B2E6B6AB4A1A4AEAEAE + A2B8A1B8A48CB789CBCBB7B7A2AEAEAEA2CBCBB7B789B7B79CB78AB7B8A1A2B7 + B789A22E2E35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF553E50281D161512151821 + 3277AA93846C8181907E685150503E5467677E6C7E8F8D8D8D5055553E3E6555 + 71FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF302B2F2F6D6B693469698E698E69696969466B6B6A4442A4A4A4B8 + A2A14189B7CBCBB7A2AEAEAEAECBCBCBCBCBCBCBCBB79CB78CA1B8B8A18C8ABD + BDAEA2A74635FFFFFFFFFFFFFFFFFFFFFF803F6652331E181512151821754B6C + 6C907C907E54543E3E655668686C68664E668B8F6666555553666F30FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF2B2F35696B6B6B8E8E8E526B696B6B6B6B6B6A7DB442BEA1B8A2 + A2B7B7B7AEAECBCBAECBCBA2A2CBCBCBCBCBCBCBCBB7B7ACAC9BBDB7BDB8BDB7 + 9CAEAE574635FFFFFFFFFFFFFF66658B784C411B18151215162667827E90907C + 3F56563E51566882827F8D4E668D8D66505053552858FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF599C9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF2B2F35696B346B6B6B696B6B6B6B6B6B6B6A6B6A6AB9B9BEA4BD + B78C89B7B7B7B7B7AEB7B7B7CBCBCBCBCBB789B79C5DB789898CB79C9BAC9B9C + 9A89CBA4A736FFFFFFA3828EB5BD5D211B1813131518277E829090547FA37F67 + 658282684E628B66668F55505066552FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF99DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF2B3546466B6B6B6B7D6B6B6B6B6A6B6B6B6B6AB4B9B9B8B88C + BD9CB7B7B7B79CB7B7B7CBCBB7B7B7B7B79CCB89B7B79C5D9B864CAC5D9C9C89 + 8989CB57577B8E9E89BBB789211A1813131418557E8267657E6C827F7E686652 + 4E8B8B55555555558F6F30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 + DE44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF2B356B6B6B6A6B7D7D6A6A446A6B7D7DB46A6AB9B9B9BEA28A + B789B7B7B7B78CAEB7B7B7B7B7B79CBB9C9C9C9CB7BBBDBD9C9C9C9C89899C89 + 9ABF9A3A89899A9C2D211A181313181D4390517C816C827F668B528D8B8D6655 + 5550662830FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99DE44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF716F356B6B6B7D7D6B7D7D7D7D7D7DB46A7DB4B4B4B9A0A0A1 + 8ABD8C419CBDB79C9C9C5D5D5D9CACBBB7B7B79C895D5D5D5D895D89CB983A3A + 9DE2E289895D381A141311181D7E7E7E9068668D8B698D8B66666655668F58FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3B07DFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF586F35697D646A347D7D8E7B7D7B7D7D7D7DB4B4B4AD408C8A + AC5D4C5D5D5D5D895D5D5D5D9CBD9C5D5D895D5D5D5D5D9CCB899D9D9DE2E59D + 9D3A5B221A14121516226768558B8B8D8D8D8B665055668D43FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F8663FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF2F286D6B7D6B6B6B6B8E6B7D6B6B7D6B6B6B7D7DADB43C4C + 41415D9B869B9B5D865D9B5D5D5D5D5D895D5D5D9C893A9D9DE5E5E23AA83455 + 2218151215186D558B8D8D8F8F668D5566668030FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FA34FFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF302F6F698E347D8E8E8E696952696B347D6B7D6AB4AD7AAB + B1A99BACAC9B9B5D5D5D5D5D5D9C89BBBBBB3A3A9DE2E5A89D9B803F551F1813 + 13141A8D555555555550558D6D58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFD8A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF72716F696B34698E8B633452638E8E8E63638E7D64649E3C + 8A33869B9BACAC5D5D5D5D5DBBBDB79D9DE2E59D9A697F3E3F551D181311181D + 5550555555668F71FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCEC6B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF586D69698E638B8B8B63528E34527B8E8E7D7D64407A60 + BB9BAC86865D5D9CBDBB9C899DE5E5E2AD935667675522181512151627555566 + 8D93FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF6FA7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF35716D69698E8E52528B69698E698E8E8E347D7D647A60 + 604C4C5D5DBD8C419DE2E2A866A382685655271F181113141A8F6D6D30FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 + F46AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2F2869693434528E8E8E8E8E8E8E8E8E8E7D7D645E60 + 86B1B59C9DE2E56A435455668D6D6D271D141313181D2FFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF375B44FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF2B5855528E8E8E528B528E8E8E8E8E8E6B6B3442AD3D39 + 899DA87153668D8D698D6666271811131516FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7AC7D5FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2F6F69525252525252628B8E63525252698E7D603D28 + 286D8F8F66664E27271D18131318FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79ED6DFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2F6F6D6B8E8E8E528D5263528E8E698E8E7D34698D8F + 8F558052271F1815131516FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB02D6FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF36356D696B638E528B8E635263347D8E8E7D8E273428 + FFFFFF1811131819FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFF5EBB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2B2F6D697D6434637B348E8E6B7D6A2E2BFFFFFFFF18 + 15131516FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF5FF6D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2B352E6A647D7B347D2E2BFFFFFFFFFFFFFF18131318 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFE8F66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF2B356D4635FFFFFFFFFFFFFFFFFF1815131416FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E + AC5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18131118FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEB9C2FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1811131819FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB836B4FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF14131416FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E27FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF18111516FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3297EFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF1815111819FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFE19C68FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF1815181616FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFE8C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 + 1818151519FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF101A58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1814151010 + 19FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 + E08AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18111110101617FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E7F48FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14131010101417FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94AB3FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14111010101417FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB057BFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF14131010101417FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF18111111111417FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF7CB1B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF181513131118FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF5AE3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 1811131418FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF00F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF181818 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 + 4387FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD3F21FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA4632FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA52492FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5C5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFC00011} + OnClick = Image1Click + end +end diff --git a/src/tsplash.h b/src/tsplash.h new file mode 100644 index 0000000..37b698e --- /dev/null +++ b/src/tsplash.h @@ -0,0 +1,33 @@ +//--------------------------------------------------------------------------- + +#ifndef tsplashH +#define tsplashH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TSplash : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + void __fastcall FormCreate(TObject *Sender); + void __fastcall FormPaint(TObject *Sender); + void __fastcall Image1Click(TObject *Sender); +private: // User declarations + HRGN WindowRgn; + Graphics::TBitmap *ImageMap; + void __fastcall TSplash::GetNextSpan(PByteArray row, int SpanLeft, int *SpanRight, TColor *SpanColor,int y); + TColor __fastcall TSplash::MaskColor(int x,int y); +public: // User declarations + __fastcall TSplash(TComponent* Owner); + bool pressKeyToClose; +}; +//--------------------------------------------------------------------------- +extern PACKAGE TSplash *Splash; +//--------------------------------------------------------------------------- +#endif diff --git a/src/wrt54gl_chpwd.bpr b/src/wrt54gl_chpwd.bpr new file mode 100644 index 0000000..38521e2 --- /dev/null +++ b/src/wrt54gl_chpwd.bpr @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1034 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +c:\archivos de programa\borland\cbuilder6\Bin\dclqrt60.bpl=QuickReport Components +c:\archivos de programa\borland\cbuilder6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components + +[HistoryLists\hlIncludePath] +Count=1 +Item0=..\..\Ventas\GeneradorDeTickets v2.0\src;..\..\..\wrt54gl_chwpwd\src;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=..\..\Ventas\GeneradorDeTickets v2.0\src;..\..\..\wrt54gl_chwpwd\src;$(BCB)\Projects\Lib;C:\programacion\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=1 +Item0=..\obj + +[HistoryLists\hlFinalOutputDir] +Count=2 +Item0=..\bin\ +Item1=..\bin + +[HistoryLists\hIBPIOutputDir] +Count=1 +Item0=..\obj + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/src/wrt54gl_chpwd.cpp b/src/wrt54gl_chpwd.cpp new file mode 100644 index 0000000..6161a8b --- /dev/null +++ b/src/wrt54gl_chpwd.cpp @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- + +#include +#include "tsplash.h" +#pragma hdrstop +//--------------------------------------------------------------------------- +USEFORM("mainGUI.cpp", Form1); +USEFORM("tsplash.cpp", Splash); +USEFORM("THTTPdownloader.cpp", HTTPdownloader); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ +try {//outer finally + try + { + Application->Initialize(); + Splash = new TSplash(NULL); + Splash->Show(); + Splash->Repaint(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->CreateForm(__classid(THTTPdownloader), &HTTPdownloader); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + } +__finally{ + if(Splash) + delete Splash; + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/src/wrt54gl_chpwd.res b/src/wrt54gl_chpwd.res new file mode 100644 index 0000000000000000000000000000000000000000..d6607a0283c0a78767ce4ad9067661ebca8643e7 GIT binary patch literal 876 zcmb_bF;2uV5Zu636zGcUNlA%xEfPT&DWU*=!4q&17bzp%{pX4_DNahW&!C{N_=1_S z(;tv z|In#nuj{navMjJhZPaM_QfNJD4x+|BdQI?CM=$p}-Rz^@qE3JH8vXRJG5P7?`N>Z` z^;5UnYGuEjugCL0h&O2V;=F@MIaK@b1)ytaHG_$|4Ry9gjf8ce7r;f$G$71Q;+N=W zkSqKfCkk>9V-oqZ{(-ldmnrWs9vrd4up7|(OL>%gd5|Y?BhQEl(|f_AGs*KsxD~ub GnS25vS0)w! literal 0 HcmV?d00001 diff --git a/src/wrt54gl_chpwd.~bpr b/src/wrt54gl_chpwd.~bpr new file mode 100644 index 0000000..47cf759 --- /dev/null +++ b/src/wrt54gl_chpwd.~bpr @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1034 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +c:\archivos de programa\borland\cbuilder6\Bin\dclqrt60.bpl=QuickReport Components +c:\archivos de programa\borland\cbuilder6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components + +[HistoryLists\hlIncludePath] +Count=1 +Item0=..\..\Ventas\GeneradorDeTickets v2.0\src;..\..\..\wrt54gl_chwpwd\src;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=..\..\Ventas\GeneradorDeTickets v2.0\src;..\..\..\wrt54gl_chwpwd\src;$(BCB)\Projects\Lib;C:\programacion\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=1 +Item0=..\obj + +[HistoryLists\hlFinalOutputDir] +Count=2 +Item0=..\bin\ +Item1=..\bin + +[HistoryLists\hIBPIOutputDir] +Count=1 +Item0=..\obj + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/src/wrt54gl_chpwd.~cpp b/src/wrt54gl_chpwd.~cpp new file mode 100644 index 0000000..6161a8b --- /dev/null +++ b/src/wrt54gl_chpwd.~cpp @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- + +#include +#include "tsplash.h" +#pragma hdrstop +//--------------------------------------------------------------------------- +USEFORM("mainGUI.cpp", Form1); +USEFORM("tsplash.cpp", Splash); +USEFORM("THTTPdownloader.cpp", HTTPdownloader); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ +try {//outer finally + try + { + Application->Initialize(); + Splash = new TSplash(NULL); + Splash->Show(); + Splash->Repaint(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->CreateForm(__classid(THTTPdownloader), &HTTPdownloader); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + } +__finally{ + if(Splash) + delete Splash; + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/src/zdllbor.lib b/src/zdllbor.lib new file mode 100644 index 0000000000000000000000000000000000000000..d89caf24141b1631833de563071f29c8f45e7305 GIT binary patch literal 5120 zcmeHLU1(fI6h5uZ&+cZE)TG!*wOXZ$q|t1oXw@P~8>j_M4YVTEb+dc3-S+10a_>z_ zR*Xx*_Nu60wM9f*D~kHy4}~Do`cSZlsFYGfMB;-YK1mBc2!c50%-lIMcQ;SIDA=Z3M57nF zHGi}^>y=JKgQSswStlFo(DHuPqWyG2d%oxwM{;w~I?_=?=C{%GImsjcm7Hm}5IS45 z{}jNS4uw2mKTY_r2eNrJN%q_o-A0eKQC8|Q7mp|9pwSIovEEpW%>*C z^7keEMJU@8`-|WSTMYMy@uMC%QSb{h!Iw$~!FBxxU^tQOlx z@V&Me+GoVa!%pCYo058jHtP|5N3-5FuqNK`q!Vtd6vIl@EBNzE(H1({*0ZeNubgF( zU((MZf0msP?@&H0Ou5eI+MgE8idhSPTub3~l<`-t7hR{|JHG#&jz7j&Db3(vB}4ZU z;cDQl)%Q~Y%!oVV@k~Ae7N3x2KE6-Nb*DQ0hkl>XkhyI%J};lF zo+q|i^;a4862Kf`FCk0I*gNgc2K%}UJ^>b=kl&j4Dd-UPiX$mLA6-uo5s#VOE*D%* zlJUGWKX}sS2T6W#VR=5fd%@u2*y1B_u@xWlQMq38D_%JLs?J9-!Wx}1)M=?G`)jjd zF*Kf!W9EweBk-BUq;QS*FQ$W%&A0cD3*K0s?>mLk%LX6E*7Fhgs}*1F-**mHywY37 z{w2a1V*e6aXQ`7TKm%gStnzl&B+AqSq(j=o=DZlq9MBH zNt{)?4OKx{X&Bk)gVm-UrP;+OM~cletl4X55^0oFseVyYSd=`I+%JNx67Lt$M5UnO z5$hMFCrt0r`GYZ5OEdVp+9TyN1*4g{{GU3XSum?)E&MCPS?GVv=f;Bk?K+>ED64gu z@SV0;LXT4Z`lMd6K2UlDCyHOx!}>riu~Pg6T_3cXWqbQuP0wk&&GVg{_lif7=Zhe# z#pjFY&ssztE&Vm)4;M{T#fv{k#-E;Hn*O|1l5jg1)`53t$Xh7k%Lq0K+f`Tlc&$v-9p(o_@~(I0ZKj zz{lLcw{iNxoAL!%?chzKc~bXXz8p`3SZ~D8k3i)lR%`p|7uF4j>=NNHaEd&Rzg35^ z27jx(dK9=#rff0DV``fRxQ&yR+#;WhbyA&El)mj>H>JUoVrSex>`c6-KM~f;Tl=k8 z$M^ms`v-H-`~UWMI0LY;@6x`b@1EFOga;q_2DTm9yknC$xgHijfb#%L3j=doe?q@g zfAJ_#IV~%r7p+wKq50t^1|>%XH_hPIDZVX@&1!CIz13 z7?ZvKu=I|sqZc?Lsh8hOwo&8x5O4&dZ4|+8^Lp~nJx1f=wMYWr$BpEke-dMV0~4PY AO8@`> literal 0 HcmV?d00001

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⋙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�n&k=`o?6M&M%O2SN^Je+zom42kMcQ6mtagLO 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®U?1mzp7q*1Z@ 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�*tkOQn&@*Qp>m1(EMznl~f=lq)m}o)DX3t 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