id-scanner-lib 1.3.3 → 1.6.2

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 (80) hide show
  1. package/README.md +324 -410
  2. package/dist/id-scanner-lib.esm.js +4826 -0
  3. package/dist/id-scanner-lib.esm.js.map +1 -0
  4. package/dist/id-scanner-lib.js +4858 -0
  5. package/dist/id-scanner-lib.js.map +1 -0
  6. package/dist/types/browser-image-compression.d.ts +19 -0
  7. package/dist/types/tesseract.d.ts +280 -0
  8. package/package.json +89 -78
  9. package/src/core/base-module.ts +78 -0
  10. package/src/core/camera-manager.ts +813 -0
  11. package/src/core/config.ts +305 -0
  12. package/src/core/errors.ts +174 -0
  13. package/src/core/event-emitter.test.ts +42 -0
  14. package/src/core/event-emitter.ts +110 -0
  15. package/src/core/loading-state.test.ts +67 -0
  16. package/src/core/loading-state.ts +156 -0
  17. package/src/core/logger.test.ts +49 -0
  18. package/src/core/logger.ts +549 -0
  19. package/src/core/module-manager.ts +163 -0
  20. package/src/core/plugin-manager.ts +429 -0
  21. package/src/core/resource-manager.ts +762 -0
  22. package/src/core/result.ts +163 -0
  23. package/src/core/scanner-factory.ts +236 -0
  24. package/src/index.ts +117 -939
  25. package/src/interfaces/external-types.ts +200 -0
  26. package/src/interfaces/face-detection.ts +309 -0
  27. package/src/interfaces/scanner-module.ts +384 -0
  28. package/src/modules/face/face-detector.ts +988 -0
  29. package/src/modules/face/index.ts +208 -0
  30. package/src/modules/face/liveness-detector.ts +908 -0
  31. package/src/modules/face/types.ts +133 -0
  32. package/src/{id-recognition → modules/id-card}/anti-fake-detector.ts +274 -240
  33. package/src/modules/id-card/id-card-detector.ts +474 -0
  34. package/src/modules/id-card/index.ts +425 -0
  35. package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
  36. package/src/modules/id-card/ocr-worker.ts +259 -0
  37. package/src/modules/id-card/types.ts +178 -0
  38. package/src/modules/qrcode/index.ts +175 -0
  39. package/src/modules/qrcode/qr-code-scanner.ts +231 -0
  40. package/src/modules/qrcode/types.ts +169 -0
  41. package/src/types/common.test.ts +99 -0
  42. package/src/types/common.ts +166 -0
  43. package/src/types/tesseract.d.ts +265 -22
  44. package/src/utils/camera.test.ts +30 -0
  45. package/src/utils/camera.ts +4 -1
  46. package/src/utils/error-handler.test.ts +137 -0
  47. package/src/utils/error-handler.ts +110 -0
  48. package/src/utils/image-processing.ts +68 -49
  49. package/src/utils/index.test.ts +186 -0
  50. package/src/utils/index.ts +429 -0
  51. package/src/utils/performance.ts +168 -131
  52. package/src/utils/resource-manager.ts +65 -146
  53. package/src/utils/retry.test.ts +142 -0
  54. package/src/utils/retry.ts +282 -0
  55. package/src/utils/types.ts +90 -2
  56. package/src/utils/utils.test.ts +171 -0
  57. package/src/utils/worker.ts +123 -84
  58. package/src/version.ts +11 -0
  59. package/tools/scaffold.js +543 -0
  60. package/dist/id-scanner-core.esm.js +0 -11349
  61. package/dist/id-scanner-core.js +0 -11361
  62. package/dist/id-scanner-core.min.js +0 -1
  63. package/dist/id-scanner-ocr.esm.js +0 -2319
  64. package/dist/id-scanner-ocr.js +0 -2328
  65. package/dist/id-scanner-ocr.min.js +0 -1
  66. package/dist/id-scanner-qr.esm.js +0 -1296
  67. package/dist/id-scanner-qr.js +0 -1305
  68. package/dist/id-scanner-qr.min.js +0 -1
  69. package/dist/id-scanner.js +0 -4561
  70. package/dist/id-scanner.min.js +0 -1
  71. package/src/core.ts +0 -138
  72. package/src/demo/demo.ts +0 -204
  73. package/src/id-recognition/data-extractor.ts +0 -262
  74. package/src/id-recognition/id-detector.ts +0 -510
  75. package/src/id-recognition/ocr-worker.ts +0 -156
  76. package/src/index-umd.ts +0 -477
  77. package/src/ocr-module.ts +0 -187
  78. package/src/qr-module.ts +0 -179
  79. package/src/scanner/barcode-scanner.ts +0 -251
  80. package/src/scanner/qr-scanner.ts +0 -167
