@milaboratories/pframes-rs-node 1.0.56 → 1.0.61
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/README.md +17 -5
- package/export/addon-def.ts +1 -2
- package/export/dump.ts +13 -14
- package/export/export.ts +10 -10
- package/export/index.ts +2 -1
- package/export/wrapper.ts +144 -133
- package/export_dist/addon-def.d.ts +3 -3
- package/export_dist/addon-def.d.ts.map +1 -1
- package/export_dist/addon.cjs +24 -0
- package/export_dist/addon.cjs.map +1 -0
- package/export_dist/addon.d.ts +1 -1
- package/export_dist/addon.js +21 -0
- package/export_dist/addon.js.map +1 -0
- package/export_dist/dump.cjs +133 -0
- package/export_dist/dump.cjs.map +1 -0
- package/export_dist/dump.d.ts +1 -1
- package/export_dist/dump.d.ts.map +1 -1
- package/export_dist/dump.js +125 -0
- package/export_dist/dump.js.map +1 -0
- package/export_dist/export.cjs +15 -0
- package/export_dist/export.cjs.map +1 -0
- package/export_dist/export.d.ts +2 -6
- package/export_dist/export.d.ts.map +1 -1
- package/export_dist/export.js +13 -0
- package/export_dist/export.js.map +1 -0
- package/export_dist/index.cjs +13 -0
- package/export_dist/index.cjs.map +1 -0
- package/export_dist/index.d.ts +2 -1
- package/export_dist/index.d.ts.map +1 -1
- package/export_dist/index.js +2 -21
- package/export_dist/index.js.map +1 -1
- package/export_dist/wrapper.cjs +511 -0
- package/export_dist/wrapper.cjs.map +1 -0
- package/export_dist/wrapper.d.ts +33 -11
- package/export_dist/wrapper.d.ts.map +1 -1
- package/export_dist/wrapper.js +508 -0
- package/export_dist/wrapper.js.map +1 -0
- package/package.json +34 -33
- package/export_dist/index.mjs +0 -765
- package/export_dist/index.mjs.map +0 -1
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import humanizeDuration from 'humanize-duration';
|
|
2
|
+
import { ulid } from 'ulid';
|
|
3
|
+
import { PFrameError, ensureError, isAbortError, AbortError } from '@milaboratories/pl-model-common';
|
|
4
|
+
import { AddonSymbol } from './addon.js';
|
|
5
|
+
import { dump, hashColumnId, hashCreateTableRequestColumnId, hashUniqueValuesRequestColumnId, hashTableColumnId, hashFilterColumnId, hashSortingColumnId } from './dump.js';
|
|
6
|
+
|
|
7
|
+
async function pprofDump() {
|
|
8
|
+
try {
|
|
9
|
+
return await AddonSymbol.pprofDump();
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
throw new PFrameError(`PFrame pprofDump failed, ` + `error:\n` + `${ensureError(err)}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
class PFrame {
|
|
16
|
+
#frame;
|
|
17
|
+
#id = ulid();
|
|
18
|
+
get id() {
|
|
19
|
+
return this.#id;
|
|
20
|
+
}
|
|
21
|
+
#logger;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.#logger = options.logger ?? (() => { });
|
|
24
|
+
dump([`${this.id}`, `${this.id}.json`], {
|
|
25
|
+
timeStamp: Date.now(),
|
|
26
|
+
requestType: 'create'
|
|
27
|
+
}, this.#logger);
|
|
28
|
+
try {
|
|
29
|
+
this.#frame = AddonSymbol.pFrameCreate(options.spillPath, options.logger);
|
|
30
|
+
this.#logger('info', `PFrame ${this.id} created`);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
throw new PFrameError(`PFrame ${this.id} creation failed, ` +
|
|
34
|
+
`logger: ${this.#logger?.toString()}, ` +
|
|
35
|
+
`error:\n` +
|
|
36
|
+
`${ensureError(err)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
addColumnSpec(columnId, columnSpec) {
|
|
40
|
+
const requestId = ulid();
|
|
41
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
42
|
+
timeStamp: Date.now(),
|
|
43
|
+
requestType: 'addColumnSpec',
|
|
44
|
+
requestData: {
|
|
45
|
+
columnId: hashColumnId(columnId),
|
|
46
|
+
columnSpec
|
|
47
|
+
}
|
|
48
|
+
}, this.#logger);
|
|
49
|
+
dump([`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`], {
|
|
50
|
+
...columnSpec
|
|
51
|
+
}, this.#logger);
|
|
52
|
+
try {
|
|
53
|
+
return AddonSymbol.pFrameAddColumnSpec(this.#frame, columnId, columnSpec);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw new PFrameError(`PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +
|
|
57
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
58
|
+
`columnSpec: ${JSON.stringify(columnSpec)}, ` +
|
|
59
|
+
`error:\n` +
|
|
60
|
+
`${ensureError(err)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
setDataSource(dataSource) {
|
|
64
|
+
const requestId = ulid();
|
|
65
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
66
|
+
timeStamp: Date.now(),
|
|
67
|
+
requestType: 'setDataSource'
|
|
68
|
+
}, this.#logger);
|
|
69
|
+
const wrappedDataSource = {
|
|
70
|
+
preloadBlob: async (blobIds) => {
|
|
71
|
+
const requestId = ulid();
|
|
72
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
73
|
+
timeStamp: Date.now(),
|
|
74
|
+
requestType: 'preloadBlob',
|
|
75
|
+
requestData: {
|
|
76
|
+
blobIds
|
|
77
|
+
}
|
|
78
|
+
}, this.#logger);
|
|
79
|
+
this.#logger('info', `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`);
|
|
80
|
+
const t0 = performance.now();
|
|
81
|
+
try {
|
|
82
|
+
return await dataSource.preloadBlob(blobIds);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
const t1 = performance.now();
|
|
86
|
+
this.#logger('info', `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
resolveBlobContent: async (blobId) => {
|
|
90
|
+
const requestId = ulid();
|
|
91
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
92
|
+
timeStamp: Date.now(),
|
|
93
|
+
requestType: 'resolveBlobContent',
|
|
94
|
+
requestData: {
|
|
95
|
+
blobId
|
|
96
|
+
}
|
|
97
|
+
}, this.#logger);
|
|
98
|
+
const blob = await dataSource.resolveBlobContent(blobId);
|
|
99
|
+
this.#logger('info', `PFrame ${this.id} resolved blob ${blobId}`);
|
|
100
|
+
dump([`${this.id}`, `data`, `${blobId}`], blob, this.#logger);
|
|
101
|
+
return blob;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
try {
|
|
105
|
+
return AddonSymbol.pFrameSetDataSource(this.#frame, wrappedDataSource);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
throw new PFrameError(`PFrame ${this.id} setDataSource request ${requestId} failed, ` +
|
|
109
|
+
`dataSource: ${dataSource.toString()}, ` +
|
|
110
|
+
`error:\n` +
|
|
111
|
+
`${ensureError(err)}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
setColumnData(columnId, dataInfo, ops) {
|
|
115
|
+
const requestId = ulid();
|
|
116
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
117
|
+
timeStamp: Date.now(),
|
|
118
|
+
requestType: 'setColumnData',
|
|
119
|
+
requestData: {
|
|
120
|
+
columnId: hashColumnId(columnId),
|
|
121
|
+
dataInfo
|
|
122
|
+
}
|
|
123
|
+
}, this.#logger);
|
|
124
|
+
dump([`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`], {
|
|
125
|
+
...dataInfo
|
|
126
|
+
}, this.#logger);
|
|
127
|
+
try {
|
|
128
|
+
ops?.signal?.throwIfAborted();
|
|
129
|
+
return AddonSymbol.pFrameSetColumnData(this.#frame, columnId, dataInfo, ops?.signal);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
throw new PFrameError(`PFrame ${this.id} setColumnData request ${requestId} failed, ` +
|
|
133
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
134
|
+
`dataInfo: ${JSON.stringify(dataInfo)}, ` +
|
|
135
|
+
`error:\n` +
|
|
136
|
+
`${ensureError(err)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
dispose() {
|
|
140
|
+
const requestId = ulid();
|
|
141
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
142
|
+
timeStamp: Date.now(),
|
|
143
|
+
requestType: 'dispose'
|
|
144
|
+
}, this.#logger);
|
|
145
|
+
try {
|
|
146
|
+
AddonSymbol.pFrameDispose(this.#frame);
|
|
147
|
+
this.#logger('info', `PFrame ${this.id} disposed`);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
throw new PFrameError(`PFrame ${this.id} dispose request ${requestId} failed, ` +
|
|
151
|
+
`error:\n` +
|
|
152
|
+
`${ensureError(err)}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
[Symbol.dispose]() {
|
|
156
|
+
this.dispose();
|
|
157
|
+
}
|
|
158
|
+
async findColumns(request) {
|
|
159
|
+
const requestId = ulid();
|
|
160
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
161
|
+
timeStamp: Date.now(),
|
|
162
|
+
requestType: 'findColumns',
|
|
163
|
+
requestData: request
|
|
164
|
+
}, this.#logger);
|
|
165
|
+
const t0 = performance.now();
|
|
166
|
+
try {
|
|
167
|
+
return await AddonSymbol.pFrameFindColumns(this.#frame, request);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
throw new PFrameError(`PFrame ${this.id} findColumns request ${requestId} failed, ` +
|
|
171
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
172
|
+
`error:\n` +
|
|
173
|
+
`${ensureError(err)}`);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
const t1 = performance.now();
|
|
177
|
+
this.#logger('info', `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async deleteColumn(request) {
|
|
181
|
+
const requestId = ulid();
|
|
182
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
183
|
+
timeStamp: Date.now(),
|
|
184
|
+
requestType: 'deleteColumn',
|
|
185
|
+
requestData: request
|
|
186
|
+
}, this.#logger);
|
|
187
|
+
const t0 = performance.now();
|
|
188
|
+
try {
|
|
189
|
+
return await AddonSymbol.pFrameDeleteColumn(this.#frame, request);
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
throw new PFrameError(`PFrame ${this.id} deleteColumn request ${requestId} failed, ` +
|
|
193
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
194
|
+
`error:\n` +
|
|
195
|
+
`${ensureError(err)}`);
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
const t1 = performance.now();
|
|
199
|
+
this.#logger('info', `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async getColumnSpec(columnId) {
|
|
203
|
+
const requestId = ulid();
|
|
204
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
205
|
+
timeStamp: Date.now(),
|
|
206
|
+
requestType: 'getColumnSpec',
|
|
207
|
+
requestData: {
|
|
208
|
+
columnId: hashColumnId(columnId)
|
|
209
|
+
}
|
|
210
|
+
}, this.#logger);
|
|
211
|
+
const t0 = performance.now();
|
|
212
|
+
try {
|
|
213
|
+
return await AddonSymbol.pFrameGetColumnSpec(this.#frame, columnId);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
throw new PFrameError(`PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +
|
|
217
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
218
|
+
`error:\n` +
|
|
219
|
+
`${ensureError(err)}`);
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
const t1 = performance.now();
|
|
223
|
+
this.#logger('info', `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async listColumns() {
|
|
227
|
+
const requestId = ulid();
|
|
228
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
229
|
+
timeStamp: Date.now(),
|
|
230
|
+
requestType: 'listColumns'
|
|
231
|
+
}, this.#logger);
|
|
232
|
+
const t0 = performance.now();
|
|
233
|
+
try {
|
|
234
|
+
return await AddonSymbol.pFrameListColumns(this.#frame);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
throw new PFrameError(`PFrame ${this.id} listColumns request ${requestId} failed, ` +
|
|
238
|
+
`error:\n` +
|
|
239
|
+
`${ensureError(err)}`);
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
const t1 = performance.now();
|
|
243
|
+
this.#logger('info', `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
createTable(request) {
|
|
247
|
+
const requestId = ulid();
|
|
248
|
+
const dumpData = {
|
|
249
|
+
timeStamp: Date.now(),
|
|
250
|
+
requestType: 'createTable',
|
|
251
|
+
requestData: hashCreateTableRequestColumnId(request)
|
|
252
|
+
};
|
|
253
|
+
dump([`${this.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
254
|
+
dump([`${this.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
255
|
+
const t0 = performance.now();
|
|
256
|
+
try {
|
|
257
|
+
const boxed = AddonSymbol.pFrameCreateTable(this.#frame, requestId, request);
|
|
258
|
+
return new PTable(this, requestId, boxed, this.#logger);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
throw new PFrameError(`PFrame ${this.id} createTable request ${requestId} failed, ` +
|
|
262
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
263
|
+
`error:\n` +
|
|
264
|
+
`${ensureError(err)}`);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
const t1 = performance.now();
|
|
268
|
+
this.#logger('info', `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async getUniqueValues(request, ops) {
|
|
272
|
+
const requestId = ulid();
|
|
273
|
+
dump([`${this.id}`, `${requestId}.json`], {
|
|
274
|
+
timeStamp: Date.now(),
|
|
275
|
+
requestType: 'getUniqueValues',
|
|
276
|
+
requestData: hashUniqueValuesRequestColumnId(request)
|
|
277
|
+
}, this.#logger);
|
|
278
|
+
this.#logger('info', `PFrame ${this.id} getUniqueValues request ${requestId} started`);
|
|
279
|
+
const t0 = performance.now();
|
|
280
|
+
try {
|
|
281
|
+
ops?.signal?.throwIfAborted();
|
|
282
|
+
return await AddonSymbol.pFrameGetUniqueValues(this.#frame, requestId, request, ops?.signal);
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
if (isAbortError(err)) {
|
|
286
|
+
throw new AbortError(`PFrame ${this.id} getUniqueValues request ${requestId} cancelled`);
|
|
287
|
+
}
|
|
288
|
+
throw new PFrameError(`PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +
|
|
289
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
290
|
+
`error:\n` +
|
|
291
|
+
`${ensureError(err)}`);
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
const t1 = performance.now();
|
|
295
|
+
this.#logger('info', `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
class PTable {
|
|
300
|
+
#frame;
|
|
301
|
+
#table;
|
|
302
|
+
#id;
|
|
303
|
+
get id() {
|
|
304
|
+
return this.#id;
|
|
305
|
+
}
|
|
306
|
+
#logger;
|
|
307
|
+
constructor(frame, id, table, logger) {
|
|
308
|
+
this.#frame = frame;
|
|
309
|
+
this.#table = table;
|
|
310
|
+
this.#id = id;
|
|
311
|
+
this.#logger = logger;
|
|
312
|
+
this.#logger('info', `PTable ${this.id} created`);
|
|
313
|
+
}
|
|
314
|
+
getSpec() {
|
|
315
|
+
const requestId = ulid();
|
|
316
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
317
|
+
timeStamp: Date.now(),
|
|
318
|
+
requestType: 'getSpec'
|
|
319
|
+
}, this.#logger);
|
|
320
|
+
try {
|
|
321
|
+
return AddonSymbol.pTableGetSpec(this.#table);
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
throw new PFrameError(`PTable ${this.id} getSpec request ${requestId} failed, ` +
|
|
325
|
+
`error:\n` +
|
|
326
|
+
`${ensureError(err)}`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
getColumnIndices(columnIds) {
|
|
330
|
+
const requestId = ulid();
|
|
331
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
332
|
+
timeStamp: Date.now(),
|
|
333
|
+
requestType: 'getColumnIndices',
|
|
334
|
+
requestData: {
|
|
335
|
+
columnIds: columnIds.map(hashTableColumnId)
|
|
336
|
+
}
|
|
337
|
+
}, this.#logger);
|
|
338
|
+
try {
|
|
339
|
+
return AddonSymbol.pTableGetColumnIndices(this.#table, columnIds);
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
throw new PFrameError(`PTable ${this.id} getColumnIndices request ${requestId} failed, ` +
|
|
343
|
+
`columnIds: ${JSON.stringify(columnIds)}, ` +
|
|
344
|
+
`error:\n` +
|
|
345
|
+
`${ensureError(err)}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
async getFootprint(ops) {
|
|
349
|
+
const requestId = ulid();
|
|
350
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
351
|
+
timeStamp: Date.now(),
|
|
352
|
+
requestType: 'getFootprint'
|
|
353
|
+
}, this.#logger);
|
|
354
|
+
this.#logger('info', `PTable ${this.id} getFootprint request ${requestId} started`);
|
|
355
|
+
const t0 = performance.now();
|
|
356
|
+
try {
|
|
357
|
+
ops?.signal?.throwIfAborted();
|
|
358
|
+
return await AddonSymbol.pTableGetFootprint(this.#table, ops?.withPredecessors ?? false, ops?.signal);
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
if (isAbortError(err)) {
|
|
362
|
+
throw new AbortError(`PTable ${this.id} getFootprint request ${requestId} cancelled`);
|
|
363
|
+
}
|
|
364
|
+
throw new PFrameError(`PTable ${this.id} getFootprint request ${requestId} failed, ` +
|
|
365
|
+
`error:\n` +
|
|
366
|
+
`${ensureError(err)}`);
|
|
367
|
+
}
|
|
368
|
+
finally {
|
|
369
|
+
const t1 = performance.now();
|
|
370
|
+
this.#logger('info', `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
async getShape(ops) {
|
|
374
|
+
const requestId = ulid();
|
|
375
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
376
|
+
timeStamp: Date.now(),
|
|
377
|
+
requestType: 'getShape'
|
|
378
|
+
}, this.#logger);
|
|
379
|
+
this.#logger('info', `PTable ${this.id} getShape request ${requestId} started`);
|
|
380
|
+
const t0 = performance.now();
|
|
381
|
+
try {
|
|
382
|
+
ops?.signal?.throwIfAborted();
|
|
383
|
+
return await AddonSymbol.pTableGetShape(this.#table, ops?.signal);
|
|
384
|
+
}
|
|
385
|
+
catch (err) {
|
|
386
|
+
if (isAbortError(err)) {
|
|
387
|
+
throw new AbortError(`PTable ${this.id} getShape request ${requestId} cancelled`);
|
|
388
|
+
}
|
|
389
|
+
throw new PFrameError(`PTable ${this.id} getShape request ${requestId} failed, ` +
|
|
390
|
+
`error:\n` +
|
|
391
|
+
`${ensureError(err)}`);
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
const t1 = performance.now();
|
|
395
|
+
this.#logger('info', `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
async getData(columnIndices, ops) {
|
|
399
|
+
const requestId = ulid();
|
|
400
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
401
|
+
timeStamp: Date.now(),
|
|
402
|
+
requestType: 'getData',
|
|
403
|
+
requestData: {
|
|
404
|
+
columnIndices,
|
|
405
|
+
range: ops?.range ?? null
|
|
406
|
+
}
|
|
407
|
+
}, this.#logger);
|
|
408
|
+
this.#logger('info', `PTable ${this.id} getData request ${requestId} started`);
|
|
409
|
+
let rowCount = 0;
|
|
410
|
+
const t0 = performance.now();
|
|
411
|
+
try {
|
|
412
|
+
ops?.signal?.throwIfAborted();
|
|
413
|
+
const result = await AddonSymbol.pTableGetData(this.#table, requestId, columnIndices, ops?.range, ops?.signal);
|
|
414
|
+
rowCount = result[0].data.length;
|
|
415
|
+
return result;
|
|
416
|
+
}
|
|
417
|
+
catch (err) {
|
|
418
|
+
if (isAbortError(err)) {
|
|
419
|
+
throw new AbortError(`PTable ${this.id} getData request ${requestId} cancelled`);
|
|
420
|
+
}
|
|
421
|
+
throw new PFrameError(`PTable ${this.id} getData request ${requestId} failed, ` +
|
|
422
|
+
`columnIndices: ${JSON.stringify(columnIndices)}, ` +
|
|
423
|
+
`range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +
|
|
424
|
+
`error:\n` +
|
|
425
|
+
`${ensureError(err)}`);
|
|
426
|
+
}
|
|
427
|
+
finally {
|
|
428
|
+
const t1 = performance.now();
|
|
429
|
+
this.#logger('info', `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
filter(request) {
|
|
433
|
+
const requestId = ulid();
|
|
434
|
+
const dumpData = {
|
|
435
|
+
timeStamp: Date.now(),
|
|
436
|
+
table: this.id,
|
|
437
|
+
requestType: 'filter',
|
|
438
|
+
requestData: {
|
|
439
|
+
filters: request.map(hashFilterColumnId)
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
443
|
+
dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
444
|
+
const t0 = performance.now();
|
|
445
|
+
try {
|
|
446
|
+
const boxed = AddonSymbol.pTableFilter(this.#table, requestId, request);
|
|
447
|
+
return new PTable(this.#frame, requestId, boxed, this.#logger);
|
|
448
|
+
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
throw new PFrameError(`PTable ${this.id} filter request ${requestId} failed, ` +
|
|
451
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
452
|
+
`error:\n` +
|
|
453
|
+
`${ensureError(err)}`);
|
|
454
|
+
}
|
|
455
|
+
finally {
|
|
456
|
+
const t1 = performance.now();
|
|
457
|
+
this.#logger('info', `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
sort(request) {
|
|
461
|
+
const requestId = ulid();
|
|
462
|
+
const dumpData = {
|
|
463
|
+
timeStamp: Date.now(),
|
|
464
|
+
table: this.id,
|
|
465
|
+
requestType: 'sort',
|
|
466
|
+
requestData: request.map(hashSortingColumnId)
|
|
467
|
+
};
|
|
468
|
+
dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
469
|
+
dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
470
|
+
const t0 = performance.now();
|
|
471
|
+
try {
|
|
472
|
+
const boxed = AddonSymbol.pTableSort(this.#table, requestId, request);
|
|
473
|
+
return new PTable(this.#frame, requestId, boxed, this.#logger);
|
|
474
|
+
}
|
|
475
|
+
catch (err) {
|
|
476
|
+
throw new PFrameError(`PTable ${this.id} sort request ${requestId} failed, ` +
|
|
477
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
478
|
+
`error:\n` +
|
|
479
|
+
`${ensureError(err)}`);
|
|
480
|
+
}
|
|
481
|
+
finally {
|
|
482
|
+
const t1 = performance.now();
|
|
483
|
+
this.#logger('info', `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
dispose() {
|
|
487
|
+
const requestId = ulid();
|
|
488
|
+
dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
489
|
+
timeStamp: Date.now(),
|
|
490
|
+
requestType: 'dispose'
|
|
491
|
+
}, this.#logger);
|
|
492
|
+
try {
|
|
493
|
+
AddonSymbol.pTableDispose(this.#table);
|
|
494
|
+
this.#logger('info', `PTable ${this.id} disposed`);
|
|
495
|
+
}
|
|
496
|
+
catch (err) {
|
|
497
|
+
throw new PFrameError(`PTable ${this.id} dispose request ${requestId} failed, ` +
|
|
498
|
+
`error:\n` +
|
|
499
|
+
`${ensureError(err)}`);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
[Symbol.dispose]() {
|
|
503
|
+
this.dispose();
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
export { PFrame, pprofDump };
|
|
508
|
+
//# sourceMappingURL=wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sources":["../export/wrapper.ts"],"sourcesContent":["import humanizeDuration from 'humanize-duration';\nimport { ulid } from 'ulid';\nimport {\n AbortError,\n PColumnInfo,\n PColumnSpec,\n PFrameError,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableShape,\n PTableSorting,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n ensureError,\n isAbortError\n} from '@milaboratories/pl-model-common';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type {\n FrameId,\n TableId,\n NodeFrameSymbol,\n NodeTableSymbol\n} from './addon-def';\nimport { AddonSymbol } from './addon';\nimport {\n dump,\n hashColumnId,\n hashTableColumnId,\n hashFilterColumnId,\n hashUniqueValuesRequestColumnId,\n hashSortingColumnId,\n hashCreateTableRequestColumnId\n} from './dump';\n\nexport async function pprofDump(): Promise<Uint8Array> {\n try {\n return await AddonSymbol.pprofDump();\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame pprofDump failed, ` + `error:\\n` + `${ensureError(err)}`\n );\n }\n}\n\nexport class PFrame implements PFrameInternal.PFrameV10 {\n readonly #frame: NodeFrameSymbol;\n\n readonly #id: FrameId = ulid() as FrameId;\n\n get id(): FrameId {\n return this.#id;\n }\n\n readonly #logger: PFrameInternal.Logger;\n\n constructor(options: PFrameInternal.PFrameOptions) {\n this.#logger = options.logger ?? (() => {});\n\n dump(\n [`${this.id}`, `${this.id}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'create'\n },\n this.#logger\n );\n\n try {\n this.#frame = AddonSymbol.pFrameCreate(options.spillPath, options.logger);\n this.#logger('info', `PFrame ${this.id} created`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} creation failed, ` +\n `logger: ${this.#logger?.toString()}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n addColumnSpec(columnId: PObjectId, columnSpec: PColumnSpec): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'addColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId),\n columnSpec\n }\n },\n this.#logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`],\n {\n ...columnSpec\n },\n this.#logger\n );\n\n try {\n return AddonSymbol.pFrameAddColumnSpec(this.#frame, columnId, columnSpec);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `columnSpec: ${JSON.stringify(columnSpec)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n setDataSource(dataSource: PFrameInternal.PFrameDataSource): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setDataSource'\n },\n this.#logger\n );\n\n const wrappedDataSource = {\n preloadBlob: async (\n blobIds: PFrameInternal.PFrameBlobId[]\n ): Promise<void> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'preloadBlob',\n requestData: {\n blobIds\n }\n },\n this.#logger\n );\n\n this.#logger(\n 'info',\n `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`\n );\n const t0 = performance.now();\n try {\n return await dataSource.preloadBlob(blobIds);\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`\n );\n }\n },\n resolveBlobContent: async (\n blobId: PFrameInternal.PFrameBlobId\n ): Promise<Uint8Array> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'resolveBlobContent',\n requestData: {\n blobId\n }\n },\n this.#logger\n );\n\n const blob = await dataSource.resolveBlobContent(blobId);\n this.#logger('info', `PFrame ${this.id} resolved blob ${blobId}`);\n dump([`${this.id}`, `data`, `${blobId}`], blob, this.#logger);\n\n return blob;\n }\n };\n\n try {\n return AddonSymbol.pFrameSetDataSource(this.#frame, wrappedDataSource);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} setDataSource request ${requestId} failed, ` +\n `dataSource: ${dataSource.toString()}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n setColumnData(\n columnId: PObjectId,\n dataInfo: PFrameInternal.DataInfo<PFrameInternal.PFrameBlobId>,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<void> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setColumnData',\n requestData: {\n columnId: hashColumnId(columnId),\n dataInfo\n }\n },\n this.#logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`],\n {\n ...dataInfo\n },\n this.#logger\n );\n\n try {\n ops?.signal?.throwIfAborted();\n return AddonSymbol.pFrameSetColumnData(\n this.#frame,\n columnId,\n dataInfo,\n ops?.signal\n );\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} setColumnData request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `dataInfo: ${JSON.stringify(dataInfo)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n dispose(): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.#logger\n );\n\n try {\n AddonSymbol.pFrameDispose(this.#frame);\n this.#logger('info', `PFrame ${this.id} disposed`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n async findColumns(\n request: PFrameInternal.FindColumnsRequest\n ): Promise<PFrameInternal.FindColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'findColumns',\n requestData: request\n },\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameFindColumns(this.#frame, request);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} findColumns request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async deleteColumn(\n request: PFrameInternal.DeleteColumnFromColumnsRequest\n ): Promise<PFrameInternal.DeleteColumnFromColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'deleteColumn',\n requestData: request\n },\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameDeleteColumn(this.#frame, request);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} deleteColumn request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getColumnSpec(columnId: PObjectId): Promise<PColumnSpec> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId)\n }\n },\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameGetColumnSpec(this.#frame, columnId);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async listColumns(): Promise<PColumnInfo[]> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'listColumns'\n },\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameListColumns(this.#frame);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} listColumns request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n createTable(request: PFrameInternal.CreateTableRequestV3): PTable {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n requestType: 'createTable',\n requestData: hashCreateTableRequestColumnId(request)\n };\n dump([`${this.id}`, `${requestId}.json`], dumpData, this.#logger);\n dump(\n [`${this.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pFrameCreateTable(\n this.#frame,\n requestId,\n request\n );\n return new PTable(this, requestId, boxed, this.#logger);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} createTable request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getUniqueValues(\n request: UniqueValuesRequest,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<UniqueValuesResponse> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getUniqueValues',\n requestData: hashUniqueValuesRequestColumnId(request)\n },\n this.#logger\n );\n\n this.#logger(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pFrameGetUniqueValues(\n this.#frame,\n requestId,\n request,\n ops?.signal\n );\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PFrame ${this.id} getUniqueValues request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n}\n\nclass PTable implements PFrameInternal.PTableV7 {\n readonly #frame: PFrame;\n readonly #table: NodeTableSymbol;\n\n readonly #id: string;\n\n get id(): string {\n return this.#id;\n }\n\n readonly #logger: PFrameInternal.Logger;\n\n constructor(\n frame: PFrame,\n id: string,\n table: NodeTableSymbol,\n logger: PFrameInternal.Logger\n ) {\n this.#frame = frame;\n this.#table = table;\n this.#id = id;\n this.#logger = logger;\n this.#logger('info', `PTable ${this.id} created`);\n }\n\n getSpec(): PTableColumnSpec[] {\n const requestId = ulid();\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getSpec'\n },\n this.#logger\n );\n\n try {\n return AddonSymbol.pTableGetSpec(this.#table);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} getSpec request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n getColumnIndices(columnIds: PTableColumnId[]): number[] {\n const requestId = ulid();\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnIndices',\n requestData: {\n columnIds: columnIds.map(hashTableColumnId)\n }\n },\n this.#logger\n );\n\n try {\n return AddonSymbol.pTableGetColumnIndices(this.#table, columnIds);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} getColumnIndices request ${requestId} failed, ` +\n `columnIds: ${JSON.stringify(columnIds)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n async getFootprint(ops?: {\n withPredecessors?: boolean;\n signal?: AbortSignal;\n }): Promise<number> {\n const requestId = ulid();\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getFootprint'\n },\n this.#logger\n );\n\n this.#logger(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetFootprint(\n this.#table,\n ops?.withPredecessors ?? false,\n ops?.signal\n );\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getFootprint request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getFootprint request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getShape(ops?: { signal?: AbortSignal }): Promise<PTableShape> {\n const requestId = ulid();\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getShape'\n },\n this.#logger\n );\n\n this.#logger(\n 'info',\n `PTable ${this.id} getShape request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetShape(this.#table, ops?.signal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getShape request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getShape request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getData(\n columnIndices: number[],\n ops?: {\n range?: TableRange | undefined;\n signal?: AbortSignal | undefined;\n }\n ): Promise<PTableVector[]> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getData',\n requestData: {\n columnIndices,\n range: ops?.range ?? null\n }\n },\n this.#logger\n );\n\n this.#logger(\n 'info',\n `PTable ${this.id} getData request ${requestId} started`\n );\n let rowCount = 0;\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n const result = await AddonSymbol.pTableGetData(\n this.#table,\n requestId,\n columnIndices,\n ops?.range,\n ops?.signal\n );\n rowCount = result[0].data.length;\n return result;\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getData request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getData request ${requestId} failed, ` +\n `columnIndices: ${JSON.stringify(columnIndices)}, ` +\n `range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`\n );\n }\n }\n\n filter(request: PTableRecordFilter[]): PTable {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'filter',\n requestData: {\n filters: request.map(hashFilterColumnId)\n }\n };\n dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);\n dump(\n [`${this.#frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableFilter(this.#table, requestId, request);\n return new PTable(this.#frame, requestId, boxed, this.#logger);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} filter request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n sort(request: PTableSorting[]): PTable {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'sort',\n requestData: request.map(hashSortingColumnId)\n };\n dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);\n dump(\n [`${this.#frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.#logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableSort(this.#table, requestId, request);\n return new PTable(this.#frame, requestId, boxed, this.#logger);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} sort request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n } finally {\n const t1 = performance.now();\n this.#logger(\n 'info',\n `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n dispose() {\n const requestId = ulid();\n dump(\n [`${this.#frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.#logger\n );\n\n try {\n AddonSymbol.pTableDispose(this.#table);\n this.#logger('info', `PTable ${this.id} disposed`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err)}`\n );\n }\n }\n\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n"],"names":[],"mappings":";;;;;;AAsCO,eAAe,SAAS,GAAA;AAC7B,IAAA,IAAI;AACF,QAAA,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE;IACtC;IAAE,OAAO,GAAY,EAAE;AACrB,QAAA,MAAM,IAAI,WAAW,CACnB,CAAA,yBAAA,CAA2B,GAAG,CAAA,QAAA,CAAU,GAAG,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACjE;IACH;AACF;MAEa,MAAM,CAAA;AACR,IAAA,MAAM;IAEN,GAAG,GAAY,IAAI,EAAa;AAEzC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAES,IAAA,OAAO;AAEhB,IAAA,WAAA,CAAY,OAAqC,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,MAAK,EAAE,CAAC,CAAC;AAE3C,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,KAAA,CAAO,CAAC,EACjC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;QACnD;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,MAAM,IAAI,WAAW,CACnB,UAAU,IAAI,CAAC,EAAE,CAAA,kBAAA,CAAoB;AACnC,gBAAA,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;IAEA,aAAa,CAAC,QAAmB,EAAE,UAAuB,EAAA;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;gBAChC;AACD;AACF,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,IAAA,CAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,GAAG;AACJ,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;AACF,YAAA,OAAO,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC3E;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,uBAAA,EAA0B,SAAS,CAAA,SAAA,CAAW;AAC7D,gBAAA,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,EAAA,CAAI;AACzC,gBAAA,CAAA,YAAA,EAAe,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA,EAAA,CAAI;gBAC7C,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;AAEA,IAAA,aAAa,CAAC,UAA2C,EAAA;AACvD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,iBAAiB,GAAG;AACxB,YAAA,WAAW,EAAE,OACX,OAAsC,KACrB;AACjB,gBAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,gBAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oBAAA,WAAW,EAAE,aAAa;AAC1B,oBAAA,WAAW,EAAE;wBACX;AACD;AACF,iBAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,gBAAA,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,+BAAA,EAAkC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAC7E;AACD,gBAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,gBAAA,IAAI;AACF,oBAAA,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC9C;wBAAU;AACR,oBAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,4BAAA,EAA+B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,OAAO,CAAC,MAAM,CAAA,OAAA,CAAS,CAClH;gBACH;YACF,CAAC;AACD,YAAA,kBAAkB,EAAE,OAClB,MAAmC,KACZ;AACvB,gBAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,gBAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oBAAA,WAAW,EAAE,oBAAoB;AACjC,oBAAA,WAAW,EAAE;wBACX;AACD;AACF,iBAAA,EACD,IAAI,CAAC,OAAO,CACb;gBAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAE,CAAC;gBACjE,IAAI,CAAC,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,IAAA,CAAM,EAAE,GAAG,MAAM,CAAA,CAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AAE7D,gBAAA,OAAO,IAAI;YACb;SACD;AAED,QAAA,IAAI;YACF,OAAO,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACxE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,uBAAA,EAA0B,SAAS,CAAA,SAAA,CAAW;AAC7D,gBAAA,CAAA,YAAA,EAAe,UAAU,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI;gBACxC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;AAEA,IAAA,aAAa,CACX,QAAmB,EACnB,QAA8D,EAC9D,GAEC,EAAA;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;gBAChC;AACD;AACF,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,IAAA,CAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA,SAAA,CAAW,CAAC,EAC5D;AACE,YAAA,GAAG;AACJ,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;AACF,YAAA,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;AAC7B,YAAA,OAAO,WAAW,CAAC,mBAAmB,CACpC,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,QAAQ,EACR,GAAG,EAAE,MAAM,CACZ;QACH;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,uBAAA,EAA0B,SAAS,CAAA,SAAA,CAAW;AAC7D,gBAAA,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,EAAA,CAAI;AACzC,gBAAA,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,EAAA,CAAI;gBACzC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;AACF,YAAA,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,SAAA,CAAW,CAAC;QACpD;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,SAAA,CAAW;gBACvD,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;IAEA,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;QACd,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,MAAM,WAAW,CACf,OAA0C,EAAA;AAE1C,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;YACF,OAAO,MAAM,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAClE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,SAAA,CAAW;AAC3D,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACnG;QACH;IACF;IAEA,MAAM,YAAY,CAChB,OAAsD,EAAA;AAEtD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;YACF,OAAO,MAAM,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QACnE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,SAAA,CAAW;AAC5D,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACpG;QACH;IACF;IAEA,MAAM,aAAa,CAAC,QAAmB,EAAA;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAChC;AACF,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;YACF,OAAO,MAAM,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QACrE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,uBAAA,EAA0B,SAAS,CAAA,SAAA,CAAW;AAC7D,gBAAA,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,EAAA,CAAI;gBACzC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,uBAAA,EAA0B,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACrG;QACH;IACF;AAEA,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;AACxB,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;YACF,OAAO,MAAM,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QACzD;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,SAAA,CAAW;gBAC3D,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACnG;QACH;IACF;AAEA,IAAA,WAAW,CAAC,OAA4C,EAAA;AACtD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAa;AACnC,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,WAAW,EAAE,8BAA8B,CAAC,OAAO;SACpD;AACD,QAAA,IAAI,CAAC,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;QACjE,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnD,QAAQ,EACR,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,iBAAiB,CACzC,IAAI,CAAC,MAAM,EACX,SAAS,EACT,OAAO,CACR;AACD,YAAA,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QACzD;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,SAAA,CAAW;AAC3D,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,qBAAA,EAAwB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACnG;QACH;IACF;AAEA,IAAA,MAAM,eAAe,CACnB,OAA4B,EAC5B,GAEC,EAAA;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,EAAa;AACnC,QAAA,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACnC;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE,+BAA+B,CAAC,OAAO;AACrD,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,yBAAA,EAA4B,SAAS,CAAA,QAAA,CAAU,CACjE;AACD,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;AAC7B,YAAA,OAAO,MAAM,WAAW,CAAC,qBAAqB,CAC5C,IAAI,CAAC,MAAM,EACX,SAAS,EACT,OAAO,EACP,GAAG,EAAE,MAAM,CACZ;QACH;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,IAAI,UAAU,CAClB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,yBAAA,EAA4B,SAAS,CAAA,UAAA,CAAY,CACnE;YACH;YACA,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,yBAAA,EAA4B,SAAS,CAAA,SAAA,CAAW;AAC/D,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,yBAAA,EAA4B,SAAS,CAAA,gBAAA,EAAmB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CACjH;QACH;IACF;AACD;AAED,MAAM,MAAM,CAAA;AACD,IAAA,MAAM;AACN,IAAA,MAAM;AAEN,IAAA,GAAG;AAEZ,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;IACjB;AAES,IAAA,OAAO;AAEhB,IAAA,WAAA,CACE,KAAa,EACb,EAAU,EACV,KAAsB,EACtB,MAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;IACnD;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;QACxB,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;YACF,OAAO,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/C;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,SAAA,CAAW;gBACvD,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;AAEA,IAAA,gBAAgB,CAAC,SAA2B,EAAA;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;QACxB,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,WAAW,EAAE;AACX,gBAAA,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB;AAC3C;AACF,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;YACF,OAAO,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACnE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,0BAAA,EAA6B,SAAS,CAAA,SAAA,CAAW;AAChE,gBAAA,CAAA,WAAA,EAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,EAAA,CAAI;gBAC3C,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;IAEA,MAAM,YAAY,CAAC,GAGlB,EAAA;AACC,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;QACxB,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,QAAA,CAAU,CAC9D;AACD,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;AAC7B,YAAA,OAAO,MAAM,WAAW,CAAC,kBAAkB,CACzC,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,gBAAgB,IAAI,KAAK,EAC9B,GAAG,EAAE,MAAM,CACZ;QACH;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,IAAI,UAAU,CAClB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,UAAA,CAAY,CAChE;YACH;YACA,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,SAAA,CAAW;gBAC5D,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,sBAAA,EAAyB,SAAS,CAAA,gBAAA,EAAmB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CAC9G;QACH;IACF;IAEA,MAAM,QAAQ,CAAC,GAA8B,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;QACxB,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,kBAAA,EAAqB,SAAS,CAAA,QAAA,CAAU,CAC1D;AACD,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;AAC7B,YAAA,OAAO,MAAM,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QACnE;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,IAAI,UAAU,CAClB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,kBAAA,EAAqB,SAAS,CAAA,UAAA,CAAY,CAC5D;YACH;YACA,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,kBAAA,EAAqB,SAAS,CAAA,SAAA,CAAW;gBACxD,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,kBAAA,EAAqB,SAAS,CAAA,gBAAA,EAAmB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CAC1G;QACH;IACF;AAEA,IAAA,MAAM,OAAO,CACX,aAAuB,EACvB,GAGC,EAAA;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,EAAa;QACnC,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE;gBACX,aAAa;AACb,gBAAA,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI;AACtB;AACF,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,QAAA,CAAU,CACzD;QACD,IAAI,QAAQ,GAAG,CAAC;AAChB,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAC5C,IAAI,CAAC,MAAM,EACX,SAAS,EACT,aAAa,EACb,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,MAAM,CACZ;YACD,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;AAChC,YAAA,OAAO,MAAM;QACf;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,IAAI,UAAU,CAClB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,UAAA,CAAY,CAC3D;YACH;YACA,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,SAAA,CAAW;AACvD,gBAAA,CAAA,eAAA,EAAkB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA,EAAA,CAAI;AACnD,gBAAA,CAAA,OAAA,EAAU,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA,EAAA,CAAI;gBAChE,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,gBAAA,EAAmB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,MAAA,CAAQ,CAC5H;QACH;IACF;AAEA,IAAA,MAAM,CAAC,OAA6B,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,EAAa;AACnC,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,WAAW,EAAE;AACX,gBAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;AACxC;SACF;QACD,IAAI,CAAC,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;QACxE,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,EAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EAC1D,QAAQ,EACR,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AACvE,YAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QAChE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,gBAAA,EAAmB,SAAS,CAAA,SAAA,CAAW;AACtD,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,gBAAA,EAAmB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CAC9F;QACH;IACF;AAEA,IAAA,IAAI,CAAC,OAAwB,EAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,EAAa;AACnC,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;SAC7C;QACD,IAAI,CAAC,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;QACxE,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,CAAA,EAAG,SAAS,EAAE,EAAE,CAAA,EAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EAC1D,QAAQ,EACR,IAAI,CAAC,OAAO,CACb;AAED,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AACrE,YAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QAChE;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,cAAA,EAAiB,SAAS,CAAA,SAAA,CAAW;AACpD,gBAAA,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI;gBACvC,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;gBAAU;AACR,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CACV,MAAM,EACN,UAAU,IAAI,CAAC,EAAE,CAAA,cAAA,EAAiB,SAAS,CAAA,MAAA,EAAS,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAE,CAC5F;QACH;IACF;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE;QACxB,IAAI,CACF,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,GAAG,SAAS,CAAA,KAAA,CAAO,CAAC,EACxD;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE;AACd,SAAA,EACD,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI;AACF,YAAA,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,SAAA,CAAW,CAAC;QACpD;QAAE,OAAO,GAAY,EAAE;YACrB,MAAM,IAAI,WAAW,CACnB,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,SAAA,CAAW;gBACvD,CAAA,QAAA,CAAU;AACV,gBAAA,CAAA,EAAG,WAAW,CAAC,GAAG,CAAC,CAAA,CAAE,CACxB;QACH;IACF;IAEA,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;QACd,IAAI,CAAC,OAAO,EAAE;IAChB;AACD;;;;"}
|