@zip.js/zip.js 2.8.37 → 2.8.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index-native.cjs CHANGED
@@ -40,6 +40,7 @@ const COMPRESSION_METHOD_AES = 0x63;
40
40
  const LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
41
41
  const SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;
42
42
  const DATA_DESCRIPTOR_RECORD_SIGNATURE = SPLIT_ZIP_FILE_SIGNATURE;
43
+ const ARCHIVE_EXTRA_DATA_SIGNATURE = 0x08064b50;
43
44
  const CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
44
45
  const END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
45
46
  const ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
@@ -71,6 +72,7 @@ const BITFLAG_LEVEL_MAX_MASK = 0b010;
71
72
  const BITFLAG_LEVEL_FAST_MASK = 0b100;
72
73
  const BITFLAG_LEVEL_SUPER_FAST_MASK = 0b110;
73
74
  const BITFLAG_DATA_DESCRIPTOR = 0b1000;
75
+ const BITFLAG_STRONG_ENCRYPTION = 0b1000000;
74
76
  const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
75
77
  const FILE_ATTR_MSDOS_DIR_MASK = 0b10000;
76
78
  const FILE_ATTR_MSDOS_READONLY_MASK = 0x01;
@@ -154,6 +156,7 @@ const DEFAULT_CONFIGURATION = {
154
156
  maxWorkers,
155
157
  terminateWorkerTimeout: 5000,
156
158
  workerStarvationTimeout: 5000,
159
+ workerStartupTimeout: 5000,
157
160
  useWebWorkers: true,
158
161
  useCompressionStream: true,
159
162
  transferStreams: true,
@@ -169,6 +172,7 @@ const CONFIGURABLE_PROPERTY_NAMES = [
169
172
  "maxWorkers",
170
173
  "terminateWorkerTimeout",
171
174
  "workerStarvationTimeout",
175
+ "workerStartupTimeout",
172
176
  "useCompressionStream",
173
177
  "useWebWorkers",
174
178
  "transferStreams",
@@ -214,7 +218,7 @@ function resetConfiguration() {
214
218
  Object.assign(config, DEFAULT_CONFIGURATION);
215
219
  }
216
220
 
217
- const r=[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],o=[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],t=[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],e=[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],n=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=new Uint8Array(288);f.fill(8,0,144),f.fill(9,144,256),f.fill(7,256,280),f.fill(8,280,288);const l=new Uint8Array(30).fill(5);function W$1(r){const o=new Uint16Array(16);for(const t of r)o[t]++;o[0]=0;const t=new Uint16Array(17);for(let r=1;15>=r;r++)t[r+1]=t[r]+o[r];const e=new Uint16Array(r.length);for(let o=0;o<r.length;o++)r[o]&&(e[t[r[o]]++]=o);return {o:o,symbols:e}}const s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function N(N){N({workerURI:N=>{const i="text/javascript",H=(s=>{let N=0,i=0,H=0,k=new Uint8Array(1024),v=0,j=0;for(;!j;){j=x(1);const r=x(2);if(0==r)C();else if(1==r)g(W$1(f),W$1(l));else {if(2!=r)throw Error("invalid deflate block type");g(...a());}}return k.subarray(0,v);function T(){if(N>=s.length)throw Error("unexpected end of deflate data");return s[N++]}function x(r){for(;r>H;)i|=T()<<H,H+=8;const o=i&(1<<r)-1;return i>>>=r,H-=r,o}function C(){i=0,H=0;const r=T()|T()<<8;N+=2,u(v+r);for(let o=0;r>o;o++)k[v++]=T();}function g(n,f){let l=q(n);for(;256!=l;){if(256>l)u(v+1),k[v++]=l;else {const n=l-257,W=r[n]+x(o[n]),s=q(f),N=t[s]+x(e[s]);u(v+W);const i=v-N;for(let r=0;W>r;r++)k[v++]=k[i+r];}l=q(n);}}function a(){const r=x(5)+257,o=x(5)+1,t=x(4)+4,e=new Uint8Array(19);for(let r=0;t>r;r++)e[n[r]]=x(3);const f=W$1(e),l=new Uint8Array(r+o);let s=0;for(;s<l.length;){const r=q(f);if(16>r)l[s++]=r;else if(16==r){const r=l[s-1];let o=x(2)+3;for(;o--;)l[s++]=r;}else s+=17==r?x(3)+3:x(7)+11;}return [W$1(l.subarray(0,r)),W$1(l.subarray(r))]}function q(r){const{o:o,symbols:t}=r;let e=0,n=0,f=0;for(let r=1;15>=r;r++){e|=x(1);const l=o[r];if(l>e-n)return t[f+(e-n)];f+=l,n=n+l<<1,e<<=1;}throw Error("invalid huffman code")}function u(r){if(k.length<r){let o=2*k.length;for(;r>o;)o*=2;const t=new Uint8Array(o);t.set(k.subarray(0,v)),k=t;}}})((r=>{const o=(r=(r+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,t=[];for(let e=0;o>e;e+=4){const o=s.indexOf(r[e])<<18|s.indexOf(r[e+1])<<12|(63&s.indexOf(r[e+2]))<<6|63&s.indexOf(r[e+3]);t.push(o>>16&255),"="!==r[e+2]&&t.push(o>>8&255),"="!==r[e+3]&&t.push(255&o);}return new Uint8Array(t)})("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"));if(N){const r=new Blob([H],{type:i});return URL.createObjectURL(r)}return "data:"+i+";base64,"+(r=>{let o="";const t=r.length;let e=0;for(;t>e+2;e+=3){const t=r[e]<<16|r[e+1]<<8|r[e+2];o+=s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t];}const n=t-e;if(1===n){const t=r[e]<<16;o+=s[t>>18&63]+s[t>>12&63]+"==";}else if(2===n){const t=r[e]<<16|r[e+1]<<8;o+=s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+"=";}return o})(H)}});}
221
+ const t=[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],n=[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],r=[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],o=[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],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=new Uint8Array(288);f.fill(8,0,144),f.fill(9,144,256),f.fill(7,256,280),f.fill(8,280,288);const i=new Uint8Array(30).fill(5);function e(t){const n=new Uint16Array(16);for(const r of t)n[r]++;n[0]=0;const r=new Uint16Array(17);for(let t=1;15>=t;t++)r[t+1]=r[t]+n[t];const o=new Uint16Array(t.length);for(let n=0;n<t.length;n++)t[n]&&(o[r[t[n]]++]=n);return {o:n,symbols:o}}const s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function l(l){l({workerURI:l=>{const a="text/javascript",N=(s=>{let l=0,a=0,N=0,C=new Uint8Array(1024),W=0,V=0;for(;!V;){V=v(1);const t=v(2);if(0==t)x();else if(1==t)q(e(f),e(i));else {if(2!=t)throw Error("invalid deflate block type");q(...D());}}return C.subarray(0,W);function X(){if(l>=s.length)throw Error("unexpected end of deflate data");return s[l++]}function v(t){for(;t>N;)a|=X()<<N,N+=8;const n=a&(1<<t)-1;return a>>>=t,N-=t,n}function x(){a=0,N=0;const t=X()|X()<<8;l+=2,j(W+t);for(let n=0;t>n;n++)C[W++]=X();}function q(u,f){let i=U(u);for(;256!=i;){if(256>i)j(W+1),C[W++]=i;else {const u=i-257,e=t[u]+v(n[u]),s=U(f),l=r[s]+v(o[s]);j(W+e);const a=W-l;for(let t=0;e>t;t++)C[W++]=C[a+t];}i=U(u);}}function D(){const t=v(5)+257,n=v(5)+1,r=v(4)+4,o=new Uint8Array(19);for(let t=0;r>t;t++)o[u[t]]=v(3);const f=e(o),i=new Uint8Array(t+n);let s=0;for(;s<i.length;){const t=U(f);if(16>t)i[s++]=t;else if(16==t){const t=i[s-1];let n=v(2)+3;for(;n--;)i[s++]=t;}else s+=17==t?v(3)+3:v(7)+11;}return [e(i.subarray(0,t)),e(i.subarray(t))]}function U(t){const{o:n,symbols:r}=t;let o=0,u=0,f=0;for(let t=1;15>=t;t++){o|=v(1);const i=n[t];if(i>o-u)return r[f+(o-u)];f+=i,u=u+i<<1,o<<=1;}throw Error("invalid huffman code")}function j(t){if(C.length<t){let n=2*C.length;for(;t>n;)n*=2;const r=new Uint8Array(n);r.set(C.subarray(0,W)),C=r;}}})((t=>{const n=(t=(t+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,r=[];for(let o=0;n>o;o+=4){const n=s.indexOf(t[o])<<18|s.indexOf(t[o+1])<<12|(63&s.indexOf(t[o+2]))<<6|63&s.indexOf(t[o+3]);r.push(n>>16&255),"="!==t[o+2]&&r.push(n>>8&255),"="!==t[o+3]&&r.push(255&n);}return new Uint8Array(r)})("zX1pc9u4suj39yts1xwVETY5JLVYpgypEmedJE4mzjIZlZKiJdBiJJMOCFlxLJ3f/qob4CJZmclZ7ruvkpJJEGuj0Wj0Bkvw/u1BvEjHKsnSA87VzZXI4r2JiJNUNBr6rxtdTgb60RIsFBZbM6soZLHbg0Uu9nIlk7E66I2zNFe396WMbkIBr86/iLEKFZwuLs+FDCW8jNQ0TOGRlJkME3iXpKqrc2f04nf0W0xvzUC/5fCsepnDy+gqjOBhpKL3iViGY3gts8skF+EC3opv6lE6ziZChksYy5srlYVTuMpy9VLkeXQhwgm8lVGax5m8PFNSRJfhFbwR0SQ6nwuTcAMfZKJqCTM4yS6vpMjzJEtN2iU8FOM7qedrnot5DNf8Oksmex5c8INFqsE3OYAzXsEbvvNULPcy+MKHwxHs+j/qxZm05kLtCe71gnanL3rCttktJikuNj53zUfF/YYaqH6/739qHnW7wVHQ7LZCSuh9GXqjoRhxtd5dc5GquN/r9lVPYWs0q3uSfxkqx8fivS9DRdXIfr/f/USVBu12Q47WlHf4Gr7BO7gPJ/AZ3sCzEf/SG8+jPN97pCuTi7HKpCXYrZomuZtxsVo5/jq6uhLpBJN1H7yV/twreuCthDsX6YWa9jBHyr1eEluyz7uNhnDPF3EsZNHfhMA7top0EO75jRKv4jgXCiSDjEunSyDsZX2e9lKbd4vCgqtPiXshFGGelcK+x0DyepLdwsSe4s9o7GL06c1QIDwaQbs9+vSZXvyOfjuht6Cl3+4baH16N5RViW/0UpR4TW+mxJqmqyf72EucYkWAf031WOqTGKYjNuoZYKr1hVAWu5VCLWT6T526XusZ+LgnvimRTvK9q4250DAXBtSKgPeoly+uhLRuVbFkLAGS3Sq3nCmQrki/LsQCqcMa4vkin1oVyhCGWy3W03Mhizlyc6H0Erc8UC71l4Fwr6P5QnC5XjMQHDu+XhcLZu+hJUBtV13gg63MA+vpYe9JbEP3EB8UFFkZSI2me6ccaxtHStecxJbHOS/yrVb4VtZrqhWuKaJYiZZiWJRx/BGk/NSdW7LsSDPgnKeDWsHw1J1aClLwVoiW+TwZC8uDqhLG1nCJ66CYjRLtTR9V0R2v1glcnVWj9yzl+MzWfVnDdTnGZnCvqO64rEeU9ViCV11K3bFI5pb6tRkwxopOmDKqwZs+yL7XaKhGwxJD6fgjfuqeIbDppRH4rcNWt9lpdft95fjg4yyv4SzE3oBkvE/QEQMVWnLgrVSojo+bgSOY7XtHR23f7wSHh4edewLmoeD91JXZAhHv143PbLVqBjDVlULKbnG5aAqMsG80rJQPR6yn+rwZ9JTDmwFL3SvEVYnr2rsD17SYLcFKKptgvuNqKmy7rGQlhsmo3+8rrA2faRSqV5CiotBgA1VCDzJClqREFlMhAdHOGk0flJ31m8FAhql7lV1ZjGCYrtfwkt8iQcvD2y91VDl1EXN+7UKxRBTTxHJjHKqf0ACajWS1slLs86+tEQM5TEY8JcoD6fEx75bLaQ2v680MR1SrBCTCWDNCUVbQkQgdnh4fd1diKEfQbPxTrlaW0uNLGZarlkhDNhqqGnr3ntVsSAYpY6DW6zW85US9tnePojNIKXrKPZ9n49lZ8l3wth+Act/xoX/YDNrdln/UhJYXNINms+UfQtDuBM1u0/cCCA79w2aze9iFZtBtNw8P24E3AuXe50O/7Xfbnhe0jsDvto8OD9vNoyYELc87ah8del1oNo/arc7RYTcYgRhYyj3hwj0pFg8D5X7mwv1cT3jDhfuGhcqVAqkSW5u/1b6DQylpDVb4riov3M98OALhvuEeiPXiahIpcQcQB8iOpRcVRydwdfKX7jMXp7CiW9i/05IsuZ9B4LQo9w1k+MtTWyMTro6sf+R5h/7RUdBuHba8oyOfqanMlnuIZIl1cBKlaab2plE+3bvMpNhT0yjdCz61m3vOnr93nqj8oGg5JszMkUYiDs0NBml2pDaNdupYG6+N2pvjM9y3kW+pl2HK/WjFbr44j5BftPzOvTn4nXvW3PYZYzC3uV/bIq4MocNsiGsPt6fCsFru54rQuic9VYMbDBFlkbaN2MY4zM4U9Px2w/BmGsU9na9YC248zxCf3Te/toKj1lHnMDjqIOab3CtEmV5RX48J96Ol6l1nrMIYg08g16cVOSy+9v2jgeg38aeNP4dHA00lQ/VJfkpD1ZAr1UhXspHWUv6pGun6pd4/CtJ/fCxWyIQgrV5/tGr7MkINEi7dE8i4sLoe22BT/YLVzIgPRW4SP8U8GXojyHky9Ecw58kwGEHEk2FzBGOeDFubvPDhkZ55m91ihauVRdVJ96XlQzYUTnP0Cf909R+/Zf52RiX6K8rdhpjZ0kVY5TCHiNljG6uypXt/WM7Mr4HHRiuvN+YRRHwOcyrb9CBnkPMYYq7W2H8ahB2vPMBh0FjsnN6CEQ3JntNbc0QjsyN6a41ogPZ45a3X8IDfJpdXmVTPxQ1teWK598B9a70k9jXXSxgeVJOLHDCXq5UvWuD109XK68vNtZmk19E8mexdRTK6zPdUtnd1PpvEQbkgM+7bVtrvt9nxcaDnQ4MDFibHkpYsHcEeEAtnZQymhsVe6nU84QU3csVPNYbzqteKwYL7PStbrXzWn/QWOHmYKeY5F65I6bhmXdXW1WKECxbXa3/em5vjST1zziDiXi86zovFEWGuYTT6xPNhZHCGe2Wrjcb8OC6PELbNpsgcao5+AvFwPmIwsXlrbfB8WXFCv3bZGt6Gf7sPAdLVp/wtpOZcN+op9z0fIqgk0O+o5AuU+37ojSrq9Wsz6BVbaD8hsm1REeaWxN59aLFqTSlkSsxJLcWDmBrxI++oHQStbueTGKoRpEOfkv1266jd7nSDLqX3TOOmYiyMNOf90K+l+ZT2gSYaKRaW+MGmJUw24T61hM4Iwv2T7/u1jYoOI3/yfQ/o6UM1rPUkuRD5dq2AtPcDDtnwM0Xt/qgEiSKQ7CKBBZ4IWiW67c2lYXLsZeleNJcimtzs6Vone9PLaLw3juZzMdk/KKunSspO61GYnguGrMrTYted7vOLRqN4wTPOmyidZJfv8YyTc34Gv/ODZ+XSzPNlJicH8L5KzJOLNFILKQ7gAz/4nlx9yZ3oPJPKGU/FeOaUhXrlIelPM9anBSN7p2Hczzd3bhKT7N1//WwPd/B8cYXUR0wOmDkmPed+B17w2zS6FOHB6wfPHz4ODtbwlSs3yrGP1i1u+6HJ8PTl/ZOD9RpeMHhVy5IoISPsYx76ogn1EmdP7zu+KfIbHx5MhEyuxQNkGUbwBx92wQ/A74zgFz70OxC0oBmM4DH3PXjChx7QvxEIUQc9KMGFaDSmyAuouQCp300WJTBPKgoKBYn4KR7zOR9uiWtGsJ2A/ONzXIv0f7VS7gurznXRt9aIeK3nuN9lfEOuYYgv95Hxau1znjUaHf2ni392U/dI5HszcbOXJ9/FQcFh3OfDvDrPITXFDsc867XuZXbQ7ce9uJAoCZ4PYzxDWvE/Ms65t1p1ObWq31uMCJI0sozR8XHQ+kRvRmhxfOx3dELXvHc/SSMdAVMnVSHwi67lU4TVQMSj42P/U9Bt3rOifv8QWbV8GI+oS9nok9gQWMW49UPsONX05MNmQwziMHZao94cmYFWn8erVauPh0uijHKodMdHn4gk0rvpOiYFJqlbpjQxBfuvRqN1nZrUicErS4DH1hPxw68+W7/YomuEA6CKZ39E50aNE/gnQT4/K05ZBiF+IA7MhlaCAxYlBAVB8BOmlWXGPOZeb18Ox6Pe+BPPVysf8WAYj3BrJATIePwpxkri4+MAf5r40+plPENxEwIi+3R0BFgHzyAdZiM+Ji4NGTbk3cajke7xgvudbqvpeUf3ok+ddrt5eG/+KWgf3ss/mQ/de2NYckxKhtmoSs3KHuOJstWXdJTEMyS2uuRLQrslCsBAYWo24gu+oNQFpq7r5du18hx/aocxTFL1pPWrUkiCq64UGP1wudG+XSy4OgPs3qeNl0tTxa8tJ8DpLGlVXMy8QqY3RmSY8xjxIOIx8r5jHiPvu+Ax8r44nCVMYQJXXAy90SeJJW5Q6DNohj6++yOYcTEM8DkYwSV988MmvjdHcM5bG+iTGuRZ8nx4pZfFp/nwphJARsNZKZoc0yK4xKrORzDlOWY0RWb1IpdbRa6oiO2PYMJzzGoKXdYLXW0VutGFaBA5ZjWFruqFbrYKzXQhHKnNW3DFl3DDpzDjk41ht8o1owbNhiNCMeKLAgAah2pAIIK2qACBZGtRg4Vtj2DJr+CK38ANn8GMX8IlXxa8QrZeQ7ZzW0EsIwT4jQvNQ/zBlX74hauSvyoSKEONi6oTmMear/kNTEW/sPUTwwRgR/+JxCBoMSZs7uMAe2Kei0KDUIwUqY8ZJKScKHYvaLdRIjawFPdAv8gBinnMSzpIuRfadspC25b4o0CgXMLmCgGHD/L4uIt/04KhFmtBI0Bhm4WYrAf3hJ4ZbTB4cioT/RFj68dGWnir5VhJbO1baSWZNazOsGKrUWyhNgV3KQm8eMsAVQiUPuj8ae1EIVlPDZPRJ54SfR4mtk8vvn4J6CXQL016aY6KsZ2615aChK3XEAv+wH1LyzbXbIessx5uecJDNnC+K0fFA3F+ZrQnkfiB8P624ARDATJavi7eFJhxGQ0VgiuUQNxjkelVOr8J0zW7NbL+XEUScW8hCLFAg34NUX6TjvfqmoDtQ3/VixjyorUclAjnQKx1GK257MUDK1pGibKoxvIcy/u3xWGUPu9Nhfl2JawUPPhjqPA8GHN6pzcSTA290T5R0NUqG/r07I82aPbvqLOUkEOMdQmqKx/ZAQqjOaWYd0gHyhWonbR0yQ+MhXOLsVB3KTIYM97SPjiPndoz+8dzFNcUepGlsCQIGIMHj1FlVMJSK0sKFvNWilBBKkIccDpJ0oswNWDL1pr7xJN+o6HYre5NVorTDITSqguQ68RakpG1fcdqijNwxZTMhJUKiFlPVqebcn2oWtqc31DWtDgeRNiSTpPFUYgxHK1ucsyLThw/Hviht0GPHxt6PF7xaChGn3IUCCWxNd6YwPesJ0p4zvGYxQp91vi/sybWBXH5L66CtFoFCa6C2ExnjqugmIx0YM35nfVQrYaU/2lpZNP4X+wtD60UttZJyjSeJ5AyiCuszXvFROmK5oVkskTZ4gERNyJ12RxIXL2FwxEUZeFfwePk7/BYSwAJM5M7mFkin0bRhG3gKMQGHwVbp255YuZ3ELKU5DxGsUQxsIdWDLVijHALmfBN3SOqNxHCkJD2Ux9pBdzqcSFYF5bifeEqwRWDEgUmCLeU1RDB8UuwfF+zqoVlOYuQQFyDZY6wnJeFojUXvcgAqdGwFH9oRaBKsea43BedRHPiRjtjEa7yPklCGg3VF1uQllz0LFEqjUhHa0k82pR7N2JXaltjZ/yP5wzleV5v7Dzv80VvYfPn28TkSlgKFrCwn6O8qtGY36EsCa/JUnrxalVmSQq97Y2ZdFjYadUT14CD6zZQ1mNwsYDnlCCvYSndYkJ4upjPTeM537ENQWJAtJ+LQoTyoNqukatQ8qZgwDT+1vdz60BGywOqa99HXmAcqfG0yJ8Lvu/DZn3rNbM8SOArePAbHtB3EgPs0bzWowek0M6juYJXbiVaAbm7fxU3Yarc7Nfc9OvHtWIvK1kO5gjjNbxikEP3nhXc+2WY6g21JDIMxhUeROABZiGkqaViGujSjCErjYnmvZS4Fc1KuJ2JmzzE33AMCVr8FBP7XsgkTsbU33C5BiloVWZCb+TCGuOqj2V2aT1B/an+HAtrwdYMltU6nIhNRQfn/HpgCbNuNHu25Pyikjzo8VqCL1KRjyPkJ8gE6d2bZ2g2lKUiRalAqT5nGwdceazqKlM6lAp3PI3kSTYR91XNkEAZ9KchLZmrm0GxI0PTLFUN4koUHHO5YEqFGM1+mfNmc7jC/YIoWX6ebX9GOb7ZeS//9Z1352z9JD96vbUT/8UeTBtMueZXK+nWulFN3AVtahVkPPADxjYL842yRD7A2+eWGvp46nZ3jYhtMZ89sqgoFZIBW+9iM6vNVvcLt6KSyzn/b8H6P4MrsUiQ/A18/xJ6pfatYGsI5gROvhuckP7Q1ge3bqGsMwSYYsiyJNwP1njC3dsuhd+8Xq2AYLitVGBPNcBL3L/+wZ5fQlxuQDzdDfFkzcDSFVVMXcKHTa/d8o+6Rx1oH/mHbd9rHUH3sOt1A/8oIBa43ibRvQQyTbYeWQlpV+LqNRghHUtZXS2kjgvGm7RD33E8KR2bCECbWeWdrLJOhRTxlnoYFYguxC6bLHWH0KGNSFoROrRhk8N0xL8g9fqkcBPQTdbpvqzaOfsvt6N+0M53085cqCEQIUbA94SbicLkjeBXzOI/6QtZr/Uk/yas1E0uF3Prm7Ck/Rq5GAZ+s3V42O76TWb7tAdVVWkLv1Glhf0nfdb16bb5MAEJ2ajq45cNg49gpfMNg9L063XZDQX+J8VQJlqbs9d1CRJJeqpv3+rfSlsEzKLbe6fZw6jSN92vl3in+y6Kk+GJ4AcTEc8jJRxki4wY4/OPiJmA2/F0kZImNFR3jW7/nCfnodxhjFvbLtYGmreFca6YhElx5BOTMINFLu7WEMP35EprwsIccNmJSTiHubgW8zACM4pOK1wA0sZIhcs1FzCt6OIEruAGZpz64UpjUmym9pIvG437wloyOOfzRiNpNPYXjcb+ZaNh7WerVc4ajX1rP16t9lPWyxqN/Xy12p+vVuerlTUhoH+EGX8prBlMGANUDV8OZvwtJjwU1qV7Z0iwhNui+zWorhkLzwfWDdX5RoCpA99S6+Die3J1wFjR1A1j4Yyf4mO8uzZIQTIGWaNh5QNTCus6R7xgoXWlTQTopGY+X6Fu56OwpjADC2miNjylQZN26Kp2HoMaLCzBzwc31cdQWx9MtNVoaVp6UZmWMgbT2plQVBvqG/HXdrCgULtYUBqP7bKETbRWuUaW3MskrVuaEhl3uIR9a4MHkBUzqJfOuqAAcvtsjlV0+zwrWH+017Ekf6hZhFIClDldyE0HYpBVB2onXVlndXK2yfrETo7zQjVX6Zu5KM+2ka8yRiBWyiUrbK3Tuq21fnlhenQdyb20J2rToupTRpbWwl2k1foli756JrK8rtsI6zl99pN0ZYfhvqEsu0z6d9GWilZkNdISF3RDExCNo3OoEaJoN/FZ1OjLsqAvUzzoF4TlDllBGV6jYWX1NXe5seaiO2suqg7oU6JGU9abcTEoiIhwd4wfphvAQ/JB9GCxCdPaADRNgBmnU1NlwYx2CCKaCFnZamA/b6xbfXS/Wsznhe2/1KdYIwlWNG7LHFqNckOgyf+l9uowDPem9XpilYYU1RTsTSIVHRQWEModRwsU0IPSK/CWSEmYwiRLBcqrZC9Dy+15lguLhaLOLMI4SseCzJKxHnyms9iaWTO2jhsNJOxIu3YR8I+G6zYkMIktov4ZazTyapp2Ejic+/m+Bmi1any2JTHVpweq6NGdbfuj4W3ZrcQ+abukK+uWljaiPDLG2m3ltcyuhFQ3loCDAv0O4PZCqBC7LutCrIfluRPlFWLLQrRCrb1LoabZZNvepI4WYuugelqTj7FSU6AajXSQhslqlULMpVui4eCgfCTWIzzRiyknxMoNXY9LSYhBqn21Wu0nq1XGeVIiVW7QiXKbLr7F7uS1/r3cPilfJVfi7VRmi4vpxpH67RYvq9yl8TbCCUXPI1whkO5cMUYshCiD4yCvkF4hR9Xk4aZXYI9OTc3iQbQRLuJ1ld/gde9cimi2LlKxP0gNCOsQiQoAbUmmil7ocsIl0ySSD5BsaU3iQsHgb4qZpbNRLkVx7ppZiIYF0hlkfoBMJS5ieCr4AY3gAH6vOM2Cy3z/491A3qHoe6kR3qNEZfz25ooWv0aZuJe5dFjOPyRqav0u2CDmn0W4kXqQpLp1VGHG/BlaUrvZQl0tFG1fnsa+0kJyTjgVU2cg2qLuoPVLV5vshmK3RPNK0W9ulyYKtWOsqG/R5RkyhdskNZ0J8zXtnou7rRRrFwXEVUOVj4/aHJZdCptB1JL3Ob9uNOoZ+/XPm5SqJNL1Ld/YVGzxGrfVtirWfN6rj672CbZH2rtDy9KdtCzaWLRjtvE633xFuWHBeHz4Iard8Zcgb4mCFCR3PKWEVpklxiK+J/pJj5WaIIU66YwLJ+kVJ/t+NrC0oDytc3OZlm2gfr2Wjqk2z1hYFMFMiV3q50C5+TSJUVtS0LnU4QLkWrpJ/jhJiS6wRkP0uU/8OFr2dBjcYY4lZNq4V5VeNqldMrdkfMKyEqsSq8JZwW5TxPLiW6m22Dr7swqcmbQMlPfQ2YEVDl8pNaq2vJYkSrJJV4YTiJX8KXhA24IR76bRdXIRqUySAWf55k4jOVlGUpxk6XghpUjHN42G9afgf5mlJGvGmNLsxfCi2JSxC18FvEIisaXE+E2UzpCQURf1OsiutCFlDOMsjZMLVClqntDV3GOjsYPo7r8T7jTKaQbRYWsDsrd32dIf8cNc9SpZuNznZ6XdQrrPz3YvbqKre5fZZDFHW6l3Qnvnwb/QrBZA6XFpBQpKpcgd2YwaYpfaeffmGYP87pGYfHN3nJTzXYyvzryLI8ZWCkLVaOwXrTOC/y4GX7MWhRJhv1Dj7PvGu+RRITchuKLGgdEOqfmgEzQz5vuewSOFBtWPCvipcqUqAkS5f21vWTvAEe4cN2PV5kwgwGX/kibOIh/GOLmotmqSJP58gd3wocGZbfF2mlxMP0RKyJeRnIX+GiIuyp1xtdp5ZKiz/QuE83MNn1eCDsl/CIvWdniABQ7AnBqeTcJXYs1w5VmvhO2zf0j35f0/Pp/df/zo87PTt4+ePHrT23EsSNbFuaRXPxCgUKY8KqzXMGc9tOstuDvd9VnRdcNkmdVdciHlCBQXrPeiHIZiUI7igQDdH/GvjMRYC6TUM9Cwei+sGCUBXzUtuo8M3EmWKpnN50L2apvuPByv+VfRM3YwW9ztxivW9EGgQqyfupfRN0SC4qQInRZjFkoadJHMyqBsAK6kuBapOkEQhvte8U7dCve9tWEl97I6p1wysdsswrLGB0yhYj/CCVKwEppP0TI8X8xV+HNl11vH0DqXpwaq9orunXgKdNFKVExq62rnAIo19Qup9KoDwx+VwNfgoTLUnkhOKQXH6gsPaktyBbImhEElTSWF2eeFJ3YtcaB3VsnCSo4zsQQMTaWjoofo960XPj71qicU7dSk6TiQ4iT+Lp2l2TLdI63XASvGY/A3VJCraDxDXWA2wYVGjgFZHfIxDnpi3VIN4b9Wcs3W0WTyCJHpRZIrkQppHZgaDsC6xfNEKNbVZkiYoWrLS8I2CRC0HyexdUCUFr0tG43ftFMI5w9EdYp/rsm7ZL3nqImfC4XGhyCsgqxo0pAVVbM11hqNZ1hnVc2LspoXm9WwteL8qWg0vhZnsBqKGmxiMCloIB0SD9Y0Xbe1EByPxUYMjieiHnZDqDtxM5TS8TykMgE9UgU6c6LW/GKenUfzt3ioyhS5bfiH4HfBgy4cwhF0wPegDb4PLfTuaILfhAD8Fvjgt0cQawL1mCy1c/3yRHswEC9dtyEr7ODnhtkU4KFLeTdssV6R5oGv8TO6U9wvbIKjzfKtMNBFxmXzQw98wM62oAPGK0W7o0CrC50WHHXAD7rgHwXoYwzNbgvQFfmw0wXfC1rgt5sdCLxWF5reYQAt76gDHb/Vgi4W8YOg2wW/g8WCVvuwM2Kw2NV4GzpwiB3wqA8t6oaHPQm61BkP+9PuYJe6HvUK82HPOp7uXdACD/1VS/sjVZevaHf4xDAqPe0cIPaSNFd4Ws/ivcdioAXwj8UPQmyIutgXpTNbxWti5hRSO2FFdQVt2iBgNvYLT+JCWTHUBSpTVQidvH0uUYPwH/STuXEyn2NQClB2Xf40qSJq3OYijBXMkcBH+DPGnwUlLvFxij8T/MH1dgAq9CAJPbjBpJkItc9tjcRfqVLvuCfRTFuZ08rtJe7yixIyDM7RsO4aidMs9OCCGgk9OBNhvcIbVUVRqaH7HR99Hhi7R/KNgAT/2P7m+kj6G87LlRWWwUvF1rhKZuovDd2/i8LS/YsoTN1fC44er5c/KFkq3zHvt7L816L4O8GlfroveKqfTgRP1usKrc/rDjkv1NAhb2HRDwZHYeCI0Wp1cFBT+Zt50FvpleDnlTzLkkynHXyfJ+d6I9s7sJV9sGcd2NI+YAcVK15pyDdmFl2evDJiQgFgZQBM4RL8ld+QgJrhyk89rWnCTX3C/YyhJN4I26ZoPqUG23ynfOS5xECXKQLN1HD6i9owrCe7fwkJnerbDUVuac+ELdxHovKu/CzQ4wazJqDfbHR1Lqov0oIRTwFL2rwJCU8cv0HVAmoZhgLV8vZbZfsj9yP6cgn3VAzfKSthZcIjgS44L2vq6dcbwKTRkZx0Vx/TEboi0BP2r3wORlyW/aK+yL9o8VsdfYR7LpzTGrDfqQ1VegddzeRQjEKFXmMdW/th1XT392vL8pGyD0Evdki5hX+Z46PnvDJu55ayP2IMl18/KoxW5B8fd+1HJWVwXZfIht9mQFTirQhbATxAivC0oDHwuwibwWHnEN4jyfiAxONP5GKeizCBF5oyPhEW5uniOaBIkHiYCDP4XBJPk+U3rP8PXWsX3uDbL/jzGH+e4I9AcpcSzVMhuj3hY4w/Of7M8WeMPwv8WeLPFH9u8GeGP+f4c40/F/hzhj/fFXVEKCu490ChKcUXVXStSHmtiu5/oPdH2J2X+PNNIXF+ho/vsLb7+HOiwi58VsVQMOkZ/jzCn4d64Imy3qtiU2DuZXRloaTQuv2IdX2knPhzqkIPtSanZbHg3lPsxM8Xfamqor//a0XfqvANejw/MH+f6r+1DeHkP9sQIOOf0Sglcz8qnkLmniqeFAEqMraD8H2u7Ze7el3lfFPlpC1lpqzhSCs0lUUGd7HSbnOsRrueFQMikX2I27Gx5Nd6Rz1UqegE6rquKBzIE2XVgVs50mvhocJwRnKoRrZtJIymUKnUL0pCsqs+yDaou48xh4zLGc9siUEo0K0MyGMz620aYYm6EVaxZ6CrvuFs0HqLJ0M5su0C5rfm2GOGL9ZkDGps5p7g2tg0gCsaxG5mVYNZ5QQsh9lotfLQRVE/9dJhgtuMGFwg7yUYrm+TtMULpJoXeKR4Fz4q3oSHigftLpwq/hCpme3DS3yEt5jegQeK4yZgB0fwVPGmB78r7h/Be8X1moYPivtt+FPnfq6448MLxYcHqUBdbkK4EMmbA8CgNyK63BPp5AAODuAgTubCHDerj+YVz3vlS5LmizhOxolI1d6luMyoOs0plpkORvBV8RtlzRWDV/QUKQa/ldy5f8R6v6mh3xnxAPDhcMSb9NAd8UM6R/yh+DNlWZXNS4E/Qbe7Ax/paNLscx3bAdGAd2tf/VYLXfQ2vh/VvgftTi/AOCm174f1712vF3QPt+qvmfozBr9Qj00vm57pZJsxeKz4ibL+UAye0NMvioGoORkUxGXTMk/ULfNutaYDbfEGuPsN01HoI8+BrEHi+L2sjzgvecbWQbtrXoJ2l9UWJjLFtr/p6if7XAe3+iGVswt/ZzS31o1LbDwmqkduKH0eNxqxnTl+nyfsNsW4WNIoStd1Hc3dBhy/aiLdbiKjJuyUxodmXAmv6Ce1UlUD6ZpZCwVfFQMl63TNDL3tBxRwrGq4Dm/kSEzAQGSH0r4cYNshAriWERFF6gCIJdFJ+/3DntJMjOwH7fYgaLdDyUY0OzVf/KB92Gv7geFgPU4RfdAtxUT3cfyaIf+aWf9TCPK/jRElp86ssYJX6I9TblVS1qwiyqh0arUqn2Vh3eUb1NYcuMD9V8eE1Lxzsbf0ZN/rlfS6H4jmIBDNUPakg0Ky7Dblqa2GmW2PMMIQT+x05a2X02QuLMcRrJf+A5sIfEjMQ+FakKDn7ipFo1GPSHkq/yfCk1aBST9RYFITnjSV/058UoOysgxPio+1+KS6VhOg9DqSw0RCJiGWkEuYS4gkjCUs5IinsiYQkRZ6M5fWLLWQi9W8EfpVdsgGkVf/FLTXolWPJB4kQe+VymG5j5FGqy1gjFHOtGRC/WWQUnJh7hYATj+JKh5pYkKU1pNMiNKUL4ooFp/GOgiGcZ2P9FvhVT8vImTo11wWcUpjWQ9UmsmNSKWJ3BmqVC+4lIIJdjETxSpNP6F7NSuMla3KyPiTQbpKrkP6c7+DZ7IzMbDoaCvcKzQPvKID3ZngHhplnQmKAGud1XP0+7xLeRxeN3+eUK1Upjsoq9SVeI1GvYp3CsNiURV+43Cz2ZrsplzdVIffceTAwqx6DePjCsOluWeCweYYKPyIg1/Ks/EZOs07foeFP6zDZKo78dCYtlnJhxvcJB11FR51a0S3yHq6lfX0x1lfqs2sL1WZlZr4U7/5INzHaPP6hEIC4NFauELVATeTW05KiLzfFbram7/6XbjPlOOM4Fzn99HZr6zkUt6Ncqc7dGxO9qtVMRhuUhoN5KOPeTqUtbP5udwUhlDbdASSx8d6Y+0lxyhtQN05xgHFh0tJ9r7fdaQA84R/vyjWaCS2DfuUJd38xDCK33fj7KXTJU8gOT7mfq/4UhP7XMua5IPcGjFC43eBTLr7RbjfBOT66b6AOTeMAHZRQ1/x94rinOYmHoq3zzMNDUTW72po25h7xOckHvlCHfBYSJlOVbHvBH3M1WMJ3ygU9OcD256jwmuYlPP/BcdF7T8WjgNor4r44PAYM52qIkbRa8HnICu5B9b5a8Bw1/Z70nEYTU2Gvo0Jz3F7k3xWJEG6iTWOg8PVQp7aa1r2zAzbzoYp/i37aZlRH9PfdDQwf0OTzmyMLChH7kPFqexDPAIXmIozbbrpM7PT4jj6PGC9jZ4Uvd3khPScAgX60TMbcYQMjMsJXuinr7DUD+/I/QCfTgRMzAwhh/BB9XlGJzrhvsYzXLGMh2Y9PVIjPam0XzxStt97rwxiVIif8flwrgeKuXH4fbQGy/gUJrbNgD6eKp5B1Kcgu6Y5DM3EPUj76PRgxXwxTJ3lCEMSzEuYPxY2z+9ZmR0zGBvEoJSxrtSOmXbF8/b5hN1Osls9OuRxUTujW+qxzHF65sVxQD/Z/sjmgX6ZYvLE4YGZk0nfHLEyPsVTddbLHIfYirSs1NvnaYnijiNHOD5k1ecab/cxJJalx2Bljkll9+Yaw8Ak8IxB6jhkx0gKfKty5zWOdBThCYHV0z3wae40Jx7z2JbD1IgLEON4TNl0+F7D0Ba8lm4Su65DMWNPFL9QVkaiDHQQx35kQEiFI627cW2SPuqX45MAwMNqIecezPkhRCaIkMeRF7bm3G92IeJNCqaEstxTpbcsknGXh4pEh8gkSSxWZ9l23ufz1SrZ5zEaTEb9fEBbCQHQ5nno7fNkYCUE6toXlNK+pFM2vbEw7/ueLup3dVqo3w5Nfux6xhNU6cWDWo/DxCR09KtlxleXMZ1twwWhkpVQQSTP+SHMeQtxknxgqP45b1bnj0hDIqLQlElspTyjOiIDDNuO+xiNK93nGXGa837MJtkt8RU0Flwzqnw8VQV98fa548RGAY9IO7DSfULUvyhLUdOgykCgVNUzZqGvsdOEgLEwRgjXaiQ4q+q5VsD34ZAcEKrMh7XMh1u1N/GQxPF8kuL0ZIMa+MLUJHT0q2UAXZdpfq9pibjHNMQ8O4UmA2LzNLslzd9/YqhvsnxDXaf7Gbv4BitIMAvpUniNs/hyd1EgeTaxwtH+/pFgdNQiJzr3mxrmIzQ4tKp32x8xjICEtITegxHkqHjwMHyS5hz1UtV/TxULrYwLjMIN5nNWqElU7YUmkn9FcoXuyLgYE4cv6J3KYdwDIj+Q8XcKrZMoGWV7WBP91ZW8qleSOnxcVZJiJQW25cc04p7pFvF5yjycGh3ga8mHt7+r8E8J71HS+wF//sSf5yjzBfz2nL618FsLv3XxW+vONxT6hT7K/MLunY8d/NgM8GMz0F9fbFWri/qd+tcufvV/WLj2GVXlz+nPnQzNoJYhaG800AyoiqCLWVDuiXV4QetuHvxY5UE7gPWoOnt+k3XF0j3hWKLfGhyFXo04vdtiny2LTgjPxSfJGsL9U2wdp+7LQnM4VfydXqFTXJqLobItUjSN9AkWmYIXYqgawv0dQwi6X1HVOFWjSsFWpKCVUU3JYM5W9PUDyn446nYsTAEPLJ3I7uG7++Dj20dnn18/evP50YtHLx+dvq2N7bOs7F4lcXjnwgQUxjp6CsUfynGIf/lKQW7NX5JyeaF0UpM/3cz8wmR+sZm5po2oHSi0+Ei4UalaTPopiexShks4GXh4TIuEwxNYoskxxRMQ5ACIttU+Jxdi94EYCDfhKAhyEzBSqp1nfluSTTYLg7Io8RoJX/58YUYdsIk9HdPfpK452QXcSabjSAv3s3LQeNQRLqpdSMZBDFeszEOuBpKnoePTN0lsV4xsi03a0kbDIvq6AOT8F5BC6mj6qhxSCcfmb2b+phiKJia2xU0VtcSAMACkbSCNnl5uJBhJ27SVLE6UeymoDSxjY880Jc+VzZX+S9Xzj6pklLB5TDQHpCkmLTRO7FgXKL3E3NS5Hd9x2VCY453rBTYWiiLuJVUEsHrXeqy3Lo8MuTo+RUjvl2PWjjuzY5yact54OWR0FD+WA1oan5UjQfVfKgoM9FIxvfoWQOERhDvj0lYo7JgdS9vkwgdHuDPAaaDJn1F68VLWQXmoFpur+j78SBpbSFTWcV6aN3tl8PxZsYDQv0q5l2Ifb/xpBftcuW9Fo9E+LJ46R8XTYbN4OvKLJ98rE32/fOx0Ovqx6tJHWTODwJCuxgpCW0TUHNbqa0F3lKTsJHtC/yU05pPEJvSFOxUGMlPBwLDaGtcRKZYYMuEz/vwiNKCW6CBD7xofJ+bvVDiU/ob+4hpz3wjys/lFcOn+JupM6KncsCAhWLpo7Ye/7gu1kzxgRyorqt+EbZrD+0n037rr2qZwQbeRxBbN62ql+m2MKV/KP8lIxgkIL/dx7KsVYWskGo19JH+rVafT4TylyWnt850laVFPxeanto6+wlM3QbfhRCF49nnqvtEIRtMFW0Up33MFnrZJLerG7nyTlmLH/Ju0JNvVFd1erbdmILtytYIyEz4QXcZ37vtNBsXXCpm6tpW618LpHh+3kAnUVCt1ZygTWK2CfureqIEXdvSDH1InbtQgCJsgVxhDs6MHT7RRrvDSGqSITd+R/2j68FFa5Ghb5aEU4SYoVmT6u1EkuHpTSLgPRZ/BANOA9w4wk9hqH5pBEQUiHPNoIaXQ9M2D3zwyT130DXsqGL1Y+Oh+xXF5zNZvL3Bs9EZ0gtJeIQham2m/YVp3M+0PTMObLnRbuI4p/RdlUsxbaeW0naql1XeStdTaJB+VM7A9Ta3Q2275MfrCLebz/WIgWgBdy/Fko29Pqr5pQN1du0g9aDIww32Uz9BkdY56BWZTdUVX/u7vTw6H/SxK0Fo5KvAc6T3RoQ0glLoJpJmSWxr/CnA4OCwtScQMtuyn7h+iV3Ba+OLgB2xpiS5tBiBgaiewII+DiZQdDHmkL8jp/M0QSOjl8GT94+qlrt7mcqNy7q0JTodNXBqHzbtw0LhbPpTh9QqKQCPTjBb1nwZAFZxqr9S/67zk3loVa2RII7ZHeh7rQgHFekWF9Y4f+djxI393x/9Q5cP/aMf/+KmO6x77HsHa934A7BeKFX2yA0KlRsPa7MrdvpRrFImi7gORzIJulIRuTVX/NLE0WwdthqmbK3pQhjuptgbJPbMs/5Q0/JB2jpkabKnG943OoVdYYyOz12hYz6o9MFes+FjTTmqNNJHsuZbxvtZap8UQmcaR5pAN227bhYRD8d8R9vs+7XZ6UZe1qrWuMMUKW7XmdBmPDQZNzac+Ej9VXaHvJl9vxcLmTiBoqXgdDsQg84d64jUoiiTamGtwqKDGtkGCich6o2wxJosvK9FHA5/4nwXKX1LObTtpNDb/Mnabaeb7ocI1YbB3d+af/5v1EzxpzNE4yrEyJ6EzHDKdud4l5koPpRjF8UeFwbj/cmpJiRgrMD9zXMtk8+vTm/NRmQKcPlKh4hHhxP7/wI3XcogLZuT+rgkG6dUDjnceNdF2omDEOp0OLQy5WgU1mwrDLlIuWq9Mb2X6/Ip/lA7wSJKtAKWH9PS4FHI9LqVcUBwMUha29QHgOy5jHRcQd94m+QFZJ9LSJ9dUTyByaLSfZ/oPAgtjsmxytHcJSxGLa58jA4RsZ98bWIHmQAfW3xGzWsoGA6STNpgfXctYlDnG4k49Y3G3onF1synKfisetDRb2cGK6mHr4RB0Hgju4G9JY5HdY6Ffi5tRnDLpWGIg5QS1MybdvPRWVHFDFzxWoNwXguf496v5+1no9G9K//2u7amE0lf0fTHJr5XOXurR0RqkUpXTW6kNp7enorj2V7m/kfEIHujwzzP84/uIrgOnGdbEcg+2NbtowaFN72NUMQh3jPoX4V4rmFNin8QsAyJX9IhuKCTagjFHEQQskITBkggGTPmy/1ANHqpwCRO+IOEu/kF19Q094J0vMNOPo17cR4kQ6bj7qL2EvL8kzcaSlVIiBYuhtOPRPp+tVvToYOD1G3oZ7fOJTsW0KzbOUpWkC2EiGwSanNP1VthkMuIcMyejHktsmygCTyDtx4bgv8FTYMxTVCjmRgK0o+OFCMVSPBqqxnjE+nM60DlOdb1m3F8OlmFcgf+pAb+1oUow+08h8BfujTLLjoQymiLjQ80mDyRveUfNTtBqtQ6N8NHrNX1jYIkuHdzHk5SPl10St1BYZGzuWebLkTZeKF59b+u9WS/pmwabQe+tMnZRtbrUZt6iOTIVZnCthVpvVfn4QKG2thob1X6hvz3Ued3XgoFJOtVlKMnU8BRNFvnvyiED6KYRHb5UwwztRUhXqRyndmkXKlP9lt28R9bUoLQZMy6Dx8Ju2of9fpNWw5Pyzcr0BT8kKEVrCyvjMWNhxmMu7TZkfS7tVqOhBnVFEQtj0ixpYq+VRV80uYcnqtRetfQXq349AeEvgULrQJygfQjtQrPi+OVz6rSgZeKNGjuoSiWWoaaHNH9N1jsrYYrydzgr4SkdX8c7MLC2/QLEtg85uT/UpuMUp/FG09RGY2L2qEo26qC0FRQJXRn9avLyUMtQa7Kg3+VGGCO9POgQX4php2JAB/kQNz1S+7yXWutbKTA+bFaj+uiFV/MO+HOHPQuWwQMgmkGdU2B3jwgfSUFL0vNeEok8E3YrQCwwXTrGa2yTooNOQmxcMXDZT21TDxnslW8MJNngSp4w0NakWuKN+y3d/4yO0/u1AswQoJi3aKOXvPqIYALCNcMOxAxKPy2npW1SitcmWSd2aynBiP+znsPHd8xSzBLQRcbUS4y1ByR6vDTSx0sSQOoJzyj2iUmzSciuwVI8TkxqpvCvdFDKjtVWMvXNamWtNlnVJqvaZHmM4zwmDi13irmDnCg5KhDPBTNy5Vgdcwr3SPoA/AIbagNK0boANDoSxKuLQoZ+V2PAiuKG2b00iphL3K+dXMc7RP42pwpsRLecWiF1gNai35KNWsVT6MKkIKl1TletDJpirdz01nRmXa6wKmA9yu9Nl2dGxxGj6dU7dJVoslAfFlv0Wyk89AEFXzNchYThBnxgsvQp7ESmaNvWyqKsgOi/DtzErsayC8hJv1pISamioHik2woZSAqQJxXIkxrISZdwFywbyzspyUIC78ketqyEbaxxK+3zDK+yph0BtwPvDiyTPk8ZLfcPUgc/KpZxPRcu6Wopa+1JXCOduASKJcmMVRvOIk5osKGifb4lWN880htdz/ZJ9vSnDrJy4xRrSX5fd5YmSXsLEWzkMS+0cnSme6DlK/p0efxRsfSvj5Cl5NGg3BtzkEz1QdLA36TePVDSCfZMrVY0tI+K3TljQqmDo+Z3qeGojD8ql+hcOQ7uB4X8ojb2umUMZsQzNWYiWc6/dpYlEoX6PeK0Q3z6755uSzR58b+EJni0KKZigU9mGjmNtUCiMVr9nqm/xido96kmfZ5GfgynfK54KWQhLOmjoUNZlmwOdDeOP5oCfXzT+oalke5tIijpW9NGgzgTjxVCLIO0FY9SwkVrhbA6Mkqt5d64Ca1QpzofVc/g+kJR3zZw3XfK9A1sHyPI6A8PEDfRMha3uDtQ38TQsTLq3aVeCgXwTT9/EmXXpgpiDO5CS9fO4P8NWiND+FXybjuAV5KPFXmvCt7HsETwm+QLVQ9U5/isytBk8IfkkS4SpQx+Kd/GKev9IbW/aacFAX7Tb34rABOo47Hkc1Xe8+MErKzoyc4vWOnjopoO+HDYxBAbHgYLgSdl/RiT5DDAn24RRUSU/pVD13V/k4CGPHixIwO1/alpPsgUvQYfo1Senp7gdraR+ZU0WePtZHRRPoLWkd9uoiEtlf9DMpjT0y+y5m0UpZus9z+CgQiF7XcqgjP+QZagW7vxKL2rFKateS7oVLYUdBzLBfHoC7Q6T90FXv+Crhd9D2NYoj8EPi546goJS566CgUS6OyeulKiv/ukeCPv9yueuue60A0KhOlpxlP3Qide8tRNJZzzzLGQpKAi/ppn6KUxFXgeY3DBE1sb5aCMinvwnXvwhXvwGk/yobEk7vnt/lgTWHTsKlQeRDj3RC+y0UjdtkfHx2MY21xfKir5Yhg1piNDmb/wyg0GIozY8AXGDv8C+gNGWOH8C7vNyRHL+HLISj7vdxpfqKKz4ht8aaC76xftzNH7squLt6mbSO53As+I+vfE+m53z2weNRCyXxCstc6t/2L0P1e1hsRyGDUmPw+Jcqzf//tj/f7DsWq6dQYLnjnnSLa+9xeFGua7syBjg/5No3FZhPYoLnedJDqAzJ7Ksr04knvnGI4Jyu4cld3Ru+6Muv6aXzkYuwOjNm0H+LBtwQwizIevbZsuqyS52N7m3cZyZ2aKIv+aZ8730spB9mfs9jW/smeOvk5OcOmQcZT493uAMivRVz3bVluZdSh7gcsIFDZdr3/2o07PTKep1xpGs/8HMCKUUv2gV2TJKQv81ZtyeLOHe+hWct/fTmM6/Bn1n9r7H22qpBedFq6hHyAqhgHYiaC4VI0aXjLbqlYKG21XncRWM8AHU41/5JfVbDY7p8vB5r/qdfpXjS9+2LjhhC7wAHvdz7Tt6Tc+7vebvcTh33AJfzs+bkLUoD1izIgxmgs6Ty4FzwDJPL/oJ4MLJ7HbYduxEueCkYUVv+5ng2sns4P2YRi0D1Gpdo0qhyse6Sg86Mc3Lv1cl2mlBKg202l9F+RLvItIDfxWqxP6rVZrOxSLZyKxJDL0O37Xg1yGeK8ahr+Y02MkMfgJ/izwZ0lPGJpkgk8TtJR+hT9ChhKUwiuG8IPEtCt8usGfGf5c4s815ruQVRgXtOsoXzGuAHyXReCUFIWGGLtBYnDF1/j4Dn/uy1DVzPkm6fblYXht8Iru9F3VrH2vUu0gSypmr8xdFq/5J2JOv56j0wK6NL1yBkwri2dtQM+oVau4lphR81Z5YzGaVK1EoXmiKbxM+e19AvOJDEUKn2UoU3gjwyyFZzLMU3gkw8CDjxIRAh7i2E9l2D4K4CUVe4uAWcO5qcfDehTVk1I9MdUzp3r8I11PB+txfF1RiyryqCK/FoXqOq1d7khaBY1Sc4hgDAswV3vj/TFwCedwDRdwBt/hC7yGb/CujDHRYXC//nLC88F5Gl5qY+c5Roxo9/m8N7dt9m44Lxy/tAuK9kB5N1TDaITRTfDLkifuAwkL7rd7iz736Uz5brgY9RYonUcznP4CrRz5ggTAi4LhP3HfyoF1xm9SyydFHvpY8zP95OMTVsx98FhovBHH3O8t+mPTBN5Cb9vaTWZMGqYlHzO44j7MuV8bRxJbV+gWCVcOxzGB178qtH8+9vCKVIh48lut/H2+YNVXrPz+kMzQTaW6zvvDOQaFuj+cj2ys8w6UUHY0jDCQQTa8X0BsxCPWy5eJiaw4jtDtJvzCX/MMvvET95Hh7Xr0xQ+/8BP3BHekE/ezpBwfixwTEUcYchSzvNFZnuksDyXS4xlHnR72egzfeYxzNOWov/PgGp2QbjAa1BIu+I3jk5U5qpzdl3Jw0+dfZXjT/yoZacHrH07cU/yEf9im4gjZuDN+kVoZXvEKExAG9U7c+5LBJbY2dyZwjg9TGPNzPOOeO/zSMB7WrN+fMPu8R/P/3RYjfladdM/1NJtq/N6scdljlxThTCupLgfWrMEvHR9mNr/EO4c8iGwbMc5xcIK0YxTin4bfHGPT4KysyWEK0WfWuGD7GDnZOKhNGg1rwpcMvtu611OOQ7iil96iP7UxByHV1J6M4Ao9A9nUtoHQDXt2Y0r+ZwC+5rPGhV4YOJH29YhPUmsKS/juYAJbG/OhGfkh0pqaOxOGznyznhnPPo3HjJFGhsixrCOHLsjMavxu6znBpbgL8LuhXhzjqaP8Ri/iJdT01Rd3SBnMNTGL6GKSAWobj/MQ/9j+cc4ifpVaaHSXgqgunyuz9nVWVO1iWqPhY9zJwvViqEZ4qutRJTG5STvaldewYDqfrooqcvIfZt6LMD4NqXcnqXXUoS2IWdJJSz1kRBvJWY0XgO8pv31KVP33cidtt1oM3svwLIUP+LuGLz+Tq9oQXqdV6GdjGW8VxuUzAfvWhqG8cu+TpQoyZH3lJhKTEtknXoutVvtVhq63lcH3Gasbe3+rWubCvS8HX9LwewqS3z6QobfWFw8+rXu9Gd9UjEbU6qfouH4hhymSQxOYQseZqaUfmfSut5l+WKR3t+tR7u+yFkELX0G57yXPIOFH5n5o7GG2hpwekjXMiz5jrdephdzhhQSMoYpoKdwzCXMQRMIyvU7wwuEH5OAu+RyfcFzNYLM77V7C2z3tu0mZxkXTC9N0T+K6iOA6tQLdaDOgjZzalKZN5X6QPDNSpwjfn6JZ31q4Ai1V3mM+KfkRCFcpjrkxQfG27h+2Qej4LtXxMctLJlK1dWWZvn/h4BSDYl1mEgOgXi3UAatHwryf3lG56tW7mwcpYum0iAsgfF2tjLk/WflvG8s7QS8vdy0U/2CgS9QCkQNurN1ltQMDECaj20NCEVSK00bA4IuF95LksORzuMRjYXXLjdl5MbfZfAnfQ30Cl2g8dFtVVYlZ7hOrFDQk2ew32x2/zXnEbqnQtfa7uBYc4yhKdyGNlTs9nln4ByIG3yxM0pV3/apy7YpBf9w/JUcl/j5aeGBvVivLOrG6yKni2Qe9UNg/mn51hBtnUoox3uCOl/zs0TW4B0Uz5TEKm+nu8xOrxYqiCxNNe3znSqXdxT9bLbyQC6uwu7A18BmDWd9vr1azPr5vnzCXSTrJlvpClruVS3dMMSxnIN1IaxsSTrCTBoyJ5G0/aEQDhNxRSFOP4NzglRCoYTlXVFUE3X3tS4uv//bQ24fNVktXsVWDgXo8jy7yvVyonaOrZverwoNjt+EzDOlMNTYaLYNV1ia6bOFLUI0yCO9b5MdRq/kXxaMfV/r9B5U2q0qbYQG3qtLnOkBqRInuY935f73rraqVFrmyUulBOVETnKh6u0/+cjCbzbCwXvIV2t3Vmm5XTbdDMgM3rTca1hTv+pIw7ef0kjOYmmqMXxS6Y2gHKcw+46ZvDhZjx+WXpSrahhnRxOmP+76UuvO1C3USSOwpgyljkDt8itrzKQHF4VMNnZIPvMY7vBBcXjXCTjXCDo4QA4MbVNVELa+XnnIPue4Zx9iLU5QX1cb7FV0x3Yk8Lt/0wH5TQ0zGbW1W6J5mjUbe15dT/qdjndU6qHms+oz+RjN6Z9iH1bAPcdioFPw3h/1qY9ivymH/8b857D+KYZvxdqvxdsNa6zRcvZCKbkT7hcsM9qMkesUGIcd7l0l+ieGod1CrbxbboFgv0HUxkv3+UcOHYofyWUWilxWJrgn7qt4eGWJVFpil1tZeeOSV2Y9oK96X7rw0vX5tMQh6u7YE3V5ZlIh/m8ytOjVlJM5/mScIab/NJbt9U/Ug8Dpm+IY/uG818WMu+f7+CQonPuPPiRWw8she9qC5eWBPYutbij6fZYYjqHfnsxUwuN7cuoKqtk49vRlubqPneAnIHt7AUJ+5NVa5BfajJnYEh6ihbxAiYvscmYi+3/mkzaq3d+pcZVIULWnJbL57U6QVaardnM4W/BD+rWqkFWk+ItJckGPC6DpRRhNca8rnJDya1qtdKgv5T0Nzq6U1x6e4RkfLrfgHWHrUMYxDC4dxI/mJ1WYo9YXPFrF0M5PkFwlXUnNCLSC+CAv1g25ntdqXdI7CIv2mZ8CLaYMD1ANdRumNgetBuJ2yl8lKGJ/fXJ5n83wnR3FZp4VHFS08Ogx15Dz3EsnZlewxg8oXEo1GMd22RyN+gqmfLRNipucf9fFTj93J6PWke43niO/oBCzwSSFJuMZXKfkhnXH0mQZT13BunqVcw7PaifCSX9MZHk86/hEs4BwknnSegaSTDrWzwKMSVXyOT3d0aqgkKNDyh/zWJnQqynnU3YDOjbRxlox0pHfFcXzDEwubZyOwrio/BdQrvtPXX/qdvllMV4x9rmfSUDaQMyvjqlforDAGYVVQU+3ArpfHCalXRyz2pdwGwXmiCnSR4kpEu2CAvIrpC5q3T3nTRuIFSCn0XuMf1rqDrFjzL/uCwjRdi8EbFlr3rcOfKOP79ol1iN8OdTAuAtC0X8L/3xmftv53HIOwBcxna60SD7wjfTCsYj0QMC8opP5oJ1I5Dm6LeZJeYPhnJ4sdooE7EaxaEHj0phXwqLYCPtZWwMNiBRD6+xr9cezwCD7qBfCwvgAelQvgo/tAq2RP+UN8JNDRAryWpRXKKbu7Rjb1aj9eJlLxDjXwkkBTu1kcu1fND7ytje1BMTa1hqf0fFqt7gBeEq2Et/BAj+1pfWxvzdgUf6CfDCUxo9k1loIa/mgUBJSd++zGtnMUysoIwKQGXsFrIL3O+7zTaMz7FBv6FnkOMl5ZamnCtqzhNZ3Sa8hISd7P0pAr7e3U2C+egpbHNBm64VdFLWZ53jDbOrGsm6omm16CFmP9fj0dG9zItqP1z/UcgN22eZWiz/lXd3JUKVDb9q+gGAArpSaB166mxoyuGeBngtkdRrGWrdP6a0w2GuIdmPxKcVOHRTtt0w+1JMbk9Ks590Op3ezvW/igD1g2PzFvn8tUHHbx/E5q3qSsMKgqDMJy91BKz7z68cz/xYwr9f/pjP9werbsBnZMzESVqFKfJb9dZW5WoGzumBv1d3NjqmlV1bSMNG9eJwXEYC6dOdXZN0wmzqpypoC70Qx5tlT+pBHPnbFiFRdiYE0dJKYYS1OijfqUhRNKMK1MKsFDnbPdiHI9NYYp2TDWd+RIdzGcjDDIH9j2ROssJjxGOQRawhkpxt/XldVrqbHVxC4bTllzHZOaSDXwvK3TReC1d4E4G8a4CVN35hgqa8vuqire0aewB8LwQXhCWTp8bsLbLAHvD8e/xZF2WWgbsmqXip0lYODC4mB4oY/dCpbk34zC39rBPJKDKKSjJ1prsH0qc1eKSpc6/EiGqs/GJvGwGs5hMZxG/UiOg6ofyaso1Q0cHrvbeEHmfqb5btV8NzSTcMl9qG17gXdUfXGaG598z3xyWqUeuRDBrzfvpqxfhPYurU+4udu+FmHY0iZsdBg8F6vVct+4TVNv+uX+eV8OqOeUEhJK0CNbrSjAjpntJVlnkqv2VtjTMr7QvpW6C1IjpO7CmPyhB4e7KJQPZBl6TZ7CC1ZTqWoMTrW/C/7hJiegpSg5WM/Iff0YP5ah1nFVY4aeICcqYZyo0G4Vk/HOt+ImBbq43sJw+mxgmTzeZgYKr3GBd5Bha9RQaGGKzU0/qh5ipzD77LhMmtlcGEOyvV0NYEZItZ9LNShM2PDfRFNvUa0sNIxyFNlHMQz6WoTWNrjne+C0CiXvwiH9DS5fnCsTLG7x45VswtXUl+yO1pem9SXZ9iObeCZsEtwMOi2K/1NjyQZ+0C3TDOe/WpG4wWQI2h30PsQJX5DtyJJ+L7Wfj35Gl4JLjga/lzVNNeFdFRecCMlSmtRQFk+1eK8bZtHnaNGiLxk7RxuSMn4PUCXnEGxFWPz+k8XPh4F+NZv0+bCp37UtU1F9a6v6L5YOPbHQltdLQf7gU0HG2XlpnJ3rSY24dK9gTNCv3aBmIelaaNu5peCxtpWbU9hCcgk05nWR4DmKSki6j4ZyNQ2yxW4jreGrRaO0KuFtdQH4u7SXOw5EJigqXpnB0GwXo2WTna5nTIpLJWURyL4nDA9Uiy5Zi4mpDQkFc2puNJ/xO9Uq0HSwNuo3lvlw2Bjjp8PGuH41Vs30TCvmB04QaqvAz/oqjg68SXfdUcj9Dij+OTV3FP4mMZwzPf4ha/df6NtGzD0QAlqMIm2bIuZWRRPWkbH1L1gx1lnZ5BZZy2teVB91o45TWCaaDHhVFO1nOmO/jMW3V9SQX9F5zYTRr13e9JjuiZViLqKcLhzebPPYjKrR2Oi22FAxP6vZFmCdb1KrGcDnlK7eWsznVc7UqmwQHktLX1zxBKO1GYsg7SIva7iUKusAbxbfi6NkLibh3oEtWe2azLoJY0IDkDe3yq1GVN5ZXhu1UtYtXd9rsds1qOKGWxRNslu5WqGzsMW0aWqOIh1hzvJp/WrUeREef36cFbcjFNcImFkv0p05mIv0ojpDNIe5nWr2L8eVGEGOK9GDHFdiVFSKb+XNLylX7i8Iuww9xnC0Oa7sFHJc2Vh0inueKVrEMlWplaOh6rz85ORmo573vWKr3PfRIkSmYVp31pkzMOAM6RIrsVpZgu9jgIsCzCnGGe9lmBiXd6NL4uq0YQ/Cju/XohRhpO+tab6S2VigvQNdK7x3YGP40iSN5vOb22y1SvCasXUxD8YgzOZ4s3k81xfSka84snTVRG3NZqxns7B+M8tIAzQtABojQCXEGqAxAlTuAGiM3v55+cmJDUDzDYAmBFBZB2j+9wCVBFAEGWQlQJMKoJWU7C4cCWbJ94jWxC5gpghMNEDT+C3cNLXiYgnmtATzrTpFOqmtwByjytcigaabV/n9aHmVl6yqckjClWkhGmNVD0UJCFZOL7vFRpE8f9xNlQ8mIp5HShxUpttFF3d/Pbj4nlwd4KXPTT8svjsyWlKa47dDH0Paq0bjIF1cnguJN3PfXCFbjfzatZgPzF80djUAeJZat48lTWz9zje8SLgKezETnC4FBbpxDZ7IUGB24ph5F1J0kUn4IwwIU4YlibV14n7N8oY89fBEcgAYl1dHdsVoSP2U1gLa3jh+u59WRVLupJr7TPt+my5qCCB1uN/RsvJ+slol/aPVqruPEZW6fbymnOxEvD4ap+Enr5+tVlm/tVp1Od4A4WM8/7IFnWal/KggoDTUYvA5ur/PkM/I3Uu83TfHIE6tAHKMBhRDXounk6OhClI2zerjK+Tu74JjiuND7r4XPLEPIXc/mBzvMcefmOODzvFccAuTy0tVIa9OGsG9nFjtHKMFGQvrIuVrLeUDpcyIvL6ilhK7AznGFCoMpu7hF8z1h+D6BRtqNLBq/P1Kv5/FwMoxBBE+VjShKPsMO/6bsE3xl4I379FHtDDK3RuMiZO7M7x8I3dPFJdQux2uFrjFwJpiJiFbYyGTz5HDJ1sdjTLIpQdgbA8VRvgzoYswjBGgRSGdxBVFaVIUpQkDLfGAc3wbtA/x5lk8GhQppFkOtb5XYTArJ9AdJER9SHENyrhKff5esboD0vsihI0JXqPvHjXe3w9F/QLTO9k1X4IFTKi0U2rstGrMXMxar0EnlbWc3mn09E6jd4rcafil0ldX1Br+/W7Dv9drocuUNhp+qe42vFWk3jBGi+HmElWKDWOuUX2MlwgC3h0ADxR80N7fD2pZT8usT/D6OvDgaZnvaS3fS7VxM+tvmPN3hdc+bFyPpW/P8nRMmjWzMOYahaQpV7+nqRTiBIa04HhP6bmAE+Phfqb4azkUFPbtA4XaqCW8x4TrWsKfmHBRS3iuo9lRR7Ii4h/9SUtHa3J/N97WyzISAR2q3ZkoQhDh1RMmuBwUV4I7LQYUjgycFmOh06KDeApdkNBF5kql4UsJaRq+lWu2pu2uR3zzUiYqOp8jG1E86vOCFNHEfCge3avkSrydymxxMbVwZ8Ud8OHf7HgFW21tJJaU4e83uiKx06old0K//a9ua+Q6te9v7mzVNlwzRd3ezAxZMhyWg9rXkpClul4KLTLDLSHVewf5niUDbUuina+2byPVDdEBb2PjNL7NGOEayZPjd8pY106AoUsxiqo0/QDFHWVMfnjbtlS/32I6w74PrW6ftl70bGW9IqgtScxqEMQsXb2HJpooV/Iv9GVBQZaOLZhSCDsdKI/kTNeCK7hL3stTq1US8XNNxGf0S+KjnyhWbQ7KXcraDqGqewj8RrEDJMgw0+AqoCsyvPFRjGX+RqQ7UmgnSrnpPG3u3J6IuVBiDyPn4WXS1Ncz3XEykf6OVuBkG01P12VaKjWXrBVThrTUfjFor9QLDxfj/RQX40m6NjRocy2qH61F9ZdrsZeLeezikfRlNlnMBde07KQyTD2jW4f/nCfn/GNKsbrGOz8+TNdr1vs//xc="));if(l){const t=new Blob([N],{type:a});return URL.createObjectURL(t)}return "data:"+a+";base64,"+(t=>{let n="";const r=t.length;let o=0;for(;r>o+2;o+=3){const r=t[o]<<16|t[o+1]<<8|t[o+2];n+=s[r>>18&63]+s[r>>12&63]+s[r>>6&63]+s[63&r];}const u=r-o;if(1===u){const r=t[o]<<16;n+=s[r>>18&63]+s[r>>12&63]+"==";}else if(2===u){const r=t[o]<<16|t[o+1]<<8;n+=s[r>>18&63]+s[r>>12&63]+s[r>>6&63]+"=";}return n})(N)}});}
218
222
 
219
223
  /*
220
224
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -1706,7 +1710,7 @@ class ZipCryptoDecryptionStream extends TransformStream {
1706
1710
  if (zipCrypto.password || zipCrypto.rawPassword) {
1707
1711
  const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
1708
1712
  zipCrypto.password = zipCrypto.rawPassword = null;
1709
- if ((decryptedHeader.at(-1) ^ zipCrypto.passwordVerification) != 0) {
1713
+ if ((decryptedHeader[HEADER_LENGTH - 1] ^ zipCrypto.passwordVerification) != 0) {
1710
1714
  throw new Error(ERR_INVALID_PASSWORD);
1711
1715
  }
1712
1716
  chunk = chunk.subarray(HEADER_LENGTH);
@@ -1879,7 +1883,7 @@ class DeflateStream extends TransformStream {
1879
1883
  readable = pipeThroughBackpressured(readable, new CompressionStream(FORMAT_GZIP));
1880
1884
  readable = pipeThrough(readable, gzipCrc32Stream);
1881
1885
  } else {
1882
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib, CompressionStream);
1886
+ readable = pipeThroughCompressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib);
1883
1887
  }
1884
1888
  }
1885
1889
  if (encrypted) {
@@ -1964,7 +1968,7 @@ class InflateStream extends TransformStream {
1964
1968
  if (codecStreams) {
1965
1969
  readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.DecompressionStream, format, { chunkSize }));
1966
1970
  } else {
1967
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib, DecompressionStream);
1971
+ readable = pipeThroughCompressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib);
1968
1972
  }
1969
1973
  readable = mapInflateStreamError(readable);
1970
1974
  }
@@ -1983,6 +1987,25 @@ class InflateStream extends TransformStream {
1983
1987
  }
1984
1988
  }
1985
1989
 
1990
+ const deflateRawSupportByStream = new Map();
1991
+
1992
+ function supportsDeflateRaw(StreamClass) {
1993
+ if (!StreamClass) {
1994
+ return false;
1995
+ }
1996
+ let supported = deflateRawSupportByStream.get(StreamClass);
1997
+ if (supported === UNDEFINED_VALUE) {
1998
+ try {
1999
+ new StreamClass(FORMAT_DEFLATE_RAW);
2000
+ supported = true;
2001
+ } catch {
2002
+ supported = false;
2003
+ }
2004
+ deflateRawSupportByStream.set(StreamClass, supported);
2005
+ }
2006
+ return supported;
2007
+ }
2008
+
1986
2009
  function setReadable(stream, readable, flush) {
1987
2010
  readable = pipeThrough(readable, new TransformStream({ flush }));
1988
2011
  Object.defineProperty(stream, "readable", {
@@ -1999,21 +2022,17 @@ function createCodecStream(CodecStreamClass, format, options) {
1999
2022
  return new CodecStreamClass(format, options);
2000
2023
  }
2001
2024
 
2002
- function pipeThroughCommpressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib, CompressionStream) {
2003
- const Stream = useCompressionStream && CompressionStreamNative ? CompressionStreamNative : CompressionStreamZlib || CompressionStream;
2025
+ function pipeThroughCompressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib) {
2026
+ const Stream = useCompressionStream && CompressionStreamNative ?
2027
+ CompressionStreamNative :
2028
+ CompressionStreamZlib || CompressionStreamNative;
2004
2029
  const format = options.deflate64 ? FORMAT_DEFLATE64_RAW : FORMAT_DEFLATE_RAW;
2005
2030
  let codecStream;
2006
2031
  try {
2007
2032
  codecStream = new Stream(format, options);
2008
2033
  } catch (error) {
2009
- if (useCompressionStream) {
2010
- if (CompressionStreamZlib) {
2011
- codecStream = new CompressionStreamZlib(format, options);
2012
- } else if (CompressionStream) {
2013
- codecStream = new CompressionStream(format, options);
2014
- } else {
2015
- throw error;
2016
- }
2034
+ if (useCompressionStream && CompressionStreamZlib && Stream != CompressionStreamZlib) {
2035
+ codecStream = new CompressionStreamZlib(format, options);
2017
2036
  } else {
2018
2037
  throw error;
2019
2038
  }
@@ -2274,6 +2293,7 @@ class ChunkStream extends TransformStream {
2274
2293
  const MODULE_WORKER_OPTIONS = { type: "module" };
2275
2294
  const ERROR_EVENT_TYPE = "error";
2276
2295
  const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
2296
+ const ERR_WORKER_STARTUP_TIMEOUT = "Worker startup timeout";
2277
2297
 
2278
2298
  let webWorkerSupported, webWorkerSource, webWorkerURI, webWorkerOptions;
2279
2299
  let transferStreamsSupported = true;
@@ -2284,6 +2304,10 @@ try {
2284
2304
  }
2285
2305
  let initModule = () => { };
2286
2306
 
2307
+ function resetWebWorkerSupport() {
2308
+ webWorkerSupported = UNDEFINED_VALUE;
2309
+ }
2310
+
2287
2311
  class CodecWorker {
2288
2312
 
2289
2313
  constructor(workerData, { readable, writable }, { options, config, streamOptions, useWebWorkers, transferStreams, workerURI }, onTaskFinished) {
@@ -2377,7 +2401,7 @@ function createWorkerInterface(workerData, config) {
2377
2401
  }
2378
2402
 
2379
2403
  function createWebWorkerInterface(workerData, config) {
2380
- const { baseURI, chunkSize } = config;
2404
+ const { baseURI, chunkSize, workerStartupTimeout } = config;
2381
2405
  let { wasmURI } = config;
2382
2406
 
2383
2407
  if (!workerData.interface) {
@@ -2394,9 +2418,26 @@ function createWebWorkerInterface(workerData, config) {
2394
2418
  }
2395
2419
  Object.assign(workerData, {
2396
2420
  worker,
2421
+ workerAlive: false,
2397
2422
  terminated: false,
2398
2423
  interface: {
2399
- run: () => runWebWorker(workerData, { chunkSize, wasmURI, baseURI })
2424
+ run: async () => {
2425
+ try {
2426
+ return await runWebWorker(workerData, { chunkSize, wasmURI, baseURI, workerStartupTimeout });
2427
+ } catch (error) {
2428
+ if (error && error.workerStartupFailed) {
2429
+ webWorkerSupported = false;
2430
+ const { reader } = workerData;
2431
+ if (reader) {
2432
+ reader.releaseLock();
2433
+ }
2434
+ workerData.reader = null;
2435
+ workerData.writer = null;
2436
+ return runWorker$1(workerData, config);
2437
+ }
2438
+ throw error;
2439
+ }
2440
+ }
2400
2441
  }
2401
2442
  });
2402
2443
  }
@@ -2406,15 +2447,23 @@ function createWebWorkerInterface(workerData, config) {
2406
2447
  async function runWorker$1({ options, readable, writable, onTaskFinished }, config) {
2407
2448
  let codecStream;
2408
2449
  try {
2409
- if (!options.useCompressionStream) {
2410
- try {
2411
- await initModule(config);
2412
- } catch {
2413
- const ZlibStream = options.codecType.startsWith(CODEC_DEFLATE) ?
2414
- config.CompressionStreamZlib :
2415
- config.DecompressionStreamZlib;
2416
- if (!ZlibStream || ZlibStream.requiresModule) {
2417
- options.useCompressionStream = true;
2450
+ if (options.compressed && !options.format) {
2451
+ const deflate = options.codecType.startsWith(CODEC_DEFLATE);
2452
+ const ZlibStream = deflate ? config.CompressionStreamZlib : config.DecompressionStreamZlib;
2453
+ const NativeStream = deflate ? config.CompressionStream : config.DecompressionStream;
2454
+ if (!options.useCompressionStream) {
2455
+ try {
2456
+ await initModule(config);
2457
+ } catch {
2458
+ if (!ZlibStream || ZlibStream.requiresModule) {
2459
+ options.useCompressionStream = true;
2460
+ }
2461
+ }
2462
+ } else if (ZlibStream && ZlibStream.requiresModule && !supportsDeflateRaw(NativeStream)) {
2463
+ try {
2464
+ await initModule(config);
2465
+ } catch {
2466
+ // ignored
2418
2467
  }
2419
2468
  }
2420
2469
  }
@@ -2483,6 +2532,10 @@ async function runWebWorker(workerData, config) {
2483
2532
  writer: writable.getWriter()
2484
2533
  });
2485
2534
  }
2535
+ const { workerStartupTimeout } = config;
2536
+ if (!workerData.workerAlive && Number.isFinite(workerStartupTimeout) && workerStartupTimeout >= 0) {
2537
+ workerData.startupTimeout = setTimeout(() => onStartupTimeout(workerData), workerStartupTimeout);
2538
+ }
2486
2539
  try {
2487
2540
  const resultValue = await result;
2488
2541
  await closeWritable();
@@ -2595,28 +2648,68 @@ function getWebWorker(url, baseURI, workerData, isModuleType, useBlobURI = true)
2595
2648
  } else {
2596
2649
  worker = new Worker(webWorkerURI, webWorkerOptions);
2597
2650
  }
2598
- worker.addEventListener(MESSAGE_EVENT_TYPE, event => onMessage(event, workerData));
2651
+ worker.addEventListener(MESSAGE_EVENT_TYPE, event => {
2652
+ workerData.workerAlive = true;
2653
+ clearStartupTimeout(workerData);
2654
+ onMessage(event, workerData);
2655
+ });
2599
2656
  worker.addEventListener(ERROR_EVENT_TYPE, event => onWorkerError(event, workerData));
2600
2657
  worker.addEventListener(MESSAGE_ERROR_EVENT_TYPE, event => onWorkerError(event, workerData));
2601
2658
  return worker;
2602
2659
  }
2603
2660
 
2661
+ function onStartupTimeout(workerData) {
2662
+ workerData.startupTimeout = null;
2663
+ if (workerData.workerAlive) {
2664
+ return;
2665
+ }
2666
+ const { rejectResult, writer } = workerData;
2667
+ terminateWorker$1(workerData);
2668
+ workerData.worker = null;
2669
+ if (rejectResult) {
2670
+ const error = new Error(ERR_WORKER_STARTUP_TIMEOUT);
2671
+ error.workerStartupFailed = true;
2672
+ rejectResult(error);
2673
+ if (writer) {
2674
+ writer.releaseLock();
2675
+ }
2676
+ }
2677
+ }
2678
+
2679
+ function clearStartupTimeout(workerData) {
2680
+ const { startupTimeout } = workerData;
2681
+ if (startupTimeout) {
2682
+ clearTimeout(startupTimeout);
2683
+ workerData.startupTimeout = null;
2684
+ }
2685
+ }
2686
+
2604
2687
  function onWorkerError(event, workerData) {
2605
2688
  if (event.preventDefault) {
2606
2689
  event.preventDefault();
2607
2690
  }
2608
- const { rejectResult, writer, onTaskFinished } = workerData;
2691
+ clearStartupTimeout(workerData);
2692
+ const { workerAlive, rejectResult, writer, onTaskFinished } = workerData;
2609
2693
  terminateWorker$1(workerData);
2694
+ if (!workerAlive) {
2695
+ workerData.worker = null;
2696
+ }
2610
2697
  if (rejectResult) {
2611
- rejectResult(event.error || new Error(event.message || ERROR_EVENT_TYPE));
2698
+ let error = event.error || new Error(event.message || ERROR_EVENT_TYPE);
2699
+ if (!workerAlive) {
2700
+ error = Object.assign(new Error(error.message || ERROR_EVENT_TYPE), { workerStartupFailed: true });
2701
+ }
2702
+ rejectResult(error);
2612
2703
  if (writer) {
2613
2704
  writer.releaseLock();
2614
2705
  }
2615
- onTaskFinished();
2706
+ if (workerAlive) {
2707
+ onTaskFinished();
2708
+ }
2616
2709
  }
2617
2710
  }
2618
2711
 
2619
- function sendMessage(message, { worker, writer, transferStreams }) {
2712
+ function sendMessage(message, { worker, writer, transferStreams, workerAlive }) {
2620
2713
  try {
2621
2714
  const { value, readable, writable } = message;
2622
2715
  const transferables = [];
@@ -2624,7 +2717,7 @@ function sendMessage(message, { worker, writer, transferStreams }) {
2624
2717
  message.value = toExactUint8Array(value);
2625
2718
  transferables.push(message.value.buffer);
2626
2719
  }
2627
- if (transferStreams && transferStreamsSupported) {
2720
+ if (transferStreams && transferStreamsSupported && workerAlive) {
2628
2721
  if (readable) {
2629
2722
  transferables.push(readable);
2630
2723
  }
@@ -2862,6 +2955,7 @@ async function terminateWorkers() {
2862
2955
  clearTerminateTimeout(workerData);
2863
2956
  return workerData.terminate();
2864
2957
  }));
2958
+ resetWebWorkerSupport();
2865
2959
  }
2866
2960
 
2867
2961
  /*
@@ -3638,7 +3732,7 @@ class SplitDataReader extends Reader {
3638
3732
 
3639
3733
  getDiskOffset(diskNumber) {
3640
3734
  const { diskOffsets, size } = this;
3641
- const diskOffset = diskOffsets.at(diskNumber);
3735
+ const diskOffset = diskOffsets[diskNumber];
3642
3736
  return diskOffset === UNDEFINED_VALUE ? size : diskOffset;
3643
3737
  }
3644
3738
 
@@ -4145,6 +4239,7 @@ const ERR_UNSUPPORTED_COMPRESSION$1 = "Compression method not supported";
4145
4239
  const ERR_SPLIT_ZIP_FILE = "Split zip file";
4146
4240
  const ERR_OVERLAPPING_ENTRY = "Overlapping entry found";
4147
4241
  const ERR_AMBIGUOUS_ARCHIVE = "Ambiguous archive";
4242
+ const ERR_ENCRYPTED_CENTRAL_DIRECTORY = "Encrypted central directory is not supported";
4148
4243
  const CHARSET_UTF8 = "utf-8";
4149
4244
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
4150
4245
  const CHARSET_CP437 = "cp437";
@@ -4222,6 +4317,7 @@ class ZipReader {
4222
4317
  let prependedDataLength = 0;
4223
4318
  let startOffset;
4224
4319
  let zip64EndOfDirectory;
4320
+ let zip64EndOfDirectoryVersion2;
4225
4321
  const requiresZip64 = directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS;
4226
4322
  if (directoryDataOffset != MAX_32_BITS && diskNumber != MAX_16_BITS) {
4227
4323
  directoryDataOffset += getDiskOffset$1(reader, diskNumber);
@@ -4251,6 +4347,7 @@ class ZipReader {
4251
4347
  throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
4252
4348
  }
4253
4349
  zip64EndOfDirectory = true;
4350
+ zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
4254
4351
  if (lastDiskNumber == MAX_16_BITS) {
4255
4352
  lastDiskNumber = getUint32(endOfDirectoryView, 16);
4256
4353
  } else if (checkAmbiguity && lastDiskNumber != getUint32(endOfDirectoryView, 16)) {
@@ -4330,6 +4427,9 @@ class ZipReader {
4330
4427
  for (let indexFile = 0; indexFile < filesLength; indexFile++) {
4331
4428
  const fileEntry = new ZipEntry$1(reader, config, zipReader.options);
4332
4429
  if (offset + CENTRAL_FILE_HEADER_LENGTH > directoryArray.length || getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE) {
4430
+ if (indexFile == 0 && (zip64EndOfDirectoryVersion2 || detectEncryptedCentralDirectory(directoryView))) {
4431
+ throw new Error(ERR_ENCRYPTED_CENTRAL_DIRECTORY);
4432
+ }
4333
4433
  throw new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);
4334
4434
  }
4335
4435
  readCommonHeader(fileEntry, directoryView, offset + 6);
@@ -4597,6 +4697,9 @@ let ZipEntry$1 = class ZipEntry {
4597
4697
  fileEntry.zipCrypto = zipCrypto;
4598
4698
  }
4599
4699
  if (encrypted) {
4700
+ if ((localDirectory.rawBitFlag & BITFLAG_STRONG_ENCRYPTION) == BITFLAG_STRONG_ENCRYPTION) {
4701
+ throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
4702
+ }
4600
4703
  if (!zipCrypto && (extraFieldAES.strength < 1 || extraFieldAES.strength > 3)) {
4601
4704
  throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
4602
4705
  } else if (!password && !rawPassword) {
@@ -4690,6 +4793,16 @@ let ZipEntry$1 = class ZipEntry {
4690
4793
  }
4691
4794
  };
4692
4795
 
4796
+ function detectEncryptedCentralDirectory(directoryView) {
4797
+ const maxOffset = Math.min(directoryView.byteLength, 1024) - 3;
4798
+ for (let offset = 0; offset < maxOffset; offset++) {
4799
+ if (getUint32(directoryView, offset) == ARCHIVE_EXTRA_DATA_SIGNATURE) {
4800
+ return true;
4801
+ }
4802
+ }
4803
+ return false;
4804
+ }
4805
+
4693
4806
  function readCommonHeader(directory, dataView, offset) {
4694
4807
  const rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);
4695
4808
  const encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;
@@ -5204,6 +5317,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
5204
5317
  ERR_BAD_FORMAT: ERR_BAD_FORMAT,
5205
5318
  ERR_CENTRAL_DIRECTORY_NOT_FOUND: ERR_CENTRAL_DIRECTORY_NOT_FOUND,
5206
5319
  ERR_ENCRYPTED: ERR_ENCRYPTED,
5320
+ ERR_ENCRYPTED_CENTRAL_DIRECTORY: ERR_ENCRYPTED_CENTRAL_DIRECTORY,
5207
5321
  ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5208
5322
  ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5209
5323
  ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
@@ -5616,7 +5730,11 @@ function resolveAttributes(zipWriter, name, options) {
5616
5730
  if (versionMadeBy > MAX_16_BITS) {
5617
5731
  throw new Error(ERR_INVALID_VERSION);
5618
5732
  }
5619
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
5733
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES);
5734
+ const externalFileAttributesProvided = externalFileAttributes !== UNDEFINED_VALUE;
5735
+ if (!externalFileAttributesProvided) {
5736
+ externalFileAttributes = 0;
5737
+ }
5620
5738
  if (!options[PROPERTY_NAME_DIRECTORY] && name.endsWith(DIRECTORY_SIGNATURE)) {
5621
5739
  options[PROPERTY_NAME_DIRECTORY] = true;
5622
5740
  }
@@ -5625,13 +5743,13 @@ function resolveAttributes(zipWriter, name, options) {
5625
5743
  if (!name.endsWith(DIRECTORY_SIGNATURE)) {
5626
5744
  name += DIRECTORY_SIGNATURE;
5627
5745
  }
5628
- if (externalFileAttributes === 0) {
5746
+ if (!externalFileAttributesProvided) {
5629
5747
  externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
5630
5748
  if (!msDosCompatible) {
5631
5749
  externalFileAttributes |= (FILE_ATTR_UNIX_TYPE_DIR | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
5632
5750
  }
5633
5751
  }
5634
- } else if (!msDosCompatible && externalFileAttributes === 0) {
5752
+ } else if (!msDosCompatible && !externalFileAttributesProvided) {
5635
5753
  if (executable) {
5636
5754
  externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
5637
5755
  } else {
@@ -5640,6 +5758,7 @@ function resolveAttributes(zipWriter, name, options) {
5640
5758
  }
5641
5759
  let unixExternalUpper;
5642
5760
  if (!msDosCompatible) {
5761
+ const unixModeProvided = unixMode !== UNDEFINED_VALUE || Boolean(setuid || setgid || sticky);
5643
5762
  unixExternalUpper = (externalFileAttributes >> 16) & MAX_16_BITS;
5644
5763
  unixMode = unixMode === UNDEFINED_VALUE ? unixExternalUpper : (unixMode & MAX_16_BITS);
5645
5764
  if (setuid) {
@@ -5657,10 +5776,12 @@ function resolveAttributes(zipWriter, name, options) {
5657
5776
  } else {
5658
5777
  sticky = Boolean(unixMode & FILE_ATTR_UNIX_STICKY_MASK);
5659
5778
  }
5660
- if (directory) {
5661
- unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
5779
+ if (!externalFileAttributesProvided || unixModeProvided) {
5780
+ if (directory) {
5781
+ unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
5782
+ }
5783
+ externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_16_BITS);
5662
5784
  }
5663
- externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_8_BITS);
5664
5785
  }
5665
5786
  ({ msdosAttributesRaw, msdosAttributes } = normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes));
5666
5787
  if (hasMsDosProvided) {
@@ -6383,6 +6504,7 @@ function getHeaderInfo(options) {
6383
6504
  if (extraFieldLength > MAX_16_BITS) {
6384
6505
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6385
6506
  }
6507
+ const dosLastModDate = new Date(Math.ceil(lastModDate.getTime() / 2000) * 2000);
6386
6508
  const {
6387
6509
  headerArray,
6388
6510
  headerView,
@@ -6392,7 +6514,7 @@ function getHeaderInfo(options) {
6392
6514
  bitFlag: getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod),
6393
6515
  compressionMethod,
6394
6516
  uncompressedSize,
6395
- lastModDate: lastModDate < MIN_DATE ? MIN_DATE : lastModDate > MAX_DATE ? MAX_DATE : lastModDate,
6517
+ lastModDate: dosLastModDate < MIN_DATE ? MIN_DATE : dosLastModDate > MAX_DATE ? MAX_DATE : dosLastModDate,
6396
6518
  rawFilename,
6397
6519
  zip64CompressedSize,
6398
6520
  zip64UncompressedSize,
@@ -10201,7 +10323,7 @@ function getMimeTypes() {
10201
10323
  */
10202
10324
 
10203
10325
 
10204
- N(setDefaultConfiguration);
10326
+ l(setDefaultConfiguration);
10205
10327
 
10206
10328
  exports.BlobReader = BlobReader;
10207
10329
  exports.BlobWriter = BlobWriter;
@@ -10212,6 +10334,7 @@ exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
10212
10334
  exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
10213
10335
  exports.ERR_DUPLICATED_NAME = ERR_DUPLICATED_NAME;
10214
10336
  exports.ERR_ENCRYPTED = ERR_ENCRYPTED;
10337
+ exports.ERR_ENCRYPTED_CENTRAL_DIRECTORY = ERR_ENCRYPTED_CENTRAL_DIRECTORY;
10215
10338
  exports.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND;
10216
10339
  exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
10217
10340
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;