@johntalton/ftdi 1.0.0 → 1.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johntalton/ftdi",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "exports": {
package/lib/ft232h.d.ts DELETED
@@ -1,37 +0,0 @@
1
- /** biome-ignore-all lint/style/noNestedTernary: <explanation> */
2
- import type { BitMode, ModemControl } from './consts.ts';
3
- import { MPSSE } from './mpsse/mpsse.ts';
4
- import { type DeviceStatusInfo } from './status.ts';
5
- export declare const USB_TRANSFER_OK: USBTransferStatus;
6
- export declare const USB_TRANSFER_STALL: USBTransferStatus;
7
- export declare const USB_TRANSFER_BABBLE: USBTransferStatus;
8
- export declare const REQUEST_TYPE_VENDOR = "vendor";
9
- export declare const RECIPIENT_DEVICE = "device";
10
- export declare const INTERFACE_DIRECTION_IN = "in";
11
- export declare const INTERFACE_DIRECTION_OUT = "out";
12
- export declare const INTERFACE_TYPE_BULK = "bulk";
13
- export declare const DEFAULT_CONFIGURATION_NUMBER = 1;
14
- export declare const DEFAULT_INTERFACE_NUMBER = 0;
15
- export declare function assertDataViewNotShared(view: DataView): asserts view is DataView & {
16
- buffer: ArrayBuffer;
17
- };
18
- export declare class FT232H {
19
- #private;
20
- static from(device: USBDevice): Promise<FT232H>;
21
- constructor(device: USBDevice, interfaceNumber: number, epIn: number, epOut: number);
22
- get mpsse(): MPSSE;
23
- reset(kind?: number): Promise<void>;
24
- setBitMode(mode: BitMode): Promise<void>;
25
- getModemStatus(): Promise<DeviceStatusInfo | undefined>;
26
- getLatencyTimer(): Promise<number>;
27
- setLatencyTimer(latency: number): Promise<void>;
28
- readPins(): Promise<number>;
29
- setModemControl(control: ModemControl): Promise<void>;
30
- setEventChar(data: number, enable?: boolean): Promise<void>;
31
- setErrorChar(data: number, enable?: boolean): Promise<void>;
32
- sendData(data: BufferSource): Promise<number>;
33
- readData(length: number): Promise<DataView<ArrayBuffer>>;
34
- readEEPROM(address: number, length: number): Promise<DataView<ArrayBuffer>>;
35
- writeEEPROM(address: number, value: number): Promise<number>;
36
- }
37
- //# sourceMappingURL=ft232h.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ft232h.d.ts","sourceRoot":"","sources":["../src/ft232h.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,eAAe,EAAE,iBAAwB,CAAA;AACtD,eAAO,MAAM,kBAAkB,EAAE,iBAA2B,CAAA;AAC5D,eAAO,MAAM,mBAAmB,EAAE,iBAA4B,CAAA;AAG9D,eAAO,MAAM,mBAAmB,WAAW,CAAA;AAC3C,eAAO,MAAM,gBAAgB,WAAW,CAAA;AAExC,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAC1C,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAEzC,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAC7C,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAGzC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAI1G;AAED,qBAAa,MAAM;;IAOlB,OAAa,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpD;IAED,YAAY,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAMlF;IAED,IAAI,KAAK,IAAI,KAAK,CAAuB;IAmDnC,KAAK,CAAC,IAAI,SAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;IAEK,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7C;IAEK,cAAc,IAAI,OAAO,CAAC,gBAAgB,GAAC,SAAS,CAAC,CAM1D;IAEK,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAOvC;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpD;IAEK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAKhC;IAEK,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1D;IAEK,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;IAEK,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7D;IAGM,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlD;IAEI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAM7D;IAEK,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAOhF;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjE;CAKD"}
package/lib/ft232h.js DELETED
@@ -1,204 +0,0 @@
1
- import { REQUESTS, RESET_USB } from './consts.js';
2
- import { MPSSE } from './mpsse/mpsse.js';
3
- import { DeviceStatus, STATUS_PREFIX_LENGTH, } from './status.js';
4
- export const USB_TRANSFER_OK = 'ok';
5
- export const USB_TRANSFER_STALL = 'stall';
6
- export const USB_TRANSFER_BABBLE = 'babble';
7
- export const REQUEST_TYPE_VENDOR = 'vendor';
8
- export const RECIPIENT_DEVICE = 'device';
9
- export const INTERFACE_DIRECTION_IN = 'in';
10
- export const INTERFACE_DIRECTION_OUT = 'out';
11
- export const INTERFACE_TYPE_BULK = 'bulk';
12
- export const DEFAULT_CONFIGURATION_NUMBER = 1;
13
- export const DEFAULT_INTERFACE_NUMBER = 0;
14
- export function assertDataViewNotShared(view) {
15
- if (typeof SharedArrayBuffer !== 'undefined' && view.buffer instanceof SharedArrayBuffer) {
16
- throw new TypeError('DataView cannot be backed by a SharedArrayBuffer');
17
- }
18
- }
19
- export class FT232H {
20
- #device;
21
- #endpointBulkIn;
22
- #endpointBulkOut;
23
- #interfaceNumber;
24
- #mpsse;
25
- static async from(device) {
26
- const { interfaceNumber, epIn, epOut } = await FT232H.#discoverEndpoints(device);
27
- return new FT232H(device, interfaceNumber, epIn, epOut);
28
- }
29
- constructor(device, interfaceNumber, epIn, epOut) {
30
- this.#device = device;
31
- this.#endpointBulkIn = epIn;
32
- this.#endpointBulkOut = epOut;
33
- this.#interfaceNumber = interfaceNumber;
34
- this.#mpsse = new MPSSE(this);
35
- }
36
- get mpsse() { return this.#mpsse; }
37
- static async #discoverEndpoints(device) {
38
- if (device.configuration === null) {
39
- await device.selectConfiguration(DEFAULT_CONFIGURATION_NUMBER);
40
- }
41
- await device.claimInterface(DEFAULT_INTERFACE_NUMBER);
42
- if (device.configuration === null) {
43
- throw new Error('Configuration is NULL');
44
- }
45
- const { interfaces } = device.configuration;
46
- const [iface] = interfaces;
47
- if (iface === undefined) {
48
- throw new Error('Interface is undefined');
49
- }
50
- const { alternate, interfaceNumber } = iface;
51
- const { endpoints } = alternate;
52
- const epIn = endpoints.find(ep => ep.direction === INTERFACE_DIRECTION_IN && ep.type === INTERFACE_TYPE_BULK);
53
- const epOut = endpoints.find(ep => ep.direction === INTERFACE_DIRECTION_OUT && ep.type === INTERFACE_TYPE_BULK);
54
- if (epIn === undefined) {
55
- throw new Error('Endpoint In Bulk not found');
56
- }
57
- if (epOut === undefined) {
58
- throw new Error('Endpoint Out Bulk not found');
59
- }
60
- return {
61
- interfaceNumber,
62
- epIn: epIn.endpointNumber,
63
- epOut: epOut.endpointNumber
64
- };
65
- }
66
- async #requestIn(request, length, index = undefined) {
67
- return this.#device.controlTransferIn({
68
- requestType: REQUEST_TYPE_VENDOR,
69
- recipient: RECIPIENT_DEVICE,
70
- request,
71
- value: 0,
72
- index: index ?? this.#interfaceNumber
73
- }, length);
74
- }
75
- async #requestOut(request, value, index = undefined) {
76
- return this.#device.controlTransferOut({
77
- requestType: REQUEST_TYPE_VENDOR,
78
- recipient: RECIPIENT_DEVICE,
79
- request,
80
- value,
81
- index: index ?? this.#interfaceNumber
82
- });
83
- }
84
- async reset(kind = RESET_USB.RESET) {
85
- await this.#requestOut(REQUESTS.RESET, kind);
86
- }
87
- async setBitMode(mode) {
88
- const gpioInit = 0;
89
- const value = mode | gpioInit;
90
- await this.#requestOut(REQUESTS.SET_BITMODE, value);
91
- }
92
- async getModemStatus() {
93
- const status = await this.#requestIn(REQUESTS.POLL_MODEM_STATUS, STATUS_PREFIX_LENGTH);
94
- if (status.status !== USB_TRANSFER_OK) {
95
- throw new Error('status not ok');
96
- }
97
- if (status.data === undefined) {
98
- throw new Error('undefined data');
99
- }
100
- assertDataViewNotShared(status.data);
101
- return DeviceStatus.parse(status.data);
102
- }
103
- async getLatencyTimer() {
104
- const result = await this.#requestIn(REQUESTS.GET_LATENCY_TIMER, 1);
105
- if (result.status !== USB_TRANSFER_OK) {
106
- throw new Error('status not ok');
107
- }
108
- if (result.data === undefined) {
109
- throw new Error('undefined data');
110
- }
111
- const latency = result.data.getUint8(0);
112
- return latency;
113
- }
114
- async setLatencyTimer(latency) {
115
- if (!Number.isInteger(latency)) {
116
- throw new TypeError('latency is not valid integer');
117
- }
118
- if (latency < 0 || latency > 255) {
119
- throw new RangeError('latency out of range');
120
- }
121
- const result = await this.#requestOut(REQUESTS.SET_LATENCY_TIMER, latency);
122
- if (result.status !== USB_TRANSFER_OK) {
123
- throw new Error('status not ok');
124
- }
125
- }
126
- async readPins() {
127
- const result = await this.#requestIn(REQUESTS.READ_PINS, 1);
128
- if (result.status !== USB_TRANSFER_OK) {
129
- throw new Error('status not ok');
130
- }
131
- if (result.data === undefined) {
132
- throw new Error('undefined data');
133
- }
134
- return result.data.getUint8(0);
135
- }
136
- async setModemControl(control) {
137
- const DTR_ENABLE_BIT = 0x01_00;
138
- const RTS_ENABLE_BIT = 0x02_00;
139
- const DTR_SET = 0x01;
140
- const RTS_SET = 0x02;
141
- const setDTR = control.DataTerminalReady !== undefined;
142
- const setRTS = control.RequestToSend !== undefined;
143
- const dtrValue = setDTR ? DTR_ENABLE_BIT | (control.DataTerminalReady ? DTR_SET : 0) : 0;
144
- const rtsValue = setRTS ? RTS_ENABLE_BIT | (control.RequestToSend ? RTS_SET : 0) : 0;
145
- const value = dtrValue | rtsValue;
146
- const result = await this.#requestOut(REQUESTS.SET_MODEM_CTRL, value);
147
- if (result.status !== USB_TRANSFER_OK) {
148
- throw new Error('status not ok');
149
- }
150
- }
151
- async setEventChar(data, enable = true) {
152
- const ENABLE_BIT = 0x01_00;
153
- const value = enable ? ENABLE_BIT | data : data;
154
- const result = await this.#requestOut(REQUESTS.SET_EVENT_CHAR, value);
155
- if (result.status !== USB_TRANSFER_OK) {
156
- throw new Error('status not ok');
157
- }
158
- }
159
- async setErrorChar(data, enable = true) {
160
- const ENABLE_BIT = 0x01_00;
161
- const value = enable ? ENABLE_BIT | data : data;
162
- const result = await this.#requestOut(REQUESTS.SET_ERROR_CHAR, value);
163
- if (result.status !== USB_TRANSFER_OK) {
164
- throw new Error('status not ok');
165
- }
166
- }
167
- async sendData(data) {
168
- const result = await this.#device.transferOut(this.#endpointBulkOut, data);
169
- if (result.status !== USB_TRANSFER_OK) {
170
- throw new Error('failure sending data');
171
- }
172
- return result.bytesWritten;
173
- }
174
- async readData(length) {
175
- const result = await this.#device.transferIn(this.#endpointBulkIn, length);
176
- if (result.status !== USB_TRANSFER_OK) {
177
- throw new Error('failure to read data');
178
- }
179
- if (result.data === undefined) {
180
- throw new Error('result data undefined');
181
- }
182
- assertDataViewNotShared(result.data);
183
- return result.data;
184
- }
185
- async readEEPROM(address, length) {
186
- const result = await this.#requestIn(REQUESTS.READ_EEPROM, length, address);
187
- if (result.status !== USB_TRANSFER_OK) {
188
- throw new Error('failure to read eeprom');
189
- }
190
- if (result.data === undefined) {
191
- throw new Error('result data undefined');
192
- }
193
- assertDataViewNotShared(result.data);
194
- return result.data;
195
- }
196
- async writeEEPROM(address, value) {
197
- const result = await this.#requestOut(REQUESTS.WRITE_EEPROM, value, address);
198
- if (result.status !== USB_TRANSFER_OK) {
199
- throw new Error('failure to read eeprom');
200
- }
201
- return result.bytesWritten;
202
- }
203
- }
204
- //# sourceMappingURL=ft232h.js.map
package/lib/ft232h.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ft232h.js","sourceRoot":"","sources":["../src/ft232h.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EACN,YAAY,EAEZ,oBAAoB,GACpB,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,MAAM,eAAe,GAAsB,IAAI,CAAA;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAsB,OAAO,CAAA;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAsB,QAAQ,CAAA;AAG9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAA;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AAExC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAGzC,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACrD,IAAI,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,YAAY,iBAAiB,EAAE,CAAC;QAC1F,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAA;IACxE,CAAC;AACF,CAAC;AAED,MAAM,OAAO,MAAM;IACT,OAAO,CAAA;IACP,eAAe,CAAQ;IACvB,gBAAgB,CAAQ;IACxB,gBAAgB,CAAQ;IACxB,MAAM,CAAO;IAEtB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAiB;QAClC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAChF,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACxD,CAAC;IAED,YAAY,MAAiB,EAAE,eAAuB,EAAE,IAAY,EAAE,KAAa;QAClF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;QAC7B,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,KAAK,KAAY,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAEzC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAiB;QAChD,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAA;QAC/D,CAAC;QACD,MAAM,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAA;QAErD,IAAG,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,aAAa,CAAA;QAC3C,MAAM,CAAE,KAAK,CAAE,GAAG,UAAU,CAAA;QAC5B,IAAG,KAAK,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAAC,CAAC;QACrE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;QAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAA;QAE/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,sBAAsB,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAA;QAC7G,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,uBAAuB,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAA;QAE/G,IAAG,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAAC,CAAC;QACxE,IAAG,KAAK,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAAC,CAAC;QAE1E,OAAO;YACN,eAAe;YACf,IAAI,EAAE,IAAI,CAAC,cAAc;YACzB,KAAK,EAAE,KAAK,CAAC,cAAc;SAC3B,CAAA;IACF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAoB,EAAE,MAAc,EAAE,KAAK,GAAqB,SAAS;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACrC,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,gBAAgB;YAC3B,OAAO;YACP,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB;SACrC,EAAE,MAAM,CAAC,CAAA;IACX,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAoB,EAAE,KAAa,EAAE,KAAK,GAAqB,SAAS;QACzF,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACtC,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,gBAAgB;YAC3B,OAAO;YACP,KAAK;YACL,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB;SACrC,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa;QAC7B,MAAM,QAAQ,GAAG,CAAC,CAAA;QAClB,MAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAA;QAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,cAAc;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAA;QACtF,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;QAC1E,IAAG,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAAC,CAAC;QACnE,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACpC,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,eAAe;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;QACnE,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;QAC1E,IAAG,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAAC,CAAC;QAEnE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACpC,IAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAA;QAAC,CAAC;QACtF,IAAG,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAAC,CAAC;QAEjF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;QAC1E,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC3D,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;QAC1E,IAAG,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAAC,CAAC;QACnE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAqB;QAC1C,MAAM,cAAc,GAAG,OAAO,CAAA;QAC9B,MAAM,cAAc,GAAG,OAAO,CAAA;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAA;QAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAA;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,CAAA;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpF,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;QACrE,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAM,GAAG,IAAI;QAC7C,MAAM,UAAU,GAAG,OAAO,CAAA;QAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;QACrE,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAM,GAAG,IAAI;QAC7C,MAAM,UAAU,GAAG,OAAO,CAAA;QAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;QACrE,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;IAE3E,CAAC;IAGA,KAAK,CAAC,QAAQ,CAAC,IAAkB;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QAC5E,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAAC,CAAC;QACjF,OAAO,MAAM,CAAC,YAAY,CAAA;IAC1B,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAC1E,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAAC,CAAC;QACjF,IAAG,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAAC,CAAC;QAC1E,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACpC,OAAO,MAAM,CAAC,IAAI,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,MAAc;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC3E,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAAC,CAAC;QACnF,IAAG,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAAC,CAAC;QAC1E,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEpC,OAAO,MAAM,CAAC,IAAI,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,KAAa;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAC5E,IAAG,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAAC,CAAC;QACnF,OAAO,MAAM,CAAC,YAAY,CAAA;IAC3B,CAAC;CAKD"}