tasmota-webserial-esptool 7.2.2 → 7.2.4

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.
@@ -179,6 +179,17 @@ export declare class ESPLoader extends EventTarget {
179
179
  * Reconnect the serial port to flush browser buffers and reload stub
180
180
  */
181
181
  reconnect(): Promise<void>;
182
+ /**
183
+ * @name drainInputBuffer
184
+ * Actively drain the input buffer by reading data for a specified time.
185
+ * Simple approach for some drivers (especially CP210x on Windows) that have
186
+ * issues with buffer flushing.
187
+ *
188
+ * Based on esptool.py fix: https://github.com/espressif/esptool/commit/5338ea054e5099ac7be235c54034802ac8a43162
189
+ *
190
+ * @param bufferingTime - Time in milliseconds to wait for the buffer to fill
191
+ */
192
+ private drainInputBuffer;
182
193
  /**
183
194
  * @name flushSerialBuffers
184
195
  * Flush any pending data in the TX and RX serial port buffers
@@ -284,9 +284,9 @@ export class ESPLoader extends EventTarget {
284
284
  }
285
285
  async setRTS(state) {
286
286
  await this.port.setSignals({ requestToSend: state });
287
- // # Work-around for adapters on Windows using the usbser.sys driver:
288
- // # generate a dummy change to DTR so that the set-control-line-state
289
- // # request is sent with the updated RTS state and the same DTR state
287
+ // Work-around for adapters on Windows using the usbser.sys driver:
288
+ // generate a dummy change to DTR so that the set-control-line-state
289
+ // request is sent with the updated RTS state and the same DTR state
290
290
  // Referenced to esptool.py
291
291
  await this.setDTR(this.state_DTR);
292
292
  }
@@ -467,6 +467,9 @@ export class ESPLoader extends EventTarget {
467
467
  }
468
468
  if (status[0] == 1) {
469
469
  if (status[1] == ROM_INVALID_RECV_MSG) {
470
+ // Unsupported command can result in more than one error response
471
+ // Use drainInputBuffer for CP210x compatibility on Windows
472
+ await this.drainInputBuffer(200);
470
473
  throw new Error("Invalid (unsupported) command " + toHex(opcode));
471
474
  }
472
475
  else {
@@ -590,7 +593,9 @@ export class ESPLoader extends EventTarget {
590
593
  return [val, data];
591
594
  }
592
595
  if (data[0] != 0 && data[1] == ROM_INVALID_RECV_MSG) {
593
- this._inputBuffer.length = 0;
596
+ // Unsupported command can result in more than one error response
597
+ // Use drainInputBuffer for CP210x compatibility on Windows
598
+ await this.drainInputBuffer(200);
594
599
  throw new Error(`Invalid (unsupported) command ${toHex(opcode)}`);
595
600
  }
596
601
  }
@@ -625,6 +630,8 @@ export class ESPLoader extends EventTarget {
625
630
  else {
626
631
  await this.reconfigurePort(baud);
627
632
  }
633
+ // Wait for port to be ready after baudrate change
634
+ await sleep(SYNC_TIMEOUT);
628
635
  // Track current baudrate for reconnect
629
636
  if (this._parent) {
630
637
  this._parent._currentBaudRate = baud;
@@ -1238,6 +1245,48 @@ export class ESPLoader extends EventTarget {
1238
1245
  }
1239
1246
  this.logger.debug("Reconnection successful");
1240
1247
  }
1248
+ /**
1249
+ * @name drainInputBuffer
1250
+ * Actively drain the input buffer by reading data for a specified time.
1251
+ * Simple approach for some drivers (especially CP210x on Windows) that have
1252
+ * issues with buffer flushing.
1253
+ *
1254
+ * Based on esptool.py fix: https://github.com/espressif/esptool/commit/5338ea054e5099ac7be235c54034802ac8a43162
1255
+ *
1256
+ * @param bufferingTime - Time in milliseconds to wait for the buffer to fill
1257
+ */
1258
+ async drainInputBuffer(bufferingTime = 200) {
1259
+ // Wait for the buffer to fill
1260
+ await sleep(bufferingTime);
1261
+ // Unsupported command response is sent 8 times and has
1262
+ // 14 bytes length including delimiter 0xC0 bytes.
1263
+ // At least part of it is read as a command response,
1264
+ // but to be safe, read it all.
1265
+ const bytesToDrain = 14 * 8;
1266
+ let drained = 0;
1267
+ // Drain the buffer by reading available data
1268
+ const drainStart = Date.now();
1269
+ const drainTimeout = 100; // Short timeout for draining
1270
+ while (drained < bytesToDrain && Date.now() - drainStart < drainTimeout) {
1271
+ if (this._inputBuffer.length > 0) {
1272
+ const byte = this._inputBuffer.shift();
1273
+ if (byte !== undefined) {
1274
+ drained++;
1275
+ }
1276
+ }
1277
+ else {
1278
+ // Small sleep to avoid busy waiting
1279
+ await sleep(1);
1280
+ }
1281
+ }
1282
+ if (drained > 0) {
1283
+ this.logger.debug(`Drained ${drained} bytes from input buffer`);
1284
+ }
1285
+ // Final clear of application buffer
1286
+ if (!this._parent) {
1287
+ this.__inputBuffer = [];
1288
+ }
1289
+ }
1241
1290
  /**
1242
1291
  * @name flushSerialBuffers
1243
1292
  * Flush any pending data in the TX and RX serial port buffers
package/dist/web/index.js CHANGED
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,f=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:f},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case f:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class O extends Error{constructor(t){super(t),this.name="SlipReadError"}}const I=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==c?s=await import("./esp32s2-IiDBtXxo.js"):t==u?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==f?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,f,_,g=0;for(u=0;u<=C;u++)t.bl_count[u]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=a[2*a[2*d+1]+1]+1,u>o&&(u=o,g++),a[2*d+1]=u,d>s||(t.bl_count[u]++,f=0,d>=h&&(f=n[d-h]),_=a[2*d],t.opt_len+=_*(u+f),r&&(t.static_len+=_*(i[2*d+1]+f)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>s||(a[2*c+1]!==u&&(t.opt_len+=(u-a[2*c+1])*a[2*c],a[2*c+1]=u),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const ft=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ft(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ft,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:Ot,Z_OK:It,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let f=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===f&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<u);if(s=Vt-(u-r),r=u-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;f=l[r+n-1],_=l[r+n]}}}while((e=c[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const fe=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(fe(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),It},ge=t=>{const e=_e(t);var a;return e===It&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ce[a.level].max_lazy,a.good_match=ce[a.level].good_length,a.nice_match=ce[a.level].nice_length,a.max_chain_length=ce[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new ue;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>fe(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,It),deflate:(t,e)=>{if(fe(t)||e>Ot||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,It}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,It;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,It;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,It;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,It;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ce[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),It;if(2===s&&(e===zt?kt(a):e!==Ot&&(vt(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,It}return e!==Ut?It:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?It:Dt)},deflateEnd:t=>{if(fe(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):It},deflateSetDictionary:(t,e)=>{let a=e.length;if(fe(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,It},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Oe,Z_STREAM_END:Ie,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Oe)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Oe)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Ie)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Oe;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Oe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,f,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?new Error("Invalid (unsupported) command "+s(t)):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new O("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new O("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new O("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new O("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,c=0,u=0;const f=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-u>=_?l=Array.from(new Uint8Array(n,u,_)):(l=Array.from(new Uint8Array(n,u,g-u)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=i?Math.round(l.length*r/h):l.length,u+=_,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-f)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,f,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),f=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),c>0&&(_|=134217728),await this.setDataLengths(i,c,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,f),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await I(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof O&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof O&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await I(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,f as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
1
+ const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,v=12928,S=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:v},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:S}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case v:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case S:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class I extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==S?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==u?s=await import("./esp32s2-IiDBtXxo.js"):t==f?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==v&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:vt,_tr_stored_block:St,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:It,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,St(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,St(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,vt(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>It||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==It&&(St(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==Ut?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ve=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ve=!1}const Se=new Uint8Array(256);for(let t=0;t<256;t++)Se[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Se[254]=Se[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Ie,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ie)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ie)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ie;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ie&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==v)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new I("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new I("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof I&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof I&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,v as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,S as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,f=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:f},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case f:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class O extends Error{constructor(t){super(t),this.name="SlipReadError"}}const I=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==c?s=await import("./esp32s2-IiDBtXxo.js"):t==u?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==f?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,f,_,g=0;for(u=0;u<=C;u++)t.bl_count[u]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=a[2*a[2*d+1]+1]+1,u>o&&(u=o,g++),a[2*d+1]=u,d>s||(t.bl_count[u]++,f=0,d>=h&&(f=n[d-h]),_=a[2*d],t.opt_len+=_*(u+f),r&&(t.static_len+=_*(i[2*d+1]+f)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>s||(a[2*c+1]!==u&&(t.opt_len+=(u-a[2*c+1])*a[2*c],a[2*c+1]=u),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const ft=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ft(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ft,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:Ot,Z_OK:It,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let f=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===f&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<u);if(s=Vt-(u-r),r=u-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;f=l[r+n-1],_=l[r+n]}}}while((e=c[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const fe=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(fe(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),It},ge=t=>{const e=_e(t);var a;return e===It&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ce[a.level].max_lazy,a.good_match=ce[a.level].good_length,a.nice_match=ce[a.level].nice_length,a.max_chain_length=ce[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new ue;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>fe(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,It),deflate:(t,e)=>{if(fe(t)||e>Ot||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,It}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,It;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,It;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,It;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,It;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,It}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ce[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),It;if(2===s&&(e===zt?kt(a):e!==Ot&&(vt(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,It}return e!==Ut?It:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?It:Dt)},deflateEnd:t=>{if(fe(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):It},deflateSetDictionary:(t,e)=>{let a=e.length;if(fe(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,It},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Oe,Z_STREAM_END:Ie,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Oe)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Oe)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Ie)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Oe;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Oe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,f,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?new Error("Invalid (unsupported) command "+s(t)):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new O("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new O("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new O("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new O("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,c=0,u=0;const f=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-u>=_?l=Array.from(new Uint8Array(n,u,_)):(l=Array.from(new Uint8Array(n,u,g-u)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=i?Math.round(l.length*r/h):l.length,u+=_,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-f)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,f,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),f=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),c>0&&(_|=134217728),await this.setDataLengths(i,c,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,f),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await I(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof O&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof O&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await I(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,f as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
1
+ const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,v=12928,S=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:v},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:S}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case v:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case S:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class I extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==S?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==u?s=await import("./esp32s2-IiDBtXxo.js"):t==f?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==v&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:vt,_tr_stored_block:St,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:It,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,St(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,St(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,vt(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>It||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==It&&(St(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==Ut?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ve=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ve=!1}const Se=new Uint8Array(256);for(let t=0;t<256;t++)Se[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Se[254]=Se[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Ie,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ie)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ie)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ie;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ie&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==v)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new I("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new I("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof I&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof I&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,v as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,S as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tasmota-webserial-esptool",
3
- "version": "7.2.2",
3
+ "version": "7.2.4",
4
4
  "description": "Flash & Read ESP devices using WebSerial",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -36,7 +36,7 @@
36
36
  "rollup": "^4.53.5",
37
37
  "serve": "^14.2.4",
38
38
  "typescript": "^5.7.3",
39
- "typescript-eslint": "^8.50.0"
39
+ "typescript-eslint": "^8.51.0"
40
40
  },
41
41
  "dependencies": {
42
42
  "pako": "^2.1.0",
package/src/esp_loader.ts CHANGED
@@ -440,9 +440,9 @@ export class ESPLoader extends EventTarget {
440
440
  state_DTR = false;
441
441
  async setRTS(state: boolean) {
442
442
  await this.port.setSignals({ requestToSend: state });
443
- // # Work-around for adapters on Windows using the usbser.sys driver:
444
- // # generate a dummy change to DTR so that the set-control-line-state
445
- // # request is sent with the updated RTS state and the same DTR state
443
+ // Work-around for adapters on Windows using the usbser.sys driver:
444
+ // generate a dummy change to DTR so that the set-control-line-state
445
+ // request is sent with the updated RTS state and the same DTR state
446
446
  // Referenced to esptool.py
447
447
  await this.setDTR(this.state_DTR);
448
448
  }
@@ -634,6 +634,9 @@ export class ESPLoader extends EventTarget {
634
634
  }
635
635
  if (status[0] == 1) {
636
636
  if (status[1] == ROM_INVALID_RECV_MSG) {
637
+ // Unsupported command can result in more than one error response
638
+ // Use drainInputBuffer for CP210x compatibility on Windows
639
+ await this.drainInputBuffer(200);
637
640
  throw new Error("Invalid (unsupported) command " + toHex(opcode));
638
641
  } else {
639
642
  throw new Error("Command failure error code " + toHex(status[1]));
@@ -777,7 +780,9 @@ export class ESPLoader extends EventTarget {
777
780
  return [val, data];
778
781
  }
779
782
  if (data[0] != 0 && data[1] == ROM_INVALID_RECV_MSG) {
780
- this._inputBuffer.length = 0;
783
+ // Unsupported command can result in more than one error response
784
+ // Use drainInputBuffer for CP210x compatibility on Windows
785
+ await this.drainInputBuffer(200);
781
786
  throw new Error(`Invalid (unsupported) command ${toHex(opcode)}`);
782
787
  }
783
788
  }
@@ -817,6 +822,9 @@ export class ESPLoader extends EventTarget {
817
822
  await this.reconfigurePort(baud);
818
823
  }
819
824
 
825
+ // Wait for port to be ready after baudrate change
826
+ await sleep(SYNC_TIMEOUT);
827
+
820
828
  // Track current baudrate for reconnect
821
829
  if (this._parent) {
822
830
  this._parent._currentBaudRate = baud;
@@ -1616,6 +1624,53 @@ export class ESPLoader extends EventTarget {
1616
1624
  this.logger.debug("Reconnection successful");
1617
1625
  }
1618
1626
 
1627
+ /**
1628
+ * @name drainInputBuffer
1629
+ * Actively drain the input buffer by reading data for a specified time.
1630
+ * Simple approach for some drivers (especially CP210x on Windows) that have
1631
+ * issues with buffer flushing.
1632
+ *
1633
+ * Based on esptool.py fix: https://github.com/espressif/esptool/commit/5338ea054e5099ac7be235c54034802ac8a43162
1634
+ *
1635
+ * @param bufferingTime - Time in milliseconds to wait for the buffer to fill
1636
+ */
1637
+ private async drainInputBuffer(bufferingTime = 200): Promise<void> {
1638
+ // Wait for the buffer to fill
1639
+ await sleep(bufferingTime);
1640
+
1641
+ // Unsupported command response is sent 8 times and has
1642
+ // 14 bytes length including delimiter 0xC0 bytes.
1643
+ // At least part of it is read as a command response,
1644
+ // but to be safe, read it all.
1645
+ const bytesToDrain = 14 * 8;
1646
+ let drained = 0;
1647
+
1648
+ // Drain the buffer by reading available data
1649
+ const drainStart = Date.now();
1650
+ const drainTimeout = 100; // Short timeout for draining
1651
+
1652
+ while (drained < bytesToDrain && Date.now() - drainStart < drainTimeout) {
1653
+ if (this._inputBuffer.length > 0) {
1654
+ const byte = this._inputBuffer.shift();
1655
+ if (byte !== undefined) {
1656
+ drained++;
1657
+ }
1658
+ } else {
1659
+ // Small sleep to avoid busy waiting
1660
+ await sleep(1);
1661
+ }
1662
+ }
1663
+
1664
+ if (drained > 0) {
1665
+ this.logger.debug(`Drained ${drained} bytes from input buffer`);
1666
+ }
1667
+
1668
+ // Final clear of application buffer
1669
+ if (!this._parent) {
1670
+ this.__inputBuffer = [];
1671
+ }
1672
+ }
1673
+
1619
1674
  /**
1620
1675
  * @name flushSerialBuffers
1621
1676
  * Flush any pending data in the TX and RX serial port buffers