tasmota-webserial-esptool 6.3.4 → 6.4.0
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/.github/workflows/build_upload.yml +1 -1
- package/.github/workflows/ci.yml +1 -1
- package/README.md +3 -2
- package/dist/const.d.ts +13 -1
- package/dist/const.js +27 -0
- package/dist/esp_loader.js +5 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/stubs/esp32c61.json +8 -0
- package/dist/stubs/index.js +4 -1
- package/dist/web/esp32c61-CzCdsydk.js +1 -0
- package/dist/web/index.js +1 -1
- package/index.html +2 -2
- package/js/modules/esp32c61-CzCdsydk.js +1 -0
- package/js/modules/esptool.js +1 -1
- package/package.json +6 -6
- package/src/const.ts +29 -0
- package/src/esp_loader.ts +5 -0
- package/src/index.ts +1 -0
- package/src/stubs/index.ts +3 -0
package/.github/workflows/ci.yml
CHANGED
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
JavaScript package to install firmware on ESP devices via the browser using WebSerial.
|
|
4
4
|
|
|
5
|
-
This fork
|
|
5
|
+
This fork is **not** based on esptool.js
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
## Local development
|
|
@@ -14,6 +14,7 @@ This fork supports additionally the ESP32-P4
|
|
|
14
14
|
|
|
15
15
|
## Origin
|
|
16
16
|
|
|
17
|
-
This project was originally written by [Melissa LeBlanc-Williams](https://github.com/makermelissa). [Nabu Casa](https://www.nabucasa.com) ported the code over to TypeScript and in March 2022 took over maintenance from Adafruit. In July 2022, the Nabucasa stopped maintaining the project in favor of an official, but very early release of Espressif's [esptool-js](https://github.com/espressif/esptool-js/). Due to the instability of the tool, Adafruit updated their fork with Nabucasa's changes in November 2022 and took over maintenance once again.
|
|
17
|
+
This project was originally written by [Melissa LeBlanc-Williams](https://github.com/makermelissa). [Nabu Casa](https://www.nabucasa.com) ported the code over to TypeScript and in March 2022 took over maintenance from Adafruit. In July 2022, the Nabucasa stopped maintaining the project in favor of an official, but very early release of Espressif's [esptool-js](https://github.com/espressif/esptool-js/). Due to the instability of the tool, Adafruit updated their fork with Nabucasa's changes in November 2022 and took over maintenance once again. In December 2024, the tool was once again updated to use Espressif's esptool-js as the backend.
|
|
18
|
+
Since Adafruit is slow in adding new MCUs (support for C2, C6 and H2 is from this fork) and uses now esptool.js which is still buggy, i decided to maintain my own version and do not provide PRs upstream anymore.
|
|
18
19
|
|
|
19
20
|
Copyright: Adafruit, Nabu Casa and Johann Obermeier
|
package/dist/const.d.ts
CHANGED
|
@@ -122,6 +122,17 @@ export declare const ESP32C6_SPI_MISO_DLEN_OFFS = 40;
|
|
|
122
122
|
export declare const ESP32C6_SPI_W0_OFFS = 88;
|
|
123
123
|
export declare const ESP32C6_UART_DATE_REG_ADDR = 1610612860;
|
|
124
124
|
export declare const ESP32C6_BOOTLOADER_FLASH_OFFSET = 0;
|
|
125
|
+
export declare const ESP32C61_SPI_REG_BASE = 1610625024;
|
|
126
|
+
export declare const ESP32C61_BASEFUSEADDR = 1611352064;
|
|
127
|
+
export declare const ESP32C61_MACFUSEADDR: number;
|
|
128
|
+
export declare const ESP32C61_SPI_USR_OFFS = 24;
|
|
129
|
+
export declare const ESP32C61_SPI_USR1_OFFS = 28;
|
|
130
|
+
export declare const ESP32C61_SPI_USR2_OFFS = 32;
|
|
131
|
+
export declare const ESP32C61_SPI_MOSI_DLEN_OFFS = 36;
|
|
132
|
+
export declare const ESP32C61_SPI_MISO_DLEN_OFFS = 40;
|
|
133
|
+
export declare const ESP32C61_SPI_W0_OFFS = 88;
|
|
134
|
+
export declare const ESP32C61_UART_DATE_REG_ADDR = 1610612860;
|
|
135
|
+
export declare const ESP32C61_BOOTLOADER_FLASH_OFFSET = 0;
|
|
125
136
|
export declare const ESP32H2_SPI_REG_BASE = 1610625024;
|
|
126
137
|
export declare const ESP32H2_BASEFUSEADDR = 1610719232;
|
|
127
138
|
export declare const ESP32H2_MACFUSEADDR: number;
|
|
@@ -167,9 +178,10 @@ export declare const CHIP_FAMILY_ESP32C2 = 12994;
|
|
|
167
178
|
export declare const CHIP_FAMILY_ESP32C3 = 12995;
|
|
168
179
|
export declare const CHIP_FAMILY_ESP32C5 = 12997;
|
|
169
180
|
export declare const CHIP_FAMILY_ESP32C6 = 12998;
|
|
181
|
+
export declare const CHIP_FAMILY_ESP32C61 = 207969;
|
|
170
182
|
export declare const CHIP_FAMILY_ESP32H2 = 12914;
|
|
171
183
|
export declare const CHIP_FAMILY_ESP32P4 = 12928;
|
|
172
|
-
export type ChipFamily = typeof CHIP_FAMILY_ESP8266 | typeof CHIP_FAMILY_ESP32 | typeof CHIP_FAMILY_ESP32S2 | typeof CHIP_FAMILY_ESP32S3 | typeof CHIP_FAMILY_ESP32C2 | typeof CHIP_FAMILY_ESP32C3 | typeof CHIP_FAMILY_ESP32C5 | typeof CHIP_FAMILY_ESP32C6 | typeof CHIP_FAMILY_ESP32H2 | typeof CHIP_FAMILY_ESP32P4;
|
|
184
|
+
export type ChipFamily = typeof CHIP_FAMILY_ESP8266 | typeof CHIP_FAMILY_ESP32 | typeof CHIP_FAMILY_ESP32S2 | typeof CHIP_FAMILY_ESP32S3 | typeof CHIP_FAMILY_ESP32C2 | typeof CHIP_FAMILY_ESP32C3 | typeof CHIP_FAMILY_ESP32C5 | typeof CHIP_FAMILY_ESP32C6 | typeof CHIP_FAMILY_ESP32C61 | typeof CHIP_FAMILY_ESP32H2 | typeof CHIP_FAMILY_ESP32P4;
|
|
173
185
|
interface ChipInfo {
|
|
174
186
|
[magicValue: number]: {
|
|
175
187
|
name: string;
|
package/dist/const.js
CHANGED
|
@@ -127,6 +127,17 @@ export const ESP32C6_SPI_MISO_DLEN_OFFS = 0x28;
|
|
|
127
127
|
export const ESP32C6_SPI_W0_OFFS = 0x58;
|
|
128
128
|
export const ESP32C6_UART_DATE_REG_ADDR = 0x6000007c;
|
|
129
129
|
export const ESP32C6_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
130
|
+
export const ESP32C61_SPI_REG_BASE = 0x60003000;
|
|
131
|
+
export const ESP32C61_BASEFUSEADDR = 0x600b4800;
|
|
132
|
+
export const ESP32C61_MACFUSEADDR = 0x600b4800 + 0x044;
|
|
133
|
+
export const ESP32C61_SPI_USR_OFFS = 0x18;
|
|
134
|
+
export const ESP32C61_SPI_USR1_OFFS = 0x1c;
|
|
135
|
+
export const ESP32C61_SPI_USR2_OFFS = 0x20;
|
|
136
|
+
export const ESP32C61_SPI_MOSI_DLEN_OFFS = 0x24;
|
|
137
|
+
export const ESP32C61_SPI_MISO_DLEN_OFFS = 0x28;
|
|
138
|
+
export const ESP32C61_SPI_W0_OFFS = 0x58;
|
|
139
|
+
export const ESP32C61_UART_DATE_REG_ADDR = 0x6000007c;
|
|
140
|
+
export const ESP32C61_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
130
141
|
export const ESP32H2_SPI_REG_BASE = 0x60003000;
|
|
131
142
|
export const ESP32H2_BASEFUSEADDR = 0x6001a000;
|
|
132
143
|
export const ESP32H2_MACFUSEADDR = 0x6001a000 + 0x044;
|
|
@@ -160,6 +171,7 @@ export const CHIP_FAMILY_ESP32C2 = 0x32c2;
|
|
|
160
171
|
export const CHIP_FAMILY_ESP32C3 = 0x32c3;
|
|
161
172
|
export const CHIP_FAMILY_ESP32C5 = 0x32c5;
|
|
162
173
|
export const CHIP_FAMILY_ESP32C6 = 0x32c6;
|
|
174
|
+
export const CHIP_FAMILY_ESP32C61 = 0x32c61;
|
|
163
175
|
export const CHIP_FAMILY_ESP32H2 = 0x3272;
|
|
164
176
|
export const CHIP_FAMILY_ESP32P4 = 0x3280;
|
|
165
177
|
export const CHIP_DETECT_MAGIC_VALUES = {
|
|
@@ -180,6 +192,7 @@ export const CHIP_DETECT_MAGIC_VALUES = {
|
|
|
180
192
|
0x5C501458: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
|
|
181
193
|
0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
182
194
|
0x2ce0806f: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
|
|
195
|
+
0x7211606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
183
196
|
0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
184
197
|
0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
185
198
|
0x0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
@@ -339,6 +352,20 @@ export const getSpiFlashAddresses = (chipFamily) => {
|
|
|
339
352
|
uartDateReg: ESP32C6_UART_DATE_REG_ADDR,
|
|
340
353
|
flashOffs: ESP32C6_BOOTLOADER_FLASH_OFFSET,
|
|
341
354
|
};
|
|
355
|
+
case CHIP_FAMILY_ESP32C61:
|
|
356
|
+
return {
|
|
357
|
+
regBase: ESP32C61_SPI_REG_BASE,
|
|
358
|
+
baseFuse: ESP32C61_BASEFUSEADDR,
|
|
359
|
+
macFuse: ESP32C61_MACFUSEADDR,
|
|
360
|
+
usrOffs: ESP32C61_SPI_USR_OFFS,
|
|
361
|
+
usr1Offs: ESP32C61_SPI_USR1_OFFS,
|
|
362
|
+
usr2Offs: ESP32C61_SPI_USR2_OFFS,
|
|
363
|
+
mosiDlenOffs: ESP32C61_SPI_MOSI_DLEN_OFFS,
|
|
364
|
+
misoDlenOffs: ESP32C61_SPI_MISO_DLEN_OFFS,
|
|
365
|
+
w0Offs: ESP32C61_SPI_W0_OFFS,
|
|
366
|
+
uartDateReg: ESP32C61_UART_DATE_REG_ADDR,
|
|
367
|
+
flashOffs: ESP32C61_BOOTLOADER_FLASH_OFFSET,
|
|
368
|
+
};
|
|
342
369
|
case CHIP_FAMILY_ESP32H2:
|
|
343
370
|
return {
|
|
344
371
|
regBase: ESP32H2_SPI_REG_BASE,
|
package/dist/esp_loader.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, 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, 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, CHIP_ERASE_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, SlipReadError, } from "./const";
|
|
1
|
+
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_ESP32P4, 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, 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, CHIP_ERASE_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, SlipReadError, } from "./const";
|
|
2
2
|
import { getStubCode } from "./stubs";
|
|
3
3
|
import { hexFormatter, sleep, slipEncode, toHex } from "./util";
|
|
4
4
|
// @ts-ignore
|
|
@@ -179,6 +179,7 @@ export class ESPLoader extends EventTarget {
|
|
|
179
179
|
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
180
180
|
this.chipFamily == CHIP_FAMILY_ESP32C5 ||
|
|
181
181
|
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
182
|
+
this.chipFamily == CHIP_FAMILY_ESP32C61 ||
|
|
182
183
|
this.chipFamily == CHIP_FAMILY_ESP32H2 ||
|
|
183
184
|
this.chipFamily == CHIP_FAMILY_ESP32P4) {
|
|
184
185
|
macAddr[0] = (mac1 >> 8) & 0xff;
|
|
@@ -227,6 +228,7 @@ export class ESPLoader extends EventTarget {
|
|
|
227
228
|
CHIP_FAMILY_ESP32C3,
|
|
228
229
|
CHIP_FAMILY_ESP32C5,
|
|
229
230
|
CHIP_FAMILY_ESP32C6,
|
|
231
|
+
CHIP_FAMILY_ESP32C61,
|
|
230
232
|
CHIP_FAMILY_ESP32H2,
|
|
231
233
|
CHIP_FAMILY_ESP32P4,
|
|
232
234
|
].includes(this.chipFamily)) {
|
|
@@ -586,6 +588,7 @@ export class ESPLoader extends EventTarget {
|
|
|
586
588
|
CHIP_FAMILY_ESP32C3,
|
|
587
589
|
CHIP_FAMILY_ESP32C5,
|
|
588
590
|
CHIP_FAMILY_ESP32C6,
|
|
591
|
+
CHIP_FAMILY_ESP32C61,
|
|
589
592
|
CHIP_FAMILY_ESP32H2,
|
|
590
593
|
CHIP_FAMILY_ESP32P4,
|
|
591
594
|
].includes(this.chipFamily)) {
|
|
@@ -614,6 +617,7 @@ export class ESPLoader extends EventTarget {
|
|
|
614
617
|
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
615
618
|
this.chipFamily == CHIP_FAMILY_ESP32C5 ||
|
|
616
619
|
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
620
|
+
this.chipFamily == CHIP_FAMILY_ESP32C61 ||
|
|
617
621
|
this.chipFamily == CHIP_FAMILY_ESP32H2 ||
|
|
618
622
|
this.chipFamily == CHIP_FAMILY_ESP32P4) {
|
|
619
623
|
buffer = buffer.concat(pack("<I", encrypted ? 1 : 0));
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import { Logger } from "./const";
|
|
|
2
2
|
import { ESPLoader } from "./esp_loader";
|
|
3
3
|
export type { Logger } from "./const";
|
|
4
4
|
export { ESPLoader } from "./esp_loader";
|
|
5
|
-
export { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, } from "./const";
|
|
5
|
+
export { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, } from "./const";
|
|
6
6
|
export declare const connect: (logger: Logger) => Promise<ESPLoader>;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ESP_ROM_BAUD } from "./const";
|
|
2
2
|
import { ESPLoader } from "./esp_loader";
|
|
3
3
|
export { ESPLoader } from "./esp_loader";
|
|
4
|
-
export { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, } from "./const";
|
|
4
|
+
export { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, } from "./const";
|
|
5
5
|
export const connect = async (logger) => {
|
|
6
6
|
// - Request a port and open a connection.
|
|
7
7
|
const port = await navigator.serial.requestPort();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entry": 1082131984,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1082130432,
|
|
5
|
+
"data": "FECAQJYJgEDyCYBAggqAQGQLgEDQC4BAfguAQIQIgEAgC4BAYAuAQJ4KgEA0CIBA0gqAQDQIgEBwCYBAtgmAQPIJgECCCoBAggmAQKwIgEDgCIBAfgmAQCQOgEDyCYBA6gyAQNwNgEB0B4BABA6AQHQHgEB0B4BAdAeAQHQHgEB0B4BAdAeAQHQHgEB0B4BAhgyAQHQHgEAIDYBA3A2AQA==",
|
|
6
|
+
"data_start": 1082223536,
|
|
7
|
+
"bss_start": 1082146816
|
|
8
|
+
}
|
package/dist/stubs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4 } from "../const";
|
|
1
|
+
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4 } from "../const";
|
|
2
2
|
import { toByteArray } from "../util";
|
|
3
3
|
export const getStubCode = async (chipFamily) => {
|
|
4
4
|
let stubcode;
|
|
@@ -26,6 +26,9 @@ export const getStubCode = async (chipFamily) => {
|
|
|
26
26
|
else if (chipFamily == CHIP_FAMILY_ESP32C6) {
|
|
27
27
|
stubcode = await import("./esp32c6.json");
|
|
28
28
|
}
|
|
29
|
+
else if (chipFamily == CHIP_FAMILY_ESP32C61) {
|
|
30
|
+
stubcode = await import("./esp32c61.json");
|
|
31
|
+
}
|
|
29
32
|
else if (chipFamily == CHIP_FAMILY_ESP32H2) {
|
|
30
33
|
stubcode = await import("./esp32h2.json");
|
|
31
34
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=1082131984,B="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",E=1082130432,g="FECAQJYJgEDyCYBAggqAQGQLgEDQC4BAfguAQIQIgEAgC4BAYAuAQJ4KgEA0CIBA0gqAQDQIgEBwCYBAtgmAQPIJgECCCoBAggmAQKwIgEDgCIBAfgmAQCQOgEDyCYBA6gyAQNwNgEB0B4BABA6AQHQHgEB0B4BAdAeAQHQHgEB0B4BAdAeAQHQHgEB0B4BAhgyAQHQHgEAIDYBA3A2AQA==",w=1082223536,Q=1082146816,c={entry:A,text:B,text_start:E,data:g,data_start:w,bss_start:Q};export{Q as bss_start,g as data,w as data_start,c as default,A as entry,B as text,E as text_start};
|
package/dist/web/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=t=>{let e=[];for(let a=0;a<t.length;a++){let s=t.charCodeAt(a);s<=255&&e.push(s)}return e},e=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{let a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),i={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB"},r=115200,n=t(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),h=33382,l=50,o=12882,_=12883,d=12994,f=12995,u=12997,c=12998,g=12914,w=12928,p={4293968129:{name:"ESP8266",family:h},15736195:{name:"ESP32",family:l},1990:{name:"ESP32-S2",family:o},9:{name:"ESP32-S3",family:_},1867591791:{name:"ESP32-C2",family:d},2084675695:{name:"ESP32-C2",family:d},203546735:{name:"ESP32-C2",family:d},1763790959:{name:"ESP32-C3",family:f},456216687:{name:"ESP32-C3",family:f},1216438383:{name:"ESP32-C3",family:f},1130455151:{name:"ESP32-C3",family:f},1607549039:{name:"ESP32-C5",family:u},285294703:{name:"ESP32-C5",family:u},1675706479:{name:"ESP32-C5",family:u},1548751960:{name:"ESP32-C5",family:u},3619110528:{name:"ESP32-H2",family:g},752910447:{name:"ESP32-C6",family:c},182303440:{name:"ESP32-P4",family:w},117676761:{name:"ESP32-P4",family:w},0:{name:"ESP32-P4",family:w}},m=3e3,y=6e5,b=(t,e)=>{let a=Math.floor(t*(e/486));return a<m?m:a},v=t=>{switch(t){case l:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case o:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case _:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case h:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case d:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case u:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case c:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1610719232,macFuse:1610719300,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1342754816,baseFuse:1343410176,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,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 k extends Error{constructor(t){super(t),this.name="SlipReadError"}}const z=async e=>{let a;return e==l?a=await import("./esp32-BNIFdu1P.js"):e==o?a=await import("./esp32s2-Bk4mqADi.js"):e==_?a=await import("./esp32s3-Df3OUCOC.js"):e==h?a=await import("./esp8266-CQFcqJ_a.js"):e==d?a=await import("./esp32c2-BqxquOKw.js"):e==f?a=await import("./esp32c3-BOOqe8me.js"):e==u?a=await import("./esp32c5-C8uE-s4t.js"):e==c?a=await import("./esp32c6-Cg5qYgg7.js"):e==g?a=await import("./esp32h2-DZa_lpff.js"):e==w&&(a=await import("./esp32p4-DyGqUAeZ.js")),{...a,text:t(atob(a.text)),data:t(atob(a.data))}};function S(t){let e=t.length;for(;--e>=0;)t[e]=0}const U=256,F=286,D=30,x=15,R=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]),O=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]),I=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),A=new Array(576);S(A);const B=new Array(60);S(B);const T=new Array(512);S(T);const C=new Array(256);S(C);const L=new Array(29);S(L);const P=new Array(D);function Z(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let M,N,$;function H(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}S(P);const j=t=>t<256?T[t]:T[256+(t>>>7)],V=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},W=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,V(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},K=(t,e,a)=>{W(t,a[2*e],a[2*e+1])},Y=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},q=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=x;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=Y(s[e]++,e))}},G=t=>{let e;for(e=0;e<F;e++)t.dyn_ltree[2*e]=0;for(e=0;e<D;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},X=t=>{t.bi_valid>8?V(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Q=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},J=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&Q(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!Q(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},tt=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?K(t,i,e):(r=C[i],K(t,r+U+1,e),n=R[r],0!==n&&(i-=L[r],W(t,i,n)),s--,r=j(s),K(t,r,a),n=O[r],0!==n&&(s-=P[r],W(t,s,n)))}while(h<t.sym_next);K(t,256,e)},et=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,l,o=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=o=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=o<2?++o:0,a[2*l]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=s[2*l+1]);for(e.max_code=o,n=t.heap_len>>1;n>=1;n--)J(t,a,n);l=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],J(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*l]=a[2*n]+a[2*h],t.depth[l]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=l,t.heap[1]=l++,J(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,l=e.stat_desc.max_length;let o,_,d,f,u,c,g=0;for(f=0;f<=x;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;o<573;o++)_=t.heap[o],f=a[2*a[2*_+1]+1]+1,f>l&&(f=l,g++),a[2*_+1]=f,_>s||(t.bl_count[f]++,u=0,_>=h&&(u=n[_-h]),c=a[2*_],t.opt_len+=c*(f+u),r&&(t.static_len+=c*(i[2*_+1]+u)));if(0!==g){do{for(f=l-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[l]--,g-=2}while(g>0);for(f=l;0!==f;f--)for(_=t.bl_count[f];0!==_;)d=t.heap[--o],d>s||(a[2*d+1]!==f&&(t.opt_len+=(f-a[2*d+1])*a[2*d],a[2*d+1]=f),_--)}})(t,e),q(a,o,t.bl_count)},at=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<l&&i===n||(h<o?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4))},st=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<l&&i===n)){if(h<o)do{K(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(K(t,i,t.bl_tree),h--),K(t,16,t.bl_tree),W(t,h-3,2)):h<=10?(K(t,17,t.bl_tree),W(t,h-3,3)):(K(t,18,t.bl_tree),W(t,h-11,7));h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4)}};let it=!1;const rt=(t,e,a,s)=>{W(t,0+(s?1:0),3),X(t),V(t,a),V(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var nt=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<U;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),et(t,t.l_desc),et(t,t.d_desc),n=(t=>{let e;for(at(t,t.dyn_ltree,t.l_desc.max_code),at(t,t.dyn_dtree,t.d_desc.max_code),et(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*E[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?rt(t,e,a,s):4===t.strategy||r===i?(W(t,2+(s?1:0),3),tt(t,A,B)):(W(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(W(t,e-257,5),W(t,a-1,5),W(t,s-4,4),i=0;i<s;i++)W(t,t.bl_tree[2*E[i]+1],3);st(t,t.dyn_ltree,e-1),st(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),tt(t,t.dyn_ltree,t.dyn_dtree)),G(t),s&&X(t)},ht={_tr_init:t=>{it||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(L[s]=a,t=0;t<1<<R[s];t++)C[a++]=s;for(C[a-1]=s,i=0,s=0;s<16;s++)for(P[s]=i,t=0;t<1<<O[s];t++)T[i++]=s;for(i>>=7;s<D;s++)for(P[s]=i<<7,t=0;t<1<<O[s]-7;t++)T[256+i++]=s;for(e=0;e<=x;e++)r[e]=0;for(t=0;t<=143;)A[2*t+1]=8,t++,r[8]++;for(;t<=255;)A[2*t+1]=9,t++,r[9]++;for(;t<=279;)A[2*t+1]=7,t++,r[7]++;for(;t<=287;)A[2*t+1]=8,t++,r[8]++;for(q(A,287,r),t=0;t<D;t++)B[2*t+1]=5,B[2*t]=Y(t,5);M=new Z(A,R,257,F,x),N=new Z(B,O,0,D,x),$=new Z(new Array(0),I,0,19,7)})(),it=!0),t.l_desc=new H(t.dyn_ltree,M),t.d_desc=new H(t.dyn_dtree,N),t.bl_desc=new H(t.bl_tree,$),t.bi_buf=0,t.bi_valid=0,G(t)},_tr_stored_block:rt,_tr_flush_block:nt,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(C[a]+U+1)]++,t.dyn_dtree[2*j(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{W(t,2,3),K(t,256,A),(t=>{16===t.bi_valid?(V(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 lt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const ot=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var _t=(t,e,a,s)=>{const i=ot,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},dt={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"},ft={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:ut,_tr_stored_block:ct,_tr_flush_block:gt,_tr_tally:wt,_tr_align:pt}=ht,{Z_NO_FLUSH:mt,Z_PARTIAL_FLUSH:yt,Z_FULL_FLUSH:bt,Z_FINISH:vt,Z_BLOCK:kt,Z_OK:zt,Z_STREAM_END:St,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:Ft,Z_BUF_ERROR:Dt,Z_DEFAULT_COMPRESSION:xt,Z_FILTERED:Rt,Z_HUFFMAN_ONLY:Ot,Z_RLE:It,Z_FIXED:Et,Z_DEFAULT_STRATEGY:At,Z_UNKNOWN:Bt,Z_DEFLATED:Tt}=ft,Ct=258,Lt=262,Pt=42,Zt=113,Mt=666,Nt=(t,e)=>(t.msg=dt[e],e),$t=t=>2*t-(t>4?9:0),Ht=t=>{let e=t.length;for(;--e>=0;)t[e]=0},jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Vt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const Wt=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Kt=(t,e)=>{gt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Wt(t.strm)},Yt=(t,e)=>{t.pending_buf[t.pending++]=e},qt=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Gt=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=lt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=_t(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},Xt=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const l=t.strstart>t.w_size-Lt?t.strstart-(t.w_size-Lt):0,o=t.window,_=t.w_mask,d=t.prev,f=t.strstart+Ct;let u=o[r+n-1],c=o[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,o[a+n]===c&&o[a+n-1]===u&&o[a]===o[r]&&o[++a]===o[r+1]){r+=2,a++;do{}while(o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&r<f);if(s=Ct-(f-r),r=f-Ct,s>n){if(t.match_start=e,n=s,s>=h)break;u=o[r+n-1],c=o[r+n]}}}while((e=d[e&_])>l&&0!==--i);return n<=t.lookahead?n:t.lookahead},Qt=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Lt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),jt(t),s+=e),0===t.strm.avail_in)break;if(a=Gt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Vt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Vt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Lt&&0!==t.strm.avail_in)},Jt=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==vt||e===mt||a!==s+t.strm.avail_in))break;n=e===vt&&a===s+t.strm.avail_in?1:0,ct(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,Wt(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(Gt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==mt&&e!==vt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(Gt(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===vt)&&e!==mt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===vt&&0===t.strm.avail_in&&a===s?1:0,ct(t,t.block_start,a,n),t.block_start+=a,Wt(t.strm)),n?3:1)},te=(t,e)=>{let a,s;for(;;){if(t.lookahead<Lt){if(Qt(t),t.lookahead<Lt&&e===mt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-Lt&&(t.match_length=Xt(t,a)),t.match_length>=3)if(s=wt(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=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+1]);else s=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2},ee=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<Lt){if(Qt(t),t.lookahead<Lt&&e===mt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-Lt&&(t.match_length=Xt(t,a),t.match_length<=5&&(t.strategy===Rt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=wt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(Kt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=wt(t,0,t.window[t.strstart-1]),s&&Kt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=wt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2};function ae(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const se=[new ae(0,0,0,0,Jt),new ae(4,4,8,4,te),new ae(4,5,16,8,te),new ae(4,6,32,32,te),new ae(4,4,16,16,ee),new ae(8,16,32,32,ee),new ae(8,16,128,128,ee),new ae(8,32,128,256,ee),new ae(32,128,258,1024,ee),new ae(32,258,258,4096,ee)];function ie(){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=Tt,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),Ht(this.dyn_ltree),Ht(this.dyn_dtree),Ht(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),Ht(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Ht(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 re=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Pt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Zt&&e.status!==Mt?1:0},ne=t=>{if(re(t))return Nt(t,Ut);t.total_in=t.total_out=0,t.data_type=Bt;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?Pt:Zt,t.adler=2===e.wrap?0:1,e.last_flush=-2,ut(e),zt},he=t=>{const e=ne(t);var a;return e===zt&&((a=t.state).window_size=2*a.w_size,Ht(a.head),a.max_lazy_match=se[a.level].max_lazy,a.good_match=se[a.level].good_length,a.nice_match=se[a.level].nice_length,a.max_chain_length=se[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},le=(t,e,a,s,i,r)=>{if(!t)return Ut;let n=1;if(e===xt&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Tt||s<8||s>15||e<0||e>9||r<0||r>Et||8===s&&1!==n)return Nt(t,Ut);8===s&&(s=9);const h=new ie;return t.state=h,h.strm=t,h.status=Pt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,he(t)};var oe={deflateInit:(t,e)=>le(t,e,Tt,15,8,At),deflateInit2:le,deflateReset:he,deflateResetKeep:ne,deflateSetHeader:(t,e)=>re(t)||2!==t.state.wrap?Ut:(t.state.gzhead=e,zt),deflate:(t,e)=>{if(re(t)||e>kt||e<0)return t?Nt(t,Ut):Ut;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Mt&&e!==vt)return Nt(t,0===t.avail_out?Dt:Ut);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(Wt(t),0===t.avail_out)return a.last_flush=-1,zt}else if(0===t.avail_in&&$t(e)<=$t(s)&&e!==vt)return Nt(t,Dt);if(a.status===Mt&&0!==t.avail_in)return Nt(t,Dt);if(a.status===Pt&&0===a.wrap&&(a.status=Zt),a.status===Pt){let e=Tt+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Ot||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,qt(a,e),0!==a.strstart&&(qt(a,t.adler>>>16),qt(a,65535&t.adler)),t.adler=1,a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt}if(57===a.status)if(t.adler=0,Yt(a,31),Yt(a,139),Yt(a,8),a.gzhead)Yt(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),Yt(a,255&a.gzhead.time),Yt(a,a.gzhead.time>>8&255),Yt(a,a.gzhead.time>>16&255),Yt(a,a.gzhead.time>>24&255),Yt(a,9===a.level?2:a.strategy>=Ot||a.level<2?4:0),Yt(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(Yt(a,255&a.gzhead.extra.length),Yt(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=_t(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,9===a.level?2:a.strategy>=Ot||a.level<2?4:0),Yt(a,3),a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=_t(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,Wt(t),0!==a.pending)return a.last_flush=-1,zt;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=_t(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),Wt(t),0!==a.pending)return a.last_flush=-1,zt;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,Yt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),Wt(t),0!==a.pending)return a.last_flush=-1,zt;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,Yt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(Wt(t),0!==a.pending))return a.last_flush=-1,zt;Yt(a,255&t.adler),Yt(a,t.adler>>8&255),t.adler=0}if(a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt}if(0!==t.avail_in||0!==a.lookahead||e!==mt&&a.status!==Mt){let s=0===a.level?Jt(a,e):a.strategy===Ot?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Qt(t),0===t.lookahead)){if(e===mt)return 1;break}if(t.match_length=0,a=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===It?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Ct){if(Qt(t),t.lookahead<=Ct&&e===mt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Ct;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Ct-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=wt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2})(a,e):se[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Mt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),zt;if(2===s&&(e===yt?pt(a):e!==kt&&(ct(a,0,0,!1),e===bt&&(Ht(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),Wt(t),0===t.avail_out))return a.last_flush=-1,zt}return e!==vt?zt:a.wrap<=0?St:(2===a.wrap?(Yt(a,255&t.adler),Yt(a,t.adler>>8&255),Yt(a,t.adler>>16&255),Yt(a,t.adler>>24&255),Yt(a,255&t.total_in),Yt(a,t.total_in>>8&255),Yt(a,t.total_in>>16&255),Yt(a,t.total_in>>24&255)):(qt(a,t.adler>>>16),qt(a,65535&t.adler)),Wt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?zt:St)},deflateEnd:t=>{if(re(t))return Ut;const e=t.state.status;return t.state=null,e===Zt?Nt(t,Ft):zt},deflateSetDictionary:(t,e)=>{let a=e.length;if(re(t))return Ut;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Pt||s.lookahead)return Ut;if(1===i&&(t.adler=lt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Ht(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Qt(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Vt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,Qt(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,zt},deflateInfo:"pako deflate (from Nodeca project)"};const _e=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var de=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)_e(a,e)&&(t[e]=a[e])}}return t},fe=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ue=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ue=!1}const ce=new Uint8Array(256);for(let t=0;t<256;t++)ce[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ce[254]=ce[254]=1;var ge=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var we=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 pe=Object.prototype.toString,{Z_NO_FLUSH:me,Z_SYNC_FLUSH:ye,Z_FULL_FLUSH:be,Z_FINISH:ve,Z_OK:ke,Z_STREAM_END:ze,Z_DEFAULT_COMPRESSION:Se,Z_DEFAULT_STRATEGY:Ue,Z_DEFLATED:Fe}=ft;function De(t){this.options=de({level:Se,method:Fe,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ue},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 we,this.strm.avail_out=0;let a=oe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ke)throw new Error(dt[a]);if(e.header&&oe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?ge(e.dictionary):"[object ArrayBuffer]"===pe.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=oe.deflateSetDictionary(this.strm,t),a!==ke)throw new Error(dt[a]);this._dict_set=!0}}De.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ve:me,"string"==typeof t?a.input=ge(t):"[object ArrayBuffer]"===pe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ye||r===be)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=oe.deflate(a,r),i===ze)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=oe.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ke;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},De.prototype.onData=function(t){this.chunks.push(t)},De.prototype.onEnd=function(t){t===ke&&(this.result=fe(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var xe={deflate:function(t,e){const a=new De(e);if(a.push(t,!0),a.err)throw a.msg||dt[a.err];return a.result}};const{deflate:Re}=xe;var Oe=Re;const Ie={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},q:{u:DataView.prototype.getInt64,p:DataView.prototype.setInt64,bytes:8},Q:{u:DataView.prototype.getUint64,p:DataView.prototype.setUint64,bytes:8}},Ee=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";let s=[],i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Ie))throw"Unhandled character '"+t+"' in pack format";let a=Ie[t].bytes,r=new DataView(new ArrayBuffer(a));Ie[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Ae=(t,e)=>{let a=0,s=[],i=!0;for(let e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Ie))throw"Unhandled character '"+t+"' in unpack format";let r=Ie[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);let h=Ie[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Be extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=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.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}async initialize(){await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.readLoop()),await this.sync();let t=await this.readRegister(1073745920),e=p[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;let s=v(this.getChipFamily()).macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(s+4*t);this.logger.log(`Chip type ${this.chipName}`)}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{for(;;){const{value:t,done:e}=await this._reader.read();if(e){this._reader.releaseLock();break}t&&0!==t.length&&this._inputBuffer.push(...Array.from(t))}}catch(t){console.error("Read loop got disconnected")}this.connected=!1,this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){this.logger.log("Try hard reset."),t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1)):(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.setRTS(!0),await this.sleep(100),await this.setRTS(!1)),await new Promise(t=>setTimeout(t,1e3))}macAddr(){let t,e=new Array(6).fill(0),a=this._efuses[0],s=this._efuses[1],i=this._efuses[2],r=this._efuses[3];if(this.chipFamily==h){if(0!=r)t=[r>>16&255,r>>8&255,255&r];else if(s>>16&255){if(1!=(s>>16&255))throw new Error("Couldnt determine OUI");t=[172,208,116]}else t=[24,254,52];e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=s>>8&255,e[4]=255&s,e[5]=a>>24&255}else if(this.chipFamily==l)e[0]=i>>8&255,e[1]=255&i,e[2]=s>>24&255,e[3]=s>>16&255,e[4]=s>>8&255,e[5]=255&s;else{if(this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w)throw new Error("Unknown chip family");e[0]=s>>8&255,e[1]=255&s,e[2]=a>>24&255,e[3]=a>>16&255,e[4]=a>>8&255,e[5]=255&a}return e}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));let e=Ee("<I",t);await this.sendCommand(10,e);let[s,i]=await this.getResponse(10);return s}async checkCommand(t,e,s=0,i=3e3){i=Math.min(i,12e5),await this.sendCommand(t,e,s);let[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let p=0;if(this.IS_STUB||this.chipFamily==h?p=2:[l,o,_,d,f,u,c,g,w].includes(this.chipFamily)?p=4:[2,4].includes(n.length)&&(p=n.length),n.length<p)throw new Error("Didn't get enough status bytes");let m=n.slice(-p,n.length);if(n=n.slice(0,-p),this.debug&&(this.logger.debug("status",m),this.logger.debug("value",r),this.logger.debug("data",n)),1==m[0])throw 5==m[1]?new Error("Invalid (unsupported) command "+a(t)):new Error("Command failure error code "+a(m[1]));return[r,n]}async sendCommand(t,e,a=0){let s=(t=>{let e=[192];for(let a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e})([...Ee("<BBHI",0,t,e.length,a),...e]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let i=null,r=!1,n=[];for(;;){let h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(10)}if(0==n.length){throw new k("Timed out waiting for packet "+(null===i?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+e(n));for(let t of n)if(null===i){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new k("Invalid head of packet ("+a(t)+")");i=[]}else if(r)if(r=!1,220==t)i.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new k("Invalid SLIP escape (0xdb, "+a(t)+")");i.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+e(i)),i;i.push(t)}}throw new k("Invalid state")}async getResponse(t,e=3e3){for(let s=0;s<100;s++){const s=await this.readPacket(e);if(s.length<8)continue;const[i,r,n,h]=Ae("<BBHI",s.slice(0,8));if(1!=i)continue;const l=s.slice(8);if(null==t||r==t)return[h,l];if(0!=l[0]&&5==l[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(let a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==h)throw new Error("Changing baud rate is not supported on the ESP8266");this.logger.log("Attempting to change baud rate to "+t+"...");try{let e=Ee("<II",t,this.IS_STUB?r:0);await this.checkCommand(15,e)}catch(e){throw console.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)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this.readLoop(),this.logger.log(`Changed baud rate to ${t}`)}catch(e){throw console.error(e),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){if(this._inputBuffer.length=0,await this._sync())return await s(100),!0;await s(100)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,n);for(let t=0;t<8;t++)try{let[t,e]=await this.getResponse(8,100);if(e.length>1&&0==e[0]&&0==e[1])return!0}catch(t){}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,s=0,i=!1){if(t.byteLength>=8){var r=Array.from(new Uint8Array(t,0,4));let e=r[0],s=r[2],i=r[3];this.logger.log(`Image header, Magic=${a(e)}, FlashMode=${a(s)}, FlashSizeFreq=${a(i)}`)}let n,h=t.byteLength,l=0,o=m;i?(n=Oe(new Uint8Array(t),{level:9}).buffer,l=n.byteLength,this.logger.log(`Writing data with filesize: ${h}. Compressed Size: ${l}`),o=await this.flashDeflBegin(h,l,s)):(this.logger.log(`Writing data with filesize: ${h}`),n=t,await this.flashBegin(h,s));let _=[],d=0,f=0,u=0,c=Date.now(),g=this.getFlashWriteSize(),w=i?l:h;for(;w-u>0;)this.debug&&this.logger.log(`Writing at ${a(s+d*g,8)} `),w-u>=g?_=Array.from(new Uint8Array(n,u,g)):(_=Array.from(new Uint8Array(n,u,w-u)),i||(_=_.concat(new Array(g-_.length).fill(255)))),i?await this.flashDeflBlock(_,d,o):await this.flashBlock(_,d),d+=1,f+=i?Math.round(_.length*h/l):_.length,u+=g,e(Math.min(f,h),h);this.logger.log("Took "+(Date.now()-c)+"ms to write "+w+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,s=!1){let i,r,n=this.getFlashWriteSize();!this.IS_STUB&&[l,o,_,d,f,u,c,g,w].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));let p,y=Math.floor((t+n-1)/n);i=this.chipFamily==h?this.getEraseSize(e,t):t,p=this.IS_STUB?m:b(3e4,t);let v=Date.now();return r=Ee("<IIII",i,y,n,e),this.chipFamily!=l&&this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w||(r=r.concat(Ee("<I",s?1:0))),this.logger.log("Erase size "+i+", blocks "+y+", block size "+a(n,4)+", offset "+a(e,4)+", encrypted "+(s?"yes":"no")),await this.checkCommand(2,r,0,p),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-v)+"ms to erase "+y+" bytes"),y}async flashDeflBegin(t=0,e=0,a=0,s=!1){let i,r=this.getFlashWriteSize(),n=Math.floor((e+r-1)/r),h=Math.floor((t+r-1)/r),l=0,o=0;return this.IS_STUB?(l=t,o=b(3e4,l)):(l=h*r,o=m),i=Ee("<IIII",l,n,r,a),await this.checkCommand(16,i,0,o),o}async flashFinish(){let t=Ee("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){let t=Ee("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return v(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ee("<IIII",t,e,a,s);i>0&&r.concat(Ee("<IIII",v(this.getChipFamily()).uartDateReg,0,0,i)),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){let s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{let s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,s=0){let i=v(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,l=r+i.usr2Offs,o=r+i.w0Offs,_=1<<18;if(s>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");let d=8*e.length,f=await this.readRegister(h),u=await this.readRegister(l),c=1<<31;if(s>0&&(c|=268435456),d>0&&(c|=134217728),await this.setDataLengths(i,d,s),await this.writeRegister(h,c),await this.writeRegister(l,7<<28|t),0==d)await this.writeRegister(o,0);else{e.concat(new Array(e.length%4).fill(0));let t=Ae("I".repeat(Math.floor(e.length/4)),e),s=o;this.logger.debug(`Words Length: ${t.length}`);for(const e of t)this.logger.debug(`Writing word ${a(e)} to register offset ${a(s)}`),await this.writeRegister(s,e),s+=4}await this.writeRegister(n,_),await this.waitDone(n,_);let g=await this.readRegister(o);return await this.writeRegister(h,f),await this.writeRegister(l,u),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");let t=await this.flashId(),e=255&t,s=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)}${s.toString(16)}`),this.flashSize=i[s],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){let a=4096,s=Math.floor((e+a-1)/a),i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ee("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){let e=this.IS_STUB?m:500,a=Ee("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(){const t=await z(this.chipFamily);let e,a=2048;this.logger.log("Uploading stub...");for(let e of["text","data"])if(Object.keys(t).includes(e)){let s=t[e+"_start"],i=t[e].length,r=Math.floor((i+a-1)/a);await this.memBegin(i,r,a,s);for(let s of Array(r).keys()){let r=s*a,n=r+a;n>i&&(n=i),await this.memBlock(t[e].slice(r,n),s)}}this.logger.log("Running stub..."),await this.memFinish(t.entry);const s=await this.readPacket(500);if(e=String.fromCharCode(...s),"OHAI"!=e)throw new Error("Failed to start stub. Unexpected response: "+e);this.logger.log("Stub is now running...");const i=new Te(this.port,this.logger,this);return await i.detectFlashSize(),i}async writeToStream(t){const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){console.error("Ignoring release lock error",t)}}async disconnect(){this._parent?await this._parent.disconnect():(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1)}}class Te extends Be{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,s,i){let r=await z(this.chipFamily),n=i,h=i+t;console.log(n,h),console.log(r.data_start,r.data.length,r.text_start,r.text.length);for(let[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.")}async eraseFlash(){await this.checkCommand(208,[],0,y)}}const Ce=async t=>{const e=await navigator.serial.requestPort();return t.log("Connecting..."),await e.open({baudRate:r}),t.log("Connected successfully."),new Be(e,t)};export{l as CHIP_FAMILY_ESP32,d as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,u as CHIP_FAMILY_ESP32C5,c as CHIP_FAMILY_ESP32C6,g as CHIP_FAMILY_ESP32H2,w as CHIP_FAMILY_ESP32P4,o as CHIP_FAMILY_ESP32S2,_ as CHIP_FAMILY_ESP32S3,h as CHIP_FAMILY_ESP8266,Be as ESPLoader,Ce as connect};
|
|
1
|
+
const t=t=>{let e=[];for(let a=0;a<t.length;a++){let s=t.charCodeAt(a);s<=255&&e.push(s)}return e},e=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{let a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),i={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB"},r=115200,n=t(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),h=33382,l=50,o=12882,_=12883,d=12994,f=12995,u=12997,c=12998,g=207969,w=12914,m=12928,p={4293968129:{name:"ESP8266",family:h},15736195:{name:"ESP32",family:l},1990:{name:"ESP32-S2",family:o},9:{name:"ESP32-S3",family:_},1867591791:{name:"ESP32-C2",family:d},2084675695:{name:"ESP32-C2",family:d},203546735:{name:"ESP32-C2",family:d},1763790959:{name:"ESP32-C3",family:f},456216687:{name:"ESP32-C3",family:f},1216438383:{name:"ESP32-C3",family:f},1130455151:{name:"ESP32-C3",family:f},1607549039:{name:"ESP32-C5",family:u},285294703:{name:"ESP32-C5",family:u},1675706479:{name:"ESP32-C5",family:u},1548751960:{name:"ESP32-C5",family:u},3619110528:{name:"ESP32-H2",family:w},752910447:{name:"ESP32-C6",family:c},1913741423:{name:"ESP32-C61",family:g},182303440:{name:"ESP32-P4",family:m},117676761:{name:"ESP32-P4",family:m},0:{name:"ESP32-P4",family:m}},y=3e3,b=6e5,v=(t,e)=>{let a=Math.floor(t*(e/486));return a<y?y:a},k=t=>{switch(t){case l:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case o:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case _:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case h:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case d:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case u:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case c:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1610719232,macFuse:1610719300,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1342754816,baseFuse:1343410176,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,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 z extends Error{constructor(t){super(t),this.name="SlipReadError"}}const S=async e=>{let a;return e==l?a=await import("./esp32-BNIFdu1P.js"):e==o?a=await import("./esp32s2-Bk4mqADi.js"):e==_?a=await import("./esp32s3-Df3OUCOC.js"):e==h?a=await import("./esp8266-CQFcqJ_a.js"):e==d?a=await import("./esp32c2-BqxquOKw.js"):e==f?a=await import("./esp32c3-BOOqe8me.js"):e==u?a=await import("./esp32c5-C8uE-s4t.js"):e==c?a=await import("./esp32c6-Cg5qYgg7.js"):e==g?a=await import("./esp32c61-CzCdsydk.js"):e==w?a=await import("./esp32h2-DZa_lpff.js"):e==m&&(a=await import("./esp32p4-DyGqUAeZ.js")),{...a,text:t(atob(a.text)),data:t(atob(a.data))}};function F(t){let e=t.length;for(;--e>=0;)t[e]=0}const U=256,D=286,O=30,x=15,R=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]),I=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]),E=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),A=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),B=new Array(576);F(B);const T=new Array(60);F(T);const C=new Array(512);F(C);const L=new Array(256);F(L);const P=new Array(29);F(P);const Z=new Array(O);function M(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let N,$,H;function j(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}F(Z);const V=t=>t<256?C[t]:C[256+(t>>>7)],W=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},K=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,W(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},Y=(t,e,a)=>{K(t,a[2*e],a[2*e+1])},q=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},G=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=x;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=q(s[e]++,e))}},X=t=>{let e;for(e=0;e<D;e++)t.dyn_ltree[2*e]=0;for(e=0;e<O;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},Q=t=>{t.bi_valid>8?W(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},J=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},tt=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&J(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!J(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},et=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?Y(t,i,e):(r=L[i],Y(t,r+U+1,e),n=R[r],0!==n&&(i-=P[r],K(t,i,n)),s--,r=V(s),Y(t,r,a),n=I[r],0!==n&&(s-=Z[r],K(t,s,n)))}while(h<t.sym_next);Y(t,256,e)},at=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,l,o=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=o=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=o<2?++o:0,a[2*l]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=s[2*l+1]);for(e.max_code=o,n=t.heap_len>>1;n>=1;n--)tt(t,a,n);l=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],tt(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*l]=a[2*n]+a[2*h],t.depth[l]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=l,t.heap[1]=l++,tt(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,l=e.stat_desc.max_length;let o,_,d,f,u,c,g=0;for(f=0;f<=x;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;o<573;o++)_=t.heap[o],f=a[2*a[2*_+1]+1]+1,f>l&&(f=l,g++),a[2*_+1]=f,_>s||(t.bl_count[f]++,u=0,_>=h&&(u=n[_-h]),c=a[2*_],t.opt_len+=c*(f+u),r&&(t.static_len+=c*(i[2*_+1]+u)));if(0!==g){do{for(f=l-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[l]--,g-=2}while(g>0);for(f=l;0!==f;f--)for(_=t.bl_count[f];0!==_;)d=t.heap[--o],d>s||(a[2*d+1]!==f&&(t.opt_len+=(f-a[2*d+1])*a[2*d],a[2*d+1]=f),_--)}})(t,e),G(a,o,t.bl_count)},st=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<l&&i===n||(h<o?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4))},it=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<l&&i===n)){if(h<o)do{Y(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(Y(t,i,t.bl_tree),h--),Y(t,16,t.bl_tree),K(t,h-3,2)):h<=10?(Y(t,17,t.bl_tree),K(t,h-3,3)):(Y(t,18,t.bl_tree),K(t,h-11,7));h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4)}};let rt=!1;const nt=(t,e,a,s)=>{K(t,0+(s?1:0),3),Q(t),W(t,a),W(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var ht=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<U;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),at(t,t.l_desc),at(t,t.d_desc),n=(t=>{let e;for(st(t,t.dyn_ltree,t.l_desc.max_code),st(t,t.dyn_dtree,t.d_desc.max_code),at(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*A[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?nt(t,e,a,s):4===t.strategy||r===i?(K(t,2+(s?1:0),3),et(t,B,T)):(K(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(K(t,e-257,5),K(t,a-1,5),K(t,s-4,4),i=0;i<s;i++)K(t,t.bl_tree[2*A[i]+1],3);it(t,t.dyn_ltree,e-1),it(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),et(t,t.dyn_ltree,t.dyn_dtree)),X(t),s&&Q(t)},lt={_tr_init:t=>{rt||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(P[s]=a,t=0;t<1<<R[s];t++)L[a++]=s;for(L[a-1]=s,i=0,s=0;s<16;s++)for(Z[s]=i,t=0;t<1<<I[s];t++)C[i++]=s;for(i>>=7;s<O;s++)for(Z[s]=i<<7,t=0;t<1<<I[s]-7;t++)C[256+i++]=s;for(e=0;e<=x;e++)r[e]=0;for(t=0;t<=143;)B[2*t+1]=8,t++,r[8]++;for(;t<=255;)B[2*t+1]=9,t++,r[9]++;for(;t<=279;)B[2*t+1]=7,t++,r[7]++;for(;t<=287;)B[2*t+1]=8,t++,r[8]++;for(G(B,287,r),t=0;t<O;t++)T[2*t+1]=5,T[2*t]=q(t,5);N=new M(B,R,257,D,x),$=new M(T,I,0,O,x),H=new M(new Array(0),E,0,19,7)})(),rt=!0),t.l_desc=new j(t.dyn_ltree,N),t.d_desc=new j(t.dyn_dtree,$),t.bl_desc=new j(t.bl_tree,H),t.bi_buf=0,t.bi_valid=0,X(t)},_tr_stored_block:nt,_tr_flush_block:ht,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(L[a]+U+1)]++,t.dyn_dtree[2*V(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{K(t,2,3),Y(t,256,B),(t=>{16===t.bi_valid?(W(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 ot=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const _t=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var dt=(t,e,a,s)=>{const i=_t,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},ft={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"},ut={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:ct,_tr_stored_block:gt,_tr_flush_block:wt,_tr_tally:mt,_tr_align:pt}=lt,{Z_NO_FLUSH:yt,Z_PARTIAL_FLUSH:bt,Z_FULL_FLUSH:vt,Z_FINISH:kt,Z_BLOCK:zt,Z_OK:St,Z_STREAM_END:Ft,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:Dt,Z_BUF_ERROR:Ot,Z_DEFAULT_COMPRESSION:xt,Z_FILTERED:Rt,Z_HUFFMAN_ONLY:It,Z_RLE:Et,Z_FIXED:At,Z_DEFAULT_STRATEGY:Bt,Z_UNKNOWN:Tt,Z_DEFLATED:Ct}=ut,Lt=258,Pt=262,Zt=42,Mt=113,Nt=666,$t=(t,e)=>(t.msg=ft[e],e),Ht=t=>2*t-(t>4?9:0),jt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Vt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Wt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const Kt=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Yt=(t,e)=>{wt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Kt(t.strm)},qt=(t,e)=>{t.pending_buf[t.pending++]=e},Gt=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Xt=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=ot(t.adler,e,i,a):2===t.state.wrap&&(t.adler=dt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},Qt=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const l=t.strstart>t.w_size-Pt?t.strstart-(t.w_size-Pt):0,o=t.window,_=t.w_mask,d=t.prev,f=t.strstart+Lt;let u=o[r+n-1],c=o[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,o[a+n]===c&&o[a+n-1]===u&&o[a]===o[r]&&o[++a]===o[r+1]){r+=2,a++;do{}while(o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&r<f);if(s=Lt-(f-r),r=f-Lt,s>n){if(t.match_start=e,n=s,s>=h)break;u=o[r+n-1],c=o[r+n]}}}while((e=d[e&_])>l&&0!==--i);return n<=t.lookahead?n:t.lookahead},Jt=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Pt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Vt(t),s+=e),0===t.strm.avail_in)break;if(a=Xt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Wt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Wt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Pt&&0!==t.strm.avail_in)},te=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==kt||e===yt||a!==s+t.strm.avail_in))break;n=e===kt&&a===s+t.strm.avail_in?1:0,gt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,Kt(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(Xt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==yt&&e!==kt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(Xt(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===kt)&&e!==yt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===kt&&0===t.strm.avail_in&&a===s?1:0,gt(t,t.block_start,a,n),t.block_start+=a,Kt(t.strm)),n?3:1)},ee=(t,e)=>{let a,s;for(;;){if(t.lookahead<Pt){if(Jt(t),t.lookahead<Pt&&e===yt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-Pt&&(t.match_length=Qt(t,a)),t.match_length>=3)if(s=mt(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=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+1]);else s=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2},ae=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<Pt){if(Jt(t),t.lookahead<Pt&&e===yt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-Pt&&(t.match_length=Qt(t,a),t.match_length<=5&&(t.strategy===Rt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=mt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(Yt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=mt(t,0,t.window[t.strstart-1]),s&&Yt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=mt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2};function se(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ie=[new se(0,0,0,0,te),new se(4,4,8,4,ee),new se(4,5,16,8,ee),new se(4,6,32,32,ee),new se(4,4,16,16,ae),new se(8,16,32,32,ae),new se(8,16,128,128,ae),new se(8,32,128,256,ae),new se(32,128,258,1024,ae),new se(32,258,258,4096,ae)];function re(){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=Ct,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),jt(this.dyn_ltree),jt(this.dyn_dtree),jt(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),jt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),jt(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 ne=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Zt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Mt&&e.status!==Nt?1:0},he=t=>{if(ne(t))return $t(t,Ut);t.total_in=t.total_out=0,t.data_type=Tt;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?Zt:Mt,t.adler=2===e.wrap?0:1,e.last_flush=-2,ct(e),St},le=t=>{const e=he(t);var a;return e===St&&((a=t.state).window_size=2*a.w_size,jt(a.head),a.max_lazy_match=ie[a.level].max_lazy,a.good_match=ie[a.level].good_length,a.nice_match=ie[a.level].nice_length,a.max_chain_length=ie[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},oe=(t,e,a,s,i,r)=>{if(!t)return Ut;let n=1;if(e===xt&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ct||s<8||s>15||e<0||e>9||r<0||r>At||8===s&&1!==n)return $t(t,Ut);8===s&&(s=9);const h=new re;return t.state=h,h.strm=t,h.status=Zt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,le(t)};var _e={deflateInit:(t,e)=>oe(t,e,Ct,15,8,Bt),deflateInit2:oe,deflateReset:le,deflateResetKeep:he,deflateSetHeader:(t,e)=>ne(t)||2!==t.state.wrap?Ut:(t.state.gzhead=e,St),deflate:(t,e)=>{if(ne(t)||e>zt||e<0)return t?$t(t,Ut):Ut;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Nt&&e!==kt)return $t(t,0===t.avail_out?Ot:Ut);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(Kt(t),0===t.avail_out)return a.last_flush=-1,St}else if(0===t.avail_in&&Ht(e)<=Ht(s)&&e!==kt)return $t(t,Ot);if(a.status===Nt&&0!==t.avail_in)return $t(t,Ot);if(a.status===Zt&&0===a.wrap&&(a.status=Mt),a.status===Zt){let e=Ct+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=It||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,Gt(a,e),0!==a.strstart&&(Gt(a,t.adler>>>16),Gt(a,65535&t.adler)),t.adler=1,a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St}if(57===a.status)if(t.adler=0,qt(a,31),qt(a,139),qt(a,8),a.gzhead)qt(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),qt(a,255&a.gzhead.time),qt(a,a.gzhead.time>>8&255),qt(a,a.gzhead.time>>16&255),qt(a,a.gzhead.time>>24&255),qt(a,9===a.level?2:a.strategy>=It||a.level<2?4:0),qt(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(qt(a,255&a.gzhead.extra.length),qt(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=dt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(qt(a,0),qt(a,0),qt(a,0),qt(a,0),qt(a,0),qt(a,9===a.level?2:a.strategy>=It||a.level<2?4:0),qt(a,3),a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=dt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,Kt(t),0!==a.pending)return a.last_flush=-1,St;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=dt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),Kt(t),0!==a.pending)return a.last_flush=-1,St;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,qt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),Kt(t),0!==a.pending)return a.last_flush=-1,St;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,qt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(Kt(t),0!==a.pending))return a.last_flush=-1,St;qt(a,255&t.adler),qt(a,t.adler>>8&255),t.adler=0}if(a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St}if(0!==t.avail_in||0!==a.lookahead||e!==yt&&a.status!==Nt){let s=0===a.level?te(a,e):a.strategy===It?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Jt(t),0===t.lookahead)){if(e===yt)return 1;break}if(t.match_length=0,a=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Et?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Lt){if(Jt(t),t.lookahead<=Lt&&e===yt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Lt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Lt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=mt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2})(a,e):ie[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Nt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),St;if(2===s&&(e===bt?pt(a):e!==zt&&(gt(a,0,0,!1),e===vt&&(jt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),Kt(t),0===t.avail_out))return a.last_flush=-1,St}return e!==kt?St:a.wrap<=0?Ft:(2===a.wrap?(qt(a,255&t.adler),qt(a,t.adler>>8&255),qt(a,t.adler>>16&255),qt(a,t.adler>>24&255),qt(a,255&t.total_in),qt(a,t.total_in>>8&255),qt(a,t.total_in>>16&255),qt(a,t.total_in>>24&255)):(Gt(a,t.adler>>>16),Gt(a,65535&t.adler)),Kt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?St:Ft)},deflateEnd:t=>{if(ne(t))return Ut;const e=t.state.status;return t.state=null,e===Mt?$t(t,Dt):St},deflateSetDictionary:(t,e)=>{let a=e.length;if(ne(t))return Ut;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Zt||s.lookahead)return Ut;if(1===i&&(t.adler=ot(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(jt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Jt(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Wt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,Jt(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,St},deflateInfo:"pako deflate (from Nodeca project)"};const de=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var fe=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)de(a,e)&&(t[e]=a[e])}}return t},ue=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ce=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ce=!1}const ge=new Uint8Array(256);for(let t=0;t<256;t++)ge[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ge[254]=ge[254]=1;var we=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var me=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 pe=Object.prototype.toString,{Z_NO_FLUSH:ye,Z_SYNC_FLUSH:be,Z_FULL_FLUSH:ve,Z_FINISH:ke,Z_OK:ze,Z_STREAM_END:Se,Z_DEFAULT_COMPRESSION:Fe,Z_DEFAULT_STRATEGY:Ue,Z_DEFLATED:De}=ut;function Oe(t){this.options=fe({level:Fe,method:De,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ue},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 me,this.strm.avail_out=0;let a=_e.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ze)throw new Error(ft[a]);if(e.header&&_e.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?we(e.dictionary):"[object ArrayBuffer]"===pe.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=_e.deflateSetDictionary(this.strm,t),a!==ze)throw new Error(ft[a]);this._dict_set=!0}}Oe.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ke:ye,"string"==typeof t?a.input=we(t):"[object ArrayBuffer]"===pe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===be||r===ve)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=_e.deflate(a,r),i===Se)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=_e.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ze;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Oe.prototype.onData=function(t){this.chunks.push(t)},Oe.prototype.onEnd=function(t){t===ze&&(this.result=ue(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var xe={deflate:function(t,e){const a=new Oe(e);if(a.push(t,!0),a.err)throw a.msg||ft[a.err];return a.result}};const{deflate:Re}=xe;var Ie=Re;const Ee={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},q:{u:DataView.prototype.getInt64,p:DataView.prototype.setInt64,bytes:8},Q:{u:DataView.prototype.getUint64,p:DataView.prototype.setUint64,bytes:8}},Ae=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";let s=[],i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Ee))throw"Unhandled character '"+t+"' in pack format";let a=Ee[t].bytes,r=new DataView(new ArrayBuffer(a));Ee[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Be=(t,e)=>{let a=0,s=[],i=!0;for(let e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Ee))throw"Unhandled character '"+t+"' in unpack format";let r=Ee[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);let h=Ee[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Te extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=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.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}async initialize(){await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.readLoop()),await this.sync();let t=await this.readRegister(1073745920),e=p[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;let s=k(this.getChipFamily()).macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(s+4*t);this.logger.log(`Chip type ${this.chipName}`)}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{for(;;){const{value:t,done:e}=await this._reader.read();if(e){this._reader.releaseLock();break}t&&0!==t.length&&this._inputBuffer.push(...Array.from(t))}}catch(t){console.error("Read loop got disconnected")}this.connected=!1,this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){this.logger.log("Try hard reset."),t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1)):(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.setRTS(!0),await this.sleep(100),await this.setRTS(!1)),await new Promise(t=>setTimeout(t,1e3))}macAddr(){let t,e=new Array(6).fill(0),a=this._efuses[0],s=this._efuses[1],i=this._efuses[2],r=this._efuses[3];if(this.chipFamily==h){if(0!=r)t=[r>>16&255,r>>8&255,255&r];else if(s>>16&255){if(1!=(s>>16&255))throw new Error("Couldnt determine OUI");t=[172,208,116]}else t=[24,254,52];e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=s>>8&255,e[4]=255&s,e[5]=a>>24&255}else if(this.chipFamily==l)e[0]=i>>8&255,e[1]=255&i,e[2]=s>>24&255,e[3]=s>>16&255,e[4]=s>>8&255,e[5]=255&s;else{if(this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=m)throw new Error("Unknown chip family");e[0]=s>>8&255,e[1]=255&s,e[2]=a>>24&255,e[3]=a>>16&255,e[4]=a>>8&255,e[5]=255&a}return e}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));let e=Ae("<I",t);await this.sendCommand(10,e);let[s,i]=await this.getResponse(10);return s}async checkCommand(t,e,s=0,i=3e3){i=Math.min(i,12e5),await this.sendCommand(t,e,s);let[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let p=0;if(this.IS_STUB||this.chipFamily==h?p=2:[l,o,_,d,f,u,c,g,w,m].includes(this.chipFamily)?p=4:[2,4].includes(n.length)&&(p=n.length),n.length<p)throw new Error("Didn't get enough status bytes");let y=n.slice(-p,n.length);if(n=n.slice(0,-p),this.debug&&(this.logger.debug("status",y),this.logger.debug("value",r),this.logger.debug("data",n)),1==y[0])throw 5==y[1]?new Error("Invalid (unsupported) command "+a(t)):new Error("Command failure error code "+a(y[1]));return[r,n]}async sendCommand(t,e,a=0){let s=(t=>{let e=[192];for(let a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e})([...Ae("<BBHI",0,t,e.length,a),...e]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let i=null,r=!1,n=[];for(;;){let h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(10)}if(0==n.length){throw new z("Timed out waiting for packet "+(null===i?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+e(n));for(let t of n)if(null===i){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new z("Invalid head of packet ("+a(t)+")");i=[]}else if(r)if(r=!1,220==t)i.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new z("Invalid SLIP escape (0xdb, "+a(t)+")");i.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+e(i)),i;i.push(t)}}throw new z("Invalid state")}async getResponse(t,e=3e3){for(let s=0;s<100;s++){const s=await this.readPacket(e);if(s.length<8)continue;const[i,r,n,h]=Be("<BBHI",s.slice(0,8));if(1!=i)continue;const l=s.slice(8);if(null==t||r==t)return[h,l];if(0!=l[0]&&5==l[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(let a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==h)throw new Error("Changing baud rate is not supported on the ESP8266");this.logger.log("Attempting to change baud rate to "+t+"...");try{let e=Ae("<II",t,this.IS_STUB?r:0);await this.checkCommand(15,e)}catch(e){throw console.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)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this.readLoop(),this.logger.log(`Changed baud rate to ${t}`)}catch(e){throw console.error(e),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){if(this._inputBuffer.length=0,await this._sync())return await s(100),!0;await s(100)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,n);for(let t=0;t<8;t++)try{let[t,e]=await this.getResponse(8,100);if(e.length>1&&0==e[0]&&0==e[1])return!0}catch(t){}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,s=0,i=!1){if(t.byteLength>=8){var r=Array.from(new Uint8Array(t,0,4));let e=r[0],s=r[2],i=r[3];this.logger.log(`Image header, Magic=${a(e)}, FlashMode=${a(s)}, FlashSizeFreq=${a(i)}`)}let n,h=t.byteLength,l=0,o=y;i?(n=Ie(new Uint8Array(t),{level:9}).buffer,l=n.byteLength,this.logger.log(`Writing data with filesize: ${h}. Compressed Size: ${l}`),o=await this.flashDeflBegin(h,l,s)):(this.logger.log(`Writing data with filesize: ${h}`),n=t,await this.flashBegin(h,s));let _=[],d=0,f=0,u=0,c=Date.now(),g=this.getFlashWriteSize(),w=i?l:h;for(;w-u>0;)this.debug&&this.logger.log(`Writing at ${a(s+d*g,8)} `),w-u>=g?_=Array.from(new Uint8Array(n,u,g)):(_=Array.from(new Uint8Array(n,u,w-u)),i||(_=_.concat(new Array(g-_.length).fill(255)))),i?await this.flashDeflBlock(_,d,o):await this.flashBlock(_,d),d+=1,f+=i?Math.round(_.length*h/l):_.length,u+=g,e(Math.min(f,h),h);this.logger.log("Took "+(Date.now()-c)+"ms to write "+w+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,s=!1){let i,r,n=this.getFlashWriteSize();!this.IS_STUB&&[l,o,_,d,f,u,c,g,w,m].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));let p,b=Math.floor((t+n-1)/n);i=this.chipFamily==h?this.getEraseSize(e,t):t,p=this.IS_STUB?y:v(3e4,t);let k=Date.now();return r=Ae("<IIII",i,b,n,e),this.chipFamily!=l&&this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=m||(r=r.concat(Ae("<I",s?1:0))),this.logger.log("Erase size "+i+", blocks "+b+", block size "+a(n,4)+", offset "+a(e,4)+", encrypted "+(s?"yes":"no")),await this.checkCommand(2,r,0,p),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-k)+"ms to erase "+b+" bytes"),b}async flashDeflBegin(t=0,e=0,a=0,s=!1){let i,r=this.getFlashWriteSize(),n=Math.floor((e+r-1)/r),h=Math.floor((t+r-1)/r),l=0,o=0;return this.IS_STUB?(l=t,o=v(3e4,l)):(l=h*r,o=y),i=Ae("<IIII",l,n,r,a),await this.checkCommand(16,i,0,o),o}async flashFinish(){let t=Ae("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){let t=Ae("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return k(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ae("<IIII",t,e,a,s);i>0&&r.concat(Ae("<IIII",k(this.getChipFamily()).uartDateReg,0,0,i)),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){let s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{let s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,s=0){let i=k(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,l=r+i.usr2Offs,o=r+i.w0Offs,_=1<<18;if(s>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");let d=8*e.length,f=await this.readRegister(h),u=await this.readRegister(l),c=1<<31;if(s>0&&(c|=268435456),d>0&&(c|=134217728),await this.setDataLengths(i,d,s),await this.writeRegister(h,c),await this.writeRegister(l,7<<28|t),0==d)await this.writeRegister(o,0);else{e.concat(new Array(e.length%4).fill(0));let t=Be("I".repeat(Math.floor(e.length/4)),e),s=o;this.logger.debug(`Words Length: ${t.length}`);for(const e of t)this.logger.debug(`Writing word ${a(e)} to register offset ${a(s)}`),await this.writeRegister(s,e),s+=4}await this.writeRegister(n,_),await this.waitDone(n,_);let g=await this.readRegister(o);return await this.writeRegister(h,f),await this.writeRegister(l,u),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");let t=await this.flashId(),e=255&t,s=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)}${s.toString(16)}`),this.flashSize=i[s],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){let a=4096,s=Math.floor((e+a-1)/a),i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ae("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){let e=this.IS_STUB?y:500,a=Ae("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(){const t=await S(this.chipFamily);let e,a=2048;this.logger.log("Uploading stub...");for(let e of["text","data"])if(Object.keys(t).includes(e)){let s=t[e+"_start"],i=t[e].length,r=Math.floor((i+a-1)/a);await this.memBegin(i,r,a,s);for(let s of Array(r).keys()){let r=s*a,n=r+a;n>i&&(n=i),await this.memBlock(t[e].slice(r,n),s)}}this.logger.log("Running stub..."),await this.memFinish(t.entry);const s=await this.readPacket(500);if(e=String.fromCharCode(...s),"OHAI"!=e)throw new Error("Failed to start stub. Unexpected response: "+e);this.logger.log("Stub is now running...");const i=new Ce(this.port,this.logger,this);return await i.detectFlashSize(),i}async writeToStream(t){const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){console.error("Ignoring release lock error",t)}}async disconnect(){this._parent?await this._parent.disconnect():(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1)}}class Ce extends Te{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,s,i){let r=await S(this.chipFamily),n=i,h=i+t;console.log(n,h),console.log(r.data_start,r.data.length,r.text_start,r.text.length);for(let[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.")}async eraseFlash(){await this.checkCommand(208,[],0,b)}}const Le=async t=>{const e=await navigator.serial.requestPort();return t.log("Connecting..."),await e.open({baudRate:r}),t.log("Connected successfully."),new Te(e,t)};export{l as CHIP_FAMILY_ESP32,d as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,u as CHIP_FAMILY_ESP32C5,c as CHIP_FAMILY_ESP32C6,g as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,m as CHIP_FAMILY_ESP32P4,o as CHIP_FAMILY_ESP32S2,_ as CHIP_FAMILY_ESP32S3,h as CHIP_FAMILY_ESP8266,Te as ESPLoader,Le as connect};
|
package/index.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
|
-
<title>ESPTool</title>
|
|
4
|
+
<title>WebSerial ESPTool</title>
|
|
5
5
|
<meta charset="utf-8" />
|
|
6
6
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
you're running Chrome 89 or later.
|
|
58
58
|
</div>
|
|
59
59
|
<div class="subheader">
|
|
60
|
-
<div class="title left">
|
|
60
|
+
<div class="title left">WebSerial ESPTool</div>
|
|
61
61
|
<div class="right">
|
|
62
62
|
<label for="darkmode"> Dark Mode </label>
|
|
63
63
|
<div class="onoffswitch">
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=1082131984,B="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",E=1082130432,g="FECAQJYJgEDyCYBAggqAQGQLgEDQC4BAfguAQIQIgEAgC4BAYAuAQJ4KgEA0CIBA0gqAQDQIgEBwCYBAtgmAQPIJgECCCoBAggmAQKwIgEDgCIBAfgmAQCQOgEDyCYBA6gyAQNwNgEB0B4BABA6AQHQHgEB0B4BAdAeAQHQHgEB0B4BAdAeAQHQHgEB0B4BAhgyAQHQHgEAIDYBA3A2AQA==",w=1082223536,Q=1082146816,c={entry:A,text:B,text_start:E,data:g,data_start:w,bss_start:Q};export{Q as bss_start,g as data,w as data_start,c as default,A as entry,B as text,E as text_start};
|
package/js/modules/esptool.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=t=>{let e=[];for(let a=0;a<t.length;a++){let s=t.charCodeAt(a);s<=255&&e.push(s)}return e},e=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{let a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),i={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB"},r=115200,n=t(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),h=33382,l=50,o=12882,_=12883,d=12994,f=12995,u=12997,c=12998,g=12914,w=12928,p={4293968129:{name:"ESP8266",family:h},15736195:{name:"ESP32",family:l},1990:{name:"ESP32-S2",family:o},9:{name:"ESP32-S3",family:_},1867591791:{name:"ESP32-C2",family:d},2084675695:{name:"ESP32-C2",family:d},203546735:{name:"ESP32-C2",family:d},1763790959:{name:"ESP32-C3",family:f},456216687:{name:"ESP32-C3",family:f},1216438383:{name:"ESP32-C3",family:f},1130455151:{name:"ESP32-C3",family:f},1607549039:{name:"ESP32-C5",family:u},285294703:{name:"ESP32-C5",family:u},1675706479:{name:"ESP32-C5",family:u},1548751960:{name:"ESP32-C5",family:u},3619110528:{name:"ESP32-H2",family:g},752910447:{name:"ESP32-C6",family:c},182303440:{name:"ESP32-P4",family:w},117676761:{name:"ESP32-P4",family:w},0:{name:"ESP32-P4",family:w}},m=3e3,y=6e5,b=(t,e)=>{let a=Math.floor(t*(e/486));return a<m?m:a},v=t=>{switch(t){case l:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case o:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case _:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case h:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case d:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case u:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case c:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1610719232,macFuse:1610719300,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1342754816,baseFuse:1343410176,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,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 k extends Error{constructor(t){super(t),this.name="SlipReadError"}}const z=async e=>{let a;return e==l?a=await import("./esp32-BNIFdu1P.js"):e==o?a=await import("./esp32s2-Bk4mqADi.js"):e==_?a=await import("./esp32s3-Df3OUCOC.js"):e==h?a=await import("./esp8266-CQFcqJ_a.js"):e==d?a=await import("./esp32c2-BqxquOKw.js"):e==f?a=await import("./esp32c3-BOOqe8me.js"):e==u?a=await import("./esp32c5-C8uE-s4t.js"):e==c?a=await import("./esp32c6-Cg5qYgg7.js"):e==g?a=await import("./esp32h2-DZa_lpff.js"):e==w&&(a=await import("./esp32p4-DyGqUAeZ.js")),{...a,text:t(atob(a.text)),data:t(atob(a.data))}};function S(t){let e=t.length;for(;--e>=0;)t[e]=0}const U=256,F=286,D=30,x=15,R=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]),O=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]),I=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),A=new Array(576);S(A);const B=new Array(60);S(B);const T=new Array(512);S(T);const C=new Array(256);S(C);const L=new Array(29);S(L);const P=new Array(D);function Z(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let M,N,$;function H(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}S(P);const j=t=>t<256?T[t]:T[256+(t>>>7)],V=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},W=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,V(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},K=(t,e,a)=>{W(t,a[2*e],a[2*e+1])},Y=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},q=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=x;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=Y(s[e]++,e))}},G=t=>{let e;for(e=0;e<F;e++)t.dyn_ltree[2*e]=0;for(e=0;e<D;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},X=t=>{t.bi_valid>8?V(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Q=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},J=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&Q(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!Q(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},tt=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?K(t,i,e):(r=C[i],K(t,r+U+1,e),n=R[r],0!==n&&(i-=L[r],W(t,i,n)),s--,r=j(s),K(t,r,a),n=O[r],0!==n&&(s-=P[r],W(t,s,n)))}while(h<t.sym_next);K(t,256,e)},et=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,l,o=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=o=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=o<2?++o:0,a[2*l]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=s[2*l+1]);for(e.max_code=o,n=t.heap_len>>1;n>=1;n--)J(t,a,n);l=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],J(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*l]=a[2*n]+a[2*h],t.depth[l]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=l,t.heap[1]=l++,J(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,l=e.stat_desc.max_length;let o,_,d,f,u,c,g=0;for(f=0;f<=x;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;o<573;o++)_=t.heap[o],f=a[2*a[2*_+1]+1]+1,f>l&&(f=l,g++),a[2*_+1]=f,_>s||(t.bl_count[f]++,u=0,_>=h&&(u=n[_-h]),c=a[2*_],t.opt_len+=c*(f+u),r&&(t.static_len+=c*(i[2*_+1]+u)));if(0!==g){do{for(f=l-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[l]--,g-=2}while(g>0);for(f=l;0!==f;f--)for(_=t.bl_count[f];0!==_;)d=t.heap[--o],d>s||(a[2*d+1]!==f&&(t.opt_len+=(f-a[2*d+1])*a[2*d],a[2*d+1]=f),_--)}})(t,e),q(a,o,t.bl_count)},at=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<l&&i===n||(h<o?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4))},st=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<l&&i===n)){if(h<o)do{K(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(K(t,i,t.bl_tree),h--),K(t,16,t.bl_tree),W(t,h-3,2)):h<=10?(K(t,17,t.bl_tree),W(t,h-3,3)):(K(t,18,t.bl_tree),W(t,h-11,7));h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4)}};let it=!1;const rt=(t,e,a,s)=>{W(t,0+(s?1:0),3),X(t),V(t,a),V(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var nt=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<U;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),et(t,t.l_desc),et(t,t.d_desc),n=(t=>{let e;for(at(t,t.dyn_ltree,t.l_desc.max_code),at(t,t.dyn_dtree,t.d_desc.max_code),et(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*E[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?rt(t,e,a,s):4===t.strategy||r===i?(W(t,2+(s?1:0),3),tt(t,A,B)):(W(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(W(t,e-257,5),W(t,a-1,5),W(t,s-4,4),i=0;i<s;i++)W(t,t.bl_tree[2*E[i]+1],3);st(t,t.dyn_ltree,e-1),st(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),tt(t,t.dyn_ltree,t.dyn_dtree)),G(t),s&&X(t)},ht={_tr_init:t=>{it||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(L[s]=a,t=0;t<1<<R[s];t++)C[a++]=s;for(C[a-1]=s,i=0,s=0;s<16;s++)for(P[s]=i,t=0;t<1<<O[s];t++)T[i++]=s;for(i>>=7;s<D;s++)for(P[s]=i<<7,t=0;t<1<<O[s]-7;t++)T[256+i++]=s;for(e=0;e<=x;e++)r[e]=0;for(t=0;t<=143;)A[2*t+1]=8,t++,r[8]++;for(;t<=255;)A[2*t+1]=9,t++,r[9]++;for(;t<=279;)A[2*t+1]=7,t++,r[7]++;for(;t<=287;)A[2*t+1]=8,t++,r[8]++;for(q(A,287,r),t=0;t<D;t++)B[2*t+1]=5,B[2*t]=Y(t,5);M=new Z(A,R,257,F,x),N=new Z(B,O,0,D,x),$=new Z(new Array(0),I,0,19,7)})(),it=!0),t.l_desc=new H(t.dyn_ltree,M),t.d_desc=new H(t.dyn_dtree,N),t.bl_desc=new H(t.bl_tree,$),t.bi_buf=0,t.bi_valid=0,G(t)},_tr_stored_block:rt,_tr_flush_block:nt,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(C[a]+U+1)]++,t.dyn_dtree[2*j(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{W(t,2,3),K(t,256,A),(t=>{16===t.bi_valid?(V(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 lt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const ot=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var _t=(t,e,a,s)=>{const i=ot,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},dt={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"},ft={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:ut,_tr_stored_block:ct,_tr_flush_block:gt,_tr_tally:wt,_tr_align:pt}=ht,{Z_NO_FLUSH:mt,Z_PARTIAL_FLUSH:yt,Z_FULL_FLUSH:bt,Z_FINISH:vt,Z_BLOCK:kt,Z_OK:zt,Z_STREAM_END:St,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:Ft,Z_BUF_ERROR:Dt,Z_DEFAULT_COMPRESSION:xt,Z_FILTERED:Rt,Z_HUFFMAN_ONLY:Ot,Z_RLE:It,Z_FIXED:Et,Z_DEFAULT_STRATEGY:At,Z_UNKNOWN:Bt,Z_DEFLATED:Tt}=ft,Ct=258,Lt=262,Pt=42,Zt=113,Mt=666,Nt=(t,e)=>(t.msg=dt[e],e),$t=t=>2*t-(t>4?9:0),Ht=t=>{let e=t.length;for(;--e>=0;)t[e]=0},jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Vt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const Wt=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Kt=(t,e)=>{gt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Wt(t.strm)},Yt=(t,e)=>{t.pending_buf[t.pending++]=e},qt=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Gt=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=lt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=_t(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},Xt=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const l=t.strstart>t.w_size-Lt?t.strstart-(t.w_size-Lt):0,o=t.window,_=t.w_mask,d=t.prev,f=t.strstart+Ct;let u=o[r+n-1],c=o[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,o[a+n]===c&&o[a+n-1]===u&&o[a]===o[r]&&o[++a]===o[r+1]){r+=2,a++;do{}while(o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&r<f);if(s=Ct-(f-r),r=f-Ct,s>n){if(t.match_start=e,n=s,s>=h)break;u=o[r+n-1],c=o[r+n]}}}while((e=d[e&_])>l&&0!==--i);return n<=t.lookahead?n:t.lookahead},Qt=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Lt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),jt(t),s+=e),0===t.strm.avail_in)break;if(a=Gt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Vt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Vt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Lt&&0!==t.strm.avail_in)},Jt=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==vt||e===mt||a!==s+t.strm.avail_in))break;n=e===vt&&a===s+t.strm.avail_in?1:0,ct(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,Wt(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(Gt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==mt&&e!==vt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(Gt(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===vt)&&e!==mt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===vt&&0===t.strm.avail_in&&a===s?1:0,ct(t,t.block_start,a,n),t.block_start+=a,Wt(t.strm)),n?3:1)},te=(t,e)=>{let a,s;for(;;){if(t.lookahead<Lt){if(Qt(t),t.lookahead<Lt&&e===mt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-Lt&&(t.match_length=Xt(t,a)),t.match_length>=3)if(s=wt(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=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+1]);else s=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2},ee=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<Lt){if(Qt(t),t.lookahead<Lt&&e===mt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-Lt&&(t.match_length=Xt(t,a),t.match_length<=5&&(t.strategy===Rt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=wt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Vt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(Kt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=wt(t,0,t.window[t.strstart-1]),s&&Kt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=wt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2};function ae(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const se=[new ae(0,0,0,0,Jt),new ae(4,4,8,4,te),new ae(4,5,16,8,te),new ae(4,6,32,32,te),new ae(4,4,16,16,ee),new ae(8,16,32,32,ee),new ae(8,16,128,128,ee),new ae(8,32,128,256,ee),new ae(32,128,258,1024,ee),new ae(32,258,258,4096,ee)];function ie(){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=Tt,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),Ht(this.dyn_ltree),Ht(this.dyn_dtree),Ht(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),Ht(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Ht(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 re=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Pt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Zt&&e.status!==Mt?1:0},ne=t=>{if(re(t))return Nt(t,Ut);t.total_in=t.total_out=0,t.data_type=Bt;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?Pt:Zt,t.adler=2===e.wrap?0:1,e.last_flush=-2,ut(e),zt},he=t=>{const e=ne(t);var a;return e===zt&&((a=t.state).window_size=2*a.w_size,Ht(a.head),a.max_lazy_match=se[a.level].max_lazy,a.good_match=se[a.level].good_length,a.nice_match=se[a.level].nice_length,a.max_chain_length=se[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},le=(t,e,a,s,i,r)=>{if(!t)return Ut;let n=1;if(e===xt&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Tt||s<8||s>15||e<0||e>9||r<0||r>Et||8===s&&1!==n)return Nt(t,Ut);8===s&&(s=9);const h=new ie;return t.state=h,h.strm=t,h.status=Pt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,he(t)};var oe={deflateInit:(t,e)=>le(t,e,Tt,15,8,At),deflateInit2:le,deflateReset:he,deflateResetKeep:ne,deflateSetHeader:(t,e)=>re(t)||2!==t.state.wrap?Ut:(t.state.gzhead=e,zt),deflate:(t,e)=>{if(re(t)||e>kt||e<0)return t?Nt(t,Ut):Ut;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Mt&&e!==vt)return Nt(t,0===t.avail_out?Dt:Ut);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(Wt(t),0===t.avail_out)return a.last_flush=-1,zt}else if(0===t.avail_in&&$t(e)<=$t(s)&&e!==vt)return Nt(t,Dt);if(a.status===Mt&&0!==t.avail_in)return Nt(t,Dt);if(a.status===Pt&&0===a.wrap&&(a.status=Zt),a.status===Pt){let e=Tt+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Ot||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,qt(a,e),0!==a.strstart&&(qt(a,t.adler>>>16),qt(a,65535&t.adler)),t.adler=1,a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt}if(57===a.status)if(t.adler=0,Yt(a,31),Yt(a,139),Yt(a,8),a.gzhead)Yt(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),Yt(a,255&a.gzhead.time),Yt(a,a.gzhead.time>>8&255),Yt(a,a.gzhead.time>>16&255),Yt(a,a.gzhead.time>>24&255),Yt(a,9===a.level?2:a.strategy>=Ot||a.level<2?4:0),Yt(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(Yt(a,255&a.gzhead.extra.length),Yt(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=_t(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,0),Yt(a,9===a.level?2:a.strategy>=Ot||a.level<2?4:0),Yt(a,3),a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=_t(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,Wt(t),0!==a.pending)return a.last_flush=-1,zt;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=_t(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),Wt(t),0!==a.pending)return a.last_flush=-1,zt;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,Yt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s)),Wt(t),0!==a.pending)return a.last_flush=-1,zt;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,Yt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=_t(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(Wt(t),0!==a.pending))return a.last_flush=-1,zt;Yt(a,255&t.adler),Yt(a,t.adler>>8&255),t.adler=0}if(a.status=Zt,Wt(t),0!==a.pending)return a.last_flush=-1,zt}if(0!==t.avail_in||0!==a.lookahead||e!==mt&&a.status!==Mt){let s=0===a.level?Jt(a,e):a.strategy===Ot?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Qt(t),0===t.lookahead)){if(e===mt)return 1;break}if(t.match_length=0,a=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===It?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Ct){if(Qt(t),t.lookahead<=Ct&&e===mt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Ct;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Ct-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=wt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=wt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Kt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===vt?(Kt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Kt(t,!1),0===t.strm.avail_out)?1:2})(a,e):se[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Mt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),zt;if(2===s&&(e===yt?pt(a):e!==kt&&(ct(a,0,0,!1),e===bt&&(Ht(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),Wt(t),0===t.avail_out))return a.last_flush=-1,zt}return e!==vt?zt:a.wrap<=0?St:(2===a.wrap?(Yt(a,255&t.adler),Yt(a,t.adler>>8&255),Yt(a,t.adler>>16&255),Yt(a,t.adler>>24&255),Yt(a,255&t.total_in),Yt(a,t.total_in>>8&255),Yt(a,t.total_in>>16&255),Yt(a,t.total_in>>24&255)):(qt(a,t.adler>>>16),qt(a,65535&t.adler)),Wt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?zt:St)},deflateEnd:t=>{if(re(t))return Ut;const e=t.state.status;return t.state=null,e===Zt?Nt(t,Ft):zt},deflateSetDictionary:(t,e)=>{let a=e.length;if(re(t))return Ut;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Pt||s.lookahead)return Ut;if(1===i&&(t.adler=lt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Ht(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Qt(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Vt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,Qt(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,zt},deflateInfo:"pako deflate (from Nodeca project)"};const _e=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var de=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)_e(a,e)&&(t[e]=a[e])}}return t},fe=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ue=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ue=!1}const ce=new Uint8Array(256);for(let t=0;t<256;t++)ce[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ce[254]=ce[254]=1;var ge=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var we=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 pe=Object.prototype.toString,{Z_NO_FLUSH:me,Z_SYNC_FLUSH:ye,Z_FULL_FLUSH:be,Z_FINISH:ve,Z_OK:ke,Z_STREAM_END:ze,Z_DEFAULT_COMPRESSION:Se,Z_DEFAULT_STRATEGY:Ue,Z_DEFLATED:Fe}=ft;function De(t){this.options=de({level:Se,method:Fe,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ue},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 we,this.strm.avail_out=0;let a=oe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ke)throw new Error(dt[a]);if(e.header&&oe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?ge(e.dictionary):"[object ArrayBuffer]"===pe.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=oe.deflateSetDictionary(this.strm,t),a!==ke)throw new Error(dt[a]);this._dict_set=!0}}De.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ve:me,"string"==typeof t?a.input=ge(t):"[object ArrayBuffer]"===pe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ye||r===be)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=oe.deflate(a,r),i===ze)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=oe.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ke;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},De.prototype.onData=function(t){this.chunks.push(t)},De.prototype.onEnd=function(t){t===ke&&(this.result=fe(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var xe={deflate:function(t,e){const a=new De(e);if(a.push(t,!0),a.err)throw a.msg||dt[a.err];return a.result}};const{deflate:Re}=xe;var Oe=Re;const Ie={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},q:{u:DataView.prototype.getInt64,p:DataView.prototype.setInt64,bytes:8},Q:{u:DataView.prototype.getUint64,p:DataView.prototype.setUint64,bytes:8}},Ee=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";let s=[],i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Ie))throw"Unhandled character '"+t+"' in pack format";let a=Ie[t].bytes,r=new DataView(new ArrayBuffer(a));Ie[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Ae=(t,e)=>{let a=0,s=[],i=!0;for(let e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Ie))throw"Unhandled character '"+t+"' in unpack format";let r=Ie[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);let h=Ie[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Be extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=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.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}async initialize(){await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.readLoop()),await this.sync();let t=await this.readRegister(1073745920),e=p[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;let s=v(this.getChipFamily()).macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(s+4*t);this.logger.log(`Chip type ${this.chipName}`)}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{for(;;){const{value:t,done:e}=await this._reader.read();if(e){this._reader.releaseLock();break}t&&0!==t.length&&this._inputBuffer.push(...Array.from(t))}}catch(t){console.error("Read loop got disconnected")}this.connected=!1,this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){this.logger.log("Try hard reset."),t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1)):(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.setRTS(!0),await this.sleep(100),await this.setRTS(!1)),await new Promise(t=>setTimeout(t,1e3))}macAddr(){let t,e=new Array(6).fill(0),a=this._efuses[0],s=this._efuses[1],i=this._efuses[2],r=this._efuses[3];if(this.chipFamily==h){if(0!=r)t=[r>>16&255,r>>8&255,255&r];else if(s>>16&255){if(1!=(s>>16&255))throw new Error("Couldnt determine OUI");t=[172,208,116]}else t=[24,254,52];e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=s>>8&255,e[4]=255&s,e[5]=a>>24&255}else if(this.chipFamily==l)e[0]=i>>8&255,e[1]=255&i,e[2]=s>>24&255,e[3]=s>>16&255,e[4]=s>>8&255,e[5]=255&s;else{if(this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w)throw new Error("Unknown chip family");e[0]=s>>8&255,e[1]=255&s,e[2]=a>>24&255,e[3]=a>>16&255,e[4]=a>>8&255,e[5]=255&a}return e}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));let e=Ee("<I",t);await this.sendCommand(10,e);let[s,i]=await this.getResponse(10);return s}async checkCommand(t,e,s=0,i=3e3){i=Math.min(i,12e5),await this.sendCommand(t,e,s);let[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let p=0;if(this.IS_STUB||this.chipFamily==h?p=2:[l,o,_,d,f,u,c,g,w].includes(this.chipFamily)?p=4:[2,4].includes(n.length)&&(p=n.length),n.length<p)throw new Error("Didn't get enough status bytes");let m=n.slice(-p,n.length);if(n=n.slice(0,-p),this.debug&&(this.logger.debug("status",m),this.logger.debug("value",r),this.logger.debug("data",n)),1==m[0])throw 5==m[1]?new Error("Invalid (unsupported) command "+a(t)):new Error("Command failure error code "+a(m[1]));return[r,n]}async sendCommand(t,e,a=0){let s=(t=>{let e=[192];for(let a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e})([...Ee("<BBHI",0,t,e.length,a),...e]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let i=null,r=!1,n=[];for(;;){let h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(10)}if(0==n.length){throw new k("Timed out waiting for packet "+(null===i?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+e(n));for(let t of n)if(null===i){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new k("Invalid head of packet ("+a(t)+")");i=[]}else if(r)if(r=!1,220==t)i.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new k("Invalid SLIP escape (0xdb, "+a(t)+")");i.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+e(i)),i;i.push(t)}}throw new k("Invalid state")}async getResponse(t,e=3e3){for(let s=0;s<100;s++){const s=await this.readPacket(e);if(s.length<8)continue;const[i,r,n,h]=Ae("<BBHI",s.slice(0,8));if(1!=i)continue;const l=s.slice(8);if(null==t||r==t)return[h,l];if(0!=l[0]&&5==l[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(let a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==h)throw new Error("Changing baud rate is not supported on the ESP8266");this.logger.log("Attempting to change baud rate to "+t+"...");try{let e=Ee("<II",t,this.IS_STUB?r:0);await this.checkCommand(15,e)}catch(e){throw console.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)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this.readLoop(),this.logger.log(`Changed baud rate to ${t}`)}catch(e){throw console.error(e),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){if(this._inputBuffer.length=0,await this._sync())return await s(100),!0;await s(100)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,n);for(let t=0;t<8;t++)try{let[t,e]=await this.getResponse(8,100);if(e.length>1&&0==e[0]&&0==e[1])return!0}catch(t){}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,s=0,i=!1){if(t.byteLength>=8){var r=Array.from(new Uint8Array(t,0,4));let e=r[0],s=r[2],i=r[3];this.logger.log(`Image header, Magic=${a(e)}, FlashMode=${a(s)}, FlashSizeFreq=${a(i)}`)}let n,h=t.byteLength,l=0,o=m;i?(n=Oe(new Uint8Array(t),{level:9}).buffer,l=n.byteLength,this.logger.log(`Writing data with filesize: ${h}. Compressed Size: ${l}`),o=await this.flashDeflBegin(h,l,s)):(this.logger.log(`Writing data with filesize: ${h}`),n=t,await this.flashBegin(h,s));let _=[],d=0,f=0,u=0,c=Date.now(),g=this.getFlashWriteSize(),w=i?l:h;for(;w-u>0;)this.debug&&this.logger.log(`Writing at ${a(s+d*g,8)} `),w-u>=g?_=Array.from(new Uint8Array(n,u,g)):(_=Array.from(new Uint8Array(n,u,w-u)),i||(_=_.concat(new Array(g-_.length).fill(255)))),i?await this.flashDeflBlock(_,d,o):await this.flashBlock(_,d),d+=1,f+=i?Math.round(_.length*h/l):_.length,u+=g,e(Math.min(f,h),h);this.logger.log("Took "+(Date.now()-c)+"ms to write "+w+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,s=!1){let i,r,n=this.getFlashWriteSize();!this.IS_STUB&&[l,o,_,d,f,u,c,g,w].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));let p,y=Math.floor((t+n-1)/n);i=this.chipFamily==h?this.getEraseSize(e,t):t,p=this.IS_STUB?m:b(3e4,t);let v=Date.now();return r=Ee("<IIII",i,y,n,e),this.chipFamily!=l&&this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w||(r=r.concat(Ee("<I",s?1:0))),this.logger.log("Erase size "+i+", blocks "+y+", block size "+a(n,4)+", offset "+a(e,4)+", encrypted "+(s?"yes":"no")),await this.checkCommand(2,r,0,p),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-v)+"ms to erase "+y+" bytes"),y}async flashDeflBegin(t=0,e=0,a=0,s=!1){let i,r=this.getFlashWriteSize(),n=Math.floor((e+r-1)/r),h=Math.floor((t+r-1)/r),l=0,o=0;return this.IS_STUB?(l=t,o=b(3e4,l)):(l=h*r,o=m),i=Ee("<IIII",l,n,r,a),await this.checkCommand(16,i,0,o),o}async flashFinish(){let t=Ee("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){let t=Ee("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return v(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ee("<IIII",t,e,a,s);i>0&&r.concat(Ee("<IIII",v(this.getChipFamily()).uartDateReg,0,0,i)),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){let s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{let s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,s=0){let i=v(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,l=r+i.usr2Offs,o=r+i.w0Offs,_=1<<18;if(s>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");let d=8*e.length,f=await this.readRegister(h),u=await this.readRegister(l),c=1<<31;if(s>0&&(c|=268435456),d>0&&(c|=134217728),await this.setDataLengths(i,d,s),await this.writeRegister(h,c),await this.writeRegister(l,7<<28|t),0==d)await this.writeRegister(o,0);else{e.concat(new Array(e.length%4).fill(0));let t=Ae("I".repeat(Math.floor(e.length/4)),e),s=o;this.logger.debug(`Words Length: ${t.length}`);for(const e of t)this.logger.debug(`Writing word ${a(e)} to register offset ${a(s)}`),await this.writeRegister(s,e),s+=4}await this.writeRegister(n,_),await this.waitDone(n,_);let g=await this.readRegister(o);return await this.writeRegister(h,f),await this.writeRegister(l,u),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");let t=await this.flashId(),e=255&t,s=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)}${s.toString(16)}`),this.flashSize=i[s],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){let a=4096,s=Math.floor((e+a-1)/a),i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ee("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ee("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){let e=this.IS_STUB?m:500,a=Ee("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(){const t=await z(this.chipFamily);let e,a=2048;this.logger.log("Uploading stub...");for(let e of["text","data"])if(Object.keys(t).includes(e)){let s=t[e+"_start"],i=t[e].length,r=Math.floor((i+a-1)/a);await this.memBegin(i,r,a,s);for(let s of Array(r).keys()){let r=s*a,n=r+a;n>i&&(n=i),await this.memBlock(t[e].slice(r,n),s)}}this.logger.log("Running stub..."),await this.memFinish(t.entry);const s=await this.readPacket(500);if(e=String.fromCharCode(...s),"OHAI"!=e)throw new Error("Failed to start stub. Unexpected response: "+e);this.logger.log("Stub is now running...");const i=new Te(this.port,this.logger,this);return await i.detectFlashSize(),i}async writeToStream(t){const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){console.error("Ignoring release lock error",t)}}async disconnect(){this._parent?await this._parent.disconnect():(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1)}}class Te extends Be{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,s,i){let r=await z(this.chipFamily),n=i,h=i+t;console.log(n,h),console.log(r.data_start,r.data.length,r.text_start,r.text.length);for(let[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.")}async eraseFlash(){await this.checkCommand(208,[],0,y)}}const Ce=async t=>{const e=await navigator.serial.requestPort();return t.log("Connecting..."),await e.open({baudRate:r}),t.log("Connected successfully."),new Be(e,t)};export{l as CHIP_FAMILY_ESP32,d as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,u as CHIP_FAMILY_ESP32C5,c as CHIP_FAMILY_ESP32C6,g as CHIP_FAMILY_ESP32H2,w as CHIP_FAMILY_ESP32P4,o as CHIP_FAMILY_ESP32S2,_ as CHIP_FAMILY_ESP32S3,h as CHIP_FAMILY_ESP8266,Be as ESPLoader,Ce as connect};
|
|
1
|
+
const t=t=>{let e=[];for(let a=0;a<t.length;a++){let s=t.charCodeAt(a);s<=255&&e.push(s)}return e},e=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{let a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),i={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB"},r=115200,n=t(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),h=33382,l=50,o=12882,_=12883,d=12994,f=12995,u=12997,c=12998,g=207969,w=12914,m=12928,p={4293968129:{name:"ESP8266",family:h},15736195:{name:"ESP32",family:l},1990:{name:"ESP32-S2",family:o},9:{name:"ESP32-S3",family:_},1867591791:{name:"ESP32-C2",family:d},2084675695:{name:"ESP32-C2",family:d},203546735:{name:"ESP32-C2",family:d},1763790959:{name:"ESP32-C3",family:f},456216687:{name:"ESP32-C3",family:f},1216438383:{name:"ESP32-C3",family:f},1130455151:{name:"ESP32-C3",family:f},1607549039:{name:"ESP32-C5",family:u},285294703:{name:"ESP32-C5",family:u},1675706479:{name:"ESP32-C5",family:u},1548751960:{name:"ESP32-C5",family:u},3619110528:{name:"ESP32-H2",family:w},752910447:{name:"ESP32-C6",family:c},1913741423:{name:"ESP32-C61",family:g},182303440:{name:"ESP32-P4",family:m},117676761:{name:"ESP32-P4",family:m},0:{name:"ESP32-P4",family:m}},y=3e3,b=6e5,v=(t,e)=>{let a=Math.floor(t*(e/486));return a<y?y:a},k=t=>{switch(t){case l:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case o:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case _:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case h:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case d:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case u:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case c:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1610719232,macFuse:1610719300,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1342754816,baseFuse:1343410176,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,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 z extends Error{constructor(t){super(t),this.name="SlipReadError"}}const S=async e=>{let a;return e==l?a=await import("./esp32-BNIFdu1P.js"):e==o?a=await import("./esp32s2-Bk4mqADi.js"):e==_?a=await import("./esp32s3-Df3OUCOC.js"):e==h?a=await import("./esp8266-CQFcqJ_a.js"):e==d?a=await import("./esp32c2-BqxquOKw.js"):e==f?a=await import("./esp32c3-BOOqe8me.js"):e==u?a=await import("./esp32c5-C8uE-s4t.js"):e==c?a=await import("./esp32c6-Cg5qYgg7.js"):e==g?a=await import("./esp32c61-CzCdsydk.js"):e==w?a=await import("./esp32h2-DZa_lpff.js"):e==m&&(a=await import("./esp32p4-DyGqUAeZ.js")),{...a,text:t(atob(a.text)),data:t(atob(a.data))}};function F(t){let e=t.length;for(;--e>=0;)t[e]=0}const U=256,D=286,O=30,x=15,R=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]),I=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]),E=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),A=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),B=new Array(576);F(B);const T=new Array(60);F(T);const C=new Array(512);F(C);const L=new Array(256);F(L);const P=new Array(29);F(P);const Z=new Array(O);function M(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let N,$,H;function j(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}F(Z);const V=t=>t<256?C[t]:C[256+(t>>>7)],W=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},K=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,W(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},Y=(t,e,a)=>{K(t,a[2*e],a[2*e+1])},q=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},G=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=x;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=q(s[e]++,e))}},X=t=>{let e;for(e=0;e<D;e++)t.dyn_ltree[2*e]=0;for(e=0;e<O;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},Q=t=>{t.bi_valid>8?W(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},J=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},tt=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&J(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!J(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},et=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?Y(t,i,e):(r=L[i],Y(t,r+U+1,e),n=R[r],0!==n&&(i-=P[r],K(t,i,n)),s--,r=V(s),Y(t,r,a),n=I[r],0!==n&&(s-=Z[r],K(t,s,n)))}while(h<t.sym_next);Y(t,256,e)},at=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,l,o=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=o=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=o<2?++o:0,a[2*l]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=s[2*l+1]);for(e.max_code=o,n=t.heap_len>>1;n>=1;n--)tt(t,a,n);l=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],tt(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*l]=a[2*n]+a[2*h],t.depth[l]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=l,t.heap[1]=l++,tt(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,l=e.stat_desc.max_length;let o,_,d,f,u,c,g=0;for(f=0;f<=x;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;o<573;o++)_=t.heap[o],f=a[2*a[2*_+1]+1]+1,f>l&&(f=l,g++),a[2*_+1]=f,_>s||(t.bl_count[f]++,u=0,_>=h&&(u=n[_-h]),c=a[2*_],t.opt_len+=c*(f+u),r&&(t.static_len+=c*(i[2*_+1]+u)));if(0!==g){do{for(f=l-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[l]--,g-=2}while(g>0);for(f=l;0!==f;f--)for(_=t.bl_count[f];0!==_;)d=t.heap[--o],d>s||(a[2*d+1]!==f&&(t.opt_len+=(f-a[2*d+1])*a[2*d],a[2*d+1]=f),_--)}})(t,e),G(a,o,t.bl_count)},st=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<l&&i===n||(h<o?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4))},it=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,l=7,o=4;for(0===n&&(l=138,o=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<l&&i===n)){if(h<o)do{Y(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(Y(t,i,t.bl_tree),h--),Y(t,16,t.bl_tree),K(t,h-3,2)):h<=10?(Y(t,17,t.bl_tree),K(t,h-3,3)):(Y(t,18,t.bl_tree),K(t,h-11,7));h=0,r=i,0===n?(l=138,o=3):i===n?(l=6,o=3):(l=7,o=4)}};let rt=!1;const nt=(t,e,a,s)=>{K(t,0+(s?1:0),3),Q(t),W(t,a),W(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var ht=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<U;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),at(t,t.l_desc),at(t,t.d_desc),n=(t=>{let e;for(st(t,t.dyn_ltree,t.l_desc.max_code),st(t,t.dyn_dtree,t.d_desc.max_code),at(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*A[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?nt(t,e,a,s):4===t.strategy||r===i?(K(t,2+(s?1:0),3),et(t,B,T)):(K(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(K(t,e-257,5),K(t,a-1,5),K(t,s-4,4),i=0;i<s;i++)K(t,t.bl_tree[2*A[i]+1],3);it(t,t.dyn_ltree,e-1),it(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),et(t,t.dyn_ltree,t.dyn_dtree)),X(t),s&&Q(t)},lt={_tr_init:t=>{rt||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(P[s]=a,t=0;t<1<<R[s];t++)L[a++]=s;for(L[a-1]=s,i=0,s=0;s<16;s++)for(Z[s]=i,t=0;t<1<<I[s];t++)C[i++]=s;for(i>>=7;s<O;s++)for(Z[s]=i<<7,t=0;t<1<<I[s]-7;t++)C[256+i++]=s;for(e=0;e<=x;e++)r[e]=0;for(t=0;t<=143;)B[2*t+1]=8,t++,r[8]++;for(;t<=255;)B[2*t+1]=9,t++,r[9]++;for(;t<=279;)B[2*t+1]=7,t++,r[7]++;for(;t<=287;)B[2*t+1]=8,t++,r[8]++;for(G(B,287,r),t=0;t<O;t++)T[2*t+1]=5,T[2*t]=q(t,5);N=new M(B,R,257,D,x),$=new M(T,I,0,O,x),H=new M(new Array(0),E,0,19,7)})(),rt=!0),t.l_desc=new j(t.dyn_ltree,N),t.d_desc=new j(t.dyn_dtree,$),t.bl_desc=new j(t.bl_tree,H),t.bi_buf=0,t.bi_valid=0,X(t)},_tr_stored_block:nt,_tr_flush_block:ht,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(L[a]+U+1)]++,t.dyn_dtree[2*V(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{K(t,2,3),Y(t,256,B),(t=>{16===t.bi_valid?(W(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 ot=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const _t=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var dt=(t,e,a,s)=>{const i=_t,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},ft={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"},ut={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:ct,_tr_stored_block:gt,_tr_flush_block:wt,_tr_tally:mt,_tr_align:pt}=lt,{Z_NO_FLUSH:yt,Z_PARTIAL_FLUSH:bt,Z_FULL_FLUSH:vt,Z_FINISH:kt,Z_BLOCK:zt,Z_OK:St,Z_STREAM_END:Ft,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:Dt,Z_BUF_ERROR:Ot,Z_DEFAULT_COMPRESSION:xt,Z_FILTERED:Rt,Z_HUFFMAN_ONLY:It,Z_RLE:Et,Z_FIXED:At,Z_DEFAULT_STRATEGY:Bt,Z_UNKNOWN:Tt,Z_DEFLATED:Ct}=ut,Lt=258,Pt=262,Zt=42,Mt=113,Nt=666,$t=(t,e)=>(t.msg=ft[e],e),Ht=t=>2*t-(t>4?9:0),jt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Vt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Wt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const Kt=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Yt=(t,e)=>{wt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Kt(t.strm)},qt=(t,e)=>{t.pending_buf[t.pending++]=e},Gt=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Xt=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=ot(t.adler,e,i,a):2===t.state.wrap&&(t.adler=dt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},Qt=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const l=t.strstart>t.w_size-Pt?t.strstart-(t.w_size-Pt):0,o=t.window,_=t.w_mask,d=t.prev,f=t.strstart+Lt;let u=o[r+n-1],c=o[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,o[a+n]===c&&o[a+n-1]===u&&o[a]===o[r]&&o[++a]===o[r+1]){r+=2,a++;do{}while(o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&o[++r]===o[++a]&&r<f);if(s=Lt-(f-r),r=f-Lt,s>n){if(t.match_start=e,n=s,s>=h)break;u=o[r+n-1],c=o[r+n]}}}while((e=d[e&_])>l&&0!==--i);return n<=t.lookahead?n:t.lookahead},Jt=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Pt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Vt(t),s+=e),0===t.strm.avail_in)break;if(a=Xt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Wt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Wt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Pt&&0!==t.strm.avail_in)},te=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==kt||e===yt||a!==s+t.strm.avail_in))break;n=e===kt&&a===s+t.strm.avail_in?1:0,gt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,Kt(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(Xt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==yt&&e!==kt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(Xt(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===kt)&&e!==yt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===kt&&0===t.strm.avail_in&&a===s?1:0,gt(t,t.block_start,a,n),t.block_start+=a,Kt(t.strm)),n?3:1)},ee=(t,e)=>{let a,s;for(;;){if(t.lookahead<Pt){if(Jt(t),t.lookahead<Pt&&e===yt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-Pt&&(t.match_length=Qt(t,a)),t.match_length>=3)if(s=mt(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=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+1]);else s=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2},ae=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<Pt){if(Jt(t),t.lookahead<Pt&&e===yt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-Pt&&(t.match_length=Qt(t,a),t.match_length<=5&&(t.strategy===Rt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=mt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Wt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(Yt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=mt(t,0,t.window[t.strstart-1]),s&&Yt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=mt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2};function se(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ie=[new se(0,0,0,0,te),new se(4,4,8,4,ee),new se(4,5,16,8,ee),new se(4,6,32,32,ee),new se(4,4,16,16,ae),new se(8,16,32,32,ae),new se(8,16,128,128,ae),new se(8,32,128,256,ae),new se(32,128,258,1024,ae),new se(32,258,258,4096,ae)];function re(){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=Ct,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),jt(this.dyn_ltree),jt(this.dyn_dtree),jt(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),jt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),jt(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 ne=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Zt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Mt&&e.status!==Nt?1:0},he=t=>{if(ne(t))return $t(t,Ut);t.total_in=t.total_out=0,t.data_type=Tt;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?Zt:Mt,t.adler=2===e.wrap?0:1,e.last_flush=-2,ct(e),St},le=t=>{const e=he(t);var a;return e===St&&((a=t.state).window_size=2*a.w_size,jt(a.head),a.max_lazy_match=ie[a.level].max_lazy,a.good_match=ie[a.level].good_length,a.nice_match=ie[a.level].nice_length,a.max_chain_length=ie[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},oe=(t,e,a,s,i,r)=>{if(!t)return Ut;let n=1;if(e===xt&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ct||s<8||s>15||e<0||e>9||r<0||r>At||8===s&&1!==n)return $t(t,Ut);8===s&&(s=9);const h=new re;return t.state=h,h.strm=t,h.status=Zt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,le(t)};var _e={deflateInit:(t,e)=>oe(t,e,Ct,15,8,Bt),deflateInit2:oe,deflateReset:le,deflateResetKeep:he,deflateSetHeader:(t,e)=>ne(t)||2!==t.state.wrap?Ut:(t.state.gzhead=e,St),deflate:(t,e)=>{if(ne(t)||e>zt||e<0)return t?$t(t,Ut):Ut;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Nt&&e!==kt)return $t(t,0===t.avail_out?Ot:Ut);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(Kt(t),0===t.avail_out)return a.last_flush=-1,St}else if(0===t.avail_in&&Ht(e)<=Ht(s)&&e!==kt)return $t(t,Ot);if(a.status===Nt&&0!==t.avail_in)return $t(t,Ot);if(a.status===Zt&&0===a.wrap&&(a.status=Mt),a.status===Zt){let e=Ct+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=It||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,Gt(a,e),0!==a.strstart&&(Gt(a,t.adler>>>16),Gt(a,65535&t.adler)),t.adler=1,a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St}if(57===a.status)if(t.adler=0,qt(a,31),qt(a,139),qt(a,8),a.gzhead)qt(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),qt(a,255&a.gzhead.time),qt(a,a.gzhead.time>>8&255),qt(a,a.gzhead.time>>16&255),qt(a,a.gzhead.time>>24&255),qt(a,9===a.level?2:a.strategy>=It||a.level<2?4:0),qt(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(qt(a,255&a.gzhead.extra.length),qt(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=dt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(qt(a,0),qt(a,0),qt(a,0),qt(a,0),qt(a,0),qt(a,9===a.level?2:a.strategy>=It||a.level<2?4:0),qt(a,3),a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=dt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,Kt(t),0!==a.pending)return a.last_flush=-1,St;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=dt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),Kt(t),0!==a.pending)return a.last_flush=-1,St;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,qt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s)),Kt(t),0!==a.pending)return a.last_flush=-1,St;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,qt(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=dt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(Kt(t),0!==a.pending))return a.last_flush=-1,St;qt(a,255&t.adler),qt(a,t.adler>>8&255),t.adler=0}if(a.status=Mt,Kt(t),0!==a.pending)return a.last_flush=-1,St}if(0!==t.avail_in||0!==a.lookahead||e!==yt&&a.status!==Nt){let s=0===a.level?te(a,e):a.strategy===It?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Jt(t),0===t.lookahead)){if(e===yt)return 1;break}if(t.match_length=0,a=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Et?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Lt){if(Jt(t),t.lookahead<=Lt&&e===yt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Lt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Lt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=mt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=mt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Yt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===kt?(Yt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(Yt(t,!1),0===t.strm.avail_out)?1:2})(a,e):ie[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Nt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),St;if(2===s&&(e===bt?pt(a):e!==zt&&(gt(a,0,0,!1),e===vt&&(jt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),Kt(t),0===t.avail_out))return a.last_flush=-1,St}return e!==kt?St:a.wrap<=0?Ft:(2===a.wrap?(qt(a,255&t.adler),qt(a,t.adler>>8&255),qt(a,t.adler>>16&255),qt(a,t.adler>>24&255),qt(a,255&t.total_in),qt(a,t.total_in>>8&255),qt(a,t.total_in>>16&255),qt(a,t.total_in>>24&255)):(Gt(a,t.adler>>>16),Gt(a,65535&t.adler)),Kt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?St:Ft)},deflateEnd:t=>{if(ne(t))return Ut;const e=t.state.status;return t.state=null,e===Mt?$t(t,Dt):St},deflateSetDictionary:(t,e)=>{let a=e.length;if(ne(t))return Ut;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Zt||s.lookahead)return Ut;if(1===i&&(t.adler=ot(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(jt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Jt(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Wt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,Jt(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,St},deflateInfo:"pako deflate (from Nodeca project)"};const de=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var fe=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)de(a,e)&&(t[e]=a[e])}}return t},ue=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ce=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ce=!1}const ge=new Uint8Array(256);for(let t=0;t<256;t++)ge[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ge[254]=ge[254]=1;var we=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var me=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 pe=Object.prototype.toString,{Z_NO_FLUSH:ye,Z_SYNC_FLUSH:be,Z_FULL_FLUSH:ve,Z_FINISH:ke,Z_OK:ze,Z_STREAM_END:Se,Z_DEFAULT_COMPRESSION:Fe,Z_DEFAULT_STRATEGY:Ue,Z_DEFLATED:De}=ut;function Oe(t){this.options=fe({level:Fe,method:De,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ue},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 me,this.strm.avail_out=0;let a=_e.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ze)throw new Error(ft[a]);if(e.header&&_e.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?we(e.dictionary):"[object ArrayBuffer]"===pe.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=_e.deflateSetDictionary(this.strm,t),a!==ze)throw new Error(ft[a]);this._dict_set=!0}}Oe.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ke:ye,"string"==typeof t?a.input=we(t):"[object ArrayBuffer]"===pe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===be||r===ve)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=_e.deflate(a,r),i===Se)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=_e.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ze;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Oe.prototype.onData=function(t){this.chunks.push(t)},Oe.prototype.onEnd=function(t){t===ze&&(this.result=ue(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var xe={deflate:function(t,e){const a=new Oe(e);if(a.push(t,!0),a.err)throw a.msg||ft[a.err];return a.result}};const{deflate:Re}=xe;var Ie=Re;const Ee={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},q:{u:DataView.prototype.getInt64,p:DataView.prototype.setInt64,bytes:8},Q:{u:DataView.prototype.getUint64,p:DataView.prototype.setUint64,bytes:8}},Ae=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";let s=[],i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Ee))throw"Unhandled character '"+t+"' in pack format";let a=Ee[t].bytes,r=new DataView(new ArrayBuffer(a));Ee[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Be=(t,e)=>{let a=0,s=[],i=!0;for(let e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Ee))throw"Unhandled character '"+t+"' in unpack format";let r=Ee[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);let h=Ee[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Te extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=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.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}async initialize(){await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.readLoop()),await this.sync();let t=await this.readRegister(1073745920),e=p[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;let s=k(this.getChipFamily()).macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(s+4*t);this.logger.log(`Chip type ${this.chipName}`)}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{for(;;){const{value:t,done:e}=await this._reader.read();if(e){this._reader.releaseLock();break}t&&0!==t.length&&this._inputBuffer.push(...Array.from(t))}}catch(t){console.error("Read loop got disconnected")}this.connected=!1,this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){this.logger.log("Try hard reset."),t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1)):(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.setRTS(!0),await this.sleep(100),await this.setRTS(!1)),await new Promise(t=>setTimeout(t,1e3))}macAddr(){let t,e=new Array(6).fill(0),a=this._efuses[0],s=this._efuses[1],i=this._efuses[2],r=this._efuses[3];if(this.chipFamily==h){if(0!=r)t=[r>>16&255,r>>8&255,255&r];else if(s>>16&255){if(1!=(s>>16&255))throw new Error("Couldnt determine OUI");t=[172,208,116]}else t=[24,254,52];e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=s>>8&255,e[4]=255&s,e[5]=a>>24&255}else if(this.chipFamily==l)e[0]=i>>8&255,e[1]=255&i,e[2]=s>>24&255,e[3]=s>>16&255,e[4]=s>>8&255,e[5]=255&s;else{if(this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=m)throw new Error("Unknown chip family");e[0]=s>>8&255,e[1]=255&s,e[2]=a>>24&255,e[3]=a>>16&255,e[4]=a>>8&255,e[5]=255&a}return e}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));let e=Ae("<I",t);await this.sendCommand(10,e);let[s,i]=await this.getResponse(10);return s}async checkCommand(t,e,s=0,i=3e3){i=Math.min(i,12e5),await this.sendCommand(t,e,s);let[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let p=0;if(this.IS_STUB||this.chipFamily==h?p=2:[l,o,_,d,f,u,c,g,w,m].includes(this.chipFamily)?p=4:[2,4].includes(n.length)&&(p=n.length),n.length<p)throw new Error("Didn't get enough status bytes");let y=n.slice(-p,n.length);if(n=n.slice(0,-p),this.debug&&(this.logger.debug("status",y),this.logger.debug("value",r),this.logger.debug("data",n)),1==y[0])throw 5==y[1]?new Error("Invalid (unsupported) command "+a(t)):new Error("Command failure error code "+a(y[1]));return[r,n]}async sendCommand(t,e,a=0){let s=(t=>{let e=[192];for(let a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e})([...Ae("<BBHI",0,t,e.length,a),...e]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let i=null,r=!1,n=[];for(;;){let h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(10)}if(0==n.length){throw new z("Timed out waiting for packet "+(null===i?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+e(n));for(let t of n)if(null===i){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new z("Invalid head of packet ("+a(t)+")");i=[]}else if(r)if(r=!1,220==t)i.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+e(n)),this.logger.debug("Remaining data in serial buffer: "+e(this._inputBuffer))),new z("Invalid SLIP escape (0xdb, "+a(t)+")");i.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+e(i)),i;i.push(t)}}throw new z("Invalid state")}async getResponse(t,e=3e3){for(let s=0;s<100;s++){const s=await this.readPacket(e);if(s.length<8)continue;const[i,r,n,h]=Be("<BBHI",s.slice(0,8));if(1!=i)continue;const l=s.slice(8);if(null==t||r==t)return[h,l];if(0!=l[0]&&5==l[1])throw this._inputBuffer.length=0,new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(let a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==h)throw new Error("Changing baud rate is not supported on the ESP8266");this.logger.log("Attempting to change baud rate to "+t+"...");try{let e=Ae("<II",t,this.IS_STUB?r:0);await this.checkCommand(15,e)}catch(e){throw console.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)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this.readLoop(),this.logger.log(`Changed baud rate to ${t}`)}catch(e){throw console.error(e),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){if(this._inputBuffer.length=0,await this._sync())return await s(100),!0;await s(100)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,n);for(let t=0;t<8;t++)try{let[t,e]=await this.getResponse(8,100);if(e.length>1&&0==e[0]&&0==e[1])return!0}catch(t){}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,s=0,i=!1){if(t.byteLength>=8){var r=Array.from(new Uint8Array(t,0,4));let e=r[0],s=r[2],i=r[3];this.logger.log(`Image header, Magic=${a(e)}, FlashMode=${a(s)}, FlashSizeFreq=${a(i)}`)}let n,h=t.byteLength,l=0,o=y;i?(n=Ie(new Uint8Array(t),{level:9}).buffer,l=n.byteLength,this.logger.log(`Writing data with filesize: ${h}. Compressed Size: ${l}`),o=await this.flashDeflBegin(h,l,s)):(this.logger.log(`Writing data with filesize: ${h}`),n=t,await this.flashBegin(h,s));let _=[],d=0,f=0,u=0,c=Date.now(),g=this.getFlashWriteSize(),w=i?l:h;for(;w-u>0;)this.debug&&this.logger.log(`Writing at ${a(s+d*g,8)} `),w-u>=g?_=Array.from(new Uint8Array(n,u,g)):(_=Array.from(new Uint8Array(n,u,w-u)),i||(_=_.concat(new Array(g-_.length).fill(255)))),i?await this.flashDeflBlock(_,d,o):await this.flashBlock(_,d),d+=1,f+=i?Math.round(_.length*h/l):_.length,u+=g,e(Math.min(f,h),h);this.logger.log("Took "+(Date.now()-c)+"ms to write "+w+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,s=!1){let i,r,n=this.getFlashWriteSize();!this.IS_STUB&&[l,o,_,d,f,u,c,g,w,m].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));let p,b=Math.floor((t+n-1)/n);i=this.chipFamily==h?this.getEraseSize(e,t):t,p=this.IS_STUB?y:v(3e4,t);let k=Date.now();return r=Ae("<IIII",i,b,n,e),this.chipFamily!=l&&this.chipFamily!=o&&this.chipFamily!=_&&this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=m||(r=r.concat(Ae("<I",s?1:0))),this.logger.log("Erase size "+i+", blocks "+b+", block size "+a(n,4)+", offset "+a(e,4)+", encrypted "+(s?"yes":"no")),await this.checkCommand(2,r,0,p),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-k)+"ms to erase "+b+" bytes"),b}async flashDeflBegin(t=0,e=0,a=0,s=!1){let i,r=this.getFlashWriteSize(),n=Math.floor((e+r-1)/r),h=Math.floor((t+r-1)/r),l=0,o=0;return this.IS_STUB?(l=t,o=v(3e4,l)):(l=h*r,o=y),i=Ae("<IIII",l,n,r,a),await this.checkCommand(16,i,0,o),o}async flashFinish(){let t=Ae("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){let t=Ae("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return k(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ae("<IIII",t,e,a,s);i>0&&r.concat(Ae("<IIII",k(this.getChipFamily()).uartDateReg,0,0,i)),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){let s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{let s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,s=0){let i=k(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,l=r+i.usr2Offs,o=r+i.w0Offs,_=1<<18;if(s>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");let d=8*e.length,f=await this.readRegister(h),u=await this.readRegister(l),c=1<<31;if(s>0&&(c|=268435456),d>0&&(c|=134217728),await this.setDataLengths(i,d,s),await this.writeRegister(h,c),await this.writeRegister(l,7<<28|t),0==d)await this.writeRegister(o,0);else{e.concat(new Array(e.length%4).fill(0));let t=Be("I".repeat(Math.floor(e.length/4)),e),s=o;this.logger.debug(`Words Length: ${t.length}`);for(const e of t)this.logger.debug(`Writing word ${a(e)} to register offset ${a(s)}`),await this.writeRegister(s,e),s+=4}await this.writeRegister(n,_),await this.waitDone(n,_);let g=await this.readRegister(o);return await this.writeRegister(h,f),await this.writeRegister(l,u),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");let t=await this.flashId(),e=255&t,s=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)}${s.toString(16)}`),this.flashSize=i[s],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){let a=4096,s=Math.floor((e+a-1)/a),i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ae("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ae("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){let e=this.IS_STUB?y:500,a=Ae("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(){const t=await S(this.chipFamily);let e,a=2048;this.logger.log("Uploading stub...");for(let e of["text","data"])if(Object.keys(t).includes(e)){let s=t[e+"_start"],i=t[e].length,r=Math.floor((i+a-1)/a);await this.memBegin(i,r,a,s);for(let s of Array(r).keys()){let r=s*a,n=r+a;n>i&&(n=i),await this.memBlock(t[e].slice(r,n),s)}}this.logger.log("Running stub..."),await this.memFinish(t.entry);const s=await this.readPacket(500);if(e=String.fromCharCode(...s),"OHAI"!=e)throw new Error("Failed to start stub. Unexpected response: "+e);this.logger.log("Stub is now running...");const i=new Ce(this.port,this.logger,this);return await i.detectFlashSize(),i}async writeToStream(t){const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){console.error("Ignoring release lock error",t)}}async disconnect(){this._parent?await this._parent.disconnect():(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1)}}class Ce extends Te{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,s,i){let r=await S(this.chipFamily),n=i,h=i+t;console.log(n,h),console.log(r.data_start,r.data.length,r.text_start,r.text.length);for(let[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.")}async eraseFlash(){await this.checkCommand(208,[],0,b)}}const Le=async t=>{const e=await navigator.serial.requestPort();return t.log("Connecting..."),await e.open({baudRate:r}),t.log("Connected successfully."),new Te(e,t)};export{l as CHIP_FAMILY_ESP32,d as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,u as CHIP_FAMILY_ESP32C5,c as CHIP_FAMILY_ESP32C6,g as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,m as CHIP_FAMILY_ESP32P4,o as CHIP_FAMILY_ESP32S2,_ as CHIP_FAMILY_ESP32S3,h as CHIP_FAMILY_ESP8266,Te as ESPLoader,Le as connect};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tasmota-webserial-esptool",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"description": "Flash ESP devices using WebSerial",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -20,16 +20,16 @@
|
|
|
20
20
|
"@rollup/plugin-json": "^6.1.0",
|
|
21
21
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
22
22
|
"@rollup/plugin-terser": "^0.4.4",
|
|
23
|
-
"@rollup/plugin-typescript": "^12.1.
|
|
24
|
-
"@types/pako": "^2.0.
|
|
23
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
24
|
+
"@types/pako": "^2.0.4",
|
|
25
25
|
"@types/w3c-web-serial": "^1.0.7",
|
|
26
|
-
"prettier": "^3.
|
|
27
|
-
"rollup": "^4.
|
|
26
|
+
"prettier": "^3.6.2",
|
|
27
|
+
"rollup": "^4.46.3",
|
|
28
28
|
"serve": "^14.2.4",
|
|
29
29
|
"typescript": "^5.7.3"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@types/node": "^
|
|
32
|
+
"@types/node": "^24.3.0",
|
|
33
33
|
"pako": "^2.1.0",
|
|
34
34
|
"tslib": "^2.8.1"
|
|
35
35
|
}
|
package/src/const.ts
CHANGED
|
@@ -150,6 +150,18 @@ export const ESP32C6_SPI_W0_OFFS = 0x58;
|
|
|
150
150
|
export const ESP32C6_UART_DATE_REG_ADDR = 0x6000007c;
|
|
151
151
|
export const ESP32C6_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
152
152
|
|
|
153
|
+
export const ESP32C61_SPI_REG_BASE = 0x60003000;
|
|
154
|
+
export const ESP32C61_BASEFUSEADDR = 0x600b4800;
|
|
155
|
+
export const ESP32C61_MACFUSEADDR = 0x600b4800 + 0x044;
|
|
156
|
+
export const ESP32C61_SPI_USR_OFFS = 0x18;
|
|
157
|
+
export const ESP32C61_SPI_USR1_OFFS = 0x1c;
|
|
158
|
+
export const ESP32C61_SPI_USR2_OFFS = 0x20;
|
|
159
|
+
export const ESP32C61_SPI_MOSI_DLEN_OFFS = 0x24;
|
|
160
|
+
export const ESP32C61_SPI_MISO_DLEN_OFFS = 0x28;
|
|
161
|
+
export const ESP32C61_SPI_W0_OFFS = 0x58;
|
|
162
|
+
export const ESP32C61_UART_DATE_REG_ADDR = 0x6000007c;
|
|
163
|
+
export const ESP32C61_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
164
|
+
|
|
153
165
|
export const ESP32H2_SPI_REG_BASE = 0x60003000;
|
|
154
166
|
export const ESP32H2_BASEFUSEADDR = 0x6001a000;
|
|
155
167
|
export const ESP32H2_MACFUSEADDR = 0x6001a000 + 0x044;
|
|
@@ -201,6 +213,7 @@ export const CHIP_FAMILY_ESP32C2 = 0x32c2;
|
|
|
201
213
|
export const CHIP_FAMILY_ESP32C3 = 0x32c3;
|
|
202
214
|
export const CHIP_FAMILY_ESP32C5 = 0x32c5;
|
|
203
215
|
export const CHIP_FAMILY_ESP32C6 = 0x32c6;
|
|
216
|
+
export const CHIP_FAMILY_ESP32C61 = 0x32c61;
|
|
204
217
|
export const CHIP_FAMILY_ESP32H2 = 0x3272;
|
|
205
218
|
export const CHIP_FAMILY_ESP32P4 = 0x3280;
|
|
206
219
|
export type ChipFamily =
|
|
@@ -212,6 +225,7 @@ export type ChipFamily =
|
|
|
212
225
|
| typeof CHIP_FAMILY_ESP32C3
|
|
213
226
|
| typeof CHIP_FAMILY_ESP32C5
|
|
214
227
|
| typeof CHIP_FAMILY_ESP32C6
|
|
228
|
+
| typeof CHIP_FAMILY_ESP32C61
|
|
215
229
|
| typeof CHIP_FAMILY_ESP32H2
|
|
216
230
|
| typeof CHIP_FAMILY_ESP32P4;
|
|
217
231
|
|
|
@@ -240,6 +254,7 @@ export const CHIP_DETECT_MAGIC_VALUES: ChipInfo = {
|
|
|
240
254
|
0x5C501458: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
|
|
241
255
|
0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
242
256
|
0x2ce0806f: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
|
|
257
|
+
0x7211606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
243
258
|
0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
244
259
|
0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
245
260
|
0x0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
@@ -409,6 +424,20 @@ export const getSpiFlashAddresses = (
|
|
|
409
424
|
uartDateReg: ESP32C6_UART_DATE_REG_ADDR,
|
|
410
425
|
flashOffs: ESP32C6_BOOTLOADER_FLASH_OFFSET,
|
|
411
426
|
};
|
|
427
|
+
case CHIP_FAMILY_ESP32C61:
|
|
428
|
+
return {
|
|
429
|
+
regBase: ESP32C61_SPI_REG_BASE,
|
|
430
|
+
baseFuse: ESP32C61_BASEFUSEADDR,
|
|
431
|
+
macFuse: ESP32C61_MACFUSEADDR,
|
|
432
|
+
usrOffs: ESP32C61_SPI_USR_OFFS,
|
|
433
|
+
usr1Offs: ESP32C61_SPI_USR1_OFFS,
|
|
434
|
+
usr2Offs: ESP32C61_SPI_USR2_OFFS,
|
|
435
|
+
mosiDlenOffs: ESP32C61_SPI_MOSI_DLEN_OFFS,
|
|
436
|
+
misoDlenOffs: ESP32C61_SPI_MISO_DLEN_OFFS,
|
|
437
|
+
w0Offs: ESP32C61_SPI_W0_OFFS,
|
|
438
|
+
uartDateReg: ESP32C61_UART_DATE_REG_ADDR,
|
|
439
|
+
flashOffs: ESP32C61_BOOTLOADER_FLASH_OFFSET,
|
|
440
|
+
};
|
|
412
441
|
case CHIP_FAMILY_ESP32H2:
|
|
413
442
|
return {
|
|
414
443
|
regBase: ESP32H2_SPI_REG_BASE,
|
package/src/esp_loader.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
CHIP_FAMILY_ESP32C3,
|
|
7
7
|
CHIP_FAMILY_ESP32C5,
|
|
8
8
|
CHIP_FAMILY_ESP32C6,
|
|
9
|
+
CHIP_FAMILY_ESP32C61,
|
|
9
10
|
CHIP_FAMILY_ESP32H2,
|
|
10
11
|
CHIP_FAMILY_ESP32P4,
|
|
11
12
|
CHIP_FAMILY_ESP8266,
|
|
@@ -251,6 +252,7 @@ export class ESPLoader extends EventTarget {
|
|
|
251
252
|
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
252
253
|
this.chipFamily == CHIP_FAMILY_ESP32C5 ||
|
|
253
254
|
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
255
|
+
this.chipFamily == CHIP_FAMILY_ESP32C61 ||
|
|
254
256
|
this.chipFamily == CHIP_FAMILY_ESP32H2 ||
|
|
255
257
|
this.chipFamily == CHIP_FAMILY_ESP32P4
|
|
256
258
|
) {
|
|
@@ -309,6 +311,7 @@ export class ESPLoader extends EventTarget {
|
|
|
309
311
|
CHIP_FAMILY_ESP32C3,
|
|
310
312
|
CHIP_FAMILY_ESP32C5,
|
|
311
313
|
CHIP_FAMILY_ESP32C6,
|
|
314
|
+
CHIP_FAMILY_ESP32C61,
|
|
312
315
|
CHIP_FAMILY_ESP32H2,
|
|
313
316
|
CHIP_FAMILY_ESP32P4,
|
|
314
317
|
].includes(this.chipFamily)
|
|
@@ -745,6 +748,7 @@ export class ESPLoader extends EventTarget {
|
|
|
745
748
|
CHIP_FAMILY_ESP32C3,
|
|
746
749
|
CHIP_FAMILY_ESP32C5,
|
|
747
750
|
CHIP_FAMILY_ESP32C6,
|
|
751
|
+
CHIP_FAMILY_ESP32C61,
|
|
748
752
|
CHIP_FAMILY_ESP32H2,
|
|
749
753
|
CHIP_FAMILY_ESP32P4,
|
|
750
754
|
].includes(this.chipFamily)
|
|
@@ -775,6 +779,7 @@ export class ESPLoader extends EventTarget {
|
|
|
775
779
|
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
776
780
|
this.chipFamily == CHIP_FAMILY_ESP32C5 ||
|
|
777
781
|
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
782
|
+
this.chipFamily == CHIP_FAMILY_ESP32C61 ||
|
|
778
783
|
this.chipFamily == CHIP_FAMILY_ESP32H2 ||
|
|
779
784
|
this.chipFamily == CHIP_FAMILY_ESP32P4
|
|
780
785
|
) {
|
package/src/index.ts
CHANGED
package/src/stubs/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
CHIP_FAMILY_ESP32C3,
|
|
9
9
|
CHIP_FAMILY_ESP32C5,
|
|
10
10
|
CHIP_FAMILY_ESP32C6,
|
|
11
|
+
CHIP_FAMILY_ESP32C61,
|
|
11
12
|
CHIP_FAMILY_ESP32H2,
|
|
12
13
|
CHIP_FAMILY_ESP32P4
|
|
13
14
|
} from "../const";
|
|
@@ -48,6 +49,8 @@ export const getStubCode = async (chipFamily: ChipFamily): Promise<Stub> => {
|
|
|
48
49
|
stubcode = await import("./esp32c5.json");
|
|
49
50
|
} else if (chipFamily == CHIP_FAMILY_ESP32C6) {
|
|
50
51
|
stubcode = await import("./esp32c6.json");
|
|
52
|
+
} else if (chipFamily == CHIP_FAMILY_ESP32C61) {
|
|
53
|
+
stubcode = await import("./esp32c61.json");
|
|
51
54
|
} else if (chipFamily == CHIP_FAMILY_ESP32H2) {
|
|
52
55
|
stubcode = await import("./esp32h2.json");
|
|
53
56
|
} else if (chipFamily == CHIP_FAMILY_ESP32P4) {
|