jseption 0.0.5 → 0.0.6
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 +25 -4
- package/dist/atoms.d.ts +1 -0
- package/dist/atoms.js +2 -1
- package/dist/atoms.js.map +1 -1
- package/dist/builtins/base64.d.ts +14 -0
- package/dist/builtins/base64.js +219 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/bigint.js +3 -3
- package/dist/builtins/bigint.js.map +1 -1
- package/dist/builtins/date.d.ts +1 -0
- package/dist/builtins/date.js +26 -12
- package/dist/builtins/date.js.map +1 -1
- package/dist/builtins/error.js +9 -0
- package/dist/builtins/error.js.map +1 -1
- package/dist/builtins/float16.d.ts +3 -0
- package/dist/builtins/float16.js +69 -0
- package/dist/builtins/float16.js.map +1 -0
- package/dist/builtins/function.js +2 -2
- package/dist/builtins/index.js +9 -6
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/iterator.d.ts +2 -0
- package/dist/builtins/iterator.js +624 -0
- package/dist/builtins/iterator.js.map +1 -0
- package/dist/builtins/json.d.ts +13 -1
- package/dist/builtins/json.js +283 -211
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/mapset.js +365 -6
- package/dist/builtins/mapset.js.map +1 -1
- package/dist/builtins/math.js +203 -3
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/native.js +6 -6
- package/dist/builtins/object.js +9 -2
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/promise.js +31 -11
- package/dist/builtins/promise.js.map +1 -1
- package/dist/builtins/proxy.js +2 -2
- package/dist/builtins/reflect.js +6 -2
- package/dist/builtins/reflect.js.map +1 -1
- package/dist/builtins/regexp.js +74 -3
- package/dist/builtins/regexp.js.map +1 -1
- package/dist/builtins/string.js +1 -1
- package/dist/builtins/symbol.js +1 -1
- package/dist/builtins/symbol.js.map +1 -1
- package/dist/builtins/typedarray.d.ts +1 -0
- package/dist/builtins/typedarray.js +302 -32
- package/dist/builtins/typedarray.js.map +1 -1
- package/dist/builtins/weakref.js +7 -7
- package/dist/embed.js +3 -3
- package/dist/interpreter.js +15 -14
- package/dist/interpreter.js.map +1 -1
- package/dist/jit.d.ts +1 -0
- package/dist/jit.js +51 -13
- package/dist/jit.js.map +1 -1
- package/dist/jit_hook.d.ts +1 -0
- package/dist/jit_hook.js.map +1 -1
- package/dist/jit_runtime.d.ts +1 -1
- package/dist/jit_runtime.js +6 -6
- package/dist/jit_runtime.js.map +1 -1
- package/dist/jit_stack.d.ts +1 -0
- package/dist/jit_stack.js +2 -1
- package/dist/jit_stack.js.map +1 -1
- package/dist/jseption.d.ts +2 -0
- package/dist/jseption.js +1 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.js +1 -1
- package/dist/module.js +5 -3
- package/dist/module.js.map +1 -1
- package/dist/parser.js +26 -9
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts +12 -0
- package/dist/print.js +494 -0
- package/dist/print.js.map +1 -0
- package/dist/qjs.js +13 -10
- package/dist/qjs.js.map +1 -1
- package/dist/quickjs.d.ts +8 -0
- package/dist/quickjs.js +132 -53
- package/dist/quickjs.js.map +1 -1
- package/dist/std.d.ts +4 -2
- package/dist/std.js +42 -8
- package/dist/std.js.map +1 -1
- package/dist/values.d.ts +31 -27
- package/dist/values.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/builtins/mapset.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* iterators are the host iterators re-prototyped to the guest Map/Set
|
|
10
10
|
* Iterator prototypes, whose `next` is the host one.
|
|
11
11
|
*/
|
|
12
|
-
import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto, JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set, JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr, } from "../quickjs.js";
|
|
12
|
+
import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto, JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set, JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr, JS_CFUNC_DEF, JS_GetClassID, JS_GetPropertyStr, JS_ThrowTypeErrorInvalidClass, JS_ThrowRangeError, JS_ToFloat64, JS_ToBoolFree, JS_ATOM_has, } from "../quickjs.js";
|
|
13
13
|
import { js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO, HOST_SET_ITERATOR_PROTO, } from "./native.js";
|
|
14
14
|
const MAGIC_SET = 1 << 0;
|
|
15
15
|
const MAGIC_WEAK = 1 << 1;
|
|
@@ -38,10 +38,10 @@ function new_host_collection(magic) {
|
|
|
38
38
|
}
|
|
39
39
|
export function js_map_constructor(ctx, new_target, argv, magic) {
|
|
40
40
|
const is_set = (magic & MAGIC_SET) !== 0;
|
|
41
|
-
const proto = js_proto_from_ctor(ctx, new_target, (
|
|
41
|
+
const proto = js_proto_from_ctor(ctx, new_target, (35 /* JSClassID.MAP */ + magic));
|
|
42
42
|
if (JS_IsException(proto))
|
|
43
43
|
return JS_EXCEPTION;
|
|
44
|
-
const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (
|
|
44
|
+
const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (35 /* JSClassID.MAP */ + magic));
|
|
45
45
|
/* the iterable argument is processed as in quickjs.c: the 'set'/'add'
|
|
46
46
|
method is looked up on the new object (observable) and called for
|
|
47
47
|
each entry */
|
|
@@ -151,8 +151,356 @@ function js_map_groupBy(ctx, this_val, argv) {
|
|
|
151
151
|
}
|
|
152
152
|
function js_get_this(ctx, this_val) { return this_val; }
|
|
153
153
|
const MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;
|
|
154
|
-
const MAP_GET = MP.get, MAP_SET = MP.set;
|
|
154
|
+
const MAP_GET = MP.get, MAP_SET = MP.set, MAP_HAS = MP.has;
|
|
155
|
+
const WEAKMAP_GET = WMP.get, WEAKMAP_SET = WMP.set, WEAKMAP_HAS = WMP.has;
|
|
156
|
+
const SET_ADD = SP.add, SET_HAS = SP.has, SET_DELETE = SP.delete, SET_VALUES = SP.values;
|
|
155
157
|
const getter = (o, name) => Object.getOwnPropertyDescriptor(o, name).get;
|
|
158
|
+
const SET_SIZE = getter(SP, 'size');
|
|
159
|
+
/* map_normalize_key: -0 is +0 */
|
|
160
|
+
function map_normalize_key(key) {
|
|
161
|
+
return typeof key === 'number' && key === 0 ? 0 : key;
|
|
162
|
+
}
|
|
163
|
+
/* ---- Map and WeakMap upsert: getOrInsert, getOrInsertComputed ---- */
|
|
164
|
+
const UPSERT_COMPUTED = 1, UPSERT_WEAK = 2;
|
|
165
|
+
/* js_map_getOrInsert (magic: UPSERT_COMPUTED | UPSERT_WEAK) */
|
|
166
|
+
function js_map_getOrInsert(ctx, this_val, argv, magic) {
|
|
167
|
+
const computed = (magic & UPSERT_COMPUTED) !== 0;
|
|
168
|
+
const is_weak = (magic & UPSERT_WEAK) !== 0;
|
|
169
|
+
const class_id = is_weak ? 37 /* JSClassID.WEAKMAP */ : 35 /* JSClassID.MAP */;
|
|
170
|
+
if (JS_GetClassID(this_val) !== class_id)
|
|
171
|
+
return JS_ThrowTypeErrorInvalidClass(ctx, class_id);
|
|
172
|
+
const coll = this_val; /* the host Map or WeakMap */
|
|
173
|
+
const get = (is_weak ? WEAKMAP_GET : MAP_GET), set = (is_weak ? WEAKMAP_SET : MAP_SET);
|
|
174
|
+
const has = (is_weak ? WEAKMAP_HAS : MAP_HAS);
|
|
175
|
+
if (computed && !JS_IsFunction(ctx, argv[1]))
|
|
176
|
+
return JS_ThrowTypeError(ctx, 'not a function');
|
|
177
|
+
const key = map_normalize_key(argv[0]);
|
|
178
|
+
if (is_weak && !js_weakref_is_target(key))
|
|
179
|
+
return JS_ThrowTypeError(ctx, 'invalid value used as WeakMap key');
|
|
180
|
+
if (has.call(coll, key))
|
|
181
|
+
return get.call(coll, key);
|
|
182
|
+
let value;
|
|
183
|
+
if (computed) {
|
|
184
|
+
value = JS_Call(ctx, argv[1], undefined, [key]);
|
|
185
|
+
if (JS_IsException(value))
|
|
186
|
+
return JS_EXCEPTION;
|
|
187
|
+
/* the callback may have inserted the key: Set overwrites that entry in place */
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
value = argv[1];
|
|
191
|
+
}
|
|
192
|
+
set.call(coll, key, value);
|
|
193
|
+
return value;
|
|
194
|
+
}
|
|
195
|
+
/* ---- Set methods ---- */
|
|
196
|
+
function get_this_set(ctx, this_val) {
|
|
197
|
+
if (JS_GetClassID(this_val) === 36 /* JSClassID.SET */)
|
|
198
|
+
return this_val;
|
|
199
|
+
JS_ThrowTypeErrorInvalidClass(ctx, 36 /* JSClassID.SET */);
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
/* get_set_record (GetSetRecord) */
|
|
203
|
+
function get_set_record(ctx, obj) {
|
|
204
|
+
let size;
|
|
205
|
+
if (JS_GetClassID(obj) === 36 /* JSClassID.SET */) {
|
|
206
|
+
size = SET_SIZE.call(obj);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const v = JS_GetPropertyStr(ctx, obj, 'size');
|
|
210
|
+
if (JS_IsException(v))
|
|
211
|
+
return null;
|
|
212
|
+
const d = JS_ToFloat64(ctx, v);
|
|
213
|
+
if (JS_IsException(d))
|
|
214
|
+
return null;
|
|
215
|
+
if (Number.isNaN(d)) {
|
|
216
|
+
JS_ThrowTypeError(ctx, '.size is not a number');
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
size = Math.trunc(d);
|
|
220
|
+
if (size < 0) {
|
|
221
|
+
JS_ThrowRangeError(ctx, '.size must be positive');
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const has = JS_GetProperty(ctx, obj, JS_ATOM_has);
|
|
226
|
+
if (JS_IsException(has))
|
|
227
|
+
return null;
|
|
228
|
+
if (JS_IsUndefined(has)) {
|
|
229
|
+
JS_ThrowTypeError(ctx, '.has is undefined');
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
if (!JS_IsFunction(ctx, has)) {
|
|
233
|
+
JS_ThrowTypeError(ctx, '.has is not a function');
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const keys = JS_GetPropertyStr(ctx, obj, 'keys');
|
|
237
|
+
if (JS_IsException(keys))
|
|
238
|
+
return null;
|
|
239
|
+
if (JS_IsUndefined(keys)) {
|
|
240
|
+
JS_ThrowTypeError(ctx, '.keys is undefined');
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
if (!JS_IsFunction(ctx, keys)) {
|
|
244
|
+
JS_ThrowTypeError(ctx, '.keys is not a function');
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
return { size, has, keys };
|
|
248
|
+
}
|
|
249
|
+
/* copy 'this_val' in a new guest Set without side effects (no .add call) */
|
|
250
|
+
function js_copy_set(ctx, s) {
|
|
251
|
+
const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
|
|
252
|
+
if (JS_IsException(newset))
|
|
253
|
+
return null;
|
|
254
|
+
for (const k of SET_VALUES.call(s))
|
|
255
|
+
SET_ADD.call(newset, k);
|
|
256
|
+
return newset;
|
|
257
|
+
}
|
|
258
|
+
/* the keys of the set-like 'other': the iterator and its next method */
|
|
259
|
+
function setlike_keys(ctx, other, r) {
|
|
260
|
+
const iter = JS_Call(ctx, r.keys, other, []);
|
|
261
|
+
if (JS_IsException(iter))
|
|
262
|
+
return null;
|
|
263
|
+
if (!JS_IsObject(iter)) {
|
|
264
|
+
JS_ThrowTypeErrorNotAnObject(ctx);
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
const next = JS_GetProperty(ctx, iter, JS_ATOM_next);
|
|
268
|
+
if (JS_IsException(next))
|
|
269
|
+
return null;
|
|
270
|
+
return { iter, next };
|
|
271
|
+
}
|
|
272
|
+
/* a live iteration of a guest Set (js_create_map_iterator + js_map_iterator_next) */
|
|
273
|
+
function set_iter(s) {
|
|
274
|
+
return SET_VALUES.call(s);
|
|
275
|
+
}
|
|
276
|
+
/* call other.has(item); -1 on exception */
|
|
277
|
+
function call_has(ctx, other, r, item) {
|
|
278
|
+
const rv = JS_Call(ctx, r.has, other, [item]);
|
|
279
|
+
if (JS_IsException(rv))
|
|
280
|
+
return -1;
|
|
281
|
+
return JS_ToBoolFree(ctx, rv) ? 1 : 0;
|
|
282
|
+
}
|
|
283
|
+
function js_set_isDisjointFrom(ctx, this_val, argv) {
|
|
284
|
+
const s = get_this_set(ctx, this_val);
|
|
285
|
+
if (!s)
|
|
286
|
+
return JS_EXCEPTION;
|
|
287
|
+
const r = get_set_record(ctx, argv[0]);
|
|
288
|
+
if (!r)
|
|
289
|
+
return JS_EXCEPTION;
|
|
290
|
+
let found = false;
|
|
291
|
+
if (SET_SIZE.call(s) <= r.size) {
|
|
292
|
+
const it = set_iter(s);
|
|
293
|
+
for (let e = it.next(); !e.done; e = it.next()) {
|
|
294
|
+
const ok = call_has(ctx, argv[0], r, e.value);
|
|
295
|
+
if (ok < 0)
|
|
296
|
+
return JS_EXCEPTION;
|
|
297
|
+
if (ok) {
|
|
298
|
+
found = true;
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
305
|
+
if (!k)
|
|
306
|
+
return JS_EXCEPTION;
|
|
307
|
+
const pdone = { done: 0 };
|
|
308
|
+
for (;;) {
|
|
309
|
+
const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
310
|
+
if (JS_IsException(item))
|
|
311
|
+
return JS_EXCEPTION;
|
|
312
|
+
if (pdone.done)
|
|
313
|
+
break;
|
|
314
|
+
if (SET_HAS.call(s, map_normalize_key(item))) {
|
|
315
|
+
found = true;
|
|
316
|
+
if (JS_IteratorClose(ctx, k.iter, false) < 0)
|
|
317
|
+
return JS_EXCEPTION;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return !found;
|
|
323
|
+
}
|
|
324
|
+
function js_set_isSubsetOf(ctx, this_val, argv) {
|
|
325
|
+
const s = get_this_set(ctx, this_val);
|
|
326
|
+
if (!s)
|
|
327
|
+
return JS_EXCEPTION;
|
|
328
|
+
const r = get_set_record(ctx, argv[0]);
|
|
329
|
+
if (!r)
|
|
330
|
+
return JS_EXCEPTION;
|
|
331
|
+
if (SET_SIZE.call(s) > r.size)
|
|
332
|
+
return false;
|
|
333
|
+
const it = set_iter(s);
|
|
334
|
+
for (let e = it.next(); !e.done; e = it.next()) {
|
|
335
|
+
const ok = call_has(ctx, argv[0], r, e.value);
|
|
336
|
+
if (ok < 0)
|
|
337
|
+
return JS_EXCEPTION;
|
|
338
|
+
if (!ok)
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
function js_set_isSupersetOf(ctx, this_val, argv) {
|
|
344
|
+
const s = get_this_set(ctx, this_val);
|
|
345
|
+
if (!s)
|
|
346
|
+
return JS_EXCEPTION;
|
|
347
|
+
const r = get_set_record(ctx, argv[0]);
|
|
348
|
+
if (!r)
|
|
349
|
+
return JS_EXCEPTION;
|
|
350
|
+
if (SET_SIZE.call(s) < r.size)
|
|
351
|
+
return false;
|
|
352
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
353
|
+
if (!k)
|
|
354
|
+
return JS_EXCEPTION;
|
|
355
|
+
const pdone = { done: 0 };
|
|
356
|
+
for (;;) {
|
|
357
|
+
const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
358
|
+
if (JS_IsException(item))
|
|
359
|
+
return JS_EXCEPTION;
|
|
360
|
+
if (pdone.done)
|
|
361
|
+
return true;
|
|
362
|
+
if (!SET_HAS.call(s, map_normalize_key(item))) {
|
|
363
|
+
if (JS_IteratorClose(ctx, k.iter, false) < 0)
|
|
364
|
+
return JS_EXCEPTION;
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
function js_set_intersection(ctx, this_val, argv) {
|
|
370
|
+
const s = get_this_set(ctx, this_val);
|
|
371
|
+
if (!s)
|
|
372
|
+
return JS_EXCEPTION;
|
|
373
|
+
const r = get_set_record(ctx, argv[0]);
|
|
374
|
+
if (!r)
|
|
375
|
+
return JS_EXCEPTION;
|
|
376
|
+
if (SET_SIZE.call(s) > r.size) {
|
|
377
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
378
|
+
if (!k)
|
|
379
|
+
return JS_EXCEPTION;
|
|
380
|
+
const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
|
|
381
|
+
if (JS_IsException(newset))
|
|
382
|
+
return JS_EXCEPTION;
|
|
383
|
+
const pdone = { done: 0 };
|
|
384
|
+
for (;;) {
|
|
385
|
+
const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
386
|
+
if (JS_IsException(item0))
|
|
387
|
+
return JS_EXCEPTION;
|
|
388
|
+
if (pdone.done)
|
|
389
|
+
break;
|
|
390
|
+
const item = map_normalize_key(item0);
|
|
391
|
+
if (SET_HAS.call(s, item) && !SET_HAS.call(newset, item))
|
|
392
|
+
SET_ADD.call(newset, item);
|
|
393
|
+
}
|
|
394
|
+
return newset;
|
|
395
|
+
}
|
|
396
|
+
const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
|
|
397
|
+
if (JS_IsException(newset))
|
|
398
|
+
return JS_EXCEPTION;
|
|
399
|
+
const it = set_iter(s);
|
|
400
|
+
for (let e = it.next(); !e.done; e = it.next()) {
|
|
401
|
+
const ok = call_has(ctx, argv[0], r, e.value);
|
|
402
|
+
if (ok < 0)
|
|
403
|
+
return JS_EXCEPTION;
|
|
404
|
+
if (ok) {
|
|
405
|
+
const item = map_normalize_key(e.value);
|
|
406
|
+
if (!SET_HAS.call(newset, item))
|
|
407
|
+
SET_ADD.call(newset, item);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return newset;
|
|
411
|
+
}
|
|
412
|
+
function js_set_difference(ctx, this_val, argv) {
|
|
413
|
+
const s = get_this_set(ctx, this_val);
|
|
414
|
+
if (!s)
|
|
415
|
+
return JS_EXCEPTION;
|
|
416
|
+
const r = get_set_record(ctx, argv[0]);
|
|
417
|
+
if (!r)
|
|
418
|
+
return JS_EXCEPTION;
|
|
419
|
+
const t = js_copy_set(ctx, s);
|
|
420
|
+
if (!t)
|
|
421
|
+
return JS_EXCEPTION;
|
|
422
|
+
if (SET_SIZE.call(s) <= r.size) {
|
|
423
|
+
const it = set_iter(t);
|
|
424
|
+
for (let e = it.next(); !e.done; e = it.next()) {
|
|
425
|
+
const ok = call_has(ctx, argv[0], r, e.value);
|
|
426
|
+
if (ok < 0)
|
|
427
|
+
return JS_EXCEPTION;
|
|
428
|
+
if (ok)
|
|
429
|
+
SET_DELETE.call(t, e.value);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
434
|
+
if (!k)
|
|
435
|
+
return JS_EXCEPTION;
|
|
436
|
+
const pdone = { done: 0 };
|
|
437
|
+
for (;;) {
|
|
438
|
+
const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
439
|
+
if (JS_IsException(item))
|
|
440
|
+
return JS_EXCEPTION;
|
|
441
|
+
if (pdone.done)
|
|
442
|
+
break;
|
|
443
|
+
SET_DELETE.call(t, item);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return t;
|
|
447
|
+
}
|
|
448
|
+
function js_set_symmetricDifference(ctx, this_val, argv) {
|
|
449
|
+
const s = get_this_set(ctx, this_val);
|
|
450
|
+
if (!s)
|
|
451
|
+
return JS_EXCEPTION;
|
|
452
|
+
const r = get_set_record(ctx, argv[0]);
|
|
453
|
+
if (!r)
|
|
454
|
+
return JS_EXCEPTION;
|
|
455
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
456
|
+
if (!k)
|
|
457
|
+
return JS_EXCEPTION;
|
|
458
|
+
const t = js_copy_set(ctx, s);
|
|
459
|
+
if (!t)
|
|
460
|
+
return JS_EXCEPTION;
|
|
461
|
+
const pdone = { done: 0 };
|
|
462
|
+
for (;;) {
|
|
463
|
+
const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
464
|
+
if (JS_IsException(item0))
|
|
465
|
+
return JS_EXCEPTION;
|
|
466
|
+
if (pdone.done)
|
|
467
|
+
break;
|
|
468
|
+
/* note the subtlety: keys can disappear during iteration (mutating
|
|
469
|
+
iterators), and insertion order must be kept: check 'this', then the
|
|
470
|
+
copy. Present in 'this': delete from the copy; missing from both: add;
|
|
471
|
+
in the copy only: the iterator erased it from 'this', don't add */
|
|
472
|
+
const item = map_normalize_key(item0);
|
|
473
|
+
if (SET_HAS.call(s, item))
|
|
474
|
+
SET_DELETE.call(t, item);
|
|
475
|
+
else if (!SET_HAS.call(t, item))
|
|
476
|
+
SET_ADD.call(t, item);
|
|
477
|
+
}
|
|
478
|
+
return t;
|
|
479
|
+
}
|
|
480
|
+
function js_set_union(ctx, this_val, argv) {
|
|
481
|
+
const s = get_this_set(ctx, this_val);
|
|
482
|
+
if (!s)
|
|
483
|
+
return JS_EXCEPTION;
|
|
484
|
+
const r = get_set_record(ctx, argv[0]);
|
|
485
|
+
if (!r)
|
|
486
|
+
return JS_EXCEPTION;
|
|
487
|
+
const k = setlike_keys(ctx, argv[0], r);
|
|
488
|
+
if (!k)
|
|
489
|
+
return JS_EXCEPTION;
|
|
490
|
+
const t = js_copy_set(ctx, s);
|
|
491
|
+
if (!t)
|
|
492
|
+
return JS_EXCEPTION;
|
|
493
|
+
const pdone = { done: 0 };
|
|
494
|
+
for (;;) {
|
|
495
|
+
const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
|
|
496
|
+
if (JS_IsException(item))
|
|
497
|
+
return JS_EXCEPTION;
|
|
498
|
+
if (pdone.done)
|
|
499
|
+
break;
|
|
500
|
+
SET_ADD.call(t, item);
|
|
501
|
+
}
|
|
502
|
+
return t;
|
|
503
|
+
}
|
|
156
504
|
const js_map_funcs = [
|
|
157
505
|
JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),
|
|
158
506
|
JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),
|
|
@@ -160,6 +508,8 @@ const js_map_funcs = [
|
|
|
160
508
|
const js_map_proto_funcs = [
|
|
161
509
|
JS_NATIVE_DEF('set', 2, MP.set),
|
|
162
510
|
JS_NATIVE_DEF('get', 1, MP.get),
|
|
511
|
+
JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, 0),
|
|
512
|
+
JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_COMPUTED),
|
|
163
513
|
JS_NATIVE_DEF('has', 1, MP.has),
|
|
164
514
|
JS_NATIVE_DEF('delete', 1, MP.delete),
|
|
165
515
|
JS_NATIVE_DEF('clear', 0, MP.clear),
|
|
@@ -182,6 +532,13 @@ const js_set_proto_funcs = [
|
|
|
182
532
|
JS_NATIVE_DEF('clear', 0, SP.clear),
|
|
183
533
|
JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),
|
|
184
534
|
JS_NATIVE_DEF('forEach', 1, SP.forEach),
|
|
535
|
+
JS_CFUNC_DEF('isDisjointFrom', 1, js_set_isDisjointFrom),
|
|
536
|
+
JS_CFUNC_DEF('isSubsetOf', 1, js_set_isSubsetOf),
|
|
537
|
+
JS_CFUNC_DEF('isSupersetOf', 1, js_set_isSupersetOf),
|
|
538
|
+
JS_CFUNC_DEF('intersection', 1, js_set_intersection),
|
|
539
|
+
JS_CFUNC_DEF('difference', 1, js_set_difference),
|
|
540
|
+
JS_CFUNC_DEF('symmetricDifference', 1, js_set_symmetricDifference),
|
|
541
|
+
JS_CFUNC_DEF('union', 1, js_set_union),
|
|
185
542
|
JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),
|
|
186
543
|
JS_ALIAS_DEF('keys', 'values'),
|
|
187
544
|
JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),
|
|
@@ -195,6 +552,8 @@ const js_set_iterator_proto_funcs = [
|
|
|
195
552
|
const js_weak_map_proto_funcs = [
|
|
196
553
|
JS_NATIVE_DEF('set', 2, WMP.set),
|
|
197
554
|
JS_NATIVE_DEF('get', 1, WMP.get),
|
|
555
|
+
JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, UPSERT_WEAK),
|
|
556
|
+
JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_WEAK | UPSERT_COMPUTED),
|
|
198
557
|
JS_NATIVE_DEF('has', 1, WMP.has),
|
|
199
558
|
JS_NATIVE_DEF('delete', 1, WMP.delete),
|
|
200
559
|
JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),
|
|
@@ -217,7 +576,7 @@ export function JS_AddIntrinsicMapSet(ctx) {
|
|
|
217
576
|
for (let i = 0; i < 4; i++) {
|
|
218
577
|
const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);
|
|
219
578
|
const proto = JS_NewObject(ctx);
|
|
220
|
-
ctx.class_proto[
|
|
579
|
+
ctx.class_proto[35 /* JSClassID.MAP */ + i] = proto;
|
|
221
580
|
JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);
|
|
222
581
|
const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor, name, 0, 3 /* JSCFunctionEnum.constructor_magic */, i);
|
|
223
582
|
if (i < 2) {
|
|
@@ -227,7 +586,7 @@ export function JS_AddIntrinsicMapSet(ctx) {
|
|
|
227
586
|
}
|
|
228
587
|
for (let i = 0; i < 2; i++) {
|
|
229
588
|
const proto = JS_NewObjectProto(ctx, ctx.iterator_proto);
|
|
230
|
-
ctx.class_proto[
|
|
589
|
+
ctx.class_proto[39 /* JSClassID.MAP_ITERATOR */ + i] = proto;
|
|
231
590
|
JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);
|
|
232
591
|
}
|
|
233
592
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapset.js","sourceRoot":"","sources":["../../src/builtins/mapset.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Map, Set, WeakMap, WeakSet and their iterators (port of the Map/Set\n * part of quickjs.c)\n *\n * Guest collections are host collections with the guest prototype\n * (builtins/native.ts): the constructor creates the host Map/Set/WeakMap/\n * WeakSet, re-prototypes it to the prototype derived from new.target and\n * tags it with the class id. Every method is the borrowed host native; the\n * iterators are the host iterators re-prototyped to the guest Map/Set\n * Iterator prototypes, whose `next` is the host one.\n */\nimport {\n JSContext, JSValue, JSObject, JSClassID, JSCFunctionEnum,\n JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto,\n JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor,\n JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64,\n JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF,\n JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set,\n JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr,\n} from '../quickjs.ts';\nimport {\n js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO,\n HOST_SET_ITERATOR_PROTO,\n} from './native.ts';\n\nconst MAGIC_SET = 1 << 0;\nconst MAGIC_WEAK = 1 << 1;\n\n/* true if 'val' can be the target of a weak reference: an object or a\n non registered symbol (js_weakref_is_target) */\nexport function js_weakref_is_target(val: JSValue): boolean {\n if (JS_IsObject(val)) return true;\n if (typeof val === 'symbol') return Symbol.keyFor(val) === undefined;\n return false;\n}\n\nfunction check_function(ctx: JSContext, obj: JSValue): number {\n if (JS_IsFunction(ctx, obj)) return 0;\n JS_ThrowTypeError(ctx, 'not a function');\n return -1;\n}\n\nfunction new_host_collection(magic: number): object {\n switch (magic) {\n case 0: return new Map();\n case MAGIC_SET: return new Set();\n case MAGIC_WEAK: return new WeakMap();\n default: return new WeakSet();\n }\n}\n\nexport function js_map_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_set = (magic & MAGIC_SET) !== 0;\n const proto = js_proto_from_ctor(ctx, new_target, (JSClassID.MAP + magic) as JSClassID);\n if (JS_IsException(proto)) return JS_EXCEPTION;\n const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (JSClassID.MAP + magic) as JSClassID);\n\n /* the iterable argument is processed as in quickjs.c: the 'set'/'add'\n method is looked up on the new object (observable) and called for\n each entry */\n const arr = argv.length > 0 ? argv[0] : undefined;\n if (arr !== undefined && arr !== null) {\n const adder = JS_GetProperty(ctx, obj, is_set ? JS_ATOM_add : JS_ATOM_set);\n if (JS_IsException(adder)) return JS_EXCEPTION;\n if (!JS_IsFunction(ctx, adder)) {\n return JS_ThrowTypeError(ctx, 'set/add is not a function');\n }\n const iter = JS_GetIterator(ctx, arr, false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n let ret: JSValue;\n if (is_set) {\n ret = JS_Call(ctx, adder, obj, [item]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n } else {\n if (!JS_IsObject(item)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const key = JS_GetPropertyUint32(ctx, item, 0);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const value = JS_GetPropertyUint32(ctx, item, 1);\n if (JS_IsException(value)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n ret = JS_Call(ctx, adder, obj, [key, value]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n }\n }\n }\n return obj;\n}\n\n/* Map.groupBy (js_object_groupBy with is_map = 1; Object.groupBy is in object.ts) */\nfunction js_map_groupBy(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n // \"is function?\" check must be observed before argv[0] is accessed\n const cb = argv[1];\n if (check_function(ctx, cb)) return JS_EXCEPTION;\n\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return JS_EXCEPTION;\n\n const groups = js_map_constructor(ctx, undefined, [], 0);\n if (JS_IsException(groups)) return JS_EXCEPTION;\n const map = groups as Map<JSValue, JSValue>;\n\n const pdone = { done: 0 };\n for (let idx = 0; ; idx++) {\n if (idx >= Number.MAX_SAFE_INTEGER) {\n JS_ThrowTypeError(ctx, 'too many elements');\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const v = JS_IteratorNext(ctx, iter, next, [], pdone);\n if (JS_IsException(v)) return JS_EXCEPTION;\n if (pdone.done) break; // v is JS_UNDEFINED\n\n let key = JS_Call(ctx, cb, ctx.global_obj, [v, idx]);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n /* -0 is normalized to +0 */\n if (typeof key === 'number' && key === 0) key = 0;\n\n let prop = MAP_GET.call(map, key);\n if (JS_IsUndefined(prop)) {\n prop = JS_NewArray(ctx);\n MAP_SET.call(map, key, prop);\n }\n const len = js_get_length64(ctx, prop);\n if (len < 0) return JS_EXCEPTION;\n if (JS_SetPropertyInt64(ctx, prop, len, v) < 0) return JS_EXCEPTION;\n }\n return groups;\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;\nconst MAP_GET = MP.get, MAP_SET = MP.set;\nconst getter = (o: object, name: string) => Object.getOwnPropertyDescriptor(o, name)!.get!;\n\nconst js_map_funcs = [\n JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, MP.set),\n JS_NATIVE_DEF('get', 1, MP.get),\n JS_NATIVE_DEF('has', 1, MP.has),\n JS_NATIVE_DEF('delete', 1, MP.delete),\n JS_NATIVE_DEF('clear', 0, MP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(MP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, MP.forEach),\n JS_NATIVE_DEF('values', 0, MP.values, fix_map_iterator),\n JS_NATIVE_DEF('keys', 0, MP.keys, fix_map_iterator),\n JS_NATIVE_DEF('entries', 0, MP.entries, fix_map_iterator),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'entries'),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_MAP_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, SP.add),\n JS_NATIVE_DEF('has', 1, SP.has),\n JS_NATIVE_DEF('delete', 1, SP.delete),\n JS_NATIVE_DEF('clear', 0, SP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, SP.forEach),\n JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),\n JS_ALIAS_DEF('keys', 'values'),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),\n JS_NATIVE_DEF('entries', 0, SP.entries, fix_set_iterator),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_SET_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, WMP.set),\n JS_NATIVE_DEF('get', 1, WMP.get),\n JS_NATIVE_DEF('has', 1, WMP.has),\n JS_NATIVE_DEF('delete', 1, WMP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, WSP.add),\n JS_NATIVE_DEF('has', 1, WSP.has),\n JS_NATIVE_DEF('delete', 1, WSP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakSet', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_proto_funcs_ptr = [\n js_map_proto_funcs,\n js_set_proto_funcs,\n js_weak_map_proto_funcs,\n js_weak_set_proto_funcs,\n js_map_iterator_proto_funcs,\n js_set_iterator_proto_funcs,\n];\n\nexport function JS_AddIntrinsicMapSet(ctx: JSContext): void {\n for (let i = 0; i < 4; i++) {\n const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.MAP + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);\n const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor as any, name, 0, JSCFunctionEnum.constructor_magic, i);\n if (i < 2) {\n JS_SetPropertyFunctionList(ctx, obj1, js_map_funcs);\n }\n JS_NewGlobalCConstructor2(ctx, obj1, name, proto);\n }\n\n for (let i = 0; i < 2; i++) {\n const proto = JS_NewObjectProto(ctx, ctx.iterator_proto) as JSObject;\n ctx.class_proto[JSClassID.MAP_ITERATOR + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mapset.js","sourceRoot":"","sources":["../../src/builtins/mapset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAEL,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EACzG,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EACrD,iBAAiB,EAAE,4BAA4B,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAC1G,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAC3E,0BAA0B,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EACxG,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EACnH,YAAY,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,aAAa,EACxG,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,YAAY,EAC/G,aAAa,EAAE,WAAW,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAC1G,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;AAE1B;kDACkD;AAClD,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,GAAY;IAClD,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;QACzB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;QACjC,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAc,EAAE,UAAmB,EAAE,IAAe,EAAE,KAAa;IACpG,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,yBAAgB,KAAK,CAAc,CAAC,CAAC;IACxF,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC/C,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,yBAAgB,KAAK,CAAc,CAAC,CAAC;IAE/G;;oBAEgB;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC;QAC9C,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,cAAc,CAAC,WAAW,CAAC;YAAE,OAAO,YAAY,CAAC;QACrD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI;gBAAE,MAAM;YACtB,IAAI,GAAY,CAAC;YACjB,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,4BAA4B,CAAC,GAAG,CAAC,CAAC;oBAClC,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC7C,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,SAAS,cAAc,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACxE,mEAAmE;IACnE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC;QAAE,OAAO,YAAY,CAAC;IAEjD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAE9C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAE9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC;IAChD,MAAM,GAAG,GAAG,MAA+B,CAAC;IAE5C,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1B,KAAK,IAAI,GAAG,GAAG,CAAC,GAAI,GAAG,EAAE,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACnC,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAC5C,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM,CAAC,oBAAoB;QAE3C,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,4BAA4B;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC;YAAE,GAAG,GAAG,CAAC,CAAC;QAElD,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QACjC,IAAI,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAc,EAAE,QAAiB,IAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;AAErF,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;AAC/F,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;AAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC;AAC1E,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC;AACzF,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAE,CAAC,GAAI,CAAC;AAC3F,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAEpC,iCAAiC;AACjC,SAAS,iBAAiB,CAAC,GAAY;IACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC;AAED,wEAAwE;AAExE,MAAM,eAAe,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;AAE3C,+DAA+D;AAC/D,SAAS,kBAAkB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe,EAAE,KAAa;IAC3F,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,4BAAmB,CAAC,uBAAc,CAAC;IAC7D,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,QAAkB,CAAC,CAAC,6BAA6B;IAG9D,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAW,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAW,CAAC;IAC3G,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAW,CAAC;IACxD,IAAI,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC,GAAG,EAAE,mCAAmC,CAAC,CAAC;IAC9G,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,KAAc,CAAC;IACnB,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC/C,gFAAgF;IAClF,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2BAA2B;AAE3B,SAAS,YAAY,CAAC,GAAc,EAAE,QAAiB;IACrD,IAAI,aAAa,CAAC,QAAQ,CAAC,2BAAkB;QAAE,OAAO,QAAwB,CAAC;IAC/E,6BAA6B,CAAC,GAAG,yBAAgB,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAID,mCAAmC;AACnC,SAAS,cAAc,CAAC,GAAc,EAAE,GAAY;IAClD,IAAI,IAAY,CAAC;IACjB,IAAI,aAAa,CAAC,GAAG,CAAC,2BAAkB,EAAE,CAAC;QACzC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACtF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAAC,kBAAkB,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACnF,CAAC;IACD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACtF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAChG,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACxF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAClG,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,4EAA4E;AAC5E,SAAS,WAAW,CAAC,GAAc,EAAE,CAAe;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAsB;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,MAAsB,CAAC;AAChC,CAAC;AAED,wEAAwE;AACxE,SAAS,YAAY,CAAC,GAAc,EAAE,KAAc,EAAE,CAAY;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,qFAAqF;AACrF,SAAS,QAAQ,CAAC,CAAe;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAsB,CAAC;AACjD,CAAC;AAED,2CAA2C;AAC3C,SAAS,QAAQ,CAAC,GAAc,EAAE,KAAc,EAAE,CAAY,EAAE,IAAa;IAC3E,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,IAAI,cAAc,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAClC,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC/E,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,YAAY,CAAC;YAChC,IAAI,EAAE,EAAE,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI;gBAAE,MAAM;YACtB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC7C,KAAK,GAAG,IAAI,CAAC;gBACb,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;oBAAE,OAAO,YAAY,CAAC;gBAClE,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC3E,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC7E,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1B,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;gBAAE,OAAO,YAAY,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC7E,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,cAAc,CAAC,MAAM,CAAC;YAAE,OAAO,YAAY,CAAC;QAChD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,cAAc,CAAC,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC/C,IAAI,KAAK,CAAC,IAAI;gBAAE,MAAM;YACtB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC;IAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QAChC,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC3E,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,YAAY,CAAC;YAChC,IAAI,EAAE;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI;gBAAE,MAAM;YACtB,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACpF,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1B,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC/C,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM;QACtB;;;6EAGqE;QACrE,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACtE,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1B,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAGD,MAAM,YAAY,GAAG;IACnB,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IACnD,cAAc,CAAC,sBAAsB,EAAE,WAAW,EAAE,IAAI,CAAC;CAC1D,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC/B,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC/B,kBAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,EAAE,kBAAkB,EAAE,eAAe,CAAC;IACjF,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC/B,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IACrC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IACtD,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACvC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACvD,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC;IACnD,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACzD,YAAY,CAAC,uBAAuB,EAAE,SAAS,CAAC;IAChD,kBAAkB,CAAC,0BAA0B,EAAE,KAAK,EAAE,oBAAoB,CAAC;CAC5E,CAAC;AAEF,MAAM,2BAA2B,GAAG;IAClC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAG,uBAA+B,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACxF,kBAAkB,CAAC,0BAA0B,EAAE,cAAc,EAAE,oBAAoB,CAAC;CACrF,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC/B,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC/B,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IACrC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IACtD,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACvC,YAAY,CAAC,gBAAgB,EAAE,CAAC,EAAE,qBAAqB,CAAC;IACxD,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,iBAAiB,CAAC;IAChD,YAAY,CAAC,cAAc,EAAE,CAAC,EAAE,mBAAmB,CAAC;IACpD,YAAY,CAAC,cAAc,EAAE,CAAC,EAAE,mBAAmB,CAAC;IACpD,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,iBAAiB,CAAC;IAChD,YAAY,CAAC,qBAAqB,EAAE,CAAC,EAAE,0BAA0B,CAAC;IAClE,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC;IACtC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACvD,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC9B,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACzD,kBAAkB,CAAC,0BAA0B,EAAE,KAAK,EAAE,oBAAoB,CAAC;CAC5E,CAAC;AAEF,MAAM,2BAA2B,GAAG;IAClC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAG,uBAA+B,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACxF,kBAAkB,CAAC,0BAA0B,EAAE,cAAc,EAAE,oBAAoB,CAAC;CACrF,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC9B,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,kBAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,kBAAkB,EAAE,WAAW,CAAC;IACrE,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,EAAE,kBAAkB,EAAE,WAAW,GAAG,eAAe,CAAC;IAC/F,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IACtC,kBAAkB,CAAC,0BAA0B,EAAE,SAAS,EAAE,oBAAoB,CAAC;CAChF,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC9B,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAChC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IACtC,kBAAkB,CAAC,0BAA0B,EAAE,SAAS,EAAE,oBAAoB,CAAC;CAChF,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,uBAAuB;IACvB,2BAA2B;IAC3B,2BAA2B;CAC5B,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,GAAc;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAa,CAAC;QAC5C,GAAG,CAAC,WAAW,CAAC,yBAAgB,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3C,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,EAAE,kBAAyB,EAAE,IAAI,EAAE,CAAC,6CAAqC,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,0BAA0B,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QACD,yBAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAa,CAAC;QACrE,GAAG,CAAC,WAAW,CAAC,kCAAyB,CAAC,CAAC,GAAG,KAAK,CAAC;QACpD,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC","sourcesContent":["/*\n * Map, Set, WeakMap, WeakSet and their iterators (port of the Map/Set\n * part of quickjs.c)\n *\n * Guest collections are host collections with the guest prototype\n * (builtins/native.ts): the constructor creates the host Map/Set/WeakMap/\n * WeakSet, re-prototypes it to the prototype derived from new.target and\n * tags it with the class id. Every method is the borrowed host native; the\n * iterators are the host iterators re-prototyped to the guest Map/Set\n * Iterator prototypes, whose `next` is the host one.\n */\nimport {\n JSContext, JSValue, JSObject, JSClassID, JSCFunctionEnum,\n JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto,\n JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor,\n JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64,\n JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF,\n JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set,\n JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr,\n JS_CFUNC_DEF, JS_GetClassID, JS_GetPropertyStr, JS_ThrowTypeErrorInvalidClass, JS_ThrowRangeError, JS_ToFloat64,\n JS_ToBoolFree, JS_ATOM_has,\n} from '../quickjs.ts';\nimport {\n js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO,\n HOST_SET_ITERATOR_PROTO,\n} from './native.ts';\n\nconst MAGIC_SET = 1 << 0;\nconst MAGIC_WEAK = 1 << 1;\n\n/* true if 'val' can be the target of a weak reference: an object or a\n non registered symbol (js_weakref_is_target) */\nexport function js_weakref_is_target(val: JSValue): boolean {\n if (JS_IsObject(val)) return true;\n if (typeof val === 'symbol') return Symbol.keyFor(val) === undefined;\n return false;\n}\n\nfunction check_function(ctx: JSContext, obj: JSValue): number {\n if (JS_IsFunction(ctx, obj)) return 0;\n JS_ThrowTypeError(ctx, 'not a function');\n return -1;\n}\n\nfunction new_host_collection(magic: number): object {\n switch (magic) {\n case 0: return new Map();\n case MAGIC_SET: return new Set();\n case MAGIC_WEAK: return new WeakMap();\n default: return new WeakSet();\n }\n}\n\nexport function js_map_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_set = (magic & MAGIC_SET) !== 0;\n const proto = js_proto_from_ctor(ctx, new_target, (JSClassID.MAP + magic) as JSClassID);\n if (JS_IsException(proto)) return JS_EXCEPTION;\n const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (JSClassID.MAP + magic) as JSClassID);\n\n /* the iterable argument is processed as in quickjs.c: the 'set'/'add'\n method is looked up on the new object (observable) and called for\n each entry */\n const arr = argv.length > 0 ? argv[0] : undefined;\n if (arr !== undefined && arr !== null) {\n const adder = JS_GetProperty(ctx, obj, is_set ? JS_ATOM_add : JS_ATOM_set);\n if (JS_IsException(adder)) return JS_EXCEPTION;\n if (!JS_IsFunction(ctx, adder)) {\n return JS_ThrowTypeError(ctx, 'set/add is not a function');\n }\n const iter = JS_GetIterator(ctx, arr, false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n let ret: JSValue;\n if (is_set) {\n ret = JS_Call(ctx, adder, obj, [item]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n } else {\n if (!JS_IsObject(item)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const key = JS_GetPropertyUint32(ctx, item, 0);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const value = JS_GetPropertyUint32(ctx, item, 1);\n if (JS_IsException(value)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n ret = JS_Call(ctx, adder, obj, [key, value]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n }\n }\n }\n return obj;\n}\n\n/* Map.groupBy (js_object_groupBy with is_map = 1; Object.groupBy is in object.ts) */\nfunction js_map_groupBy(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n // \"is function?\" check must be observed before argv[0] is accessed\n const cb = argv[1];\n if (check_function(ctx, cb)) return JS_EXCEPTION;\n\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return JS_EXCEPTION;\n\n const groups = js_map_constructor(ctx, undefined, [], 0);\n if (JS_IsException(groups)) return JS_EXCEPTION;\n const map = groups as Map<JSValue, JSValue>;\n\n const pdone = { done: 0 };\n for (let idx = 0; ; idx++) {\n if (idx >= Number.MAX_SAFE_INTEGER) {\n JS_ThrowTypeError(ctx, 'too many elements');\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const v = JS_IteratorNext(ctx, iter, next, [], pdone);\n if (JS_IsException(v)) return JS_EXCEPTION;\n if (pdone.done) break; // v is JS_UNDEFINED\n\n let key = JS_Call(ctx, cb, ctx.global_obj, [v, idx]);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n /* -0 is normalized to +0 */\n if (typeof key === 'number' && key === 0) key = 0;\n\n let prop = MAP_GET.call(map, key);\n if (JS_IsUndefined(prop)) {\n prop = JS_NewArray(ctx);\n MAP_SET.call(map, key, prop);\n }\n const len = js_get_length64(ctx, prop);\n if (len < 0) return JS_EXCEPTION;\n if (JS_SetPropertyInt64(ctx, prop, len, v) < 0) return JS_EXCEPTION;\n }\n return groups;\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;\nconst MAP_GET = MP.get, MAP_SET = MP.set, MAP_HAS = MP.has;\nconst WEAKMAP_GET = WMP.get, WEAKMAP_SET = WMP.set, WEAKMAP_HAS = WMP.has;\nconst SET_ADD = SP.add, SET_HAS = SP.has, SET_DELETE = SP.delete, SET_VALUES = SP.values;\nconst getter = (o: object, name: string) => Object.getOwnPropertyDescriptor(o, name)!.get!;\nconst SET_SIZE = getter(SP, 'size');\n\n/* map_normalize_key: -0 is +0 */\nfunction map_normalize_key(key: JSValue): JSValue {\n return typeof key === 'number' && key === 0 ? 0 : key;\n}\n\n/* ---- Map and WeakMap upsert: getOrInsert, getOrInsertComputed ---- */\n\nconst UPSERT_COMPUTED = 1, UPSERT_WEAK = 2;\n\n/* js_map_getOrInsert (magic: UPSERT_COMPUTED | UPSERT_WEAK) */\nfunction js_map_getOrInsert(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const computed = (magic & UPSERT_COMPUTED) !== 0;\n const is_weak = (magic & UPSERT_WEAK) !== 0;\n const class_id = is_weak ? JSClassID.WEAKMAP : JSClassID.MAP;\n if (JS_GetClassID(this_val) !== class_id) return JS_ThrowTypeErrorInvalidClass(ctx, class_id);\n const coll = this_val as object; /* the host Map or WeakMap */\n /* the host Map or WeakMap methods, called on the host collection */\n type HostFn = (this: object, ...args: JSValue[]) => any;\n const get = (is_weak ? WEAKMAP_GET : MAP_GET) as HostFn, set = (is_weak ? WEAKMAP_SET : MAP_SET) as HostFn;\n const has = (is_weak ? WEAKMAP_HAS : MAP_HAS) as HostFn;\n if (computed && !JS_IsFunction(ctx, argv[1])) return JS_ThrowTypeError(ctx, 'not a function');\n const key = map_normalize_key(argv[0]);\n if (is_weak && !js_weakref_is_target(key)) return JS_ThrowTypeError(ctx, 'invalid value used as WeakMap key');\n if (has.call(coll, key)) return get.call(coll, key);\n let value: JSValue;\n if (computed) {\n value = JS_Call(ctx, argv[1], undefined, [key]);\n if (JS_IsException(value)) return JS_EXCEPTION;\n /* the callback may have inserted the key: Set overwrites that entry in place */\n } else {\n value = argv[1];\n }\n set.call(coll, key, value);\n return value;\n}\n\n/* ---- Set methods ---- */\n\nfunction get_this_set(ctx: JSContext, this_val: JSValue): Set<JSValue> | null {\n if (JS_GetClassID(this_val) === JSClassID.SET) return this_val as Set<JSValue>;\n JS_ThrowTypeErrorInvalidClass(ctx, JSClassID.SET);\n return null;\n}\n\ninterface SetRecord { size: number; has: JSValue; keys: JSValue }\n\n/* get_set_record (GetSetRecord) */\nfunction get_set_record(ctx: JSContext, obj: JSValue): SetRecord | null {\n let size: number;\n if (JS_GetClassID(obj) === JSClassID.SET) {\n size = SET_SIZE.call(obj);\n } else {\n const v = JS_GetPropertyStr(ctx, obj, 'size');\n if (JS_IsException(v)) return null;\n const d = JS_ToFloat64(ctx, v);\n if (JS_IsException(d)) return null;\n if (Number.isNaN(d)) { JS_ThrowTypeError(ctx, '.size is not a number'); return null; }\n size = Math.trunc(d as number);\n if (size < 0) { JS_ThrowRangeError(ctx, '.size must be positive'); return null; }\n }\n const has = JS_GetProperty(ctx, obj, JS_ATOM_has);\n if (JS_IsException(has)) return null;\n if (JS_IsUndefined(has)) { JS_ThrowTypeError(ctx, '.has is undefined'); return null; }\n if (!JS_IsFunction(ctx, has)) { JS_ThrowTypeError(ctx, '.has is not a function'); return null; }\n const keys = JS_GetPropertyStr(ctx, obj, 'keys');\n if (JS_IsException(keys)) return null;\n if (JS_IsUndefined(keys)) { JS_ThrowTypeError(ctx, '.keys is undefined'); return null; }\n if (!JS_IsFunction(ctx, keys)) { JS_ThrowTypeError(ctx, '.keys is not a function'); return null; }\n return { size, has, keys };\n}\n\n/* copy 'this_val' in a new guest Set without side effects (no .add call) */\nfunction js_copy_set(ctx: JSContext, s: Set<JSValue>): Set<JSValue> | null {\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return null;\n for (const k of SET_VALUES.call(s) as Iterable<JSValue>) SET_ADD.call(newset, k);\n return newset as Set<JSValue>;\n}\n\n/* the keys of the set-like 'other': the iterator and its next method */\nfunction setlike_keys(ctx: JSContext, other: JSValue, r: SetRecord): { iter: JSValue; next: JSValue } | null {\n const iter = JS_Call(ctx, r.keys, other, []);\n if (JS_IsException(iter)) return null;\n if (!JS_IsObject(iter)) { JS_ThrowTypeErrorNotAnObject(ctx); return null; }\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return null;\n return { iter, next };\n}\n\n/* a live iteration of a guest Set (js_create_map_iterator + js_map_iterator_next) */\nfunction set_iter(s: Set<JSValue>): Iterator<JSValue> {\n return SET_VALUES.call(s) as Iterator<JSValue>;\n}\n\n/* call other.has(item); -1 on exception */\nfunction call_has(ctx: JSContext, other: JSValue, r: SetRecord, item: JSValue): number {\n const rv = JS_Call(ctx, r.has, other, [item]);\n if (JS_IsException(rv)) return -1;\n return JS_ToBoolFree(ctx, rv) ? 1 : 0;\n}\n\nfunction js_set_isDisjointFrom(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n let found = false;\n if (SET_SIZE.call(s) <= r.size) {\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) { found = true; break; }\n }\n } else {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n if (SET_HAS.call(s, map_normalize_key(item))) {\n found = true;\n if (JS_IteratorClose(ctx, k.iter, false) < 0) return JS_EXCEPTION;\n break;\n }\n }\n }\n return !found;\n}\n\nfunction js_set_isSubsetOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) > r.size) return false;\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (!ok) return false;\n }\n return true;\n}\n\nfunction js_set_isSupersetOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) < r.size) return false;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) return true;\n if (!SET_HAS.call(s, map_normalize_key(item))) {\n if (JS_IteratorClose(ctx, k.iter, false) < 0) return JS_EXCEPTION;\n return false;\n }\n }\n}\n\nfunction js_set_intersection(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) > r.size) {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item0)) return JS_EXCEPTION;\n if (pdone.done) break;\n const item = map_normalize_key(item0);\n if (SET_HAS.call(s, item) && !SET_HAS.call(newset, item)) SET_ADD.call(newset, item);\n }\n return newset;\n }\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return JS_EXCEPTION;\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) {\n const item = map_normalize_key(e.value);\n if (!SET_HAS.call(newset, item)) SET_ADD.call(newset, item);\n }\n }\n return newset;\n}\n\nfunction js_set_difference(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n if (SET_SIZE.call(s) <= r.size) {\n const it = set_iter(t);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) SET_DELETE.call(t, e.value);\n }\n } else {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n SET_DELETE.call(t, item);\n }\n }\n return t;\n}\n\nfunction js_set_symmetricDifference(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item0)) return JS_EXCEPTION;\n if (pdone.done) break;\n /* note the subtlety: keys can disappear during iteration (mutating\n iterators), and insertion order must be kept: check 'this', then the\n copy. Present in 'this': delete from the copy; missing from both: add;\n in the copy only: the iterator erased it from 'this', don't add */\n const item = map_normalize_key(item0);\n if (SET_HAS.call(s, item)) SET_DELETE.call(t, item);\n else if (!SET_HAS.call(t, item)) SET_ADD.call(t, item);\n }\n return t;\n}\n\nfunction js_set_union(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n SET_ADD.call(t, item);\n }\n return t;\n}\n\n\nconst js_map_funcs = [\n JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, MP.set),\n JS_NATIVE_DEF('get', 1, MP.get),\n JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, 0),\n JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_COMPUTED),\n JS_NATIVE_DEF('has', 1, MP.has),\n JS_NATIVE_DEF('delete', 1, MP.delete),\n JS_NATIVE_DEF('clear', 0, MP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(MP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, MP.forEach),\n JS_NATIVE_DEF('values', 0, MP.values, fix_map_iterator),\n JS_NATIVE_DEF('keys', 0, MP.keys, fix_map_iterator),\n JS_NATIVE_DEF('entries', 0, MP.entries, fix_map_iterator),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'entries'),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_MAP_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, SP.add),\n JS_NATIVE_DEF('has', 1, SP.has),\n JS_NATIVE_DEF('delete', 1, SP.delete),\n JS_NATIVE_DEF('clear', 0, SP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, SP.forEach),\n JS_CFUNC_DEF('isDisjointFrom', 1, js_set_isDisjointFrom),\n JS_CFUNC_DEF('isSubsetOf', 1, js_set_isSubsetOf),\n JS_CFUNC_DEF('isSupersetOf', 1, js_set_isSupersetOf),\n JS_CFUNC_DEF('intersection', 1, js_set_intersection),\n JS_CFUNC_DEF('difference', 1, js_set_difference),\n JS_CFUNC_DEF('symmetricDifference', 1, js_set_symmetricDifference),\n JS_CFUNC_DEF('union', 1, js_set_union),\n JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),\n JS_ALIAS_DEF('keys', 'values'),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),\n JS_NATIVE_DEF('entries', 0, SP.entries, fix_set_iterator),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_SET_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, WMP.set),\n JS_NATIVE_DEF('get', 1, WMP.get),\n JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, UPSERT_WEAK),\n JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_WEAK | UPSERT_COMPUTED),\n JS_NATIVE_DEF('has', 1, WMP.has),\n JS_NATIVE_DEF('delete', 1, WMP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, WSP.add),\n JS_NATIVE_DEF('has', 1, WSP.has),\n JS_NATIVE_DEF('delete', 1, WSP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakSet', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_proto_funcs_ptr = [\n js_map_proto_funcs,\n js_set_proto_funcs,\n js_weak_map_proto_funcs,\n js_weak_set_proto_funcs,\n js_map_iterator_proto_funcs,\n js_set_iterator_proto_funcs,\n];\n\nexport function JS_AddIntrinsicMapSet(ctx: JSContext): void {\n for (let i = 0; i < 4; i++) {\n const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.MAP + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);\n const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor as any, name, 0, JSCFunctionEnum.constructor_magic, i);\n if (i < 2) {\n JS_SetPropertyFunctionList(ctx, obj1, js_map_funcs);\n }\n JS_NewGlobalCConstructor2(ctx, obj1, name, proto);\n }\n\n for (let i = 0; i < 2; i++) {\n const proto = JS_NewObjectProto(ctx, ctx.iterator_proto) as JSObject;\n ctx.class_proto[JSClassID.MAP_ITERATOR + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);\n }\n}\n"]}
|