tasmota-webserial-esptool 9.2.7 → 9.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/const.d.ts CHANGED
@@ -71,6 +71,10 @@ export declare const ESP32S2_RTC_CNTL_WDTWPROTECT_REG = 1061191852;
71
71
  export declare const ESP32S2_RTC_CNTL_WDTCONFIG0_REG = 1061191828;
72
72
  export declare const ESP32S2_RTC_CNTL_WDTCONFIG1_REG = 1061191832;
73
73
  export declare const ESP32S2_RTC_CNTL_WDT_WKEY = 1356348065;
74
+ export declare const ESP32S2_GPIO_STRAP_REG = 1061175352;
75
+ export declare const ESP32S2_GPIO_STRAP_SPI_BOOT_MASK: number;
76
+ export declare const ESP32S2_RTC_CNTL_OPTION1_REG = 1061191976;
77
+ export declare const ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 1;
74
78
  export declare const ESP32S3_SPI_REG_BASE = 1610620928;
75
79
  export declare const ESP32S3_BASEFUSEADDR = 1610641408;
76
80
  export declare const ESP32S3_MACFUSEADDR: number;
@@ -86,6 +90,10 @@ export declare const ESP32S3_RTC_CNTL_WDTWPROTECT_REG = 1610645680;
86
90
  export declare const ESP32S3_RTC_CNTL_WDTCONFIG0_REG = 1610645656;
87
91
  export declare const ESP32S3_RTC_CNTL_WDTCONFIG1_REG = 1610645660;
88
92
  export declare const ESP32S3_RTC_CNTL_WDT_WKEY = 1356348065;
93
+ export declare const ESP32S3_GPIO_STRAP_REG = 1610629176;
94
+ export declare const ESP32S3_GPIO_STRAP_SPI_BOOT_MASK: number;
95
+ export declare const ESP32S3_RTC_CNTL_OPTION1_REG = 1610645804;
96
+ export declare const ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 1;
89
97
  export declare const ESP32C2_SPI_REG_BASE = 1610620928;
90
98
  export declare const ESP32C2_BASEFUSEADDR = 1610647552;
91
99
  export declare const ESP32C2_MACFUSEADDR: number;
package/dist/const.js CHANGED
@@ -91,6 +91,11 @@ export const ESP32S2_RTC_CNTL_WDTWPROTECT_REG = 0x3f4080ac;
91
91
  export const ESP32S2_RTC_CNTL_WDTCONFIG0_REG = 0x3f408094;
92
92
  export const ESP32S2_RTC_CNTL_WDTCONFIG1_REG = 0x3f408098;
93
93
  export const ESP32S2_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
94
+ // ESP32-S2 GPIO strap register and boot mode control
95
+ export const ESP32S2_GPIO_STRAP_REG = 0x3f404038;
96
+ export const ESP32S2_GPIO_STRAP_SPI_BOOT_MASK = 1 << 3; // Not download mode
97
+ export const ESP32S2_RTC_CNTL_OPTION1_REG = 0x3f408128;
98
+ export const ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 0x1; // Is download mode forced over USB?
94
99
  export const ESP32S3_SPI_REG_BASE = 0x60002000;
95
100
  export const ESP32S3_BASEFUSEADDR = 0x60007000;
96
101
  export const ESP32S3_MACFUSEADDR = 0x60007000 + 0x044;
@@ -107,6 +112,11 @@ export const ESP32S3_RTC_CNTL_WDTWPROTECT_REG = 0x600080b0;
107
112
  export const ESP32S3_RTC_CNTL_WDTCONFIG0_REG = 0x60008098;
108
113
  export const ESP32S3_RTC_CNTL_WDTCONFIG1_REG = 0x6000809c;
109
114
  export const ESP32S3_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
115
+ // ESP32-S3 GPIO strap register and boot mode control
116
+ export const ESP32S3_GPIO_STRAP_REG = 0x60004038;
117
+ export const ESP32S3_GPIO_STRAP_SPI_BOOT_MASK = 1 << 3; // Not download mode
118
+ export const ESP32S3_RTC_CNTL_OPTION1_REG = 0x6000812c;
119
+ export const ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 0x1; // Is download mode forced over USB?
110
120
  export const ESP32C2_SPI_REG_BASE = 0x60002000;
111
121
  export const ESP32C2_BASEFUSEADDR = 0x60008800;
112
122
  export const ESP32C2_MACFUSEADDR = 0x60008800 + 0x044;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="@types/w3c-web-serial" />
2
- import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32P4_EFUSE_BLOCK1_ADDR, SlipReadError, ESP32S2_RTC_CNTL_WDTWPROTECT_REG, ESP32S2_RTC_CNTL_WDTCONFIG0_REG, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, } from "./const";
2
+ import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32P4_EFUSE_BLOCK1_ADDR, SlipReadError, ESP32S2_RTC_CNTL_WDTWPROTECT_REG, ESP32S2_RTC_CNTL_WDTCONFIG0_REG, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S2_GPIO_STRAP_REG, ESP32S2_GPIO_STRAP_SPI_BOOT_MASK, ESP32S2_RTC_CNTL_OPTION1_REG, ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, ESP32S3_GPIO_STRAP_REG, ESP32S3_GPIO_STRAP_SPI_BOOT_MASK, ESP32S3_RTC_CNTL_OPTION1_REG, ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, } from "./const";
3
3
  import { getStubCode } from "./stubs";
4
4
  import { hexFormatter, sleep, slipEncode, toHex } from "./util";
5
5
  import { deflate } from "pako";
@@ -1135,12 +1135,66 @@ export class ESPLoader extends EventTarget {
1135
1135
  }
