@zip.js/zip.js 2.8.43 → 2.8.45

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.
Files changed (56) hide show
  1. package/README.md +0 -37
  2. package/deno.json +21 -1
  3. package/dist/zip-core-external.js +194 -159
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +194 -131
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +246 -167
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +244 -139
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +267 -1761
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +269 -1735
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +268 -1734
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +196 -133
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +196 -133
  20. package/dist/zip-native.min.js +1 -1
  21. package/dist/zip-web-worker-native.js +1 -1
  22. package/dist/zip-web-worker.js +1 -1
  23. package/dist/zip.js +195 -132
  24. package/dist/zip.min.js +1 -1
  25. package/eslint.config.mjs +31 -2
  26. package/index-native.cjs +269 -1735
  27. package/index-native.min.js +1 -1
  28. package/index.cjs +268 -1734
  29. package/index.d.cts +129 -8
  30. package/index.d.ts +129 -8
  31. package/index.min.js +1 -1
  32. package/lib/core/codec-pool.js +6 -2
  33. package/lib/core/codec-worker.js +2 -2
  34. package/lib/core/constants.js +4 -0
  35. package/lib/core/options.js +6 -0
  36. package/lib/core/streams/aes-crypto-stream.js +18 -21
  37. package/lib/core/streams/codec-stream.js +6 -2
  38. package/lib/core/streams/common-crypto.js +2 -0
  39. package/lib/core/streams/zip-entry-stream.js +16 -17
  40. package/lib/core/util/mime-type-data.js +3 -0
  41. package/lib/core/util/mime-type.js +23 -1596
  42. package/lib/core/web-worker-base.js +2 -2
  43. package/lib/core/web-worker-inline-native.js +1 -1
  44. package/lib/core/web-worker-inline-wasm.js +1 -1
  45. package/lib/core/web-worker-wasm.js +4 -8
  46. package/lib/core/zip-entry.js +11 -1
  47. package/lib/core/zip-fs.js +62 -5
  48. package/lib/core/zip-reader.js +80 -43
  49. package/lib/core/zip-writer.js +68 -45
  50. package/lib/zip-core-external.js +2 -0
  51. package/lib/zip-core-reader.js +2 -0
  52. package/lib/zip-fs-core-external.js +2 -0
  53. package/lib/zip-fs-external.js +2 -0
  54. package/lib/zip-mime-types.js +2 -0
  55. package/package.json +9 -3
  56. package/worker-message-property-names.js +1 -1
package/index-native.cjs CHANGED
@@ -65,6 +65,8 @@ const EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
65
65
  const EXTRAFIELD_TYPE_USDZ = 0x1986;
66
66
  const EXTRAFIELD_TYPE_INFOZIP = 0x7875;
67
67
  const EXTRAFIELD_TYPE_UNIX = 0x7855;
68
+ const EXTRAFIELD_TYPE_UNIX_TYPE1 = 0x5855;
69
+ const EXTRAFIELD_TYPE_PKWARE_UNIX = 0x000d;
68
70
 
69
71
  const BITFLAG_ENCRYPTED = 0b1;
70
72
  const BITFLAG_LEVEL = 0b0110;
@@ -218,7 +220,7 @@ function resetConfiguration() {
218
220
  Object.assign(config, DEFAULT_CONFIGURATION);
219
221
  }
220
222
 