@@ -1 +0,0 @@
1
- var global,factory;global=this,factory=function(t,r){"use strict";class n{constructor(t={}){this.options=t,this.stream=null,this.videoElement=null,this.options={width:640,height:480,facingMode:"environment",...t}}async start(t){return this.initialize(t)}stop(){this.release()}async initialize(t){this.videoElement=t;try{const t={video:{width:{ideal:this.options.width},height:{ideal:this.options.height},facingMode:this.options.facingMode}};this.stream=await navigator.mediaDevices.getUserMedia(t),this.videoElement&&(this.videoElement.srcObject=this.stream,await new Promise((t=>{this.videoElement&&(this.videoElement.onloadedmetadata=()=>{this.videoElement&&this.videoElement.play().then((()=>t()))})})))}catch(t){throw Error("无法访问摄像头。请确保已授予摄像头访问权限,并且摄像头未被其他应用程序占用。")}}captureFrame(){if(!this.videoElement)return null;const t=document.createElement("canvas");t.width=this.videoElement.videoWidth,t.height=this.videoElement.videoHeight;const r=t.getContext("2d");return r?(r.drawImage(this.videoElement,0,0,t.width,t.height),r.getImageData(0,0,t.width,t.height)):null}release(){this.stream&&(this.stream.getTracks().forEach((t=>t.stop())),this.stream=null),this.videoElement&&(this.videoElement.srcObject=null,this.videoElement=null)}}function e(t,r){return new Promise((function(n,e){let o;return i(t).then((function(t){try{return o=t,n(new Blob([r.slice(0,2),o,r.slice(2)],{type:"image/jpeg"}))}catch(t){return e(t)}}),e)}))}const i=t=>new Promise(((r,n)=>{const e=new FileReader;e.addEventListener("load",(({target:{result:t}})=>{const e=new DataView(t);let i=0;if(65496!==e.getUint16(i))return n("not a valid JPEG");for(i+=2;;){const o=e.getUint16(i);if(65498===o)break;const s=e.getUint16(i+2);if(65505===o&&1165519206===e.getUint32(i+4)){const o=i+10;let a;switch(e.getUint16(o)){case 18761:a=!0;break;case 19789:a=!1;break;default:return n("TIFF header contains invalid endian")}if(42!==e.getUint16(o+2,a))return n("TIFF header contains invalid version");const c=e.getUint32(o+4,a),f=o+c+2+12*e.getUint16(o+c,a);for(let t=o+c+2;t<f;t+=12)if(274==e.getUint16(t,a)){if(3!==e.getUint16(t+2,a))return n("Orientation data type is invalid");if(1!==e.getUint32(t+4,a))return n("Orientation data count is invalid");e.setUint16(t+8,1,a);break}return r(t.slice(i,i+2+s))}i+=2+s}return r(new Blob)})),e.readAsArrayBuffer(t)}));var o={},s={get exports(){return o},set exports(t){o=t}};!function(){var t,r,n={};s.exports=n,n.parse=function(t,r){for(var e=n.bin.readUshort,i=n.bin.readUint,o=0,s={},a=new Uint8Array(t),c=a.length-4;101010256!=i(a,c);)c--;o=c,o+=4;var f=e(a,o+=4);e(a,o+=2);var u=i(a,o+=2),l=i(a,o+=4);o+=4,o=l;for(var h=0;h<f;h++){i(a,o),o+=4,o+=4,o+=4,i(a,o+=4),u=i(a,o+=4);var d=i(a,o+=4),A=e(a,o+=4),w=e(a,o+2),v=e(a,o+4);o+=6;var y=i(a,o+=8);o+=4,o+=A+w+v,n.o(a,y,s,u,d,r)}return s},n.o=function(t,r,e,i,o,s){var a=n.bin.readUshort,c=n.bin.readUint;c(t,r),a(t,r+=4),a(t,r+=2);var f=a(t,r+=2);c(t,r+=2),c(t,r+=4),r+=4;var u=a(t,r+=8),l=a(t,r+=2);r+=2;var h=n.bin.readUTF8(t,r,u);if(r+=u,r+=l,s)e[h]={size:o,csize:i};else{var d=new Uint8Array(t.buffer,r);if(0==f)e[h]=new Uint8Array(d.buffer.slice(r,r+i));else{if(8!=f)throw"unknown compression method: "+f;var A=new Uint8Array(o);n.inflateRaw(d,A),e[h]=A}}},n.inflateRaw=function(t,r){return n.F.inflate(t,r)},n.inflate=function(t,r){return n.inflateRaw(new Uint8Array(t.buffer,t.byteOffset+2,t.length-6),r)},n.deflate=function(t,r){null==r&&(r={level:6});var e=0,i=new Uint8Array(50+Math.floor(1.1*t.length));i[e]=120,i[e+1]=156,e+=2,e=n.F.deflateRaw(t,i,e,r.level);var o=n.adler(t,0,t.length);return i[e+0]=o>>>24&255,i[e+1]=o>>>16&255,i[e+2]=o>>>8&255,i[e+3]=o>>>0&255,new Uint8Array(i.buffer,0,e+4)},n.deflateRaw=function(t,r){null==r&&(r={level:6});var e=new Uint8Array(50+Math.floor(1.1*t.length)),i=n.F.deflateRaw(t,e,i,r.level);return new Uint8Array(e.buffer,0,i)},n.encode=function(t,r){null==r&&(r=!1);var e=0,i=n.bin.writeUint,o=n.bin.writeUshort,s={};for(var a in t){var c=!n.B(a)&&!r,f=t[a],u=n.crc.crc(f,0,f.length);s[a]={cpr:c,usize:f.length,crc:u,file:c?n.deflateRaw(f):f}}for(var a in s)e+=s[a].file.length+30+46+2*n.bin.sizeUTF8(a);e+=22;var l=new Uint8Array(e),h=0,d=[];for(var a in s){var A=s[a];d.push(h),h=n.P(l,h,a,A,0)}var w=0,v=h;for(var a in s)A=s[a],d.push(h),h=n.P(l,h,a,A,1,d[w++]);var y=h-v;return i(l,h,101010256),h+=4,o(l,h+=4,w),o(l,h+=2,w),i(l,h+=2,y),i(l,h+=4,v),h+=4,h+=2,l.buffer},n.B=function(t){var r=t.split(".").pop().toLowerCase();return-1!="png,jpg,jpeg,zip".indexOf(r)},n.P=function(t,r,e,i,o,s){var a=n.bin.writeUint,c=n.bin.writeUshort,f=i.file;return a(t,r,0==o?67324752:33639248),r+=4,1==o&&(r+=2),c(t,r,20),c(t,r+=2,0),c(t,r+=2,i.cpr?8:0),a(t,r+=2,0),a(t,r+=4,i.crc),a(t,r+=4,f.length),a(t,r+=4,i.usize),c(t,r+=4,n.bin.sizeUTF8(e)),c(t,r+=2,0),r+=2,1==o&&(r+=2,r+=2,a(t,r+=6,s),r+=4),r+=n.bin.writeUTF8(t,r,e),0==o&&(t.set(f,r),r+=f.length),r},n.crc={table:function(){for(var t=new Uint32Array(256),r=0;r<256;r++){for(var n=r,e=0;e<8;e++)1&n?n=3988292384^n>>>1:n>>>=1;t[r]=n}return t}(),update:function(t,r,e,i){for(var o=0;o<i;o++)t=n.crc.table[255&(t^r[e+o])]^t>>>8;return t},crc:function(t,r,e){return 4294967295^n.crc.update(4294967295,t,r,e)}},n.adler=function(t,r,n){for(var e=1,i=0,o=r,s=r+n;o<s;){for(var a=Math.min(o+5552,s);o<a;)i+=e+=t[o++];e%=65521,i%=65521}return i<<16|e},n.bin={readUshort:function(t,r){return t[r]|t[r+1]<<8},writeUshort:function(t,r,n){t[r]=255&n,t[r+1]=n>>8&255},readUint:function(t,r){return 16777216*t[r+3]+(t[r+2]<<16|t[r+1]<<8|t[r])},writeUint:function(t,r,n){t[r]=255&n,t[r+1]=n>>8&255,t[r+2]=n>>16&255,t[r+3]=n>>24&255},readASCII:function(t,r,n){for(var e="",i=0;i<n;i++)e+=String.fromCharCode(t[r+i]);return e},writeASCII:function(t,r,n){for(var e=0;e<n.length;e++)t[r+e]=n.charCodeAt(e)},pad:function(t){return t.length<2?"0"+t:t},readUTF8:function(t,r,e){for(var i,o="",s=0;s<e;s++)o+="%"+n.bin.pad(t[r+s].toString(16));try{i=decodeURIComponent(o)}catch(i){return n.bin.readASCII(t,r,e)}return i},writeUTF8:function(t,r,n){for(var e=n.length,i=0,o=0;o<e;o++){var s=n.charCodeAt(o);if(4294967168&s)if(4294965248&s)if(4294901760&s){if(4292870144&s)throw"e";t[r+i]=240|s>>18,t[r+i+1]=128|s>>12&63,t[r+i+2]=128|s>>6&63,t[r+i+3]=128|63&s,i+=4}else t[r+i]=224|s>>12,t[r+i+1]=128|s>>6&63,t[r+i+2]=128|63&s,i+=3;else t[r+i]=192|s>>6,t[r+i+1]=128|63&s,i+=2;else t[r+i]=s,i++}return i},sizeUTF8:function(t){for(var r=t.length,n=0,e=0;e<r;e++){var i=t.charCodeAt(e);if(4294967168&i)if(4294965248&i)if(4294901760&i){if(4292870144&i)throw"e";n+=4}else n+=3;else n+=2;else n++}return n}},n.F={},n.F.deflateRaw=function(t,r,e,i){var o=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][i],s=n.F.U,a=n.F.O,c=n.F._,f=0,u=e<<3,l=0,h=t.length;if(0==i){for(;f<h;)c(r,u,f+(b=Math.min(65535,h-f))==h?1:0),u=n.F.G(t,f,b,r,u+8),f+=b;return u>>>3}var d=s.lits,A=s.strt,w=s.prev,v=0,y=0,m=0,g=0,p=0,M=0;for(h>2&&(A[M=n.F.tt(t,0)]=0),f=0;f<h;f++){if(p=M,f+1<h-2){M=n.F.tt(t,f+1);var E=f+1&32767;w[E]=A[M],A[M]=E}if(l<=f){(v>14e3||y>26697)&&h-f>100&&(l<f&&(d[v]=f-l,v+=2,l=f),u=n.F.rt(f==h-1||l==h?1:0,d,v,g,t,m,f-m,r,u),v=y=g=0,m=f);var U=0;f<h-2&&(U=n.F.nt(t,f,w,p,Math.min(o[2],h-f),o[3]));var b=U>>>16,I=65535&U;if(0!=U){I=65535&U;var B=a(b=U>>>16,s.of0);s.lhst[257+B]++;var C=a(I,s.df0);s.dhst[C]++,g+=s.exb[B]+s.dxb[C],d[v]=b<<23|f-l,d[v+1]=I<<16|B<<8|C,v+=2,l=f+b}else s.lhst[t[f]]++;y++}}for(m==f&&0!=t.length||(l<f&&(d[v]=f-l,v+=2,l=f),u=n.F.rt(1,d,v,g,t,m,f-m,r,u),v=0,y=0,v=y=g=0,m=f);7&u;)u++;return u>>>3},n.F.nt=function(t,r,e,i,o,s){var a=32767&r,c=e[a],f=a-c+32768&32767;if(c==a||i!=n.F.tt(t,r-f))return 0;for(var u=0,l=0,h=Math.min(32767,r);f<=h&&0!=--s&&c!=a;){if(0==u||t[r+u]==t[r+u-f]){var d=n.F.et(t,r,f);if(d>u){if(l=f,(u=d)>=o)break;f+2<d&&(d=f+2);for(var A=0,w=0;w<d-2;w++){var v=r-f+w+32768&32767,y=v-e[v]+32768&32767;y>A&&(A=y,c=v)}}}f+=(a=c)-(c=e[a])+32768&32767}return u<<16|l},n.F.et=function(t,r,n){if(t[r]!=t[r-n]||t[r+1]!=t[r+1-n]||t[r+2]!=t[r+2-n])return 0;var e=r,i=Math.min(t.length,r+258);for(r+=3;r<i&&t[r]==t[r-n];)r++;return r-e},n.F.tt=function(t,r){return(t[r]<<8|t[r+1])+(t[r+2]<<4)&65535},n.saved=0,n.F.rt=function(t,r,e,i,o,s,a,c,f){var u,l,h,d,A,w,v,y,m,g=n.F.U,p=n.F.it,M=n.F._;g.lhst[256]++,l=(u=n.F.getTrees())[0],h=u[1],d=u[2],A=u[3],w=u[4],v=u[5],y=u[6],m=u[7];var E=32+(f+3&7?8-(f+3&7):0)+(a<<3),U=i+n.F.contSize(g.fltree,g.lhst)+n.F.contSize(g.fdtree,g.dhst),b=i+n.F.contSize(g.ltree,g.lhst)+n.F.contSize(g.dtree,g.dhst);b+=14+3*v+n.F.contSize(g.itree,g.ihst)+(2*g.ihst[16]+3*g.ihst[17]+7*g.ihst[18]);for(var I=0;I<286;I++)g.lhst[I]=0;for(I=0;I<30;I++)g.dhst[I]=0;for(I=0;I<19;I++)g.ihst[I]=0;var B=E<U&&E<b?0:U<b?1:2;if(p(c,f,t),p(c,f+1,B),f+=3,0==B){for(;7&f;)f++;f=n.F.G(o,s,a,c,f)}else{var C,D;if(1==B&&(C=g.fltree,D=g.fdtree),2==B){n.F.makeCodes(g.ltree,l),n.F.revCodes(g.ltree,l),n.F.makeCodes(g.dtree,h),n.F.revCodes(g.dtree,h),n.F.makeCodes(g.itree,d),n.F.revCodes(g.itree,d),C=g.ltree,D=g.dtree,M(c,f,A-257),M(c,f+=5,w-1),M(c,f+=5,v-4),f+=4;for(var Q=0;Q<v;Q++)M(c,f+3*Q,g.itree[1+(g.ordr[Q]<<1)]);f+=3*v,f=n.F.ot(y,g.itree,c,f),f=n.F.ot(m,g.itree,c,f)}for(var R=s,S=0;S<e;S+=2){for(var k=r[S],T=k>>>23,x=R+(8388607&k);R<x;)f=n.F.st(o[R++],C,c,f);if(0!=T){var P=r[S+1],F=P>>16,$=P>>8&255,O=255&P;M(c,f=n.F.st(257+$,C,c,f),T-g.of0[$]),f+=g.exb[$],p(c,f=n.F.st(O,D,c,f),F-g.df0[O]),f+=g.dxb[O],R+=T}}f=n.F.st(256,C,c,f)}return f},n.F.G=function(t,r,n,e,i){var o=i>>>3;return e[o]=n,e[o+1]=n>>>8,e[o+2]=255-e[o],e[o+3]=255-e[o+1],o+=4,e.set(new Uint8Array(t.buffer,r,n),o),i+(n+4<<3)},n.F.getTrees=function(){for(var t=n.F.U,r=n.F.ct(t.lhst,t.ltree,15),e=n.F.ct(t.dhst,t.dtree,15),i=[],o=n.F.ft(t.ltree,i),s=[],a=n.F.ft(t.dtree,s),c=0;c<i.length;c+=2)t.ihst[i[c]]++;for(c=0;c<s.length;c+=2)t.ihst[s[c]]++;for(var f=n.F.ct(t.ihst,t.itree,7),u=19;u>4&&0==t.itree[1+(t.ordr[u-1]<<1)];)u--;return[r,e,f,o,a,u,i,s]},n.F.getSecond=function(t){for(var r=[],n=0;n<t.length;n+=2)r.push(t[n+1]);return r},n.F.nonZero=function(t){for(var r="",n=0;n<t.length;n+=2)0!=t[n+1]&&(r+=(n>>1)+",");return r},n.F.contSize=function(t,r){for(var n=0,e=0;e<r.length;e++)n+=r[e]*t[1+(e<<1)];return n},n.F.ot=function(t,r,e,i){for(var o=0;o<t.length;o+=2){var s=t[o],a=t[o+1];i=n.F.st(s,r,e,i);var c=16==s?2:17==s?3:7;s>15&&(n.F._(e,i,a,c),i+=c)}return i},n.F.ft=function(t,r){for(var n=t.length;2!=n&&0==t[n-1];)n-=2;for(var e=0;e<n;e+=2){var i=t[e+1],o=e+3<n?t[e+3]:-1,s=e+5<n?t[e+5]:-1,a=0==e?-1:t[e-1];if(0==i&&o==i&&s==i){for(var c=e+5;c+2<n&&t[c+2]==i;)c+=2;(f=Math.min(c+1-e>>>1,138))<11?r.push(17,f-3):r.push(18,f-11),e+=2*f-2}else if(i==a&&o==i&&s==i){for(c=e+5;c+2<n&&t[c+2]==i;)c+=2;var f=Math.min(c+1-e>>>1,6);r.push(16,f-3),e+=2*f-2}else r.push(i,0)}return n>>>1},n.F.ct=function(t,r,e){var i=[],o=t.length,s=r.length,a=0;for(a=0;a<s;a+=2)r[a]=0,r[a+1]=0;for(a=0;a<o;a++)0!=t[a]&&i.push({lit:a,f:t[a]});var c=i.length,f=i.slice(0);if(0==c)return 0;if(1==c){var u=i[0].lit;return f=0==u?1:0,r[1+(u<<1)]=1,r[1+(f<<1)]=1,1}i.sort((function(t,r){return t.f-r.f}));var l=i[0],h=i[1],d=0,A=1,w=2;for(i[0]={lit:-1,f:l.f+h.f,l:l,r:h,d:0};A!=c-1;)l=d!=A&&(w==c||i[d].f<i[w].f)?i[d++]:i[w++],h=d!=A&&(w==c||i[d].f<i[w].f)?i[d++]:i[w++],i[A++]={lit:-1,f:l.f+h.f,l:l,r:h};var v=n.F.setDepth(i[A-1],0);for(v>e&&(n.F.restrictDepth(f,e,v),v=e),a=0;a<c;a++)r[1+(f[a].lit<<1)]=f[a].d;return v},n.F.setDepth=function(t,r){return-1!=t.lit?(t.d=r,r):Math.max(n.F.setDepth(t.l,r+1),n.F.setDepth(t.r,r+1))},n.F.restrictDepth=function(t,r,n){var e=0,i=1<<n-r,o=0;for(t.sort((function(t,r){return r.d==t.d?t.f-r.f:r.d-t.d})),e=0;e<t.length&&t[e].d>r;e++){var s=t[e].d;t[e].d=r,o+=i-(1<<n-s)}for(o>>>=n-r;o>0;)(s=t[e].d)<r?(t[e].d++,o-=1<<r-s-1):e++;for(;e>=0;e--)t[e].d==r&&o<0&&(t[e].d--,o++)},n.F.O=function(t,r){var n=0;return r[16|n]<=t&&(n|=16),r[8|n]<=t&&(n|=8),r[4|n]<=t&&(n|=4),r[2|n]<=t&&(n|=2),r[1|n]<=t&&(n|=1),n},n.F.st=function(t,r,e,i){return n.F.it(e,i,r[t<<1]),i+r[1+(t<<1)]},n.F.inflate=function(t,r){var e=Uint8Array;if(3==t[0]&&0==t[1])return r||new e(0);var i=n.F,o=i.ut,s=i.lt,a=i.ht,c=i.makeCodes,f=i.codes2map,u=i.dt,l=i.U,h=null==r;h&&(r=new e(t.length>>>2<<3));for(var d,A,w=0,v=0,y=0,m=0,g=0,p=0,M=0,E=0,U=0;0==w;)if(w=o(t,U,1),v=o(t,U+1,2),U+=3,0!=v){if(h&&(r=n.F.At(r,E+(1<<17))),1==v&&(d=l.flmap,A=l.fdmap,p=511,M=31),2==v){y=s(t,U,5)+257,m=s(t,U+5,5)+1,g=s(t,U+10,4)+4,U+=14;for(var b=0;b<38;b+=2)l.itree[b]=0,l.itree[b+1]=0;var I=1;for(b=0;b<g;b++){var B=s(t,U+3*b,3);l.itree[1+(l.ordr[b]<<1)]=B,B>I&&(I=B)}U+=3*g,c(l.itree,I),f(l.itree,I,l.imap),d=l.lmap,A=l.dmap,U=a(l.imap,(1<<I)-1,y+m,t,U,l.ttree);var C=i.wt(l.ttree,0,y,l.ltree);p=(1<<C)-1;var D=i.wt(l.ttree,y,m,l.dtree);M=(1<<D)-1,c(l.ltree,C),f(l.ltree,C,d),c(l.dtree,D),f(l.dtree,D,A)}for(;;){var Q=d[u(t,U)&p];U+=15&Q;var R=Q>>>4;if(R>>>8==0)r[E++]=R;else{if(256==R)break;var S=E+R-254;if(R>264){var k=l.ldef[R-257];S=E+(k>>>3)+s(t,U,7&k),U+=7&k}var T=A[u(t,U)&M];U+=15&T;var x=T>>>4,P=l.ddef[x],F=(P>>>4)+o(t,U,15&P);for(U+=15&P,h&&(r=n.F.At(r,E+(1<<17)));E<S;)r[E]=r[E++-F],r[E]=r[E++-F],r[E]=r[E++-F],r[E]=r[E++-F];E=S}}}else{7&U&&(U+=8-(7&U));var $=4+(U>>>3),O=t[$-4]|t[$-3]<<8;h&&(r=n.F.At(r,E+O)),r.set(new e(t.buffer,t.byteOffset+$,O),E),U=$+O<<3,E+=O}return r.length==E?r:r.slice(0,E)},n.F.At=function(t,r){var n=t.length;if(r<=n)return t;var e=new Uint8Array(Math.max(n<<1,r));return e.set(t,0),e},n.F.ht=function(t,r,e,i,o,s){for(var a=n.F.lt,c=n.F.dt,f=0;f<e;){var u=t[c(i,o)&r];o+=15&u;var l=u>>>4;if(l<=15)s[f]=l,f++;else{var h=0,d=0;16==l?(d=3+a(i,o,2),o+=2,h=s[f-1]):17==l?(d=3+a(i,o,3),o+=3):18==l&&(d=11+a(i,o,7),o+=7);for(var A=f+d;f<A;)s[f]=h,f++}}return o},n.F.wt=function(t,r,n,e){for(var i=0,o=0,s=e.length>>>1;o<n;){var a=t[o+r];e[o<<1]=0,e[1+(o<<1)]=a,a>i&&(i=a),o++}for(;o<s;)e[o<<1]=0,e[1+(o<<1)]=0,o++;return i},n.F.makeCodes=function(t,r){for(var e,i,o,s,a=n.F.U,c=t.length,f=a.bl_count,u=0;u<=r;u++)f[u]=0;for(u=1;u<c;u+=2)f[t[u]]++;var l=a.next_code;for(e=0,f[0]=0,i=1;i<=r;i++)e=e+f[i-1]<<1,l[i]=e;for(o=0;o<c;o+=2)0!=(s=t[o+1])&&(t[o]=l[s],l[s]++)},n.F.codes2map=function(t,r,e){for(var i=t.length,o=n.F.U.rev15,s=0;s<i;s+=2)if(0!=t[s+1])for(var a=s>>1,c=t[s+1],f=a<<4|c,u=r-c,l=t[s]<<u,h=l+(1<<u);l!=h;)e[o[l]>>>15-r]=f,l++},n.F.revCodes=function(t,r){for(var e=n.F.U.rev15,i=15-r,o=0;o<t.length;o+=2){var s=t[o]<<r-t[o+1];t[o]=e[s]>>>i}},n.F._=function(t,r,n){n<<=7&r;var e=r>>>3;t[e]|=n,t[e+1]|=n>>>8},n.F.it=function(t,r,n){n<<=7&r;var e=r>>>3;t[e]|=n,t[e+1]|=n>>>8,t[e+2]|=n>>>16},n.F.lt=function(t,r,n){return(t[r>>>3]|t[1+(r>>>3)]<<8)>>>(7&r)&(1<<n)-1},n.F.ut=function(t,r,n){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16)>>>(7&r)&(1<<n)-1},n.F.dt=function(t,r){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16)>>>(7&r)},n.F.vt=function(t,r){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16|t[3+(r>>>3)]<<24)>>>(7&r)},n.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[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,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[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,65535,65535],dxb:[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,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),function(){for(var t=n.F.U,r=0;r<32768;r++){var e=r;e=(4278255360&(e=(4042322160&(e=(3435973836&(e=(2863311530&e)>>>1|(1431655765&e)<<1))>>>2|(858993459&e)<<2))>>>4|(252645135&e)<<4))>>>8|(16711935&e)<<8,t.rev15[r]=(e>>>16|e<<16)>>>17}function i(t,r,n){for(;0!=r--;)t.push(0,n)}for(r=0;r<32;r++)t.ldef[r]=t.of0[r]<<3|t.exb[r],t.ddef[r]=t.df0[r]<<4|t.dxb[r];i(t.fltree,144,8),i(t.fltree,112,9),i(t.fltree,24,7),i(t.fltree,8,8),n.F.makeCodes(t.fltree,9),n.F.codes2map(t.fltree,9,t.flmap),n.F.revCodes(t.fltree,9),i(t.fdtree,32,5),n.F.makeCodes(t.fdtree,5),n.F.codes2map(t.fdtree,5,t.fdmap),n.F.revCodes(t.fdtree,5),i(t.itree,19,0),i(t.ltree,286,0),i(t.dtree,30,0),i(t.ttree,320,0)}()}();var a=function(t,r){return r.forEach((function(r){r&&"string"!=typeof r&&!Array.isArray(r)&&Object.keys(r).forEach((function(n){if("default"!==n&&!(n in t)){var e=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(t,n,e.get?e:{enumerable:!0,get:function(){return r[n]}})}}))})),Object.freeze(t)}({__proto__:null,default:o},[o]);const c=function(){var t={nextZero(t,r){for(;0!=t[r];)r++;return r},readUshort:(t,r)=>t[r]<<8|t[r+1],writeUshort(t,r,n){t[r]=n>>8&255,t[r+1]=255&n},readUint:(t,r)=>16777216*t[r]+(t[r+1]<<16|t[r+2]<<8|t[r+3]),writeUint(t,r,n){t[r]=n>>24&255,t[r+1]=n>>16&255,t[r+2]=n>>8&255,t[r+3]=255&n},readASCII(t,r,n){let e="";for(let i=0;i<n;i++)e+=String.fromCharCode(t[r+i]);return e},writeASCII(t,r,n){for(let e=0;e<n.length;e++)t[r+e]=n.charCodeAt(e)},readBytes(t,r,n){const e=[];for(let i=0;i<n;i++)e.push(t[r+i]);return e},pad:t=>t.length<2?"0"+t:t,readUTF8(r,n,e){let i,o="";for(let i=0;i<e;i++)o+="%"+t.pad(r[n+i].toString(16));try{i=decodeURIComponent(o)}catch(i){return t.readASCII(r,n,e)}return i}};function r(r,n,e,i){const s=n*e,a=o(i),c=Math.ceil(n*a/8),f=new Uint8Array(4*s),u=new Uint32Array(f.buffer),{ctype:l}=i,{depth:h}=i,d=t.readUshort;if(6==l){const t=s<<2;if(8==h)for(var A=0;A<t;A+=4)f[A]=r[A],f[A+1]=r[A+1],f[A+2]=r[A+2],f[A+3]=r[A+3];if(16==h)for(A=0;A<t;A++)f[A]=r[A<<1]}else if(2==l){const t=i.tabs.tRNS;if(null==t){if(8==h)for(A=0;A<s;A++){var w=3*A;u[A]=255<<24|r[w+2]<<16|r[w+1]<<8|r[w]}if(16==h)for(A=0;A<s;A++)w=6*A,u[A]=255<<24|r[w+4]<<16|r[w+2]<<8|r[w]}else{var v=t[0];const n=t[1],e=t[2];if(8==h)for(A=0;A<s;A++){var y=A<<2;w=3*A,u[A]=255<<24|r[w+2]<<16|r[w+1]<<8|r[w],r[w]==v&&r[w+1]==n&&r[w+2]==e&&(f[y+3]=0)}if(16==h)for(A=0;A<s;A++)y=A<<2,w=6*A,u[A]=255<<24|r[w+4]<<16|r[w+2]<<8|r[w],d(r,w)==v&&d(r,w+2)==n&&d(r,w+4)==e&&(f[y+3]=0)}}else if(3==l){const t=i.tabs.PLTE,o=i.tabs.tRNS,a=o?o.length:0;if(1==h)for(var m=0;m<e;m++){var g=m*c,p=m*n;for(A=0;A<n;A++){y=p+A<<2;var M=3*(E=r[g+(A>>3)]>>7-(7&A)&1);f[y]=t[M],f[y+1]=t[M+1],f[y+2]=t[M+2],f[y+3]=E<a?o[E]:255}}if(2==h)for(m=0;m<e;m++)for(g=m*c,p=m*n,A=0;A<n;A++)y=p+A<<2,M=3*(E=r[g+(A>>2)]>>6-((3&A)<<1)&3),f[y]=t[M],f[y+1]=t[M+1],f[y+2]=t[M+2],f[y+3]=E<a?o[E]:255;if(4==h)for(m=0;m<e;m++)for(g=m*c,p=m*n,A=0;A<n;A++)y=p+A<<2,M=3*(E=r[g+(A>>1)]>>4-((1&A)<<2)&15),f[y]=t[M],f[y+1]=t[M+1],f[y+2]=t[M+2],f[y+3]=E<a?o[E]:255;if(8==h)for(A=0;A<s;A++){var E;y=A<<2,M=3*(E=r[A]),f[y]=t[M],f[y+1]=t[M+1],f[y+2]=t[M+2],f[y+3]=E<a?o[E]:255}}else if(4==l){if(8==h)for(A=0;A<s;A++){y=A<<2;var U=r[b=A<<1];f[y]=U,f[y+1]=U,f[y+2]=U,f[y+3]=r[b+1]}if(16==h)for(A=0;A<s;A++){var b;y=A<<2,U=r[b=A<<2],f[y]=U,f[y+1]=U,f[y+2]=U,f[y+3]=r[b+2]}}else if(0==l)for(v=i.tabs.tRNS?i.tabs.tRNS:-1,m=0;m<e;m++){const t=m*c,e=m*n;if(1==h)for(var I=0;I<n;I++){var B=(U=255*(r[t+(I>>>3)]>>>7-(7&I)&1))==255*v?0:255;u[e+I]=B<<24|U<<16|U<<8|U}else if(2==h)for(I=0;I<n;I++)B=(U=85*(r[t+(I>>>2)]>>>6-((3&I)<<1)&3))==85*v?0:255,u[e+I]=B<<24|U<<16|U<<8|U;else if(4==h)for(I=0;I<n;I++)B=(U=17*(r[t+(I>>>1)]>>>4-((1&I)<<2)&15))==17*v?0:255,u[e+I]=B<<24|U<<16|U<<8|U;else if(8==h)for(I=0;I<n;I++)B=(U=r[t+I])==v?0:255,u[e+I]=B<<24|U<<16|U<<8|U;else if(16==h)for(I=0;I<n;I++)U=r[t+(I<<1)],B=d(r,t+(I<<1))==v?0:255,u[e+I]=B<<24|U<<16|U<<8|U}return f}function n(t,r,n,a){const c=o(t),f=new Uint8Array((Math.ceil(n*c/8)+1+t.interlace)*a);return r=t.tabs.CgBI?i(r,f):e(r,f),0==t.interlace?r=s(r,t,0,n,a):1==t.interlace&&(r=function(t,r){const n=r.width,e=r.height,i=o(r),a=i>>3,c=Math.ceil(n*i/8),f=new Uint8Array(e*c);let u=0;const l=[0,0,4,0,2,0,1],h=[0,4,0,2,0,1,0],d=[8,8,8,4,4,2,2],A=[8,8,4,4,2,2,1];let w=0;for(;w<7;){const o=d[w],y=A[w];let m=0,g=0,p=l[w];for(;p<e;)p+=o,g++;let M=h[w];for(;M<n;)M+=y,m++;const E=Math.ceil(m*i/8);s(t,r,u,m,g);let U=0,b=l[w];for(;b<e;){let r=h[w],e=u+U*E<<3;for(;r<n;){var v;if(1==i&&(v=(v=t[e>>3])>>7-(7&e)&1,f[b*c+(r>>3)]|=v<<7-(7&r)),2==i&&(v=(v=t[e>>3])>>6-(7&e)&3,f[b*c+(r>>2)]|=v<<6-((3&r)<<1)),4==i&&(v=(v=t[e>>3])>>4-(7&e)&15,f[b*c+(r>>1)]|=v<<4-((1&r)<<2)),i>=8){const n=b*c+r*a;for(let r=0;r<a;r++)f[n+r]=t[(e>>3)+r]}e+=i,r+=y}U++,b+=o}m*g!=0&&(u+=g*(1+E)),w+=1}return f}(r,t)),r}function e(t,r){return i(new Uint8Array(t.buffer,2,t.length-6),r)}var i=function(){const t={H:{}};return t.H.N=function(r,n){const e=Uint8Array;let i,o,s=0,a=0,c=0,f=0,u=0,l=0,h=0,d=0,A=0;if(3==r[0]&&0==r[1])return n||new e(0);const w=t.H,v=w.b,y=w.e,m=w.R,g=w.n,p=w.A,M=w.Z,E=w.m,U=null==n;for(U&&(n=new e(r.length>>>2<<5));0==s;)if(s=v(r,A,1),a=v(r,A+1,2),A+=3,0!=a){if(U&&(n=t.H.W(n,d+(1<<17))),1==a&&(i=E.J,o=E.h,l=511,h=31),2==a){c=y(r,A,5)+257,f=y(r,A+5,5)+1,u=y(r,A+10,4)+4,A+=14;let t=1;for(var b=0;b<38;b+=2)E.Q[b]=0,E.Q[b+1]=0;for(b=0;b<u;b++){const n=y(r,A+3*b,3);E.Q[1+(E.X[b]<<1)]=n,n>t&&(t=n)}A+=3*u,g(E.Q,t),p(E.Q,t,E.u),i=E.w,o=E.d,A=m(E.u,(1<<t)-1,c+f,r,A,E.v);const n=w.V(E.v,0,c,E.C);l=(1<<n)-1;const e=w.V(E.v,c,f,E.D);h=(1<<e)-1,g(E.C,n),p(E.C,n,i),g(E.D,e),p(E.D,e,o)}for(;;){const t=i[M(r,A)&l];A+=15&t;const e=t>>>4;if(e>>>8==0)n[d++]=e;else{if(256==e)break;{let t=d+e-254;if(e>264){const n=E.q[e-257];t=d+(n>>>3)+y(r,A,7&n),A+=7&n}const i=o[M(r,A)&h];A+=15&i;const s=i>>>4,a=E.c[s],c=(a>>>4)+v(r,A,15&a);for(A+=15&a;d<t;)n[d]=n[d++-c],n[d]=n[d++-c],n[d]=n[d++-c],n[d]=n[d++-c];d=t}}}}else{7&A&&(A+=8-(7&A));const i=4+(A>>>3),o=r[i-4]|r[i-3]<<8;U&&(n=t.H.W(n,d+o)),n.set(new e(r.buffer,r.byteOffset+i,o),d),A=i+o<<3,d+=o}return n.length==d?n:n.slice(0,d)},t.H.W=function(t,r){const n=t.length;if(r<=n)return t;const e=new Uint8Array(n<<1);return e.set(t,0),e},t.H.R=function(r,n,e,i,o,s){const a=t.H.e,c=t.H.Z;let f=0;for(;f<e;){const t=r[c(i,o)&n];o+=15&t;const e=t>>>4;if(e<=15)s[f]=e,f++;else{let t=0,r=0;16==e?(r=3+a(i,o,2),o+=2,t=s[f-1]):17==e?(r=3+a(i,o,3),o+=3):18==e&&(r=11+a(i,o,7),o+=7);const n=f+r;for(;f<n;)s[f]=t,f++}}return o},t.H.V=function(t,r,n,e){let i=0,o=0;const s=e.length>>>1;for(;o<n;){const n=t[o+r];e[o<<1]=0,e[1+(o<<1)]=n,n>i&&(i=n),o++}for(;o<s;)e[o<<1]=0,e[1+(o<<1)]=0,o++;return i},t.H.n=function(r,n){const e=t.H.m,i=r.length;let o,s,a,c;const f=e.j;for(var u=0;u<=n;u++)f[u]=0;for(u=1;u<i;u+=2)f[r[u]]++;const l=e.K;for(o=0,f[0]=0,s=1;s<=n;s++)o=o+f[s-1]<<1,l[s]=o;for(a=0;a<i;a+=2)c=r[a+1],0!=c&&(r[a]=l[c],l[c]++)},t.H.A=function(r,n,e){const i=r.length,o=t.H.m.r;for(let t=0;t<i;t+=2)if(0!=r[t+1]){const i=t>>1,s=r[t+1],a=i<<4|s,c=n-s;let f=r[t]<<c;const u=f+(1<<c);for(;f!=u;)e[o[f]>>>15-n]=a,f++}},t.H.l=function(r,n){const e=t.H.m.r,i=15-n;for(let t=0;t<r.length;t+=2){const o=r[t]<<n-r[t+1];r[t]=e[o]>>>i}},t.H.M=function(t,r,n){n<<=7&r;const e=r>>>3;t[e]|=n,t[e+1]|=n>>>8},t.H.I=function(t,r,n){n<<=7&r;const e=r>>>3;t[e]|=n,t[e+1]|=n>>>8,t[e+2]|=n>>>16},t.H.e=function(t,r,n){return(t[r>>>3]|t[1+(r>>>3)]<<8)>>>(7&r)&(1<<n)-1},t.H.b=function(t,r,n){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16)>>>(7&r)&(1<<n)-1},t.H.Z=function(t,r){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16)>>>(7&r)},t.H.i=function(t,r){return(t[r>>>3]|t[1+(r>>>3)]<<8|t[2+(r>>>3)]<<16|t[3+(r>>>3)]<<24)>>>(7&r)},t.H.m=function(){const t=Uint16Array,r=Uint32Array;return{K:new t(16),j:new t(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[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,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new t(32),p:[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,65535,65535],z:[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,0,0],c:new r(32),J:new t(512),yt:[],h:new t(32),$:[],w:new t(32768),C:[],v:[],d:new t(32768),D:[],u:new t(512),Q:[],r:new t(32768),s:new r(286),Y:new r(30),a:new r(19),t:new r(15e3),k:new t(65536),g:new t(32768)}}(),function(){const r=t.H.m;for(var n=0;n<32768;n++){let t=n;t=(2863311530&t)>>>1|(1431655765&t)<<1,t=(3435973836&t)>>>2|(858993459&t)<<2,t=(4042322160&t)>>>4|(252645135&t)<<4,t=(4278255360&t)>>>8|(16711935&t)<<8,r.r[n]=(t>>>16|t<<16)>>>17}function e(t,r,n){for(;0!=r--;)t.push(0,n)}for(n=0;n<32;n++)r.q[n]=r.S[n]<<3|r.T[n],r.c[n]=r.p[n]<<4|r.z[n];e(r.yt,144,8),e(r.yt,112,9),e(r.yt,24,7),e(r.yt,8,8),t.H.n(r.yt,9),t.H.A(r.yt,9,r.J),t.H.l(r.yt,9),e(r.$,32,5),t.H.n(r.$,5),t.H.A(r.$,5,r.h),t.H.l(r.$,5),e(r.Q,19,0),e(r.C,286,0),e(r.D,30,0),e(r.v,320,0)}(),t.H.N}();function o(t){return[1,null,3,1,2,null,4][t.ctype]*t.depth}function s(t,r,n,e,i){let s=o(r);const c=Math.ceil(e*s/8);let f,u;s=Math.ceil(s/8);let l=t[n],h=0;if(l>1&&(t[n]=[0,0,1][l-2]),3==l)for(h=s;h<c;h++)t[h+1]=t[h+1]+(t[h+1-s]>>>1)&255;for(let r=0;r<i;r++)if(f=n+r*c,u=f+r+1,l=t[u-1],h=0,0==l)for(;h<c;h++)t[f+h]=t[u+h];else if(1==l){for(;h<s;h++)t[f+h]=t[u+h];for(;h<c;h++)t[f+h]=t[u+h]+t[f+h-s]}else if(2==l)for(;h<c;h++)t[f+h]=t[u+h]+t[f+h-c];else if(3==l){for(;h<s;h++)t[f+h]=t[u+h]+(t[f+h-c]>>>1);for(;h<c;h++)t[f+h]=t[u+h]+(t[f+h-c]+t[f+h-s]>>>1)}else{for(;h<s;h++)t[f+h]=t[u+h]+a(0,t[f+h-c],0);for(;h<c;h++)t[f+h]=t[u+h]+a(t[f+h-s],t[f+h-c],t[f+h-s-c])}return t}function a(t,r,n){const e=t+r-n,i=e-t,o=e-r,s=e-n;return i*i<=o*o&&i*i<=s*s?t:o*o<=s*s?r:n}function c(r,n,e){e.width=t.readUint(r,n),n+=4,e.height=t.readUint(r,n),n+=4,e.depth=r[n],n++,e.ctype=r[n],n++,e.compress=r[n],n++,e.filter=r[n],n++,e.interlace=r[n],n++}function f(t,r,n,e,i,o,s,a,c){const f=Math.min(r,i),u=Math.min(n,o);let l=0,h=0;for(let n=0;n<u;n++)for(let o=0;o<f;o++)if(s>=0&&a>=0?(l=n*r+o<<2,h=(a+n)*i+s+o<<2):(l=(-a+n)*r-s+o<<2,h=n*i+o<<2),0==c)e[h]=t[l],e[h+1]=t[l+1],e[h+2]=t[l+2],e[h+3]=t[l+3];else if(1==c){var d=t[l+3]*(1/255),A=t[l]*d,w=t[l+1]*d,v=t[l+2]*d,y=e[h+3]*(1/255),m=e[h]*y,g=e[h+1]*y,p=e[h+2]*y;const r=1-d,n=d+y*r,i=0==n?0:1/n;e[h+3]=255*n,e[h+0]=(A+m*r)*i,e[h+1]=(w+g*r)*i,e[h+2]=(v+p*r)*i}else if(2==c)d=t[l+3],A=t[l],w=t[l+1],v=t[l+2],y=e[h+3],m=e[h],g=e[h+1],p=e[h+2],d==y&&A==m&&w==g&&v==p?(e[h]=0,e[h+1]=0,e[h+2]=0,e[h+3]=0):(e[h]=A,e[h+1]=w,e[h+2]=v,e[h+3]=d);else if(3==c){if(d=t[l+3],A=t[l],w=t[l+1],v=t[l+2],y=e[h+3],m=e[h],g=e[h+1],p=e[h+2],d==y&&A==m&&w==g&&v==p)continue;if(d<220&&y>20)return!1}return!0}return{decode:function(r){const o=new Uint8Array(r);let s=8;const a=t,f=a.readUshort,u=a.readUint,l={tabs:{},frames:[]},h=new Uint8Array(o.length);let d,A=0,w=0;const v=[137,80,78,71,13,10,26,10];for(var y=0;y<8;y++)if(o[y]!=v[y])throw"The input is not a PNG file!";for(;s<o.length;){const t=a.readUint(o,s);s+=4;const r=a.readASCII(o,s,4);if(s+=4,"IHDR"==r)c(o,s,l);else if("iCCP"==r){for(var m=s;0!=o[m];)m++;a.readASCII(o,s,m-s);const n=o.slice(m+2,s+t);let c=null;try{c=e(n)}catch(t){c=i(n)}l.tabs[r]=c}else if("CgBI"==r)l.tabs[r]=o.slice(s,s+4);else if("IDAT"==r){for(y=0;y<t;y++)h[A+y]=o[s+y];A+=t}else if("acTL"==r)l.tabs[r]={num_frames:u(o,s),num_plays:u(o,s+4)},d=new Uint8Array(o.length);else if("fcTL"==r){0!=w&&((b=l.frames[l.frames.length-1]).data=n(l,d.slice(0,w),b.rect.width,b.rect.height),w=0);const t={x:u(o,s+12),y:u(o,s+16),width:u(o,s+4),height:u(o,s+8)};let r=f(o,s+22);r=f(o,s+20)/(0==r?100:r);const e={rect:t,delay:Math.round(1e3*r),dispose:o[s+24],blend:o[s+25]};l.frames.push(e)}else if("fdAT"==r){for(y=0;y<t-4;y++)d[w+y]=o[s+y+4];w+=t-4}else if("pHYs"==r)l.tabs[r]=[a.readUint(o,s),a.readUint(o,s+4),o[s+8]];else if("cHRM"==r)for(l.tabs[r]=[],y=0;y<8;y++)l.tabs[r].push(a.readUint(o,s+4*y));else if("tEXt"==r||"zTXt"==r){null==l.tabs[r]&&(l.tabs[r]={});var g=a.nextZero(o,s),p=a.readASCII(o,s,g-s),M=s+t-g-1;if("tEXt"==r)U=a.readASCII(o,g+1,M);else{var E=e(o.slice(g+2,g+2+M));U=a.readUTF8(E,0,E.length)}l.tabs[r][p]=U}else if("iTXt"==r){null==l.tabs[r]&&(l.tabs[r]={}),g=0,m=s,g=a.nextZero(o,m),p=a.readASCII(o,m,g-m);const n=o[m=g+1];var U;m+=2,g=a.nextZero(o,m),a.readASCII(o,m,g-m),m=g+1,g=a.nextZero(o,m),a.readUTF8(o,m,g-m),M=t-((m=g+1)-s),0==n?U=a.readUTF8(o,m,M):(E=e(o.slice(m,m+M)),U=a.readUTF8(E,0,E.length)),l.tabs[r][p]=U}else if("PLTE"==r)l.tabs[r]=a.readBytes(o,s,t);else if("hIST"==r){const t=l.tabs.PLTE.length/3;for(l.tabs[r]=[],y=0;y<t;y++)l.tabs[r].push(f(o,s+2*y))}else if("tRNS"==r)3==l.ctype?l.tabs[r]=a.readBytes(o,s,t):0==l.ctype?l.tabs[r]=f(o,s):2==l.ctype&&(l.tabs[r]=[f(o,s),f(o,s+2),f(o,s+4)]);else if("gAMA"==r)l.tabs[r]=a.readUint(o,s)/1e5;else if("sRGB"==r)l.tabs[r]=o[s];else if("bKGD"==r)0==l.ctype||4==l.ctype?l.tabs[r]=[f(o,s)]:2==l.ctype||6==l.ctype?l.tabs[r]=[f(o,s),f(o,s+2),f(o,s+4)]:3==l.ctype&&(l.tabs[r]=o[s]);else if("IEND"==r)break;s+=t,a.readUint(o,s),s+=4}var b;return 0!=w&&((b=l.frames[l.frames.length-1]).data=n(l,d.slice(0,w),b.rect.width,b.rect.height)),l.data=n(l,h,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function(t){const n=t.width,e=t.height;if(null==t.tabs.acTL)return[r(t.data,n,e,t).buffer];const i=[];null==t.frames[0].data&&(t.frames[0].data=t.data);const o=n*e*4,s=new Uint8Array(o),a=new Uint8Array(o),c=new Uint8Array(o);for(let l=0;l<t.frames.length;l++){const h=t.frames[l],d=h.rect.x,A=h.rect.y,w=h.rect.width,v=h.rect.height,y=r(h.data,w,v,t);if(0!=l)for(var u=0;u<o;u++)c[u]=s[u];if(0==h.blend?f(y,w,v,s,n,e,d,A,0):1==h.blend&&f(y,w,v,s,n,e,d,A,1),i.push(s.buffer.slice(0)),0==h.dispose);else if(1==h.dispose)f(a,w,v,s,n,e,d,A,0);else if(2==h.dispose)for(u=0;u<o;u++)s[u]=c[u]}return i},gt:a,Mt:f,Et:t}}();!function(){const{Mt:t}=c,{Et:r}=c,n=c.gt;var e={table:function(){const t=new Uint32Array(256);for(let r=0;r<256;r++){let n=r;for(let t=0;t<8;t++)1&n?n=3988292384^n>>>1:n>>>=1;t[r]=n}return t}(),update(t,r,n,i){for(let o=0;o<i;o++)t=e.table[255&(t^r[n+o])]^t>>>8;return t},crc:(t,r,n)=>4294967295^e.update(4294967295,t,r,n)};function i(t,r,n,e){r[n]+=t[0]*e>>4,r[n+1]+=t[1]*e>>4,r[n+2]+=t[2]*e>>4,r[n+3]+=t[3]*e>>4}function o(t){return Math.max(0,Math.min(255,t))}function s(t,r){const n=t[0]-r[0],e=t[1]-r[1],i=t[2]-r[2],o=t[3]-r[3];return n*n+e*e+i*i+o*o}function f(t,r,n,e,a,c,f){null==f&&(f=1);const u=e.length,l=[];for(var h=0;h<u;h++){const t=e[h];l.push([t>>>0&255,t>>>8&255,t>>>16&255,t>>>24&255])}for(h=0;h<u;h++){let t=4294967295;for(var d=0,A=0;A<u;A++){var w=s(l[h],l[A]);A!=h&&w<t&&(t=w,d=A)}}const v=new Uint32Array(a.buffer),y=new Int16Array(r*n*4),m=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(h=0;h<m.length;h++)m[h]=255*((m[h]+.5)/16-.5);for(let a=0;a<n;a++)for(let p=0;p<r;p++){var g;h=4*(a*r+p),2!=f?g=[o(t[h]+y[h]),o(t[h+1]+y[h+1]),o(t[h+2]+y[h+2]),o(t[h+3]+y[h+3])]:(w=m[4*(3&a)+(3&p)],g=[o(t[h]+w),o(t[h+1]+w),o(t[h+2]+w),o(t[h+3]+w)]),d=0;let M=16777215;for(A=0;A<u;A++){const t=s(g,l[A]);t<M&&(M=t,d=A)}const E=l[d],U=[g[0]-E[0],g[1]-E[1],g[2]-E[2],g[3]-E[3]];1==f&&(p!=r-1&&i(U,y,h+4,7),a!=n-1&&(0!=p&&i(U,y,h+4*r-4,3),i(U,y,h+4*r,5),p!=r-1&&i(U,y,h+4*r+4,1))),c[h>>2]=d,v[h>>2]=e[d]}}function u(t,n,i,o,s){null==s&&(s={});const{crc:a}=e,c=r.writeUint,f=r.writeUshort,u=r.writeASCII;let l=8;const h=t.frames.length>1;let d,A=!1,w=33+(h?20:0);if(null!=s.sRGB&&(w+=13),null!=s.pHYs&&(w+=21),null!=s.iCCP&&(d=pako.deflate(s.iCCP),w+=21+d.length+4),3==t.ctype){for(var v=t.plte.length,y=0;y<v;y++)t.plte[y]>>>24!=255&&(A=!0);w+=8+3*v+4+(A?8+1*v+4:0)}for(var m=0;m<t.frames.length;m++)h&&(w+=38),w+=(E=t.frames[m]).cimg.length+12,0!=m&&(w+=4);w+=12;const g=new Uint8Array(w),p=[137,80,78,71,13,10,26,10];for(y=0;y<8;y++)g[y]=p[y];if(c(g,l,13),l+=4,u(g,l,"IHDR"),l+=4,c(g,l,n),l+=4,c(g,l,i),l+=4,g[l]=t.depth,l++,g[l]=t.ctype,l++,g[l]=0,l++,g[l]=0,l++,g[l]=0,l++,c(g,l,a(g,l-17,17)),l+=4,null!=s.sRGB&&(c(g,l,1),l+=4,u(g,l,"sRGB"),l+=4,g[l]=s.sRGB,l++,c(g,l,a(g,l-5,5)),l+=4),null!=s.iCCP){const t=13+d.length;c(g,l,t),l+=4,u(g,l,"iCCP"),l+=4,u(g,l,"ICC profile"),l+=11,l+=2,g.set(d,l),l+=d.length,c(g,l,a(g,l-(t+4),t+4)),l+=4}if(null!=s.pHYs&&(c(g,l,9),l+=4,u(g,l,"pHYs"),l+=4,c(g,l,s.pHYs[0]),l+=4,c(g,l,s.pHYs[1]),l+=4,g[l]=s.pHYs[2],l++,c(g,l,a(g,l-13,13)),l+=4),h&&(c(g,l,8),l+=4,u(g,l,"acTL"),l+=4,c(g,l,t.frames.length),l+=4,c(g,l,null!=s.loop?s.loop:0),l+=4,c(g,l,a(g,l-12,12)),l+=4),3==t.ctype){for(c(g,l,3*(v=t.plte.length)),l+=4,u(g,l,"PLTE"),l+=4,y=0;y<v;y++){const r=3*y,n=t.plte[y],e=255&n,i=n>>>8&255,o=n>>>16&255;g[l+r+0]=e,g[l+r+1]=i,g[l+r+2]=o}if(l+=3*v,c(g,l,a(g,l-3*v-4,3*v+4)),l+=4,A){for(c(g,l,v),l+=4,u(g,l,"tRNS"),l+=4,y=0;y<v;y++)g[l+y]=t.plte[y]>>>24&255;l+=v,c(g,l,a(g,l-v-4,v+4)),l+=4}}let M=0;for(m=0;m<t.frames.length;m++){var E=t.frames[m];h&&(c(g,l,26),l+=4,u(g,l,"fcTL"),l+=4,c(g,l,M++),l+=4,c(g,l,E.rect.width),l+=4,c(g,l,E.rect.height),l+=4,c(g,l,E.rect.x),l+=4,c(g,l,E.rect.y),l+=4,f(g,l,o[m]),l+=2,f(g,l,1e3),l+=2,g[l]=E.dispose,l++,g[l]=E.blend,l++,c(g,l,a(g,l-30,30)),l+=4);const r=E.cimg;c(g,l,(v=r.length)+(0==m?0:4)),l+=4;const n=l;u(g,l,0==m?"IDAT":"fdAT"),l+=4,0!=m&&(c(g,l,M++),l+=4),g.set(r,l),l+=v,c(g,l,a(g,n,l-n)),l+=4}return c(g,l,0),l+=4,u(g,l,"IEND"),l+=4,c(g,l,a(g,l-4,4)),l+=4,g.buffer}function l(t,r,n){for(let e=0;e<t.frames.length;e++){const i=t.frames[e],o=i.rect.height,s=new Uint8Array(o*i.bpl+o);i.cimg=w(i.img,o,i.bpp,i.bpl,s,r,n)}}function h(r,n,e,i,o){const s=o[0],a=o[1],c=o[2],u=o[3],l=o[4],h=o[5];let w=6,v=8,m=255;for(var g=0;g<r.length;g++){const t=new Uint8Array(r[g]);for(var p=t.length,M=0;M<p;M+=4)m&=t[M+3]}const E=255!=m,U=function(r,n,e,i,o,s){const a=[];for(var c=0;c<r.length;c++){const l=new Uint8Array(r[c]),d=new Uint32Array(l.buffer);var f;let w=0,v=0,y=n,m=e,g=i?1:0;if(0!=c){const p=s||i||1==c||0!=a[c-2].dispose?1:2;let M=0,E=1e9;for(let t=0;t<p;t++){var u=new Uint8Array(r[c-1-t]);const i=new Uint32Array(r[c-1-t]);let s=n,a=e,f=-1,l=-1;for(let t=0;t<e;t++)for(let r=0;r<n;r++)d[h=t*n+r]!=i[h]&&(r<s&&(s=r),r>f&&(f=r),t<a&&(a=t),t>l&&(l=t));-1==f&&(s=a=f=l=0),o&&(!(1&~s)&&s--,!(1&~a)&&a--);const A=(f-s+1)*(l-a+1);A<E&&(E=A,M=t,w=s,v=a,y=f-s+1,m=l-a+1)}u=new Uint8Array(r[c-1-M]),1==M&&(a[c-1].dispose=2),f=new Uint8Array(y*m*4),t(u,n,e,f,y,m,-w,-v,0),g=t(l,n,e,f,y,m,-w,-v,3)?1:0,1==g?A(l,n,e,f,{x:w,y:v,width:y,height:m}):t(l,n,e,f,y,m,-w,-v,0)}else f=l.slice(0);a.push({rect:{x:w,y:v,width:y,height:m},img:f,blend:g,dispose:0})}if(i)for(c=0;c<a.length;c++){if(1==(w=a[c]).blend)continue;const t=w.rect,i=a[c-1].rect,s=Math.min(t.x,i.x),f=Math.min(t.y,i.y),u={x:s,y:f,width:Math.max(t.x+t.width,i.x+i.width)-s,height:Math.max(t.y+t.height,i.y+i.height)-f};a[c-1].dispose=1,c-1!=0&&d(r,n,e,a,c-1,u,o),d(r,n,e,a,c,u,o)}let l=0;if(1!=r.length)for(var h=0;h<a.length;h++){var w;l+=(w=a[h]).rect.width*w.rect.height}return a}(r,n,e,s,a,c),b={},I=[],B=[];if(0!=i){const t=[];for(M=0;M<U.length;M++)t.push(U[M].img.buffer);const r=function(t){let r=0;for(var n=0;n<t.length;n++)r+=t[n].byteLength;const e=new Uint8Array(r);let i=0;for(n=0;n<t.length;n++){const r=new Uint8Array(t[n]),o=r.length;for(let t=0;t<o;t+=4){let n=r[t],o=r[t+1],s=r[t+2];const a=r[t+3];0==a&&(n=o=s=0),e[i+t]=n,e[i+t+1]=o,e[i+t+2]=s,e[i+t+3]=a}i+=o}return e.buffer}(t),n=y(r,i);for(M=0;M<n.plte.length;M++)I.push(n.plte[M].est.rgba);let e=0;for(M=0;M<U.length;M++){const t=(D=U[M]).img.length;var C=new Uint8Array(n.inds.buffer,e>>2,t>>2);B.push(C);const r=new Uint8Array(n.abuf,e,t);h&&f(D.img,D.rect.width,D.rect.height,I,r,C),D.img.set(r),e+=t}}else for(g=0;g<U.length;g++){var D=U[g];const t=new Uint32Array(D.img.buffer);var Q=D.rect.width;for(p=t.length,C=new Uint8Array(p),B.push(C),M=0;M<p;M++){const r=t[M];if(0!=M&&r==t[M-1])C[M]=C[M-1];else if(M>Q&&r==t[M-Q])C[M]=C[M-Q];else{let t=b[r];if(null==t&&(b[r]=t=I.length,I.push(r),I.length>=300))break;C[M]=t}}}const R=I.length;for(R<=256&&0==l&&(v=R<=2?1:R<=4?2:R<=16?4:8,v=Math.max(v,u)),g=0;g<U.length;g++){(D=U[g]).rect.x,Q=D.rect.width;const t=D.rect.height;let r=D.img,n=4*Q,e=4;if(R<=256&&0==l){n=Math.ceil(v*Q/8);var S=new Uint8Array(n*t);const i=B[g];for(let r=0;r<t;r++){M=r*n;const t=r*Q;if(8==v)for(var k=0;k<Q;k++)S[M+k]=i[t+k];else if(4==v)for(k=0;k<Q;k++)S[M+(k>>1)]|=i[t+k]<<4-4*(1&k);else if(2==v)for(k=0;k<Q;k++)S[M+(k>>2)]|=i[t+k]<<6-2*(3&k);else if(1==v)for(k=0;k<Q;k++)S[M+(k>>3)]|=i[t+k]<<7-1*(7&k)}r=S,w=3,e=1}else if(0==E&&1==U.length){S=new Uint8Array(Q*t*3);const i=Q*t;for(M=0;M<i;M++){const t=3*M,n=4*M;S[t]=r[n],S[t+1]=r[n+1],S[t+2]=r[n+2]}r=S,w=2,e=3,n=3*Q}D.img=r,D.bpl=n,D.bpp=e}return{ctype:w,depth:v,plte:I,frames:U}}function d(r,n,e,i,o,s,a){const c=Uint8Array,f=Uint32Array,u=new c(r[o-1]),l=new f(r[o-1]),h=o+1<r.length?new c(r[o+1]):null,d=new c(r[o]),w=new f(d.buffer);let v=n,y=e,m=-1,g=-1;for(let t=0;t<s.height;t++)for(let r=0;r<s.width;r++){const e=s.x+r,a=s.y+t,c=a*n+e,f=w[c];0==f||0==i[o-1].dispose&&l[c]==f&&(null==h||0!=h[4*c+3])||(e<v&&(v=e),e>m&&(m=e),a<y&&(y=a),a>g&&(g=a))}-1==m&&(v=y=m=g=0),a&&(!(1&~v)&&v--,!(1&~y)&&y--),s={x:v,y:y,width:m-v+1,height:g-y+1};const p=i[o];p.rect=s,p.blend=1,p.img=new Uint8Array(s.width*s.height*4),0==i[o-1].dispose?(t(u,n,e,p.img,s.width,s.height,-s.x,-s.y,0),A(d,n,e,p.img,s)):t(d,n,e,p.img,s.width,s.height,-s.x,-s.y,0)}function A(r,n,e,i,o){t(r,n,e,i,o.width,o.height,-o.x,-o.y,2)}function w(t,r,n,e,i,o,s){const c=[];let f,u=[0,1,2,3,4];-1!=o?u=[o]:(r*e>5e5||1==n)&&(u=[0]),s&&(f={level:0});const l=a;for(var h=0;h<u.length;h++){for(let o=0;o<r;o++)v(i,t,o,e,n,u[h]);c.push(l.deflate(i,f))}let d,A=1e9;for(h=0;h<c.length;h++)c[h].length<A&&(d=h,A=c[h].length);return c[d]}function v(t,r,e,i,o,s){const a=e*i;let c=a+e;if(t[c]=s,c++,0==s)if(i<500)for(var f=0;f<i;f++)t[c+f]=r[a+f];else t.set(new Uint8Array(r.buffer,a,i),c);else if(1==s){for(f=0;f<o;f++)t[c+f]=r[a+f];for(f=o;f<i;f++)t[c+f]=r[a+f]-r[a+f-o]+256&255}else if(0==e){for(f=0;f<o;f++)t[c+f]=r[a+f];if(2==s)for(f=o;f<i;f++)t[c+f]=r[a+f];if(3==s)for(f=o;f<i;f++)t[c+f]=r[a+f]-(r[a+f-o]>>1)+256&255;if(4==s)for(f=o;f<i;f++)t[c+f]=r[a+f]-n(r[a+f-o],0,0)+256&255}else{if(2==s)for(f=0;f<i;f++)t[c+f]=r[a+f]+256-r[a+f-i]&255;if(3==s){for(f=0;f<o;f++)t[c+f]=r[a+f]+256-(r[a+f-i]>>1)&255;for(f=o;f<i;f++)t[c+f]=r[a+f]+256-(r[a+f-i]+r[a+f-o]>>1)&255}if(4==s){for(f=0;f<o;f++)t[c+f]=r[a+f]+256-n(0,r[a+f-i],0)&255;for(f=o;f<i;f++)t[c+f]=r[a+f]+256-n(r[a+f-o],r[a+f-i],r[a+f-o-i])&255}}}function y(t,r){const n=new Uint8Array(t),e=n.slice(0),i=new Uint32Array(e.buffer),o=m(e,r),s=o[0],a=o[1],c=n.length,f=new Uint8Array(c>>2);let u;if(n.length<2e7)for(var l=0;l<c;l+=4)u=g(s,h=n[l]*(1/255),d=n[l+1]*(1/255),A=n[l+2]*(1/255),w=n[l+3]*(1/255)),f[l>>2]=u.ind,i[l>>2]=u.est.rgba;else for(l=0;l<c;l+=4){var h=n[l]*(1/255),d=n[l+1]*(1/255),A=n[l+2]*(1/255),w=n[l+3]*(1/255);for(u=s;u.left;)u=p(u.est,h,d,A,w)<=0?u.left:u.right;f[l>>2]=u.ind,i[l>>2]=u.est.rgba}return{abuf:e.buffer,inds:f,plte:a}}function m(t,r,n){null==n&&(n=1e-4);const e=new Uint32Array(t.buffer),i={i0:0,i1:t.length,bst:null,est:null,tdst:0,left:null,right:null};i.bst=U(t,i.i0,i.i1),i.est=b(i.bst);const o=[i];for(;o.length<r;){let r=0,i=0;for(var s=0;s<o.length;s++)o[s].est.L>r&&(r=o[s].est.L,i=s);if(r<n)break;const a=o[i],c=M(t,e,a.i0,a.i1,a.est.e,a.est.eMq255);if(a.i0>=c||a.i1<=c){a.est.L=0;continue}const f={i0:a.i0,i1:c,bst:null,est:null,tdst:0,left:null,right:null};f.bst=U(t,f.i0,f.i1),f.est=b(f.bst);const u={i0:c,i1:a.i1,bst:null,est:null,tdst:0,left:null,right:null};for(u.bst={R:[],m:[],N:a.bst.N-f.bst.N},s=0;s<16;s++)u.bst.R[s]=a.bst.R[s]-f.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=a.bst.m[s]-f.bst.m[s];u.est=b(u.bst),a.left=f,a.right=u,o[i]=f,o.push(u)}for(o.sort(((t,r)=>r.bst.N-t.bst.N)),s=0;s<o.length;s++)o[s].ind=s;return[i,o]}function g(t,r,n,e,i){if(null==t.left)return t.tdst=function(t,r,n,e,i){const o=r-t[0],s=n-t[1],a=e-t[2],c=i-t[3];return o*o+s*s+a*a+c*c}(t.est.q,r,n,e,i),t;const o=p(t.est,r,n,e,i);let s=t.left,a=t.right;o>0&&(s=t.right,a=t.left);const c=g(s,r,n,e,i);if(c.tdst<=o*o)return c;const f=g(a,r,n,e,i);return f.tdst<c.tdst?f:c}function p(t,r,n,e,i){const{e:o}=t;return o[0]*r+o[1]*n+o[2]*e+o[3]*i-t.eMq}function M(t,r,n,e,i,o){for(e-=4;n<e;){for(;E(t,n,i)<=o;)n+=4;for(;E(t,e,i)>o;)e-=4;if(n>=e)break;const s=r[n>>2];r[n>>2]=r[e>>2],r[e>>2]=s,n+=4,e-=4}for(;E(t,n,i)>o;)n-=4;return n+4}function E(t,r,n){return t[r]*n[0]+t[r+1]*n[1]+t[r+2]*n[2]+t[r+3]*n[3]}function U(t,r,n){const e=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i=[0,0,0,0],o=n-r>>2;for(let o=r;o<n;o+=4){const r=t[o]*(1/255),n=t[o+1]*(1/255),s=t[o+2]*(1/255),a=t[o+3]*(1/255);i[0]+=r,i[1]+=n,i[2]+=s,i[3]+=a,e[0]+=r*r,e[1]+=r*n,e[2]+=r*s,e[3]+=r*a,e[5]+=n*n,e[6]+=n*s,e[7]+=n*a,e[10]+=s*s,e[11]+=s*a,e[15]+=a*a}return e[4]=e[1],e[8]=e[2],e[9]=e[6],e[12]=e[3],e[13]=e[7],e[14]=e[11],{R:e,m:i,N:o}}function b(t){const{R:r}=t,{m:n}=t,{N:e}=t,i=n[0],o=n[1],s=n[2],a=n[3],c=0==e?0:1/e,f=[r[0]-i*i*c,r[1]-i*o*c,r[2]-i*s*c,r[3]-i*a*c,r[4]-o*i*c,r[5]-o*o*c,r[6]-o*s*c,r[7]-o*a*c,r[8]-s*i*c,r[9]-s*o*c,r[10]-s*s*c,r[11]-s*a*c,r[12]-a*i*c,r[13]-a*o*c,r[14]-a*s*c,r[15]-a*a*c],u=f,l=I;let h=[Math.random(),Math.random(),Math.random(),Math.random()],d=0,A=0;if(0!=e)for(let t=0;t<16&&(h=l.multVec(u,h),A=Math.sqrt(l.dot(h,h)),h=l.sml(1/A,h),!(0!=t&&Math.abs(A-d)<1e-9));t++)d=A;const w=[i*c,o*c,s*c,a*c];return{Cov:f,q:w,e:h,L:d,eMq255:l.dot(l.sml(255,w),h),eMq:l.dot(h,w),rgba:(Math.round(255*w[3])<<24|Math.round(255*w[2])<<16|Math.round(255*w[1])<<8|Math.round(255*w[0]))>>>0}}var I={multVec:(t,r)=>[t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3],t[4]*r[0]+t[5]*r[1]+t[6]*r[2]+t[7]*r[3],t[8]*r[0]+t[9]*r[1]+t[10]*r[2]+t[11]*r[3],t[12]*r[0]+t[13]*r[1]+t[14]*r[2]+t[15]*r[3]],dot:(t,r)=>t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3],sml:(t,r)=>[t*r[0],t*r[1],t*r[2],t*r[3]]};c.encode=function(t,r,n,e,i,o,s){null==e&&(e=0),null==s&&(s=!1);const a=h(t,r,n,e,[!1,!1,!1,0,s,!1]);return l(a,-1),u(a,r,n,i,o)},c.encodeLL=function(t,r,n,e,i,o,s,a){const c={ctype:0+(1==e?0:2)+(0==i?0:4),depth:o,frames:[]},f=(e+i)*o,h=f*r;for(let e=0;e<t.length;e++)c.frames.push({rect:{x:0,y:0,width:r,height:n},img:new Uint8Array(t[e]),blend:0,dispose:1,bpp:Math.ceil(f/8),bpl:Math.ceil(h/8)});return l(c,0,!0),u(c,r,n,s,a)},c.encode.compress=h,c.encode.dither=f,c.quantize=y,c.quantize.getKDtree=m,c.quantize.getNearest=g}();const f={toArrayBuffer(t,r){const n=t.width,e=t.height,i=n<<2,o=t.getContext("2d").getImageData(0,0,n,e),s=new Uint32Array(o.data.buffer),a=(32*n+31)/32<<2,c=a*e,u=122+c,l=new ArrayBuffer(u),h=new DataView(l),d=1<<20;let A,w,v,y,m=d,g=0,p=0,M=0;function E(t){h.setUint16(p,t,!0),p+=2}function U(t){h.setUint32(p,t,!0),p+=4}function b(t){p+=t}E(19778),U(u),b(4),U(122),U(108),U(n),U(-e>>>0),E(1),E(32),U(3),U(c),U(2835),U(2835),b(8),U(16711680),U(65280),U(255),U(4278190080),U(1466527264),function t(){for(;g<e&&m>0;){for(y=122+g*a,A=0;A<i;)m--,w=s[M++],v=w>>>24,h.setUint32(y+A,w<<8|v),A+=4;g++}M<s.length?(m=d,setTimeout(t,f.Ut)):r(l)}()},toBlob(t,r){this.toArrayBuffer(t,(t=>{r(new Blob([t],{type:"image/bmp"}))}))},Ut:9};var u={CHROME:"CHROME",FIREFOX:"FIREFOX",DESKTOP_SAFARI:"DESKTOP_SAFARI",IE:"IE",IOS:"IOS",ETC:"ETC"},l={[u.CHROME]:16384,[u.FIREFOX]:11180,[u.DESKTOP_SAFARI]:16384,[u.IE]:8192,[u.IOS]:4096,[u.ETC]:8192};const h="undefined"!=typeof window,d="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,A=h&&window.cordova&&window.cordova.require&&window.cordova.require("cordova/modulemapper"),w=(h||d)&&(A&&A.getOriginalSymbol(window,"File")||"undefined"!=typeof File&&File),v=(h||d)&&(A&&A.getOriginalSymbol(window,"FileReader")||"undefined"!=typeof FileReader&&FileReader);function y(t,r,n=Date.now()){return new Promise((e=>{const i=t.split(","),o=i[0].match(/:(.*?);/)[1],s=globalThis.atob(i[1]);let a=s.length;const c=new Uint8Array(a);for(;a--;)c[a]=s.charCodeAt(a);const f=new Blob([c],{type:o});f.name=r,f.lastModified=n,e(f)}))}function m(t){return new Promise(((r,n)=>{const e=new v;e.onload=()=>r(e.result),e.onerror=t=>n(t),e.readAsDataURL(t)}))}function g(t){return new Promise(((r,n)=>{const e=new Image;e.onload=()=>r(e),e.onerror=t=>n(t),e.src=t}))}function p(){if(void 0!==p.cachedResult)return p.cachedResult;let t=u.ETC;const{userAgent:r}=navigator;return/Chrom(e|ium)/i.test(r)?t=u.CHROME:/iP(ad|od|hone)/i.test(r)&&/WebKit/i.test(r)?t=u.IOS:/Safari/i.test(r)?t=u.DESKTOP_SAFARI:/Firefox/i.test(r)?t=u.FIREFOX:(/MSIE/i.test(r)||1==!!document.documentMode)&&(t=u.IE),p.cachedResult=t,p.cachedResult}function M(t,r){const n=p(),e=l[n];let i=t,o=r,s=i*o;const a=i>o?o/i:i/o;for(;s>e*e;){const t=(e+i)/2,r=(e+o)/2;t<r?(o=r,i=r*a):(o=t*a,i=t),s=i*o}return{width:i,height:o}}function E(t,r){let n,e;try{if(n=new OffscreenCanvas(t,r),e=n.getContext("2d"),null===e)throw Error("getContext of OffscreenCanvas returns null")}catch(t){n=document.createElement("canvas"),e=n.getContext("2d")}return n.width=t,n.height=r,[n,e]}function U(t,r){const{width:n,height:e}=M(t.width,t.height),[i,o]=E(n,e);return r&&/jpe?g/.test(r)&&(o.fillStyle="white",o.fillRect(0,0,i.width,i.height)),o.drawImage(t,0,0,i.width,i.height),i}function b(){return void 0!==b.cachedResult||(b.cachedResult=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"undefined"!=typeof document&&"ontouchend"in document),b.cachedResult}function I(t,r={}){return new Promise((function(n,e){let i,o;var s=function(){try{return o=U(i,r.fileType||t.type),n([i,o])}catch(t){return e(t)}},a=function(r){try{var n=function(t){try{throw t}catch(t){return e(t)}};try{let r;return m(t).then((function(t){try{return r=t,g(r).then((function(t){try{return i=t,function(){try{return s()}catch(t){return e(t)}}()}catch(t){return n(t)}}),n)}catch(t){return n(t)}}),n)}catch(t){n(t)}}catch(t){return e(t)}};try{if(b()||[u.DESKTOP_SAFARI,u.MOBILE_SAFARI].includes(p()))throw Error("Skip createImageBitmap on IOS and Safari");return createImageBitmap(t).then((function(t){try{return i=t,s()}catch(t){return a()}}),a)}catch(t){a()}}))}function B(t,r,n,e,i=1){return new Promise((function(o,s){let a;if("image/png"===r){let l,h,d;return l=t.getContext("2d"),({data:h}=l.getImageData(0,0,t.width,t.height)),d=c.encode([h.buffer],t.width,t.height,4096*i),a=new Blob([d],{type:r}),a.name=n,a.lastModified=e,u()}{if("image/bmp"===r)return new Promise((r=>f.toBlob(t,r))).then(function(t){try{return a=t,a.name=n,a.lastModified=e,A()}catch(t){return s(t)}}.bind(this),s);{if("function"==typeof OffscreenCanvas&&t instanceof OffscreenCanvas)return t.convertToBlob({type:r,quality:i}).then(function(t){try{return a=t,a.name=n,a.lastModified=e,w()}catch(t){return s(t)}}.bind(this),s);{let v;return v=t.toDataURL(r,i),y(v,n,e).then(function(t){try{return a=t,w()}catch(t){return s(t)}}.bind(this),s)}function w(){return A()}}function A(){return u()}}function u(){return o(a)}}))}function C(t){t.width=0,t.height=0}function D(){return new Promise((function(t,r){let n,e,i,o;return void 0!==D.cachedResult?t(D.cachedResult):y("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==","test.jpg",Date.now()).then((function(s){try{return n=s,I(n).then((function(s){try{return e=s[1],B(e,n.type,n.name,n.lastModified).then((function(n){try{return i=n,C(e),I(i).then((function(n){try{return o=n[0],D.cachedResult=1===o.width&&2===o.height,t(D.cachedResult)}catch(t){return r(t)}}),r)}catch(t){return r(t)}}),r)}catch(t){return r(t)}}),r)}catch(t){return r(t)}}),r)}))}function Q(t){return new Promise(((r,n)=>{const e=new v;e.onload=t=>{const n=new DataView(t.target.result);if(65496!=n.getUint16(0,!1))return r(-2);const e=n.byteLength;let i=2;for(;i<e;){if(n.getUint16(i+2,!1)<=8)return r(-1);const t=n.getUint16(i,!1);if(i+=2,65505==t){if(1165519206!=n.getUint32(i+=2,!1))return r(-1);const t=18761==n.getUint16(i+=6,!1);i+=n.getUint32(i+4,t);const e=n.getUint16(i,t);i+=2;for(let o=0;o<e;o++)if(274==n.getUint16(i+12*o,t))return r(n.getUint16(i+12*o+8,t))}else{if(65280&~t)break;i+=n.getUint16(i,!1)}}return r(-1)},e.onerror=t=>n(t),e.readAsArrayBuffer(t)}))}function R(t,r){const{width:n}=t,{height:e}=t,{maxWidthOrHeight:i}=r;let o,s=t;return isFinite(i)&&(n>i||e>i)&&([s,o]=E(n,e),n>e?(s.width=i,s.height=e/n*i):(s.width=n/e*i,s.height=i),o.drawImage(t,0,0,s.width,s.height),C(t)),s}function S(t,r){const{width:n}=t,{height:e}=t,[i,o]=E(n,e);switch(r>4&&r<9?(i.width=e,i.height=n):(i.width=n,i.height=e),r){case 2:o.transform(-1,0,0,1,n,0);break;case 3:o.transform(-1,0,0,-1,n,e);break;case 4:o.transform(1,0,0,-1,0,e);break;case 5:o.transform(0,1,1,0,0,0);break;case 6:o.transform(0,1,-1,0,e,0);break;case 7:o.transform(0,-1,-1,0,e,n);break;case 8:o.transform(0,-1,1,0,0,n)}return o.drawImage(t,0,0,n,e),C(t),i}function k(t,r,n=0){return new Promise((function(e,i){let o,s,a,c,f,u,l,h,d,A,w,v,y,m,g,p,M,U,b,k;function T(t=5){if(r.signal&&r.signal.aborted)throw r.signal.reason;o+=t,r.onProgress(Math.min(o,100))}function x(t){if(r.signal&&r.signal.aborted)throw r.signal.reason;o=Math.min(Math.max(t,o),100),r.onProgress(o)}return o=n,s=r.maxIteration||10,a=1024*r.maxSizeMB*1024,T(),I(t,r).then(function(n){try{return[,c]=n,T(),f=R(c,r),T(),new Promise((function(n,e){var i;if(!(i=r.exifOrientation))return Q(t).then(function(t){try{return i=t,o()}catch(t){return e(t)}}.bind(this),e);function o(){return n(i)}return o()})).then(function(n){try{return u=n,T(),D().then(function(n){try{return l=n?f:S(f,u),T(),h=r.initialQuality||1,d=r.fileType||t.type,B(l,d,t.name,t.lastModified,h).then(function(n){try{{if(A=n,T(),w=A.size>a,v=A.size>t.size,!w&&!v)return x(100),e(A);var o;function u(){if(s--&&(g>a||g>y)){let r,n;return r=k?.95*b.width:b.width,n=k?.95*b.height:b.height,[M,U]=E(r,n),U.drawImage(b,0,0,r,n),h*="image/png"===d?.85:.95,B(M,d,t.name,t.lastModified,h).then((function(t){try{return p=t,C(b),b=M,g=p.size,x(Math.min(99,Math.floor((m-g)/(m-a)*100))),u}catch(t){return i(t)}}),i)}return[1]}return y=t.size,m=A.size,g=m,b=l,k=!r.alwaysKeepResolution&&w,(o=function(t){for(;t;){if(t.then)return void t.then(o,i);try{if(t.pop){if(t.length)return t.pop()?(C(b),C(M),C(f),C(l),C(c),x(100),e(p)):t;t=u}else t=t.call(this)}catch(t){return i(t)}}}.bind(this))(u)}}catch(I){return i(I)}}.bind(this),i)}catch(t){return i(t)}}.bind(this),i)}catch(t){return i(t)}}.bind(this),i)}catch(t){return i(t)}}.bind(this),i)}))}let T;function x(t,r){return new Promise(((n,e)=>{T||(T=function(){const t=[];return t.push("\nlet scriptImported = false\nself.addEventListener('message', async (e) => {\n const { file, id, imageCompressionLibUrl, options } = e.data\n options.onProgress = (progress) => self.postMessage({ progress, id })\n try {\n if (!scriptImported) {\n // console.log('[worker] importScripts', imageCompressionLibUrl)\n self.importScripts(imageCompressionLibUrl)\n scriptImported = true\n }\n // console.log('[worker] self', self)\n const compressedFile = await imageCompression(file, options)\n self.postMessage({ file: compressedFile, id })\n } catch (e) {\n // console.error('[worker] error', e)\n self.postMessage({ error: e.message + '\\n' + e.stack, id })\n }\n})\n"),URL.createObjectURL(new Blob(t))}());const i=new Worker(T);i.addEventListener("message",(function(t){if(r.signal&&r.signal.aborted)i.terminate();else if(void 0===t.data.progress){if(t.data.error)return e(Error(t.data.error)),void i.terminate();n(t.data.file),i.terminate()}else r.onProgress(t.data.progress)})),i.addEventListener("error",e),r.signal&&r.signal.addEventListener("abort",(()=>{e(r.signal.reason),i.terminate()})),i.postMessage({file:t,imageCompressionLibUrl:r.libURL,options:{...r,onProgress:void 0,signal:void 0}})}))}function P(t,r){return new Promise((function(n,i){let o,s,a,c,f,u;if(o={...r},a=0,({onProgress:c}=o),o.maxSizeMB=o.maxSizeMB||1/0,f="boolean"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=t=>{a=t,"function"==typeof c&&c(a)},!(t instanceof Blob||t instanceof w))return i(Error("The file given is not an instance of Blob or File"));if(!/^image/.test(t.type))return i(Error("The file given is not an image"));if(u="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!f||"function"!=typeof Worker||u)return k(t,o).then(function(t){try{return s=t,d()}catch(t){return i(t)}}.bind(this),i);var l=function(){try{return d()}catch(t){return i(t)}}.bind(this),h=function(r){try{return k(t,o).then((function(t){try{return s=t,l()}catch(t){return i(t)}}),i)}catch(t){return i(t)}};try{return o.libURL=o.libURL||"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js",x(t,o).then((function(t){try{return s=t,l()}catch(t){return h()}}),h)}catch(t){h()}function d(){try{s.name=t.name,s.lastModified=t.lastModified}catch(t){}try{o.preserveExif&&"image/jpeg"===t.type&&(!o.fileType||o.fileType&&o.fileType===t.type)&&(s=e(t,s))}catch(t){}return n(s)}}))}P.getDataUrlFromFile=m,P.getFilefromDataUrl=y,P.loadImage=g,P.drawImageInCanvas=U,P.drawFileInCanvas=I,P.canvasToFile=B,P.getExifOrientation=Q,P.handleMaxWidthOrHeight=R,P.followExifOrientation=S,P.cleanupCanvasMemory=C,P.isAutoOrientationInBrowser=D,P.approximateBelowMaximumCanvasSizeOfBrowser=M,P.copyExifWithoutOrientation=e,P.getBrowserName=p,P.version="2.0.2";class F{static imageDataToCanvas(t){const r=document.createElement("canvas");r.width=t.width,r.height=t.height;const n=r.getContext("2d");return n&&n.putImageData(t,0,0),r}static canvasToImageData(t){const r=t.getContext("2d");return r?r.getImageData(0,0,t.width,t.height):null}static adjustBrightnessContrast(t,r=0,n=0){r=Math.max(-100,Math.min(100,r));const e=259*((n=Math.max(-100,Math.min(100,n)))+255)/(255*(259-n)),i=r/100*255,o=t.data,s=o.length;for(let t=0;t<s;t+=4)for(let r=0;r<3;r++){const n=e*(o[t+r]+i-128)+128;o[t+r]=Math.max(0,Math.min(255,n))}return t}static toGrayscale(t){const r=t.data,n=r.length;for(let t=0;t<n;t+=4){const n=.3*r[t]+.59*r[t+1]+.11*r[t+2];r[t]=r[t+1]=r[t+2]=n}return t}static sharpen(t,r=2){if(!t||!t.data)return t;const n=t.width,e=t.height,i=t.data,o=new Uint8ClampedArray(i.length),s=[0,-r,0,-r,1+4*r,-r,0,-r,0];for(let t=1;t<e-1;t++)for(let r=1;r<n-1;r++){const e=4*(t*n+r);for(let a=0;a<3;a++){let c=0;for(let e=-1;e<=1;e++)for(let o=-1;o<=1;o++){const f=3*(e+1)+(o+1);c+=i[4*((t+e)*n+(r+o))+a]*s[f]}o[e+a]=Math.max(0,Math.min(255,c))}o[e+3]=i[e+3]}for(let t=0;t<e;t++)for(let r=0;r<n;r++)if(0===t||t===e-1||0===r||r===n-1){const e=4*(t*n+r);o[e]=i[e],o[e+1]=i[e+1],o[e+2]=i[e+2],o[e+3]=i[e+3]}return new ImageData(o,n,e)}static threshold(t,r=128){const n=this.toGrayscale(new ImageData(new Uint8ClampedArray(t.data),t.width,t.height)),e=n.data,i=e.length;for(let t=0;t<i;t+=4){const n=e[t]<r?0:255;e[t]=e[t+1]=e[t+2]=n}return n}static toBinaryImage(t){const r=this.toGrayscale(new ImageData(new Uint8ClampedArray(t.data),t.width,t.height)),n=this.getOtsuThreshold(r);return this.threshold(r,n)}static getOtsuThreshold(t){const r=t.data,n=Array(256).fill(0);for(let t=0;t<r.length;t+=4)n[r[t]]++;const e=t.width*t.height;let i=0;for(let t=0;t<256;t++)i+=t*n[t];let o=0,s=0,a=0,c=0,f=0;for(let t=0;t<256;t++){if(s+=n[t],0===s)continue;if(a=e-s,0===a)break;o+=t*n[t];const r=o/s,u=(i-o)/a,l=s*a*(r-u)*(r-u);l>c&&(c=l,f=t)}return f}static batchProcess(t,r){let n=new ImageData(new Uint8ClampedArray(t.data),t.width,t.height);if(void 0===r.brightness&&void 0===r.contrast||(n=this.adjustBrightnessContrast(n,r.brightness||0,r.contrast||0)),r.grayscale&&(n=this.toGrayscale(n)),r.sharpen&&(n=this.sharpen(n)),r.invert){const t=n.data;for(let r=0;r<t.length;r+=4)t[r]=255-t[r],t[r+1]=255-t[r+1],t[r+2]=255-t[r+2]}return n}static async compressImage(t,r){const n={maxSizeMB:1,maxWidthOrHeight:1920,useWebWorker:!0,quality:.8,fileType:t.type||"image/jpeg",...r};try{return await P(t,n)}catch(r){return t}}static async createImageDataFromFile(t){return new Promise(((r,n)=>{try{const e=new Image,i=URL.createObjectURL(t);e.onload=()=>{try{const t=document.createElement("canvas"),o=t.getContext("2d");if(!o)return void n(Error("无法创建2D上下文"));t.width=e.width,t.height=e.height,o.drawImage(e,0,0);const s=o.getImageData(0,0,t.width,t.height);URL.revokeObjectURL(i),r(s)}catch(t){n(t)}},e.onerror=()=>{URL.revokeObjectURL(i),n(Error("图片加载失败"))},e.src=i}catch(t){n(t)}}))}static async imageDataToFile(t,r="image.jpg",n="image/jpeg",e=.8){return new Promise(((i,o)=>{try{const s=document.createElement("canvas");s.width=t.width,s.height=t.height;const a=s.getContext("2d");if(!a)return void o(Error("无法创建2D上下文"));a.putImageData(t,0,0),s.toBlob((t=>{if(!t)return void o(Error("无法创建图片Blob"));const e=new File([t],r,{type:n});i(e)}),n,e)}catch(t){o(t)}}))}static resizeImage(t,r,n,e=!0){const{width:i,height:o}=t;if(i<=r&&o<=n)return t;let s=r,a=n;if(e){const t=Math.min(r/i,n/o);s=Math.floor(i*t),a=Math.floor(o*t)}const c=document.createElement("canvas");c.width=s,c.height=a;const f=c.getContext("2d");if(!f)throw Error("无法创建2D上下文");const u=document.createElement("canvas");u.width=i,u.height=o;const l=u.getContext("2d");if(!l)throw Error("无法创建临时2D上下文");return l.putImageData(t,0,0),f.imageSmoothingEnabled=!0,f.imageSmoothingQuality="high",f.drawImage(u,0,0,i,o,0,0,s,a),f.getImageData(0,0,s,a)}static detectEdges(t,r=30){const n=this.toGrayscale(new ImageData(new Uint8ClampedArray(t.data),t.width,t.height)),e=n.width,i=n.height,o=n.data,s=new Uint8ClampedArray(o.length),a=[-1,0,1,-2,0,2,-1,0,1],c=[-1,-2,-1,0,0,0,1,2,1];for(let t=1;t<i-1;t++)for(let n=1;n<e-1;n++){let i=0,f=0;for(let r=-1;r<=1;r++)for(let s=-1;s<=1;s++){const u=o[4*((t+r)*e+(n+s))],l=3*(r+1)+(s+1);i+=u*a[l],f+=u*c[l]}let u=Math.sqrt(i*i+f*f);u=u>r?255:0;const l=4*(t*e+n);s[l]=s[l+1]=s[l+2]=u,s[l+3]=255}for(let t=0;t<4*e;t++)s[t]=0,s[(i-1)*e*4+t]=0;for(let t=0;t<i;t++){const r=t*e*4,n=4*(t*e+e-1);for(let t=0;t<4;t++)s[r+t]=0,s[n+t]=0}return new ImageData(s,e,i)}static cannyEdgeDetection(t,r=20,n=50){const e=this.toGrayscale(new ImageData(new Uint8ClampedArray(t.data),t.width,t.height)),i=this.gaussianBlur(e,1.5),{gradientMagnitude:o,gradientDirection:s}=this.computeGradients(i),a=this.nonMaxSuppression(o,s,i.width,i.height),c=this.hysteresisThresholding(a,i.width,i.height,r,n),f=new Uint8ClampedArray(t.data.length);for(let t=0;t<c.length;t++){const r=4*t,n=c[t]?255:0;f[r]=f[r+1]=f[r+2]=n,f[r+3]=255}return new ImageData(f,i.width,i.height)}static gaussianBlur(t,r=1.5){const n=t.width,e=t.height,i=t.data,o=new Uint8ClampedArray(i.length),s=Math.max(3,2*Math.floor(3*r)+1),a=Math.floor(s/2),c=this.generateGaussianKernel(s,r);for(let t=0;t<e;t++)for(let r=0;r<n;r++){let f=0,u=0;for(let o=-a;o<=a;o++)for(let l=-a;l<=a;l++){const h=4*(Math.min(Math.max(t+o,0),e-1)*n+Math.min(Math.max(r+l,0),n-1)),d=c[(o+a)*s+(l+a)];f+=i[h]*d,u+=d}const l=4*(t*n+r),h=Math.round(f/u);o[l]=o[l+1]=o[l+2]=h,o[l+3]=255}return new ImageData(o,n,e)}static generateGaussianKernel(t,r){const n=Array(t*t),e=Math.floor(t/2);let i=0;for(let o=0;o<t;o++)for(let s=0;s<t;s++){const a=Math.exp(-(Math.sqrt((s-e)**2+(o-e)**2)**2)/(2*r**2));n[o*t+s]=a,i+=a}for(let t=0;t<n.length;t++)n[t]/=i;return n}static computeGradients(t){const r=t.width,n=t.height,e=t.data,i=Array(r*n),o=Array(r*n),s=[-1,0,1,-2,0,2,-1,0,1],a=[-1,-2,-1,0,0,0,1,2,1];for(let t=1;t<n-1;t++)for(let n=1;n<r-1;n++){let c=0,f=0;for(let i=-1;i<=1;i++)for(let o=-1;o<=1;o++){const u=e[4*((t+i)*r+(n+o))],l=3*(i+1)+(o+1);c+=u*s[l],f+=u*a[l]}const u=t*r+n;i[u]=Math.sqrt(c*c+f*f),o[u]=Math.atan2(f,c)}for(let t=0;t<n;t++)for(let e=0;e<r;e++)if(0===t||t===n-1||0===e||e===r-1){const n=t*r+e;i[n]=0,o[n]=0}return{gradientMagnitude:i,gradientDirection:o}}static nonMaxSuppression(t,r,n,e){const i=Array(n*e).fill(0);for(let o=1;o<e-1;o++)for(let e=1;e<n-1;e++){const s=o*n+e,a=t[s],c=(180*r[s]/Math.PI+180)%180;let f,u;c>=0&&c<22.5||c>=157.5&&c<=180?(f=s-1,u=s+1):c>=22.5&&c<67.5?(f=(o-1)*n+(e+1),u=(o+1)*n+(e-1)):c>=67.5&&c<112.5?(f=(o-1)*n+e,u=(o+1)*n+e):(f=(o-1)*n+(e-1),u=(o+1)*n+(e+1)),a>=t[f]&&a>=t[u]&&(i[s]=a)}return i}static hysteresisThresholding(t,r,n,e,i){const o=Array(r*n).fill(!1),s=Array(r*n).fill(!1),a=[];for(let r=0;r<t.length;r++)t[r]>=i&&(o[r]=!0,a.push(r),s[r]=!0);const c=[-1,0,1,-1,1,-1,0,1],f=[-1,-1,-1,0,0,1,1,1];for(;a.length>0;){const i=a.pop(),u=i%r,l=Math.floor(i/r);for(let i=0;i<8;i++){const h=u+c[i],d=l+f[i];if(h>=0&&h<r&&d>=0&&d<n){const n=d*r+h;!s[n]&&t[n]>=e&&(o[n]=!0,a.push(n),s[n]=!0)}}}return o}}class ${constructor(t=100){this.maxSize=t,this.cache=new Map}get(t){if(!this.cache.has(t))return;const r=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,r),r}set(t,r){if(this.cache.has(t)&&this.cache.delete(t),this.cache.size>=this.maxSize){const t=this.cache.keys().next().value;void 0!==t&&this.cache.delete(t)}this.cache.set(t,r)}delete(t){return this.cache.delete(t)}clear(){this.cache.clear()}get size(){return this.cache.size}has(t){return this.cache.has(t)}}function O(t,r=8){const n=document.createElement("canvas");n.width=r,n.height=r;const e=n.getContext("2d");if(!e)return"";const i=document.createElement("canvas");i.width=t.width,i.height=t.height;const o=i.getContext("2d");if(!o)return"";o.putImageData(t,0,0),e.drawImage(i,0,0,t.width,t.height,0,0,r,r);const s=e.getImageData(0,0,r,r),a=[];for(let t=0;t<s.data.length;t+=4){const r=s.data[t],n=s.data[t+1],e=s.data[t+2],i=Math.round(.299*r+.587*n+.114*e);a.push(i)}const c=a.reduce(((t,r)=>t+r),0)/a.length;let f="";for(const t of a)f+=t>=c?"1":"0";return f}class j{constructor(t){this.detecting=!1,this.detectTimer=null,this.frameCount=0,this.lastDetectionTime=0,this.camera=new n,"function"==typeof t?(this.onDetected=t,this.options={detectionInterval:200,maxImageDimension:800,enableCache:!0,cacheSize:20,logger:console.log}):t?(this.options={detectionInterval:200,maxImageDimension:800,enableCache:!0,cacheSize:20,logger:console.log,...t},this.onDetected=t.onDetection,this.onError=t.onError):this.options={detectionInterval:200,maxImageDimension:800,enableCache:!0,cacheSize:20,logger:console.log},this.detectionInterval=this.options.detectionInterval,this.maxImageDimension=this.options.maxImageDimension,this.resultCache=new $(this.options.cacheSize),this.throttledDetect=function(t,r){let n=0,e=null;return function(...i){const o=Date.now(),s=r-(o-n);s<=0?(e&&(clearTimeout(e),e=null),n=o,t.apply(this,i)):e||(e=window.setTimeout((()=>{n=Date.now(),e=null,t.apply(this,i)}),s))}}(this.performDetection.bind(this),this.detectionInterval)}async start(t){await this.camera.initialize(t),this.detecting=!0,this.frameCount=0,this.lastDetectionTime=0,this.detect()}stop(){this.detecting=!1,null!==this.detectTimer&&(cancelAnimationFrame(this.detectTimer),this.detectTimer=null)}detect(){this.detecting&&(this.detectTimer=requestAnimationFrame((()=>{try{this.frameCount++;const t=performance.now();(this.frameCount%3==0||t-this.lastDetectionTime>=this.detectionInterval)&&(this.throttledDetect(),this.lastDetectionTime=t),this.detect()}catch(t){this.onError&&this.onError(t),setTimeout((()=>{this.detecting&&this.detect()}),1e3)}})))}async performDetection(){if(!this.detecting||!this.camera)return;const t=this.camera.captureFrame();if(!t)return;if(this.options.enableCache){const r=O(t,16),n=this.resultCache.get(r);if(n){this.options.logger?.("使用缓存的检测结果");const r={...n,imageData:t};return void(this.onDetected&&this.onDetected(r))}}const r=F.resizeImage(t,this.maxImageDimension,this.maxImageDimension);try{const n=await this.detectIDCard(r);if(n.success&&(n.imageData=t,this.options.enableCache)){const r=O(t,16);this.resultCache.set(r,n)}this.onDetected&&this.onDetected(n)}catch(t){this.onError&&this.onError(t)}}async detectIDCard(t){const r=F.toGrayscale(t),n=F.detectEdges(r),e=this.detectRectangles(n),i=this.findIdCardRectangle(e,t.width,t.height),o={success:null!==i,message:i?"身份证检测成功":"未检测到身份证"};if(o.success&&i){const r=i.width,e=i.height,s=i.x,a=i.y;o.corners=[{x:s,y:a},{x:s+r,y:a},{x:s+r,y:a+e},{x:s,y:a+e}],o.boundingBox={x:s,y:a,width:r,height:e};const c=document.createElement("canvas");c.width=r,c.height=e;const f=c.getContext("2d");if(f){const n=F.imageDataToCanvas(t);f.drawImage(n,s,a,r,e,0,0,r,e),o.croppedImage=f.getImageData(0,0,r,e)}o.confidence=this.calculateConfidence(i,n)}return o}clearCache(){this.resultCache.clear(),this.options.logger?.("检测结果缓存已清除")}dispose(){this.stop(),this.camera.release(),this.resultCache.clear()}detectRectangles(t){const r=t.width,n=t.height,e=.2*Math.min(r,n),i=[],o=new Uint32Array(r*n);for(let e=0;e<n;e++)for(let n=0;n<r;n++){const i=e*r+n,s=t.data[4*i]>128?1:0,a=e>0?o[(e-1)*r+n]:0,c=n>0?o[e*r+(n-1)]:0,f=n>0&&e>0?o[(e-1)*r+(n-1)]:0;o[i]=s+a+c-f}for(let t=e;t<.9*n;t+=Math.max(2,Math.floor(.05*t))){const e=Math.round(t*j.ID_CARD_ASPECT_RATIO);if(!(e>.9*r))for(let s=0;s<n-t;s+=Math.max(2,Math.floor(.1*t)))for(let n=0;n<r-e;n+=Math.max(2,Math.floor(.1*e))){const a=this.calculateRectSum(o,n,s,e,t,r)/(e*t),c=this.calculateRectPerimeter(o,n,s,e,t,r)/(2*(e+t))*.7+.3*(.3-Math.abs(.15-a));c>.4&&i.push({x:n,y:s,width:e,height:t,confidence:c})}}return i.sort(((t,r)=>r.confidence-t.confidence))}calculateRectSum(t,r,n,e,i,o){const s=Math.min(r+e-1,o-1),a=Math.min(n+i-1,t.length/o-1),c=r>0&&n>0?t[(n-1)*o+(r-1)]:0,f=n>0?t[(n-1)*o+s]:0,u=r>0?t[a*o+(r-1)]:0;return t[a*o+s]-f-u+c}calculateRectPerimeter(t,r,n,e,i,o){return this.calculateRectSum(t,r,n,e,1,o)+this.calculateRectSum(t,r,n+i-1,e,1,o)+this.calculateRectSum(t,r,n,1,i,o)+this.calculateRectSum(t,r+e-1,n,1,i,o)}findIdCardRectangle(t,r,n){if(0===t.length)return null;const e=t.filter((t=>{const r=t.width/t.height;return Math.abs(r-j.ID_CARD_ASPECT_RATIO)<.2}));return 0===e.length?null:e[0]}calculateConfidence(t,r){if(!t)return 0;let n=t.confidence;const e=t.width*t.height/(r.width*r.height);return e>.1&&e<.7&&(n+=.1),Math.min(Math.max(n,0),1)}}async function z(t){const r=performance.now(),{createWorker:n}=await import("tesseract.js"),e=await n(t.tessWorkerOptions||{logger:t=>{}});try{await e.load(),await e.loadLanguage("chi_sim"),await e.initialize("chi_sim"),await e.setParameters({tessedit_char_whitelist:"0123456789X-年月日一二三四五六七八九十零壹贰叁肆伍陆柒捌玖拾ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz民族汉族满族回族维吾尔族藏族苗族彝族壮族朝鲜族侗族瑶族白族土家族哈尼族哈萨克族傣族黎族傈僳族佤族高山族拉祜族水族东乡族钠西族景颇族柯尔克孜族士族达斡尔族仫佬族羌族布朗族撒拉族毛南族仡佬族锡伯族阿昌族普米族塔吉克族怒族乌孜别克族俄罗斯族鄂温克族德昂族保安族裕固族京族塔塔尔族独龙族鄂伦春族赫哲族门巴族珞巴族基诺族男女性别住址出生公民身份号码签发机关有效期"});const{data:n}=await e.recognize(t.imageBase64),i=function(t){const r={},n=t.split("\n").filter((t=>t.trim())),e=t.match(/(\d{17}[\dX])/);e&&(r.idNumber=e[1]);for(const t of n)if(t.includes("姓名")||t.length<10&&t.length>1&&!/\d/.test(t)){r.name=t.replace("姓名","").trim();break}const i=t.match(/(男|女).*(族)/);if(i){r.gender=i[1];const t=i[0];r.nationality=t.substring(t.indexOf(i[1])+1).trim()}const o=t.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);o&&(r.birthDate=`${o[1]}-${o[2]}-${o[3]}`);const s=t.match(/住址([\s\S]*?)公民身份号码/);s&&(r.address=s[1].replace(/\n/g,"").trim());const a=t.match(/签发机关([\s\S]*?)有效期/);a&&(r.issuingAuthority=a[1].replace(/\n/g,"").trim());const c=t.match(/有效期限([\s\S]*?)(-|至)/);return c&&(r.validPeriod=c[0].replace("有效期限","").trim()),r}(n.text);return await e.terminate(),{idCardInfo:i,processingTime:performance.now()-r}}catch(t){throw await e.terminate(),t}}j.ID_CARD_ASPECT_RATIO=1.58;class _{constructor(t={}){this.worker=null,this.ocrWorker=null,this.initialized=!1,this.options={useWorker:"undefined"!=typeof Worker,enableCache:!0,cacheSize:50,maxImageDimension:1e3,logger:console.log,...t},this.resultCache=new $(this.options.cacheSize)}async initialize(){this.initialized||(this.options.useWorker?(this.ocrWorker=function(t){const r=`\n self.onmessage = async function(e) {\n try {\n const result = await (${t.toString()})(e.data);\n self.postMessage({ success: true, result });\n } catch (error) {\n self.postMessage({ \n success: false, \n error: { message: error.message, stack: error.stack }\n });\n }\n }\n `,n=new Blob([r],{type:"application/javascript"}),e=URL.createObjectURL(n),i=new Worker(e),o=new Map;let s=0;return i.onmessage=t=>{0===o.size&&URL.revokeObjectURL(e);const{id:r,success:n,result:i,error:s}=t.data,a=o.get(r);if(a)if(o.delete(r),n)a.resolve(i);else{const t=Error(s.message);t.stack=s.stack,a.reject(t)}},{postMessage:t=>new Promise(((r,n)=>{const e=s++;o.set(e,{resolve:r,reject:n}),i.postMessage({id:e,data:t})})),terminate:()=>{i.terminate(),o.clear(),URL.revokeObjectURL(e)}}}(z),this.initialized=!0,this.options.logger?.("OCR Worker 初始化完成")):(this.worker=r.createWorker({logger:this.options.logger}),await this.worker.load(),await this.worker.loadLanguage("chi_sim"),await this.worker.initialize("chi_sim"),await this.worker.setParameters({tessedit_char_whitelist:"0123456789X-年月日一二三四五六七八九十零壹贰叁肆伍陆柒捌玖拾ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz民族汉族满族回族维吾尔族藏族苗族彝族壮族朝鲜族侗族瑶族白族土家族哈尼族哈萨克族傣族黎族傈僳族佤族高山族拉祜族水族东乡族钠西族景颇族柯尔克孜族士族达斡尔族仫佬族羌族布朗族撒拉族毛南族仡佬族锡伯族阿昌族普米族塔吉克族怒族乌孜别克族俄罗斯族鄂温克族德昂族保安族裕固族京族塔塔尔族独龙族鄂伦春族赫哲族门巴族珞巴族基诺族男女性别住址出生公民身份号码签发机关有效期"}),this.initialized=!0,this.options.logger?.("OCR引擎初始化完成")))}async processIDCard(t){if(this.initialized||await this.initialize(),this.options.enableCache){const r=O(t),n=this.resultCache.get(r);if(n)return this.options.logger?.("使用缓存的OCR结果"),n}const r=F.resizeImage(t,this.options.maxImageDimension||1e3,this.options.maxImageDimension||1e3,!0),n=F.batchProcess(r,{brightness:this.options.brightness||15,contrast:this.options.contrast||25,sharpen:!0}),e=document.createElement("canvas");e.width=n.width,e.height=n.height;const i=e.getContext("2d");if(!i)throw Error("无法创建canvas上下文");i.putImageData(n,0,0);const o=e.toDataURL("image/jpeg",.7);try{let r;if(this.options.useWorker&&this.ocrWorker){const t=await this.ocrWorker.postMessage({imageBase64:o,tessWorkerOptions:{logger:this.options.logger}});r=t.idCardInfo,this.options.logger?.(`OCR处理完成,用时: ${t.processingTime.toFixed(2)}ms`)}else{const t=performance.now(),e=F.imageDataToCanvas(n),{data:i}=await this.worker.recognize(e);r=this.parseIDCardText(i.text);const o=performance.now()-t;this.options.logger?.(`OCR处理完成,用时: ${o.toFixed(2)}ms`)}if(this.options.enableCache){const n=O(t);this.resultCache.set(n,r)}return r}catch(t){return this.options.logger?.("OCR识别错误: "+t),{}}}formatDateString(t){const r=t.match(/(\d{4})[-\.\u5e74\s]*(\d{1,2})[-\.\u6708\s]*(\d{1,2})[日]*/);return r?`${r[1]}-${r[2].padStart(2,"0")}-${r[3].padStart(2,"0")}`:/^\d{8}$/.test(t)?`${t.substring(0,4)}-${t.substring(4,6)}-${t.substring(6,8)}`:t}validateIDNumber(t){if(!t||18!==t.length)return!1;if(!/^\d{17}[\dX]$/.test(t))return!1;t.substr(6,4);const r=parseInt(t.substr(10,2)),n=parseInt(t.substr(12,2));return!(r<1||r>12||n<1||n>31)}parseIDCardText(t){const r={},n=t.replace(/\s+/g," ").trim(),e=n.split("\n").filter((t=>t.trim()));let i=null;const o=n.match(/(\d{17}[\dX])/),s=n.match(/公民身份号码[\s\:]*(\d{17}[\dX])/);s&&s[1]?i=s[1]:o&&o[1]&&(i=o[1]),i&&(r.idNumber=i);const a=n.match(/姓名[\s\:]*([一-龥]{2,4})/);if(a&&a[1])r.name=a[1].trim();else for(const t of e)if(t.length>=2&&t.length<=5&&/^[一-龥]+$/.test(t)&&!/性别|民族|住址|公民|签发|有效/.test(t)){r.name=t.trim();break}const c=n.match(/性别[\s\:]*([男女])[\s ]*民族[\s\:]*([一-龥]+族)/),f=n.match(/性别[\s\:]*([男女])/),u=n.match(/民族[\s\:]*([一-龥]+族)/);c?(r.gender=c[1],r.nationality=c[2]):(f&&(r.gender=f[1]),u&&(r.nationality=u[1]));let l=n.match(/出生[\s\:]*(\d{4})年(\d{1,2})月(\d{1,2})[日号]/)||n.match(/出生[\s\:]*(\d{4})[-\/\.](\d{1,2})[-\/\.](\d{1,2})/)||n.match(/出生日期[\s\:]*(\d{4})[-\/\.\u5e74](\d{1,2})[-\/\.\u6708](\d{1,2})[日号]?/);if(!l&&r.idNumber&&18===r.idNumber.length){const t=r.idNumber.substring(6,10),n=r.idNumber.substring(10,12),e=r.idNumber.substring(12,14);r.birthDate=`${t}-${n}-${e}`}else if(l){const t=l[1],n=l[2].padStart(2,"0"),e=l[3].padStart(2,"0");r.birthDate=`${t}-${n}-${e}`}const h=n.match(/住址[\s\:]*([\s\S]*?)(?=公民身份|出生|性别|签发)/)||n.match(/住址[\s\:]*([一-龥a-zA-Z0-9\s\.\-]+)/);h&&h[1]&&(r.address=h[1].replace(/\s+/g,"").replace(/\n/g,"").trim(),r.address.length>70&&(r.address=r.address.substring(0,70)),/[一-龥]/.test(r.address)||(r.address=""));const d=n.match(/签发机关[\s\:]*([\s\S]*?)(?=有效|公民|出生|\d{8}|$)/)||n.match(/签发机关[\s\:]*([一-龥\s]+)/);d&&d[1]&&(r.issuingAuthority=d[1].replace(/\s+/g,"").replace(/\n/g,"").trim());const A=n.match(/有效期限[\s\:]*(\d{4}[-\.\u5e74\s]\d{1,2}[-\.\u6708\s]\d{1,2}[日\s]*)[-\s]*(至|-)[-\s]*(\d{4}[-\.\u5e74\s]\d{1,2}[-\.\u6708\s]\d{1,2}[日]*|[永久长期]*)/)||n.match(/有效期限[\s\:]*(\d{8})[-\s]*(至|-)[-\s]*(\d{8}|[永久长期]*)/);if(A)if(A[1]&&A[3]){const t=this.formatDateString(A[1]),n=/\d/.test(A[3])?this.formatDateString(A[3]):"长期有效";r.validPeriod=`${t}-${n}`}else r.validPeriod=A[0].replace("有效期限","").trim();return r}clearCache(){this.resultCache.clear(),this.options.logger?.("OCR结果缓存已清除")}async terminate(){this.worker&&(await this.worker.terminate(),this.worker=null),this.ocrWorker&&(this.ocrWorker.terminate(),this.ocrWorker=null),this.initialized=!1,this.options.logger?.("OCR引擎已终止")}dispose(){return this.terminate()}}class L{static validateIDNumber(t){if(!t||18!==t.length)return!1;if(!/^\d{17}[\dX]$/.test(t))return!1;const r=parseInt(t.substr(6,4)),n=parseInt(t.substr(10,2)),e=parseInt(t.substr(12,2)),i=new Date(r,n-1,e);return i.getFullYear()===r&&i.getMonth()+1===n&&i.getDate()===e}static extractBirthDateFromID(t){return this.validateIDNumber(t)?`${t.substr(6,4)}-${t.substr(10,2)}-${t.substr(12,2)}`:null}static extractGenderFromID(t){return this.validateIDNumber(t)?parseInt(t.charAt(16))%2==1?"男":"女":null}static extractRegionFromID(t){return this.validateIDNumber(t)?t.substr(0,6):null}static enhanceIDCardInfo(t,r){const n={...t};if(n.idNumber&&this.validateIDNumber(n.idNumber)&&(n.birthDate||(n.birthDate=this.extractBirthDateFromID(n.idNumber)||void 0),n.gender||(n.gender=this.extractGenderFromID(n.idNumber)||void 0)),r&&this.validateIDNumber(r)){n.idNumber=r;const t=this.extractBirthDateFromID(r);t&&(n.birthDate=t);const e=this.extractGenderFromID(r);e&&(n.gender=e)}return n}extractAndValidate(t){const r={...t};return r.idNumber&&(r.idNumber=this.normalizeIDNumber(r.idNumber),this.validateIDNumber(r.idNumber)&&(r.birthDate||(r.birthDate=this.extractBirthDateFromID(r.idNumber)),r.gender||(r.gender=this.extractGenderFromID(r.idNumber)))),r.birthDate&&(r.birthDate=this.normalizeDate(r.birthDate)),r.address&&(r.address=this.normalizeAddress(r.address)),r}normalizeIDNumber(t){return t.replace(/[\s\-]/g,"").toUpperCase()}validateIDNumber(t){return/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(t)}extractBirthDateFromID(t){return 18===t.length?`${t.substring(6,10)}-${t.substring(10,12)}-${t.substring(12,14)}`:15===t.length?`19${t.substring(6,8)}-${t.substring(8,10)}-${t.substring(10,12)}`:""}extractGenderFromID(t){let r;return r=18===t.length?parseInt(t.charAt(16)):parseInt(t.charAt(14)),r%2==1?"男":"女"}normalizeDate(t){return t.replace(/(\d{4})(\d{2})(\d{2})/,"$1-$2-$3")}normalizeAddress(t){return t.trim()}}t.DataExtractor=L,t.IDCardDetector=j,t.OCRModule=class{constructor(t={}){this.options=t,this.isRunning=!1,this.videoElement=null,this.camera=new n(t.cameraOptions),this.idDetector=new j({onDetection:this.handleIDDetection.bind(this),onError:this.handleError.bind(this)}),this.ocrProcessor=new _,this.dataExtractor=new L}async initialize(){try{await this.ocrProcessor.initialize()}catch(t){throw this.handleError(t),t}}async startIDCardScanner(t){if(!this.ocrProcessor)throw Error("OCR engine not initialized. Call initialize() first.");this.videoElement=t,this.isRunning=!0,await this.camera.start(t),this.idDetector.start(t)}stop(){this.isRunning=!1,this.idDetector.stop(),this.camera.stop()}async handleIDDetection(t){if(this.isRunning)try{if(!t.imageData)return void this.handleError(Error("无效的图像数据"));const r=await this.ocrProcessor.processIDCard(t.imageData),n=this.dataExtractor.extractAndValidate(r);this.options.onIDCardScanned&&this.options.onIDCardScanned(n)}catch(t){this.handleError(t)}}handleError(t){this.options.onError&&this.options.onError(t)}async terminate(){this.stop(),await this.ocrProcessor.terminate()}async processIDCard(t){try{if(!this.ocrProcessor)throw Error("OCR engine not initialized. Call initialize() first.");if(!t||!t.data||t.width<=0||t.height<=0)throw Error("无效的图像数据");const r=F.adjustBrightnessContrast(t,5,10),n=await this.ocrProcessor.processIDCard(r),e=this.dataExtractor.extractAndValidate(n);return this.options.onIDCardScanned&&this.options.onIDCardScanned(e),e}catch(t){throw this.handleError(t),t}}},t.OCRProcessor=_},"object"==typeof exports&&"undefined"!=typeof module?factory(exports,require("tesseract.js")):"function"==typeof define&&define.amd?define(["exports","tesseract.js"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).IDScannerOCR={},global.Tesseract);