1136
1136
  else {
1137
1137
  // just reset (no bootloader mode)
1138
- // For ESP32-S2/S3 with USB-OTG, use watchdog reset instead of DTR/RTS
1138
+ // For ESP32-S2/S3 with USB-OTG, check if watchdog reset is needed
1139
1139
  if (this.port.getInfo().usbProductId === USB_JTAG_SERIAL_PID &&
1140
1140
  (this.chipFamily === CHIP_FAMILY_ESP32S2 ||
1141
1141
  this.chipFamily === CHIP_FAMILY_ESP32S3)) {
1142
- await this.watchdogReset();
1143
- this.logger.log("Watchdog reset (USB-OTG).");
1142
+ // ESP32-S2/S3: Clear force download boot mode first
1143
+ try {
1144
+ // Clear force download boot mode to avoid chip being stuck in download mode
1145
+ // after reset. Workaround for issue:
1146
+ // https://github.com/espressif/arduino-esp32/issues/6762
1147
+ const RTC_CNTL_OPTION1_REG = this.chipFamily === CHIP_FAMILY_ESP32S2
1148
+ ? ESP32S2_RTC_CNTL_OPTION1_REG
1149
+ : ESP32S3_RTC_CNTL_OPTION1_REG;
1150
+ const RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = this.chipFamily === CHIP_FAMILY_ESP32S2
1151
+ ? ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK
1152
+ : ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK;
1153
+ await this.writeRegister(RTC_CNTL_OPTION1_REG, 0, RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, 0);
1154
+ }
1155
+ catch (e) {
1156
+ // Skip invalid response and continue reset (can happen when monitoring during reset)
1157
+ this.logger.log("Warning: Could not clear force download boot mode:", e);
1158
+ }
1159
+ // Check the strapping register to see if we can perform a watchdog reset
1160
+ // Only use watchdog reset if GPIO0 is low AND force download boot mode is not set
1161
+ let useWatchdogReset = false;
1162
+ try {
1163
+ const GPIO_STRAP_REG = this.chipFamily === CHIP_FAMILY_ESP32S2
1164
+ ? ESP32S2_GPIO_STRAP_REG
1165
+ : ESP32S3_GPIO_STRAP_REG;
1166
+ const GPIO_STRAP_SPI_BOOT_MASK = this.chipFamily === CHIP_FAMILY_ESP32S2
1167
+ ? ESP32S2_GPIO_STRAP_SPI_BOOT_MASK
1168
+ : ESP32S3_GPIO_STRAP_SPI_BOOT_MASK;
1169
+ const RTC_CNTL_OPTION1_REG = this.chipFamily === CHIP_FAMILY_ESP32S2
1170
+ ? ESP32S2_RTC_CNTL_OPTION1_REG
1171
+ : ESP32S3_RTC_CNTL_OPTION1_REG;
1172
+ const RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = this.chipFamily === CHIP_FAMILY_ESP32S2
1173
+ ? ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK
1174
+ : ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK;
1175
+ const strapReg = await this.readRegister(GPIO_STRAP_REG);
1176
+ const forceDlReg = await this.readRegister(RTC_CNTL_OPTION1_REG);
1177
+ // GPIO0 low (download mode) AND force download boot not set
1178
+ if ((strapReg & GPIO_STRAP_SPI_BOOT_MASK) === 0 &&
1179
+ (forceDlReg & RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK) === 0) {
1180
+ useWatchdogReset = true;
1181
+ }
1182
+ }
1183
+ catch (e) {
1184
+ // If we can't read the registers, use watchdog reset as fallback
1185
+ this.logger.log("Warning: Could not read strap/option registers, using watchdog reset:", e);
1186
+ useWatchdogReset = true;
1187
+ }
1188
+ if (useWatchdogReset) {
1189
+ await this.watchdogReset();
1190
+ this.logger.log("Watchdog reset (USB-OTG).");
1191
+ }
1192
+ else {
1193
+ // Not in download mode, can use DTR/RTS reset
1194
+ // But USB-OTG doesn't have DTR/RTS, so fall back to watchdog
1195
+ await this.watchdogReset();
1196
+ this.logger.log("Watchdog reset (USB-OTG, normal boot).");
1197
+ }
1144
1198
  }
1145
1199
  else if (this.isWebUSB()) {
1146
1200
  // WebUSB: Use longer delays for better compatibility
package/dist/web/index.js CHANGED
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=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=4096,h=115200,o=4097,l=1343410176,d=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),u=33382,c=50,_=12882,f=12883,g=12994,p=12995,w=12997,m=12998,b=207969,y=12914,S=12916,B=12917,R=12928,v=12849,U={5:{name:"ESP32-C3",family:p},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:g},13:{name:"ESP32-C6",family:m},16:{name:"ESP32-H2",family:y},18:{name:"ESP32-P4",family:R},20:{name:"ESP32-C61",family:b},23:{name:"ESP32-C5",family:w},25:{name:"ESP32-H21",family:B},28:{name:"ESP32-H4",family:S},32:{name:"ESP32-S31",family:v}},T={4293968129:{name:"ESP8266",family:u},15736195:{name:"ESP32",family:c},1990:{name:"ESP32-S2",family:_}},I=2,x=3,D=4,k=5,C=6,F=7,z=8,W=9,O=10,E=208,A=209,$=210,P=11,M=13,L=15,N=19,Z=20,H=239,V=16,G=17,j=18,J=5,q=2048,K=6144,Y=3e3,X=15e4,Q=3e5,tt=100,et=3e4,it=500,at=100,st=(t,e)=>{const i=Math.floor(t*(e/486));return i<Y?Y:i},rt=t=>{switch(t){case c:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case _: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 u:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case g:case p:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case b:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S: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 R:return{regBase:1342754816,baseFuse:l,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 nt extends Error{constructor(t){super(t),this.name="SlipReadError"}}const ht=async(t,i)=>{let a;if(t==S||t==B||t==v)return null;if(t==c)a=await import("./esp32-BRKoi17y.js");else if(t==_)a=await import("./esp32s2-iX3WoDbg.js");else if(t==f)a=await import("./esp32s3-DGwDVIgz.js");else if(t==u)a=await import("./esp8266-CUwxJpGa.js");else if(t==g)a=await import("./esp32c2-Btgr_lwh.js");else if(t==p)a=await import("./esp32c3-CHKfoI8W.js");else if(t==w)a=await import("./esp32c5-BDW4KtLo.js");else if(t==m)a=await import("./esp32c6-il8tTxAG.js");else if(t==b)a=await import("./esp32c61-thKzxBGf.js");else if(t==y)a=await import("./esp32h2-CxoUHv_P.js");else{if(t!=R)return null;a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")}return{...a,text:e(atob(a.text)),data:e(atob(a.data))}};function ot(t){let e=t.length;for(;--e>=0;)t[e]=0}const lt=256,dt=286,ut=30,ct=15,_t=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]),ft=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]),gt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),pt=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),wt=new Array(576);ot(wt);const mt=new Array(60);ot(mt);const bt=new Array(512);ot(bt);const yt=new Array(256);ot(yt);const St=new Array(29);ot(St);const Bt=new Array(ut);function Rt(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let vt,Ut,Tt;function It(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}ot(Bt);const xt=t=>t<256?bt[t]:bt[256+(t>>>7)],Dt=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},kt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Dt(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},Ct=(t,e,i)=>{kt(t,i[2*e],i[2*e+1])},Ft=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},zt=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=ct;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=Ft(a[e]++,e))}},Wt=t=>{let e;for(e=0;e<dt;e++)t.dyn_ltree[2*e]=0;for(e=0;e<ut;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},Ot=t=>{t.bi_valid>8?Dt(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Et=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},At=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&Et(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!Et(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},$t=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?Ct(t,s,e):(r=yt[s],Ct(t,r+lt+1,e),n=_t[r],0!==n&&(s-=St[r],kt(t,s,n)),a--,r=xt(a),Ct(t,r,i),n=ft[r],0!==n&&(a-=Bt[r],kt(t,a,n)))}while(h<t.sym_next);Ct(t,256,e)},Pt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=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!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)At(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],At(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,At(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=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,c,_,f,g=0;for(c=0;c<=ct;c++)t.bl_count[c]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],c=i[2*i[2*d+1]+1]+1,c>o&&(c=o,g++),i[2*d+1]=c,d>a||(t.bl_count[c]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(c+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(c=o-1;0===t.bl_count[c];)c--;t.bl_count[c]--,t.bl_count[c+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(c=o;0!==c;c--)for(d=t.bl_count[c];0!==d;)u=t.heap[--l],u>a||(i[2*u+1]!==c&&(t.opt_len+=(c-i[2*u+1])*i[2*u],i[2*u+1]=c),d--)}})(t,e),zt(i,l,t.bl_count)},Mt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},Lt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{Ct(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(Ct(t,s,t.bl_tree),h--),Ct(t,16,t.bl_tree),kt(t,h-3,2)):h<=10?(Ct(t,17,t.bl_tree),kt(t,h-3,3)):(Ct(t,18,t.bl_tree),kt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let Nt=!1;const Zt=(t,e,i,a)=>{kt(t,0+(a?1:0),3),Ot(t),Dt(t,i),Dt(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var Ht=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&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<lt;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),Pt(t,t.l_desc),Pt(t,t.d_desc),n=(t=>{let e;for(Mt(t,t.dyn_ltree,t.l_desc.max_code),Mt(t,t.dyn_dtree,t.d_desc.max_code),Pt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*pt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?Zt(t,e,i,a):4===t.strategy||r===s?(kt(t,2+(a?1:0),3),$t(t,wt,mt)):(kt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(kt(t,e-257,5),kt(t,i-1,5),kt(t,a-4,4),s=0;s<a;s++)kt(t,t.bl_tree[2*pt[s]+1],3);Lt(t,t.dyn_ltree,e-1),Lt(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),$t(t,t.dyn_ltree,t.dyn_dtree)),Wt(t),a&&Ot(t)},Vt={_tr_init:t=>{Nt||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(St[a]=i,t=0;t<1<<_t[a];t++)yt[i++]=a;for(yt[i-1]=a,s=0,a=0;a<16;a++)for(Bt[a]=s,t=0;t<1<<ft[a];t++)bt[s++]=a;for(s>>=7;a<ut;a++)for(Bt[a]=s<<7,t=0;t<1<<ft[a]-7;t++)bt[256+s++]=a;for(e=0;e<=ct;e++)r[e]=0;for(t=0;t<=143;)wt[2*t+1]=8,t++,r[8]++;for(;t<=255;)wt[2*t+1]=9,t++,r[9]++;for(;t<=279;)wt[2*t+1]=7,t++,r[7]++;for(;t<=287;)wt[2*t+1]=8,t++,r[8]++;for(zt(wt,287,r),t=0;t<ut;t++)mt[2*t+1]=5,mt[2*t]=Ft(t,5);vt=new Rt(wt,_t,257,dt,ct),Ut=new Rt(mt,ft,0,ut,ct),Tt=new Rt(new Array(0),gt,0,19,7)})(),Nt=!0),t.l_desc=new It(t.dyn_ltree,vt),t.d_desc=new It(t.dyn_dtree,Ut),t.bl_desc=new It(t.bl_tree,Tt),t.bi_buf=0,t.bi_valid=0,Wt(t)},_tr_stored_block:Zt,_tr_flush_block:Ht,_tr_tally:(t,e,i)=>(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++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(yt[i]+lt+1)]++,t.dyn_dtree[2*xt(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{kt(t,2,3),Ct(t,256,wt),(t=>{16===t.bi_valid?(Dt(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 Gt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const jt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var Jt=(t,e,i,a)=>{const s=jt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},qt={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"},Kt={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:Yt,_tr_stored_block:Xt,_tr_flush_block:Qt,_tr_tally:te,_tr_align:ee}=Vt,{Z_NO_FLUSH:ie,Z_PARTIAL_FLUSH:ae,Z_FULL_FLUSH:se,Z_FINISH:re,Z_BLOCK:ne,Z_OK:he,Z_STREAM_END:oe,Z_STREAM_ERROR:le,Z_DATA_ERROR:de,Z_BUF_ERROR:ue,Z_DEFAULT_COMPRESSION:ce,Z_FILTERED:_e,Z_HUFFMAN_ONLY:fe,Z_RLE:ge,Z_FIXED:pe,Z_DEFAULT_STRATEGY:we,Z_UNKNOWN:me,Z_DEFLATED:be}=Kt,ye=258,Se=262,Be=42,Re=113,ve=666,Ue=(t,e)=>(t.msg=qt[e],e),Te=t=>2*t-(t>4?9:0),Ie=t=>{let e=t.length;for(;--e>=0;)t[e]=0},xe=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let De=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const ke=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},Ce=(t,e)=>{Qt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,ke(t.strm)},Fe=(t,e)=>{t.pending_buf[t.pending++]=e},ze=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},We=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=Gt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=Jt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},Oe=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Se?t.strstart-(t.w_size-Se):0,l=t.window,d=t.w_mask,u=t.prev,c=t.strstart+ye;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<c);if(a=ye-(c-r),r=c-ye,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=u[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},Ee=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Se)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),xe(t),a+=e),0===t.strm.avail_in)break;if(i=We(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=De(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=De(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Se&&0!==t.strm.avail_in)},Ae=(t,e)=>{let i,a,s,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(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==re||e===ie||i!==a+t.strm.avail_in))break;n=e===re&&i===a+t.strm.avail_in?1:0,Xt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,ke(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(We(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}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!==ie&&e!==re&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&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++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(We(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===re)&&e!==ie&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===re&&0===t.strm.avail_in&&i===a?1:0,Xt(t,t.block_start,i,n),t.block_start+=i,ke(t.strm)),n?3:1)},$e=(t,e)=>{let i,a;for(;;){if(t.lookahead<Se){if(Ee(t),t.lookahead<Se&&e===ie)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Se&&(t.match_length=Oe(t,i)),t.match_length>=3)if(a=te(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=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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=De(t,t.ins_h,t.window[t.strstart+1]);else a=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2},Pe=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Se){if(Ee(t),t.lookahead<Se&&e===ie)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Se&&(t.match_length=Oe(t,i),t.match_length<=5&&(t.strategy===_e||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=te(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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++,a&&(Ce(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=te(t,0,t.window[t.strstart-1]),a&&Ce(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&&(a=te(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2};function Me(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const Le=[new Me(0,0,0,0,Ae),new Me(4,4,8,4,$e),new Me(4,5,16,8,$e),new Me(4,6,32,32,$e),new Me(4,4,16,16,Pe),new Me(8,16,32,32,Pe),new Me(8,16,128,128,Pe),new Me(8,32,128,256,Pe),new Me(32,128,258,1024,Pe),new Me(32,258,258,4096,Pe)];function Ne(){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=be,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),Ie(this.dyn_ltree),Ie(this.dyn_dtree),Ie(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),Ie(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Ie(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 Ze=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Be&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Re&&e.status!==ve?1:0},He=t=>{if(Ze(t))return Ue(t,le);t.total_in=t.total_out=0,t.data_type=me;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?Be:Re,t.adler=2===e.wrap?0:1,e.last_flush=-2,Yt(e),he},Ve=t=>{const e=He(t);var i;return e===he&&((i=t.state).window_size=2*i.w_size,Ie(i.head),i.max_lazy_match=Le[i.level].max_lazy,i.good_match=Le[i.level].good_length,i.nice_match=Le[i.level].nice_length,i.max_chain_length=Le[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},Ge=(t,e,i,a,s,r)=>{if(!t)return le;let n=1;if(e===ce&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==be||a<8||a>15||e<0||e>9||r<0||r>pe||8===a&&1!==n)return Ue(t,le);8===a&&(a=9);const h=new Ne;return t.state=h,h.strm=t,h.status=Be,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+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<<s+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=i,Ve(t)};var je={deflateInit:(t,e)=>Ge(t,e,be,15,8,we),deflateInit2:Ge,deflateReset:Ve,deflateResetKeep:He,deflateSetHeader:(t,e)=>Ze(t)||2!==t.state.wrap?le:(t.state.gzhead=e,he),deflate:(t,e)=>{if(Ze(t)||e>ne||e<0)return t?Ue(t,le):le;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===ve&&e!==re)return Ue(t,0===t.avail_out?ue:le);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(ke(t),0===t.avail_out)return i.last_flush=-1,he}else if(0===t.avail_in&&Te(e)<=Te(a)&&e!==re)return Ue(t,ue);if(i.status===ve&&0!==t.avail_in)return Ue(t,ue);if(i.status===Be&&0===i.wrap&&(i.status=Re),i.status===Be){let e=be+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=fe||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ze(i,e),0!==i.strstart&&(ze(i,t.adler>>>16),ze(i,65535&t.adler)),t.adler=1,i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he}if(57===i.status)if(t.adler=0,Fe(i,31),Fe(i,139),Fe(i,8),i.gzhead)Fe(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Fe(i,255&i.gzhead.time),Fe(i,i.gzhead.time>>8&255),Fe(i,i.gzhead.time>>16&255),Fe(i,i.gzhead.time>>24&255),Fe(i,9===i.level?2:i.strategy>=fe||i.level<2?4:0),Fe(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Fe(i,255&i.gzhead.extra.length),Fe(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Jt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,9===i.level?2:i.strategy>=fe||i.level<2?4:0),Fe(i,3),i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,ke(t),0!==i.pending)return i.last_flush=-1,he;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),ke(t),0!==i.pending)return i.last_flush=-1,he;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Fe(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),ke(t),0!==i.pending)return i.last_flush=-1,he;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Fe(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(ke(t),0!==i.pending))return i.last_flush=-1,he;Fe(i,255&t.adler),Fe(i,t.adler>>8&255),t.adler=0}if(i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he}if(0!==t.avail_in||0!==i.lookahead||e!==ie&&i.status!==ve){let a=0===i.level?Ae(i,e):i.strategy===fe?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(Ee(t),0===t.lookahead)){if(e===ie)return 1;break}if(t.match_length=0,i=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===ge?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=ye){if(Ee(t),t.lookahead<=ye&&e===ie)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+ye;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=ye-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=te(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2})(i,e):Le[i.level].func(i,e);if(3!==a&&4!==a||(i.status=ve),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),he;if(2===a&&(e===ae?ee(i):e!==ne&&(Xt(i,0,0,!1),e===se&&(Ie(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ke(t),0===t.avail_out))return i.last_flush=-1,he}return e!==re?he:i.wrap<=0?oe:(2===i.wrap?(Fe(i,255&t.adler),Fe(i,t.adler>>8&255),Fe(i,t.adler>>16&255),Fe(i,t.adler>>24&255),Fe(i,255&t.total_in),Fe(i,t.total_in>>8&255),Fe(i,t.total_in>>16&255),Fe(i,t.total_in>>24&255)):(ze(i,t.adler>>>16),ze(i,65535&t.adler)),ke(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?he:oe)},deflateEnd:t=>{if(Ze(t))return le;const e=t.state.status;return t.state=null,e===Re?Ue(t,de):he},deflateSetDictionary:(t,e)=>{let i=e.length;if(Ze(t))return le;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==Be||a.lookahead)return le;if(1===s&&(t.adler=Gt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(Ie(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,Ee(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=De(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,Ee(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,he},deflateInfo:"pako deflate (from Nodeca project)"};const Je=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var qe=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)Je(i,e)&&(t[e]=i[e])}}return t},Ke=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Ye=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Ye=!1}const Xe=new Uint8Array(256);for(let t=0;t<256;t++)Xe[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Xe[254]=Xe[254]=1;var Qe=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ti=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 ei=Object.prototype.toString,{Z_NO_FLUSH:ii,Z_SYNC_FLUSH:ai,Z_FULL_FLUSH:si,Z_FINISH:ri,Z_OK:ni,Z_STREAM_END:hi,Z_DEFAULT_COMPRESSION:oi,Z_DEFAULT_STRATEGY:li,Z_DEFLATED:di}=Kt;function ui(t){this.options=qe({level:oi,method:di,chunkSize:16384,windowBits:15,memLevel:8,strategy:li},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 ti,this.strm.avail_out=0;let i=je.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ni)throw new Error(qt[i]);if(e.header&&je.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Qe(e.dictionary):"[object ArrayBuffer]"===ei.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=je.deflateSetDictionary(this.strm,t),i!==ni)throw new Error(qt[i]);this._dict_set=!0}}ui.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ri:ii,"string"==typeof t?i.input=Qe(t):"[object ArrayBuffer]"===ei.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===ai||r===si)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=je.deflate(i,r),s===hi)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=je.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===ni;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},ui.prototype.onData=function(t){this.chunks.push(t)},ui.prototype.onEnd=function(t){t===ni&&(this.result=Ke(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var ci={deflate:function(t,e){const i=new ui(e);if(i.push(t,!0),i.err)throw i.msg||qt[i.err];return i.result}};const{deflate:_i}=ci;var fi=_i;const gi={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}},pi=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in gi))throw"Unhandled character '"+t+"' in pack format";const i=gi[t].bytes,r=new DataView(new ArrayBuffer(i));gi[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},wi=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in gi))throw"Unhandled character '"+t+"' in unpack format";const r=gi[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=gi[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class mi extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,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=h,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.__abandonCurrentOperation=!1,this.__adaptiveBlockMultiplier=1,this.__adaptiveMaxInFlightMultiplier=1,this.__consecutiveSuccessfulChunks=0,this.__lastAdaptiveAdjustment=0,this.__isCDCDevice=!1,this.state_DTR=!1,this.state_RTS=!1,this.__writeChain=Promise.resolve()}get chipFamily(){return this._parent?this._parent.chipFamily:this.__chipFamily}set chipFamily(t){this._parent?this._parent.chipFamily=t:this.__chipFamily=t}get chipName(){return this._parent?this._parent.chipName:this.__chipName}set chipName(t){this._parent?this._parent.chipName=t:this.__chipName=t}get chipRevision(){return this._parent?this._parent.chipRevision:this.__chipRevision}set chipRevision(t){this._parent?this._parent.chipRevision=t:this.__chipRevision=t}get chipVariant(){return this._parent?this._parent.chipVariant:this.__chipVariant}set chipVariant(t){this._parent?this._parent.chipVariant=t:this.__chipVariant=t}get _inputBuffer(){if(this._parent)return this._parent._inputBuffer;if(void 0===this.__inputBuffer)throw new Error("_inputBuffer accessed before initialization");return this.__inputBuffer}get _inputBufferReadIndex(){return this._parent?this._parent._inputBufferReadIndex:this.__inputBufferReadIndex||0}set _inputBufferReadIndex(t){this._parent?this._parent._inputBufferReadIndex=t:this.__inputBufferReadIndex=t}get _inputBufferAvailable(){return this._inputBuffer.length-this._inputBufferReadIndex}_readByte(){if(!(this._inputBufferReadIndex>=this._inputBuffer.length))return this._inputBuffer[this._inputBufferReadIndex++]}_clearInputBuffer(){this._inputBuffer.length=0,this._inputBufferReadIndex=0}_compactInputBuffer(){this._inputBufferReadIndex>1e3&&this._inputBufferReadIndex>this._inputBuffer.length/2&&(this._inputBuffer.splice(0,this._inputBufferReadIndex),this._inputBufferReadIndex=0)}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}get _abandonCurrentOperation(){return this._parent?this._parent._abandonCurrentOperation:this.__abandonCurrentOperation}set _abandonCurrentOperation(t){this._parent?this._parent._abandonCurrentOperation=t:this.__abandonCurrentOperation=t}get _adaptiveBlockMultiplier(){return this._parent?this._parent._adaptiveBlockMultiplier:this.__adaptiveBlockMultiplier}set _adaptiveBlockMultiplier(t){this._parent?this._parent._adaptiveBlockMultiplier=t:this.__adaptiveBlockMultiplier=t}get _adaptiveMaxInFlightMultiplier(){return this._parent?this._parent._adaptiveMaxInFlightMultiplier:this.__adaptiveMaxInFlightMultiplier}set _adaptiveMaxInFlightMultiplier(t){this._parent?this._parent._adaptiveMaxInFlightMultiplier=t:this.__adaptiveMaxInFlightMultiplier=t}get _consecutiveSuccessfulChunks(){return this._parent?this._parent._consecutiveSuccessfulChunks:this.__consecutiveSuccessfulChunks}set _consecutiveSuccessfulChunks(t){this._parent?this._parent._consecutiveSuccessfulChunks=t:this.__consecutiveSuccessfulChunks=t}get _lastAdaptiveAdjustment(){return this._parent?this._parent._lastAdaptiveAdjustment:this.__lastAdaptiveAdjustment}set _lastAdaptiveAdjustment(t){this._parent?this._parent._lastAdaptiveAdjustment=t:this.__lastAdaptiveAdjustment=t}get _isCDCDevice(){return this._parent?this._parent._isCDCDevice:this.__isCDCDevice}set _isCDCDevice(t){this._parent?this._parent._isCDCDevice=t:this.__isCDCDevice=t}detectUSBSerialChip(t,e){const i={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 i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__inputBufferReadIndex=0,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),(12346===t.usbVendorId||6790===t.usbVendorId&&21971===t.usbProductId)&&(this._isCDCDevice=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=rt(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=U[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===R&&(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}`),await this.drainInputBuffer(200),this._clearInputBuffer(),await s(tt);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=T[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===R&&(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: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==R)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:wi("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?wi("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?wi("<I",t.slice(16,20))[0]:0}}async getMacAddress(){if(!this._initializationSucceeded)throw new Error("getMacAddress() requires initialize() to have completed successfully");return this.macAddr().map(t=>t.toString(16).padStart(2,"0").toUpperCase()).join(":")}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:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}finally{this._isReconfiguring=!1}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 setDTRandRTS(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!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),await this.sleep(200)}async hardResetClassic(){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),await this.sleep(200)}async hardResetUnixTight(){await this.setDTRandRTS(!0,!0),await this.setDTRandRTS(!1,!1),await this.setDTRandRTS(!1,!0),await this.sleep(100),await this.setDTRandRTS(!0,!1),await this.sleep(50),await this.setDTRandRTS(!1,!1),await this.setDTR(!1),await this.sleep(200)}async setRTSWebUSB(t){this.state_RTS=t,await this.port.setSignals({requestToSend:t,dataTerminalReady:this.state_DTR})}async setDTRWebUSB(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t,requestToSend:this.state_RTS})}async setDTRandRTSWebUSB(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerialWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetUSBJTAGSerialInvertedDTRWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetClassicWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetUnixTightWebUSB(){await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRandRTSWebUSB(!0,!0),await this.setDTRandRTSWebUSB(!1,!0),await this.sleep(100),await this.setDTRandRTSWebUSB(!0,!1),await this.sleep(50),await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetClassicLongDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(500),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200),await this.setDTRWebUSB(!1),await this.sleep(500)}async hardResetClassicShortDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(25),await this.setDTRWebUSB(!1),await this.sleep(100)}async hardResetInvertedWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedDTRWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedRTSWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}isWebUSB(){return!0===this.port.isWebUSB}async connectWithResetStrategies(){const t=this.port.getInfo(),e=t.usbProductId===o,i=12346===t.usbVendorId,a=[],r=this,n=!e&&!i;if(this.isWebUSB()){const s=4292===t.usbVendorId,h=6790===t.usbVendorId,o=12346===t.usbVendorId&&2===t.usbProductId;(e||i)&&(o?(a.push({name:"USB-JTAG/Serial (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"UnixTight (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetClassicWebUSB()})):(a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"USB-JTAG/Serial (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"Inverted DTR Classic (WebUSB)",fn:async()=>await r.hardResetInvertedDTRWebUSB()}))),n&&(h?(a.push({name:"UnixTight (WebUSB) - CH34x",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CH34x",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):s?(a.push({name:"UnixTight (WebUSB) - CP2102",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CP2102",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):(a.push({name:"UnixTight (WebUSB)",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"Inverted Both (WebUSB)",fn:async function(){return await r.hardResetInvertedWebUSB()}}),a.push({name:"Inverted RTS (WebUSB)",fn:async function(){return await r.hardResetInvertedRTSWebUSB()}}),a.push({name:"Inverted DTR (WebUSB)",fn:async function(){return await r.hardResetInvertedDTRWebUSB()}}))),s||o||(6790!==t.usbVendorId&&a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"UnixTight (WebUSB)",fn:async function(){return await r.hardResetUnixTightWebUSB()}}),a.push({name:"Classic Long Delay (WebUSB)",fn:async function(){return await r.hardResetClassicLongDelayWebUSB()}}),a.push({name:"Classic Short Delay (WebUSB)",fn:async function(){return await r.hardResetClassicShortDelayWebUSB()}}),e||i||a.push({name:"USB-JTAG/Serial fallback (WebUSB)",fn:async function(){return await r.hardResetUSBJTAGSerialWebUSB()}}))}else(e||i)&&a.push({name:"USB-JTAG/Serial",fn:async function(){return await r.hardResetUSBJTAGSerial()}}),a.push({name:"UnixTight",fn:async function(){return await r.hardResetUnixTight()}}),e||i||a.push({name:"USB-JTAG/Serial (fallback)",fn:async function(){return await r.hardResetUSBJTAGSerial()}});let h=null;for(const t of a)try{if(!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}if(this._abandonCurrentOperation=!1,await t.fn(),n){if(await this.syncWithTimeout(2e3))return void this.logger.log(`Connected USB Serial successfully with ${t.name} reset.`);throw new Error("Sync timeout or abandoned")}{const e=this.sync(),i=new Promise((t,e)=>setTimeout(()=>e(new Error("Sync timeout")),1e3));try{return await Promise.race([e,i]),void this.logger.log(`Connected CDC/JTAG successfully with ${t.name} reset.`)}catch(t){throw new Error("Sync timeout or abandoned")}}}catch(e){if(h=e,this.logger.log(`${t.name} reset failed: ${e.message}`),this._abandonCurrentOperation=!0,await s(100),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._clearInputBuffer(),await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw this._abandonCurrentOperation=!1,new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==h?void 0:h.message}`)}async watchdogReset(){let t,e,i,a;if(this.logger.log("Hard resetting with watchdog timer..."),this.chipFamily===_)t=1061191852,e=1061191828,i=1061191832,a=1356348065;else{if(this.chipFamily!==f)throw new Error(`watchdogReset() is only supported for ESP32-S2 and ESP32-S3, not ${this.chipFamily}`);t=1610645680,e=1610645656,i=1610645660,a=1356348065}await this.writeRegister(t,a,void 0,0),await this.writeRegister(i,2e3,void 0,0);await this.writeRegister(e,-805306110,void 0,0),await this.writeRegister(t,0,void 0,0),await this.sleep(500)}async hardReset(t=!1){t?this.port.getInfo().usbProductId===o?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):this.isWebUSB()?(await this.hardResetClassicWebUSB(),this.logger.log("Classic reset (WebUSB/Android).")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):this.port.getInfo().usbProductId!==o||this.chipFamily!==_&&this.chipFamily!==f?this.isWebUSB()?(await this.setRTSWebUSB(!0),await this.sleep(200),await this.setRTSWebUSB(!1),await this.sleep(200),this.logger.log("Hard reset (WebUSB).")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")):(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG).")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==u){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>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]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==c)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,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 "+a(t,8));const e=pi("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,Q),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==u?o=2:[c,_,f,g,p,w,m,b,y,S,B,R,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)?o=h.length:(o=2,this.logger.debug(`Unknown chip family, defaulting to 2-byte status (opcode: ${a(t)}, data.length: ${h.length})`)),h.length<o)throw new Error("Didn't get enough status bytes");const l=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",l),this.logger.debug("value",r),this.logger.debug("data",h)),1==l[0])throw 5==l[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(l[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...pi("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;if(this._isCDCDevice){const n=Date.now();for(;;){if(this._abandonCurrentOperation)throw new nt("Operation abandoned (reset strategy timeout)");if(Date.now()-n>t){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBufferAvailable)for(;this._inputBufferAvailable>0;){if(Date.now()-n>t){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}const s=this._readByte();if(null===e){if(192!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid head of packet ("+a(s)+")");e=[]}else if(r)if(r=!1,220==s)e.push(192);else{if(221!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid SLIP escape (0xdb, "+a(s)+")");e.push(219)}else if(219==s)r=!0;else{if(192==s)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(s)}}else await s(1)}}else{let n=[];for(;;){if(this._abandonCurrentOperation)throw new nt("Operation abandoned (reset strategy timeout)");const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBufferAvailable>0){n.push(this._readByte());break}await s(1)}if(0==n.length){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid head of packet ("+a(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(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(t)}}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=wi("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.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 ${a(t)}`)}throw new Error("Response doesn't match request")}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){try{const e=pi("<II",t,this.IS_STUB?h: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 s(tt),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;this._isReconfiguring=!0;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this.isWebUSB()){const e=this.port.getInfo(),i=6790===e.usbVendorId&&21971===e.usbProductId;if(!i&&"function"==typeof this.port.setBaudRate)return await this.port.setBaudRate(t),void await s(100)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}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}`)}finally{this._isReconfiguring=!1}}async syncWithTimeout(t){const e=Date.now();for(let i=0;i<5;i++){if(Date.now()-e>t)return!1;if(this._abandonCurrentOperation)return!1;this._clearInputBuffer();try{if(await this._sync())return await s(tt),!0}catch(t){if(this._abandonCurrentOperation)return!1}await s(tt)}return!1}async sync(){for(let t=0;t<5;t++){this._clearInputBuffer();if(await this._sync())return await s(tt),!0;await s(tt)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,d);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,tt);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch(e){this.debug&&this.logger.debug(`Sync attempt ${t+1} failed: ${e}`)}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=Y;s?(n=fi(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,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,u=0,c=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-c>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-c>=f?l=Array.from(new Uint8Array(n,c,f)):(l=Array.from(new Uint8Array(n,c,g-c)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=s?Math.round(l.length*r/h):l.length,c+=f,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[c,_,f,g,p,w,m,b,y,S,B,R,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily!=u||this.IS_STUB?t:this.getEraseSize(e,t);const h=this.IS_STUB?Y:st(et,t),o=Date.now();let l=pi("<IIII",s,n,r,e);return this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v||(l=l.concat(pi("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,l,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,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=st(et,n)):(n=r*a,h=Y);const o=pi("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=pi("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=pi("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return rt(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=pi("<IIII",t,e,i,a);s>0&&(r=r.concat(pi("<IIII",rt(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=rt(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>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,c=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),u>0&&(f|=134217728),await this.setDataLengths(s,u,i),await this.writeRegister(h,f),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 i=wi("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,c),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=n,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,pi("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?Y:500,i=pi("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await ht(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 i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new bi(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _reader(){return this._parent?this._parent._reader:this.__reader}set _reader(t){this._parent?this._parent._reader=t:this.__reader=t}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}get _currentBaudRate(){return this._parent?this._parent._currentBaudRate:this.__currentBaudRate}set _currentBaudRate(t){this._parent?this._parent._currentBaudRate=t:this.__currentBaudRate=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(this.logger.debug("Previous write failed, attempting recovery for current write"),!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.debug(`Failed to get writer in recovery: ${t}`),new Error("Cannot acquire writer lock")}await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch{}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable){try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{if(!this._reader)return void t(void 0);const e=setTimeout(()=>{this.logger.debug("Disconnect timeout - forcing resolution"),t(void 0)},1e3);this.addEventListener("disconnect",()=>{clearTimeout(e),t(void 0)},{once:!0});try{this._reader.cancel()}catch(i){this.logger.debug(`Reader cancel error: ${i}`),clearTimeout(e),t(void 0)}}),this.connected=!1;try{await this.port.close(),this.logger.debug("Port closed successfully")}catch(t){this.logger.debug(`Port close error: ${t}`)}}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,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!==h&&(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=!0,this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async reconnectToBootloader(){if(this._parent)await this._parent.reconnectToBootloader();else try{this.logger.log("Reconnecting to bootloader mode..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1,this.__chipFamily=void 0,this.chipName="Unknown Chip",this.IS_STUB=!1,this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await s(100),await this.connectWithResetStrategies(),await this.detectChip(),this.logger.log(`Reconnected to bootloader: ${this.chipName}`)}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBufferAvailable>0){void 0!==this._readByte()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0)}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),await s(tt),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");let r;await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`),this.isWebUSB()&&(this._isCDCDevice?(this._adaptiveBlockMultiplier=8,this._adaptiveMaxInFlightMultiplier=8,this._consecutiveSuccessfulChunks=0,this.logger.debug(`CDC device - Initialized: blockMultiplier=${this._adaptiveBlockMultiplier}, maxInFlightMultiplier=${this._adaptiveMaxInFlightMultiplier}`)):(this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0,this.logger.debug("Non-CDC device - Fixed values: blockSize=31, maxInFlight=31"))),r=this.isWebUSB()?16384:262144;let n=new Uint8Array(0),h=e,o=i;for(;o>0;){const e=Math.min(r,o);let l=!1,d=0;const u=5;let c=!1;for(;!l&&d<=u;){let i=new Uint8Array(0),a=0;try{let r,o;if(0===d&&this.logger.debug(`Reading chunk at 0x${h.toString(16)}, size: 0x${e.toString(16)}`),this.isWebUSB()){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2);r=e*this._adaptiveBlockMultiplier,o=e*this._adaptiveMaxInFlightMultiplier}else{const t=63;r=65*t,o=130*t}const u=pi("<IIII",h,e,r,o),[c]=await this.checkCommand(210,u);if(0!=c)throw new Error("Failed to read memory: "+c);for(;i.length<e;){let r;try{r=await this.readPacket(100)}catch(t){if(t instanceof nt){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(r&&r.length>0){const s=new Uint8Array(r),n=new Uint8Array(i.length+s.length);n.set(i),n.set(s,i.length),i=n;if(i.length>=e||i.length>=a+o){const e=pi("<I",i.length),s=t(e);await this.writeToStream(s),a=i.length}}}const _=new Uint8Array(n.length+i.length);if(_.set(n),_.set(i,n.length),n=_,l=!0,this.isWebUSB()&&this._isCDCDevice&&0===d&&(this._consecutiveSuccessfulChunks++,this._consecutiveSuccessfulChunks>=2)){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=8,a=8;let s=!1;if(this._adaptiveBlockMultiplier<i?(this._adaptiveBlockMultiplier=Math.min(2*this._adaptiveBlockMultiplier,i),s=!0):this._adaptiveMaxInFlightMultiplier<a&&(this._adaptiveMaxInFlightMultiplier=Math.min(2*this._adaptiveMaxInFlightMultiplier,a),s=!0),s){const t=e*this._adaptiveBlockMultiplier,i=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Speed increased: blockSize=${t}, maxInFlight=${i}`),this._lastAdaptiveAdjustment=Date.now()}this._consecutiveSuccessfulChunks=0}}catch(t){if(d++,this.isWebUSB()&&this._isCDCDevice&&1===d)if(this._adaptiveBlockMultiplier>1||this._adaptiveMaxInFlightMultiplier>1){this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0;const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=e*this._adaptiveBlockMultiplier,a=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Error at higher speed - reduced to minimum: blockSize=${i}, maxInFlight=${a}`)}else this.logger.debug("Error at minimum speed (blockSize=31, maxInFlight=31) - not a speed issue");if(!(t instanceof nt))throw t;if(d<=u){this.logger.log(`${t.message} at 0x${h.toString(16)}. Draining buffer and retrying (attempt ${d}/${u})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(tt)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(c)throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${u} retries and recovery attempt`);c=!0,this.logger.log(`All retries exhausted at 0x${h.toString(16)}. Attempting recovery (close and reopen port)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),d=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${u} retries and recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),n.length,i),h+=e,o-=e,this.logger.debug(`Total progress: 0x${n.length.toString(16)} from 0x${i.toString(16)} bytes`)}return n}}class bi extends mi{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await ht(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(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 "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,X)}async eraseRegion(t,e){if(t<0)throw new Error(`Invalid offset: ${t} (must be non-negative)`);if(e<0)throw new Error(`Invalid size: ${e} (must be non-negative)`);if(0===e)return void this.logger.log("eraseRegion: size is 0, skipping erase");if(t%n!==0)throw new Error(`Offset ${t} (0x${t.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);if(e%n!==0)throw new Error(`Size ${e} (0x${e.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);const i=4294967295;if(t>i)throw new Error(`Offset ${t} exceeds maximum value 4294967295`);if(e>i)throw new Error(`Size ${e} exceeds maximum value 4294967295`);if(t+e>i)throw new Error(`Region end (offset + size = ${t+e}) exceeds maximum addressable range 4294967295`);const a=st(et,e),s=pi("<II",t,e);await this.checkCommand(209,s,0,a)}}const yi=async t=>{let e;const i=globalThis.requestSerialPort;if("function"==typeof i)e=await i();else{if(!navigator.serial)throw new Error("Web Serial API is not supported in this browser. Please use Chrome, Edge, or Opera on desktop, or Chrome on Android. Note: The page must be served over HTTPS or localhost.");e=await navigator.serial.requestPort()}return e.readable&&e.writable||await e.open({baudRate:h}),new mi(e,t)},Si=async(t,e)=>{if(!t)throw new Error("Port is required");return t.readable&&t.writable||await t.open({baudRate:h}),new mi(t,e)};export{X as CHIP_ERASE_TIMEOUT,c as CHIP_FAMILY_ESP32,g as CHIP_FAMILY_ESP32C2,p as CHIP_FAMILY_ESP32C3,w as CHIP_FAMILY_ESP32C5,m as CHIP_FAMILY_ESP32C6,b as CHIP_FAMILY_ESP32C61,y as CHIP_FAMILY_ESP32H2,B as CHIP_FAMILY_ESP32H21,S as CHIP_FAMILY_ESP32H4,R as CHIP_FAMILY_ESP32P4,_ as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,u as CHIP_FAMILY_ESP8266,Y as DEFAULT_TIMEOUT,et as ERASE_REGION_TIMEOUT_PER_MB,mi as ESPLoader,L as ESP_CHANGE_BAUDRATE,H as ESP_CHECKSUM_MAGIC,E as ESP_ERASE_FLASH,A as ESP_ERASE_REGION,I as ESP_FLASH_BEGIN,x as ESP_FLASH_DATA,V as ESP_FLASH_DEFL_BEGIN,G as ESP_FLASH_DEFL_DATA,j as ESP_FLASH_DEFL_END,D as ESP_FLASH_END,Z as ESP_GET_SECURITY_INFO,k as ESP_MEM_BEGIN,F as ESP_MEM_DATA,C as ESP_MEM_END,K as ESP_RAM_BLOCK,$ as ESP_READ_FLASH,O as ESP_READ_REG,M as ESP_SPI_ATTACH,N as ESP_SPI_FLASH_MD5,P as ESP_SPI_SET_PARAMS,z as ESP_SYNC,W as ESP_WRITE_REG,at as FLASH_READ_TIMEOUT,Q as MAX_TIMEOUT,it as MEM_END_ROM_TIMEOUT,J as ROM_INVALID_RECV_MSG,tt as SYNC_TIMEOUT,q as USB_RAM_BLOCK,yi as connect,Si as connectWithPort};
1
+ const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=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=4096,h=115200,o=4097,l=1061191976,d=1610645804,c=1343410176,u=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),_=33382,f=50,g=12882,p=12883,w=12994,m=12995,b=12997,y=12998,S=207969,B=12914,R=12916,v=12917,U=12928,T=12849,I={5:{name:"ESP32-C3",family:m},9:{name:"ESP32-S3",family:p},12:{name:"ESP32-C2",family:w},13:{name:"ESP32-C6",family:y},16:{name:"ESP32-H2",family:B},18:{name:"ESP32-P4",family:U},20:{name:"ESP32-C61",family:S},23:{name:"ESP32-C5",family:b},25:{name:"ESP32-H21",family:v},28:{name:"ESP32-H4",family:R},32:{name:"ESP32-S31",family:T}},x={4293968129:{name:"ESP8266",family:_},15736195:{name:"ESP32",family:f},1990:{name:"ESP32-S2",family:g}},D=2,k=3,C=4,F=5,W=6,z=7,O=8,E=9,A=10,$=208,P=209,M=210,L=11,N=13,Z=15,H=19,V=20,G=239,j=16,J=17,q=18,K=5,Y=2048,X=6144,Q=3e3,tt=15e4,et=3e5,it=100,at=3e4,st=500,rt=100,nt=(t,e)=>{const i=Math.floor(t*(e/486));return i<Q?Q:i},ht=t=>{switch(t){case f:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case g:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case p:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case _:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case w:case m:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case b:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case y:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case B:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case R:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case v:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case U:return{regBase:1342754816,baseFuse:c,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case T: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 ot extends Error{constructor(t){super(t),this.name="SlipReadError"}}const lt=async(t,i)=>{let a;if(t==R||t==v||t==T)return null;if(t==f)a=await import("./esp32-BRKoi17y.js");else if(t==g)a=await import("./esp32s2-iX3WoDbg.js");else if(t==p)a=await import("./esp32s3-DGwDVIgz.js");else if(t==_)a=await import("./esp8266-CUwxJpGa.js");else if(t==w)a=await import("./esp32c2-Btgr_lwh.js");else if(t==m)a=await import("./esp32c3-CHKfoI8W.js");else if(t==b)a=await import("./esp32c5-BDW4KtLo.js");else if(t==y)a=await import("./esp32c6-il8tTxAG.js");else if(t==S)a=await import("./esp32c61-thKzxBGf.js");else if(t==B)a=await import("./esp32h2-CxoUHv_P.js");else{if(t!=U)return null;a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")}return{...a,text:e(atob(a.text)),data:e(atob(a.data))}};function dt(t){let e=t.length;for(;--e>=0;)t[e]=0}const ct=256,ut=286,_t=30,ft=15,gt=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]),pt=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]),wt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),mt=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),bt=new Array(576);dt(bt);const yt=new Array(60);dt(yt);const St=new Array(512);dt(St);const Bt=new Array(256);dt(Bt);const Rt=new Array(29);dt(Rt);const vt=new Array(_t);function Ut(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let Tt,It,xt;function Dt(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}dt(vt);const kt=t=>t<256?St[t]:St[256+(t>>>7)],Ct=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},Ft=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Ct(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},Wt=(t,e,i)=>{Ft(t,i[2*e],i[2*e+1])},zt=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},Ot=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=ft;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=zt(a[e]++,e))}},Et=t=>{let e;for(e=0;e<ut;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},At=t=>{t.bi_valid>8?Ct(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},$t=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},Pt=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&$t(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!$t(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},Mt=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?Wt(t,s,e):(r=Bt[s],Wt(t,r+ct+1,e),n=gt[r],0!==n&&(s-=Rt[r],Ft(t,s,n)),a--,r=kt(a),Wt(t,r,i),n=pt[r],0!==n&&(a-=vt[r],Ft(t,a,n)))}while(h<t.sym_next);Wt(t,256,e)},Lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=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!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)Pt(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],Pt(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,Pt(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=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<=ft;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));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>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),Ot(i,l,t.bl_count)},Nt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},Zt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{Wt(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(Wt(t,s,t.bl_tree),h--),Wt(t,16,t.bl_tree),Ft(t,h-3,2)):h<=10?(Wt(t,17,t.bl_tree),Ft(t,h-3,3)):(Wt(t,18,t.bl_tree),Ft(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let Ht=!1;const Vt=(t,e,i,a)=>{Ft(t,0+(a?1:0),3),At(t),Ct(t,i),Ct(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var Gt=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&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<ct;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(Nt(t,t.dyn_ltree,t.l_desc.max_code),Nt(t,t.dyn_dtree,t.d_desc.max_code),Lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*mt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?Vt(t,e,i,a):4===t.strategy||r===s?(Ft(t,2+(a?1:0),3),Mt(t,bt,yt)):(Ft(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(Ft(t,e-257,5),Ft(t,i-1,5),Ft(t,a-4,4),s=0;s<a;s++)Ft(t,t.bl_tree[2*mt[s]+1],3);Zt(t,t.dyn_ltree,e-1),Zt(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),Mt(t,t.dyn_ltree,t.dyn_dtree)),Et(t),a&&At(t)},jt={_tr_init:t=>{Ht||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(Rt[a]=i,t=0;t<1<<gt[a];t++)Bt[i++]=a;for(Bt[i-1]=a,s=0,a=0;a<16;a++)for(vt[a]=s,t=0;t<1<<pt[a];t++)St[s++]=a;for(s>>=7;a<_t;a++)for(vt[a]=s<<7,t=0;t<1<<pt[a]-7;t++)St[256+s++]=a;for(e=0;e<=ft;e++)r[e]=0;for(t=0;t<=143;)bt[2*t+1]=8,t++,r[8]++;for(;t<=255;)bt[2*t+1]=9,t++,r[9]++;for(;t<=279;)bt[2*t+1]=7,t++,r[7]++;for(;t<=287;)bt[2*t+1]=8,t++,r[8]++;for(Ot(bt,287,r),t=0;t<_t;t++)yt[2*t+1]=5,yt[2*t]=zt(t,5);Tt=new Ut(bt,gt,257,ut,ft),It=new Ut(yt,pt,0,_t,ft),xt=new Ut(new Array(0),wt,0,19,7)})(),Ht=!0),t.l_desc=new Dt(t.dyn_ltree,Tt),t.d_desc=new Dt(t.dyn_dtree,It),t.bl_desc=new Dt(t.bl_tree,xt),t.bi_buf=0,t.bi_valid=0,Et(t)},_tr_stored_block:Vt,_tr_flush_block:Gt,_tr_tally:(t,e,i)=>(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++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(Bt[i]+ct+1)]++,t.dyn_dtree[2*kt(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{Ft(t,2,3),Wt(t,256,bt),(t=>{16===t.bi_valid?(Ct(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 Jt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const qt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var Kt=(t,e,i,a)=>{const s=qt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];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"},Xt={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:Qt,_tr_stored_block:te,_tr_flush_block:ee,_tr_tally:ie,_tr_align:ae}=jt,{Z_NO_FLUSH:se,Z_PARTIAL_FLUSH:re,Z_FULL_FLUSH:ne,Z_FINISH:he,Z_BLOCK:oe,Z_OK:le,Z_STREAM_END:de,Z_STREAM_ERROR:ce,Z_DATA_ERROR:ue,Z_BUF_ERROR:_e,Z_DEFAULT_COMPRESSION:fe,Z_FILTERED:ge,Z_HUFFMAN_ONLY:pe,Z_RLE:we,Z_FIXED:me,Z_DEFAULT_STRATEGY:be,Z_UNKNOWN:ye,Z_DEFLATED:Se}=Xt,Be=258,Re=262,ve=42,Ue=113,Te=666,Ie=(t,e)=>(t.msg=Yt[e],e),xe=t=>2*t-(t>4?9:0),De=t=>{let e=t.length;for(;--e>=0;)t[e]=0},ke=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Ce=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const Fe=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},We=(t,e)=>{ee(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Fe(t.strm)},ze=(t,e)=>{t.pending_buf[t.pending++]=e},Oe=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Ee=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=Jt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=Kt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},Ae=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Re?t.strstart-(t.w_size-Re):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Be;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Be-(u-r),r=u-Be,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},$e=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Re)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),ke(t),a+=e),0===t.strm.avail_in)break;if(i=Ee(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Ce(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Ce(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Re&&0!==t.strm.avail_in)},Pe=(t,e)=>{let i,a,s,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(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==he||e===se||i!==a+t.strm.avail_in))break;n=e===he&&i===a+t.strm.avail_in?1:0,te(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,Fe(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(Ee(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}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!==se&&e!==he&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&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++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(Ee(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===he)&&e!==se&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===he&&0===t.strm.avail_in&&i===a?1:0,te(t,t.block_start,i,n),t.block_start+=i,Fe(t.strm)),n?3:1)},Me=(t,e)=>{let i,a;for(;;){if(t.lookahead<Re){if($e(t),t.lookahead<Re&&e===se)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Re&&(t.match_length=Ae(t,i)),t.match_length>=3)if(a=ie(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=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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=Ce(t,t.ins_h,t.window[t.strstart+1]);else a=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2},Le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Re){if($e(t),t.lookahead<Re&&e===se)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Re&&(t.match_length=Ae(t,i),t.match_length<=5&&(t.strategy===ge||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=ie(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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++,a&&(We(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=ie(t,0,t.window[t.strstart-1]),a&&We(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&&(a=ie(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2};function Ne(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const Ze=[new Ne(0,0,0,0,Pe),new Ne(4,4,8,4,Me),new Ne(4,5,16,8,Me),new Ne(4,6,32,32,Me),new Ne(4,4,16,16,Le),new Ne(8,16,32,32,Le),new Ne(8,16,128,128,Le),new Ne(8,32,128,256,Le),new Ne(32,128,258,1024,Le),new Ne(32,258,258,4096,Le)];function He(){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=Se,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),De(this.dyn_ltree),De(this.dyn_dtree),De(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),De(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),De(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 Ve=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==ve&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Ue&&e.status!==Te?1:0},Ge=t=>{if(Ve(t))return Ie(t,ce);t.total_in=t.total_out=0,t.data_type=ye;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?ve:Ue,t.adler=2===e.wrap?0:1,e.last_flush=-2,Qt(e),le},je=t=>{const e=Ge(t);var i;return e===le&&((i=t.state).window_size=2*i.w_size,De(i.head),i.max_lazy_match=Ze[i.level].max_lazy,i.good_match=Ze[i.level].good_length,i.nice_match=Ze[i.level].nice_length,i.max_chain_length=Ze[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},Je=(t,e,i,a,s,r)=>{if(!t)return ce;let n=1;if(e===fe&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Se||a<8||a>15||e<0||e>9||r<0||r>me||8===a&&1!==n)return Ie(t,ce);8===a&&(a=9);const h=new He;return t.state=h,h.strm=t,h.status=ve,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+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<<s+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=i,je(t)};var qe={deflateInit:(t,e)=>Je(t,e,Se,15,8,be),deflateInit2:Je,deflateReset:je,deflateResetKeep:Ge,deflateSetHeader:(t,e)=>Ve(t)||2!==t.state.wrap?ce:(t.state.gzhead=e,le),deflate:(t,e)=>{if(Ve(t)||e>oe||e<0)return t?Ie(t,ce):ce;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Te&&e!==he)return Ie(t,0===t.avail_out?_e:ce);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(Fe(t),0===t.avail_out)return i.last_flush=-1,le}else if(0===t.avail_in&&xe(e)<=xe(a)&&e!==he)return Ie(t,_e);if(i.status===Te&&0!==t.avail_in)return Ie(t,_e);if(i.status===ve&&0===i.wrap&&(i.status=Ue),i.status===ve){let e=Se+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=pe||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,Oe(i,e),0!==i.strstart&&(Oe(i,t.adler>>>16),Oe(i,65535&t.adler)),t.adler=1,i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le}if(57===i.status)if(t.adler=0,ze(i,31),ze(i,139),ze(i,8),i.gzhead)ze(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ze(i,255&i.gzhead.time),ze(i,i.gzhead.time>>8&255),ze(i,i.gzhead.time>>16&255),ze(i,i.gzhead.time>>24&255),ze(i,9===i.level?2:i.strategy>=pe||i.level<2?4:0),ze(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ze(i,255&i.gzhead.extra.length),ze(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Kt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ze(i,0),ze(i,0),ze(i,0),ze(i,0),ze(i,0),ze(i,9===i.level?2:i.strategy>=pe||i.level<2?4:0),ze(i,3),i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,Fe(t),0!==i.pending)return i.last_flush=-1,le;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),Fe(t),0!==i.pending)return i.last_flush=-1,le;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ze(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),Fe(t),0!==i.pending)return i.last_flush=-1,le;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ze(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(Fe(t),0!==i.pending))return i.last_flush=-1,le;ze(i,255&t.adler),ze(i,t.adler>>8&255),t.adler=0}if(i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le}if(0!==t.avail_in||0!==i.lookahead||e!==se&&i.status!==Te){let a=0===i.level?Pe(i,e):i.strategy===pe?((t,e)=>{let i;for(;;){if(0===t.lookahead&&($e(t),0===t.lookahead)){if(e===se)return 1;break}if(t.match_length=0,i=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===we?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Be){if($e(t),t.lookahead<=Be&&e===se)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Be;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Be-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=ie(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2})(i,e):Ze[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Te),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),le;if(2===a&&(e===re?ae(i):e!==oe&&(te(i,0,0,!1),e===ne&&(De(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Fe(t),0===t.avail_out))return i.last_flush=-1,le}return e!==he?le:i.wrap<=0?de:(2===i.wrap?(ze(i,255&t.adler),ze(i,t.adler>>8&255),ze(i,t.adler>>16&255),ze(i,t.adler>>24&255),ze(i,255&t.total_in),ze(i,t.total_in>>8&255),ze(i,t.total_in>>16&255),ze(i,t.total_in>>24&255)):(Oe(i,t.adler>>>16),Oe(i,65535&t.adler)),Fe(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?le:de)},deflateEnd:t=>{if(Ve(t))return ce;const e=t.state.status;return t.state=null,e===Ue?Ie(t,ue):le},deflateSetDictionary:(t,e)=>{let i=e.length;if(Ve(t))return ce;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==ve||a.lookahead)return ce;if(1===s&&(t.adler=Jt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(De(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,$e(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Ce(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,$e(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,le},deflateInfo:"pako deflate (from Nodeca project)"};const Ke=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)Ke(i,e)&&(t[e]=i[e])}}return t},Xe=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Qe=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Qe=!1}const ti=new Uint8Array(256);for(let t=0;t<256;t++)ti[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ti[254]=ti[254]=1;var ei=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ii=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 ai=Object.prototype.toString,{Z_NO_FLUSH:si,Z_SYNC_FLUSH:ri,Z_FULL_FLUSH:ni,Z_FINISH:hi,Z_OK:oi,Z_STREAM_END:li,Z_DEFAULT_COMPRESSION:di,Z_DEFAULT_STRATEGY:ci,Z_DEFLATED:ui}=Xt;function _i(t){this.options=Ye({level:di,method:ui,chunkSize:16384,windowBits:15,memLevel:8,strategy:ci},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 ii,this.strm.avail_out=0;let i=qe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==oi)throw new Error(Yt[i]);if(e.header&&qe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?ei(e.dictionary):"[object ArrayBuffer]"===ai.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=qe.deflateSetDictionary(this.strm,t),i!==oi)throw new Error(Yt[i]);this._dict_set=!0}}_i.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?hi:si,"string"==typeof t?i.input=ei(t):"[object ArrayBuffer]"===ai.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===ri||r===ni)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=qe.deflate(i,r),s===li)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=qe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===oi;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},_i.prototype.onData=function(t){this.chunks.push(t)},_i.prototype.onEnd=function(t){t===oi&&(this.result=Xe(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var fi={deflate:function(t,e){const i=new _i(e);if(i.push(t,!0),i.err)throw i.msg||Yt[i.err];return i.result}};const{deflate:gi}=fi;var pi=gi;const wi={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}},mi=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in wi))throw"Unhandled character '"+t+"' in pack format";const i=wi[t].bytes,r=new DataView(new ArrayBuffer(i));wi[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},bi=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in wi))throw"Unhandled character '"+t+"' in unpack format";const r=wi[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=wi[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class yi extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,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=h,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.__abandonCurrentOperation=!1,this.__adaptiveBlockMultiplier=1,this.__adaptiveMaxInFlightMultiplier=1,this.__consecutiveSuccessfulChunks=0,this.__lastAdaptiveAdjustment=0,this.__isCDCDevice=!1,this.state_DTR=!1,this.state_RTS=!1,this.__writeChain=Promise.resolve()}get chipFamily(){return this._parent?this._parent.chipFamily:this.__chipFamily}set chipFamily(t){this._parent?this._parent.chipFamily=t:this.__chipFamily=t}get chipName(){return this._parent?this._parent.chipName:this.__chipName}set chipName(t){this._parent?this._parent.chipName=t:this.__chipName=t}get chipRevision(){return this._parent?this._parent.chipRevision:this.__chipRevision}set chipRevision(t){this._parent?this._parent.chipRevision=t:this.__chipRevision=t}get chipVariant(){return this._parent?this._parent.chipVariant:this.__chipVariant}set chipVariant(t){this._parent?this._parent.chipVariant=t:this.__chipVariant=t}get _inputBuffer(){if(this._parent)return this._parent._inputBuffer;if(void 0===this.__inputBuffer)throw new Error("_inputBuffer accessed before initialization");return this.__inputBuffer}get _inputBufferReadIndex(){return this._parent?this._parent._inputBufferReadIndex:this.__inputBufferReadIndex||0}set _inputBufferReadIndex(t){this._parent?this._parent._inputBufferReadIndex=t:this.__inputBufferReadIndex=t}get _inputBufferAvailable(){return this._inputBuffer.length-this._inputBufferReadIndex}_readByte(){if(!(this._inputBufferReadIndex>=this._inputBuffer.length))return this._inputBuffer[this._inputBufferReadIndex++]}_clearInputBuffer(){this._inputBuffer.length=0,this._inputBufferReadIndex=0}_compactInputBuffer(){this._inputBufferReadIndex>1e3&&this._inputBufferReadIndex>this._inputBuffer.length/2&&(this._inputBuffer.splice(0,this._inputBufferReadIndex),this._inputBufferReadIndex=0)}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}get _abandonCurrentOperation(){return this._parent?this._parent._abandonCurrentOperation:this.__abandonCurrentOperation}set _abandonCurrentOperation(t){this._parent?this._parent._abandonCurrentOperation=t:this.__abandonCurrentOperation=t}get _adaptiveBlockMultiplier(){return this._parent?this._parent._adaptiveBlockMultiplier:this.__adaptiveBlockMultiplier}set _adaptiveBlockMultiplier(t){this._parent?this._parent._adaptiveBlockMultiplier=t:this.__adaptiveBlockMultiplier=t}get _adaptiveMaxInFlightMultiplier(){return this._parent?this._parent._adaptiveMaxInFlightMultiplier:this.__adaptiveMaxInFlightMultiplier}set _adaptiveMaxInFlightMultiplier(t){this._parent?this._parent._adaptiveMaxInFlightMultiplier=t:this.__adaptiveMaxInFlightMultiplier=t}get _consecutiveSuccessfulChunks(){return this._parent?this._parent._consecutiveSuccessfulChunks:this.__consecutiveSuccessfulChunks}set _consecutiveSuccessfulChunks(t){this._parent?this._parent._consecutiveSuccessfulChunks=t:this.__consecutiveSuccessfulChunks=t}get _lastAdaptiveAdjustment(){return this._parent?this._parent._lastAdaptiveAdjustment:this.__lastAdaptiveAdjustment}set _lastAdaptiveAdjustment(t){this._parent?this._parent._lastAdaptiveAdjustment=t:this.__lastAdaptiveAdjustment=t}get _isCDCDevice(){return this._parent?this._parent._isCDCDevice:this.__isCDCDevice}set _isCDCDevice(t){this._parent?this._parent._isCDCDevice=t:this.__isCDCDevice=t}detectUSBSerialChip(t,e){const i={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 i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__inputBufferReadIndex=0,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),(12346===t.usbVendorId||6790===t.usbVendorId&&21971===t.usbProductId)&&(this._isCDCDevice=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=ht(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=I[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===U&&(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}`),await this.drainInputBuffer(200),this._clearInputBuffer(),await s(it);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=x[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===U&&(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: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==U)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:bi("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?bi("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?bi("<I",t.slice(16,20))[0]:0}}async getMacAddress(){if(!this._initializationSucceeded)throw new Error("getMacAddress() requires initialize() to have completed successfully");return this.macAddr().map(t=>t.toString(16).padStart(2,"0").toUpperCase()).join(":")}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:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}finally{this._isReconfiguring=!1}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 setDTRandRTS(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!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),await this.sleep(200)}async hardResetClassic(){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),await this.sleep(200)}async hardResetUnixTight(){await this.setDTRandRTS(!0,!0),await this.setDTRandRTS(!1,!1),await this.setDTRandRTS(!1,!0),await this.sleep(100),await this.setDTRandRTS(!0,!1),await this.sleep(50),await this.setDTRandRTS(!1,!1),await this.setDTR(!1),await this.sleep(200)}async setRTSWebUSB(t){this.state_RTS=t,await this.port.setSignals({requestToSend:t,dataTerminalReady:this.state_DTR})}async setDTRWebUSB(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t,requestToSend:this.state_RTS})}async setDTRandRTSWebUSB(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerialWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetUSBJTAGSerialInvertedDTRWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetClassicWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetUnixTightWebUSB(){await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRandRTSWebUSB(!0,!0),await this.setDTRandRTSWebUSB(!1,!0),await this.sleep(100),await this.setDTRandRTSWebUSB(!0,!1),await this.sleep(50),await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetClassicLongDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(500),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200),await this.setDTRWebUSB(!1),await this.sleep(500)}async hardResetClassicShortDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(25),await this.setDTRWebUSB(!1),await this.sleep(100)}async hardResetInvertedWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedDTRWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedRTSWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}isWebUSB(){return!0===this.port.isWebUSB}async connectWithResetStrategies(){const t=this.port.getInfo(),e=t.usbProductId===o,i=12346===t.usbVendorId,a=[],r=this,n=!e&&!i;if(this.isWebUSB()){const s=4292===t.usbVendorId,h=6790===t.usbVendorId,o=12346===t.usbVendorId&&2===t.usbProductId;(e||i)&&(o?(a.push({name:"USB-JTAG/Serial (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"UnixTight (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetClassicWebUSB()})):(a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"USB-JTAG/Serial (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"Inverted DTR Classic (WebUSB)",fn:async()=>await r.hardResetInvertedDTRWebUSB()}))),n&&(h?(a.push({name:"UnixTight (WebUSB) - CH34x",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CH34x",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):s?(a.push({name:"UnixTight (WebUSB) - CP2102",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CP2102",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):(a.push({name:"UnixTight (WebUSB)",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"Inverted Both (WebUSB)",fn:async function(){return await r.hardResetInvertedWebUSB()}}),a.push({name:"Inverted RTS (WebUSB)",fn:async function(){return await r.hardResetInvertedRTSWebUSB()}}),a.push({name:"Inverted DTR (WebUSB)",fn:async function(){return await r.hardResetInvertedDTRWebUSB()}}))),s||o||(6790!==t.usbVendorId&&a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"UnixTight (WebUSB)",fn:async function(){return await r.hardResetUnixTightWebUSB()}}),a.push({name:"Classic Long Delay (WebUSB)",fn:async function(){return await r.hardResetClassicLongDelayWebUSB()}}),a.push({name:"Classic Short Delay (WebUSB)",fn:async function(){return await r.hardResetClassicShortDelayWebUSB()}}),e||i||a.push({name:"USB-JTAG/Serial fallback (WebUSB)",fn:async function(){return await r.hardResetUSBJTAGSerialWebUSB()}}))}else(e||i)&&a.push({name:"USB-JTAG/Serial",fn:async function(){return await r.hardResetUSBJTAGSerial()}}),a.push({name:"UnixTight",fn:async function(){return await r.hardResetUnixTight()}}),e||i||a.push({name:"USB-JTAG/Serial (fallback)",fn:async function(){return await r.hardResetUSBJTAGSerial()}});let h=null;for(const t of a)try{if(!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}if(this._abandonCurrentOperation=!1,await t.fn(),n){if(await this.syncWithTimeout(2e3))return void this.logger.log(`Connected USB Serial successfully with ${t.name} reset.`);throw new Error("Sync timeout or abandoned")}{const e=this.sync(),i=new Promise((t,e)=>setTimeout(()=>e(new Error("Sync timeout")),1e3));try{return await Promise.race([e,i]),void this.logger.log(`Connected CDC/JTAG successfully with ${t.name} reset.`)}catch(t){throw new Error("Sync timeout or abandoned")}}}catch(e){if(h=e,this.logger.log(`${t.name} reset failed: ${e.message}`),this._abandonCurrentOperation=!0,await s(100),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._clearInputBuffer(),await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw this._abandonCurrentOperation=!1,new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==h?void 0:h.message}`)}async watchdogReset(){let t,e,i,a;if(this.logger.log("Hard resetting with watchdog timer..."),this.chipFamily===g)t=1061191852,e=1061191828,i=1061191832,a=1356348065;else{if(this.chipFamily!==p)throw new Error(`watchdogReset() is only supported for ESP32-S2 and ESP32-S3, not ${this.chipFamily}`);t=1610645680,e=1610645656,i=1610645660,a=1356348065}await this.writeRegister(t,a,void 0,0),await this.writeRegister(i,2e3,void 0,0);await this.writeRegister(e,-805306110,void 0,0),await this.writeRegister(t,0,void 0,0),await this.sleep(500)}async hardReset(t=!1){if(t)this.port.getInfo().usbProductId===o?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):this.isWebUSB()?(await this.hardResetClassicWebUSB(),this.logger.log("Classic reset (WebUSB/Android).")):(await this.hardResetClassic(),this.logger.log("Classic reset."));else if(this.port.getInfo().usbProductId!==o||this.chipFamily!==g&&this.chipFamily!==p)this.isWebUSB()?(await this.setRTSWebUSB(!0),await this.sleep(200),await this.setRTSWebUSB(!1),await this.sleep(200),this.logger.log("Hard reset (WebUSB).")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset."));else{try{const t=this.chipFamily===g?l:d,e=(this.chipFamily,1);await this.writeRegister(t,0,e,0)}catch(t){this.logger.log("Warning: Could not clear force download boot mode:",t)}let t=!1;try{const e=this.chipFamily===g?1061175352:1610629176,i=(this.chipFamily,8),a=this.chipFamily===g?l:d,s=(this.chipFamily,1),r=await this.readRegister(e),n=await this.readRegister(a);0===(r&i)&&0===(n&s)&&(t=!0)}catch(e){this.logger.log("Warning: Could not read strap/option registers, using watchdog reset:",e),t=!0}t?(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG).")):(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG, normal boot)."))}await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==_){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>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]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==f)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v&&this.chipFamily!=U&&this.chipFamily!=T)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,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 "+a(t,8));const e=mi("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,et),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==_?o=2:[f,g,p,w,m,b,y,S,B,R,v,U,T].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)?o=h.length:(o=2,this.logger.debug(`Unknown chip family, defaulting to 2-byte status (opcode: ${a(t)}, data.length: ${h.length})`)),h.length<o)throw new Error("Didn't get enough status bytes");const l=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",l),this.logger.debug("value",r),this.logger.debug("data",h)),1==l[0])throw 5==l[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(l[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...mi("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;if(this._isCDCDevice){const n=Date.now();for(;;){if(this._abandonCurrentOperation)throw new ot("Operation abandoned (reset strategy timeout)");if(Date.now()-n>t){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBufferAvailable)for(;this._inputBufferAvailable>0;){if(Date.now()-n>t){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}const s=this._readByte();if(null===e){if(192!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid head of packet ("+a(s)+")");e=[]}else if(r)if(r=!1,220==s)e.push(192);else{if(221!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid SLIP escape (0xdb, "+a(s)+")");e.push(219)}else if(219==s)r=!0;else{if(192==s)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(s)}}else await s(1)}}else{let n=[];for(;;){if(this._abandonCurrentOperation)throw new ot("Operation abandoned (reset strategy timeout)");const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBufferAvailable>0){n.push(this._readByte());break}await s(1)}if(0==n.length){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid head of packet ("+a(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(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(t)}}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=bi("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.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 ${a(t)}`)}throw new Error("Response doesn't match request")}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){try{const e=mi("<II",t,this.IS_STUB?h: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 s(it),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;this._isReconfiguring=!0;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this.isWebUSB()){const e=this.port.getInfo(),i=6790===e.usbVendorId&&21971===e.usbProductId;if(!i&&"function"==typeof this.port.setBaudRate)return await this.port.setBaudRate(t),void await s(100)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}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}`)}finally{this._isReconfiguring=!1}}async syncWithTimeout(t){const e=Date.now();for(let i=0;i<5;i++){if(Date.now()-e>t)return!1;if(this._abandonCurrentOperation)return!1;this._clearInputBuffer();try{if(await this._sync())return await s(it),!0}catch(t){if(this._abandonCurrentOperation)return!1}await s(it)}return!1}async sync(){for(let t=0;t<5;t++){this._clearInputBuffer();if(await this._sync())return await s(it),!0;await s(it)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,u);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,it);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch(e){this.debug&&this.logger.debug(`Sync attempt ${t+1} failed: ${e}`)}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=Q;s?(n=pi(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,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[f,g,p,w,m,b,y,S,B,R,v,U,T].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily!=_||this.IS_STUB?t:this.getEraseSize(e,t);const h=this.IS_STUB?Q:nt(at,t),o=Date.now();let l=mi("<IIII",s,n,r,e);return this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v&&this.chipFamily!=U&&this.chipFamily!=T||(l=l.concat(mi("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,l,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,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=nt(at,n)):(n=r*a,h=Q);const o=mi("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=mi("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=mi("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return ht(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=mi("<IIII",t,e,i,a);s>0&&(r=r.concat(mi("<IIII",ht(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=ht(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>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),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),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 i=bi("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=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,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=n,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,mi("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?Q:500,i=mi("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await lt(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 i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new Si(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _reader(){return this._parent?this._parent._reader:this.__reader}set _reader(t){this._parent?this._parent._reader=t:this.__reader=t}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}get _currentBaudRate(){return this._parent?this._parent._currentBaudRate:this.__currentBaudRate}set _currentBaudRate(t){this._parent?this._parent._currentBaudRate=t:this.__currentBaudRate=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(this.logger.debug("Previous write failed, attempting recovery for current write"),!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.debug(`Failed to get writer in recovery: ${t}`),new Error("Cannot acquire writer lock")}await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch{}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable){try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{if(!this._reader)return void t(void 0);const e=setTimeout(()=>{this.logger.debug("Disconnect timeout - forcing resolution"),t(void 0)},1e3);this.addEventListener("disconnect",()=>{clearTimeout(e),t(void 0)},{once:!0});try{this._reader.cancel()}catch(i){this.logger.debug(`Reader cancel error: ${i}`),clearTimeout(e),t(void 0)}}),this.connected=!1;try{await this.port.close(),this.logger.debug("Port closed successfully")}catch(t){this.logger.debug(`Port close error: ${t}`)}}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,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!==h&&(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=!0,this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async reconnectToBootloader(){if(this._parent)await this._parent.reconnectToBootloader();else try{this.logger.log("Reconnecting to bootloader mode..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1,this.__chipFamily=void 0,this.chipName="Unknown Chip",this.IS_STUB=!1,this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await s(100),await this.connectWithResetStrategies(),await this.detectChip(),this.logger.log(`Reconnected to bootloader: ${this.chipName}`)}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBufferAvailable>0){void 0!==this._readByte()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0)}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),await s(it),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");let r;await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`),this.isWebUSB()&&(this._isCDCDevice?(this._adaptiveBlockMultiplier=8,this._adaptiveMaxInFlightMultiplier=8,this._consecutiveSuccessfulChunks=0,this.logger.debug(`CDC device - Initialized: blockMultiplier=${this._adaptiveBlockMultiplier}, maxInFlightMultiplier=${this._adaptiveMaxInFlightMultiplier}`)):(this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0,this.logger.debug("Non-CDC device - Fixed values: blockSize=31, maxInFlight=31"))),r=this.isWebUSB()?16384:262144;let n=new Uint8Array(0),h=e,o=i;for(;o>0;){const e=Math.min(r,o);let l=!1,d=0;const c=5;let u=!1;for(;!l&&d<=c;){let i=new Uint8Array(0),a=0;try{let r,o;if(0===d&&this.logger.debug(`Reading chunk at 0x${h.toString(16)}, size: 0x${e.toString(16)}`),this.isWebUSB()){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2);r=e*this._adaptiveBlockMultiplier,o=e*this._adaptiveMaxInFlightMultiplier}else{const t=63;r=65*t,o=130*t}const c=mi("<IIII",h,e,r,o),[u]=await this.checkCommand(210,c);if(0!=u)throw new Error("Failed to read memory: "+u);for(;i.length<e;){let r;try{r=await this.readPacket(100)}catch(t){if(t instanceof ot){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(r&&r.length>0){const s=new Uint8Array(r),n=new Uint8Array(i.length+s.length);n.set(i),n.set(s,i.length),i=n;if(i.length>=e||i.length>=a+o){const e=mi("<I",i.length),s=t(e);await this.writeToStream(s),a=i.length}}}const _=new Uint8Array(n.length+i.length);if(_.set(n),_.set(i,n.length),n=_,l=!0,this.isWebUSB()&&this._isCDCDevice&&0===d&&(this._consecutiveSuccessfulChunks++,this._consecutiveSuccessfulChunks>=2)){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=8,a=8;let s=!1;if(this._adaptiveBlockMultiplier<i?(this._adaptiveBlockMultiplier=Math.min(2*this._adaptiveBlockMultiplier,i),s=!0):this._adaptiveMaxInFlightMultiplier<a&&(this._adaptiveMaxInFlightMultiplier=Math.min(2*this._adaptiveMaxInFlightMultiplier,a),s=!0),s){const t=e*this._adaptiveBlockMultiplier,i=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Speed increased: blockSize=${t}, maxInFlight=${i}`),this._lastAdaptiveAdjustment=Date.now()}this._consecutiveSuccessfulChunks=0}}catch(t){if(d++,this.isWebUSB()&&this._isCDCDevice&&1===d)if(this._adaptiveBlockMultiplier>1||this._adaptiveMaxInFlightMultiplier>1){this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0;const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=e*this._adaptiveBlockMultiplier,a=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Error at higher speed - reduced to minimum: blockSize=${i}, maxInFlight=${a}`)}else this.logger.debug("Error at minimum speed (blockSize=31, maxInFlight=31) - not a speed issue");if(!(t instanceof ot))throw t;if(d<=c){this.logger.log(`${t.message} at 0x${h.toString(16)}. Draining buffer and retrying (attempt ${d}/${c})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(it)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(u)throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${c} retries and recovery attempt`);u=!0,this.logger.log(`All retries exhausted at 0x${h.toString(16)}. Attempting recovery (close and reopen port)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),d=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${c} retries and recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),n.length,i),h+=e,o-=e,this.logger.debug(`Total progress: 0x${n.length.toString(16)} from 0x${i.toString(16)} bytes`)}return n}}class Si extends yi{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await lt(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(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 "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,tt)}async eraseRegion(t,e){if(t<0)throw new Error(`Invalid offset: ${t} (must be non-negative)`);if(e<0)throw new Error(`Invalid size: ${e} (must be non-negative)`);if(0===e)return void this.logger.log("eraseRegion: size is 0, skipping erase");if(t%n!==0)throw new Error(`Offset ${t} (0x${t.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);if(e%n!==0)throw new Error(`Size ${e} (0x${e.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);const i=4294967295;if(t>i)throw new Error(`Offset ${t} exceeds maximum value 4294967295`);if(e>i)throw new Error(`Size ${e} exceeds maximum value 4294967295`);if(t+e>i)throw new Error(`Region end (offset + size = ${t+e}) exceeds maximum addressable range 4294967295`);const a=nt(at,e),s=mi("<II",t,e);await this.checkCommand(209,s,0,a)}}const Bi=async t=>{let e;const i=globalThis.requestSerialPort;if("function"==typeof i)e=await i();else{if(!navigator.serial)throw new Error("Web Serial API is not supported in this browser. Please use Chrome, Edge, or Opera on desktop, or Chrome on Android. Note: The page must be served over HTTPS or localhost.");e=await navigator.serial.requestPort()}return e.readable&&e.writable||await e.open({baudRate:h}),new yi(e,t)},Ri=async(t,e)=>{if(!t)throw new Error("Port is required");return t.readable&&t.writable||await t.open({baudRate:h}),new yi(t,e)};export{tt as CHIP_ERASE_TIMEOUT,f as CHIP_FAMILY_ESP32,w as CHIP_FAMILY_ESP32C2,m as CHIP_FAMILY_ESP32C3,b as CHIP_FAMILY_ESP32C5,y as CHIP_FAMILY_ESP32C6,S as CHIP_FAMILY_ESP32C61,B as CHIP_FAMILY_ESP32H2,v as CHIP_FAMILY_ESP32H21,R as CHIP_FAMILY_ESP32H4,U as CHIP_FAMILY_ESP32P4,g as CHIP_FAMILY_ESP32S2,p as CHIP_FAMILY_ESP32S3,T as CHIP_FAMILY_ESP32S31,_ as CHIP_FAMILY_ESP8266,Q as DEFAULT_TIMEOUT,at as ERASE_REGION_TIMEOUT_PER_MB,yi as ESPLoader,Z as ESP_CHANGE_BAUDRATE,G as ESP_CHECKSUM_MAGIC,$ as ESP_ERASE_FLASH,P as ESP_ERASE_REGION,D as ESP_FLASH_BEGIN,k as ESP_FLASH_DATA,j as ESP_FLASH_DEFL_BEGIN,J as ESP_FLASH_DEFL_DATA,q as ESP_FLASH_DEFL_END,C as ESP_FLASH_END,V as ESP_GET_SECURITY_INFO,F as ESP_MEM_BEGIN,z as ESP_MEM_DATA,W as ESP_MEM_END,X as ESP_RAM_BLOCK,M as ESP_READ_FLASH,A as ESP_READ_REG,N as ESP_SPI_ATTACH,H as ESP_SPI_FLASH_MD5,L as ESP_SPI_SET_PARAMS,O as ESP_SYNC,E as ESP_WRITE_REG,rt as FLASH_READ_TIMEOUT,et as MAX_TIMEOUT,st as MEM_END_ROM_TIMEOUT,K as ROM_INVALID_RECV_MSG,it as SYNC_TIMEOUT,Y as USB_RAM_BLOCK,Bi as connect,Ri as connectWithPort};
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=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=4096,h=115200,o=4097,l=1343410176,d=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),u=33382,c=50,_=12882,f=12883,g=12994,p=12995,w=12997,m=12998,b=207969,y=12914,S=12916,B=12917,R=12928,v=12849,U={5:{name:"ESP32-C3",family:p},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:g},13:{name:"ESP32-C6",family:m},16:{name:"ESP32-H2",family:y},18:{name:"ESP32-P4",family:R},20:{name:"ESP32-C61",family:b},23:{name:"ESP32-C5",family:w},25:{name:"ESP32-H21",family:B},28:{name:"ESP32-H4",family:S},32:{name:"ESP32-S31",family:v}},T={4293968129:{name:"ESP8266",family:u},15736195:{name:"ESP32",family:c},1990:{name:"ESP32-S2",family:_}},I=2,x=3,D=4,k=5,C=6,F=7,z=8,W=9,O=10,E=208,A=209,$=210,P=11,M=13,L=15,N=19,Z=20,H=239,V=16,G=17,j=18,J=5,q=2048,K=6144,Y=3e3,X=15e4,Q=3e5,tt=100,et=3e4,it=500,at=100,st=(t,e)=>{const i=Math.floor(t*(e/486));return i<Y?Y:i},rt=t=>{switch(t){case c:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case _: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 u:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case g:case p:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case b:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S: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 R:return{regBase:1342754816,baseFuse:l,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 nt extends Error{constructor(t){super(t),this.name="SlipReadError"}}const ht=async(t,i)=>{let a;if(t==S||t==B||t==v)return null;if(t==c)a=await import("./esp32-BRKoi17y.js");else if(t==_)a=await import("./esp32s2-iX3WoDbg.js");else if(t==f)a=await import("./esp32s3-DGwDVIgz.js");else if(t==u)a=await import("./esp8266-CUwxJpGa.js");else if(t==g)a=await import("./esp32c2-Btgr_lwh.js");else if(t==p)a=await import("./esp32c3-CHKfoI8W.js");else if(t==w)a=await import("./esp32c5-BDW4KtLo.js");else if(t==m)a=await import("./esp32c6-il8tTxAG.js");else if(t==b)a=await import("./esp32c61-thKzxBGf.js");else if(t==y)a=await import("./esp32h2-CxoUHv_P.js");else{if(t!=R)return null;a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")}return{...a,text:e(atob(a.text)),data:e(atob(a.data))}};function ot(t){let e=t.length;for(;--e>=0;)t[e]=0}const lt=256,dt=286,ut=30,ct=15,_t=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]),ft=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]),gt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),pt=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),wt=new Array(576);ot(wt);const mt=new Array(60);ot(mt);const bt=new Array(512);ot(bt);const yt=new Array(256);ot(yt);const St=new Array(29);ot(St);const Bt=new Array(ut);function Rt(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let vt,Ut,Tt;function It(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}ot(Bt);const xt=t=>t<256?bt[t]:bt[256+(t>>>7)],Dt=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},kt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Dt(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},Ct=(t,e,i)=>{kt(t,i[2*e],i[2*e+1])},Ft=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},zt=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=ct;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=Ft(a[e]++,e))}},Wt=t=>{let e;for(e=0;e<dt;e++)t.dyn_ltree[2*e]=0;for(e=0;e<ut;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},Ot=t=>{t.bi_valid>8?Dt(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Et=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},At=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&Et(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!Et(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},$t=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?Ct(t,s,e):(r=yt[s],Ct(t,r+lt+1,e),n=_t[r],0!==n&&(s-=St[r],kt(t,s,n)),a--,r=xt(a),Ct(t,r,i),n=ft[r],0!==n&&(a-=Bt[r],kt(t,a,n)))}while(h<t.sym_next);Ct(t,256,e)},Pt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=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!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)At(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],At(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,At(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=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,c,_,f,g=0;for(c=0;c<=ct;c++)t.bl_count[c]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],c=i[2*i[2*d+1]+1]+1,c>o&&(c=o,g++),i[2*d+1]=c,d>a||(t.bl_count[c]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(c+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(c=o-1;0===t.bl_count[c];)c--;t.bl_count[c]--,t.bl_count[c+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(c=o;0!==c;c--)for(d=t.bl_count[c];0!==d;)u=t.heap[--l],u>a||(i[2*u+1]!==c&&(t.opt_len+=(c-i[2*u+1])*i[2*u],i[2*u+1]=c),d--)}})(t,e),zt(i,l,t.bl_count)},Mt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},Lt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{Ct(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(Ct(t,s,t.bl_tree),h--),Ct(t,16,t.bl_tree),kt(t,h-3,2)):h<=10?(Ct(t,17,t.bl_tree),kt(t,h-3,3)):(Ct(t,18,t.bl_tree),kt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let Nt=!1;const Zt=(t,e,i,a)=>{kt(t,0+(a?1:0),3),Ot(t),Dt(t,i),Dt(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var Ht=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&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<lt;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),Pt(t,t.l_desc),Pt(t,t.d_desc),n=(t=>{let e;for(Mt(t,t.dyn_ltree,t.l_desc.max_code),Mt(t,t.dyn_dtree,t.d_desc.max_code),Pt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*pt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?Zt(t,e,i,a):4===t.strategy||r===s?(kt(t,2+(a?1:0),3),$t(t,wt,mt)):(kt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(kt(t,e-257,5),kt(t,i-1,5),kt(t,a-4,4),s=0;s<a;s++)kt(t,t.bl_tree[2*pt[s]+1],3);Lt(t,t.dyn_ltree,e-1),Lt(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),$t(t,t.dyn_ltree,t.dyn_dtree)),Wt(t),a&&Ot(t)},Vt={_tr_init:t=>{Nt||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(St[a]=i,t=0;t<1<<_t[a];t++)yt[i++]=a;for(yt[i-1]=a,s=0,a=0;a<16;a++)for(Bt[a]=s,t=0;t<1<<ft[a];t++)bt[s++]=a;for(s>>=7;a<ut;a++)for(Bt[a]=s<<7,t=0;t<1<<ft[a]-7;t++)bt[256+s++]=a;for(e=0;e<=ct;e++)r[e]=0;for(t=0;t<=143;)wt[2*t+1]=8,t++,r[8]++;for(;t<=255;)wt[2*t+1]=9,t++,r[9]++;for(;t<=279;)wt[2*t+1]=7,t++,r[7]++;for(;t<=287;)wt[2*t+1]=8,t++,r[8]++;for(zt(wt,287,r),t=0;t<ut;t++)mt[2*t+1]=5,mt[2*t]=Ft(t,5);vt=new Rt(wt,_t,257,dt,ct),Ut=new Rt(mt,ft,0,ut,ct),Tt=new Rt(new Array(0),gt,0,19,7)})(),Nt=!0),t.l_desc=new It(t.dyn_ltree,vt),t.d_desc=new It(t.dyn_dtree,Ut),t.bl_desc=new It(t.bl_tree,Tt),t.bi_buf=0,t.bi_valid=0,Wt(t)},_tr_stored_block:Zt,_tr_flush_block:Ht,_tr_tally:(t,e,i)=>(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++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(yt[i]+lt+1)]++,t.dyn_dtree[2*xt(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{kt(t,2,3),Ct(t,256,wt),(t=>{16===t.bi_valid?(Dt(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 Gt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const jt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var Jt=(t,e,i,a)=>{const s=jt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},qt={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"},Kt={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:Yt,_tr_stored_block:Xt,_tr_flush_block:Qt,_tr_tally:te,_tr_align:ee}=Vt,{Z_NO_FLUSH:ie,Z_PARTIAL_FLUSH:ae,Z_FULL_FLUSH:se,Z_FINISH:re,Z_BLOCK:ne,Z_OK:he,Z_STREAM_END:oe,Z_STREAM_ERROR:le,Z_DATA_ERROR:de,Z_BUF_ERROR:ue,Z_DEFAULT_COMPRESSION:ce,Z_FILTERED:_e,Z_HUFFMAN_ONLY:fe,Z_RLE:ge,Z_FIXED:pe,Z_DEFAULT_STRATEGY:we,Z_UNKNOWN:me,Z_DEFLATED:be}=Kt,ye=258,Se=262,Be=42,Re=113,ve=666,Ue=(t,e)=>(t.msg=qt[e],e),Te=t=>2*t-(t>4?9:0),Ie=t=>{let e=t.length;for(;--e>=0;)t[e]=0},xe=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let De=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const ke=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},Ce=(t,e)=>{Qt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,ke(t.strm)},Fe=(t,e)=>{t.pending_buf[t.pending++]=e},ze=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},We=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=Gt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=Jt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},Oe=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Se?t.strstart-(t.w_size-Se):0,l=t.window,d=t.w_mask,u=t.prev,c=t.strstart+ye;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<c);if(a=ye-(c-r),r=c-ye,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=u[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},Ee=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Se)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),xe(t),a+=e),0===t.strm.avail_in)break;if(i=We(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=De(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=De(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Se&&0!==t.strm.avail_in)},Ae=(t,e)=>{let i,a,s,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(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==re||e===ie||i!==a+t.strm.avail_in))break;n=e===re&&i===a+t.strm.avail_in?1:0,Xt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,ke(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(We(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}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!==ie&&e!==re&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&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++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(We(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===re)&&e!==ie&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===re&&0===t.strm.avail_in&&i===a?1:0,Xt(t,t.block_start,i,n),t.block_start+=i,ke(t.strm)),n?3:1)},$e=(t,e)=>{let i,a;for(;;){if(t.lookahead<Se){if(Ee(t),t.lookahead<Se&&e===ie)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Se&&(t.match_length=Oe(t,i)),t.match_length>=3)if(a=te(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=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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=De(t,t.ins_h,t.window[t.strstart+1]);else a=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2},Pe=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Se){if(Ee(t),t.lookahead<Se&&e===ie)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Se&&(t.match_length=Oe(t,i),t.match_length<=5&&(t.strategy===_e||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=te(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=De(t,t.ins_h,t.window[t.strstart+3-1]),i=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++,a&&(Ce(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=te(t,0,t.window[t.strstart-1]),a&&Ce(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&&(a=te(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2};function Me(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const Le=[new Me(0,0,0,0,Ae),new Me(4,4,8,4,$e),new Me(4,5,16,8,$e),new Me(4,6,32,32,$e),new Me(4,4,16,16,Pe),new Me(8,16,32,32,Pe),new Me(8,16,128,128,Pe),new Me(8,32,128,256,Pe),new Me(32,128,258,1024,Pe),new Me(32,258,258,4096,Pe)];function Ne(){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=be,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),Ie(this.dyn_ltree),Ie(this.dyn_dtree),Ie(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),Ie(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Ie(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 Ze=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Be&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Re&&e.status!==ve?1:0},He=t=>{if(Ze(t))return Ue(t,le);t.total_in=t.total_out=0,t.data_type=me;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?Be:Re,t.adler=2===e.wrap?0:1,e.last_flush=-2,Yt(e),he},Ve=t=>{const e=He(t);var i;return e===he&&((i=t.state).window_size=2*i.w_size,Ie(i.head),i.max_lazy_match=Le[i.level].max_lazy,i.good_match=Le[i.level].good_length,i.nice_match=Le[i.level].nice_length,i.max_chain_length=Le[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},Ge=(t,e,i,a,s,r)=>{if(!t)return le;let n=1;if(e===ce&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==be||a<8||a>15||e<0||e>9||r<0||r>pe||8===a&&1!==n)return Ue(t,le);8===a&&(a=9);const h=new Ne;return t.state=h,h.strm=t,h.status=Be,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+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<<s+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=i,Ve(t)};var je={deflateInit:(t,e)=>Ge(t,e,be,15,8,we),deflateInit2:Ge,deflateReset:Ve,deflateResetKeep:He,deflateSetHeader:(t,e)=>Ze(t)||2!==t.state.wrap?le:(t.state.gzhead=e,he),deflate:(t,e)=>{if(Ze(t)||e>ne||e<0)return t?Ue(t,le):le;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===ve&&e!==re)return Ue(t,0===t.avail_out?ue:le);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(ke(t),0===t.avail_out)return i.last_flush=-1,he}else if(0===t.avail_in&&Te(e)<=Te(a)&&e!==re)return Ue(t,ue);if(i.status===ve&&0!==t.avail_in)return Ue(t,ue);if(i.status===Be&&0===i.wrap&&(i.status=Re),i.status===Be){let e=be+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=fe||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ze(i,e),0!==i.strstart&&(ze(i,t.adler>>>16),ze(i,65535&t.adler)),t.adler=1,i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he}if(57===i.status)if(t.adler=0,Fe(i,31),Fe(i,139),Fe(i,8),i.gzhead)Fe(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Fe(i,255&i.gzhead.time),Fe(i,i.gzhead.time>>8&255),Fe(i,i.gzhead.time>>16&255),Fe(i,i.gzhead.time>>24&255),Fe(i,9===i.level?2:i.strategy>=fe||i.level<2?4:0),Fe(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Fe(i,255&i.gzhead.extra.length),Fe(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Jt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,0),Fe(i,9===i.level?2:i.strategy>=fe||i.level<2?4:0),Fe(i,3),i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,ke(t),0!==i.pending)return i.last_flush=-1,he;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),ke(t),0!==i.pending)return i.last_flush=-1,he;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Fe(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a)),ke(t),0!==i.pending)return i.last_flush=-1,he;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Fe(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Jt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(ke(t),0!==i.pending))return i.last_flush=-1,he;Fe(i,255&t.adler),Fe(i,t.adler>>8&255),t.adler=0}if(i.status=Re,ke(t),0!==i.pending)return i.last_flush=-1,he}if(0!==t.avail_in||0!==i.lookahead||e!==ie&&i.status!==ve){let a=0===i.level?Ae(i,e):i.strategy===fe?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(Ee(t),0===t.lookahead)){if(e===ie)return 1;break}if(t.match_length=0,i=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===ge?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=ye){if(Ee(t),t.lookahead<=ye&&e===ie)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+ye;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=ye-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=te(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=te(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(Ce(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===re?(Ce(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Ce(t,!1),0===t.strm.avail_out)?1:2})(i,e):Le[i.level].func(i,e);if(3!==a&&4!==a||(i.status=ve),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),he;if(2===a&&(e===ae?ee(i):e!==ne&&(Xt(i,0,0,!1),e===se&&(Ie(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ke(t),0===t.avail_out))return i.last_flush=-1,he}return e!==re?he:i.wrap<=0?oe:(2===i.wrap?(Fe(i,255&t.adler),Fe(i,t.adler>>8&255),Fe(i,t.adler>>16&255),Fe(i,t.adler>>24&255),Fe(i,255&t.total_in),Fe(i,t.total_in>>8&255),Fe(i,t.total_in>>16&255),Fe(i,t.total_in>>24&255)):(ze(i,t.adler>>>16),ze(i,65535&t.adler)),ke(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?he:oe)},deflateEnd:t=>{if(Ze(t))return le;const e=t.state.status;return t.state=null,e===Re?Ue(t,de):he},deflateSetDictionary:(t,e)=>{let i=e.length;if(Ze(t))return le;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==Be||a.lookahead)return le;if(1===s&&(t.adler=Gt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(Ie(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,Ee(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=De(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,Ee(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,he},deflateInfo:"pako deflate (from Nodeca project)"};const Je=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var qe=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)Je(i,e)&&(t[e]=i[e])}}return t},Ke=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Ye=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Ye=!1}const Xe=new Uint8Array(256);for(let t=0;t<256;t++)Xe[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Xe[254]=Xe[254]=1;var Qe=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ti=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 ei=Object.prototype.toString,{Z_NO_FLUSH:ii,Z_SYNC_FLUSH:ai,Z_FULL_FLUSH:si,Z_FINISH:ri,Z_OK:ni,Z_STREAM_END:hi,Z_DEFAULT_COMPRESSION:oi,Z_DEFAULT_STRATEGY:li,Z_DEFLATED:di}=Kt;function ui(t){this.options=qe({level:oi,method:di,chunkSize:16384,windowBits:15,memLevel:8,strategy:li},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 ti,this.strm.avail_out=0;let i=je.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ni)throw new Error(qt[i]);if(e.header&&je.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Qe(e.dictionary):"[object ArrayBuffer]"===ei.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=je.deflateSetDictionary(this.strm,t),i!==ni)throw new Error(qt[i]);this._dict_set=!0}}ui.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ri:ii,"string"==typeof t?i.input=Qe(t):"[object ArrayBuffer]"===ei.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===ai||r===si)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=je.deflate(i,r),s===hi)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=je.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===ni;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},ui.prototype.onData=function(t){this.chunks.push(t)},ui.prototype.onEnd=function(t){t===ni&&(this.result=Ke(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var ci={deflate:function(t,e){const i=new ui(e);if(i.push(t,!0),i.err)throw i.msg||qt[i.err];return i.result}};const{deflate:_i}=ci;var fi=_i;const gi={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}},pi=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in gi))throw"Unhandled character '"+t+"' in pack format";const i=gi[t].bytes,r=new DataView(new ArrayBuffer(i));gi[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},wi=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in gi))throw"Unhandled character '"+t+"' in unpack format";const r=gi[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=gi[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class mi extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,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=h,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.__abandonCurrentOperation=!1,this.__adaptiveBlockMultiplier=1,this.__adaptiveMaxInFlightMultiplier=1,this.__consecutiveSuccessfulChunks=0,this.__lastAdaptiveAdjustment=0,this.__isCDCDevice=!1,this.state_DTR=!1,this.state_RTS=!1,this.__writeChain=Promise.resolve()}get chipFamily(){return this._parent?this._parent.chipFamily:this.__chipFamily}set chipFamily(t){this._parent?this._parent.chipFamily=t:this.__chipFamily=t}get chipName(){return this._parent?this._parent.chipName:this.__chipName}set chipName(t){this._parent?this._parent.chipName=t:this.__chipName=t}get chipRevision(){return this._parent?this._parent.chipRevision:this.__chipRevision}set chipRevision(t){this._parent?this._parent.chipRevision=t:this.__chipRevision=t}get chipVariant(){return this._parent?this._parent.chipVariant:this.__chipVariant}set chipVariant(t){this._parent?this._parent.chipVariant=t:this.__chipVariant=t}get _inputBuffer(){if(this._parent)return this._parent._inputBuffer;if(void 0===this.__inputBuffer)throw new Error("_inputBuffer accessed before initialization");return this.__inputBuffer}get _inputBufferReadIndex(){return this._parent?this._parent._inputBufferReadIndex:this.__inputBufferReadIndex||0}set _inputBufferReadIndex(t){this._parent?this._parent._inputBufferReadIndex=t:this.__inputBufferReadIndex=t}get _inputBufferAvailable(){return this._inputBuffer.length-this._inputBufferReadIndex}_readByte(){if(!(this._inputBufferReadIndex>=this._inputBuffer.length))return this._inputBuffer[this._inputBufferReadIndex++]}_clearInputBuffer(){this._inputBuffer.length=0,this._inputBufferReadIndex=0}_compactInputBuffer(){this._inputBufferReadIndex>1e3&&this._inputBufferReadIndex>this._inputBuffer.length/2&&(this._inputBuffer.splice(0,this._inputBufferReadIndex),this._inputBufferReadIndex=0)}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}get _abandonCurrentOperation(){return this._parent?this._parent._abandonCurrentOperation:this.__abandonCurrentOperation}set _abandonCurrentOperation(t){this._parent?this._parent._abandonCurrentOperation=t:this.__abandonCurrentOperation=t}get _adaptiveBlockMultiplier(){return this._parent?this._parent._adaptiveBlockMultiplier:this.__adaptiveBlockMultiplier}set _adaptiveBlockMultiplier(t){this._parent?this._parent._adaptiveBlockMultiplier=t:this.__adaptiveBlockMultiplier=t}get _adaptiveMaxInFlightMultiplier(){return this._parent?this._parent._adaptiveMaxInFlightMultiplier:this.__adaptiveMaxInFlightMultiplier}set _adaptiveMaxInFlightMultiplier(t){this._parent?this._parent._adaptiveMaxInFlightMultiplier=t:this.__adaptiveMaxInFlightMultiplier=t}get _consecutiveSuccessfulChunks(){return this._parent?this._parent._consecutiveSuccessfulChunks:this.__consecutiveSuccessfulChunks}set _consecutiveSuccessfulChunks(t){this._parent?this._parent._consecutiveSuccessfulChunks=t:this.__consecutiveSuccessfulChunks=t}get _lastAdaptiveAdjustment(){return this._parent?this._parent._lastAdaptiveAdjustment:this.__lastAdaptiveAdjustment}set _lastAdaptiveAdjustment(t){this._parent?this._parent._lastAdaptiveAdjustment=t:this.__lastAdaptiveAdjustment=t}get _isCDCDevice(){return this._parent?this._parent._isCDCDevice:this.__isCDCDevice}set _isCDCDevice(t){this._parent?this._parent._isCDCDevice=t:this.__isCDCDevice=t}detectUSBSerialChip(t,e){const i={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 i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__inputBufferReadIndex=0,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),(12346===t.usbVendorId||6790===t.usbVendorId&&21971===t.usbProductId)&&(this._isCDCDevice=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=rt(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=U[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===R&&(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}`),await this.drainInputBuffer(200),this._clearInputBuffer(),await s(tt);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=T[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===R&&(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: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==R)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:wi("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?wi("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?wi("<I",t.slice(16,20))[0]:0}}async getMacAddress(){if(!this._initializationSucceeded)throw new Error("getMacAddress() requires initialize() to have completed successfully");return this.macAddr().map(t=>t.toString(16).padStart(2,"0").toUpperCase()).join(":")}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:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}finally{this._isReconfiguring=!1}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 setDTRandRTS(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!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),await this.sleep(200)}async hardResetClassic(){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),await this.sleep(200)}async hardResetUnixTight(){await this.setDTRandRTS(!0,!0),await this.setDTRandRTS(!1,!1),await this.setDTRandRTS(!1,!0),await this.sleep(100),await this.setDTRandRTS(!0,!1),await this.sleep(50),await this.setDTRandRTS(!1,!1),await this.setDTR(!1),await this.sleep(200)}async setRTSWebUSB(t){this.state_RTS=t,await this.port.setSignals({requestToSend:t,dataTerminalReady:this.state_DTR})}async setDTRWebUSB(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t,requestToSend:this.state_RTS})}async setDTRandRTSWebUSB(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerialWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetUSBJTAGSerialInvertedDTRWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetClassicWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetUnixTightWebUSB(){await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRandRTSWebUSB(!0,!0),await this.setDTRandRTSWebUSB(!1,!0),await this.sleep(100),await this.setDTRandRTSWebUSB(!0,!1),await this.sleep(50),await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetClassicLongDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(500),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200),await this.setDTRWebUSB(!1),await this.sleep(500)}async hardResetClassicShortDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(25),await this.setDTRWebUSB(!1),await this.sleep(100)}async hardResetInvertedWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedDTRWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedRTSWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}isWebUSB(){return!0===this.port.isWebUSB}async connectWithResetStrategies(){const t=this.port.getInfo(),e=t.usbProductId===o,i=12346===t.usbVendorId,a=[],r=this,n=!e&&!i;if(this.isWebUSB()){const s=4292===t.usbVendorId,h=6790===t.usbVendorId,o=12346===t.usbVendorId&&2===t.usbProductId;(e||i)&&(o?(a.push({name:"USB-JTAG/Serial (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"UnixTight (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetClassicWebUSB()})):(a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"USB-JTAG/Serial (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"Inverted DTR Classic (WebUSB)",fn:async()=>await r.hardResetInvertedDTRWebUSB()}))),n&&(h?(a.push({name:"UnixTight (WebUSB) - CH34x",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CH34x",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):s?(a.push({name:"UnixTight (WebUSB) - CP2102",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CP2102",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):(a.push({name:"UnixTight (WebUSB)",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"Inverted Both (WebUSB)",fn:async function(){return await r.hardResetInvertedWebUSB()}}),a.push({name:"Inverted RTS (WebUSB)",fn:async function(){return await r.hardResetInvertedRTSWebUSB()}}),a.push({name:"Inverted DTR (WebUSB)",fn:async function(){return await r.hardResetInvertedDTRWebUSB()}}))),s||o||(6790!==t.usbVendorId&&a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"UnixTight (WebUSB)",fn:async function(){return await r.hardResetUnixTightWebUSB()}}),a.push({name:"Classic Long Delay (WebUSB)",fn:async function(){return await r.hardResetClassicLongDelayWebUSB()}}),a.push({name:"Classic Short Delay (WebUSB)",fn:async function(){return await r.hardResetClassicShortDelayWebUSB()}}),e||i||a.push({name:"USB-JTAG/Serial fallback (WebUSB)",fn:async function(){return await r.hardResetUSBJTAGSerialWebUSB()}}))}else(e||i)&&a.push({name:"USB-JTAG/Serial",fn:async function(){return await r.hardResetUSBJTAGSerial()}}),a.push({name:"UnixTight",fn:async function(){return await r.hardResetUnixTight()}}),e||i||a.push({name:"USB-JTAG/Serial (fallback)",fn:async function(){return await r.hardResetUSBJTAGSerial()}});let h=null;for(const t of a)try{if(!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}if(this._abandonCurrentOperation=!1,await t.fn(),n){if(await this.syncWithTimeout(2e3))return void this.logger.log(`Connected USB Serial successfully with ${t.name} reset.`);throw new Error("Sync timeout or abandoned")}{const e=this.sync(),i=new Promise((t,e)=>setTimeout(()=>e(new Error("Sync timeout")),1e3));try{return await Promise.race([e,i]),void this.logger.log(`Connected CDC/JTAG successfully with ${t.name} reset.`)}catch(t){throw new Error("Sync timeout or abandoned")}}}catch(e){if(h=e,this.logger.log(`${t.name} reset failed: ${e.message}`),this._abandonCurrentOperation=!0,await s(100),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._clearInputBuffer(),await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw this._abandonCurrentOperation=!1,new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==h?void 0:h.message}`)}async watchdogReset(){let t,e,i,a;if(this.logger.log("Hard resetting with watchdog timer..."),this.chipFamily===_)t=1061191852,e=1061191828,i=1061191832,a=1356348065;else{if(this.chipFamily!==f)throw new Error(`watchdogReset() is only supported for ESP32-S2 and ESP32-S3, not ${this.chipFamily}`);t=1610645680,e=1610645656,i=1610645660,a=1356348065}await this.writeRegister(t,a,void 0,0),await this.writeRegister(i,2e3,void 0,0);await this.writeRegister(e,-805306110,void 0,0),await this.writeRegister(t,0,void 0,0),await this.sleep(500)}async hardReset(t=!1){t?this.port.getInfo().usbProductId===o?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):this.isWebUSB()?(await this.hardResetClassicWebUSB(),this.logger.log("Classic reset (WebUSB/Android).")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):this.port.getInfo().usbProductId!==o||this.chipFamily!==_&&this.chipFamily!==f?this.isWebUSB()?(await this.setRTSWebUSB(!0),await this.sleep(200),await this.setRTSWebUSB(!1),await this.sleep(200),this.logger.log("Hard reset (WebUSB).")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")):(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG).")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==u){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>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]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==c)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,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 "+a(t,8));const e=pi("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,Q),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==u?o=2:[c,_,f,g,p,w,m,b,y,S,B,R,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)?o=h.length:(o=2,this.logger.debug(`Unknown chip family, defaulting to 2-byte status (opcode: ${a(t)}, data.length: ${h.length})`)),h.length<o)throw new Error("Didn't get enough status bytes");const l=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",l),this.logger.debug("value",r),this.logger.debug("data",h)),1==l[0])throw 5==l[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(l[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...pi("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;if(this._isCDCDevice){const n=Date.now();for(;;){if(this._abandonCurrentOperation)throw new nt("Operation abandoned (reset strategy timeout)");if(Date.now()-n>t){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBufferAvailable)for(;this._inputBufferAvailable>0;){if(Date.now()-n>t){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}const s=this._readByte();if(null===e){if(192!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid head of packet ("+a(s)+")");e=[]}else if(r)if(r=!1,220==s)e.push(192);else{if(221!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid SLIP escape (0xdb, "+a(s)+")");e.push(219)}else if(219==s)r=!0;else{if(192==s)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(s)}}else await s(1)}}else{let n=[];for(;;){if(this._abandonCurrentOperation)throw new nt("Operation abandoned (reset strategy timeout)");const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBufferAvailable>0){n.push(this._readByte());break}await s(1)}if(0==n.length){throw new nt("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid head of packet ("+a(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(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new nt("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(t)}}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=wi("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.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 ${a(t)}`)}throw new Error("Response doesn't match request")}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){try{const e=pi("<II",t,this.IS_STUB?h: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 s(tt),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;this._isReconfiguring=!0;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this.isWebUSB()){const e=this.port.getInfo(),i=6790===e.usbVendorId&&21971===e.usbProductId;if(!i&&"function"==typeof this.port.setBaudRate)return await this.port.setBaudRate(t),void await s(100)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}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}`)}finally{this._isReconfiguring=!1}}async syncWithTimeout(t){const e=Date.now();for(let i=0;i<5;i++){if(Date.now()-e>t)return!1;if(this._abandonCurrentOperation)return!1;this._clearInputBuffer();try{if(await this._sync())return await s(tt),!0}catch(t){if(this._abandonCurrentOperation)return!1}await s(tt)}return!1}async sync(){for(let t=0;t<5;t++){this._clearInputBuffer();if(await this._sync())return await s(tt),!0;await s(tt)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,d);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,tt);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch(e){this.debug&&this.logger.debug(`Sync attempt ${t+1} failed: ${e}`)}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=Y;s?(n=fi(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,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,u=0,c=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-c>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-c>=f?l=Array.from(new Uint8Array(n,c,f)):(l=Array.from(new Uint8Array(n,c,g-c)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=s?Math.round(l.length*r/h):l.length,c+=f,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[c,_,f,g,p,w,m,b,y,S,B,R,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily!=u||this.IS_STUB?t:this.getEraseSize(e,t);const h=this.IS_STUB?Y:st(et,t),o=Date.now();let l=pi("<IIII",s,n,r,e);return this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v||(l=l.concat(pi("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,l,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,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=st(et,n)):(n=r*a,h=Y);const o=pi("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=pi("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=pi("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return rt(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=pi("<IIII",t,e,i,a);s>0&&(r=r.concat(pi("<IIII",rt(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=rt(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>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,c=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),u>0&&(f|=134217728),await this.setDataLengths(s,u,i),await this.writeRegister(h,f),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 i=wi("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,c),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=n,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,pi("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,pi("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?Y:500,i=pi("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await ht(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 i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new bi(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _reader(){return this._parent?this._parent._reader:this.__reader}set _reader(t){this._parent?this._parent._reader=t:this.__reader=t}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}get _currentBaudRate(){return this._parent?this._parent._currentBaudRate:this.__currentBaudRate}set _currentBaudRate(t){this._parent?this._parent._currentBaudRate=t:this.__currentBaudRate=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(this.logger.debug("Previous write failed, attempting recovery for current write"),!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.debug(`Failed to get writer in recovery: ${t}`),new Error("Cannot acquire writer lock")}await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch{}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable){try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{if(!this._reader)return void t(void 0);const e=setTimeout(()=>{this.logger.debug("Disconnect timeout - forcing resolution"),t(void 0)},1e3);this.addEventListener("disconnect",()=>{clearTimeout(e),t(void 0)},{once:!0});try{this._reader.cancel()}catch(i){this.logger.debug(`Reader cancel error: ${i}`),clearTimeout(e),t(void 0)}}),this.connected=!1;try{await this.port.close(),this.logger.debug("Port closed successfully")}catch(t){this.logger.debug(`Port close error: ${t}`)}}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,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!==h&&(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=!0,this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async reconnectToBootloader(){if(this._parent)await this._parent.reconnectToBootloader();else try{this.logger.log("Reconnecting to bootloader mode..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1,this.__chipFamily=void 0,this.chipName="Unknown Chip",this.IS_STUB=!1,this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await s(100),await this.connectWithResetStrategies(),await this.detectChip(),this.logger.log(`Reconnected to bootloader: ${this.chipName}`)}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBufferAvailable>0){void 0!==this._readByte()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0)}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),await s(tt),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");let r;await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`),this.isWebUSB()&&(this._isCDCDevice?(this._adaptiveBlockMultiplier=8,this._adaptiveMaxInFlightMultiplier=8,this._consecutiveSuccessfulChunks=0,this.logger.debug(`CDC device - Initialized: blockMultiplier=${this._adaptiveBlockMultiplier}, maxInFlightMultiplier=${this._adaptiveMaxInFlightMultiplier}`)):(this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0,this.logger.debug("Non-CDC device - Fixed values: blockSize=31, maxInFlight=31"))),r=this.isWebUSB()?16384:262144;let n=new Uint8Array(0),h=e,o=i;for(;o>0;){const e=Math.min(r,o);let l=!1,d=0;const u=5;let c=!1;for(;!l&&d<=u;){let i=new Uint8Array(0),a=0;try{let r,o;if(0===d&&this.logger.debug(`Reading chunk at 0x${h.toString(16)}, size: 0x${e.toString(16)}`),this.isWebUSB()){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2);r=e*this._adaptiveBlockMultiplier,o=e*this._adaptiveMaxInFlightMultiplier}else{const t=63;r=65*t,o=130*t}const u=pi("<IIII",h,e,r,o),[c]=await this.checkCommand(210,u);if(0!=c)throw new Error("Failed to read memory: "+c);for(;i.length<e;){let r;try{r=await this.readPacket(100)}catch(t){if(t instanceof nt){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(r&&r.length>0){const s=new Uint8Array(r),n=new Uint8Array(i.length+s.length);n.set(i),n.set(s,i.length),i=n;if(i.length>=e||i.length>=a+o){const e=pi("<I",i.length),s=t(e);await this.writeToStream(s),a=i.length}}}const _=new Uint8Array(n.length+i.length);if(_.set(n),_.set(i,n.length),n=_,l=!0,this.isWebUSB()&&this._isCDCDevice&&0===d&&(this._consecutiveSuccessfulChunks++,this._consecutiveSuccessfulChunks>=2)){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=8,a=8;let s=!1;if(this._adaptiveBlockMultiplier<i?(this._adaptiveBlockMultiplier=Math.min(2*this._adaptiveBlockMultiplier,i),s=!0):this._adaptiveMaxInFlightMultiplier<a&&(this._adaptiveMaxInFlightMultiplier=Math.min(2*this._adaptiveMaxInFlightMultiplier,a),s=!0),s){const t=e*this._adaptiveBlockMultiplier,i=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Speed increased: blockSize=${t}, maxInFlight=${i}`),this._lastAdaptiveAdjustment=Date.now()}this._consecutiveSuccessfulChunks=0}}catch(t){if(d++,this.isWebUSB()&&this._isCDCDevice&&1===d)if(this._adaptiveBlockMultiplier>1||this._adaptiveMaxInFlightMultiplier>1){this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0;const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=e*this._adaptiveBlockMultiplier,a=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Error at higher speed - reduced to minimum: blockSize=${i}, maxInFlight=${a}`)}else this.logger.debug("Error at minimum speed (blockSize=31, maxInFlight=31) - not a speed issue");if(!(t instanceof nt))throw t;if(d<=u){this.logger.log(`${t.message} at 0x${h.toString(16)}. Draining buffer and retrying (attempt ${d}/${u})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(tt)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(c)throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${u} retries and recovery attempt`);c=!0,this.logger.log(`All retries exhausted at 0x${h.toString(16)}. Attempting recovery (close and reopen port)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),d=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${u} retries and recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),n.length,i),h+=e,o-=e,this.logger.debug(`Total progress: 0x${n.length.toString(16)} from 0x${i.toString(16)} bytes`)}return n}}class bi extends mi{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await ht(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(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 "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,X)}async eraseRegion(t,e){if(t<0)throw new Error(`Invalid offset: ${t} (must be non-negative)`);if(e<0)throw new Error(`Invalid size: ${e} (must be non-negative)`);if(0===e)return void this.logger.log("eraseRegion: size is 0, skipping erase");if(t%n!==0)throw new Error(`Offset ${t} (0x${t.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);if(e%n!==0)throw new Error(`Size ${e} (0x${e.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);const i=4294967295;if(t>i)throw new Error(`Offset ${t} exceeds maximum value 4294967295`);if(e>i)throw new Error(`Size ${e} exceeds maximum value 4294967295`);if(t+e>i)throw new Error(`Region end (offset + size = ${t+e}) exceeds maximum addressable range 4294967295`);const a=st(et,e),s=pi("<II",t,e);await this.checkCommand(209,s,0,a)}}const yi=async t=>{let e;const i=globalThis.requestSerialPort;if("function"==typeof i)e=await i();else{if(!navigator.serial)throw new Error("Web Serial API is not supported in this browser. Please use Chrome, Edge, or Opera on desktop, or Chrome on Android. Note: The page must be served over HTTPS or localhost.");e=await navigator.serial.requestPort()}return e.readable&&e.writable||await e.open({baudRate:h}),new mi(e,t)},Si=async(t,e)=>{if(!t)throw new Error("Port is required");return t.readable&&t.writable||await t.open({baudRate:h}),new mi(t,e)};export{X as CHIP_ERASE_TIMEOUT,c as CHIP_FAMILY_ESP32,g as CHIP_FAMILY_ESP32C2,p as CHIP_FAMILY_ESP32C3,w as CHIP_FAMILY_ESP32C5,m as CHIP_FAMILY_ESP32C6,b as CHIP_FAMILY_ESP32C61,y as CHIP_FAMILY_ESP32H2,B as CHIP_FAMILY_ESP32H21,S as CHIP_FAMILY_ESP32H4,R as CHIP_FAMILY_ESP32P4,_ as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,u as CHIP_FAMILY_ESP8266,Y as DEFAULT_TIMEOUT,et as ERASE_REGION_TIMEOUT_PER_MB,mi as ESPLoader,L as ESP_CHANGE_BAUDRATE,H as ESP_CHECKSUM_MAGIC,E as ESP_ERASE_FLASH,A as ESP_ERASE_REGION,I as ESP_FLASH_BEGIN,x as ESP_FLASH_DATA,V as ESP_FLASH_DEFL_BEGIN,G as ESP_FLASH_DEFL_DATA,j as ESP_FLASH_DEFL_END,D as ESP_FLASH_END,Z as ESP_GET_SECURITY_INFO,k as ESP_MEM_BEGIN,F as ESP_MEM_DATA,C as ESP_MEM_END,K as ESP_RAM_BLOCK,$ as ESP_READ_FLASH,O as ESP_READ_REG,M as ESP_SPI_ATTACH,N as ESP_SPI_FLASH_MD5,P as ESP_SPI_SET_PARAMS,z as ESP_SYNC,W as ESP_WRITE_REG,at as FLASH_READ_TIMEOUT,Q as MAX_TIMEOUT,it as MEM_END_ROM_TIMEOUT,J as ROM_INVALID_RECV_MSG,tt as SYNC_TIMEOUT,q as USB_RAM_BLOCK,yi as connect,Si as connectWithPort};
1
+ const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=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=4096,h=115200,o=4097,l=1061191976,d=1610645804,c=1343410176,u=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),_=33382,f=50,g=12882,p=12883,w=12994,m=12995,b=12997,y=12998,S=207969,B=12914,R=12916,v=12917,U=12928,T=12849,I={5:{name:"ESP32-C3",family:m},9:{name:"ESP32-S3",family:p},12:{name:"ESP32-C2",family:w},13:{name:"ESP32-C6",family:y},16:{name:"ESP32-H2",family:B},18:{name:"ESP32-P4",family:U},20:{name:"ESP32-C61",family:S},23:{name:"ESP32-C5",family:b},25:{name:"ESP32-H21",family:v},28:{name:"ESP32-H4",family:R},32:{name:"ESP32-S31",family:T}},x={4293968129:{name:"ESP8266",family:_},15736195:{name:"ESP32",family:f},1990:{name:"ESP32-S2",family:g}},D=2,k=3,C=4,F=5,W=6,z=7,O=8,E=9,A=10,$=208,P=209,M=210,L=11,N=13,Z=15,H=19,V=20,G=239,j=16,J=17,q=18,K=5,Y=2048,X=6144,Q=3e3,tt=15e4,et=3e5,it=100,at=3e4,st=500,rt=100,nt=(t,e)=>{const i=Math.floor(t*(e/486));return i<Q?Q:i},ht=t=>{switch(t){case f:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case g:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case p:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case _:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case w:case m:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case b:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case y:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case B:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case R:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case v:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case U:return{regBase:1342754816,baseFuse:c,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case T: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 ot extends Error{constructor(t){super(t),this.name="SlipReadError"}}const lt=async(t,i)=>{let a;if(t==R||t==v||t==T)return null;if(t==f)a=await import("./esp32-BRKoi17y.js");else if(t==g)a=await import("./esp32s2-iX3WoDbg.js");else if(t==p)a=await import("./esp32s3-DGwDVIgz.js");else if(t==_)a=await import("./esp8266-CUwxJpGa.js");else if(t==w)a=await import("./esp32c2-Btgr_lwh.js");else if(t==m)a=await import("./esp32c3-CHKfoI8W.js");else if(t==b)a=await import("./esp32c5-BDW4KtLo.js");else if(t==y)a=await import("./esp32c6-il8tTxAG.js");else if(t==S)a=await import("./esp32c61-thKzxBGf.js");else if(t==B)a=await import("./esp32h2-CxoUHv_P.js");else{if(t!=U)return null;a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")}return{...a,text:e(atob(a.text)),data:e(atob(a.data))}};function dt(t){let e=t.length;for(;--e>=0;)t[e]=0}const ct=256,ut=286,_t=30,ft=15,gt=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]),pt=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]),wt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),mt=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),bt=new Array(576);dt(bt);const yt=new Array(60);dt(yt);const St=new Array(512);dt(St);const Bt=new Array(256);dt(Bt);const Rt=new Array(29);dt(Rt);const vt=new Array(_t);function Ut(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let Tt,It,xt;function Dt(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}dt(vt);const kt=t=>t<256?St[t]:St[256+(t>>>7)],Ct=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},Ft=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Ct(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},Wt=(t,e,i)=>{Ft(t,i[2*e],i[2*e+1])},zt=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},Ot=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=ft;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=zt(a[e]++,e))}},Et=t=>{let e;for(e=0;e<ut;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},At=t=>{t.bi_valid>8?Ct(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},$t=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},Pt=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&$t(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!$t(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},Mt=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?Wt(t,s,e):(r=Bt[s],Wt(t,r+ct+1,e),n=gt[r],0!==n&&(s-=Rt[r],Ft(t,s,n)),a--,r=kt(a),Wt(t,r,i),n=pt[r],0!==n&&(a-=vt[r],Ft(t,a,n)))}while(h<t.sym_next);Wt(t,256,e)},Lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=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!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)Pt(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],Pt(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,Pt(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=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<=ft;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));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>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),Ot(i,l,t.bl_count)},Nt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},Zt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{Wt(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(Wt(t,s,t.bl_tree),h--),Wt(t,16,t.bl_tree),Ft(t,h-3,2)):h<=10?(Wt(t,17,t.bl_tree),Ft(t,h-3,3)):(Wt(t,18,t.bl_tree),Ft(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let Ht=!1;const Vt=(t,e,i,a)=>{Ft(t,0+(a?1:0),3),At(t),Ct(t,i),Ct(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var Gt=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&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<ct;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(Nt(t,t.dyn_ltree,t.l_desc.max_code),Nt(t,t.dyn_dtree,t.d_desc.max_code),Lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*mt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?Vt(t,e,i,a):4===t.strategy||r===s?(Ft(t,2+(a?1:0),3),Mt(t,bt,yt)):(Ft(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(Ft(t,e-257,5),Ft(t,i-1,5),Ft(t,a-4,4),s=0;s<a;s++)Ft(t,t.bl_tree[2*mt[s]+1],3);Zt(t,t.dyn_ltree,e-1),Zt(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),Mt(t,t.dyn_ltree,t.dyn_dtree)),Et(t),a&&At(t)},jt={_tr_init:t=>{Ht||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(Rt[a]=i,t=0;t<1<<gt[a];t++)Bt[i++]=a;for(Bt[i-1]=a,s=0,a=0;a<16;a++)for(vt[a]=s,t=0;t<1<<pt[a];t++)St[s++]=a;for(s>>=7;a<_t;a++)for(vt[a]=s<<7,t=0;t<1<<pt[a]-7;t++)St[256+s++]=a;for(e=0;e<=ft;e++)r[e]=0;for(t=0;t<=143;)bt[2*t+1]=8,t++,r[8]++;for(;t<=255;)bt[2*t+1]=9,t++,r[9]++;for(;t<=279;)bt[2*t+1]=7,t++,r[7]++;for(;t<=287;)bt[2*t+1]=8,t++,r[8]++;for(Ot(bt,287,r),t=0;t<_t;t++)yt[2*t+1]=5,yt[2*t]=zt(t,5);Tt=new Ut(bt,gt,257,ut,ft),It=new Ut(yt,pt,0,_t,ft),xt=new Ut(new Array(0),wt,0,19,7)})(),Ht=!0),t.l_desc=new Dt(t.dyn_ltree,Tt),t.d_desc=new Dt(t.dyn_dtree,It),t.bl_desc=new Dt(t.bl_tree,xt),t.bi_buf=0,t.bi_valid=0,Et(t)},_tr_stored_block:Vt,_tr_flush_block:Gt,_tr_tally:(t,e,i)=>(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++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(Bt[i]+ct+1)]++,t.dyn_dtree[2*kt(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{Ft(t,2,3),Wt(t,256,bt),(t=>{16===t.bi_valid?(Ct(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 Jt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const qt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var Kt=(t,e,i,a)=>{const s=qt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];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"},Xt={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:Qt,_tr_stored_block:te,_tr_flush_block:ee,_tr_tally:ie,_tr_align:ae}=jt,{Z_NO_FLUSH:se,Z_PARTIAL_FLUSH:re,Z_FULL_FLUSH:ne,Z_FINISH:he,Z_BLOCK:oe,Z_OK:le,Z_STREAM_END:de,Z_STREAM_ERROR:ce,Z_DATA_ERROR:ue,Z_BUF_ERROR:_e,Z_DEFAULT_COMPRESSION:fe,Z_FILTERED:ge,Z_HUFFMAN_ONLY:pe,Z_RLE:we,Z_FIXED:me,Z_DEFAULT_STRATEGY:be,Z_UNKNOWN:ye,Z_DEFLATED:Se}=Xt,Be=258,Re=262,ve=42,Ue=113,Te=666,Ie=(t,e)=>(t.msg=Yt[e],e),xe=t=>2*t-(t>4?9:0),De=t=>{let e=t.length;for(;--e>=0;)t[e]=0},ke=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Ce=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const Fe=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},We=(t,e)=>{ee(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Fe(t.strm)},ze=(t,e)=>{t.pending_buf[t.pending++]=e},Oe=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Ee=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=Jt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=Kt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},Ae=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Re?t.strstart-(t.w_size-Re):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Be;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Be-(u-r),r=u-Be,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},$e=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Re)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),ke(t),a+=e),0===t.strm.avail_in)break;if(i=Ee(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Ce(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Ce(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Re&&0!==t.strm.avail_in)},Pe=(t,e)=>{let i,a,s,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(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==he||e===se||i!==a+t.strm.avail_in))break;n=e===he&&i===a+t.strm.avail_in?1:0,te(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,Fe(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(Ee(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}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!==se&&e!==he&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&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++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(Ee(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===he)&&e!==se&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===he&&0===t.strm.avail_in&&i===a?1:0,te(t,t.block_start,i,n),t.block_start+=i,Fe(t.strm)),n?3:1)},Me=(t,e)=>{let i,a;for(;;){if(t.lookahead<Re){if($e(t),t.lookahead<Re&&e===se)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Re&&(t.match_length=Ae(t,i)),t.match_length>=3)if(a=ie(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=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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=Ce(t,t.ins_h,t.window[t.strstart+1]);else a=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2},Le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Re){if($e(t),t.lookahead<Re&&e===se)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Re&&(t.match_length=Ae(t,i),t.match_length<=5&&(t.strategy===ge||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=ie(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Ce(t,t.ins_h,t.window[t.strstart+3-1]),i=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++,a&&(We(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=ie(t,0,t.window[t.strstart-1]),a&&We(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&&(a=ie(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2};function Ne(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const Ze=[new Ne(0,0,0,0,Pe),new Ne(4,4,8,4,Me),new Ne(4,5,16,8,Me),new Ne(4,6,32,32,Me),new Ne(4,4,16,16,Le),new Ne(8,16,32,32,Le),new Ne(8,16,128,128,Le),new Ne(8,32,128,256,Le),new Ne(32,128,258,1024,Le),new Ne(32,258,258,4096,Le)];function He(){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=Se,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),De(this.dyn_ltree),De(this.dyn_dtree),De(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),De(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),De(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 Ve=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==ve&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Ue&&e.status!==Te?1:0},Ge=t=>{if(Ve(t))return Ie(t,ce);t.total_in=t.total_out=0,t.data_type=ye;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?ve:Ue,t.adler=2===e.wrap?0:1,e.last_flush=-2,Qt(e),le},je=t=>{const e=Ge(t);var i;return e===le&&((i=t.state).window_size=2*i.w_size,De(i.head),i.max_lazy_match=Ze[i.level].max_lazy,i.good_match=Ze[i.level].good_length,i.nice_match=Ze[i.level].nice_length,i.max_chain_length=Ze[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},Je=(t,e,i,a,s,r)=>{if(!t)return ce;let n=1;if(e===fe&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Se||a<8||a>15||e<0||e>9||r<0||r>me||8===a&&1!==n)return Ie(t,ce);8===a&&(a=9);const h=new He;return t.state=h,h.strm=t,h.status=ve,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+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<<s+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=i,je(t)};var qe={deflateInit:(t,e)=>Je(t,e,Se,15,8,be),deflateInit2:Je,deflateReset:je,deflateResetKeep:Ge,deflateSetHeader:(t,e)=>Ve(t)||2!==t.state.wrap?ce:(t.state.gzhead=e,le),deflate:(t,e)=>{if(Ve(t)||e>oe||e<0)return t?Ie(t,ce):ce;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Te&&e!==he)return Ie(t,0===t.avail_out?_e:ce);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(Fe(t),0===t.avail_out)return i.last_flush=-1,le}else if(0===t.avail_in&&xe(e)<=xe(a)&&e!==he)return Ie(t,_e);if(i.status===Te&&0!==t.avail_in)return Ie(t,_e);if(i.status===ve&&0===i.wrap&&(i.status=Ue),i.status===ve){let e=Se+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=pe||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,Oe(i,e),0!==i.strstart&&(Oe(i,t.adler>>>16),Oe(i,65535&t.adler)),t.adler=1,i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le}if(57===i.status)if(t.adler=0,ze(i,31),ze(i,139),ze(i,8),i.gzhead)ze(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ze(i,255&i.gzhead.time),ze(i,i.gzhead.time>>8&255),ze(i,i.gzhead.time>>16&255),ze(i,i.gzhead.time>>24&255),ze(i,9===i.level?2:i.strategy>=pe||i.level<2?4:0),ze(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ze(i,255&i.gzhead.extra.length),ze(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Kt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ze(i,0),ze(i,0),ze(i,0),ze(i,0),ze(i,0),ze(i,9===i.level?2:i.strategy>=pe||i.level<2?4:0),ze(i,3),i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,Fe(t),0!==i.pending)return i.last_flush=-1,le;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),Fe(t),0!==i.pending)return i.last_flush=-1,le;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ze(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a)),Fe(t),0!==i.pending)return i.last_flush=-1,le;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ze(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=Kt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(Fe(t),0!==i.pending))return i.last_flush=-1,le;ze(i,255&t.adler),ze(i,t.adler>>8&255),t.adler=0}if(i.status=Ue,Fe(t),0!==i.pending)return i.last_flush=-1,le}if(0!==t.avail_in||0!==i.lookahead||e!==se&&i.status!==Te){let a=0===i.level?Pe(i,e):i.strategy===pe?((t,e)=>{let i;for(;;){if(0===t.lookahead&&($e(t),0===t.lookahead)){if(e===se)return 1;break}if(t.match_length=0,i=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===we?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Be){if($e(t),t.lookahead<=Be&&e===se)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Be;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Be-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=ie(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=ie(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(We(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===he?(We(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(We(t,!1),0===t.strm.avail_out)?1:2})(i,e):Ze[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Te),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),le;if(2===a&&(e===re?ae(i):e!==oe&&(te(i,0,0,!1),e===ne&&(De(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Fe(t),0===t.avail_out))return i.last_flush=-1,le}return e!==he?le:i.wrap<=0?de:(2===i.wrap?(ze(i,255&t.adler),ze(i,t.adler>>8&255),ze(i,t.adler>>16&255),ze(i,t.adler>>24&255),ze(i,255&t.total_in),ze(i,t.total_in>>8&255),ze(i,t.total_in>>16&255),ze(i,t.total_in>>24&255)):(Oe(i,t.adler>>>16),Oe(i,65535&t.adler)),Fe(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?le:de)},deflateEnd:t=>{if(Ve(t))return ce;const e=t.state.status;return t.state=null,e===Ue?Ie(t,ue):le},deflateSetDictionary:(t,e)=>{let i=e.length;if(Ve(t))return ce;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==ve||a.lookahead)return ce;if(1===s&&(t.adler=Jt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(De(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,$e(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Ce(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,$e(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,le},deflateInfo:"pako deflate (from Nodeca project)"};const Ke=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)Ke(i,e)&&(t[e]=i[e])}}return t},Xe=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Qe=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Qe=!1}const ti=new Uint8Array(256);for(let t=0;t<256;t++)ti[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ti[254]=ti[254]=1;var ei=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ii=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 ai=Object.prototype.toString,{Z_NO_FLUSH:si,Z_SYNC_FLUSH:ri,Z_FULL_FLUSH:ni,Z_FINISH:hi,Z_OK:oi,Z_STREAM_END:li,Z_DEFAULT_COMPRESSION:di,Z_DEFAULT_STRATEGY:ci,Z_DEFLATED:ui}=Xt;function _i(t){this.options=Ye({level:di,method:ui,chunkSize:16384,windowBits:15,memLevel:8,strategy:ci},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 ii,this.strm.avail_out=0;let i=qe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==oi)throw new Error(Yt[i]);if(e.header&&qe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?ei(e.dictionary):"[object ArrayBuffer]"===ai.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=qe.deflateSetDictionary(this.strm,t),i!==oi)throw new Error(Yt[i]);this._dict_set=!0}}_i.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?hi:si,"string"==typeof t?i.input=ei(t):"[object ArrayBuffer]"===ai.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===ri||r===ni)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=qe.deflate(i,r),s===li)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=qe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===oi;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},_i.prototype.onData=function(t){this.chunks.push(t)},_i.prototype.onEnd=function(t){t===oi&&(this.result=Xe(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var fi={deflate:function(t,e){const i=new _i(e);if(i.push(t,!0),i.err)throw i.msg||Yt[i.err];return i.result}};const{deflate:gi}=fi;var pi=gi;const wi={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}},mi=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in wi))throw"Unhandled character '"+t+"' in pack format";const i=wi[t].bytes,r=new DataView(new ArrayBuffer(i));wi[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},bi=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in wi))throw"Unhandled character '"+t+"' in unpack format";const r=wi[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=wi[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class yi extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,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=h,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.__abandonCurrentOperation=!1,this.__adaptiveBlockMultiplier=1,this.__adaptiveMaxInFlightMultiplier=1,this.__consecutiveSuccessfulChunks=0,this.__lastAdaptiveAdjustment=0,this.__isCDCDevice=!1,this.state_DTR=!1,this.state_RTS=!1,this.__writeChain=Promise.resolve()}get chipFamily(){return this._parent?this._parent.chipFamily:this.__chipFamily}set chipFamily(t){this._parent?this._parent.chipFamily=t:this.__chipFamily=t}get chipName(){return this._parent?this._parent.chipName:this.__chipName}set chipName(t){this._parent?this._parent.chipName=t:this.__chipName=t}get chipRevision(){return this._parent?this._parent.chipRevision:this.__chipRevision}set chipRevision(t){this._parent?this._parent.chipRevision=t:this.__chipRevision=t}get chipVariant(){return this._parent?this._parent.chipVariant:this.__chipVariant}set chipVariant(t){this._parent?this._parent.chipVariant=t:this.__chipVariant=t}get _inputBuffer(){if(this._parent)return this._parent._inputBuffer;if(void 0===this.__inputBuffer)throw new Error("_inputBuffer accessed before initialization");return this.__inputBuffer}get _inputBufferReadIndex(){return this._parent?this._parent._inputBufferReadIndex:this.__inputBufferReadIndex||0}set _inputBufferReadIndex(t){this._parent?this._parent._inputBufferReadIndex=t:this.__inputBufferReadIndex=t}get _inputBufferAvailable(){return this._inputBuffer.length-this._inputBufferReadIndex}_readByte(){if(!(this._inputBufferReadIndex>=this._inputBuffer.length))return this._inputBuffer[this._inputBufferReadIndex++]}_clearInputBuffer(){this._inputBuffer.length=0,this._inputBufferReadIndex=0}_compactInputBuffer(){this._inputBufferReadIndex>1e3&&this._inputBufferReadIndex>this._inputBuffer.length/2&&(this._inputBuffer.splice(0,this._inputBufferReadIndex),this._inputBufferReadIndex=0)}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}get _abandonCurrentOperation(){return this._parent?this._parent._abandonCurrentOperation:this.__abandonCurrentOperation}set _abandonCurrentOperation(t){this._parent?this._parent._abandonCurrentOperation=t:this.__abandonCurrentOperation=t}get _adaptiveBlockMultiplier(){return this._parent?this._parent._adaptiveBlockMultiplier:this.__adaptiveBlockMultiplier}set _adaptiveBlockMultiplier(t){this._parent?this._parent._adaptiveBlockMultiplier=t:this.__adaptiveBlockMultiplier=t}get _adaptiveMaxInFlightMultiplier(){return this._parent?this._parent._adaptiveMaxInFlightMultiplier:this.__adaptiveMaxInFlightMultiplier}set _adaptiveMaxInFlightMultiplier(t){this._parent?this._parent._adaptiveMaxInFlightMultiplier=t:this.__adaptiveMaxInFlightMultiplier=t}get _consecutiveSuccessfulChunks(){return this._parent?this._parent._consecutiveSuccessfulChunks:this.__consecutiveSuccessfulChunks}set _consecutiveSuccessfulChunks(t){this._parent?this._parent._consecutiveSuccessfulChunks=t:this.__consecutiveSuccessfulChunks=t}get _lastAdaptiveAdjustment(){return this._parent?this._parent._lastAdaptiveAdjustment:this.__lastAdaptiveAdjustment}set _lastAdaptiveAdjustment(t){this._parent?this._parent._lastAdaptiveAdjustment=t:this.__lastAdaptiveAdjustment=t}get _isCDCDevice(){return this._parent?this._parent._isCDCDevice:this.__isCDCDevice}set _isCDCDevice(t){this._parent?this._parent._isCDCDevice=t:this.__isCDCDevice=t}detectUSBSerialChip(t,e){const i={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 i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__inputBufferReadIndex=0,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),(12346===t.usbVendorId||6790===t.usbVendorId&&21971===t.usbProductId)&&(this._isCDCDevice=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=ht(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=I[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===U&&(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}`),await this.drainInputBuffer(200),this._clearInputBuffer(),await s(it);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=x[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===U&&(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: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==U)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:bi("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?bi("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?bi("<I",t.slice(16,20))[0]:0}}async getMacAddress(){if(!this._initializationSucceeded)throw new Error("getMacAddress() requires initialize() to have completed successfully");return this.macAddr().map(t=>t.toString(16).padStart(2,"0").toUpperCase()).join(":")}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:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}finally{this._isReconfiguring=!1}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 setDTRandRTS(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!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),await this.sleep(200)}async hardResetClassic(){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),await this.sleep(200)}async hardResetUnixTight(){await this.setDTRandRTS(!0,!0),await this.setDTRandRTS(!1,!1),await this.setDTRandRTS(!1,!0),await this.sleep(100),await this.setDTRandRTS(!0,!1),await this.sleep(50),await this.setDTRandRTS(!1,!1),await this.setDTR(!1),await this.sleep(200)}async setRTSWebUSB(t){this.state_RTS=t,await this.port.setSignals({requestToSend:t,dataTerminalReady:this.state_DTR})}async setDTRWebUSB(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t,requestToSend:this.state_RTS})}async setDTRandRTSWebUSB(t,e){this.state_DTR=t,this.state_RTS=e,await this.port.setSignals({dataTerminalReady:t,requestToSend:e})}async hardResetUSBJTAGSerialWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetUSBJTAGSerialInvertedDTRWebUSB(){await this.setRTSWebUSB(!1),await this.setDTRWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setRTSWebUSB(!0),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200)}async hardResetClassicWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetUnixTightWebUSB(){await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRandRTSWebUSB(!0,!0),await this.setDTRandRTSWebUSB(!1,!0),await this.sleep(100),await this.setDTRandRTSWebUSB(!0,!1),await this.sleep(50),await this.setDTRandRTSWebUSB(!1,!1),await this.setDTRWebUSB(!1),await this.sleep(200)}async hardResetClassicLongDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(500),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(200),await this.setDTRWebUSB(!1),await this.sleep(500)}async hardResetClassicShortDelayWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(25),await this.setDTRWebUSB(!1),await this.sleep(100)}async hardResetInvertedWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedDTRWebUSB(){await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(100),await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(50),await this.setDTRWebUSB(!0),await this.sleep(200)}async hardResetInvertedRTSWebUSB(){await this.setDTRWebUSB(!1),await this.setRTSWebUSB(!1),await this.sleep(100),await this.setDTRWebUSB(!0),await this.setRTSWebUSB(!0),await this.sleep(50),await this.setDTRWebUSB(!1),await this.sleep(200)}isWebUSB(){return!0===this.port.isWebUSB}async connectWithResetStrategies(){const t=this.port.getInfo(),e=t.usbProductId===o,i=12346===t.usbVendorId,a=[],r=this,n=!e&&!i;if(this.isWebUSB()){const s=4292===t.usbVendorId,h=6790===t.usbVendorId,o=12346===t.usbVendorId&&2===t.usbProductId;(e||i)&&(o?(a.push({name:"USB-JTAG/Serial (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB) - ESP32-S2",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"UnixTight (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - ESP32-S2 CDC",fn:async()=>await r.hardResetClassicWebUSB()})):(a.push({name:"USB-JTAG/Serial Inverted DTR (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialInvertedDTRWebUSB()}),a.push({name:"USB-JTAG/Serial (WebUSB)",fn:async()=>await r.hardResetUSBJTAGSerialWebUSB()}),a.push({name:"Inverted DTR Classic (WebUSB)",fn:async()=>await r.hardResetInvertedDTRWebUSB()}))),n&&(h?(a.push({name:"UnixTight (WebUSB) - CH34x",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CH34x",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CH34x",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):s?(a.push({name:"UnixTight (WebUSB) - CP2102",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB) - CP2102",fn:async()=>await r.hardResetClassicWebUSB()}),a.push({name:"Inverted Both (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedWebUSB()}),a.push({name:"Inverted RTS (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedRTSWebUSB()}),a.push({name:"Inverted DTR (WebUSB) - CP2102",fn:async()=>await r.hardResetInvertedDTRWebUSB()})):(a.push({name:"UnixTight (WebUSB)",fn:async()=>await r.hardResetUnixTightWebUSB()}),a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"Inverted Both (WebUSB)",fn:async function(){return await r.hardResetInvertedWebUSB()}}),a.push({name:"Inverted RTS (WebUSB)",fn:async function(){return await r.hardResetInvertedRTSWebUSB()}}),a.push({name:"Inverted DTR (WebUSB)",fn:async function(){return await r.hardResetInvertedDTRWebUSB()}}))),s||o||(6790!==t.usbVendorId&&a.push({name:"Classic (WebUSB)",fn:async function(){return await r.hardResetClassicWebUSB()}}),a.push({name:"UnixTight (WebUSB)",fn:async function(){return await r.hardResetUnixTightWebUSB()}}),a.push({name:"Classic Long Delay (WebUSB)",fn:async function(){return await r.hardResetClassicLongDelayWebUSB()}}),a.push({name:"Classic Short Delay (WebUSB)",fn:async function(){return await r.hardResetClassicShortDelayWebUSB()}}),e||i||a.push({name:"USB-JTAG/Serial fallback (WebUSB)",fn:async function(){return await r.hardResetUSBJTAGSerialWebUSB()}}))}else(e||i)&&a.push({name:"USB-JTAG/Serial",fn:async function(){return await r.hardResetUSBJTAGSerial()}}),a.push({name:"UnixTight",fn:async function(){return await r.hardResetUnixTight()}}),e||i||a.push({name:"USB-JTAG/Serial (fallback)",fn:async function(){return await r.hardResetUSBJTAGSerial()}});let h=null;for(const t of a)try{if(!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}if(this._abandonCurrentOperation=!1,await t.fn(),n){if(await this.syncWithTimeout(2e3))return void this.logger.log(`Connected USB Serial successfully with ${t.name} reset.`);throw new Error("Sync timeout or abandoned")}{const e=this.sync(),i=new Promise((t,e)=>setTimeout(()=>e(new Error("Sync timeout")),1e3));try{return await Promise.race([e,i]),void this.logger.log(`Connected CDC/JTAG successfully with ${t.name} reset.`)}catch(t){throw new Error("Sync timeout or abandoned")}}}catch(e){if(h=e,this.logger.log(`${t.name} reset failed: ${e.message}`),this._abandonCurrentOperation=!0,await s(100),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._clearInputBuffer(),await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw this._abandonCurrentOperation=!1,new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==h?void 0:h.message}`)}async watchdogReset(){let t,e,i,a;if(this.logger.log("Hard resetting with watchdog timer..."),this.chipFamily===g)t=1061191852,e=1061191828,i=1061191832,a=1356348065;else{if(this.chipFamily!==p)throw new Error(`watchdogReset() is only supported for ESP32-S2 and ESP32-S3, not ${this.chipFamily}`);t=1610645680,e=1610645656,i=1610645660,a=1356348065}await this.writeRegister(t,a,void 0,0),await this.writeRegister(i,2e3,void 0,0);await this.writeRegister(e,-805306110,void 0,0),await this.writeRegister(t,0,void 0,0),await this.sleep(500)}async hardReset(t=!1){if(t)this.port.getInfo().usbProductId===o?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):this.isWebUSB()?(await this.hardResetClassicWebUSB(),this.logger.log("Classic reset (WebUSB/Android).")):(await this.hardResetClassic(),this.logger.log("Classic reset."));else if(this.port.getInfo().usbProductId!==o||this.chipFamily!==g&&this.chipFamily!==p)this.isWebUSB()?(await this.setRTSWebUSB(!0),await this.sleep(200),await this.setRTSWebUSB(!1),await this.sleep(200),this.logger.log("Hard reset (WebUSB).")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset."));else{try{const t=this.chipFamily===g?l:d,e=(this.chipFamily,1);await this.writeRegister(t,0,e,0)}catch(t){this.logger.log("Warning: Could not clear force download boot mode:",t)}let t=!1;try{const e=this.chipFamily===g?1061175352:1610629176,i=(this.chipFamily,8),a=this.chipFamily===g?l:d,s=(this.chipFamily,1),r=await this.readRegister(e),n=await this.readRegister(a);0===(r&i)&&0===(n&s)&&(t=!0)}catch(e){this.logger.log("Warning: Could not read strap/option registers, using watchdog reset:",e),t=!0}t?(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG).")):(await this.watchdogReset(),this.logger.log("Watchdog reset (USB-OTG, normal boot)."))}await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==_){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>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]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==f)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v&&this.chipFamily!=U&&this.chipFamily!=T)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,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 "+a(t,8));const e=mi("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,et),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==_?o=2:[f,g,p,w,m,b,y,S,B,R,v,U,T].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)?o=h.length:(o=2,this.logger.debug(`Unknown chip family, defaulting to 2-byte status (opcode: ${a(t)}, data.length: ${h.length})`)),h.length<o)throw new Error("Didn't get enough status bytes");const l=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",l),this.logger.debug("value",r),this.logger.debug("data",h)),1==l[0])throw 5==l[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(l[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...mi("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;if(this._isCDCDevice){const n=Date.now();for(;;){if(this._abandonCurrentOperation)throw new ot("Operation abandoned (reset strategy timeout)");if(Date.now()-n>t){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBufferAvailable)for(;this._inputBufferAvailable>0;){if(Date.now()-n>t){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}const s=this._readByte();if(null===e){if(192!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid head of packet ("+a(s)+")");e=[]}else if(r)if(r=!1,220==s)e.push(192);else{if(221!=s)throw this.debug&&(this.logger.debug("Read invalid data: "+a(s)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid SLIP escape (0xdb, "+a(s)+")");e.push(219)}else if(219==s)r=!0;else{if(192==s)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(s)}}else await s(1)}}else{let n=[];for(;;){if(this._abandonCurrentOperation)throw new ot("Operation abandoned (reset strategy timeout)");const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBufferAvailable>0){n.push(this._readByte());break}await s(1)}if(0==n.length){throw new ot("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid head of packet ("+a(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(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new ot("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),this._compactInputBuffer(),e;e.push(t)}}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=bi("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.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 ${a(t)}`)}throw new Error("Response doesn't match request")}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){try{const e=mi("<II",t,this.IS_STUB?h: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 s(it),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;this._isReconfiguring=!0;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this.isWebUSB()){const e=this.port.getInfo(),i=6790===e.usbVendorId&&21971===e.usbProductId;if(!i&&"function"==typeof this.port.setBaudRate)return await this.port.setBaudRate(t),void await s(100)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}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}`)}finally{this._isReconfiguring=!1}}async syncWithTimeout(t){const e=Date.now();for(let i=0;i<5;i++){if(Date.now()-e>t)return!1;if(this._abandonCurrentOperation)return!1;this._clearInputBuffer();try{if(await this._sync())return await s(it),!0}catch(t){if(this._abandonCurrentOperation)return!1}await s(it)}return!1}async sync(){for(let t=0;t<5;t++){this._clearInputBuffer();if(await this._sync())return await s(it),!0;await s(it)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,u);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,it);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch(e){this.debug&&this.logger.debug(`Sync attempt ${t+1} failed: ${e}`)}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=Q;s?(n=pi(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,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[f,g,p,w,m,b,y,S,B,R,v,U,T].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily!=_||this.IS_STUB?t:this.getEraseSize(e,t);const h=this.IS_STUB?Q:nt(at,t),o=Date.now();let l=mi("<IIII",s,n,r,e);return this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=w&&this.chipFamily!=m&&this.chipFamily!=b&&this.chipFamily!=y&&this.chipFamily!=S&&this.chipFamily!=B&&this.chipFamily!=R&&this.chipFamily!=v&&this.chipFamily!=U&&this.chipFamily!=T||(l=l.concat(mi("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,l,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,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=nt(at,n)):(n=r*a,h=Q);const o=mi("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=mi("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=mi("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return ht(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=mi("<IIII",t,e,i,a);s>0&&(r=r.concat(mi("<IIII",ht(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=ht(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>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),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),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 i=bi("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=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,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=n,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,mi("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,mi("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?Q:500,i=mi("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await lt(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 i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new Si(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _reader(){return this._parent?this._parent._reader:this.__reader}set _reader(t){this._parent?this._parent._reader=t:this.__reader=t}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}get _currentBaudRate(){return this._parent?this._parent._currentBaudRate:this.__currentBaudRate}set _currentBaudRate(t){this._parent?this._parent._currentBaudRate=t:this.__currentBaudRate=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(this.logger.debug("Previous write failed, attempting recovery for current write"),!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.debug(`Failed to get writer in recovery: ${t}`),new Error("Cannot acquire writer lock")}await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch{}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable){try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{if(!this._reader)return void t(void 0);const e=setTimeout(()=>{this.logger.debug("Disconnect timeout - forcing resolution"),t(void 0)},1e3);this.addEventListener("disconnect",()=>{clearTimeout(e),t(void 0)},{once:!0});try{this._reader.cancel()}catch(i){this.logger.debug(`Reader cancel error: ${i}`),clearTimeout(e),t(void 0)}}),this.connected=!1;try{await this.port.close(),this.logger.debug("Port closed successfully")}catch(t){this.logger.debug(`Port close error: ${t}`)}}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,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!==h&&(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=!0,this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async reconnectToBootloader(){if(this._parent)await this._parent.reconnectToBootloader();else try{this.logger.log("Reconnecting to bootloader mode..."),this.connected=!1,this.__inputBuffer=[],this.__inputBufferReadIndex=0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(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:h}),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})`);this._isReconfiguring=!1,this.__chipFamily=void 0,this.chipName="Unknown Chip",this.IS_STUB=!1,this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0,this.__totalBytesRead=0,this.readLoop()),await s(100),await this.connectWithResetStrategies(),await this.detectChip(),this.logger.log(`Reconnected to bootloader: ${this.chipName}`)}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBufferAvailable>0){void 0!==this._readByte()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0)}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),await s(it),this._parent||(this.__inputBuffer=[],this.__inputBufferReadIndex=0),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");let r;await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`),this.isWebUSB()&&(this._isCDCDevice?(this._adaptiveBlockMultiplier=8,this._adaptiveMaxInFlightMultiplier=8,this._consecutiveSuccessfulChunks=0,this.logger.debug(`CDC device - Initialized: blockMultiplier=${this._adaptiveBlockMultiplier}, maxInFlightMultiplier=${this._adaptiveMaxInFlightMultiplier}`)):(this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0,this.logger.debug("Non-CDC device - Fixed values: blockSize=31, maxInFlight=31"))),r=this.isWebUSB()?16384:262144;let n=new Uint8Array(0),h=e,o=i;for(;o>0;){const e=Math.min(r,o);let l=!1,d=0;const c=5;let u=!1;for(;!l&&d<=c;){let i=new Uint8Array(0),a=0;try{let r,o;if(0===d&&this.logger.debug(`Reading chunk at 0x${h.toString(16)}, size: 0x${e.toString(16)}`),this.isWebUSB()){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2);r=e*this._adaptiveBlockMultiplier,o=e*this._adaptiveMaxInFlightMultiplier}else{const t=63;r=65*t,o=130*t}const c=mi("<IIII",h,e,r,o),[u]=await this.checkCommand(210,c);if(0!=u)throw new Error("Failed to read memory: "+u);for(;i.length<e;){let r;try{r=await this.readPacket(100)}catch(t){if(t instanceof ot){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(r&&r.length>0){const s=new Uint8Array(r),n=new Uint8Array(i.length+s.length);n.set(i),n.set(s,i.length),i=n;if(i.length>=e||i.length>=a+o){const e=mi("<I",i.length),s=t(e);await this.writeToStream(s),a=i.length}}}const _=new Uint8Array(n.length+i.length);if(_.set(n),_.set(i,n.length),n=_,l=!0,this.isWebUSB()&&this._isCDCDevice&&0===d&&(this._consecutiveSuccessfulChunks++,this._consecutiveSuccessfulChunks>=2)){const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=8,a=8;let s=!1;if(this._adaptiveBlockMultiplier<i?(this._adaptiveBlockMultiplier=Math.min(2*this._adaptiveBlockMultiplier,i),s=!0):this._adaptiveMaxInFlightMultiplier<a&&(this._adaptiveMaxInFlightMultiplier=Math.min(2*this._adaptiveMaxInFlightMultiplier,a),s=!0),s){const t=e*this._adaptiveBlockMultiplier,i=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Speed increased: blockSize=${t}, maxInFlight=${i}`),this._lastAdaptiveAdjustment=Date.now()}this._consecutiveSuccessfulChunks=0}}catch(t){if(d++,this.isWebUSB()&&this._isCDCDevice&&1===d)if(this._adaptiveBlockMultiplier>1||this._adaptiveMaxInFlightMultiplier>1){this._adaptiveBlockMultiplier=1,this._adaptiveMaxInFlightMultiplier=1,this._consecutiveSuccessfulChunks=0;const t=this.port.maxTransferSize||64,e=Math.floor((t-2)/2),i=e*this._adaptiveBlockMultiplier,a=e*this._adaptiveMaxInFlightMultiplier;this.logger.debug(`Error at higher speed - reduced to minimum: blockSize=${i}, maxInFlight=${a}`)}else this.logger.debug("Error at minimum speed (blockSize=31, maxInFlight=31) - not a speed issue");if(!(t instanceof ot))throw t;if(d<=c){this.logger.log(`${t.message} at 0x${h.toString(16)}. Draining buffer and retrying (attempt ${d}/${c})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(it)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(u)throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${c} retries and recovery attempt`);u=!0,this.logger.log(`All retries exhausted at 0x${h.toString(16)}. Attempting recovery (close and reopen port)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),d=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${h.toString(16)} after ${c} retries and recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),n.length,i),h+=e,o-=e,this.logger.debug(`Total progress: 0x${n.length.toString(16)} from 0x${i.toString(16)} bytes`)}return n}}class Si extends yi{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await lt(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(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 "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,tt)}async eraseRegion(t,e){if(t<0)throw new Error(`Invalid offset: ${t} (must be non-negative)`);if(e<0)throw new Error(`Invalid size: ${e} (must be non-negative)`);if(0===e)return void this.logger.log("eraseRegion: size is 0, skipping erase");if(t%n!==0)throw new Error(`Offset ${t} (0x${t.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);if(e%n!==0)throw new Error(`Size ${e} (0x${e.toString(16)}) is not aligned to flash sector size 4096 (0x${n.toString(16)})`);const i=4294967295;if(t>i)throw new Error(`Offset ${t} exceeds maximum value 4294967295`);if(e>i)throw new Error(`Size ${e} exceeds maximum value 4294967295`);if(t+e>i)throw new Error(`Region end (offset + size = ${t+e}) exceeds maximum addressable range 4294967295`);const a=nt(at,e),s=mi("<II",t,e);await this.checkCommand(209,s,0,a)}}const Bi=async t=>{let e;const i=globalThis.requestSerialPort;if("function"==typeof i)e=await i();else{if(!navigator.serial)throw new Error("Web Serial API is not supported in this browser. Please use Chrome, Edge, or Opera on desktop, or Chrome on Android. Note: The page must be served over HTTPS or localhost.");e=await navigator.serial.requestPort()}return e.readable&&e.writable||await e.open({baudRate:h}),new yi(e,t)},Ri=async(t,e)=>{if(!t)throw new Error("Port is required");return t.readable&&t.writable||await t.open({baudRate:h}),new yi(t,e)};export{tt as CHIP_ERASE_TIMEOUT,f as CHIP_FAMILY_ESP32,w as CHIP_FAMILY_ESP32C2,m as CHIP_FAMILY_ESP32C3,b as CHIP_FAMILY_ESP32C5,y as CHIP_FAMILY_ESP32C6,S as CHIP_FAMILY_ESP32C61,B as CHIP_FAMILY_ESP32H2,v as CHIP_FAMILY_ESP32H21,R as CHIP_FAMILY_ESP32H4,U as CHIP_FAMILY_ESP32P4,g as CHIP_FAMILY_ESP32S2,p as CHIP_FAMILY_ESP32S3,T as CHIP_FAMILY_ESP32S31,_ as CHIP_FAMILY_ESP8266,Q as DEFAULT_TIMEOUT,at as ERASE_REGION_TIMEOUT_PER_MB,yi as ESPLoader,Z as ESP_CHANGE_BAUDRATE,G as ESP_CHECKSUM_MAGIC,$ as ESP_ERASE_FLASH,P as ESP_ERASE_REGION,D as ESP_FLASH_BEGIN,k as ESP_FLASH_DATA,j as ESP_FLASH_DEFL_BEGIN,J as ESP_FLASH_DEFL_DATA,q as ESP_FLASH_DEFL_END,C as ESP_FLASH_END,V as ESP_GET_SECURITY_INFO,F as ESP_MEM_BEGIN,z as ESP_MEM_DATA,W as ESP_MEM_END,X as ESP_RAM_BLOCK,M as ESP_READ_FLASH,A as ESP_READ_REG,N as ESP_SPI_ATTACH,H as ESP_SPI_FLASH_MD5,L as ESP_SPI_SET_PARAMS,O as ESP_SYNC,E as ESP_WRITE_REG,rt as FLASH_READ_TIMEOUT,et as MAX_TIMEOUT,st as MEM_END_ROM_TIMEOUT,K as ROM_INVALID_RECV_MSG,it as SYNC_TIMEOUT,Y as USB_RAM_BLOCK,Bi as connect,Ri as connectWithPort};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tasmota-webserial-esptool",
3
- "version": "9.2.7",
3
+ "version": "9.2.8",
4
4
  "description": "World's first tool for flashing and reading ESP devices on Android mobile devices using WebUSB. Flash & Read ESP devices using WebSerial/WebUSB - up to 10x faster flash read than esptool.py",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
package/src/const.ts CHANGED
@@ -112,6 +112,12 @@ export const ESP32S2_RTC_CNTL_WDTCONFIG0_REG = 0x3f408094;
112
112
  export const ESP32S2_RTC_CNTL_WDTCONFIG1_REG = 0x3f408098;
113
113
  export const ESP32S2_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
114
114
 
115
+ // ESP32-S2 GPIO strap register and boot mode control
116
+ export const ESP32S2_GPIO_STRAP_REG = 0x3f404038;
117
+ export const ESP32S2_GPIO_STRAP_SPI_BOOT_MASK = 1 << 3; // Not download mode
118
+ export const ESP32S2_RTC_CNTL_OPTION1_REG = 0x3f408128;
119
+ export const ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 0x1; // Is download mode forced over USB?
120
+
115
121
  export const ESP32S3_SPI_REG_BASE = 0x60002000;
116
122
  export const ESP32S3_BASEFUSEADDR = 0x60007000;
117
123
  export const ESP32S3_MACFUSEADDR = 0x60007000 + 0x044;
@@ -130,6 +136,12 @@ export const ESP32S3_RTC_CNTL_WDTCONFIG0_REG = 0x60008098;
130
136
  export const ESP32S3_RTC_CNTL_WDTCONFIG1_REG = 0x6000809c;
131
137
  export const ESP32S3_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
132
138
 
139
+ // ESP32-S3 GPIO strap register and boot mode control
140
+ export const ESP32S3_GPIO_STRAP_REG = 0x60004038;
141
+ export const ESP32S3_GPIO_STRAP_SPI_BOOT_MASK = 1 << 3; // Not download mode
142
+ export const ESP32S3_RTC_CNTL_OPTION1_REG = 0x6000812c;
143
+ export const ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 0x1; // Is download mode forced over USB?
144
+
133
145
  export const ESP32C2_SPI_REG_BASE = 0x60002000;
134
146
  export const ESP32C2_BASEFUSEADDR = 0x60008800;
135
147
  export const ESP32C2_MACFUSEADDR = 0x60008800 + 0x044;
package/src/esp_loader.ts CHANGED
@@ -64,10 +64,18 @@ import {
64
64
  ESP32S2_RTC_CNTL_WDTCONFIG0_REG,
65
65
  ESP32S2_RTC_CNTL_WDTCONFIG1_REG,
66
66
  ESP32S2_RTC_CNTL_WDT_WKEY,
67
+ ESP32S2_GPIO_STRAP_REG,
68
+ ESP32S2_GPIO_STRAP_SPI_BOOT_MASK,
69
+ ESP32S2_RTC_CNTL_OPTION1_REG,
70
+ ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK,
67
71
  ESP32S3_RTC_CNTL_WDTWPROTECT_REG,
68
72
  ESP32S3_RTC_CNTL_WDTCONFIG0_REG,
69
73
  ESP32S3_RTC_CNTL_WDTCONFIG1_REG,
70
74
  ESP32S3_RTC_CNTL_WDT_WKEY,
75
+ ESP32S3_GPIO_STRAP_REG,
76
+ ESP32S3_GPIO_STRAP_SPI_BOOT_MASK,
77
+ ESP32S3_RTC_CNTL_OPTION1_REG,
78
+ ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK,
71
79
  } from "./const";
72
80
  import { getStubCode } from "./stubs";
73
81
  import { hexFormatter, sleep, slipEncode, toHex } from "./util";
@@ -1422,14 +1430,89 @@ export class ESPLoader extends EventTarget {
1422
1430
  }
1423
1431
  } else {
1424
1432
  // just reset (no bootloader mode)
1425
- // For ESP32-S2/S3 with USB-OTG, use watchdog reset instead of DTR/RTS
1433
+ // For ESP32-S2/S3 with USB-OTG, check if watchdog reset is needed
1426
1434
  if (
1427
1435
  this.port.getInfo().usbProductId === USB_JTAG_SERIAL_PID &&
1428
1436
  (this.chipFamily === CHIP_FAMILY_ESP32S2 ||
1429
1437
  this.chipFamily === CHIP_FAMILY_ESP32S3)
1430
1438
  ) {
1431
- await this.watchdogReset();
1432
- this.logger.log("Watchdog reset (USB-OTG).");
1439
+ // ESP32-S2/S3: Clear force download boot mode first
1440
+ try {
1441
+ // Clear force download boot mode to avoid chip being stuck in download mode
1442
+ // after reset. Workaround for issue:
1443
+ // https://github.com/espressif/arduino-esp32/issues/6762
1444
+ const RTC_CNTL_OPTION1_REG =
1445
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1446
+ ? ESP32S2_RTC_CNTL_OPTION1_REG
1447
+ : ESP32S3_RTC_CNTL_OPTION1_REG;
1448
+ const RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK =
1449
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1450
+ ? ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK
1451
+ : ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK;
1452
+
1453
+ await this.writeRegister(
1454
+ RTC_CNTL_OPTION1_REG,
1455
+ 0,
1456
+ RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK,
1457
+ 0,
1458
+ );
1459
+ } catch (e) {
1460
+ // Skip invalid response and continue reset (can happen when monitoring during reset)
1461
+ this.logger.log(
1462
+ "Warning: Could not clear force download boot mode:",
1463
+ e,
1464
+ );
1465
+ }
1466
+
1467
+ // Check the strapping register to see if we can perform a watchdog reset
1468
+ // Only use watchdog reset if GPIO0 is low AND force download boot mode is not set
1469
+ let useWatchdogReset = false;
1470
+ try {
1471
+ const GPIO_STRAP_REG =
1472
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1473
+ ? ESP32S2_GPIO_STRAP_REG
1474
+ : ESP32S3_GPIO_STRAP_REG;
1475
+ const GPIO_STRAP_SPI_BOOT_MASK =
1476
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1477
+ ? ESP32S2_GPIO_STRAP_SPI_BOOT_MASK
1478
+ : ESP32S3_GPIO_STRAP_SPI_BOOT_MASK;
1479
+ const RTC_CNTL_OPTION1_REG =
1480
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1481
+ ? ESP32S2_RTC_CNTL_OPTION1_REG
1482
+ : ESP32S3_RTC_CNTL_OPTION1_REG;
1483
+ const RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK =
1484
+ this.chipFamily === CHIP_FAMILY_ESP32S2
1485
+ ? ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK
1486
+ : ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK;
1487
+
1488
+ const strapReg = await this.readRegister(GPIO_STRAP_REG);
1489
+ const forceDlReg = await this.readRegister(RTC_CNTL_OPTION1_REG);
1490
+
1491
+ // GPIO0 low (download mode) AND force download boot not set
1492
+ if (
1493
+ (strapReg & GPIO_STRAP_SPI_BOOT_MASK) === 0 &&
1494
+ (forceDlReg & RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK) === 0
1495
+ ) {
1496
+ useWatchdogReset = true;
1497
+ }
1498
+ } catch (e) {
1499
+ // If we can't read the registers, use watchdog reset as fallback
1500
+ this.logger.log(
1501
+ "Warning: Could not read strap/option registers, using watchdog reset:",
1502
+ e,
1503
+ );
1504
+ useWatchdogReset = true;
1505
+ }
1506
+
1507
+ if (useWatchdogReset) {
1508
+ await this.watchdogReset();
1509
+ this.logger.log("Watchdog reset (USB-OTG).");
1510
+ } else {
1511
+ // Not in download mode, can use DTR/RTS reset
1512
+ // But USB-OTG doesn't have DTR/RTS, so fall back to watchdog
1513
+ await this.watchdogReset();
1514
+ this.logger.log("Watchdog reset (USB-OTG, normal boot).");
1515
+ }
1433
1516
  } else if (this.isWebUSB()) {
1434
1517
  // WebUSB: Use longer delays for better compatibility
1435
1518
  await this.setRTSWebUSB(true); // EN->LOW