221
- 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],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],e=[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],f=[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],i=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Uint8Array(288);l.fill(8,0,144),l.fill(9,144,256),l.fill(7,256,280),l.fill(8,280,288);const o=new Uint8Array(30).fill(5);function h(r){const n=new Uint16Array(16);for(const e of r)n[e]++;n[0]=0;const e=new Uint16Array(17);for(let r=1;15>=r;r++)e[r+1]=e[r]+n[r];const f=new Uint16Array(r.length);for(let n=0;n<r.length;n++)r[n]&&(f[e[r[n]]++]=n);return {l:n,symbols:f}}const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function q$1(q){q({workerURI:q=>{const s="text/javascript",w=(t=>{let q=0,s=0,w=0,U=new Uint8Array(1024),y=0,c=0;for(;!c;){c=X(1);const r=X(2);if(0==r)j();else if(1==r)x(h(l),h(o));else {if(2!=r)throw Error("invalid deflate block type");x(...M());}}return U.subarray(0,y);function u(){if(q>=t.length)throw Error("unexpected end of deflate data");return t[q++]}function X(r){for(;r>w;)s|=u()<<w,w+=8;const n=s&(1<<r)-1;return s>>>=r,w-=r,n}function j(){s=0,w=0;const r=u()|u()<<8;q+=2,W(y+r);for(let n=0;r>n;n++)U[y++]=u();}function x(i,l){let o=z(i);for(;256!=o;){if(256>o)W(y+1),U[y++]=o;else {const i=o-257,h=r[i]+X(n[i]),t=z(l),q=e[t]+X(f[t]);W(y+h);const s=y-q;for(let r=0;h>r;r++)U[y++]=U[s+r];}o=z(i);}}function M(){const r=X(5)+257,n=X(5)+1,e=X(4)+4,f=new Uint8Array(19);for(let r=0;e>r;r++)f[i[r]]=X(3);const l=h(f),o=new Uint8Array(r+n);let t=0;for(;t<o.length;){const r=z(l);if(16>r)o[t++]=r;else if(16==r){const r=o[t-1];let n=X(2)+3;for(;n--;)o[t++]=r;}else t+=17==r?X(3)+3:X(7)+11;}return [h(o.subarray(0,r)),h(o.subarray(r))]}function z(r){const{l:n,symbols:e}=r;let f=0,i=0,l=0;for(let r=1;15>=r;r++){f|=X(1);const o=n[r];if(o>f-i)return e[l+(f-i)];l+=o,i=i+o<<1,f<<=1;}throw Error("invalid huffman code")}function W(r){if(U.length<r){let n=2*U.length;for(;r>n;)n*=2;const e=new Uint8Array(n);e.set(U.subarray(0,y)),U=e;}}})((r=>{const n=(r=(r+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,e=[];for(let f=0;n>f;f+=4){const n=t.indexOf(r[f])<<18|t.indexOf(r[f+1])<<12|(63&t.indexOf(r[f+2]))<<6|63&t.indexOf(r[f+3]);e.push(n>>16&255),"="!==r[f+2]&&e.push(n>>8&255),"="!==r[f+3]&&e.push(255&n);}return new Uint8Array(e)})("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"));if(q){const r=new Blob([w],{type:s});return URL.createObjectURL(r)}return "data:"+s+";base64,"+(r=>{let n="";const e=r.length;let f=0;for(;e>f+2;f+=3){const e=r[f]<<16|r[f+1]<<8|r[f+2];n+=t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[63&e];}const i=e-f;if(1===i){const e=r[f]<<16;n+=t[e>>18&63]+t[e>>12&63]+"==";}else if(2===i){const e=r[f]<<16|r[f+1]<<8;n+=t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+"=";}return n})(w)}});}
223
+ const n=[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],i=[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],r=[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],s=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],o=new Uint8Array(288);o.fill(8,0,144),o.fill(9,144,256),o.fill(7,256,280),o.fill(8,280,288);const a=new Uint8Array(30).fill(5);function e(n){const i=new Uint16Array(16);for(const t of n)i[t]++;i[0]=0;const t=new Uint16Array(17);for(let n=1;15>=n;n++)t[n+1]=t[n]+i[n];const r=new Uint16Array(n.length);for(let i=0;i<n.length;i++)n[i]&&(r[t[n[i]]++]=i);return {o:i,symbols:r}}const f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function h(h){h({workerURI:h=>{const b="text/javascript",u=(f=>{let h=0,b=0,u=0,Z=new Uint8Array(1024),j=0,R=0;for(;!R;){R=C(1);const n=C(2);if(0==n)O();else if(1==n)Y(e(o),e(a));else {if(2!=n)throw Error("invalid deflate block type");Y(...m());}}return Z.subarray(0,j);function z(){if(h>=f.length)throw Error("unexpected end of deflate data");return f[h++]}function C(n){for(;n>u;)b|=z()<<u,u+=8;const i=b&(1<<n)-1;return b>>>=n,u-=n,i}function O(){b=0,u=0;const n=z()|z()<<8;h+=2,G(j+n);for(let i=0;n>i;i++)Z[j++]=z();}function Y(s,o){let a=v(s);for(;256!=a;){if(256>a)G(j+1),Z[j++]=a;else {const s=a-257,e=n[s]+C(i[s]),f=v(o),h=t[f]+C(r[f]);G(j+e);const b=j-h;for(let n=0;e>n;n++)Z[j++]=Z[b+n];}a=v(s);}}function m(){const n=C(5)+257,i=C(5)+1,t=C(4)+4,r=new Uint8Array(19);for(let n=0;t>n;n++)r[s[n]]=C(3);const o=e(r),a=new Uint8Array(n+i);let f=0;for(;f<a.length;){const n=v(o);if(16>n)a[f++]=n;else if(16==n){const n=a[f-1];let i=C(2)+3;for(;i--;)a[f++]=n;}else f+=17==n?C(3)+3:C(7)+11;}return [e(a.subarray(0,n)),e(a.subarray(n))]}function v(n){const{o:i,symbols:t}=n;let r=0,s=0,o=0;for(let n=1;15>=n;n++){r|=C(1);const a=i[n];if(a>r-s)return t[o+(r-s)];o+=a,s=s+a<<1,r<<=1;}throw Error("invalid huffman code")}function G(n){if(Z.length<n){let i=2*Z.length;for(;n>i;)i*=2;const t=new Uint8Array(i);t.set(Z.subarray(0,j)),Z=t;}}})((n=>{const i=(n=(n+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,t=[];for(let r=0;i>r;r+=4){const i=f.indexOf(n[r])<<18|f.indexOf(n[r+1])<<12|(63&f.indexOf(n[r+2]))<<6|63&f.indexOf(n[r+3]);t.push(i>>16&255),"="!==n[r+2]&&t.push(i>>8&255),"="!==n[r+3]&&t.push(255&i);}return new Uint8Array(t)})("zb1pc9u40ij8/f0VtmuOigibPCS1WKYMubInk3WyzKZSUrIEWrQlUAEhK46l89vf6ga4SFZmcs5znntvJSWTINZGo9HoDY7g/dujZCnHOs3kEef6ZiGy5GAiklSKRsP89UfzyZl5dASLhcM2zCkKOez2aJmLg1yrdKyPeuNM5vr2vlKjm1jAm/NLMdaxhtfL+blQsYRXIz2NFTxWKlNxCh9Tqbsmd0YvYce8JfTWjMxbDs+rlzG8Gi3iETwa6dGvqVjFM3irsnmai3gJH8RX/ViOs4lQ8QrG6mahs3gKiyzXr0Sejy5EPIEPaiTzJFPz91qJ0TxewDsxmozOZ8Im3MBvKtW1hDk8zOYLJfI8zaRNu4JHYnwn9XzDczFL4JpfZ+nkIIALfrSUBnyTI3jPK3jDNy7F6iCDSz4YDGHf/2EvyZQzE/pA8KAXtTt90ROuy24xSXOx9blrP2oeNvSZ7vf74afmSbcbnUTNbiumhN7lIBgOxJDrzf6ai1TNw163r3saW6NZPZD8cqC9EIv3LgeaqpH9fr/7iSqN2u2GHG4o7+AtPISvcB8+wmd4B8+H/LI3no3y/OCxqUwtxzpTjmC3eprmfsbFeu2Fm9FiIeQEk00fgrX53Ct6EKyFPxPyQk97mEPxoJcmjuzzbqMh/PNlkghV9Dcl8M6cIh2Ef36jxZskyYUGySDj0usSCHtZn6uecnm3KCy4/pT6F0IT5jkKDgMGkteT3BYm9jR/TmMXw0/vBgLh0Yja7eGnz/QSdszbR3qLWubtvoXWp68DWZV4SC9Fibf0ZktsaLp6so+9xCnWBPi3VI+jP4mBGrJhzwJTby6EdtitEnqp5L9M6mZjZuCPA/FVCznJDxZbc2FgLiyoNQHvcS9fLoRybnWxZBwBkt1qv5wpkL6QX5ZiidRhA8lsmU+dCmUIw50W65m5kMUc+bnQZok7AWif+stA+Nej2VJwudkwEBw7vtkUC+bglSNA71Zd4IOr7QPrmWEfSGzD9BAfNBRZGciq0keIbUWJv8AX8/LSVGCw/OADx86MR9p0LE2cgHNeNLNe41vZLduG8G0RzUqsFoOijBcOQfEP/syR5TiaEedcndUKxh/8qaNBQbCWIPx8lo6FE0BVCWMbmOPAisksV43toy66E9Q6gYu7avSeo72QuaYvG7gux9iM7hXVnZb1iLIeR/CqS8ofi3Tm6H82I8ZY0QlbRjd4MwTZDxoN3Wg4YiC9cMg/+O9xruilEYWt41a32Wl1+33thRAikmzgfYy9Acl4n6AjznTsyLNgrWN9etqMPMHcMDg5aYdhJzo+Pu7cEzCLBe8rX2VLxNt/bn1m63UzgqmpFBS7xdVmCDjCvtFwFB8MWU/3eTPqaY83I6b8BaK6RLIQ3IGrKmZLsJJIp5jvtJoK1y0rWYtBOuz3+xprw2cahe4VlKwodLaFKnEAGSFLWiKLrZCA6GaNZgjazfrN6EzGyl9kC4cRDNVmA6/5LaJ0Ht9e1lHlg4+Y888uFCtMM0Nrt8ah+ykNoNlI12tHYZ//2RoykIN0yBURLlCnp7xbrsYNvK03MxhSrRKQhmPNCEVZQUcidLg6Pe2uxUAOodn4l1yvHW3GpxiWq5ZIQzYauhp6957TbEgGijHQm80GHnAifrubT9EZJDQ97Z/PsvHV+/Sb4O0wAu0/5IPwuBm1u63wpAmtIGpGzWYrPIao3Yma3WYYRBAdh8fNZve4C82o224eH7ejYAjav88HYTvstoMgap1A2G2fHB+3mydNiFpBcNI+OQ660GyetFudk+NuNARx5mj/Ixf+x2LxMND+Zy78z/WEd1z471isfSWQqLGN/VttWziUktZghQ+r8sL/zAdDEP47HoDYLBeTkRZ3AHGE3Jy8qBhCgauTv/af+ziFFd3C/n0oyZL/GQROi/bfQYa/XLkGmXB1ZP2TIDgOT06iduu4FZychExPVbYiops6Rw9HUmb6YDrKpwfzTIkDPR3Jg+hTu3ngHYQH56nOj4qWE8LMHGkk4tDYYpDhZmrT6CrP2Xpt1N68kOG2j2xPvQzT/h9O4ufL8xGym07YuTeGsHPPGbshYwzGLg9rO8zCEjrMhrj2ancqLKfmf64Irf+xp2twgwGiLNK2Idsah93Yol7YbljWzqB4YPIVa8FPZhnis//un63opHXSOY5OOoj5NvcaUaZX1Ndjwv/D0fWuM1ZhjMUnkJtHFTksvvbDkzPRb+JPG3+OT84MlYz1J/lJxboh17qh1rKhain/0g21+WD2j4L0n56KNfIwSKs3fzi1bR2hBimX/kfIuHC6AdvicsOCU82IjUVmFD8lPB0EQ8h5OgiHMObpIBrCiKeD5hBmPB20tlnp4xMz8y67xQrXa4eqk/4HJ4RsILzm8BP+6Zo/Ycv+7QxL9NeUuw0Jc6WPsMphDCPmzlysypX+/UE5M/+MAjZcB70ZH8GIj2FMZZsB5AxynkDC9Qb7T4Nwk3UAOAwai5vTWzSkIbljemsOaWTuiN5aQxqgO1sHmw0847fpfJEp/ULc4JaHS+WZ/9p5TQxMbpYwPKgmFxloLtfrULQg6Kv1OujL7bWZyuvRLJ0cLEZqNM8PdHawOL+aJFG5IDMeuo7q99vs9DQy82HAAUubY0VLlk5wD4i7cjIGU8uhr8w6nvCCG1nwDwbDedVrzWDJw56Trdch6096S5w8zJTwnAtfSDrtOYvauloOccHysCf7497Ynm7qmXMGIx70Rqd5sThGmGswGn7i+WBkcAbJS9FqozE+TYq8WOMUeUtzIJhAMhgPGUxc3tpYPF9VnNA/u2wDr+O/3YcA6eoz/gCUPRYOe9r/lQ8QVBLod1jyBdr/dRAMK+r1z2bUK7bQfkpk26EizC+Jvf/KYdWa0siU2IOewnOcHvKT4KQdRa1u55MY6CGoQUjJYbt10m53ulGX0nu2cVsxFkaa8+sgrKWFlPYbTbR0TInvbFrCZhP+M0eYjCD8P/lhWNuo6CzzJz8MgJ5+q4a1maQXIt+tFZD2/oZDtvxMUXs4LEGiCST7SGCBJ4JWiWl7e2nYHAeZPBjNlBhNbg5MrZOD6Xw0PhiPZjMxOTwqq6dKyk6bUdieC4asyi/Frjs95BeNRvGCR6R3IznJ5r/iESnn/D38yo+el0szz1eZmhzBb1Vinl7IkV4qcQR/8t/gBT/6li4uc290nintjadifOWVBXvlkeilHe8vBTN7p3Hc07d3b5K0HNx/+/wAd/F8uUAKJCZHxVHpCw878ITfytFcxEdvH7x49CQ62sAbrv1Rjv10bnHrj22GZ6/uPzzabOAJg59rWVIt1Aj7mMehaEK9xPtn973QFvmdD44mQqXX4gGyDUP4iQ+6EEYQdobwlA/CDkQtaCLXJXgYgBZ8EAD9G4IU9QkAJTjKwqbIEeiZgNS82yxKYJ5MFHQKEvFDnOYLPtiR+QxhNwG5yBe4Iun/eq39l06d96JvrSFxXC9w18v4lnDEkmAeIvvVOuQ8azQ65k8X/+yn8SORH1yJm4M8/SaOCj7jPh/k1akOaSp2OOFZr3Uvc6NuP+klhVhK8HyQ4EnSSf6Rcc6D9brLqVXz3mJElqQViAxPT6PWJ3qzko/T07BjErr2vftJWhEL2DqpCoFfTC2fRlgNjPjo9DT8FHWb95xRv3+MDFs+SIbUpWz4SWxJvRJkACDxvGp68kGzIc6SOPFaw94YWYJWnyfrdauPR0yij3KgTceHn4gw0rvtOiZFNqlbpjQxBfuvh8NNnabUScITR0DANhPx3a8h27zcoW6EA6CL53BIp0eDE/gnRW4/K85aFiG+I1PMBk6KAxYlBAVB8BOmlWVmPOFB71AOZsPe7BPP1+sQ8WCQDHGDJATIePIpwUqS09MIf5r40+plPEOZFQIi+3RyAlgHz0ANsiGfEa+GbBtycLPh0PR4ycNOt9UMgpN7o0+ddrt5fG/8KWof38s/2Q/dezNYcUxKB9mwSs3KHuO5stWXdKDEkyS2uuIrQrsVStFAY2o25Eu+pNQlpm7q5du18hx/akcyTNL1pM2TUlSCq66UOn13udHuXSy4Ohvs36ftl0tbxT9bXoTTWdKqpJh5jaxvgsgw5gniwYgnyAHPeIIc8JInyAHjcFYwhQksuBgEw08SS9yg6OesGYf4Hg5hzsUgwudoCFf0LYyb+N4cwjlvbaGPssiz4vlgYZbFp/HgppJijgbzUr45o0VwhVWdD2HKc8xoi8zrRa52iiyoiBsOYcJzzGoLXdULLXYK3ZhCNIgcs9pCi3qhm51Cc1MIR+ryFiz4Cm74FOZ8sjXsVrlm9Fmz4YlYDPmyAIDBoRoQiKAtK0Ag2VrWYOG6Q1jxBSz4DdzwOcz5FVzxVcExZJsN5Hu3FcQyQoA3XBhO4meuzcPvXJdcVpFAGWq8VJ3A/GS4mzdgK/qdbZ5aNgA7+i8kBlGLMeHyEAfYE7NcFGqIYqRIfewgQXGi2L2o3Ua52JmjeQDmRZ6hsMe+qDPFg9h1FYtdV+KPBoHSCZdrBBw+yNPTLv5VBVstNoJGgCI3BzHZDO4pPTPaYPD8VCaGQ8Y2P1mZ4a2RZqWJc+ioSj5rmZ1BxVyj8EJvi+8Uib14ywJVCJRBmPyqdq6QrKcH6fATV0SfB6kb0ktoXiJ6icxLk16aw2JsH/xrR0PKNhsYC/7Mf03LdmTYjrTOevjlOQ+Zwdm+HBUXxPl7q4JZiu9oAG4LXjAWoEart8WbBjsuq+ZCcMUSiH8sMr2Rs5tYmbT7Sz0VUqdjYtUeZhMRJ/ww2LBbq03I9UghYk4FYR2YednAKL+R44O6rmFXLlB1MYG86EoOWsRjIO47Hm247CVnzmg1SrVDNZZHXd6/Lc6r9PlgIey3uXAUBPDTQOORMeH0Tm8kuxoEw0Mir+t1NgjpORxuEfRfUSsqIYcE6xJUVz50I5RXc0qx76DOtC9Q/+mYki8Yi8cOY7Hp0sii02xHv+EJ4dVf2D++oEyn0L1MhCNBwAwCEAL1UiU4jUamYEFvpYg1KBFLQAVOKi9iZSGXbQx3ivKARkOzW9OhQvmWcwskVesEjE1qPc3gK/+GFRXn6optORdOJiBnPVmdgsoVpGtpI35FWVVxhJhhUyZNFkcmxmjAzHILRTdOhTgL42CLZgthifZyzWcDgVuBGGIfl41GsjWXf7KeKAE7wkMZK5Rnq//O2vnvLgVVLYUUl0JiJzTHpWAEpN966swZ8zuLoloSir90DMaZRVDsPq8cBTuLRTGD7CkoBkmFurmdx5FF3XEhwazQ1j4g7o5IKzcGEmvvoPEIirLwn2Byuh+T055hTwkz1R3MLJHv3OLdFo5CZvFRFPiY8DvIWKniRB2HXjkZJMwiUnnMniI8JShISaFqjrgCbs0YEIRLR/O+8LXgmkE53TcII8Vqk+6FJQi+bVjVwqScMUghqcEtR7iNy0KjDRe9kQVIo+Fo/soZgS5FnbNyl/QMDJdWY+MQXvI+SUcaDd0XO1CVXPTwsGcVSaT2dSQedMqdHDFJuc7Mm/3jC0MZX9CbeV/6fNlbuvzLLuGYC0fDEpbuF5RhNRrjO1Qk5TX5Si9Zr8ssaaEKNvOWMli6quqJb8HBTRso/7F4V8BzQZA3sJR+MSFcLmezkkju2XcgtSA6HIlCpPKs2ryRx9DqpmDHDK7Wd3fnSI1WR1TXYYicwXikx9Myv+CHIWzXt9kwJ4AU3kAAvyOR3rvwsUezWo8ekI48H800/OxXohaQ+/tX8Ra2yu1+zWy/vl8r9rKS7WCOONnAzwxy6N5zontPB8rsoCVBYTCr8GAEAWAWQppaKqaBKc0YrDgl2vdSClc0K+H2StzkMf7GM0jRiKiY2F+FShPLxcSrDUhBqzIXRCgT4cxQQJmobO5olKkr830snCXbMFhVC/FGbGs/OOfXZ46wC8dwayvOLypBhBmwI/hSinw8QtpLZk0f3z1HU6RMColCglKnzrbOu/JU1/WodEYV/ng6UsiN3dc16wJt8Z/GtGK+aQZlkQzNvXQ1iLkoGOhyxZRaMpr+MufV9nCFf4k4WX4+3/2Mwn27wV7/+xvs3unay57e3Xbf72y7f7Hh0m5SLvr1Wvq1blQT9412sAoyAYQRY9uF+VZZoh8QHHJHD0I8hPv7RsR22M0emVmUWsqIbfYxltXOavqFm1DJzFz8t2D9P4MrHccg/Rv4/iX0SpVcwcMQzAmcfD84UaryHfshULRJXCLANEP+JOVhtMED78FuKfwW9GoFBMN9pQK7Ytub/vvvbPolxOUWxNV+iKcbBo6pqOLgUj5oBu1WeNI96UD7JDxuh0HrBLrH3aAbhScRMbv1NonwpZAZsvXYSUnlklSv0RDpmGJ1XZE+LTgnUhm9xfEoOigRgLazyjtZZZ0KaWIkzTAqEH0T++y89B1Ch4YjqiJ0aBcnB2rIHyL1+qRxFzBN1gl/zfLr8r/cjv5OO29tOzOhB0CEGAHfE34mCjM6gl8xi/+iL2QR15P8vnCUn86XM+e+cKT7FdkYBmGzdXzc7oZN5oa0CVVVGavBYaWa/Rd9NvWZtvkgBQnZsOrjwy0rkGht8g2i0h7sa9kNDeEnzVBEWpuzr3WBEgl+qm/3699KAwXMYtr7aPjDUaWA+lwv8dH0vWS734lKwbWUhQWumBgBKjwX/Dd4LPjRRCSzkRYe8U5/CH508S1dHMErwQfNEMLmCXSHViLy6HuEUMDteLqUpFqN9V0j4D9n6Xks9xgH17aajZ2J26qrcVqcCsUkzmCZi7s1JPAtXRi1WpwDll1q8VCNm1E8hpm4FrN4BHaMnVa8BKSuI41Wz1Vdr4SeZpN4uuECJhW1XcANzFEsij30lTV+tghzzleNxmfhrBhc83GjkTYah8tG4/C80XAOs/U6Z43GoXOYrNeHykhHGo3DfL0+HK/X1+u1s6DZ/AOu+G/CuYIFQ4qYJs45u+J/Ysovwjn37wwYVnBbDKsO832jYZbYpIlzzebU3gcBtnp8U84fyJDZLsxtdmRir/ivmJTsbWwDqmRjSyNk4n0NQ0bVWi7X7MZiY1vVZWumN2yTNRpOflZLvECsZrFzQ3Wt6FBpP9+gouqZcCZwBQ5S9BpMnYk/xmnn12dz8xQbq4mFMZYtLWovKotapKvFLv9B/LXBL2hUgRbkL2D7TH5To/+uaKXy56msm9TS3uJxCYfOFmMiKw7VrOdNQZbkrnQAq+j2eVYcSNCyyJH8leFbStOvzOtCbjuQgKw6UDtuyzr/lbNtfizxcgQ31Vylb+eiPLvWzJo/QsZZ2PnQdYiTfbjw6wSJDAnrmchevG7ZbCbo9Q9Snz3uBpb+7HNE2EeBKoqS1AhQbljlgrYYFBtBjVyt9pOoaY3+TAr6M9+zYq+Qp3mQ6iez0UV8DtlSL5aaRnWBkgdEw/fwDS53CRIKEBsNJzm7xGVySavo2q4i4zxBVudgP3/DaV1VEoM50bE54aZgl7hQL5H6CH8PwGC+De2/HcXuVMcXJV1CinGJhOYSptu11gC2S2zSxJms1xd4NLSsvoHM3xGgSyOF2ZblGeP9uhVAADN+GG5ZYy1L8U3OBYy53rDeyjcdIiq0YSDX67y0OjD2WouCzRe7x9UQ3SGIF34lcDUUC1LfPQHoLa+BHfneDO17bhwjdjDyhtUmSeVoNru5nTsFJ1A020Uu/BGKUdIttwJlmB5amvUvLRSkBLsdHI/kWMxoUGSJw2BSDHen76rm/TBySwUvyP7obNZo3Dgszp36IUDsq760N0LkFTBlgH8RSbERmLCKH7pxGA4bEp4L/SGdi2ypaYbG9qj3Dne7tmjWOLI5kq2ZGKkif0LylkvQcMEQaUSJLmgihQY+YjQRqjKEwqpvnFszN4vlbFZsiZLmRVodiqb16mxjskB3nLnxuCqxuT5rqVMycTUWbjLSo6PCtEj749EyF6jaNBN+S/tdrGCSSYHqCtnL0C1iluXCYbGoH7osvNEAEuuxsN/geeOSbcaNhvPe8imWeLw3OzCdWi/NJpwmzriiJmbTfb+96SJpGR0a+FVbQbh9WH8u7Kmbanpwh919Zs+E7FZiX4yR38K5pfWAhBxxybiQvVXZQih94wg4KsjkEdxeCB1jl2Vd+vtLKa9BQZ/YMbeuyNvBnOjbruFWHQ3EjoDn15pgmZU6Nd1oqDMVp+u1goRLvyR2Z0flI7Hj8WND2nJCpNwu42SXHB7q9fowXa8zztMSiXKLPpTbdpHWTF7r329bEqZC0CYOUplrxIUsObjZ9Vz5d1ZBHR2lQUe12VkPPbUXN+Vf4qZg/iJdiA9TlS0vpltSsz93jqvaX1knRew2Oixit0HtHYYV/SJWI8jJmaxX6EUk9fimV2C6lfAW40DI+TjGKr8dVu9cidHVpkjF/uDuSnBBfC/mckf6XPTClBM+mSOSCJA2tg2pBJC2/nUxC7mtcgporRH1LdaHXXcv8EyI9AVeCn5EIziCL9VB8cgeBp98nx2Td1gq1FmSMg6FpuMPNwuiSwa7k17m00aZ/5bqqfNFsLOEPxLxVupRKk3raLSQ8NfoQeFXDBIqQ3ChlJbRY0L/hDoDox2GCWbf2bGIHJfqnby2Z9U3qRrDW4qJFNymsuDW8g3ti8u7rRRkBpVAVUOytsFuDcstFUogasmHnF83GvWM/frnbar67o674a1hXcWGj3v1Adhk2B1I7w5VVXup6mhrTc62l+h4+3VZO3m9+S4m3XGDIieoYqWnd/wnrYI7tY4uPdFPe6xk9jQamWRceGmvkM31szPH6LpU/eiTGekkGszU0jHV5RmLiyKYKXVLbTpoP5+mCSo4C4qrPC5AbqSf5k9SScueNRqiz8P12hEcTfU6DO6cJCVkxmZfl85zyi1PgmRNxrISaVKnQkmUByESF99K1nVHescqcKLpvoHyAfowscINVFGjescZUaIyilTbOIFYyc+CR4b3NgoaObpOL0Y6U2SXXb7505GarEZKPMzkeKmUkOObRsP5WfC/zFJSLdPH3y1XAD8V7AF24akAgZLUHT2k1qV0AjLqosH/bGFsoxMYZzJJL9ACgE5RiW9OZ43GHpp6+FH401FOM4h+mFuQvb177PveeZPrXqXNkof8fWWIdMjfb7MfFe83EeODeTZZztD48aMwPrvwbzRrRMhmXEYHinJlClJgRw2JT+18fPecQX5X9EQe+3skUvm+c6LJvO8Aia0UnGyjcVi0zgj++w7Qhsmp69APC23sYWi8I/mDQvrZQ+9HaZHkQQEnyQqEl5RP03at6BBJm6Xl3pAvOAwKBS26VFSroVzTBLJyI9vdu/YALt4LIXiMlLrcqAleSCNe0Sw75MecpBfVtl2emX+swH5g0vDsFnk7TS+mv420UK9G6ioONzDjotwl1+vv83T2dLJElvF3C2RN4iepHSIE8REWOAJ7uHk+iYVGkY7mjtBuyP4h/Vf3f//8/v6Tx5+fv/7w+Onjd709p5e0ZBd79XMLpEjkLHuFFoCsh1b9Badnuj4vum4ZrkJQWT/80wg0F6z3UzkMdC4uRvFCgOmP+HdGYi2BFPUMDKyeCCdBGdtTQ7juIzP3MJNaZbOZUHbs5Ikyi1cb/lT0TCWzHU536xVreiNQ/91X/nz0FZGgEKNAp8WYgzI8UyRzMigbgIUS10LqhwjC+DAo3qlbMRoh2jFkda65ZGjrfMS0xjBM6kKrBZK6EpIvBSiRL2c6/vtym51Tcp3T02e69oqu3Y3GYeajbbiY1NbT3o4Xa0kZL6Jyp5B697ii7ZZAdKlUdmH1RfAFR3INshb7AHWxVfCDQ14EcaglnpntV7JYsiJ8wsQRMLCVDoseotDELHh86lVP1yNVV5rhQApBwUd5JbOVPCDl9hErxmPxNtaQ69H4ClX+aGqqgByCsjrkEyBRAu2HMOb/VtFND2WQYyuMMN5GuY9/ipUT54WoA4VGzi31Mx5v2GY0mTxG7HuZ5lpIoZwjm/EInFs8jMRiU221hE66th4l7NIMQbt9mjhHRJ3RRbvRIHYANOcvRCWu+N1sHJL1fkdTnZnQePYE4RR0yNCSrKiabbDW0fgK66yq+ams5qftathGc/5SNBpPiwNcDbctGhI0DNGkE+bRhub5thb2J9VbcX8yXQ/1k+g7sXpybWIIjbUNIjTSYDLP9IZfzLLz0ewDnsiWmvy8wmMIuxBAF47hBDoQBtCGMIQWuoM1IWxCBGELQgjbQ1hZ2ZRGx46pFS/Sy4Q49bo5aeE2M7GsrIAA41B04xbrFWkBhAaxF3eKh4ULwWK7fCuOTJGbsvlBACFgZ1vQAevGZvzXoNWFTgtOOhBGXQhPIgxMAM1uCzB+wXGnC2EQtSBsNzsQBa0uNIPjCFrBSQc6YasFXSwSRlG3C2EHi0Wt9nFnyGC+r/E2dOAYOxBQH1rUjQB7EnWpMwH2p93BLnUD6hXmw551AtO7qAXBsCbYvNJ1OZKJoZFaFsgaa24JbVJ9ZqwTUv0jYVpQCrVTvKbxUaDclBXVFURti/K52C88xgvtJLBlw6QL4VpwyCU6HPwP+sn8JJ3NMBAOaLcuZ7uuovjc5iJeaRjjzjDCnxn+LClxhY9T/JngD663I9BxAGkcwA0mzUVsHPVre8OFLu0SDiR6dWh7Frq9QrZgWUKGwTmKua6ROF3FAVxQI3EA70Vcr/B9dSypo/udwB48sj4Y5EoFKf5xw+31kfa3Ih5UXKrFS802uEq+6b/0i/kmCseYS1F4xrwVHN3kL79TsjTOwbwPy/JfiuJfBZfm6b7gyjx9FDzdbCq0flv33/tJDzwKMSD60dlJHHliuF4fHdVsL+w8mD14IfjbShjmSGbSjr7N0nOzAx4cudo9OnCOXOkesaNNachXWWNszSx6SAZlmJUCwNoCmGKshOuwIQEtR6rgFqpmwWHrE/5njD/zTrguRRArvn+03ykfOToyMGWK4FY1nP6st/xwyE1IQkoyg3ZDkxfrc+EK/7GoXLI/C3TQw6wpmDcX4yMU1Rdp0ZDjOnssXN6ElKde2KBqQfivxCBHsx33T+2GQ/8PdP1EReDgsXZSViY8Fuix96FmvvJuC5g0OhKy7uujGqLnEj1h/8rnaMhl2S/qi/yLFp/X0Uf458L7tQbsx3rL1KbTF2djORDDeIxOph3XuG3WbHv+qC3LB9o9BrPYQXEH/zIvhJSPtY1V4Wj3GQZ++uczjTbv4elp131QUgbf94lshG0GRCVei7gVwQOkCM8KGgO/iLgZHXeO4VckGb8h8fgTuZgXIk7hpaGMmXYwT5fBlzJBMniC7NfnknjaLG+w/p9NrV14h2+/489P+PMUfwSSO0k0T8foJYmPCf7k+DPGnxn+LPFnhT9T/LnBnyv8Ocefa/y5wJ/3+PNNU0cS7UT3XuCZCC510bUi5a0uuv+G3h9jdz7gz0ONxPk5Pn7F2u7jz0cdd+GzLoaCSc/x5zH+vDIDn2nniS42BebPRwvS9jm3f2Bdf1BO/Hmk4wC1Q4/KYtG9l9iJHy/6QVdFv/x7RV/r+AOqVx/Yv8/M33rAtv/ZhgAZf4RGa5n/h+YKMv+R5mkR1SZjewjfo9p+ua/XVc4PVU7aUr5pZzAkxduldsggd6WNly2r0a7XxYBI3h9rmBUOPUafaoY61nRk9X1fFFEnZtqpA7eKvmFEkxpjoMmBHrpuIc4xhUr7mqIkpPvqg2yLuocYqMx6qPLMlRi5Br1QgRy8s962kaaoG2kWewbG97CcDVp38nQgh65bwPzWHpfs8MWGVFeFTS3i0raBbNEgdjOrGsyqmAFykA3X6wA9ms1TTw1S3GbE2VfkvQSLAyiSdngBZXiBB5p34ZnmTfhF86jdhV81/wWpmRvCb/gIf2J6B15ojpuAG53AS82bAXzRPDyBJ5qbNQ1vNA/b8LPJ/bvmXgg/aT44kgJ11CnhwkjdHAFGyhKj+YGQkyM4OoKjJJ0Je06tPtpXPO+VL6nMl0mSjlMh9cFczDOqznCKZaajITzV/L12JpqBkPi00Ay0LOAcnrCeloOwM+QR4MPxkDfpoTvkx+ZMLflr7Rh7Dgtqu9673T34SEeTZp+bgDCIBrxb+xq2WujRu/X9pPY9and6EQZXqn0/rn/vBr2oe7xTf80XCN0oqMe2l83AdrLNGGSSv9KOlAwSelKSQV7zQiqIy7blrqhb7t4aPQra6p7h7jdQwzhEngNZg9QLe1kfcV7yjG2idte+RO0uqy1MZIrdcNszWPa5iYj3XSrnFuER0B3DNC6x8YSoHspk0j5PGo3Ezbywz1N2qzCYnrRa1k1dA3S3AS+smlC7TWTUhKtofBgWKOUV/aRWqmoA5cBzDU81g7Gs0zU79HYYUZTCquE6vJEjsUFKkR1SfXmGbccI4FpGRBRpgq6WREf1+8c9bZgY2Y/a7bOo3Y4lG9Ls1EJ3RO3jXjuMLAcbcAoDhn5rNiSYF9Y8fTbM+d9CkP/bGFET3N+goymrHa1Hsmb9UYay1Ot1+SwLC4jQorbhwAXuvyYOreGdi72lJ/tBr6TX/Ug0zyLRjGVPelz0Jtmt4srVg8x1hxiWjKeuWgeb1TSdCcfzBOupf2ATUQipfShcj1J09F8rNCoPiJTP5P9GSOQqGPInCoZsQyLP5H8SE9lM6EyWIZHxsRYT2dRqgyJfj9RgKWElYSphImEh4UbCXMKVHPKZrGbtHI1VgspqpxantZo3Qr/KT8Ei8vpfgvbaNHEcSTxIiu5tVXyDPkY3rm0BGBrRSCb0XwZGpogH3QLA6pOoYiCnNixyPcmGRVb8qgh682luYubYSBs35q0IwrEoAuqY14ksYiNPZT048kpuRUdeyr3hkc2CUxSBtIuZKD6y+oTRGFjhzOBUTgifLNJVEheJHF7YwTPZe3Hm0NFW+Au0FlzQge694AEa9LwXFHXauV/P0e/zLuXxeN094oJqpTLds7JKU0nQaNSr+Koxlh5VETaOt5utiVrK1U11hB1PnjmY1axhfFxjjEX/vWCwPQaKVuThl/Js/B5jbHhhh8XfrcNmqrvp0Jh2WclXW9wkHXU1HnVrRLfI+mgn66PvZ/2gt7N+0GVWauJn8xaC8H9C8/OnFEEEj9bCRwV6zelH7jgxIvJ+0xiZw/4178J/rj1vCA9N/nArZvRbeTc0punQqT3Zr9fFYLhNaTSQjz7laiDrfjdyWxhCbdMRSJ6emo21l56itAE18xg8GB/eGtP7byawiH3Cv5eaNRqp68IhZVHbnxiG/vxmnUFNuuQppKenPOwVX2pin6+yJvkgv2cM6/pNIJPuXwr/oYDcPN1HrYplBLCLBvqaP9EUHDm34ZOCQ54ZaCCyftMD18XcQz4m8cgldSBgMWV6pIt9J+pjrh5L+VahqD8+c90xasoGaTn/lzguav8n4XmQoGjWfyo8nmCmR7oIafZW8DHISu6Bdf4zYrhrhz3peYymJkPn55TnuL1JflkkgdrGGs/D4RohT+1VlT2zw3azgcK/ZT8dO+pT+quGZ/ZvbNOZi+FI5dB/pTmVfYVH4AJTcaZtN0Nmd1ocR59HrLfVk6K325yQmVMgE3EzsyOOkIFZOcFL8/QFVubhq4CpefqILkVmhpBDeKP7PKMTnfDf4hmuMMEZ2PX0WA/NpNJ+8Vi7Ye+JtohRIX7Gx4OxGSjmxuH30ZQs41OYuC4D+vhI8wxGfYrMbZvDSG48ANVH9yUn4cuB8lZDDK86LmH+k3B5fs/J3ITBzCIGpcxMpW7CjKtucMgn7HaS3ZrRIY+L2hnTUo9lntezL54H5skNhy6PzMsUkycej+ycTPr2iJXxKZ6qs17mecRWqLLS4JCrEsU9Tw5xfMiqjw3eHmIEPceMwck8m8rujQ2GgU3gGQPleWQESXbkNecA62hLAeEQWD3Tg5DmznDiCU9cOVBWXIAYxxPKZmJ+W4a24LVMk9h1E78de6L5V+1kJMrACBLYjwwIqXCktf3j/jbpo355IQkAAqwWch7AmB/DyMYcCzjyws6Yh80ujHiTYq+hLPeRNlsWybjLQ0Vq4uqSJBarc1w37/Pxep0e8gStLUf9/Iy2EgKgy/M4OOTpmZMSqGtfUEr7QeMpm95YnPfDwBQNuyYtNm/HNj92PeMpqvSSs1qP49QmdMyrY8dXlzF93IULQiUroYJInvNjGPMW4iR5mVH9Y96szh8jA4kRxbMli6CM6hhZYLhu0sfgfeqQZ8RpjvsJm2S3xFfQWHDN6PLxkS7oS3DIPS+xmntE2jNHHRKi/kVZCrIIVQYCpa6eMQt9TbwmRIzFCUK4ViPBWVfPtQJhCMfoEFTLfFzLfLxTexMPSRzPJwqnJzurgS9WNqFjXh0L6LpM87OstEQ8YAZigaugyYDYPMNuSfv3X3g/ANnVoa7T/4xdfIcVpJiFdCm8xlm8u7sokDzbCwbQ0eCxYHTUIidb/6Ee5EM0Z3SqdzccMgyYhrSE3qMh5Kh4CDDamuEczVI1fx9pFjsZzzF0P9jPWaEm0bUXmkj+FMkVhivAxZh6fE7vVA4DoxD5gYw/RrmcSUbZHtZEf00lQtYqUR6/qSpRWEmBbfkpjbhnu0V8nrYPj6wO8Lnkg9tfdPy7hF9R0vsb/vyJPy9Q5gv47Sf61sJvLfzWxW+tO9/a+C1ECWHcvfOxgx+bEX5sRubr051qTdGwU//axa/hdwvXPqOq/AX9uZOhGdUyRO2tBpoRVRF1MQvKPbGOIGrdzYMfqzxoB7AZVmfPx7KuWLqH4cb6rbOTOKgRpz922GfHoRPCC/FJsobw/xQ7x6lXstAcTjX/w6zQKS7N5UC7DimahsyaOgr/pRjohvB/wYij/hdUNU71sFKwFSlonlST+duzFX39DWU/HJU5DqZAAI5JZPfw3X/wx4fH7z+/ffzu8+OXj189fv2hNrYPsrKqlcThnQsbhRzr6GkUf2jPI/7lC0XGtn9JyhXE0lM2v9rO/NJmfrmduaZXqB0ojPhI+KNStZj2FYnsFMMlnJ4FeEwbCY+ncIUmnBRvBCE7pqBGIXIqc+E/EGfCTzkKgvwUrJRq75nflWTxzeKoLEq8RsrPf7wwow64xJ7O6G9aA+6DfcCdZCb4vPA/aw8NTj3hJxoHKRsNYrgSbR9yfSa5ir2QvkliuxJkW1zSljYaDtHXJYaD85egQHmGvmqPVMKJ/ZvZvxJjVSXEtvhSU0sMCANAuhbSGATBHwlG0jaymeM4Uf6VoDawjIs9M5Q81y7X5i9Vz5/pklHC5jHRHpCmmLQ0OLFnXaD0EnNT5/Z8x2VDsdH3rhfYWiiauBepCWD1rvVYb1MeGXJ9+itC+rAcs/H6uTrFqSnnjZdDxkASp/KMlsZn7UnQ/d80RQ77TTOz+pZA4VOEf8Wlq1HYcXUqXZsLHzzhXwFOA03+FaUXL2UdlIdqcbmu78PPpDWiRGUd56XhdFDeuDEvFhD6kWn/ShziLWOt6JBr/7VoNNrHxVPnpHg6bhZPJ2HxFAZlYhiWj51OxzzWHO5kzQwCI0BbKwhjEVHznquvBdNRkrKT7Amdn8i0ltiEvvCnwkJmKhhYVtvgOiLFCkOqfMaf34UB1Aq9a+jd4OPE/p0Kj9Lf0V9cY/47QU466HvgvxF1JvQ3uWVBgl2U/jPRaOCv/1LvJQ/YkcqK6o1wbXNod2z+1t3ZtoULpo00cWhe12vdb+NFFKX8k4xkvIjw8hDHvl4Tto5Eo3GI5G+97nQ6nCuanNYh31uSFvVUbH9qm+hMXPmpBvxB8Bxy5b8zCEbTBTtFKd/vGoJNEYmCMmB3HktHs1P+WDqS7euKaa/WWzuQfblaUZkJH4gu4zsPwyaD4muFTF3XUf618Lqnpy1kAg3VUv4VygTW66iv/Bt9FsQd8xDG1IkbfRbFTZBrDLnbMYMn2ijXeNMVUsRm6Ml/NEP4BT2qJKvloRThpyhWZOa7VST4ZlNIeQhFn8EC04L3DjDTxGkf20ERBSIcC2ghKWiG9iFsntinLjqWPROMXhx89L/guALmmreXODZ8M3SC0p4gCFrbaW8wrbud9jOm4fU4pi1cx5T+u7Yp9q20ctpNNdLqO8lGam2TT8oZ2J2mVhzstvwTrqXlbHZYDMQIoGs5nm717WnVNwOoO2tXIfWgycAM91E+Q5PVOSljrFB1RVf+7u8PDof9KErQWjkp8JwCdxIdqgOh1E0gzZTcMfhXgMPDYRlJImZwZV/5P4tewWnhi4cfsKUrdJizAAFbO4EFeRxMpOxgySN9QU7nb4ZAQi+Pp5vvVy9N9S6XW5XzYENwOm7i0jhu3oGDxd3yoYy/WVAEGplhtKj/NACqgNqR7O86L3mw0cUaGdCI3aGZx7pQQLNeUWG94ychdvwk3N/xn3X58L/a8Z9/qOOmx2FAsA6D7wD7pWZFn9yIUKnRcLa7crcv5RpFomj6QCSzoBslodtQ1T9MLO3WQZuh8nNND9pyJ9XWIHlgl+XvkoYf085xpc92VOOHVufQK6yxkdlrNJwH1R6Ya1Z8rGknjUaaSPbYyHjfGa3TcoBM49BwyJZtd91CwqH5E4T9YWj2YFrUZa16YyqUWGGr1pwpE7Czs6bhUx+LH6qu0HeTo7hmcXMvEIxUvA4HYpD5L2biDSiKJNqYa3CooMZ2QYKJyHqjbDEhiy8nNUeDkPifJcpfFOeumzYa238Zu80M8/2LxjVhsXd/5h//m/VTCmeExlGek3kpneGQ6czNLjHWZijFKE6faYzd/5dTS0rERIP9GeNaJpvfkN68Z9oW4PSRChWPCCf2/wZuPJcDXDBD/xdDMEivHnG8KK2JthMFI9bpdGhhyPU6qtlUWHaRctF6ZWYrM+dX/KNNAFiSbEUoPaSnTBZCLvuE8rLiYKBY3DYHgM/EhlHcUNx5m+QH5DySjjm5KjOByKHRfp6ZPwgsjJG0zdHeJSxFrL5DjgwQsp394MyJDAd65vwdMaulbDFAJmmL+TG1zESZYybu1DMTdyuaVbcpo+y34kFLs5U9rKgZthkOQeeB4B7+ljQW2T0Wh9Up5UVxyqRjiYWUF9XOmHRd22tRBRZe8pUG7b8UfIp/v9i/n4VJf6jN32/GnirR5l7PS5v8VpvspR4drUEqVTm9ldpwensmiqvGtf+GjEfwQId/nuOfMER0PfOacU0s93JXs4sWHMb0PkEVg/BnqH8R/rWGMSX2ScxyRuSKHtENhURb5Fv7C2oK8by+IoIBU77q/6LPfsF4hBO+ROHuAv+guvqGHvCKKJibx2Ev6aNEiHTcfdReQt5fkWZjxUopkYblQLrJ8JDP12t69PAqhht6GR7yiUnFtAUbZ1Kncils3ITIkHO6Ew+bTIecY+Z02GOp6xqn6RRUP7EE/x2eAhOuUKGYWwnQno4XIhRH89FAN2ZD1h/Tgc7zqjt5k/7qbBUnFfi/WPA7W6oEu/8UAn/h32i77EgoYygyPtRs8kDyVnDS7EStVuvYCh+DXjO0Bpbo0sFDPEmFeEMucQuFRcb2nmW/nBjjheI1DHbem/WSoW2wGfX+1NYuqlaX3s5bNEemwgy+GqHWa10+PtCora3GRrXfN99embz+W6QUJumRKUNJtgbcWjT/oj0ygG5a0eEHPViivQjpKrXn1W76Q2Vq2HKb98iaGrQxY8Zl8JNwm+5xv9+k1fC0fHMycx8YTQpaWzgZTxiLM55w6bYh63PpthoNfVZXFLE4Ic2SIfZGWfTOkHtIZKm9apkvTv3CEsJfAoXRgXhR+xjahWbFC8tn5bWgZeMRWzuoSiW2RE0Paf6arPexhCnK3+FjCU/phSaagoW1GxYgdkPIEULvatPxCKfxm6GpjcaF3aMq2aiH0lbQJHRl9GvIy69GhlqTBT2RWwHBzfKgQ3wphp2KMzrIx7jpkdrnjTRa30qB8fN2NbovzkQ9gPnve+xZsAweANEM6lwwq161UtCS9LyRRCLfC7cVIRbYLp3i3ddp0UEvJTauGLjsK9fWQwZ75RsDSTa4kqcMjDWpkXjjfkuXxqPH9WGtALMEKOEt2uglrz4imIBwzbIDCYPST8trGZuU4rVJ1ondWko05P+q5wjxHbMUswR0+zn1UnHJgESPV1b6eEUCSDPhGUVWsWkuCdkNWIrHiU3NNP6VHkrZsdpKpr5drazVJqvaZFWbLI9xnCfEoeVeMXeQEyVHBeK5YFaunOhTnhMdTYj/PBewpTagFKMLQKMjQby6KGTodzUGrChumd0rq4i5QlWIl5vQo8jf5lSBi+iWUyukDjBa9FuyUat4ClOYFCS1zpmqtUVTrJXb3trObMoVVt1ogfJ72+Urq+NI0PTqK7pKNFlsDost+q0UHuaAgq8ZrkLCcAs+sFn6FKci07RtG2VRVkD03wdu6lZj2QfktF8tpLRUUWCsDGdXIQNpAfK0AnlaAzkh1V2wbC3vtCQLKbwhe9iyEra1xh3V59l67SjaEXA7CO7AMu1zxWi5/yxNaKViGddz4ZKulrLRniQ10olLoFiSzFq14SzihEZbKtqfdgTr20d6q+vZPcn++kMHWbl1isXYvKazNEnGW4hgI095oZWjM91LI18xp8vTZ5qpvz5ClpJHi3Lv7EFSmYOkhb9NvXugpBPse71e09CeaXbnjAmlDo6a36eGozLhsFyiY+15uB8U8ova2OuWMZgRz9SYiWQ5/95ZlkgU6veI047x6b97ui3R5On/JTTBo0UxFUt8stPIaawFEs3Q6ve9/mt8gnafajLnaeTHcMrHmpdCFsKSPho6lGXJ5sB04/SZLYDXFmmjb1hZ6d42gpK+VTUaxJkErBBiWaSteJQSLkYrhNWRUWot99bFiYU61XumexbXlxRUexvXQ69M38L2GYKM/vAIcRMtY3GLuwP1bQydaaveXZmlUADf9vMHUXZjqyDG4C60TO0M/s+gNTKEQvFuOwKt+I0m71XB+wKZVqn4XNfD4HkhqzI0GSjFF6bIAkMwlW83ivWUMv6mnRZE+M28ha0IbKCOTPGJLi/+8iJWVpTs/YKVZkU1HQjhuIkhNgIMFgJJWT/GJDmO8KdbRBHJS//Kge/7EqUnXboHlsF491PTfhgp9BrMFIMZPSWKwXIrs1Y262o3GV2UT6B1ErabQwZTKq8Ugwk9parmbbRQ26z3P6IzEQs37NTuQPpOlqhbC1qs7iqFaWseCzqVrQQdx3JBPPoSrc6Vv4QRV+h60ccY1wr9IfARbwMUElZc+RoFEujsrnwt0d99Yt8Ueb8vuPLPTaEbFAjT05xj+Gh6vOLKlxLOeeY5SFJQEX/NM/TSmAo8jzG44KlrjHLwOMYD+MYDuOQBvMWTfGwtiXthuz8zBBYduwqVBxHOA9EbuWik7rrD09MZzFxu7iCWfDkYNaZDS5kveeUGAyOM2HAJM49fgvmAEVY4v2S3OTliWV8OWcnnw07jkip6X3yDywa6u14aZ47e5b4u3ipfSR52osCK+g/E5m5337t81EDIXiJYa53b/MXof6xqA4nVYNSY/DgkyrF++++P9dt3x2ro1ntY8sw7R7L1rb8s1DDfvCURsv5No3FVhPYo7oKepCaAzIHOsoNkpA7OMRwTlN05Kbtjdl0TQPAtX3gYuwOjNu0G+HBdwSwijAdvXZfutiW52MH2Vehyb2a60OEtz7xvpZWD7M/Z7Vu+cOeeidAjuPTmRLT/8x6gzEr0dc919U5mc6uEwGUEGpuu1z//XqfnttPUawOj+f8BGBFK6X7UK7LklAX+6k17vNnDPXQnuR/upjETN436T+39rzZV0otOC9fQdxAVwwDsRVBcqlYNL5nrVCuFDXerThOnGeGDrSY8Cctqtpud0e2Bs3+adfpXjS+/27jlhC7wAHvdz4zt6UM+6/ebvdTjD3EJPzw9bcKoQXvEjBFjNBZ0nlwJngGSeX7RT88uvNRtx23PSb0LRhZW/LqfnV17mRu1j+OofYxKtWtUOSz4yEThQT++WenneqUqJUDNCbS+C/IrBYrrs7DV6sRhq9XaDcUS2EgsSsZhJ+wGkMj4MDQhWXJ6HEsU1uPPDH+W9ENxo/BpgpbST/BH4LV5WuMPflAUJIWy4M8Cf27w5wrzncsqjEuAKqriFeMKwIUsAqeQETjGZpEYjfEbPl7iz1sZ65o537XavVwQbxlf0xXg65q174UyDrKkYg7K3GXxmosk5gzrOTotQHDVXBhVZfFsDOgZteoUt5gzat4pLzhHk6q1KDRPNIWXit++JTA/lHGu4KuMRwruy3ip4KOMpwo+yzgK4J1EhIDnOPbHMm6fRPAHFXuFgNnAW1tPgPWMqZ4Z1bOieiZUT3hi6ulgPV5oKmpRRQFVFNaiUD2sxbMybgQGpcYwghksYQVTmIC9CwrO4RougK5hgbfwEL6WMSY6DO7XXz7y/Oytii+NsfMYI0a0+3zcG7su+zoYF45fxgXFeKB8HejBaIjRTfDLiqf+IwlLHrZ7yz4P6Uz5dbAc9pYonU8TZ9VfNhrOii9JALwsGP6P/it55rzn75UT4qp6hD7W/L15CvEJK+YhBCwuwhLwsLfsz2wTs2Fv5rrWTYY0TCs+Y7DgIYx5WBtHmjgLdIuEhcdxTBD0F4X2L8QeLkiFiCe/9To85EtWfSW1xYDM0G2lps77gzEGhbo/GA9drPMOlFB2NBhhIINscL+A2JCPWC9fpTay4niEbjfxJX/LM3jIP/qfLW/Xoy9hfMk/+g9xR/rof5WU412RYyKSEcYpxSz3TZaPJstzifR4zgO6KGbMZ/CNJzhHU476uwCu0QnpBqNBreCC33ghWZk3Gs5H/w95dtPnQsU3faEYacHrHz76j2V808c/bFtxhGzce/5VORne9wwTEBb1PvpvUdCMrY29CZzjwxRvfsUz7rnHryzj4cz7/Qlzz3s0/99cMeTvq5PuuZlmW03YmzeueuyKIpwZJdXVmTNv8CsvhLnLr1hMw3ddxDjPwwkyjlGIfxbCGJsGZ2VDDlOIPvPGBTvEWMvWQW3SaDgTvmLwzTW9nnIcwoJeesv+1MUchFRTdzKEBXoGsqnrAqEb9uzGlvyfAfiazxsXZmHgRLrXQ36tnCms4JuHCWxjzYfm5IdIa2rsTRg68817djyHNB47RhoZIseqjhymILOr8Ztr5gSX4j7A74d6cYynjvIbs4hXUNNXf71DymBsiNkIQTY+Q23jaR7jHzc8zdmIXygHje4UiOpyyjJr32RF1S6mNRohxp0sXC8Geoinuh5VkpCbtGdceS0LZvKZqqgiL/9u5oMRxqch9e61ck46tAUxR3qq1EOOaCO5X+MF4KPitx+Iqr8ud9J2q8XggYzvK3iGvxv4/CO5qg3hnapiRVvLeKcwLp8LOHS2DOW1/5YsVZAh62tfSUxSsk+8FluvD6sM3WAnQxgyVjf2fl61jA6v8uyzij8qkPz2kYyDjbmY9EPd6836pmI0olZfoeP6uRwoJIc2MIWJM1NLP7Hp3WA7/bhI7+7Wo/3XshZBC19B+w8kzyDlJ+YOD+phtoGcHtINRg82fcZaHyoHucNzCRhDFdFS+NcSxujrSnoDWid4I/kjVFu9l3yMTziuZrTdnXYv5e2e8d2kTLOi6aVtuidxXYzgoXIi02gzoo2c2pS2Te0/kzyzUqcRvn9As74NRhnnODoQvpb8BP9ojrlB+ErztukftkHo+FiZ+JjlFRYjvXN7oLnd4eg1BsWaZwoDoC6W+ojVI2H+oe6oXMHeSLaPByli6bSICyB8Xa+tuT9Z+e8ay3tRLy93LRT/YKDLlUYtOGT4kFh/87kAwmR0e1AUQaU4bUQMLh281CSHFR/DFR4Lqyty7M6Lue3mS/gemxO4ROOh26qqSsxyn1ilqCHJZr/Z7oRtzkfslgpdG7+La8ExjqL0Z9JaudPjewf/wIjBQweTTOXdsKrcuGLQH/8XyVGJf4gWHtib9dpxPjpd5FTx7INeKOwfzbA6wo0zpcRYH0zphqADuvvvqGimPEZhM91D/tFpsaLo0obhHt+5Omp/8c9Oi8GcqnC7sDPwOYN5P2yv1/M+vu+eMFepnGQre6XrncqlP6IYlnO8TthoG1JOsBtZMCrJ22HUGJ0h5E5imnoE5xavhECNy7miqkbQPTS+tPj6Hw+9fdxstUwVOzVYqCez0UV+kAu9d3TV7H7ReHDsNkKGIZ2pxkajZbHK2UaXHXyJqlFG8X2H/DhqNf+u+ej7lX77TqXNqtJmXMCtqvRXEyB1RIn+T6bz/37XW1UrLXJlpdJn5UStcKLq7T79y8FsN8PiesknaHdXa7pdNd2OyQzctt5oOFOOTcO0n9NLzmBqq7F+UeiOQQ+/YfY5t33zsBg7Lb9c6aJtmBNNnH6/7+fSdL52XU8KqTtlMGUMco9PUXs+JaB4fGqgU/KB13iFNIIrqEbYqUbYwRFiYHCLqoao5fXSUx4g1z3nGHtxivKi2nj/RFdMfyVPyzczsDd6gMm4rc0L3dO80cj75p7Y/+lY57UOGh6rPqNvaEbvDPu4GvYxDhuVgv/hsF9sDftFOeyf/28O++di2Ha83Wq83bjWOg3XLKSiG6PDwmUG+1ESvWKDUOODeZrPMRz1Hmr10GFbFOslui6OZb9/0gih2KFCVpHo84pE14R9VW9PLLEqC3xTzs5eeBKU2U9oKz6Ufl6aXr91GES9fVuCaa8sSsS/TeZWnZoyEue/zBPFtN8mkt2+q3oQBR07fMsf3Hea+DGR/PDwIwonPuPPRydi5ZG97EFz+8CeJs5zhT6fZYYTqHfnsxMxuN7euqKqtk49vRlvb6PneHvIAd7AUJ+5DVa5A/aTJnYEh2igbxFixA45MhH9sPPJmFXv7tS5zpQoWjKS2Xz/pkgr0la7PZ0t+C78W9VIK9J8QqS5IMeE0XWijCa4zpSPSXg0rVd7pR3kPy3NrZbWGJ+SGh0tt+LvYOlJxzIOLRzGRPKPTpuh1Bc+O8TSLWxSWCRMpeGEWkB8ERbqR93Oen0o6RyFRfrNwIIX086OUA80H8kbC9ejeDflIFOVMD6/mZ9ns3wvR3FTp4UnFS08OY5N5Dz/BsnZVPaYReVziUajmO66wyH/iKmfHRtiphee9PFTj93JGPSkf4XniAsJeP8fl3jOwDSQePA4pjOOOdNg6gbO7bOWG3heOxFe8Yd0hseTTngCSzgHiSed5yDppEPtLPGoRBWf49MdnRoqCQq0/C6/tQ2dinKedLegM5EuzpKVjvQWHMc3+Ohg82wIzqLyU0C94ldzd2bY6dvFtGDscz2TgbKFnF0Zi16hs8IYhFVBQ7Ujt14eJ6ReHbHYN3IXBOd42ZJBFyUWYrQPBsir2L6gefuUN10kXoCUwuw14XGtO8iKNf+yLyhMM7VYvGGxc985/oEyYeh+dI7x27EJxkUAmvZL+P8n4zPW/55nEbaA+XxjVOJRcGIOhlWsBwLmOYXUH+5FKs/DbTFP5QWGf/ayxCMauBfBqgWBR29aAY9rK+CP2gp4VawAQv/QoD+OHR7DH2YBvKovgMflAvjDf2RUso/4K3wk0NECvJKlFcojdneNbOvVvr9MlOYdauADgaZiV6h71fzA69rYHthnpTfwjJ4fVas7gg9EK+E1PDBje1Yf22szNqX5AztKXR/NvrEU1PB7oyCg7N1nt7adk1hWRgA2NQoKXgPpdd7nnUZj3KfY0LfIc5DxyspIE3ZlDd/olF5DRkoKfpSGLIy3U+OweIpaATNk6IYvilrs8rxhrvPRcW6qmlx6iVqM9fv1dGxwK9ue1j/XcwB22+VVijnnL+7kqFKgtu0voBgAK6UmUdCupsaOrhnhZ4LZHUaxlq3T+mtMthriPZj8RHNbh0M7bTOMjSTG5gyrOQ9jad3sHXwwByyXf7Rvn8tUHHbxfCkNb1JWGFUVRnG5e2hNM6/092f+L2Zc6/9HZ/y707NjN7BnYia6RJX6LIXtKnOzAmXz7txM9N/Nja2mVVXTstK8cZ0UEIO58sZUZ98ymXipufamgLvRFfJsUv6gEc+dsWIVF+LMmXp0dSdMkKYKb8riCSXYVlaV4KHO2W5FuZ5aw5RskJg7cqS/HEyGGOQPXHdidBYTnnjYeyilGH9fV1avpcZWE7tsOWXDdaxqItUoCHZOF1HQ3gfibJDgJkzdGWOorB27q6p4x5zCHgjLB+EJZeXxsQ1vswLpLyX+LY60q0LbkFW7VOKtAAMXFgfDC3Ps1rAi/2YU/tYO5mN5Norp6InWGuyQytyVotKlDt+ToZqzsU08roZzXAynUT+S46DqR/IqSjVOqGR3Gy/I3I80362a78Z2Eq54CLVtLwpOqi9ec+tTGNhPXqvUIxci+M32pZb1i9Aeq/qEmyuAaxGTrh1jwkaHwXOxXq8Ords09aZf7p9v5Rn1nFJiQgl6ZOs1Bdixs70i60xy1d4Je1rGFzp0lL8kNYLyl9bkDz04/GWhfCDL0GvyFF6ymkrVYLAy/i74h9ucgJai5GB9Re7rp/ixCLWOzx5m6AlyohLWiQrtVjEZ73wrblKgW+8dDKfPzhybJ9jOQOE1LvAOMmyNGoodTHG57UfVQ+wUZr86LZOuXC6sIdnBvgYwIyjj51INChO2/DfR1FtUKwsNozxN9lEMg74WobUt7oUBeK1Cybv0SH+DyxfnygaLW35/JdtwNfUlu6f1lW19Rbb9yCa+Fy4Jbs46LYr/U2PJzsKoW6ZZzn+9JnGDzRC1O+h9iBO+JNuRFf1eGT8f80xB5zga/F7V7JMI76q44ERIzqVNjUfFU81Oacss+hwtWswlY+doQ1LG7wGq5ByinQiL3360+CAyr3aTPh80zbuxZSqqb+1Uf+mY0BNLY3m9EuQPPhVknJ2Xxtm5mdQRl/4CZgT9Wrh0B0nX0tjOrQRPjK3cmMIWkkugNa8bCZ7jeYCk+2goVwuU7rDbkdHw1cwCnEp4W10v/lj1cs+DkQ2KildmMDTbxWjZZKcbWJPiMhJxEci+JywPVIvGW4uJaQwJBfNqbjSf8TvVKtB0sH5vnGM/HDdm+Om4MatfjVUzPTOK+TMvio1V4CNzFUcHPqh9dxTysAOaP1L2jsKXEsM5m0sKZe3+C3PbiL0HQkCLUaRtW8R4GRRhHRnboJsF1VnZ5BZZy2tedB91o55XWCbaDHhVFO1nJmO/jMV3UNSQL+i8ZsPo1y5vSumeWCVmYpTTRdbbbZ7aUTUaW90WWyrm1zXbAqzzg3KaETxSdPXWcjarcqLSurBBeCMdc3HFz9Jemm5cj/C3hksj7RzhVeQHySidiUl8cORKVrsms27CmNIA1M2t9qsRlZec10ada+eWru912O0GdHHDLYom2a255l059mL3HA+8wsD3d1m/GnVchMcfn2bF7QjFNQJ21ot0bwz2Ir1RnSEaw9hVhv3LcSWOIMeVGECOK3FUVIpv5c0vimv/CcIuQ48xHG2OK1tBjisbi05xz7NFi1imP6Hba8DIXcN2Kbcb9bgfFFvlYYgWIU9lrOrOOmMGFpwxXWIl1mtH8EMMcFGAWWGc8V6GiUl5mbokrs4Y9iDs+GEtShFG+t6Z5oXKxgLtHeha4YMjF8OXpnI0m93cZut1iteMbYp5sPypy/Eq9GRmLqQjX3Fk6aqJ2pnNxMxmYf1ml5EBqCoAmiBAJSQGoAkCVO4BaILe/nn5yUssQPMtgKYEUFkHaP73AJUEUIWJWQnQtAJoJSW7C0eCWfptRGtiHzAVAhMN0Ax+C18oJymWYE5LMN+pU8hJbQXmGFW+FlpWbV/l973lVV6yqsshCf9pKRpjVQ9FCQhWTi+7xUaRPD/bT5WPJiKZjbQ4qky3iy7u/3p08S1dHOGlz80wLr57arSiNC9sxyGGtNeNxpFczs+Fwpu5bxbIViO/di1mZ/YvGrtaALxWzu0bSRNbv/MNLxKuwl7MBadLQYFuXIOfZSwwO3HMvAsKXWRS/gADwpRhSRJjnXhYs7whTz08kRwBxuU1kV0xGlJf0VpA2xsvbPdVVURxTxnuU/XDNl3UEIHyeNgxsvJ+ul6n/ZP1unuIEZW6fbVeK7ITCfponIafgn62Xmf91nrd5XgDRIjx/MsWTJqj+ElBQGmoxeBzdH+fI5+R+1d4u2+OQZxaEeQYDSiBvBZPJ0dDFaRshtXHV8j9XwTHFC+E3P9V8NQ9htz/zeb4FXP8iTl+MzleCO5gcnmpKuTVSSO6lxOrnWO0IGthXaR8qaX8RilXRF6fUEup24EcYwoVBlP38Avm+llw84INNRpYNf5+od/P4szJMQQRPlY0oSj7HDv+Rri2+AfBm/foI1oY5f4NxsTJ/Su8fCP3P2ouoXY7XC1wi4U1xUxCtoauseTI4ZOtjkEZ5NIjsLaHGiP82dBFGMYI0KKQTuKaojRpitKEgZZ4xNGMTZy1j/HmWTwaFCmkWY6NvldjMCsvMh0kRH1FcQ3KuEp9/kSzugPSkyKEjQ1eY+4etd7fr0T9AtM72Q1fggVsqLRH1NijqjF7MWu9BpNU1vLoTqOP7jR6p8idhj9oc3VFreEvdxv+Uq+FLlPaaviDvtvwTpF6wxgthttLVCk2jL1GNZPwFC/ddEN4oeGN8f5+UMv6qMyaSBASAnhZ5ntWy/dBb93MqjHnF43XPmxdj2VuzwpMTJoNczDmGoWkKVd/YKgU4gSGtOB4T+m5gEfWw/295s/lQFDYt98o1EYt4VdMuK4l/IkJF7WEFyaaHXUkKyL+0R9ZOlqT+7v1tl6VkQjoUO3PRRGCCK+esMHloLgS3GsxoHBk4LUYi70WHcQVdEFCF5mrn2T8pwSh4hdywza03fWIb16pVI/OZ8hGFI/mvKDEaGI/FI/+Il2ID1OVLS+mDu6suAP+8jc7XsFWO1uJJWX4+42uSOy0asmdOGz/u9sauU4dhts7W7UN10xRdzczS5Ysh+Wh9rUkZMrUS6FF5rglKLN3kO9ZemZsSYzz1e5tpKYhOuBtbZzWtxkjXCN58sJOGevaizB0KSj/rbT9AM09bU1+eNt1dL/fYibDYQitbp+2XvRsZb0iqC1JzGoQxCxds4emhihX8i/0ZUFBloktqCiEnQmUR3Kma8E13CXv5anVKYn4uSHiV/RL4qMfKFZtDtpfytoOoat7CMJGsQMoZJhpcBXQNRnehKD93P4dk+5Io50o5abztL1zeyJmQosDjJyHl0lTX9+bjpOJ9AVagZNtND1dlWlSGi7ZKKYsaan9YtBeaRYeLsY/FC7GV2pjadD2WtTfW4v6L9diLxezxMcj6atsskTAES17WBmmvqdbh/+cpef8maIwXeO9H39Rmw3r/X//Pw=="));if(h){const n=new Blob([u],{type:b});return URL.createObjectURL(n)}return "data:"+b+";base64,"+(n=>{let i="";const t=n.length;let r=0;for(;t>r+2;r+=3){const t=n[r]<<16|n[r+1]<<8|n[r+2];i+=f[t>>18&63]+f[t>>12&63]+f[t>>6&63]+f[63&t];}const s=t-r;if(1===s){const t=n[r]<<16;i+=f[t>>18&63]+f[t>>12&63]+"==";}else if(2===s){const t=n[r]<<16|n[r+1]<<8;i+=f[t>>18&63]+f[t>>12&63]+f[t>>6&63]+"=";}return i})(u)}});}
222
224
 
223
225
  /*
224
226
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -1365,6 +1367,7 @@ const GET_RANDOM_VALUES_SUPPORTED = typeof crypto != UNDEFINED_TYPE && typeof cr
1365
1367
 
1366
1368
  const ERR_INVALID_PASSWORD = "Invalid password";
1367
1369
  const ERR_INVALID_SIGNATURE = "Invalid signature";
1370
+ const ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_SIGNATURE;
1368
1371
  const ERR_ABORT_CHECK_PASSWORD = "zipjs-abort-check-password";
1369
1372
  const ERR_UNSUPPORTED_CRYPTO_API = "Crypto API not supported";
1370
1373
 
@@ -1415,7 +1418,7 @@ const DERIVED_BITS_ALGORITHM = Object.assign({ iterations: 1000, hash: { name: H
1415
1418
  const DERIVED_BITS_USAGE = ["deriveBits"];
1416
1419
  const SALT_LENGTH = [8, 12, 16];
1417
1420
  const KEY_LENGTH = [16, 24, 32];
1418
- const SIGNATURE_LENGTH = 10;
1421
+ const AUTHENTICATION_CODE_LENGTH = 10;
1419
1422
  const COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
1420
1423
  // deno-lint-ignore valid-typeof
1421
1424
  const CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE;
@@ -1431,7 +1434,7 @@ let DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && type
1431
1434
 
1432
1435
  class AESDecryptionStream extends TransformStream {
1433
1436
 
1434
- constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
1437
+ constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly, checkAuthenticationCode = true }) {
1435
1438
  super({
1436
1439
  start() {
1437
1440
  initAesCrypto(this, password, rawPassword, encryptionStrength);
@@ -1455,8 +1458,8 @@ class AESDecryptionStream extends TransformStream {
1455
1458
  } else {
1456
1459
  await ready;
1457
1460
  }
1458
- const output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));
1459
- controller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));
1461
+ const output = new Uint8Array(chunk.length - AUTHENTICATION_CODE_LENGTH - ((chunk.length - AUTHENTICATION_CODE_LENGTH) % BLOCK_LENGTH));
1462
+ controller.enqueue(append(aesCrypto, chunk, output, 0, AUTHENTICATION_CODE_LENGTH, true));
1460
1463
  },
1461
1464
  async flush(controller) {
1462
1465
  const {
@@ -1467,8 +1470,8 @@ class AESDecryptionStream extends TransformStream {
1467
1470
  } = this;
1468
1471
  if (hmac && ctr) {
1469
1472
  await ready;
1470
- const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
1471
- const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
1473
+ const chunkToDecrypt = subarray(pending, 0, pending.length - AUTHENTICATION_CODE_LENGTH);
1474
+ const originalAuthenticationCode = subarray(pending, pending.length - AUTHENTICATION_CODE_LENGTH);
1472
1475
  let decryptedChunkArray = EMPTY_UINT8_ARRAY;
1473
1476
  if (chunkToDecrypt.length) {
1474
1477
  const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
@@ -1476,13 +1479,13 @@ class AESDecryptionStream extends TransformStream {
1476
1479
  const decryptedChunk = ctr.update(encryptedChunk);
1477
1480
  decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
1478
1481
  }
1479
- const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
1480
- let invalidSignature = pending.length < SIGNATURE_LENGTH ? 1 : 0;
1481
- for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
1482
- invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
1482
+ const authenticationCode = subarray(fromBits(codecBytes, hmac.digest()), 0, AUTHENTICATION_CODE_LENGTH);
1483
+ let invalidAuthenticationCode = pending.length < AUTHENTICATION_CODE_LENGTH ? 1 : 0;
1484
+ for (let indexByte = 0; indexByte < AUTHENTICATION_CODE_LENGTH; indexByte++) {
1485
+ invalidAuthenticationCode |= authenticationCode[indexByte] ^ originalAuthenticationCode[indexByte];
1483
1486
  }
1484
- if (invalidSignature) {
1485
- throw new Error(ERR_INVALID_SIGNATURE);
1487
+ if (invalidAuthenticationCode && checkAuthenticationCode) {
1488
+ throw new Error(ERR_INVALID_AUTHENTICATION_CODE);
1486
1489
  }
1487
1490
  controller.enqueue(decryptedChunkArray);
1488
1491
  }
@@ -1494,8 +1497,6 @@ class AESDecryptionStream extends TransformStream {
1494
1497
  class AESEncryptionStream extends TransformStream {
1495
1498
 
1496
1499
  constructor({ password, rawPassword, encryptionStrength }) {
1497
- // deno-lint-ignore prefer-const
1498
- let stream;
1499
1500
  super({
1500
1501
  start() {
1501
1502
  initAesCrypto(this, password, rawPassword, encryptionStrength);
@@ -1534,12 +1535,11 @@ class AESEncryptionStream extends TransformStream {
1534
1535
  hmac.update(encryptedChunk);
1535
1536
  encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
1536
1537
  }
1537
- stream.signature = fromBits(codecBytes, hmac.digest()).slice(0, SIGNATURE_LENGTH);
1538
- controller.enqueue(concat(encryptedChunkArray, stream.signature));
1538
+ const authenticationCode = fromBits(codecBytes, hmac.digest()).slice(0, AUTHENTICATION_CODE_LENGTH);
1539
+ controller.enqueue(concat(encryptedChunkArray, authenticationCode));
1539
1540
  }
1540
1541
  }
1541
1542
  });
1542
- stream = this;
1543
1543
  }
1544
1544
  }
1545
1545
 
@@ -1552,7 +1552,7 @@ function initAesCrypto(aesCrypto, password, rawPassword, encryptionStrength) {
1552
1552
  });
1553
1553
  }
1554
1554
 
1555
- function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
1555
+ function append(aesCrypto, input, output, paddingStart, paddingEnd, verifyAuthenticationCode) {
1556
1556
  const {
1557
1557
  ctr,
1558
1558
  hmac,
@@ -1566,11 +1566,11 @@ function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignat
1566
1566
  let offset;
1567
1567
  for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
1568
1568
  const inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));
1569
- if (verifySignature) {
1569
+ if (verifyAuthenticationCode) {
1570
1570
  hmac.update(inputChunk);
1571
1571
  }
1572
1572
  const outputChunk = ctr.update(inputChunk);
1573
- if (!verifySignature) {
1573
+ if (!verifyAuthenticationCode) {
1574
1574
  hmac.update(outputChunk);
1575
1575
  }
1576
1576
  output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
@@ -1920,6 +1920,7 @@ function toCompatibleWritable(writable) {
1920
1920
 
1921
1921
  const ERR_INVALID_UNCOMPRESSED_SIZE = "Invalid uncompressed size";
1922
1922
  const ERR_INVALID_COMPRESSED_DATA = "Invalid compressed data";
1923
+ const ERR_INVALID_CRC32 = ERR_INVALID_SIGNATURE;
1923
1924
  const ERR_UNSUPPORTED_COMPRESSION$2 = "Compression method not supported";
1924
1925
  const FORMAT_DEFLATE_RAW = "deflate-raw";
1925
1926
  const FORMAT_DEFLATE64_RAW = "deflate64-raw";
@@ -1933,14 +1934,14 @@ class DeflateStream extends TransformStream {
1933
1934
 
1934
1935
  constructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {
1935
1936
  super({});
1936
- const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64, format, compressionMethod } = options;
1937
+ const { compressed, encrypted, useCompressionStream, zipCrypto, computeCrc32, level, deflate64, format, compressionMethod } = options;
1937
1938
  const stream = this;
1938
1939
  let crc32Stream, encryptionStream, gzipCrc32Stream;
1939
1940
  let readable = super.readable;
1940
1941
  const codecStreams = format && getCodecStreams(format);
1941
- const useGzipCrc32 = signed && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
1942
+ const useGzipCrc32 = computeCrc32 && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
1942
1943
  Boolean(useCompressionStream && CompressionStream);
1943
- if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
1944
+ if ((!encrypted || zipCrypto) && computeCrc32 && !useGzipCrc32) {
1944
1945
  crc32Stream = new Crc32Stream();
1945
1946
  readable = pipeThrough(readable, crc32Stream);
1946
1947
  }
@@ -1975,14 +1976,9 @@ class DeflateStream extends TransformStream {
1975
1976
  }
1976
1977
  }
1977
1978
  setReadable(stream, readable, () => {
1978
- let signature;
1979
- if (encrypted && !zipCrypto) {
1980
- signature = encryptionStream.signature;
1979
+ if ((!encrypted || zipCrypto) && computeCrc32) {
1980
+ stream.crc32 = useGzipCrc32 ? gzipCrc32Stream.crc32 : new DataView(crc32Stream.value.buffer).getUint32(0);
1981
1981
  }
1982
- if ((!encrypted || zipCrypto) && signed) {
1983
- signature = useGzipCrc32 ? gzipCrc32Stream.signature : new DataView(crc32Stream.value.buffer).getUint32(0);
1984
- }
1985
- stream.signature = signature;
1986
1982
  });
1987
1983
  }
1988
1984
  }
@@ -2020,7 +2016,7 @@ class GzipToRawDeflateStream extends TransformStream {
2020
2016
  },
2021
2017
  flush() {
2022
2018
  const dataView = getDataView(trailerCandidate);
2023
- stream.signature = dataView.getUint32(0, true);
2019
+ stream.crc32 = dataView.getUint32(0, true);
2024
2020
  stream.uncompressedSize = dataView.getUint32(4, true);
2025
2021
  }
2026
2022
  });
@@ -2102,7 +2098,7 @@ class InflateStream extends TransformStream {
2102
2098
 
2103
2099
  constructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {
2104
2100
  super({});
2105
- const { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
2101
+ const { zipCrypto, encrypted, checkCrc32, crc32, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
2106
2102
  let crc32Stream, decryptionStream;
2107
2103
  let readable = super.readable;
2108
2104
  if (encrypted) {
@@ -2135,15 +2131,15 @@ class InflateStream extends TransformStream {
2135
2131
  }
2136
2132
  readable = mapInflateStreamError(readable);
2137
2133
  }
2138
- if ((!encrypted || zipCrypto) && signed) {
2134
+ if (checkCrc32) {
2139
2135
  crc32Stream = new Crc32Stream();
2140
2136
  readable = pipeThrough(readable, crc32Stream);
2141
2137
  }
2142
2138
  setReadable(this, readable, () => {
2143
- if ((!encrypted || zipCrypto) && signed) {
2144
- const dataViewSignature = new DataView(crc32Stream.value.buffer);
2145
- if (signature != dataViewSignature.getUint32(0, false)) {
2146
- throw new Error(ERR_INVALID_SIGNATURE);
2139
+ if (checkCrc32) {
2140
+ const computedCrc32View = new DataView(crc32Stream.value.buffer);
2141
+ if (crc32 != computedCrc32View.getUint32(0, false)) {
2142
+ throw new Error(ERR_INVALID_CRC32);
2147
2143
  }
2148
2144
  }
2149
2145
  });
@@ -2367,9 +2363,9 @@ class CodecStream extends TransformStream {
2367
2363
  }
2368
2364
  },
2369
2365
  flush() {
2370
- const { signature } = stream;
2366
+ const { crc32 } = stream;
2371
2367
  Object.assign(codec, {
2372
- signature,
2368
+ crc32,
2373
2369
  inputSize
2374
2370
  });
2375
2371
  }
@@ -2668,12 +2664,12 @@ async function runWorker$1({ options, readable, writable, onTaskFinished }, conf
2668
2664
  .pipeThrough(new ChunkStream(getChunkSize(config)))
2669
2665
  .pipeTo(writable, { preventClose: true, preventAbort: true });
2670
2666
  const {
2671
- signature,
2667
+ crc32,
2672
2668
  inputSize,
2673
2669
  outputSize
2674
2670
  } = codecStream;
2675
2671
  return {
2676
- signature,
2672
+ crc32,
2677
2673
  inputSize,
2678
2674
  outputSize
2679
2675
  };
@@ -3034,7 +3030,7 @@ let indexWorker = 0;
3034
3030
 
3035
3031
  async function runWorker(stream, workerOptions) {
3036
3032
  const { options, config } = workerOptions;
3037
- const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted, format, codecURI } = options;
3033
+ const { transferStreams, useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
3038
3034
  const { workerURI, maxWorkers } = config;
3039
3035
  if (format) {
3040
3036
  if (codecURI) {
@@ -3043,7 +3039,7 @@ async function runWorker(stream, workerOptions) {
3043
3039
  await ensureCodecStreams(format, options.codecURI);
3044
3040
  }
3045
3041
  workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
3046
- const streamCopy = !compressed && !signed && !encrypted;
3042
+ const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
3047
3043
  const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
3048
3044
  workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
3049
3045
  workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
@@ -4267,9 +4263,12 @@ const PROPERTY_NAME_DIRECTORY = "directory";
4267
4263
  const PROPERTY_NAME_EXECUTABLE = "executable";
4268
4264
  const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
4269
4265
  const PROPERTY_NAME_SIGNATURE = "signature";
4266
+ const PROPERTY_NAME_CRC32 = "crc32";
4270
4267
  const PROPERTY_NAME_EXTRA_FIELD = "extraField";
4271
4268
  const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
4272
4269
  const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
4270
+ const PROPERTY_NAME_EXTRA_FIELD_UNIX_TYPE1 = "extraFieldUnixType1";
4271
+ const PROPERTY_NAME_EXTRA_FIELD_PKWARE_UNIX = "extraFieldPkwareUnix";
4273
4272
  const PROPERTY_NAME_UID = "uid";
4274
4273
  const PROPERTY_NAME_GID = "gid";
4275
4274
  const PROPERTY_NAME_UNIX_MODE = "unixMode";
@@ -4286,6 +4285,7 @@ const PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT = "extraFieldUnicodeComment";
4286
4285
  const PROPERTY_NAME_EXTRA_FIELD_AES = "extraFieldAES";
4287
4286
  const PROPERTY_NAME_EXTRA_FIELD_NTFS = "extraFieldNTFS";
4288
4287
  const PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP = "extraFieldExtendedTimestamp";
4288
+ const PROPERTY_NAME_EXTRA_FIELD_USDZ = "extraFieldUSDZ";
4289
4289
 
4290
4290
  const PROPERTY_NAMES = [
4291
4291
  PROPERTY_NAME_FILENAME,
@@ -4297,6 +4297,7 @@ const PROPERTY_NAMES = [
4297
4297
  PROPERTY_NAME_COMMENT,
4298
4298
  PROPERTY_NAME_RAW_COMMENT,
4299
4299
  PROPERTY_NAME_LAST_ACCESS_DATE,
4300
+ PROPERTY_NAME_RAW_LAST_ACCESS_DATE,
4300
4301
  PROPERTY_NAME_CREATION_DATE,
4301
4302
  PROPERTY_NAME_RAW_CREATION_DATE,
4302
4303
  PROPERTY_NAME_OFFSET,
@@ -4315,9 +4316,12 @@ const PROPERTY_NAMES = [
4315
4316
  PROPERTY_NAME_EXECUTABLE,
4316
4317
  PROPERTY_NAME_COMPRESSION_METHOD,
4317
4318
  PROPERTY_NAME_SIGNATURE,
4319
+ PROPERTY_NAME_CRC32,
4318
4320
  PROPERTY_NAME_EXTRA_FIELD,
4319
4321
  PROPERTY_NAME_EXTRA_FIELD_UNIX,
4320
4322
  PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
4323
+ PROPERTY_NAME_EXTRA_FIELD_UNIX_TYPE1,
4324
+ PROPERTY_NAME_EXTRA_FIELD_PKWARE_UNIX,
4321
4325
  PROPERTY_NAME_UID,
4322
4326
  PROPERTY_NAME_GID,
4323
4327
  PROPERTY_NAME_UNIX_MODE,
@@ -4333,7 +4337,8 @@ const PROPERTY_NAMES = [
4333
4337
  PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT,
4334
4338
  PROPERTY_NAME_EXTRA_FIELD_AES,
4335
4339
  PROPERTY_NAME_EXTRA_FIELD_NTFS,
4336
- PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP
4340
+ PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP,
4341
+ PROPERTY_NAME_EXTRA_FIELD_USDZ
4337
4342
  ];
4338
4343
 
4339
4344
  class Entry {
@@ -4386,6 +4391,8 @@ const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
4386
4391
  const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
4387
4392
  const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
4388
4393
  const OPTION_CHECK_SIGNATURE = "checkSignature";
4394
+ const OPTION_CHECK_CRC32 = "checkCrc32";
4395
+ const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
4389
4396
  const OPTION_USE_WEB_WORKERS = "useWebWorkers";
4390
4397
  const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
4391
4398
  const OPTION_TRANSFER_STREAMS = "transferStreams";
@@ -4405,6 +4412,7 @@ const OPTION_ENCODE_TEXT = "encodeText";
4405
4412
  const OPTION_OFFSET = "offset";
4406
4413
  const OPTION_USDZ = "usdz";
4407
4414
  const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
4415
+ const OPTION_LOCAL_EXTRA_FIELD = "localExtraField";
4408
4416
  const OPTION_STRICTNESS = "strictness";
4409
4417
  const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
4410
4418
  const STRICTNESS_STRICT = "strict";
@@ -4457,6 +4465,7 @@ const CHARSET_UTF8 = "utf-8";
4457
4465
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
4458
4466
  const CHARSET_CP437 = "cp437";
4459
4467
  const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
4468
+ const VENDOR_VERSION_AE_1$1 = 1;
4460
4469
  const ZIP64_PROPERTIES = [
4461
4470
  [PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
4462
4471
  [PROPERTY_NAME_COMPRESSED_SIZE, MAX_32_BITS],
@@ -4849,7 +4858,7 @@ let ZipEntry$1 = class ZipEntry {
4849
4858
  config,
4850
4859
  bitFlag,
4851
4860
  rawBitFlag,
4852
- signature,
4861
+ crc32,
4853
4862
  rawLastModDate,
4854
4863
  uncompressedSize,
4855
4864
  compressedSize
@@ -4936,6 +4945,11 @@ let ZipEntry$1 = class ZipEntry {
4936
4945
  if (deflate64) {
4937
4946
  useCompressionStream = false;
4938
4947
  }
4948
+ const checkCrc32Option = getOptionValue$1(zipEntry, options, OPTION_CHECK_CRC32);
4949
+ const checkCrc32 = (checkCrc32Option === UNDEFINED_VALUE ?
4950
+ getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) :
4951
+ checkCrc32Option) && !passThrough &&
4952
+ (!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1$1));
4939
4953
  const workerOptions = {
4940
4954
  options: {
4941
4955
  codecType: CODEC_INFLATE,
@@ -4943,10 +4957,11 @@ let ZipEntry$1 = class ZipEntry {
4943
4957
  rawPassword,
4944
4958
  zipCrypto,
4945
4959
  encryptionStrength: extraFieldAES && extraFieldAES.strength,
4946
- signed: getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) && !passThrough,
4947
- passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((signature >>> 24) & MAX_8_BITS)),
4960
+ checkCrc32,
4961
+ checkAuthenticationCode: getOptionValue$1(zipEntry, options, OPTION_CHECK_AUTHENTICATION_CODE),
4962
+ passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((crc32 >>> 24) & MAX_8_BITS)),
4948
4963
  outputSize: passThrough ? compressedSize : uncompressedSize,
4949
- signature,
4964
+ crc32,
4950
4965
  compressed: compressionMethod != 0 && !passThrough,
4951
4966
  encrypted,
4952
4967
  useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
@@ -4968,7 +4983,7 @@ let ZipEntry$1 = class ZipEntry {
4968
4983
  fileEntry,
4969
4984
  index,
4970
4985
  offset: localHeaderOffset,
4971
- signature,
4986
+ crc32,
4972
4987
  compressedSize,
4973
4988
  uncompressedSize,
4974
4989
  dataOffset,
@@ -5059,6 +5074,7 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
5059
5074
  const compressionMethod = getUint16(dataView, offset + 4);
5060
5075
  Object.assign(directory, {
5061
5076
  signature: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5077
+ crc32: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5062
5078
  compressedSize: getUint32(dataView, offset + HEADER_OFFSET_COMPRESSED_SIZE),
5063
5079
  uncompressedSize: getUint32(dataView, offset + HEADER_OFFSET_UNCOMPRESSED_SIZE)
5064
5080
  });
@@ -5084,6 +5100,16 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
5084
5100
  } else {
5085
5101
  directory.compressionMethod = compressionMethod;
5086
5102
  }
5103
+ const extraFieldPkwareUnix = extraField.get(EXTRAFIELD_TYPE_PKWARE_UNIX);
5104
+ if (extraFieldPkwareUnix) {
5105
+ readExtraFieldUnixDates(extraFieldPkwareUnix, directory);
5106
+ directory.extraFieldPkwareUnix = extraFieldPkwareUnix;
5107
+ }
5108
+ const extraFieldUnixType1 = extraField.get(EXTRAFIELD_TYPE_UNIX_TYPE1);
5109
+ if (extraFieldUnixType1) {
5110
+ readExtraFieldUnixDates(extraFieldUnixType1, directory);
5111
+ directory.extraFieldUnixType1 = extraFieldUnixType1;
5112
+ }
5087
5113
  const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
5088
5114
  if (extraFieldNTFS) {
5089
5115
  readExtraFieldNTFS(extraFieldNTFS, directory);
@@ -5133,15 +5159,15 @@ function readExtraFieldUnicode(extraFieldUnicode, propertyName, rawPropertyName,
5133
5159
  return;
5134
5160
  }
5135
5161
  const extraFieldView = getDataView(extraFieldUnicode.data);
5136
- const crc32 = new Crc32();
5137
- crc32.append(fileEntry[rawPropertyName]);
5138
- const dataViewSignature = getDataView(new Uint8Array(4));
5139
- dataViewSignature.setUint32(0, crc32.get(), true);
5140
- const signature = getUint32(extraFieldView, 1);
5162
+ const computedCrc32 = new Crc32();
5163
+ computedCrc32.append(fileEntry[rawPropertyName]);
5164
+ const computedCrc32View = getDataView(new Uint8Array(4));
5165
+ computedCrc32View.setUint32(0, computedCrc32.get(), true);
5166
+ const nameCrc32 = getUint32(extraFieldView, 1);
5141
5167
  Object.assign(extraFieldUnicode, {
5142
5168
  version: getUint8(extraFieldView, 0),
5143
5169
  [propertyName]: decodeText(extraFieldUnicode.data.subarray(5)),
5144
- valid: !fileEntry.bitFlag.languageEncodingFlag && signature == getUint32(dataViewSignature, 0)
5170
+ valid: !fileEntry.bitFlag.languageEncodingFlag && nameCrc32 == getUint32(computedCrc32View, 0)
5145
5171
  });
5146
5172
  if (extraFieldUnicode.valid) {
5147
5173
  directory[propertyName] = extraFieldUnicode[propertyName];
@@ -5160,6 +5186,9 @@ function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
5160
5186
  compressionMethod: getUint16(extraFieldView, 5)
5161
5187
  });
5162
5188
  directory.compressionMethod = extraFieldAES.compressionMethod;
5189
+ if (extraFieldAES.vendorVersion != VENDOR_VERSION_AE_1$1) {
5190
+ directory.crc32 = UNDEFINED_VALUE;
5191
+ }
5163
5192
  }
5164
5193
 
5165
5194
  function readExtraFieldNTFS(extraFieldNTFS, directory) {
@@ -5178,27 +5207,39 @@ function readExtraFieldNTFS(extraFieldNTFS, directory) {
5178
5207
  } catch {
5179
5208
  // ignored
5180
5209
  }
5181
- try {
5182
- if (tag1Data && tag1Data.length == 24) {
5183
- const tag1View = getDataView(tag1Data);
5184
- const rawLastModDate = tag1View.getBigUint64(0, true);
5185
- const rawLastAccessDate = tag1View.getBigUint64(8, true);
5186
- const rawCreationDate = tag1View.getBigUint64(16, true);
5187
- Object.assign(extraFieldNTFS, {
5188
- rawLastModDate,
5189
- rawLastAccessDate,
5190
- rawCreationDate
5191
- });
5192
- const lastModDate = getDateNTFS(rawLastModDate);
5193
- const lastAccessDate = getDateNTFS(rawLastAccessDate);
5194
- const creationDate = getDateNTFS(rawCreationDate);
5195
- const extraFieldData = { lastModDate, lastAccessDate, creationDate };
5196
- Object.assign(extraFieldNTFS, extraFieldData);
5197
- Object.assign(directory, extraFieldData);
5198
- }
5199
- } catch {
5200
- // ignored
5210
+ if (tag1Data && tag1Data.length == 24) {
5211
+ const tag1View = getDataView(tag1Data);
5212
+ const rawLastModDate = tag1View.getBigUint64(0, true);
5213
+ const rawLastAccessDate = tag1View.getBigUint64(8, true);
5214
+ const rawCreationDate = tag1View.getBigUint64(16, true);
5215
+ Object.assign(extraFieldNTFS, {
5216
+ rawLastModDate,
5217
+ rawLastAccessDate,
5218
+ rawCreationDate
5219
+ });
5220
+ const lastModDate = getDateNTFS(rawLastModDate);
5221
+ const lastAccessDate = getDateNTFS(rawLastAccessDate);
5222
+ const creationDate = getDateNTFS(rawCreationDate);
5223
+ const extraFieldData = { lastModDate, lastAccessDate, creationDate };
5224
+ Object.assign(extraFieldNTFS, extraFieldData);
5225
+ Object.assign(directory, extraFieldData);
5226
+ }
5227
+ }
5228
+
5229
+ function readExtraFieldUnixDates(extraField, directory) {
5230
+ if (extraField.data.length < 8) {
5231
+ return;
5201
5232
  }
5233
+ const extraFieldView = getDataView(extraField.data);
5234
+ const lastAccessDate = new Date(getUint32(extraFieldView, 0) * 1000);
5235
+ const lastModDate = new Date(getUint32(extraFieldView, 4) * 1000);
5236
+ const extraFieldData = { lastAccessDate, lastModDate };
5237
+ if (extraField.data.length >= 12) {
5238
+ extraFieldData.uid = getUint16(extraFieldView, 8);
5239
+ extraFieldData.gid = getUint16(extraFieldView, 10);
5240
+ }
5241
+ Object.assign(extraField, extraFieldData);
5242
+ Object.assign(directory, extraFieldData);
5202
5243
  }
5203
5244
 
5204
5245
  function readExtraFieldUnix(extraField, directory, isInfoZip) {
@@ -5279,7 +5320,7 @@ async function detectOverlappingEntry({
5279
5320
  fileEntry,
5280
5321
  index,
5281
5322
  offset,
5282
- signature,
5323
+ crc32,
5283
5324
  compressedSize,
5284
5325
  uncompressedSize,
5285
5326
  dataOffset,
@@ -5300,7 +5341,7 @@ async function detectOverlappingEntry({
5300
5341
  const dataDescriptorSignature = dataDescriptorArray.length == dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH &&
5301
5342
  getUint32(getDataView(dataDescriptorArray), 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
5302
5343
  if (dataDescriptorSignature) {
5303
- const readSignature = getUint32(getDataView(dataDescriptorArray), 4);
5344
+ const readCrc32 = getUint32(getDataView(dataDescriptorArray), 4);
5304
5345
  let readCompressedSize;
5305
5346
  let readUncompressedSize;
5306
5347
  if (extraFieldZip64) {
@@ -5310,8 +5351,8 @@ async function detectOverlappingEntry({
5310
5351
  readCompressedSize = getUint32(getDataView(dataDescriptorArray), 8);
5311
5352
  readUncompressedSize = getUint32(getDataView(dataDescriptorArray), 12);
5312
5353
  }
5313
- const matchSignature = (fileEntry.encrypted && !fileEntry.zipCrypto) || readSignature == signature;
5314
- if (matchSignature &&
5354
+ const matchCrc32 = (fileEntry.encrypted && !fileEntry.zipCrypto) || readCrc32 == crc32;
5355
+ if (matchCrc32 &&
5315
5356
  readCompressedSize == compressedSize &&
5316
5357
  readUncompressedSize == uncompressedSize) {
5317
5358
  dataDescriptorLength += DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH;
@@ -5480,11 +5521,11 @@ function checkLocalDirectory(zipEntry, localDirectory, rawLocalFilename) {
5480
5521
  throwAmbiguousArchive("mismatched local file header (compression method)");
5481
5522
  }
5482
5523
  if (!localDirectory.bitFlag.dataDescriptor &&
5483
- (localDirectory.signature || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
5484
- (localDirectory.signature != zipEntry.signature ||
5524
+ (localDirectory.crc32 || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
5525
+ (localDirectory.crc32 != zipEntry.crc32 ||
5485
5526
  localDirectory.compressedSize != zipEntry.compressedSize ||
5486
5527
  localDirectory.uncompressedSize != zipEntry.uncompressedSize)) {
5487
- throwAmbiguousArchive("mismatched local file header (signature or sizes)");
5528
+ throwAmbiguousArchive("mismatched local file header (crc32 or sizes)");
5488
5529
  }
5489
5530
  }
5490
5531
 
@@ -5500,11 +5541,7 @@ function getOptionValue$1(zipReader, options, name) {
5500
5541
 
5501
5542
  function getDate(timeRaw) {
5502
5543
  const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;
5503
- try {
5504
- return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
5505
- } catch {
5506
- // ignored
5507
- }
5544
+ return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
5508
5545
  }
5509
5546
 
5510
5547
  function getDateNTFS(timeRaw) {
@@ -5537,7 +5574,9 @@ var zipReader = /*#__PURE__*/Object.freeze({
5537
5574
  ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5538
5575
  ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5539
5576
  ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
5577
+ ERR_INVALID_AUTHENTICATION_CODE: ERR_INVALID_AUTHENTICATION_CODE,
5540
5578
  ERR_INVALID_COMPRESSED_DATA: ERR_INVALID_COMPRESSED_DATA,
5579
+ ERR_INVALID_CRC32: ERR_INVALID_CRC32,
5541
5580
  ERR_INVALID_PASSWORD: ERR_INVALID_PASSWORD,
5542
5581
  ERR_INVALID_SIGNATURE: ERR_INVALID_SIGNATURE,
5543
5582
  ERR_INVALID_UNCOMPRESSED_SIZE: ERR_INVALID_UNCOMPRESSED_SIZE,
@@ -5591,6 +5630,8 @@ const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
5591
5630
  const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
5592
5631
  const MIN_UNIX_TIME = -2147483648;
5593
5632
  const MAX_UNIX_TIME = 2147483647;
5633
+ const MIN_NTFS_TIME = BigInt(0);
5634
+ const MAX_NTFS_TIME = BigInt("0x7fffffffffffffff");
5594
5635
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (set the 'zip64' option to 'true')";
5595
5636
  const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
5596
5637
  const ERR_UNDEFINED_READER = "Undefined reader";
@@ -5604,7 +5645,9 @@ const ERR_INVALID_MSDOS_ATTRIBUTES = "Invalid msdosAttributesRaw (must be intege
5604
5645
  const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
5605
5646
 
5606
5647
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
5607
- const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
5648
+ const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
5649
+ const VENDOR_VERSION_AE_1 = 1;
5650
+ const INFOZIP_EXTRA_FIELD_TYPE$1 = "infozip";
5608
5651
  const UNIX_EXTRA_FIELD_TYPE = "unix";
5609
5652
 
5610
5653
  let workers = 0;
@@ -5698,9 +5741,9 @@ class ZipWriter {
5698
5741
  zip64UncompressedSize,
5699
5742
  extraFieldLength
5700
5743
  });
5701
- const { signature } = entry;
5702
- if (signature !== UNDEFINED_VALUE) {
5703
- setUint32(headerView, HEADER_OFFSET_SIGNATURE, signature);
5744
+ const { crc32 } = entry;
5745
+ if (crc32 !== UNDEFINED_VALUE) {
5746
+ setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
5704
5747
  }
5705
5748
  Object.assign(entry, {
5706
5749
  zip64UncompressedSize,
@@ -5885,6 +5928,7 @@ async function addFile(zipWriter, name, reader, options) {
5885
5928
  internalFileAttribute: metadataInfo.resolvedOptions.internalFileAttributes,
5886
5929
  externalFileAttribute: attributesInfo.resolvedOptions.externalFileAttributes,
5887
5930
  signature: options[PROPERTY_NAME_SIGNATURE],
5931
+ crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
5888
5932
  offset: zipWriter.offset - diskOffset,
5889
5933
  diskNumberStart: diskNumber
5890
5934
  });
@@ -5921,7 +5965,7 @@ function resolveAttributes(zipWriter, name, options) {
5921
5965
  if (unixMode !== UNDEFINED_VALUE && (unixMode < 0 || unixMode > MAX_16_BITS)) {
5922
5966
  throw new Error(ERR_INVALID_UNIX_MODE);
5923
5967
  }
5924
- if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
5968
+ if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE$1 && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
5925
5969
  throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
5926
5970
  }
5927
5971
  if (unixExtraFieldType === UNIX_EXTRA_FIELD_TYPE &&
@@ -5929,7 +5973,7 @@ function resolveAttributes(zipWriter, name, options) {
5929
5973
  throw new Error(ERR_INVALID_UNIX_ID_SIZE);
5930
5974
  }
5931
5975
  if (unixExtraFieldType === UNDEFINED_VALUE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
5932
- unixExtraFieldType = INFOZIP_EXTRA_FIELD_TYPE;
5976
+ unixExtraFieldType = INFOZIP_EXTRA_FIELD_TYPE$1;
5933
5977
  }
5934
5978
  let msdosAttributesRaw = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);
5935
5979
  let msdosAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES);
@@ -6101,27 +6145,8 @@ function resolveMetadata(zipWriter, name, options) {
6101
6145
  if (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {
6102
6146
  throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
6103
6147
  }
6104
- let rawExtraField = EMPTY_UINT8_ARRAY;
6105
- const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
6106
- if (extraField) {
6107
- let extraFieldSize = 0;
6108
- let offset = 0;
6109
- extraField.forEach(data => extraFieldSize += 4 + getLength(data));
6110
- rawExtraField = new Uint8Array(extraFieldSize);
6111
- const rawExtraFieldView = getDataView(rawExtraField);
6112
- extraField.forEach((data, type) => {
6113
- if (type > MAX_16_BITS) {
6114
- throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
6115
- }
6116
- if (getLength(data) > MAX_16_BITS) {
6117
- throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6118
- }
6119
- setUint16(rawExtraFieldView, offset, type);
6120
- setUint16(rawExtraFieldView, offset + 2, getLength(data));
6121
- arraySet(rawExtraField, data, offset + 4);
6122
- offset += 4 + getLength(data);
6123
- });
6124
- }
6148
+ const rawExtraField = serializeExtraField(options[PROPERTY_NAME_EXTRA_FIELD]);
6149
+ const rawLocalExtraField = serializeExtraField(options[OPTION_LOCAL_EXTRA_FIELD]);
6125
6150
  return {
6126
6151
  comment,
6127
6152
  resolvedOptions: {
@@ -6155,11 +6180,36 @@ function resolveMetadata(zipWriter, name, options) {
6155
6180
  useCompressionStream,
6156
6181
  dataDescriptor,
6157
6182
  zip64,
6158
- rawExtraField
6183
+ rawExtraField,
6184
+ rawLocalExtraField
6159
6185
  }
6160
6186
  };
6161
6187
  }
6162
6188
 
6189
+ function serializeExtraField(extraField) {
6190
+ if (!extraField) {
6191
+ return EMPTY_UINT8_ARRAY;
6192
+ }
6193
+ let extraFieldSize = 0;
6194
+ let offset = 0;
6195
+ extraField.forEach(data => extraFieldSize += 4 + getLength(data));
6196
+ const rawExtraField = new Uint8Array(extraFieldSize);
6197
+ const rawExtraFieldView = getDataView(rawExtraField);
6198
+ extraField.forEach((data, type) => {
6199
+ if (type > MAX_16_BITS) {
6200
+ throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
6201
+ }
6202
+ if (getLength(data) > MAX_16_BITS) {
6203
+ throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6204
+ }
6205
+ setUint16(rawExtraFieldView, offset, type);
6206
+ setUint16(rawExtraFieldView, offset + 2, getLength(data));
6207
+ arraySet(rawExtraField, data, offset + 4);
6208
+ offset += 4 + getLength(data);
6209
+ });
6210
+ return rawExtraField;
6211
+ }
6212
+
6163
6213
  async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, options) {
6164
6214
  const { passThrough, zipCrypto, password, rawPassword, encryptionStrength } = metadata;
6165
6215
  let { dataDescriptor, zip64, level, compressionMethod } = metadata;
@@ -6484,7 +6534,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6484
6534
  msdosAttributes
6485
6535
  };
6486
6536
  let {
6487
- signature,
6537
+ crc32,
6488
6538
  uncompressedSize
6489
6539
  } = options;
6490
6540
  let compressedSize = 0;
@@ -6504,7 +6554,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6504
6554
  encryptionStrength,
6505
6555
  zipCrypto: encrypted && zipCrypto,
6506
6556
  passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
6507
- signed: !passThrough,
6557
+ computeCrc32: !passThrough,
6508
6558
  compressed: compressed && !passThrough,
6509
6559
  encrypted: encrypted && !passThrough,
6510
6560
  useWebWorkers,
@@ -6523,7 +6573,9 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6523
6573
  writer.size += compressedSize;
6524
6574
  if (!passThrough) {
6525
6575
  uncompressedSize = result.inputSize;
6526
- signature = result.signature;
6576
+ if (!encrypted || zipCrypto) {
6577
+ crc32 = result.crc32;
6578
+ }
6527
6579
  }
6528
6580
  if ((!zip64CompressedSize && compressedSize >= MAX_32_BITS) ||
6529
6581
  (!zip64UncompressedSize && uncompressedSize >= MAX_32_BITS)) {
@@ -6538,7 +6590,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6538
6590
 
6539
6591
  }
6540
6592
  setEntryInfo({
6541
- signature,
6593
+ crc32,
6542
6594
  compressedSize,
6543
6595
  uncompressedSize,
6544
6596
  headerInfo,
@@ -6561,7 +6613,8 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6561
6613
  version,
6562
6614
  headerArray,
6563
6615
  headerView,
6564
- signature,
6616
+ signature: crc32,
6617
+ crc32: encrypted && !zipCrypto && !passThrough ? UNDEFINED_VALUE : crc32,
6565
6618
  extraFieldExtendedTimestampFlag,
6566
6619
  zip64UncompressedSize,
6567
6620
  zip64CompressedSize
@@ -6582,6 +6635,7 @@ function getHeaderInfo(options) {
6582
6635
  dataDescriptor,
6583
6636
  directory,
6584
6637
  rawExtraField,
6638
+ rawLocalExtraField,
6585
6639
  encryptionStrength,
6586
6640
  extendedTimestamp,
6587
6641
  ntfsTimestamp,
@@ -6589,7 +6643,8 @@ function getHeaderInfo(options) {
6589
6643
  encrypted,
6590
6644
  zip64UncompressedSize,
6591
6645
  zip64CompressedSize,
6592
- uncompressedSize
6646
+ uncompressedSize,
6647
+ crc32
6593
6648
  } = options;
6594
6649
  let { version, compressionMethod } = options;
6595
6650
  const compressed = !directory && (compressionMethod === UNDEFINED_VALUE
@@ -6662,8 +6717,8 @@ function getHeaderInfo(options) {
6662
6717
  extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS_TAG1);
6663
6718
  extraFieldNTFS.uint16(24);
6664
6719
  extraFieldNTFS.uint64(lastModTimeNTFS);
6665
- extraFieldNTFS.uint64(getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
6666
- extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
6720
+ extraFieldNTFS.uint64(lastAccessDate ? getTimeNTFS(lastAccessDate) : lastModTimeNTFS);
6721
+ extraFieldNTFS.uint64(creationDate ? getTimeNTFS(creationDate) : lastModTimeNTFS);
6667
6722
  rawExtraFieldNTFS = extraFieldNTFS.array;
6668
6723
  } catch {
6669
6724
  rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
@@ -6677,7 +6732,7 @@ function getHeaderInfo(options) {
6677
6732
  let rawExtraFieldUnix;
6678
6733
  try {
6679
6734
  const { uid, gid, unixExtraFieldType } = options;
6680
- if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
6735
+ if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE$1 && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
6681
6736
  const uidBytes = packUnixId(uid);
6682
6737
  const gidBytes = packUnixId(gid);
6683
6738
  const payloadLength = 3 + uidBytes.length + gidBytes.length;
@@ -6715,15 +6770,18 @@ function getHeaderInfo(options) {
6715
6770
  }
6716
6771
  if (encrypted && !zipCrypto) {
6717
6772
  version = version > VERSION_AES ? version : VERSION_AES;
6773
+ if (passThrough && crc32 !== UNDEFINED_VALUE) {
6774
+ rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
6775
+ }
6718
6776
  rawExtraFieldAES[9] = compressionMethod;
6719
6777
  compressionMethod = COMPRESSION_METHOD_AES;
6720
6778
  }
6721
6779
  const localExtraFieldZip64Length = writeLocalExtraFieldZip64 ? getLength(rawLocalExtraFieldZip64) : 0;
6722
- const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
6780
+ const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawLocalExtraField);
6723
6781
  if (extraFieldLength > MAX_16_BITS) {
6724
6782
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6725
6783
  }
6726
- const dosLastModDate = new Date(Math.ceil(lastModDate.getTime() / 2000) * 2000);
6784
+ const dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
6727
6785
  const {
6728
6786
  headerArray,
6729
6787
  headerView,
@@ -6753,6 +6811,7 @@ function getHeaderInfo(options) {
6753
6811
  localHeader.bytes(rawExtraFieldNTFS);
6754
6812
  localHeader.bytes(rawExtraFieldUnix);
6755
6813
  localHeader.bytes(rawExtraField);
6814
+ localHeader.bytes(rawLocalExtraField);
6756
6815
  if (dataDescriptor) {
6757
6816
  if (!zip64CompressedSize) {
6758
6817
  setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + LOCAL_HEADER_COMMON_OFFSET, 0);
@@ -6871,7 +6930,7 @@ function getDataDescriptorInfo({
6871
6930
  }
6872
6931
 
6873
6932
  function setEntryInfo({
6874
- signature,
6933
+ crc32,
6875
6934
  compressedSize,
6876
6935
  uncompressedSize,
6877
6936
  headerInfo,
@@ -6879,6 +6938,7 @@ function setEntryInfo({
6879
6938
  }, {
6880
6939
  zip64,
6881
6940
  zipCrypto,
6941
+ passThrough,
6882
6942
  dataDescriptor
6883
6943
  }) {
6884
6944
  const {
@@ -6889,10 +6949,10 @@ function setEntryInfo({
6889
6949
  dataDescriptorView,
6890
6950
  dataDescriptorOffset
6891
6951
  } = dataDescriptorInfo;
6892
- if ((!encrypted || zipCrypto) && signature !== UNDEFINED_VALUE) {
6893
- setUint32(headerView, HEADER_OFFSET_SIGNATURE, signature);
6952
+ if ((!encrypted || zipCrypto || passThrough) && crc32 !== UNDEFINED_VALUE) {
6953
+ setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
6894
6954
  if (dataDescriptor) {
6895
- setUint32(dataDescriptorView, dataDescriptorOffset, signature);
6955
+ setUint32(dataDescriptorView, dataDescriptorOffset, crc32);
6896
6956
  }
6897
6957
  }
6898
6958
  if (zip64) {
@@ -6915,15 +6975,15 @@ function updateLocalHeader({
6915
6975
  encrypted,
6916
6976
  zip64,
6917
6977
  localExtraFieldZip64Length,
6918
- signature,
6978
+ crc32,
6919
6979
  compressedSize,
6920
6980
  uncompressedSize,
6921
6981
  zip64UncompressedSize,
6922
6982
  zip64CompressedSize
6923
- }, localHeaderView, { dataDescriptor }) {
6983
+ }, localHeaderView, { dataDescriptor, passThrough }) {
6924
6984
  if (!dataDescriptor) {
6925
- if (!encrypted) {
6926
- setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET, signature);
6985
+ if (!encrypted || (passThrough && crc32 !== UNDEFINED_VALUE)) {
6986
+ setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET, crc32);
6927
6987
  }
6928
6988
  if (!zip64CompressedSize) {
6929
6989
  setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + LOCAL_HEADER_COMMON_OFFSET, compressedSize);
@@ -7232,7 +7292,8 @@ async function flushBufferedData(readable, writer, signal, onChunkWritten) {
7232
7292
 
7233
7293
  function getTimeNTFS(date) {
7234
7294
  if (date) {
7235
- return ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));
7295
+ const timeNTFS = ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));
7296
+ return timeNTFS < MIN_NTFS_TIME ? MIN_NTFS_TIME : timeNTFS > MAX_NTFS_TIME ? MAX_NTFS_TIME : timeNTFS;
7236
7297
  }
7237
7298
  }
7238
7299
 
@@ -7891,6 +7952,20 @@ setDefaultConfiguration({
7891
7952
 
7892
7953
  const ERR_ENTRY_EXISTS = "Entry filename already exists";
7893
7954
  const ERR_READABLE_CONSUMED = "Readable stream already consumed";
7955
+ const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
7956
+ const INTERPRETED_EXTRA_FIELD_TYPES = new Set([
7957
+ EXTRAFIELD_TYPE_ZIP64,
7958
+ EXTRAFIELD_TYPE_AES,
7959
+ EXTRAFIELD_TYPE_NTFS,
7960
+ EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,
7961
+ EXTRAFIELD_TYPE_UNICODE_PATH,
7962
+ EXTRAFIELD_TYPE_UNICODE_COMMENT,
7963
+ EXTRAFIELD_TYPE_USDZ,
7964
+ EXTRAFIELD_TYPE_INFOZIP,
7965
+ EXTRAFIELD_TYPE_UNIX,
7966
+ EXTRAFIELD_TYPE_UNIX_TYPE1,
7967
+ EXTRAFIELD_TYPE_PKWARE_UNIX
7968
+ ]);
7894
7969
 
7895
7970
  class ZipEntry {
7896
7971
 
@@ -8628,6 +8703,20 @@ function detach(entry) {
8628
8703
  }
8629
8704
  }
8630
8705
 
8706
+ function getUserExtraField(extraField) {
8707
+ if (extraField) {
8708
+ const userExtraField = new Map();
8709
+ extraField.forEach((field, type) => {
8710
+ if (!INTERPRETED_EXTRA_FIELD_TYPES.has(type)) {
8711
+ userExtraField.set(type, field.data);
8712
+ }
8713
+ });
8714
+ if (userExtraField.size) {
8715
+ return userExtraField;
8716
+ }
8717
+ }
8718
+ }
8719
+
8631
8720
  async function exportZip(zipWriter, entry, totalSize, options, readers) {
8632
8721
  const selectedEntry = entry;
8633
8722
  const entryOffsets = new Map();
@@ -8665,9 +8754,13 @@ async function exportZip(zipWriter, entry, totalSize, options, readers) {
8665
8754
  uncompressedSize,
8666
8755
  encrypted,
8667
8756
  zipCrypto,
8668
- signature,
8757
+ crc32,
8669
8758
  compressionMethod,
8670
- extraFieldAES
8759
+ extraFieldAES,
8760
+ internalFileAttributes,
8761
+ extraField,
8762
+ uid,
8763
+ gid
8671
8764
  } = child.data;
8672
8765
  zipEntryOptions = {
8673
8766
  externalFileAttributes,
@@ -8675,8 +8768,20 @@ async function exportZip(zipWriter, entry, totalSize, options, readers) {
8675
8768
  comment,
8676
8769
  lastModDate,
8677
8770
  creationDate,
8678
- lastAccessDate
8771
+ lastAccessDate,
8772
+ internalFileAttributes
8679
8773
  };
8774
+ const userExtraField = getUserExtraField(extraField);
8775
+ if (userExtraField) {
8776
+ zipEntryOptions.extraField = userExtraField;
8777
+ }
8778
+ if (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE) {
8779
+ Object.assign(zipEntryOptions, {
8780
+ uid,
8781
+ gid,
8782
+ unixExtraFieldType: options.unixExtraFieldType || INFOZIP_EXTRA_FIELD_TYPE
8783
+ });
8784
+ }
8680
8785
  if (child.passThrough) {
8681
8786
  let level, encryptionStrength;
8682
8787
  if (compressionMethod === 0) {
@@ -8689,7 +8794,7 @@ async function exportZip(zipWriter, entry, totalSize, options, readers) {
8689
8794
  passThrough: true,
8690
8795
  encrypted,
8691
8796
  zipCrypto,
8692
- signature,
8797
+ crc32,
8693
8798
  uncompressedSize,
8694
8799
  level,
8695
8800
  encryptionStrength,
@@ -8876,6 +8981,8 @@ function addChild(parent, name, params, directory) {
8876
8981
  }
8877
8982
  }
8878
8983
 
8984
+ const encodedMimeTypes = "application:0andrew-inset ez,2nodex anx,1pplixware aw,1tom!,4cat!,4serv! atomsrv,5vc!,0bbolin lin,0ccxml!,1dmi-capability cdmia,6ontainer cdmic,5domain cdmid,5object cdmio,5queue cdmiq,1u-seeme cu,0davmount!,1ocbook! dbk,1sptype tsp,2sc+der,4! xdssc,0ecmascript es ecma,1mma!,1nvoy evy,1pub+zip,1xi,0font-tdpfr pfr,1ractals fif,1uturesplash spl,0gml!,1px!,1xf,1zip gz tgz,0hta,1yperstudio stk,0inkml! ink inkml,2ternet-property-stream acx,1pfix,0java-archive jar,5serialized-object ser,5vm class,1sonml+json,0lost! lostxml,0m3g,1ac-binhex40 hqx,2ds!,2rc mrc,4xml! mrcx,2thematica nb ma mb,4ml! mathml mml,1box,1ediaservercontrol! mscml,2talink!,84! meta4,3s!,1ods!,1p21 m21 mp21,24 mp4s,1saccess mdb,2word doc dot wiz,1xf,0oda,1ebps-package! opf,1gg ogx,1lescript axs,1mdoc!,1nenote onetoc onetoc2 onetmp onepkg,1xps,0patch-ops-error! xer,1df,1gp-encrypted pgp,4keys key,4signature asc sig,1ics-rules prf,1kcs10 p10,47-mime p7m p7c,6signature p7s,48 p8,2ix-attr-cert ac,5crl crl,5pkipath pkipath,4cmp pki,1ls!,1ostscript ps ai eps epsi epsf eps2 eps3,1rs.cww cww,1skc! pskcxml,0rar,1df!,1eginfo! rif,2lax-ng-compact-syntax rnc,2source-lists! rl,e-diff! rld,1ls-services! rs,1pki-ghostbusters gbr,5manifest mft,5roa roa,1sd!,2s!,1tf,0sbml!,1cvp-cv-request scq,asponse scs,5vp-request spq,asponse spp,1dp,1et-payment-initiation setpay,4registration-initiation setreg,1hf!,1mil! smi smil,1parql-query rq,7results! srx,1rgs gram,4! grxml,2u!,1sdl!,2ml!,0tei! tei teicorpus,1hraud! tfi,1imestamped-data tsd,0vnd.3gpp.pic-bw-large plb,gsmall psb,gvar pvb,82.tcap tcap,5m.post-it-notes pwn,4accpac.simply.aso aso,iimp imp,6ucobol acu,9rp atc acutc,5dobe.air-application-installer-package+zip air,aformscentral.fcdt fcdt,bxp fxp fxpl,axdp! xdp,bfdf xfdf,5head.space ahead,5irzip.filesecure.azf azf,os azs,5mazon.ebook azw,6ericandynamics.acc acc,6iga.ami ami,5ndroid.package-archive apk,6ser-web-certificate-issue-initiation cii,efunds-transfer-initiation fti,6tix.game-component atx,5pple.installer! mpkg,ampegurl m3u8,5ristanetworks.swi swi,5straea-software.iota iota,5udiograph aep,4blueice.multipass mpm,5mi bmi,5usinessobjects rep,4chemdraw! cdxml,6ipnuts.karaoke-mmd mmd,5inderella cdy,5laymore cla,6oanto.rp9 rp9,7nk.c4group c4g c4d c4f c4p c4u,6uetrust.cartomobile-config c11amc,w-pkg c11amz,5ommonspace csp,6ntact.cmsg cdbcmsg,6smocaller cmc,5rick.clicker clkx,h.keyboard clkk,ipalette clkp,itemplate clkt,iwordbank clkw,7ticaltools.wbs! wbs,5tc-posml pml,5ups-ppd ppd,6rl.car car,9pcurl pcurl,4dart dart,6ta-vision.rdz rdz,5ebian.binary-package deb udeb,6ce.data uvf uvvf uvd uvvd,9ttml! uvt uvvt,9unspecified uvx uvvx,9zip uvz uvvz,6novo.fcselayout-link fe_launch,5na dna,5olby.mlp mlp,5pgraph dpg,5reamfactory dfac,5s-keypoint kpxx,5vb.ait ait,8service svc,5ynageo geo,4ecowin.chart mag,5nliven nml,5pson.esf esf,amsf msf,aquickanime qam,asalt slt,bsf ssf,5szigno3! es3 et3,5zpix-album ez2,apackage ez3,4fdf fdf,6sn.mseed mseed,9seed seed dataless,5lographit gph,6uxtime.clip ftc,5ramemaker fm frame maker book,6ogans.fnc fnc,cltf ltf,5sc.weblaunch fsc,5ujitsu.oasys oas,h2 oa2,h3 oa3,hgp fg5,hprs bh2,8xerox.ddd ddd,focuworks xdw,n.binder xbd,6zzysheet fzs,4genomatix.tuxedo txd,6ogebra.file ggb,dtool ggt,7metry-explorer gex gre,7next gxt,7plan g2w,7space g3w,5mx gmx,5oogle-earth.kml! kml,jz kmz,5rafeq gqf gqs,6oove-account gac,bhelp ghf,bidentity-message gim,cnjector grv,btool-message gtm,gtemplate tpl,bvcard vcg,4hal! hal,6ndheld-entertainment! zmm,5bci hbci,5he.lesson-player les,5p-hpgl hpgl,9id hpid,9s hps,7jlyt jlt,7pcl pcl,axl pclxl,5ydrostatix.sof-data sfd-hdstx,5zn-3d-crossword x3d,4ibm.minipay mpy,9odcap afp listafp list3820,8rights-management irm,8secure-container sc,5ccprofile icc icm,5gloader igl,5mmervision-ivp ivp,iu ivu,5nsors.igm igm,6tercon.formnet xpw xpx,9geo i2g,7u.qbo qbo,afx qfx,5punplugged.rcprofile rcprofile,5repository.package! irp,5s-xpr xpr,6ac.fcs fcs,4jam jam,5cp.javame.midlet-rms rms,5isp jisp,5oost.joda-archive joda,4kahootz ktz ktr,5de.karbon karbon,9chart chrt,9formula kfo,9ivio flw,9ontour kon,9presenter kpr kpt,9spread ksp,9word kwd kwt,5enameaapp htke,5idspiration kia,6nar kne knp,5oan skp skd skt skm,6dak-descriptor sse,4las.las! lasxml,5lamagraphics.life-balance.desktop lbd,vexchange! lbe,5otus-1-2-3 123,aapproach apr,afreelance pre,anotes nsf,aorganizer org,ascreencam scm,awordpro lwp,4macports.portpkg portpkg,5cd mcd,5edcalcdata mc1,7iastation.cdkey cdkey,5fer mwf,6mp mfm,5icrografx.flo flo,figx igx,6f mif,5obius.daf daf,cis dis,bmbk mbk,cqy mqy,csl msl,bplc plc,btxf txf,6phun.application mpn,bcertificate mpc,6zilla.xul! xul,5s-artgalry cil,7cab-compressed cab,7excel xls xlb xlt xlm xla xlc xlw,c.addin.macroenabled.12 xlam,dsheet.binary.macroenabled.12 xlsb,jmacroenabled.12 xlsm,dtemplate.macroenabled.12 xltm,7fontobject eot,7htmlhelp chm,7ims ims,7lrm lrm,7officetheme thmx,8utlook msg,7pki.seccat cat,ctl stl,acertstore sst,8owerpoint ppt pps pot ppa pwz,h.addin.macroenabled.12 ppam,ipresentation.macroenabled.12 pptm,islide.macroenabled.12 sldm,nshow.macroenabled.12 ppsm,itemplate.macroenabled.12 potm,8roject mpp mpt,7word.document.macroenabled.12 docm,ctemplate.macroenabled.12 dotm,aks wps wks wcm wdb,8pl wpl,7xpsdocument xps,6eq mseq,5usician mus,6vee.style msty,5ynfc taglet,4neurolanguage.nlu nlu,5itf ntf nitf,5oblenet-directory nnd,dsealer nns,dweb nnw,6kia.n-gage.data ngdat,hsymbian.install n-gage,aradio-preset rpst,ms rpss,6vadigm.edm edm,fx edx,ext ext,4oasis.opendocument.chart odc,s-template otc,ndatabase odb,nformula odf,u-template odft,ngraphics odg,v-template otg,nimage odi,s-template oti,npresentation odp,z-template otp,nspreadsheet ods,y-template ots,ntext odt,r-master odm otm,stemplate ott,sweb oth,5lpc-sugar xo,5ma.dd2! dd2,5penofficeorg.extension oxt,8xmlformats-officedocument.presentationml.presentation pptx,zresentationml.slide sldx,zresentationml.slideshow ppsx,zresentationml.template potx,yspreadsheetml.sheet xlsx,zpreadsheetml.template xltx,ywordprocessingml.document docx,zordprocessingml.template dotx,5sgeo.mapguide.package mgp,7i.dp dp,9subsystem esa,4palm pdb pqa oprc,6waafile paw,5g.format str,7osasli ei6,5icsel efif,5mi.widget wg,5ocketlearn plf,6werbuilder6 pbd,5reviewsystems.box box,6oteus.magazine mgz,5ublishare-delta-tree qps,5vi.ptid1 ptid,4quark.quarkxpress qxd qxt qwd qwt qxl qxb,4realvnc.bed bed,6cordare.musicxml mxl,m! musicxml,5ig.cryptonote cryptonote,5n-realmedia rm,g-vbr rmvb,5oute66.link66! link66,4sailingtracker.track st,5eemail see,6ma sema,7d semd,7f semf,5hana.informed.formdata ifm,ntemplate itp,jinterchange iif,jpackage ipk,5imtech-mindmapper twd twds,5maf mmf,7rt.teacher teacher,5olent.sdkm! sdkm sdkd,5potfire.dxp dxp,dsfs sfs,5qlite3 db sqlite sqlite3 db-wal sqlite-wal db-shm sqlite-shm,5tardivision.calc sdc,ihart sds,hdraw sda,himpress sdd,hmath sdf smf,hwriter sdw vor,n-global sgl,6epmania.package smzip,estepchart sm,5un.xml.calc sxc,g.template stc,cdraw sxd,g.template std,cimpress sxi,j.template sti,cmath sxm,cwriter sxw,i.global sxg,jtemplate stw,6s-calendar sus susp,5vd svd,5ymbian.install sis sisx,6ncml! xsm,a.dm+wbxml bdm,d! xdm,4tao.intent-module-archive tao,5cpdump.pcap pcap cap dmp,5mobile-livetv tmo,5rid.tpt tpt,7scape.mxs mxs,6ueapp tra,4ufdl ufd ufdl,5iq.theme utz,5majin umj,5nity unityweb,5oml! uoml,4vcx vcx,5isio vsd vst vss vsw vsdx vssx vstx vssm vstm,9nary vis,5sf vsf,4wap.sic sic,9lc slc,8wbxml wbxml,9mlc wmlc,bscriptc wmlsc,5ebturbo wtb,5olfram.player nbp,6rdperfect wpd,f5.1 wp5,5qd wqd,5t.stf stf,4xara xar,5fdl xfdl,4yamaha.hv-dic hvd,escript hvs,evoice hvp,bopenscoreformat osf,q.osfpvg! osfpvg,bsmaf-audio saf,gphrase spf,5ellowriver-custom-menu cmp,4zul zir zirz,5zazz.deck! zaz,1oicexml! vxml,0widget wgt,2nhlp hlp,1sdl!,2policy!,0x-123 wk,27z-compressed 7z,2abiword abw,3ce-compressed ace,3pple-diskimage dmg,3uthorware-bin aab x32 u32 vox,dmap aam,dseg aas,2bcpio bcpio,3ittorrent torrent,3lorb blb blorb,3zip bz,62 bz2 boz,2cbr cbr cba cbt cb7,4z cbz,3df cdf cda,4link vcd,3fs-compressed cfs,3hat chat,4ess-pgn pgn,3ompress z,4nference nsc,3pio cpio,3sh csh,2dgc-compressed dgc,3irector dir dxr cst cct cxt w3d fgd swa,3ms dms,3oom wad,3tbncx! ncx,5ook! dtb,5resource! res,3vi dvi,2eva eva,2font-bdf bdf,7ghostscript gsf,7linux-psf psf,7pcf pcf,7snf snf,7ttf ttf ttc,8ype1 pfa pfb pfm afm,3reearc arc,6mind mm,2gca-compressed gca,3lulx ulx,3numeric gnumeric,3o-sgf sgf,3ramps-xml gramps,5phing-calculator gcf,3tar gtar taz,2hdf hdf,3ttpd-eruby rhtml,8php phtml pht php,b-source phps,b3 php3,c-preprocessed php3p,b4 php4,b5 php5,2ica ica,3nfo info,4stall-instructions install,4ternet-signup ins isp,3phone iii,3so9660-image iso,2java-jnlp-file jnlp,3mol jmz,2killustrator kil,3rita kra krz,2latex latex,3yx lyx,3zh-compressed lzh lha,4x lzx,2maker frm fb fbdoc,3ie mie,3obipocket-ebook prc mobi,3s-application application,5installer msi,5shortcut lnk,5wmd wmd,5xbap xbap,4binder obd,4cardfile crd,5lip clp,4dos-program com exe bat dll,4mediaview mvb m13 m14,6tafile wmf wmz emf emz,5oney mny,4publisher pub,4schedule scd,4terminal trm,4write wri,2netcdf nc,3s-proxy-autoconfig pac dat,3wc nwc,3zb nzb,2object o,3z-application oza,2perfmon pma pmc pmr pmw,5l pm pl,3kcs12 p12 pfx,67-certificates p7b spc,creqresp p7r,3ython-code pyc pyo,2qgis qgs shp shx,3uicktimeplayer qtl,2redhat-package-manager rpm rpa,4search-info-systems ris,3uby rb,2sh sh,4ar shar,4ockwave-flash swf swfl,3ilverlight scr,d-app xap,3ql sql,3tuffit sit,9x sitx,3ubrip srt,3v4cpio sv4cpio,6rc sv4crc,2t3vm-image t3,3ar tar,3ex-gf gf,6pk pk,6tfm tfm,5info texinfo texi,3gif obj,3rash ~ % bak old sik,2ustar ustar,2wais-source src,3ingz wz,2x509-ca-cert crt der cer,3cf xcf,3fig fig,3liff! xlf,3pinstall xpi,3z xz,2zmachine z1 z2 z3 z4 z5 z6 z7 z8,1aml!,1cap-diff! xdf,1enc!,1html! xhtml xht,1ml xml xsl xsd xpdl,3-dtd dtd,1op!,1proc! xpl,1slt!,2pf!,1v! mxml xhvml xvml xvm,0yaml yaml yml,2ng,1in!,1nd.ms-pkipko pko,0zip;audio:0aac,1dpcm adp,1iff aiff aif aff,1mr,3-wb awb,1nnodex axa,0basic au snd,0flac,0midi mid midi kar rmi,1p4 mp4a,2eg mpga mpega mp3 m4a mp2a m2a m3a,4url m3u,0ogg oga ogg spx,1pus,0prs.sid sid,0s3m,1ilk sil,0vnd.dece.audio uva uvva,5igital-winds eol,5ra dra,5ts dts,7.hd dtshd,4lucent.voice lvp,4ms-playready.media.pya pya,4nuera.ecelp4800 ecelp4800,f7470 ecelp7470,f9600 ecelp9600,4rip rip,0wav,1ebm weba,0x-aiff aifc,2caf caf,2gsm gsm,2matroska mka,3s-wax wax,6ma wma,2pn-realaudio ram,e-plugin rmp,2realaudio ra,2sd2 sd2,1m;chemical:0x-alchemy alc,2cache cac cache,7-csf csf,5tvs-binary cbin cascii ctab,3dx cdx,3hem3d c3d,3if cif,3mdf cmdf,4l cml,3ompass cpa,3rossfire bsd,3sml csml csm,3tx ctx,3xf cxf cef,2embl-dl-nucleotide emb embl,2gamess-input inp gam gamin,4ussian-checkpoint fch fchk,cube cub,binput gau gjc gjf,blog gal,3cg8-sequence gcg,3enbank gen,2hin hin,2isostar istr ist,2jcamp-dx jdx dx,2kinemage kin,2macmolecule mcm,5romodel-input mmod,3dl-molfile mol,6rdfile rd,7xnfile rxn,6sdfile sd,6tgf tgf,3mcif mcif,3ol2 mol2,5conn-Z b,4pac-graph gpt,8input mop mopcrt zmt,8out moo,2ncbi-asn1 asn,b-ascii prt ent,cbinary val,2rosdal ros,2swissprot sw,2vamas-iso14976 vms,3md vmd,2xtel xtel,3yz xyz;font:0otf,0woff,42;image:0avif avif avifs,0bmp,0cgm,1is-cod cod,0g3fax g3,1if,0heic heif heic,0ief,0jpeg jpeg jpg jpe jfif jfif-tbnl jif,0ktx,0pcx,1jpeg pjpg,1ng,1rs.btif btif,0sgi,1vg! svg svgz,0tiff tiff tif,0vnd.adobe.photoshop psd,4dece.graphic uvi uvvi uvg uvvg,5jvu djvu djv,5wg dwg,5xf dxf,4fastbidsheet fbs,5px fpx,5st fst,5ujixerox.edmics-mmr mmr,lrlc rlc,4ms-modi mdi,7photo wdp,4net-fpx npx,4wap.wbmp wbmp,4xiff xif,0webp,0x-3ds 3ds,2adobe-dng dng,2canon-cr2 cr2,aw crw,3mu-raster ras,4x cmx,3oreldraw cdr,bpattern pat,btemplate cdt,7photopaint cpt,2epson-erf erf,2freehand fh fhc fh4 fh5 fh7,3uji-raf raf,2icns icns,4on ico,2jg art,3ng jng,2kodak-dcr dcr,8k25 k25,9dc kdc,2minolta-mrw mrw,2nikon-nef nef,2olympus-orf orf,2panasonic-raw raw rw2 rwl,3entax-pef pef ptx,3ict pic pct,3ortable-anymap pnm,bbitmap pbm,bgraymap pgm,bpixmap ppm,2rgb rgb,2sigma-x3f x3f,3ony-arw arw,7sr2 sr2,9f srf,2tga tga,2xbitmap xbm,3pixmap xpm,3windowdump xwd;message:0rfc822 eml mime mht mhtml nws;model:0iges igs iges,0mesh msh mesh silo,0vnd.collada! dae,4dwf dwf,4gdl gdl,5tw gtw,4mts mts,4usdz+zip usdz,4vtu vtu,1rml wrl vrml,0x3d+binary x3db x3dbz,4vrml x3dv x3dvz,3! x3dz;text:0cache-manifest manifest appcache,2lendar ics icz ifb,1ss,2v,0h323 323,1tml html htm shtml stm,0iuls uls,0javascript js,1son,0markdown md markdown mdown markdn,0n3,0plain txt text brf conf def list log in bas diff ksh,1rs.lines.tag dsc,0richtext rtx,0scriptlet sct wsc,1gml sgml sgm,0tab-separated-values tsv,1exmacs tm,1roff t tr roff man me ms,1urtle ttl,0uri-list uri uris urls,0vcard,1nd.curl curl,8.dcurl dcurl,9mcurl mcurl,9scurl scurl,4dvb.subtitle sub,4fly fly,5mi.flexstor flx,4graphviz gv,4in3d.3dml 3dml,9spot spot,4sun.j2me.app-descriptor jad,4wap.si si,9l sl,8wml wml,bscript wmls,0webviewhtml htt,0x-asm s asm,2bibtex bib,3oo boo,2c c h dic,3++hdr h++ hpp hxx hh,5src c++ cpp cxx cc,3omponent htc,2diff patch,3src d,2fortran f for f77 f90,2haskell hs,2java java,2literate-haskell lhs,2moc moc,2nfo nfo,2opml opml,2pascal p pas pp inc,3cs-gcd gcd,3ython py,2scala scala,3etext etx,3fv sfv,2tcl tcl tk,3ex tex ltx sty cls,2uuencode uu,2vcalendar vcs,5rd vcf;video:03gpp 3gp,42 3g2,0annodex axv,0dl,1v dif dv,0fli,0gl,0h261,33,34,0jpeg jpgv,2m jpm jpgm,0mj2 mj2 mjp2,1p2t ts,24 mp4 mp4v mpg4,2eg mpeg mpg mpe m1v m2v mp2 mpa mpv2,0ogg ogv,0quicktime qt mov,0vnd.dece.hd uvh uvvh,9mobile uvm uvvm,9pd uvp uvvp,9sd uvs uvvs,9video uvv uvvv,5vb.file dvb,4fvt fvt,4mpegurl mxu m4u,5s-playready.media.pyv pyv,4uvvu.mp4 uvu uvvu,4vivo viv,0webm,0x-f4v f4v,3lv flv,2la-asf lsf lsx,2m4v m4v,3atroska mpv mkv mk3d mks,3ng mng,3s-asf asf asx asr,5vob vob,5wm wm,7v wmv,7x wmx,6vx wvx,4video avi,2sgi-movie movie,3mv smv;x-conference:0x-cooltalk ice;x-world:0x-vrml vrm flr wrz xaf xof";
8985
+
8879
8986
  /*
8880
8987
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
8881
8988
 
@@ -8905,1589 +9012,6 @@ function addChild(parent, name, params, directory) {
8905
9012
  */
8906
9013
 
8907
9014
 
8908
- const table = {
8909
- "application": {
8910
- "andrew-inset": "ez",
8911
- "annodex": "anx",
8912
- "atom+xml": "atom",
8913
- "atomcat+xml": "atomcat",
8914
- "atomserv+xml": "atomsrv",
8915
- "bbolin": "lin",
8916
- "cu-seeme": "cu",
8917
- "davmount+xml": "davmount",
8918
- "dsptype": "tsp",
8919
- "ecmascript": [
8920
- "es",
8921
- "ecma"
8922
- ],
8923
- "futuresplash": "spl",
8924
- "hta": "hta",
8925
- "java-archive": "jar",
8926
- "java-serialized-object": "ser",
8927
- "java-vm": "class",
8928
- "m3g": "m3g",
8929
- "mac-binhex40": "hqx",
8930
- "mathematica": [
8931
- "nb",
8932
- "ma",
8933
- "mb"
8934
- ],
8935
- "msaccess": "mdb",
8936
- "msword": [
8937
- "doc",
8938
- "dot",
8939
- "wiz"
8940
- ],
8941
- "mxf": "mxf",
8942
- "oda": "oda",
8943
- "ogg": "ogx",
8944
- "pdf": "pdf",
8945
- "pgp-keys": "key",
8946
- "pgp-signature": [
8947
- "asc",
8948
- "sig"
8949
- ],
8950
- "pics-rules": "prf",
8951
- "postscript": [
8952
- "ps",
8953
- "ai",
8954
- "eps",
8955
- "epsi",
8956
- "epsf",
8957
- "eps2",
8958
- "eps3"
8959
- ],
8960
- "rar": "rar",
8961
- "rdf+xml": "rdf",
8962
- "rss+xml": "rss",
8963
- "rtf": "rtf",
8964
- "xhtml+xml": [
8965
- "xhtml",
8966
- "xht"
8967
- ],
8968
- "xml": [
8969
- "xml",
8970
- "xsl",
8971
- "xsd",
8972
- "xpdl"
8973
- ],
8974
- "xspf+xml": "xspf",
8975
- "zip": "zip",
8976
- "vnd.android.package-archive": "apk",
8977
- "vnd.cinderella": "cdy",
8978
- "vnd.google-earth.kml+xml": "kml",
8979
- "vnd.google-earth.kmz": "kmz",
8980
- "vnd.mozilla.xul+xml": "xul",
8981
- "vnd.ms-excel": [
8982
- "xls",
8983
- "xlb",
8984
- "xlt",
8985
- "xlm",
8986
- "xla",
8987
- "xlc",
8988
- "xlw"
8989
- ],
8990
- "vnd.ms-pki.seccat": "cat",
8991
- "vnd.ms-pki.stl": "stl",
8992
- "vnd.ms-powerpoint": [
8993
- "ppt",
8994
- "pps",
8995
- "pot",
8996
- "ppa",
8997
- "pwz"
8998
- ],
8999
- "vnd.oasis.opendocument.chart": "odc",
9000
- "vnd.oasis.opendocument.database": "odb",
9001
- "vnd.oasis.opendocument.formula": "odf",
9002
- "vnd.oasis.opendocument.graphics": "odg",
9003
- "vnd.oasis.opendocument.graphics-template": "otg",
9004
- "vnd.oasis.opendocument.image": "odi",
9005
- "vnd.oasis.opendocument.presentation": "odp",
9006
- "vnd.oasis.opendocument.presentation-template": "otp",
9007
- "vnd.oasis.opendocument.spreadsheet": "ods",
9008
- "vnd.oasis.opendocument.spreadsheet-template": "ots",
9009
- "vnd.oasis.opendocument.text": "odt",
9010
- "vnd.oasis.opendocument.text-master": [
9011
- "odm",
9012
- "otm"
9013
- ],
9014
- "vnd.oasis.opendocument.text-template": "ott",
9015
- "vnd.oasis.opendocument.text-web": "oth",
9016
- "vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx",
9017
- "vnd.openxmlformats-officedocument.spreadsheetml.template": "xltx",
9018
- "vnd.openxmlformats-officedocument.presentationml.presentation": "pptx",
9019
- "vnd.openxmlformats-officedocument.presentationml.slideshow": "ppsx",
9020
- "vnd.openxmlformats-officedocument.presentationml.template": "potx",
9021
- "vnd.openxmlformats-officedocument.wordprocessingml.document": "docx",
9022
- "vnd.openxmlformats-officedocument.wordprocessingml.template": "dotx",
9023
- "vnd.smaf": "mmf",
9024
- "vnd.stardivision.calc": "sdc",
9025
- "vnd.stardivision.chart": "sds",
9026
- "vnd.stardivision.draw": "sda",
9027
- "vnd.stardivision.impress": "sdd",
9028
- "vnd.stardivision.math": [
9029
- "sdf",
9030
- "smf"
9031
- ],
9032
- "vnd.stardivision.writer": [
9033
- "sdw",
9034
- "vor"
9035
- ],
9036
- "vnd.stardivision.writer-global": "sgl",
9037
- "vnd.sun.xml.calc": "sxc",
9038
- "vnd.sun.xml.calc.template": "stc",
9039
- "vnd.sun.xml.draw": "sxd",
9040
- "vnd.sun.xml.draw.template": "std",
9041
- "vnd.sun.xml.impress": "sxi",
9042
- "vnd.sun.xml.impress.template": "sti",
9043
- "vnd.sun.xml.math": "sxm",
9044
- "vnd.sun.xml.writer": "sxw",
9045
- "vnd.sun.xml.writer.global": "sxg",
9046
- "vnd.sun.xml.writer.template": "stw",
9047
- "vnd.symbian.install": [
9048
- "sis",
9049
- "sisx"
9050
- ],
9051
- "vnd.visio": [
9052
- "vsd",
9053
- "vst",
9054
- "vss",
9055
- "vsw",
9056
- "vsdx",
9057
- "vssx",
9058
- "vstx",
9059
- "vssm",
9060
- "vstm"
9061
- ],
9062
- "vnd.wap.wbxml": "wbxml",
9063
- "vnd.wap.wmlc": "wmlc",
9064
- "vnd.wap.wmlscriptc": "wmlsc",
9065
- "vnd.wordperfect": "wpd",
9066
- "vnd.wordperfect5.1": "wp5",
9067
- "x-123": "wk",
9068
- "x-7z-compressed": "7z",
9069
- "x-abiword": "abw",
9070
- "x-apple-diskimage": "dmg",
9071
- "x-bcpio": "bcpio",
9072
- "x-bittorrent": "torrent",
9073
- "x-cbr": [
9074
- "cbr",
9075
- "cba",
9076
- "cbt",
9077
- "cb7"
9078
- ],
9079
- "x-cbz": "cbz",
9080
- "x-cdf": [
9081
- "cdf",
9082
- "cda"
9083
- ],
9084
- "x-cdlink": "vcd",
9085
- "x-chess-pgn": "pgn",
9086
- "x-cpio": "cpio",
9087
- "x-csh": "csh",
9088
- "x-director": [
9089
- "dir",
9090
- "dxr",
9091
- "cst",
9092
- "cct",
9093
- "cxt",
9094
- "w3d",
9095
- "fgd",
9096
- "swa"
9097
- ],
9098
- "x-dms": "dms",
9099
- "x-doom": "wad",
9100
- "x-dvi": "dvi",
9101
- "x-httpd-eruby": "rhtml",
9102
- "x-freemind": "mm",
9103
- "x-gnumeric": "gnumeric",
9104
- "x-go-sgf": "sgf",
9105
- "x-graphing-calculator": "gcf",
9106
- "x-gtar": [
9107
- "gtar",
9108
- "taz"
9109
- ],
9110
- "x-hdf": "hdf",
9111
- "x-httpd-php": [
9112
- "phtml",
9113
- "pht",
9114
- "php"
9115
- ],
9116
- "x-httpd-php-source": "phps",
9117
- "x-httpd-php3": "php3",
9118
- "x-httpd-php3-preprocessed": "php3p",
9119
- "x-httpd-php4": "php4",
9120
- "x-httpd-php5": "php5",
9121
- "x-ica": "ica",
9122
- "x-info": "info",
9123
- "x-internet-signup": [
9124
- "ins",
9125
- "isp"
9126
- ],
9127
- "x-iphone": "iii",
9128
- "x-iso9660-image": "iso",
9129
- "x-java-jnlp-file": "jnlp",
9130
- "x-jmol": "jmz",
9131
- "x-killustrator": "kil",
9132
- "x-latex": "latex",
9133
- "x-lyx": "lyx",
9134
- "x-lzx": "lzx",
9135
- "x-maker": [
9136
- "frm",
9137
- "fb",
9138
- "fbdoc"
9139
- ],
9140
- "x-ms-wmd": "wmd",
9141
- "x-msdos-program": [
9142
- "com",
9143
- "exe",
9144
- "bat",
9145
- "dll"
9146
- ],
9147
- "x-netcdf": [
9148
- "nc"
9149
- ],
9150
- "x-ns-proxy-autoconfig": [
9151
- "pac",
9152
- "dat"
9153
- ],
9154
- "x-nwc": "nwc",
9155
- "x-object": "o",
9156
- "x-oz-application": "oza",
9157
- "x-pkcs7-certreqresp": "p7r",
9158
- "x-python-code": [
9159
- "pyc",
9160
- "pyo"
9161
- ],
9162
- "x-qgis": [
9163
- "qgs",
9164
- "shp",
9165
- "shx"
9166
- ],
9167
- "x-quicktimeplayer": "qtl",
9168
- "x-redhat-package-manager": [
9169
- "rpm",
9170
- "rpa"
9171
- ],
9172
- "x-ruby": "rb",
9173
- "x-sh": "sh",
9174
- "x-shar": "shar",
9175
- "x-shockwave-flash": [
9176
- "swf",
9177
- "swfl"
9178
- ],
9179
- "x-silverlight": "scr",
9180
- "x-stuffit": "sit",
9181
- "x-sv4cpio": "sv4cpio",
9182
- "x-sv4crc": "sv4crc",
9183
- "x-tar": "tar",
9184
- "x-tex-gf": "gf",
9185
- "x-tex-pk": "pk",
9186
- "x-texinfo": [
9187
- "texinfo",
9188
- "texi"
9189
- ],
9190
- "x-trash": [
9191
- "~",
9192
- "%",
9193
- "bak",
9194
- "old",
9195
- "sik"
9196
- ],
9197
- "x-ustar": "ustar",
9198
- "x-wais-source": "src",
9199
- "x-wingz": "wz",
9200
- "x-x509-ca-cert": [
9201
- "crt",
9202
- "der",
9203
- "cer"
9204
- ],
9205
- "x-xcf": "xcf",
9206
- "x-xfig": "fig",
9207
- "x-xpinstall": "xpi",
9208
- "applixware": "aw",
9209
- "atomsvc+xml": "atomsvc",
9210
- "ccxml+xml": "ccxml",
9211
- "cdmi-capability": "cdmia",
9212
- "cdmi-container": "cdmic",
9213
- "cdmi-domain": "cdmid",
9214
- "cdmi-object": "cdmio",
9215
- "cdmi-queue": "cdmiq",
9216
- "docbook+xml": "dbk",
9217
- "dssc+der": "dssc",
9218
- "dssc+xml": "xdssc",
9219
- "emma+xml": "emma",
9220
- "epub+zip": "epub",
9221
- "exi": "exi",
9222
- "font-tdpfr": "pfr",
9223
- "gml+xml": "gml",
9224
- "gpx+xml": "gpx",
9225
- "gxf": "gxf",
9226
- "hyperstudio": "stk",
9227
- "inkml+xml": [
9228
- "ink",
9229
- "inkml"
9230
- ],
9231
- "ipfix": "ipfix",
9232
- "jsonml+json": "jsonml",
9233
- "lost+xml": "lostxml",
9234
- "mads+xml": "mads",
9235
- "marc": "mrc",
9236
- "marcxml+xml": "mrcx",
9237
- "mathml+xml": [
9238
- "mathml",
9239
- "mml"
9240
- ],
9241
- "mbox": "mbox",
9242
- "mediaservercontrol+xml": "mscml",
9243
- "metalink+xml": "metalink",
9244
- "metalink4+xml": "meta4",
9245
- "mets+xml": "mets",
9246
- "mods+xml": "mods",
9247
- "mp21": [
9248
- "m21",
9249
- "mp21"
9250
- ],
9251
- "mp4": "mp4s",
9252
- "oebps-package+xml": "opf",
9253
- "omdoc+xml": "omdoc",
9254
- "onenote": [
9255
- "onetoc",
9256
- "onetoc2",
9257
- "onetmp",
9258
- "onepkg"
9259
- ],
9260
- "oxps": "oxps",
9261
- "patch-ops-error+xml": "xer",
9262
- "pgp-encrypted": "pgp",
9263
- "pkcs10": "p10",
9264
- "pkcs7-mime": [
9265
- "p7m",
9266
- "p7c"
9267
- ],
9268
- "pkcs7-signature": "p7s",
9269
- "pkcs8": "p8",
9270
- "pkix-attr-cert": "ac",
9271
- "pkix-crl": "crl",
9272
- "pkix-pkipath": "pkipath",
9273
- "pkixcmp": "pki",
9274
- "pls+xml": "pls",
9275
- "prs.cww": "cww",
9276
- "pskc+xml": "pskcxml",
9277
- "reginfo+xml": "rif",
9278
- "relax-ng-compact-syntax": "rnc",
9279
- "resource-lists+xml": "rl",
9280
- "resource-lists-diff+xml": "rld",
9281
- "rls-services+xml": "rs",
9282
- "rpki-ghostbusters": "gbr",
9283
- "rpki-manifest": "mft",
9284
- "rpki-roa": "roa",
9285
- "rsd+xml": "rsd",
9286
- "sbml+xml": "sbml",
9287
- "scvp-cv-request": "scq",
9288
- "scvp-cv-response": "scs",
9289
- "scvp-vp-request": "spq",
9290
- "scvp-vp-response": "spp",
9291
- "sdp": "sdp",
9292
- "set-payment-initiation": "setpay",
9293
- "set-registration-initiation": "setreg",
9294
- "shf+xml": "shf",
9295
- "sparql-query": "rq",
9296
- "sparql-results+xml": "srx",
9297
- "srgs": "gram",
9298
- "srgs+xml": "grxml",
9299
- "sru+xml": "sru",
9300
- "ssdl+xml": "ssdl",
9301
- "ssml+xml": "ssml",
9302
- "tei+xml": [
9303
- "tei",
9304
- "teicorpus"
9305
- ],
9306
- "thraud+xml": "tfi",
9307
- "timestamped-data": "tsd",
9308
- "vnd.3gpp.pic-bw-large": "plb",
9309
- "vnd.3gpp.pic-bw-small": "psb",
9310
- "vnd.3gpp.pic-bw-var": "pvb",
9311
- "vnd.3gpp2.tcap": "tcap",
9312
- "vnd.3m.post-it-notes": "pwn",
9313
- "vnd.accpac.simply.aso": "aso",
9314
- "vnd.accpac.simply.imp": "imp",
9315
- "vnd.acucobol": "acu",
9316
- "vnd.acucorp": [
9317
- "atc",
9318
- "acutc"
9319
- ],
9320
- "vnd.adobe.air-application-installer-package+zip": "air",
9321
- "vnd.adobe.formscentral.fcdt": "fcdt",
9322
- "vnd.adobe.fxp": [
9323
- "fxp",
9324
- "fxpl"
9325
- ],
9326
- "vnd.adobe.xdp+xml": "xdp",
9327
- "vnd.adobe.xfdf": "xfdf",
9328
- "vnd.ahead.space": "ahead",
9329
- "vnd.airzip.filesecure.azf": "azf",
9330
- "vnd.airzip.filesecure.azs": "azs",
9331
- "vnd.amazon.ebook": "azw",
9332
- "vnd.americandynamics.acc": "acc",
9333
- "vnd.amiga.ami": "ami",
9334
- "vnd.anser-web-certificate-issue-initiation": "cii",
9335
- "vnd.anser-web-funds-transfer-initiation": "fti",
9336
- "vnd.antix.game-component": "atx",
9337
- "vnd.apple.installer+xml": "mpkg",
9338
- "vnd.apple.mpegurl": "m3u8",
9339
- "vnd.aristanetworks.swi": "swi",
9340
- "vnd.astraea-software.iota": "iota",
9341
- "vnd.audiograph": "aep",
9342
- "vnd.blueice.multipass": "mpm",
9343
- "vnd.bmi": "bmi",
9344
- "vnd.businessobjects": "rep",
9345
- "vnd.chemdraw+xml": "cdxml",
9346
- "vnd.chipnuts.karaoke-mmd": "mmd",
9347
- "vnd.claymore": "cla",
9348
- "vnd.cloanto.rp9": "rp9",
9349
- "vnd.clonk.c4group": [
9350
- "c4g",
9351
- "c4d",
9352
- "c4f",
9353
- "c4p",
9354
- "c4u"
9355
- ],
9356
- "vnd.cluetrust.cartomobile-config": "c11amc",
9357
- "vnd.cluetrust.cartomobile-config-pkg": "c11amz",
9358
- "vnd.commonspace": "csp",
9359
- "vnd.contact.cmsg": "cdbcmsg",
9360
- "vnd.cosmocaller": "cmc",
9361
- "vnd.crick.clicker": "clkx",
9362
- "vnd.crick.clicker.keyboard": "clkk",
9363
- "vnd.crick.clicker.palette": "clkp",
9364
- "vnd.crick.clicker.template": "clkt",
9365
- "vnd.crick.clicker.wordbank": "clkw",
9366
- "vnd.criticaltools.wbs+xml": "wbs",
9367
- "vnd.ctc-posml": "pml",
9368
- "vnd.cups-ppd": "ppd",
9369
- "vnd.curl.car": "car",
9370
- "vnd.curl.pcurl": "pcurl",
9371
- "vnd.dart": "dart",
9372
- "vnd.data-vision.rdz": "rdz",
9373
- "vnd.dece.data": [
9374
- "uvf",
9375
- "uvvf",
9376
- "uvd",
9377
- "uvvd"
9378
- ],
9379
- "vnd.dece.ttml+xml": [
9380
- "uvt",
9381
- "uvvt"
9382
- ],
9383
- "vnd.dece.unspecified": [
9384
- "uvx",
9385
- "uvvx"
9386
- ],
9387
- "vnd.dece.zip": [
9388
- "uvz",
9389
- "uvvz"
9390
- ],
9391
- "vnd.denovo.fcselayout-link": "fe_launch",
9392
- "vnd.dna": "dna",
9393
- "vnd.dolby.mlp": "mlp",
9394
- "vnd.dpgraph": "dpg",
9395
- "vnd.dreamfactory": "dfac",
9396
- "vnd.ds-keypoint": "kpxx",
9397
- "vnd.dvb.ait": "ait",
9398
- "vnd.dvb.service": "svc",
9399
- "vnd.dynageo": "geo",
9400
- "vnd.ecowin.chart": "mag",
9401
- "vnd.enliven": "nml",
9402
- "vnd.epson.esf": "esf",
9403
- "vnd.epson.msf": "msf",
9404
- "vnd.epson.quickanime": "qam",
9405
- "vnd.epson.salt": "slt",
9406
- "vnd.epson.ssf": "ssf",
9407
- "vnd.eszigno3+xml": [
9408
- "es3",
9409
- "et3"
9410
- ],
9411
- "vnd.ezpix-album": "ez2",
9412
- "vnd.ezpix-package": "ez3",
9413
- "vnd.fdf": "fdf",
9414
- "vnd.fdsn.mseed": "mseed",
9415
- "vnd.fdsn.seed": [
9416
- "seed",
9417
- "dataless"
9418
- ],
9419
- "vnd.flographit": "gph",
9420
- "vnd.fluxtime.clip": "ftc",
9421
- "vnd.framemaker": [
9422
- "fm",
9423
- "frame",
9424
- "maker",
9425
- "book"
9426
- ],
9427
- "vnd.frogans.fnc": "fnc",
9428
- "vnd.frogans.ltf": "ltf",
9429
- "vnd.fsc.weblaunch": "fsc",
9430
- "vnd.fujitsu.oasys": "oas",
9431
- "vnd.fujitsu.oasys2": "oa2",
9432
- "vnd.fujitsu.oasys3": "oa3",
9433
- "vnd.fujitsu.oasysgp": "fg5",
9434
- "vnd.fujitsu.oasysprs": "bh2",
9435
- "vnd.fujixerox.ddd": "ddd",
9436
- "vnd.fujixerox.docuworks": "xdw",
9437
- "vnd.fujixerox.docuworks.binder": "xbd",
9438
- "vnd.fuzzysheet": "fzs",
9439
- "vnd.genomatix.tuxedo": "txd",
9440
- "vnd.geogebra.file": "ggb",
9441
- "vnd.geogebra.tool": "ggt",
9442
- "vnd.geometry-explorer": [
9443
- "gex",
9444
- "gre"
9445
- ],
9446
- "vnd.geonext": "gxt",
9447
- "vnd.geoplan": "g2w",
9448
- "vnd.geospace": "g3w",
9449
- "vnd.gmx": "gmx",
9450
- "vnd.grafeq": [
9451
- "gqf",
9452
- "gqs"
9453
- ],
9454
- "vnd.groove-account": "gac",
9455
- "vnd.groove-help": "ghf",
9456
- "vnd.groove-identity-message": "gim",
9457
- "vnd.groove-injector": "grv",
9458
- "vnd.groove-tool-message": "gtm",
9459
- "vnd.groove-tool-template": "tpl",
9460
- "vnd.groove-vcard": "vcg",
9461
- "vnd.hal+xml": "hal",
9462
- "vnd.handheld-entertainment+xml": "zmm",
9463
- "vnd.hbci": "hbci",
9464
- "vnd.hhe.lesson-player": "les",
9465
- "vnd.hp-hpgl": "hpgl",
9466
- "vnd.hp-hpid": "hpid",
9467
- "vnd.hp-hps": "hps",
9468
- "vnd.hp-jlyt": "jlt",
9469
- "vnd.hp-pcl": "pcl",
9470
- "vnd.hp-pclxl": "pclxl",
9471
- "vnd.hydrostatix.sof-data": "sfd-hdstx",
9472
- "vnd.ibm.minipay": "mpy",
9473
- "vnd.ibm.modcap": [
9474
- "afp",
9475
- "listafp",
9476
- "list3820"
9477
- ],
9478
- "vnd.ibm.rights-management": "irm",
9479
- "vnd.ibm.secure-container": "sc",
9480
- "vnd.iccprofile": [
9481
- "icc",
9482
- "icm"
9483
- ],
9484
- "vnd.igloader": "igl",
9485
- "vnd.immervision-ivp": "ivp",
9486
- "vnd.immervision-ivu": "ivu",
9487
- "vnd.insors.igm": "igm",
9488
- "vnd.intercon.formnet": [
9489
- "xpw",
9490
- "xpx"
9491
- ],
9492
- "vnd.intergeo": "i2g",
9493
- "vnd.intu.qbo": "qbo",
9494
- "vnd.intu.qfx": "qfx",
9495
- "vnd.ipunplugged.rcprofile": "rcprofile",
9496
- "vnd.irepository.package+xml": "irp",
9497
- "vnd.is-xpr": "xpr",
9498
- "vnd.isac.fcs": "fcs",
9499
- "vnd.jam": "jam",
9500
- "vnd.jcp.javame.midlet-rms": "rms",
9501
- "vnd.jisp": "jisp",
9502
- "vnd.joost.joda-archive": "joda",
9503
- "vnd.kahootz": [
9504
- "ktz",
9505
- "ktr"
9506
- ],
9507
- "vnd.kde.karbon": "karbon",
9508
- "vnd.kde.kchart": "chrt",
9509
- "vnd.kde.kformula": "kfo",
9510
- "vnd.kde.kivio": "flw",
9511
- "vnd.kde.kontour": "kon",
9512
- "vnd.kde.kpresenter": [
9513
- "kpr",
9514
- "kpt"
9515
- ],
9516
- "vnd.kde.kspread": "ksp",
9517
- "vnd.kde.kword": [
9518
- "kwd",
9519
- "kwt"
9520
- ],
9521
- "vnd.kenameaapp": "htke",
9522
- "vnd.kidspiration": "kia",
9523
- "vnd.kinar": [
9524
- "kne",
9525
- "knp"
9526
- ],
9527
- "vnd.koan": [
9528
- "skp",
9529
- "skd",
9530
- "skt",
9531
- "skm"
9532
- ],
9533
- "vnd.kodak-descriptor": "sse",
9534
- "vnd.las.las+xml": "lasxml",
9535
- "vnd.llamagraphics.life-balance.desktop": "lbd",
9536
- "vnd.llamagraphics.life-balance.exchange+xml": "lbe",
9537
- "vnd.lotus-1-2-3": "123",
9538
- "vnd.lotus-approach": "apr",
9539
- "vnd.lotus-freelance": "pre",
9540
- "vnd.lotus-notes": "nsf",
9541
- "vnd.lotus-organizer": "org",
9542
- "vnd.lotus-screencam": "scm",
9543
- "vnd.lotus-wordpro": "lwp",
9544
- "vnd.macports.portpkg": "portpkg",
9545
- "vnd.mcd": "mcd",
9546
- "vnd.medcalcdata": "mc1",
9547
- "vnd.mediastation.cdkey": "cdkey",
9548
- "vnd.mfer": "mwf",
9549
- "vnd.mfmp": "mfm",
9550
- "vnd.micrografx.flo": "flo",
9551
- "vnd.micrografx.igx": "igx",
9552
- "vnd.mif": "mif",
9553
- "vnd.mobius.daf": "daf",
9554
- "vnd.mobius.dis": "dis",
9555
- "vnd.mobius.mbk": "mbk",
9556
- "vnd.mobius.mqy": "mqy",
9557
- "vnd.mobius.msl": "msl",
9558
- "vnd.mobius.plc": "plc",
9559
- "vnd.mobius.txf": "txf",
9560
- "vnd.mophun.application": "mpn",
9561
- "vnd.mophun.certificate": "mpc",
9562
- "vnd.ms-artgalry": "cil",
9563
- "vnd.ms-cab-compressed": "cab",
9564
- "vnd.ms-excel.addin.macroenabled.12": "xlam",
9565
- "vnd.ms-excel.sheet.binary.macroenabled.12": "xlsb",
9566
- "vnd.ms-excel.sheet.macroenabled.12": "xlsm",
9567
- "vnd.ms-excel.template.macroenabled.12": "xltm",
9568
- "vnd.ms-fontobject": "eot",
9569
- "vnd.ms-htmlhelp": "chm",
9570
- "vnd.ms-ims": "ims",
9571
- "vnd.ms-lrm": "lrm",
9572
- "vnd.ms-officetheme": "thmx",
9573
- "vnd.ms-powerpoint.addin.macroenabled.12": "ppam",
9574
- "vnd.ms-powerpoint.presentation.macroenabled.12": "pptm",
9575
- "vnd.ms-powerpoint.slide.macroenabled.12": "sldm",
9576
- "vnd.ms-powerpoint.slideshow.macroenabled.12": "ppsm",
9577
- "vnd.ms-powerpoint.template.macroenabled.12": "potm",
9578
- "vnd.ms-project": [
9579
- "mpp",
9580
- "mpt"
9581
- ],
9582
- "vnd.ms-word.document.macroenabled.12": "docm",
9583
- "vnd.ms-word.template.macroenabled.12": "dotm",
9584
- "vnd.ms-works": [
9585
- "wps",
9586
- "wks",
9587
- "wcm",
9588
- "wdb"
9589
- ],
9590
- "vnd.ms-wpl": "wpl",
9591
- "vnd.ms-xpsdocument": "xps",
9592
- "vnd.mseq": "mseq",
9593
- "vnd.musician": "mus",
9594
- "vnd.muvee.style": "msty",
9595
- "vnd.mynfc": "taglet",
9596
- "vnd.neurolanguage.nlu": "nlu",
9597
- "vnd.nitf": [
9598
- "ntf",
9599
- "nitf"
9600
- ],
9601
- "vnd.noblenet-directory": "nnd",
9602
- "vnd.noblenet-sealer": "nns",
9603
- "vnd.noblenet-web": "nnw",
9604
- "vnd.nokia.n-gage.data": "ngdat",
9605
- "vnd.nokia.n-gage.symbian.install": "n-gage",
9606
- "vnd.nokia.radio-preset": "rpst",
9607
- "vnd.nokia.radio-presets": "rpss",
9608
- "vnd.novadigm.edm": "edm",
9609
- "vnd.novadigm.edx": "edx",
9610
- "vnd.novadigm.ext": "ext",
9611
- "vnd.oasis.opendocument.chart-template": "otc",
9612
- "vnd.oasis.opendocument.formula-template": "odft",
9613
- "vnd.oasis.opendocument.image-template": "oti",
9614
- "vnd.olpc-sugar": "xo",
9615
- "vnd.oma.dd2+xml": "dd2",
9616
- "vnd.openofficeorg.extension": "oxt",
9617
- "vnd.openxmlformats-officedocument.presentationml.slide": "sldx",
9618
- "vnd.osgeo.mapguide.package": "mgp",
9619
- "vnd.osgi.dp": "dp",
9620
- "vnd.osgi.subsystem": "esa",
9621
- "vnd.palm": [
9622
- "pdb",
9623
- "pqa",
9624
- "oprc"
9625
- ],
9626
- "vnd.pawaafile": "paw",
9627
- "vnd.pg.format": "str",
9628
- "vnd.pg.osasli": "ei6",
9629
- "vnd.picsel": "efif",
9630
- "vnd.pmi.widget": "wg",
9631
- "vnd.pocketlearn": "plf",
9632
- "vnd.powerbuilder6": "pbd",
9633
- "vnd.previewsystems.box": "box",
9634
- "vnd.proteus.magazine": "mgz",
9635
- "vnd.publishare-delta-tree": "qps",
9636
- "vnd.pvi.ptid1": "ptid",
9637
- "vnd.quark.quarkxpress": [
9638
- "qxd",
9639
- "qxt",
9640
- "qwd",
9641
- "qwt",
9642
- "qxl",
9643
- "qxb"
9644
- ],
9645
- "vnd.realvnc.bed": "bed",
9646
- "vnd.recordare.musicxml": "mxl",
9647
- "vnd.recordare.musicxml+xml": "musicxml",
9648
- "vnd.rig.cryptonote": "cryptonote",
9649
- "vnd.rn-realmedia": "rm",
9650
- "vnd.rn-realmedia-vbr": "rmvb",
9651
- "vnd.route66.link66+xml": "link66",
9652
- "vnd.sailingtracker.track": "st",
9653
- "vnd.seemail": "see",
9654
- "vnd.sema": "sema",
9655
- "vnd.semd": "semd",
9656
- "vnd.semf": "semf",
9657
- "vnd.shana.informed.formdata": "ifm",
9658
- "vnd.shana.informed.formtemplate": "itp",
9659
- "vnd.shana.informed.interchange": "iif",
9660
- "vnd.shana.informed.package": "ipk",
9661
- "vnd.simtech-mindmapper": [
9662
- "twd",
9663
- "twds"
9664
- ],
9665
- "vnd.smart.teacher": "teacher",
9666
- "vnd.solent.sdkm+xml": [
9667
- "sdkm",
9668
- "sdkd"
9669
- ],
9670
- "vnd.spotfire.dxp": "dxp",
9671
- "vnd.spotfire.sfs": "sfs",
9672
- "vnd.stepmania.package": "smzip",
9673
- "vnd.stepmania.stepchart": "sm",
9674
- "vnd.sus-calendar": [
9675
- "sus",
9676
- "susp"
9677
- ],
9678
- "vnd.svd": "svd",
9679
- "vnd.syncml+xml": "xsm",
9680
- "vnd.syncml.dm+wbxml": "bdm",
9681
- "vnd.syncml.dm+xml": "xdm",
9682
- "vnd.tao.intent-module-archive": "tao",
9683
- "vnd.tcpdump.pcap": [
9684
- "pcap",
9685
- "cap",
9686
- "dmp"
9687
- ],
9688
- "vnd.tmobile-livetv": "tmo",
9689
- "vnd.trid.tpt": "tpt",
9690
- "vnd.triscape.mxs": "mxs",
9691
- "vnd.trueapp": "tra",
9692
- "vnd.ufdl": [
9693
- "ufd",
9694
- "ufdl"
9695
- ],
9696
- "vnd.uiq.theme": "utz",
9697
- "vnd.umajin": "umj",
9698
- "vnd.unity": "unityweb",
9699
- "vnd.uoml+xml": "uoml",
9700
- "vnd.vcx": "vcx",
9701
- "vnd.visionary": "vis",
9702
- "vnd.vsf": "vsf",
9703
- "vnd.webturbo": "wtb",
9704
- "vnd.wolfram.player": "nbp",
9705
- "vnd.wqd": "wqd",
9706
- "vnd.wt.stf": "stf",
9707
- "vnd.xara": "xar",
9708
- "vnd.xfdl": "xfdl",
9709
- "vnd.yamaha.hv-dic": "hvd",
9710
- "vnd.yamaha.hv-script": "hvs",
9711
- "vnd.yamaha.hv-voice": "hvp",
9712
- "vnd.yamaha.openscoreformat": "osf",
9713
- "vnd.yamaha.openscoreformat.osfpvg+xml": "osfpvg",
9714
- "vnd.yamaha.smaf-audio": "saf",
9715
- "vnd.yamaha.smaf-phrase": "spf",
9716
- "vnd.yellowriver-custom-menu": "cmp",
9717
- "vnd.zul": [
9718
- "zir",
9719
- "zirz"
9720
- ],
9721
- "vnd.zzazz.deck+xml": "zaz",
9722
- "voicexml+xml": "vxml",
9723
- "widget": "wgt",
9724
- "winhlp": "hlp",
9725
- "wsdl+xml": "wsdl",
9726
- "wspolicy+xml": "wspolicy",
9727
- "x-ace-compressed": "ace",
9728
- "x-authorware-bin": [
9729
- "aab",
9730
- "x32",
9731
- "u32",
9732
- "vox"
9733
- ],
9734
- "x-authorware-map": "aam",
9735
- "x-authorware-seg": "aas",
9736
- "x-blorb": [
9737
- "blb",
9738
- "blorb"
9739
- ],
9740
- "x-bzip": "bz",
9741
- "x-bzip2": [
9742
- "bz2",
9743
- "boz"
9744
- ],
9745
- "x-cfs-compressed": "cfs",
9746
- "x-chat": "chat",
9747
- "x-conference": "nsc",
9748
- "x-dgc-compressed": "dgc",
9749
- "x-dtbncx+xml": "ncx",
9750
- "x-dtbook+xml": "dtb",
9751
- "x-dtbresource+xml": "res",
9752
- "x-eva": "eva",
9753
- "x-font-bdf": "bdf",
9754
- "x-font-ghostscript": "gsf",
9755
- "x-font-linux-psf": "psf",
9756
- "x-font-pcf": "pcf",
9757
- "x-font-snf": "snf",
9758
- "x-font-ttf": [
9759
- "ttf",
9760
- "ttc"
9761
- ],
9762
- "x-font-type1": [
9763
- "pfa",
9764
- "pfb",
9765
- "pfm",
9766
- "afm"
9767
- ],
9768
- "x-freearc": "arc",
9769
- "x-gca-compressed": "gca",
9770
- "x-glulx": "ulx",
9771
- "x-gramps-xml": "gramps",
9772
- "x-install-instructions": "install",
9773
- "x-lzh-compressed": [
9774
- "lzh",
9775
- "lha"
9776
- ],
9777
- "x-mie": "mie",
9778
- "x-mobipocket-ebook": [
9779
- "prc",
9780
- "mobi"
9781
- ],
9782
- "x-ms-application": "application",
9783
- "x-ms-shortcut": "lnk",
9784
- "x-ms-xbap": "xbap",
9785
- "x-msbinder": "obd",
9786
- "x-mscardfile": "crd",
9787
- "x-msclip": "clp",
9788
- "x-ms-installer": "msi",
9789
- "x-msmediaview": [
9790
- "mvb",
9791
- "m13",
9792
- "m14"
9793
- ],
9794
- "x-msmetafile": [
9795
- "wmf",
9796
- "wmz",
9797
- "emf",
9798
- "emz"
9799
- ],
9800
- "x-msmoney": "mny",
9801
- "x-mspublisher": "pub",
9802
- "x-msschedule": "scd",
9803
- "x-msterminal": "trm",
9804
- "x-mswrite": "wri",
9805
- "x-nzb": "nzb",
9806
- "x-pkcs12": [
9807
- "p12",
9808
- "pfx"
9809
- ],
9810
- "x-pkcs7-certificates": [
9811
- "p7b",
9812
- "spc"
9813
- ],
9814
- "x-research-info-systems": "ris",
9815
- "x-silverlight-app": "xap",
9816
- "x-sql": "sql",
9817
- "x-stuffitx": "sitx",
9818
- "x-subrip": "srt",
9819
- "x-t3vm-image": "t3",
9820
- "x-tex-tfm": "tfm",
9821
- "x-tgif": "obj",
9822
- "x-xliff+xml": "xlf",
9823
- "x-xz": "xz",
9824
- "x-zmachine": [
9825
- "z1",
9826
- "z2",
9827
- "z3",
9828
- "z4",
9829
- "z5",
9830
- "z6",
9831
- "z7",
9832
- "z8"
9833
- ],
9834
- "xaml+xml": "xaml",
9835
- "xcap-diff+xml": "xdf",
9836
- "xenc+xml": "xenc",
9837
- "xml-dtd": "dtd",
9838
- "xop+xml": "xop",
9839
- "xproc+xml": "xpl",
9840
- "xslt+xml": "xslt",
9841
- "xv+xml": [
9842
- "mxml",
9843
- "xhvml",
9844
- "xvml",
9845
- "xvm"
9846
- ],
9847
- "yang": "yang",
9848
- "yin+xml": "yin",
9849
- "envoy": "evy",
9850
- "fractals": "fif",
9851
- "internet-property-stream": "acx",
9852
- "olescript": "axs",
9853
- "vnd.ms-outlook": "msg",
9854
- "vnd.ms-pkicertstore": "sst",
9855
- "x-compress": "z",
9856
- "x-perfmon": [
9857
- "pma",
9858
- "pmc",
9859
- "pmr",
9860
- "pmw"
9861
- ],
9862
- "ynd.ms-pkipko": "pko",
9863
- "gzip": [
9864
- "gz",
9865
- "tgz"
9866
- ],
9867
- "smil+xml": [
9868
- "smi",
9869
- "smil"
9870
- ],
9871
- "vnd.debian.binary-package": [
9872
- "deb",
9873
- "udeb"
9874
- ],
9875
- "vnd.hzn-3d-crossword": "x3d",
9876
- "vnd.sqlite3": [
9877
- "db",
9878
- "sqlite",
9879
- "sqlite3",
9880
- "db-wal",
9881
- "sqlite-wal",
9882
- "db-shm",
9883
- "sqlite-shm"
9884
- ],
9885
- "vnd.wap.sic": "sic",
9886
- "vnd.wap.slc": "slc",
9887
- "x-krita": [
9888
- "kra",
9889
- "krz"
9890
- ],
9891
- "x-perl": [
9892
- "pm",
9893
- "pl"
9894
- ],
9895
- "yaml": [
9896
- "yaml",
9897
- "yml"
9898
- ]
9899
- },
9900
- "audio": {
9901
- "amr": "amr",
9902
- "amr-wb": "awb",
9903
- "annodex": "axa",
9904
- "basic": [
9905
- "au",
9906
- "snd"
9907
- ],
9908
- "flac": "flac",
9909
- "midi": [
9910
- "mid",
9911
- "midi",
9912
- "kar",
9913
- "rmi"
9914
- ],
9915
- "mpeg": [
9916
- "mpga",
9917
- "mpega",
9918
- "mp3",
9919
- "m4a",
9920
- "mp2a",
9921
- "m2a",
9922
- "m3a"
9923
- ],
9924
- "mpegurl": "m3u",
9925
- "ogg": [
9926
- "oga",
9927
- "ogg",
9928
- "spx"
9929
- ],
9930
- "prs.sid": "sid",
9931
- "x-aiff": "aifc",
9932
- "x-gsm": "gsm",
9933
- "x-ms-wma": "wma",
9934
- "x-ms-wax": "wax",
9935
- "x-pn-realaudio": "ram",
9936
- "x-realaudio": "ra",
9937
- "x-sd2": "sd2",
9938
- "adpcm": "adp",
9939
- "mp4": "mp4a",
9940
- "s3m": "s3m",
9941
- "silk": "sil",
9942
- "vnd.dece.audio": [
9943
- "uva",
9944
- "uvva"
9945
- ],
9946
- "vnd.digital-winds": "eol",
9947
- "vnd.dra": "dra",
9948
- "vnd.dts": "dts",
9949
- "vnd.dts.hd": "dtshd",
9950
- "vnd.lucent.voice": "lvp",
9951
- "vnd.ms-playready.media.pya": "pya",
9952
- "vnd.nuera.ecelp4800": "ecelp4800",
9953
- "vnd.nuera.ecelp7470": "ecelp7470",
9954
- "vnd.nuera.ecelp9600": "ecelp9600",
9955
- "vnd.rip": "rip",
9956
- "webm": "weba",
9957
- "x-caf": "caf",
9958
- "x-matroska": "mka",
9959
- "x-pn-realaudio-plugin": "rmp",
9960
- "xm": "xm",
9961
- "aac": "aac",
9962
- "aiff": [
9963
- "aiff",
9964
- "aif",
9965
- "aff"
9966
- ],
9967
- "opus": "opus",
9968
- "wav": "wav"
9969
- },
9970
- "chemical": {
9971
- "x-alchemy": "alc",
9972
- "x-cache": [
9973
- "cac",
9974
- "cache"
9975
- ],
9976
- "x-cache-csf": "csf",
9977
- "x-cactvs-binary": [
9978
- "cbin",
9979
- "cascii",
9980
- "ctab"
9981
- ],
9982
- "x-cdx": "cdx",
9983
- "x-chem3d": "c3d",
9984
- "x-cif": "cif",
9985
- "x-cmdf": "cmdf",
9986
- "x-cml": "cml",
9987
- "x-compass": "cpa",
9988
- "x-crossfire": "bsd",
9989
- "x-csml": [
9990
- "csml",
9991
- "csm"
9992
- ],
9993
- "x-ctx": "ctx",
9994
- "x-cxf": [
9995
- "cxf",
9996
- "cef"
9997
- ],
9998
- "x-embl-dl-nucleotide": [
9999
- "emb",
10000
- "embl"
10001
- ],
10002
- "x-gamess-input": [
10003
- "inp",
10004
- "gam",
10005
- "gamin"
10006
- ],
10007
- "x-gaussian-checkpoint": [
10008
- "fch",
10009
- "fchk"
10010
- ],
10011
- "x-gaussian-cube": "cub",
10012
- "x-gaussian-input": [
10013
- "gau",
10014
- "gjc",
10015
- "gjf"
10016
- ],
10017
- "x-gaussian-log": "gal",
10018
- "x-gcg8-sequence": "gcg",
10019
- "x-genbank": "gen",
10020
- "x-hin": "hin",
10021
- "x-isostar": [
10022
- "istr",
10023
- "ist"
10024
- ],
10025
- "x-jcamp-dx": [
10026
- "jdx",
10027
- "dx"
10028
- ],
10029
- "x-kinemage": "kin",
10030
- "x-macmolecule": "mcm",
10031
- "x-macromodel-input": "mmod",
10032
- "x-mdl-molfile": "mol",
10033
- "x-mdl-rdfile": "rd",
10034
- "x-mdl-rxnfile": "rxn",
10035
- "x-mdl-sdfile": "sd",
10036
- "x-mdl-tgf": "tgf",
10037
- "x-mmcif": "mcif",
10038
- "x-mol2": "mol2",
10039
- "x-molconn-Z": "b",
10040
- "x-mopac-graph": "gpt",
10041
- "x-mopac-input": [
10042
- "mop",
10043
- "mopcrt",
10044
- "zmt"
10045
- ],
10046
- "x-mopac-out": "moo",
10047
- "x-ncbi-asn1": "asn",
10048
- "x-ncbi-asn1-ascii": [
10049
- "prt",
10050
- "ent"
10051
- ],
10052
- "x-ncbi-asn1-binary": "val",
10053
- "x-rosdal": "ros",
10054
- "x-swissprot": "sw",
10055
- "x-vamas-iso14976": "vms",
10056
- "x-vmd": "vmd",
10057
- "x-xtel": "xtel",
10058
- "x-xyz": "xyz"
10059
- },
10060
- "font": {
10061
- "otf": "otf",
10062
- "woff": "woff",
10063
- "woff2": "woff2"
10064
- },
10065
- "image": {
10066
- "gif": "gif",
10067
- "ief": "ief",
10068
- "jpeg": [
10069
- "jpeg",
10070
- "jpg",
10071
- "jpe",
10072
- "jfif",
10073
- "jfif-tbnl",
10074
- "jif"
10075
- ],
10076
- "pcx": "pcx",
10077
- "png": "png",
10078
- "svg+xml": [
10079
- "svg",
10080
- "svgz"
10081
- ],
10082
- "tiff": [
10083
- "tiff",
10084
- "tif"
10085
- ],
10086
- "vnd.djvu": [
10087
- "djvu",
10088
- "djv"
10089
- ],
10090
- "vnd.wap.wbmp": "wbmp",
10091
- "x-canon-cr2": "cr2",
10092
- "x-canon-crw": "crw",
10093
- "x-cmu-raster": "ras",
10094
- "x-coreldraw": "cdr",
10095
- "x-coreldrawpattern": "pat",
10096
- "x-coreldrawtemplate": "cdt",
10097
- "x-corelphotopaint": "cpt",
10098
- "x-epson-erf": "erf",
10099
- "x-icon": "ico",
10100
- "x-jg": "art",
10101
- "x-jng": "jng",
10102
- "x-nikon-nef": "nef",
10103
- "x-olympus-orf": "orf",
10104
- "x-portable-anymap": "pnm",
10105
- "x-portable-bitmap": "pbm",
10106
- "x-portable-graymap": "pgm",
10107
- "x-portable-pixmap": "ppm",
10108
- "x-rgb": "rgb",
10109
- "x-xbitmap": "xbm",
10110
- "x-xpixmap": "xpm",
10111
- "x-xwindowdump": "xwd",
10112
- "bmp": "bmp",
10113
- "cgm": "cgm",
10114
- "g3fax": "g3",
10115
- "ktx": "ktx",
10116
- "prs.btif": "btif",
10117
- "sgi": "sgi",
10118
- "vnd.dece.graphic": [
10119
- "uvi",
10120
- "uvvi",
10121
- "uvg",
10122
- "uvvg"
10123
- ],
10124
- "vnd.dwg": "dwg",
10125
- "vnd.dxf": "dxf",
10126
- "vnd.fastbidsheet": "fbs",
10127
- "vnd.fpx": "fpx",
10128
- "vnd.fst": "fst",
10129
- "vnd.fujixerox.edmics-mmr": "mmr",
10130
- "vnd.fujixerox.edmics-rlc": "rlc",
10131
- "vnd.ms-modi": "mdi",
10132
- "vnd.ms-photo": "wdp",
10133
- "vnd.net-fpx": "npx",
10134
- "vnd.xiff": "xif",
10135
- "webp": "webp",
10136
- "x-3ds": "3ds",
10137
- "x-cmx": "cmx",
10138
- "x-freehand": [
10139
- "fh",
10140
- "fhc",
10141
- "fh4",
10142
- "fh5",
10143
- "fh7"
10144
- ],
10145
- "x-pict": [
10146
- "pic",
10147
- "pct"
10148
- ],
10149
- "x-tga": "tga",
10150
- "cis-cod": "cod",
10151
- "avif": [
10152
- "avif",
10153
- "avifs"
10154
- ],
10155
- "heic": [
10156
- "heif",
10157
- "heic"
10158
- ],
10159
- "pjpeg": [
10160
- "pjpg"
10161
- ],
10162
- "vnd.adobe.photoshop": "psd",
10163
- "x-adobe-dng": "dng",
10164
- "x-fuji-raf": "raf",
10165
- "x-icns": "icns",
10166
- "x-kodak-dcr": "dcr",
10167
- "x-kodak-k25": "k25",
10168
- "x-kodak-kdc": "kdc",
10169
- "x-minolta-mrw": "mrw",
10170
- "x-panasonic-raw": [
10171
- "raw",
10172
- "rw2",
10173
- "rwl"
10174
- ],
10175
- "x-pentax-pef": [
10176
- "pef",
10177
- "ptx"
10178
- ],
10179
- "x-sigma-x3f": "x3f",
10180
- "x-sony-arw": "arw",
10181
- "x-sony-sr2": "sr2",
10182
- "x-sony-srf": "srf"
10183
- },
10184
- "message": {
10185
- "rfc822": [
10186
- "eml",
10187
- "mime",
10188
- "mht",
10189
- "mhtml",
10190
- "nws"
10191
- ]
10192
- },
10193
- "model": {
10194
- "iges": [
10195
- "igs",
10196
- "iges"
10197
- ],
10198
- "mesh": [
10199
- "msh",
10200
- "mesh",
10201
- "silo"
10202
- ],
10203
- "vrml": [
10204
- "wrl",
10205
- "vrml"
10206
- ],
10207
- "x3d+vrml": [
10208
- "x3dv",
10209
- "x3dvz"
10210
- ],
10211
- "x3d+xml": "x3dz",
10212
- "x3d+binary": [
10213
- "x3db",
10214
- "x3dbz"
10215
- ],
10216
- "vnd.collada+xml": "dae",
10217
- "vnd.dwf": "dwf",
10218
- "vnd.gdl": "gdl",
10219
- "vnd.gtw": "gtw",
10220
- "vnd.mts": "mts",
10221
- "vnd.usdz+zip": "usdz",
10222
- "vnd.vtu": "vtu"
10223
- },
10224
- "text": {
10225
- "cache-manifest": [
10226
- "manifest",
10227
- "appcache"
10228
- ],
10229
- "calendar": [
10230
- "ics",
10231
- "icz",
10232
- "ifb"
10233
- ],
10234
- "css": "css",
10235
- "csv": "csv",
10236
- "h323": "323",
10237
- "html": [
10238
- "html",
10239
- "htm",
10240
- "shtml",
10241
- "stm"
10242
- ],
10243
- "iuls": "uls",
10244
- "plain": [
10245
- "txt",
10246
- "text",
10247
- "brf",
10248
- "conf",
10249
- "def",
10250
- "list",
10251
- "log",
10252
- "in",
10253
- "bas",
10254
- "diff",
10255
- "ksh"
10256
- ],
10257
- "richtext": "rtx",
10258
- "scriptlet": [
10259
- "sct",
10260
- "wsc"
10261
- ],
10262
- "texmacs": "tm",
10263
- "tab-separated-values": "tsv",
10264
- "vnd.sun.j2me.app-descriptor": "jad",
10265
- "vnd.wap.wml": "wml",
10266
- "vnd.wap.wmlscript": "wmls",
10267
- "x-bibtex": "bib",
10268
- "x-boo": "boo",
10269
- "x-c++hdr": [
10270
- "h++",
10271
- "hpp",
10272
- "hxx",
10273
- "hh"
10274
- ],
10275
- "x-c++src": [
10276
- "c++",
10277
- "cpp",
10278
- "cxx",
10279
- "cc"
10280
- ],
10281
- "x-component": "htc",
10282
- "x-dsrc": "d",
10283
- "x-diff": "patch",
10284
- "x-haskell": "hs",
10285
- "x-java": "java",
10286
- "x-literate-haskell": "lhs",
10287
- "x-moc": "moc",
10288
- "x-pascal": [
10289
- "p",
10290
- "pas",
10291
- "pp",
10292
- "inc"
10293
- ],
10294
- "x-pcs-gcd": "gcd",
10295
- "x-python": "py",
10296
- "x-scala": "scala",
10297
- "x-setext": "etx",
10298
- "x-tcl": [
10299
- "tcl",
10300
- "tk"
10301
- ],
10302
- "x-tex": [
10303
- "tex",
10304
- "ltx",
10305
- "sty",
10306
- "cls"
10307
- ],
10308
- "x-vcalendar": "vcs",
10309
- "x-vcard": "vcf",
10310
- "n3": "n3",
10311
- "prs.lines.tag": "dsc",
10312
- "sgml": [
10313
- "sgml",
10314
- "sgm"
10315
- ],
10316
- "troff": [
10317
- "t",
10318
- "tr",
10319
- "roff",
10320
- "man",
10321
- "me",
10322
- "ms"
10323
- ],
10324
- "turtle": "ttl",
10325
- "uri-list": [
10326
- "uri",
10327
- "uris",
10328
- "urls"
10329
- ],
10330
- "vcard": "vcard",
10331
- "vnd.curl": "curl",
10332
- "vnd.curl.dcurl": "dcurl",
10333
- "vnd.curl.scurl": "scurl",
10334
- "vnd.curl.mcurl": "mcurl",
10335
- "vnd.dvb.subtitle": "sub",
10336
- "vnd.fly": "fly",
10337
- "vnd.fmi.flexstor": "flx",
10338
- "vnd.graphviz": "gv",
10339
- "vnd.in3d.3dml": "3dml",
10340
- "vnd.in3d.spot": "spot",
10341
- "x-asm": [
10342
- "s",
10343
- "asm"
10344
- ],
10345
- "x-c": [
10346
- "c",
10347
- "h",
10348
- "dic"
10349
- ],
10350
- "x-fortran": [
10351
- "f",
10352
- "for",
10353
- "f77",
10354
- "f90"
10355
- ],
10356
- "x-opml": "opml",
10357
- "x-nfo": "nfo",
10358
- "x-sfv": "sfv",
10359
- "x-uuencode": "uu",
10360
- "webviewhtml": "htt",
10361
- "javascript": "js",
10362
- "json": "json",
10363
- "markdown": [
10364
- "md",
10365
- "markdown",
10366
- "mdown",
10367
- "markdn"
10368
- ],
10369
- "vnd.wap.si": "si",
10370
- "vnd.wap.sl": "sl"
10371
- },
10372
- "video": {
10373
- "3gpp": "3gp",
10374
- "annodex": "axv",
10375
- "dl": "dl",
10376
- "dv": [
10377
- "dif",
10378
- "dv"
10379
- ],
10380
- "fli": "fli",
10381
- "gl": "gl",
10382
- "mpeg": [
10383
- "mpeg",
10384
- "mpg",
10385
- "mpe",
10386
- "m1v",
10387
- "m2v",
10388
- "mp2",
10389
- "mpa",
10390
- "mpv2"
10391
- ],
10392
- "mp4": [
10393
- "mp4",
10394
- "mp4v",
10395
- "mpg4"
10396
- ],
10397
- "quicktime": [
10398
- "qt",
10399
- "mov"
10400
- ],
10401
- "ogg": "ogv",
10402
- "vnd.mpegurl": [
10403
- "mxu",
10404
- "m4u"
10405
- ],
10406
- "x-flv": "flv",
10407
- "x-la-asf": [
10408
- "lsf",
10409
- "lsx"
10410
- ],
10411
- "x-mng": "mng",
10412
- "x-ms-asf": [
10413
- "asf",
10414
- "asx",
10415
- "asr"
10416
- ],
10417
- "x-ms-wm": "wm",
10418
- "x-ms-wmv": "wmv",
10419
- "x-ms-wmx": "wmx",
10420
- "x-ms-wvx": "wvx",
10421
- "x-msvideo": "avi",
10422
- "x-sgi-movie": "movie",
10423
- "x-matroska": [
10424
- "mpv",
10425
- "mkv",
10426
- "mk3d",
10427
- "mks"
10428
- ],
10429
- "3gpp2": "3g2",
10430
- "h261": "h261",
10431
- "h263": "h263",
10432
- "h264": "h264",
10433
- "jpeg": "jpgv",
10434
- "jpm": [
10435
- "jpm",
10436
- "jpgm"
10437
- ],
10438
- "mj2": [
10439
- "mj2",
10440
- "mjp2"
10441
- ],
10442
- "vnd.dece.hd": [
10443
- "uvh",
10444
- "uvvh"
10445
- ],
10446
- "vnd.dece.mobile": [
10447
- "uvm",
10448
- "uvvm"
10449
- ],
10450
- "vnd.dece.pd": [
10451
- "uvp",
10452
- "uvvp"
10453
- ],
10454
- "vnd.dece.sd": [
10455
- "uvs",
10456
- "uvvs"
10457
- ],
10458
- "vnd.dece.video": [
10459
- "uvv",
10460
- "uvvv"
10461
- ],
10462
- "vnd.dvb.file": "dvb",
10463
- "vnd.fvt": "fvt",
10464
- "vnd.ms-playready.media.pyv": "pyv",
10465
- "vnd.uvvu.mp4": [
10466
- "uvu",
10467
- "uvvu"
10468
- ],
10469
- "vnd.vivo": "viv",
10470
- "webm": "webm",
10471
- "x-f4v": "f4v",
10472
- "x-m4v": "m4v",
10473
- "x-ms-vob": "vob",
10474
- "x-smv": "smv",
10475
- "mp2t": "ts"
10476
- },
10477
- "x-conference": {
10478
- "x-cooltalk": "ice"
10479
- },
10480
- "x-world": {
10481
- "x-vrml": [
10482
- "vrm",
10483
- "flr",
10484
- "wrz",
10485
- "xaf",
10486
- "xof"
10487
- ]
10488
- }
10489
- };
10490
-
10491
9015
  let mimeTypes;
10492
9016
 
10493
9017
  function getMimeType(filename) {
@@ -10496,17 +9020,25 @@ function getMimeType(filename) {
10496
9020
 
10497
9021
  function getMimeTypes() {
10498
9022
  if (!mimeTypes) {
10499
- mimeTypes = {};
10500
- for (const type of Object.keys(table)) {
10501
- for (const subtype of Object.keys(table[type])) {
10502
- const value = table[type][subtype];
10503
- if (typeof value == "string") {
10504
- mimeTypes[value] = type + "/" + subtype;
10505
- } else {
10506
- for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
10507
- mimeTypes[value[indexMimeType]] = type + "/" + subtype;
10508
- }
10509
- }
9023
+ mimeTypes = decodeMimeTypes(encodedMimeTypes);
9024
+ }
9025
+ return mimeTypes;
9026
+ }
9027
+
9028
+ function decodeMimeTypes(data) {
9029
+ const mimeTypes = Object.create(null);
9030
+ for (const block of data.split(";")) {
9031
+ const colonIndex = block.indexOf(":");
9032
+ const type = block.slice(0, colonIndex);
9033
+ let previousSubtype = "";
9034
+ for (const entry of block.slice(colonIndex + 1).split(",")) {
9035
+ const tokens = entry.split(" ");
9036
+ const subtype = previousSubtype.slice(0, Number.parseInt(tokens[0][0], 36)) + tokens[0].slice(1);
9037
+ previousSubtype = subtype;
9038
+ const expandedSubtype = subtype.replace(/!/g, "+xml");
9039
+ const extensions = tokens.length > 1 ? tokens.slice(1) : [expandedSubtype.split("+")[0]];
9040
+ for (const extension of extensions) {
9041
+ mimeTypes[extension] = type + "/" + expandedSubtype;
10510
9042
  }
10511
9043
  }
10512
9044
  }
@@ -10542,7 +9074,7 @@ function getMimeTypes() {
10542
9074
  */
10543
9075
 
10544
9076
 
10545
- q$1(setDefaultConfiguration);
9077
+ h(setDefaultConfiguration);
10546
9078
 
10547
9079
  exports.BlobReader = BlobReader;
10548
9080
  exports.BlobWriter = BlobWriter;
@@ -10559,10 +9091,12 @@ exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
10559
9091
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
10560
9092
  exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
10561
9093
  exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
9094
+ exports.ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_AUTHENTICATION_CODE;
10562
9095
  exports.ERR_INVALID_CODEC_DEFINITION = ERR_INVALID_CODEC_DEFINITION;
10563
9096
  exports.ERR_INVALID_CODEC_MODULE = ERR_INVALID_CODEC_MODULE;
10564
9097
  exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
10565
9098
  exports.ERR_INVALID_COMPRESSED_DATA = ERR_INVALID_COMPRESSED_DATA;
9099
+ exports.ERR_INVALID_CRC32 = ERR_INVALID_CRC32;
10566
9100
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
10567
9101
  exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
10568
9102
  exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;