@celldl/viewer 0.20260731.0 → 0.20260731.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WrappedViewer-cgZteVYv.js","sources":["../node_modules/@vueuse/shared/dist/index.js","../node_modules/@vueuse/core/dist/index.js","../node_modules/vue-tippy/dist/vue-tippy.esm-browser.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/n3/src/IRIs.js","../node_modules/n3/src/N3Lexer.js","../node_modules/n3/src/N3DataFactory.js","../node_modules/n3/src/N3Parser.js","../node_modules/n3/src/N3Util.js","../node_modules/n3/src/Util.js","../node_modules/n3/src/BaseIRI.js","../node_modules/n3/src/N3Writer.js","../node_modules/readable-stream/lib/ours/primordials.js","../node_modules/readable-stream/lib/ours/util/inspect.js","../node_modules/readable-stream/lib/ours/errors.js","../node_modules/abort-controller/browser.js","../node_modules/events/events.js","../node_modules/readable-stream/lib/ours/util.js","../node_modules/readable-stream/lib/internal/validators.js","../node_modules/process/browser.js","../node_modules/readable-stream/lib/internal/streams/utils.js","../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/readable-stream/lib/internal/streams/legacy.js","../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js","../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/readable-stream/lib/internal/streams/from.js","../node_modules/readable-stream/lib/internal/streams/readable.js","../node_modules/readable-stream/lib/internal/streams/writable.js","../node_modules/readable-stream/lib/internal/streams/duplexify.js","../node_modules/readable-stream/lib/internal/streams/duplex.js","../node_modules/readable-stream/lib/internal/streams/transform.js","../node_modules/readable-stream/lib/internal/streams/passthrough.js","../node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/readable-stream/lib/internal/streams/compose.js","../node_modules/readable-stream/lib/internal/streams/operators.js","../node_modules/readable-stream/lib/stream/promises.js","../node_modules/readable-stream/lib/stream.js","../node_modules/readable-stream/lib/ours/browser.js","../node_modules/n3/src/N3Store.js","../node_modules/n3/src/N3StoreFactory.js","../node_modules/n3/src/N3Reasoner.js","../node_modules/n3/src/N3StreamParser.js","../node_modules/n3/src/N3StreamWriter.js","../node_modules/n3/src/index.js","../node_modules/@jeswr/pretty-turtle/dist/volatile-store.js","../node_modules/rdf-data-factory/lib/BlankNode.js","../node_modules/rdf-data-factory/lib/DefaultGraph.js","../node_modules/rdf-data-factory/lib/NamedNode.js","../node_modules/rdf-data-factory/lib/Literal.js","../node_modules/rdf-data-factory/lib/Quad.js","../node_modules/rdf-data-factory/lib/Variable.js","../node_modules/rdf-data-factory/lib/DataFactory.js","../node_modules/rdf-data-factory/index.js","../node_modules/rdf-string-ttl/lib/TermUtil.js","../node_modules/rdf-string-ttl/index.js","../node_modules/@jeswr/pretty-turtle/dist/escape.js","../node_modules/@jeswr/pretty-turtle/dist/ttlwriter.js","../node_modules/@jeswr/pretty-turtle/dist/writer.js","../node_modules/@jeswr/pretty-turtle/dist/index.js","../../src/geometry/units.ts","../../src/common/svgUtils.ts","../../src/metadata/namespaces.ts","../../src/metadata/store.ts","../../src/metadata/oxigraphStore.ts","../../src/metadata/index.ts","../../src/common/points.ts","../../src/utils.ts","../../src/geometry/index.ts","../../src/geometry/controls.ts","../../src/common/styling.ts","../node_modules/transformation-matrix/src/applyToPoint.js","../node_modules/transformation-matrix/src/fromString.js","../node_modules/transformation-matrix/src/identity.js","../node_modules/transformation-matrix/src/inverse.js","../node_modules/transformation-matrix/src/translate.js","../node_modules/transformation-matrix/src/transform.js","../node_modules/transformation-matrix/src/toString.js","../../src/geometry/transforms.ts","../../src/SVGElements/index.ts","../../src/SVGElements/boundedelement.ts","../../src/celldlObjects/index.ts","../../src/viewer/model.ts","../../src/viewer/panzoom.ts","../../src/viewer/index.ts","../src/components/WrappedViewer.vue"],"sourcesContent":["import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get$1 = typeof fn === \"function\" ? fn : fn.get;\n\tconst set$1 = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get$1(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v$1) {\n\t\t\t\tset$1 === null || set$1 === void 0 || set$1(v$1);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n\n//#endregion\n//#region createInjectionState/index.ts\n/**\n* Create global state that can be injected into components.\n*\n* @see https://vueuse.org/createInjectionState\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef<number>\n* @example createRef(1, false) // ShallowRef<number>\n* @example createRef(1, true) // Ref<number>\n* @example createRef(\"string\") // ShallowRef<string>\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n\n//#endregion\n//#region utils/is.ts\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n\tif (!condition) console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n\n//#endregion\n//#region utils/filters.ts\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\treturn wrapper;\n}\nconst bypassFilter = (invoke$1) => {\n\treturn invoke$1();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tconst _clearTimeout = (timer$1) => {\n\t\tclearTimeout(timer$1);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst filter = (invoke$1) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\treturn Promise.resolve(invoke$1());\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastInvoker = invoke$1;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(invoke$1());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn filter;\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke$1 = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke$1();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke$1();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke$1());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(() => reject(reason), ms);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref$1, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref$1, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref$1, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref$1;\n}\n\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\n//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\n//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param fn A function to be executed after delay milliseconds debounced.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param options Options\n*\n* @return A new, debounce, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param fn A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n* to `callback` when the throttled-function is executed.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref$1 = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get$1();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset$1(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get$1(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set$1(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set$1(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set$1(v, false);\n\treturn extendRef(ref$1, {\n\t\tget: get$1,\n\t\tset: set$1,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n\n//#endregion\n//#region set/index.ts\n/**\n* Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref$1, value] = args;\n\t\tref$1.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\n//#endregion\n//#region watchPausable/index.ts\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\",...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated use `watchPausable` instead */\nconst pausableWatch = watchPausable;\n\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(pausableWatch(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(pausableWatch(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value$1) => element[key] === toValue(value$1);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value$1) => element === toValue(value$1));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get$1 = () => count.value;\n\tconst set$1 = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set$1(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget: get$1,\n\t\tset: set$1,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useDateFormat/index.ts\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_$1, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count,...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res$1;\n\t\tignoreUpdates(() => {\n\t\t\tres$1 = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res$1;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\n//#endregion\n//#region whenever/index.ts\n/**\n* Shorthand for watching value to be truthy\n*\n* @see https://vueuse.org/whenever\n*/\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };","import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, getCurrentScope, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\n\nexport * from \"@vueuse/shared\"\n\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({ setup(_, { slots }) {\n\t\treturn () => {\n\t\t\trender.value = slots.default;\n\t\t};\n\t} });\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index$1 = instances.value.indexOf(props);\n\t\t\tif (index$1 !== -1) instances.value.splice(index$1, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n\n//#endregion\n//#region _configurable.ts\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\n//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\treturn watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tconst cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));\n\t\tonCleanup(() => {\n\t\t\tcleanups.forEach((fn) => fn());\n\t\t});\n\t}, { flush: \"post\" });\n}\n\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window$1) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window$1.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow$1.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target$1) => {\n\t\t\tif (typeof target$1 === \"string\") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target$1);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target$1) {\n\t\tconst vm = toValue(target$1);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target$1, event) {\n\t\tconst vm = toValue(target$1);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window$1, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window$1, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window$1, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar _window$document$acti;\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tif (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"MutationObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow, document: document$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.document, flush = \"sync\" } = options;\n\tif (!window$1 || !document$1) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document$1, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow: window$1,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditable() && isTypedCharValid(event)) callback(event);\n\t};\n\tif (document$1) useEventListener(document$1, \"keydown\", keydown, { passive: true });\n}\n\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window: window$1 = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document$1 = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window$1 === null || window$1 === void 0 ? void 0 : window$1.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document$1 === null || document$1 === void 0 ? void 0 : document$1.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window$1, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document: document$1 });\n\ttrigger();\n\treturn activeElement;\n}\n\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = void 0, window: window$1 = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\treturn fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp$1) {\n\t\tif (!isActive.value || !window$1) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp$1;\n\t\tconst delta = timestamp$1 - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp$1;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp: timestamp$1\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window$1.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window$1) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window$1) {\n\t\t\twindow$1.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window: window$1 = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window$1) window$1.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise The promise / async function to be resolved\n* @param initialState The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay$1 = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay$1 > 0) await promiseTimeout(delay$1);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t\treturn state.value;\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst events$1 = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getBattery\" in navigator$1 && typeof navigator$1.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator$1.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events$1, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator: navigator$1 = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"bluetooth\" in navigator$1);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: readonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"matchMedia\" in window$1 && typeof window$1.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tmatches.value = toValue(query).split(\",\").some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window$1.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue$1(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window: window$1 = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window$1);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window$1) return false;\n\t\treturn window$1.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue$1(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue$1(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue$1(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue$1(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue$1(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue$1(a)) && match(\"max\", getValue$1(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"BroadcastChannel\" in window$1);\n\tconst isClosed = shallowRef(false);\n\tconst channel = ref();\n\tconst data = ref();\n\tconst error = shallowRef(null);\n\tconst post = (data$1) => {\n\t\tif (channel.value) channel.value.postMessage(data$1);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tfor (const [key, ref$1] of objectEntries(refs)) watch(ref$1, (value) => {\n\t\tif (!(window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || window$1.location[key] === value) return;\n\t\twindow$1.location[key] = value;\n\t});\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state: state$1, length } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.history) || {};\n\t\tconst { origin } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window$1 === null || window$1 === void 0 || (_window$location = window$1.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate: state$1,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window$1, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n\tconst { deepRefs = true,...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"permissions\" in navigator$1);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator$1.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator$1.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tawait navigator$1.clipboard.writeText(value);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) legacyCopy(value);\n\t\t\ttext.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tta.setAttribute(\"readonly\", \"\");\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tisSupported,\n\t\ttext: readonly(text),\n\t\tcopied: readonly(copied),\n\t\tcopy\n\t};\n}\n\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst content = ref([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator$1.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator$1.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: readonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n\n//#endregion\n//#region ssr-handlers.ts\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\n//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults$1, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults$1 === \"function\" ? defaults$1() : defaults$1);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults$1);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window$1, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window$1) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow$1.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n\n//#endregion\n//#region useColorMode/index.ts\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window: window$1 = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window: window$1 });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow: window$1,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector$1, attribute$1, value) => {\n\t\tconst el = typeof selector$1 === \"string\" ? window$1 === null || window$1 === void 0 ? void 0 : window$1.document.querySelector(selector$1) : unrefElement(selector$1);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute$1 === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute$1,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window$1.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow$1.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow$1.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n\n//#endregion\n//#region useCountdown/index.ts\n/**\n* Wrapper for `useIntervalFn` that provides a countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options) {\n\tvar _options$interval, _options$immediate;\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst intervalController = useIntervalFn(() => {\n\t\tvar _options$onTick;\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\toptions === null || options === void 0 || (_options$onTick = options.onTick) === null || _options$onTick === void 0 || _options$onTick.call(options);\n\t\tif (remaining.value <= 0) {\n\t\t\tvar _options$onComplete;\n\t\t\tintervalController.pause();\n\t\t\toptions === null || options === void 0 || (_options$onComplete = options.onComplete) === null || _options$onComplete === void 0 || _options$onComplete.call(options);\n\t\t}\n\t}, (_options$interval = options === null || options === void 0 ? void 0 : options.interval) !== null && _options$interval !== void 0 ? _options$interval : 1e3, { immediate: (_options$immediate = options === null || options === void 0 ? void 0 : options.immediate) !== null && _options$immediate !== void 0 ? _options$immediate : false });\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tintervalController.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!intervalController.isActive.value) {\n\t\t\tif (remaining.value > 0) intervalController.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tintervalController.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: intervalController.pause,\n\t\tresume,\n\t\tisActive: intervalController.isActive\n\t};\n}\n\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window: window$1 = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window$1 === null || window$1 === void 0 || (_window$document = window$1.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window$1 && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tvariable.value = ((_window$getComputedSt = window$1.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow: window$1\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index$1 = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index$1 < 0) index$1 = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index$1;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode$1, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode$1 === \"dark\", defaultHandler, mode$1);\n\t\t\telse defaultHandler(mode$1);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source$1, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource$1.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window: window$1 = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window$1) useEventListener(window$1, \"devicemotion\", createFilterWrapper(eventFilter, (event) => {\n\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\tacceleration.value = {\n\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t};\n\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t};\n\t\t\trotationRate.value = {\n\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t};\n\t\t\tinterval.value = event.interval;\n\t\t}), { passive: true });\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"DeviceOrientationEvent\" in window$1);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window$1 && isSupported.value) useEventListener(window$1, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window$1) stop = watchImmediate(query, () => pixelRatio.value = window$1.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: readonly(pixelRatio),\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated: onUpdated$1 } = options;\n\tconst devices = ref([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && navigator$1.mediaDevices && navigator$1.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator$1.mediaDevices.enumerateDevices();\n\t\tonUpdated$1 === null || onUpdated$1 === void 0 || onUpdated$1(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator$1.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator$1.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator$1.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator$1.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tif (!document$1) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document$1.visibilityState);\n\tuseEventListener(document$1, \"visibilitychange\", () => {\n\t\tvisibility.value = document$1.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n\n//#endregion\n//#region useDraggable/index.ts\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue;\n\tconst { pointerTypes, preventDefault: preventDefault$1, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0] } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault$1)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault$1)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, \"pointerup\", end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n\t};\n}\n\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tif (_options.checkValidity) return _options.checkValidity(items);\n\t\t\tconst dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type));\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"ResizeObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window$1) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n\n//#endregion\n//#region useElementByPoint/index.ts\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document: document$1 = defaultDocument, multiple, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document$1 && \"elementsFromPoint\" in document$1;\n\t\treturn document$1 && \"elementFromPoint\" in document$1;\n\t});\n\tconst element = shallowRef(null);\n\tconst cb = () => {\n\t\tvar _document$elementsFro, _document$elementFrom;\n\t\telement.value = toValue(multiple) ? (_document$elementsFro = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t};\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate })\n\t};\n}\n\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window: window$1 = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window$1) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window: window$1 = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window$1 && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele) {\n\t\t\twidth.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n\t\t\theight.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects that a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin = \"0px\", threshold = 0, window: window$1 = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"IntersectionObserver\" in window$1);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\tisActive.value\n\t], ([targets$1, root$1]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets$1.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root$1),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets$1.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementVisibility/index.ts\n/**\n* Tracks the visibility of an element within the viewport.\n*\n* @see https://vueuse.org/useElementVisibility\n*/\nfunction useElementVisibility(element, options = {}) {\n\tconst { window: window$1 = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false, initialValue = false } = options;\n\tconst elementIsVisible = shallowRef(initialValue);\n\tconst { stop } = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = elementIsVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\telementIsVisible.value = isIntersecting;\n\t\tif (once) watchOnce(elementIsVisible, () => {\n\t\t\tstop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow: window$1,\n\t\tthreshold,\n\t\trootMargin: toValue(rootMargin)\n\t});\n\treturn elementIsVisible;\n}\n\n//#endregion\n//#region useEventBus/internal.ts\nconst events = /* @__PURE__ */ new Map();\n\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tconst scope = getCurrentScope();\n\tfunction on(listener) {\n\t\tvar _scope$cleanups;\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\tscope === null || scope === void 0 || (_scope$cleanups = scope.cleanups) === null || _scope$cleanups === void 0 || _scope$cleanups.push(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events$1 = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = ref(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events$1) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document: document$1 = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document$1 === null || document$1 === void 0 ? void 0 : document$1.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document$1 === null || document$1 === void 0 ? void 0 : document$1.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument$1 === null || document$1 === void 0 || document$1.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\terror.value = errorData;\n\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: readonly(isFinished),\n\t\tisFetching: readonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 ? document$1.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tfiles.value = event.target.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options$1) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options$1.multiple);\n\t\tel.accept = toValue(options$1.accept);\n\t\tel.webkitdirectory = toValue(options$1.directory);\n\t\tif (hasOwn(options$1, \"capture\")) el.capture = toValue(options$1.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window$1 = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"showSaveFilePicker\" in window$1 && \"showOpenFilePicker\" in window$1);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window$1.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window$1 || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document: document$1 = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 === null || document$1 === void 0 ? void 0 : document$1.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document$1 && m in document$1);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document$1 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document$1 === null || document$1 === void 0 ? void 0 : document$1[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document$1 && document$1[fullscreenEnabled.value] != null) return document$1[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[fullscreenEnabled.value]) != null) return Boolean(target$1[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document$1 === null || document$1 === void 0 ? void 0 : document$1[exitMethod.value]) != null) await document$1[exitMethod.value]();\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[exitMethod.value]) != null) await target$1[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target$1 = targetRef.value;\n\t\tif (requestMethod.value && (target$1 === null || target$1 === void 0 ? void 0 : target$1[requestMethod.value]) != null) {\n\t\t\tawait target$1[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document$1, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getGamepads\" in navigator$1);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator: navigator$1 = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"geolocation\" in navigator$1);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = ref({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator$1.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator$1) navigator$1.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events: events$1 = defaultEvents$1, window: window$1 = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window$1) {\n\t\tconst document$1 = window$1.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events$1) useEventListener(window$1, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document$1, \"visibilitychange\", () => {\n\t\t\tif (document$1.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the <img> tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window: window$1 = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x$1) {\n\t\t\tscrollTo(x$1, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y$1) {\n\t\t\tscrollTo(void 0, y$1);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window$1) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window$1.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window$1) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = window$1.getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window$1.document && !scrollTop) scrollTop = window$1.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window$1) return;\n\t\tsetArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window$1 && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window$1 && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = ref();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tconst canLoad = computed(() => {\n\t\tif (!observedElement.value) return false;\n\t\treturn canLoadMore(observedElement.value);\n\t});\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoad.value) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) {\n\t\t\tif (!promise.value) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\t\tpromise.value = null;\n\t\t\t\tnextTick(() => checkAndLoad());\n\t\t\t});\n\t\t}\n\t}\n\ttryOnUnmounted(watch(() => [\n\t\tstate.arrivedState[direction],\n\t\tisElementVisible.value,\n\t\tcanLoad.value\n\t], checkAndLoad, { immediate: true }));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events: events$1 = defaultEvents, document: document$1 = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document$1) events$1.forEach((listenerEvent) => {\n\t\tuseEventListener(document$1, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.localStorage, options);\n}\n\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n\n//#endregion\n//#region useMagicKeys/index.ts\n/**\n* Reactive keys pressed state, with magical keys combination support.\n*\n* @see https://vueuse.org/useMagicKeys\n*/\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys$1) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys$1.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key$1, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (key === \"\") return;\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key$1 of values) {\n\t\t\tusedKeys.add(key$1);\n\t\t\tsetRefs(key$1, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key$1) => {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target$1, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target$1, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys$1 = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys$1.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target$1, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = ref([]);\n\tconst tracks = ref([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = document$1 && \"pictureInPictureEnabled\" in document$1;\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document$1.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `<source>` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src: src$1, type, media }) => {\n\t\t\tconst source = document$1.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src$1);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document$1.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n\n//#endregion\n//#region useMemory/index.ts\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = ref();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { interval = 1e3 } = options;\n\t\tuseIntervalFn(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t}, interval, {\n\t\t\timmediate: options.immediate,\n\t\t\timmediateCallback: options.immediateCallback\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window: window$1 = defaultWindow, target = window$1, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window$1) {\n\t\t\t_prevScrollX = window$1.scrollX;\n\t\t\t_prevScrollY = window$1.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window$1) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window$1.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window$1.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window$1, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window: window$1 = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window$1 === null || window$1 === void 0 ? void 0 : window$1.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window$1) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tfor (const rect of el.getClientRects()) {\n\t\t\tconst { left, top, width, height } = rect;\n\t\t\telementPositionX.value = left + (type === \"page\" ? window$1.pageXOffset : 0);\n\t\t\telementPositionY.value = top + (type === \"page\" ? window$1.pageYOffset : 0);\n\t\t\telementHeight.value = height;\n\t\t\telementWidth.value = width;\n\t\t\tconst elX = x.value - elementPositionX.value;\n\t\t\tconst elY = y.value - elementPositionY.value;\n\t\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\t\tif (handleOutside || !isOutside.value) {\n\t\t\t\telementX.value = elX;\n\t\t\t\telementY.value = elY;\n\t\t\t}\n\t\t\tif (!isOutside.value) break;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window$1) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window: window$1 = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window$1) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window$1);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window$1, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window$1, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window$1, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window$1, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"language\" in navigator$1);\n\tconst language = shallowRef(navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.language);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tif (navigator$1) language.value = navigator$1.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"connection\" in navigator$1);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator$1.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator$1) return;\n\t\tisOnline.value = navigator$1.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window$1) {\n\t\tuseEventListener(window$1, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: readonly(isOnline),\n\t\tsaveData: readonly(saveData),\n\t\tofflineAt: readonly(offlineAt),\n\t\tonlineAt: readonly(onlineAt),\n\t\tdownlink: readonly(downlink),\n\t\tdownlinkMax: readonly(downlinkMax),\n\t\teffectiveType: readonly(effectiveType),\n\t\trtt: readonly(rtt),\n\t\ttype: readonly(type)\n\t};\n}\n\n//#endregion\n//#region useNow/index.ts\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst now = ref(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn readonly(url);\n}\n\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value$1) {\n\t\t\t_value.value = clamp(value$1, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window$1) return;\n\t\tevent = event || window$1.event;\n\t\tisLeft.value = !(event.relatedTarget || event.toElement);\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"screen\" in window$1 && \"orientation\" in window$1.screen);\n\tconst screenOrientation = isSupported.value ? window$1.screen.orientation : {};\n\tconst orientation = ref(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window$1, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window: window$1 = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window: window$1 }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window: window$1 }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow: window$1\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else return mouseRollAdjust(-(y.value - height.value / 2) / height.value);\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else return mouseTiltAdjust((x.value - width.value / 2) / width.value);\n\t\t}),\n\t\tsource\n\t};\n}\n\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window: window$1 = defaultWindow, immediate = true,...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"PerformanceObserver\" in window$1);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document$1 && \"pointerLockElement\" in document$1);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document$1, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document$1.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document$1.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document$1, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document$1.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document$1.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument$1.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointerup\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: readonly(isSwiping),\n\t\tdirection: readonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tif (!window$1) return shallowRef([\"en\"]);\n\tconst navigator$1 = window$1.navigator;\n\tconst value = shallowRef(navigator$1.languages);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tvalue.value = navigator$1.languages;\n\t}, { passive: true });\n\treturn value;\n}\n\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document: document$1 = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n\t\tconst resolveWithElement = (el$1) => {\n\t\t\tscriptTag.value = el$1;\n\t\t\tresolve(el$1);\n\t\t\treturn el$1;\n\t\t};\n\t\tif (!document$1) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet shouldAppend = false;\n\t\tlet el = document$1.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (!el) {\n\t\t\tel = document$1.createElement(\"script\");\n\t\t\tel.type = type;\n\t\t\tel.async = async;\n\t\t\tel.src = toValue(src);\n\t\t\tif (defer) el.defer = defer;\n\t\t\tif (crossOrigin) el.crossOrigin = crossOrigin;\n\t\t\tif (noModule) el.noModule = noModule;\n\t\t\tif (referrerPolicy) el.referrerPolicy = referrerPolicy;\n\t\t\tif (nonce) el.nonce = nonce;\n\t\t\tObject.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value));\n\t\t\tshouldAppend = true;\n\t\t} else if (el.hasAttribute(\"data-loaded\")) resolveWithElement(el);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"load\", () => {\n\t\t\tel.setAttribute(\"data-loaded\", \"true\");\n\t\t\tonLoaded(el);\n\t\t\tresolveWithElement(el);\n\t\t}, listenerOptions);\n\t\tif (shouldAppend) el = document$1.head.appendChild(el);\n\t\tif (!waitForScriptLoad) resolveWithElement(el);\n\t});\n\t/**\n\t* Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst load = (waitForScriptLoad = true) => {\n\t\tif (!_promise) _promise = loadScript(waitForScriptLoad);\n\t\treturn _promise;\n\t};\n\t/**\n\t* Unload the script specified by `src`.\n\t*/\n\tconst unload = () => {\n\t\tif (!document$1) return;\n\t\t_promise = null;\n\t\tif (scriptTag.value) scriptTag.value = null;\n\t\tconst el = document$1.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (el) document$1.head.removeChild(el);\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnUnmounted(unload);\n\treturn {\n\t\tscriptTag,\n\t\tload,\n\t\tunload\n\t};\n}\n\n//#endregion\n//#region useScrollLock/index.ts\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useSessionStorage/index.ts\n/**\n* Reactive SessionStorage.\n*\n* @see https://vueuse.org/useSessionStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useSessionStorage(key, initialValue, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.sessionStorage, options);\n}\n\n//#endregion\n//#region useShare/index.ts\n/**\n* Reactive Web Share API.\n*\n* @see https://vueuse.org/useShare\n* @param shareOptions\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useShare(shareOptions = {}, options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst _navigator = navigator$1;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => _navigator && \"canShare\" in _navigator);\n\tconst share = async (overrideOptions = {}) => {\n\t\tif (isSupported.value) {\n\t\t\tconst data = {\n\t\t\t\t...toValue(shareOptions),\n\t\t\t\t...toValue(overrideOptions)\n\t\t\t};\n\t\t\tlet granted = false;\n\t\t\tif (_navigator.canShare) granted = _navigator.canShare(data);\n\t\t\tif (granted) return _navigator.share(data);\n\t\t}\n\t};\n\treturn {\n\t\tisSupported,\n\t\tshare\n\t};\n}\n\n//#endregion\n//#region useSorted/index.ts\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n\tconst [source] = args;\n\tlet compareFn = defaultCompare;\n\tlet options = {};\n\tif (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tvar _options$compareFn;\n\t\toptions = args[1];\n\t\tcompareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare;\n\t} else {\n\t\tvar _args$;\n\t\tcompareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare;\n\t}\n\telse if (args.length > 2) {\n\t\tvar _args$2, _args$3;\n\t\tcompareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare;\n\t\toptions = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {};\n\t}\n\tconst { dirty = false, sortFn = defaultSortFn } = options;\n\tif (!dirty) return computed(() => sortFn([...toValue(source)], compareFn));\n\twatchEffect(() => {\n\t\tconst result = sortFn(toValue(source), compareFn);\n\t\tif (isRef(source)) source.value = result;\n\t\telse source.splice(0, source.length, ...result);\n\t});\n\treturn source;\n}\n\n//#endregion\n//#region useSpeechRecognition/index.ts\n/**\n* Reactive SpeechRecognition.\n*\n* @see https://vueuse.org/useSpeechRecognition\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition\n* @param options\n*/\nfunction useSpeechRecognition(options = {}) {\n\tconst { interimResults = true, continuous = true, maxAlternatives = 1, window: window$1 = defaultWindow } = options;\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst isListening = shallowRef(false);\n\tconst isFinal = shallowRef(false);\n\tconst result = shallowRef(\"\");\n\tconst error = shallowRef(void 0);\n\tlet recognition;\n\tconst start = () => {\n\t\tisListening.value = true;\n\t};\n\tconst stop = () => {\n\t\tisListening.value = false;\n\t};\n\tconst toggle = (value = !isListening.value) => {\n\t\tif (value) start();\n\t\telse stop();\n\t};\n\tconst SpeechRecognition = window$1 && (window$1.SpeechRecognition || window$1.webkitSpeechRecognition);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => SpeechRecognition);\n\tif (isSupported.value) {\n\t\trecognition = new SpeechRecognition();\n\t\trecognition.continuous = continuous;\n\t\trecognition.interimResults = interimResults;\n\t\trecognition.lang = toValue(lang);\n\t\trecognition.maxAlternatives = maxAlternatives;\n\t\trecognition.onstart = () => {\n\t\t\tisListening.value = true;\n\t\t\tisFinal.value = false;\n\t\t};\n\t\twatch(lang, (lang$1) => {\n\t\t\tif (recognition && !isListening.value) recognition.lang = lang$1;\n\t\t});\n\t\trecognition.onresult = (event) => {\n\t\t\tconst currentResult = event.results[event.resultIndex];\n\t\t\tconst { transcript } = currentResult[0];\n\t\t\tisFinal.value = currentResult.isFinal;\n\t\t\tresult.value = transcript;\n\t\t\terror.value = void 0;\n\t\t};\n\t\trecognition.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\trecognition.onend = () => {\n\t\t\tisListening.value = false;\n\t\t\trecognition.lang = toValue(lang);\n\t\t};\n\t\twatch(isListening, (newValue, oldValue) => {\n\t\t\tif (newValue === oldValue) return;\n\t\t\ttry {\n\t\t\t\tif (newValue) recognition.start();\n\t\t\t\telse recognition.stop();\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisListening,\n\t\tisFinal,\n\t\trecognition,\n\t\tresult,\n\t\terror,\n\t\ttoggle,\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useSpeechSynthesis/index.ts\n/**\n* Reactive SpeechSynthesis.\n*\n* @see https://vueuse.org/useSpeechSynthesis\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis\n*/\nfunction useSpeechSynthesis(text, options = {}) {\n\tconst { pitch = 1, rate = 1, volume = 1, window: window$1 = defaultWindow, onBoundary } = options;\n\tconst synth = window$1 && window$1.speechSynthesis;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => synth);\n\tconst isPlaying = shallowRef(false);\n\tconst status = shallowRef(\"init\");\n\tconst spokenText = toRef(text || \"\");\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst error = shallowRef(void 0);\n\tconst toggle = (value = !isPlaying.value) => {\n\t\tisPlaying.value = value;\n\t};\n\tconst bindEventsForUtterance = (utterance$1) => {\n\t\tutterance$1.lang = toValue(lang);\n\t\tutterance$1.voice = toValue(options.voice) || null;\n\t\tutterance$1.pitch = toValue(pitch);\n\t\tutterance$1.rate = toValue(rate);\n\t\tutterance$1.volume = toValue(volume);\n\t\tutterance$1.onstart = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance$1.onpause = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"pause\";\n\t\t};\n\t\tutterance$1.onresume = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance$1.onend = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"end\";\n\t\t};\n\t\tutterance$1.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\tutterance$1.onboundary = (event) => {\n\t\t\tonBoundary === null || onBoundary === void 0 || onBoundary(event);\n\t\t};\n\t};\n\tconst utterance = computed(() => {\n\t\tisPlaying.value = false;\n\t\tstatus.value = \"init\";\n\t\tconst newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n\t\tbindEventsForUtterance(newUtterance);\n\t\treturn newUtterance;\n\t});\n\tconst speak = () => {\n\t\tsynth.cancel();\n\t\tif (utterance) synth.speak(utterance.value);\n\t};\n\tconst stop = () => {\n\t\tsynth.cancel();\n\t\tisPlaying.value = false;\n\t};\n\tif (isSupported.value) {\n\t\tbindEventsForUtterance(utterance.value);\n\t\twatch(lang, (lang$1) => {\n\t\t\tif (utterance.value && !isPlaying.value) utterance.value.lang = lang$1;\n\t\t});\n\t\tif (options.voice) watch(options.voice, () => {\n\t\t\tsynth.cancel();\n\t\t});\n\t\twatch(isPlaying, () => {\n\t\t\tif (isPlaying.value) synth.resume();\n\t\t\telse synth.pause();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tisPlaying.value = false;\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisPlaying,\n\t\tstatus,\n\t\tutterance,\n\t\terror,\n\t\tstop,\n\t\ttoggle,\n\t\tspeak\n\t};\n}\n\n//#endregion\n//#region useStepper/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useStepper(steps, initialStep) {\n\tconst stepsRef = ref(steps);\n\tconst stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n\tconst index = ref(stepNames.value.indexOf(initialStep !== null && initialStep !== void 0 ? initialStep : stepNames.value[0]));\n\tconst current = computed(() => at(index.value));\n\tconst isFirst = computed(() => index.value === 0);\n\tconst isLast = computed(() => index.value === stepNames.value.length - 1);\n\tconst next = computed(() => stepNames.value[index.value + 1]);\n\tconst previous = computed(() => stepNames.value[index.value - 1]);\n\tfunction at(index$1) {\n\t\tif (Array.isArray(stepsRef.value)) return stepsRef.value[index$1];\n\t\treturn stepsRef.value[stepNames.value[index$1]];\n\t}\n\tfunction get(step) {\n\t\tif (!stepNames.value.includes(step)) return;\n\t\treturn at(stepNames.value.indexOf(step));\n\t}\n\tfunction goTo(step) {\n\t\tif (stepNames.value.includes(step)) index.value = stepNames.value.indexOf(step);\n\t}\n\tfunction goToNext() {\n\t\tif (isLast.value) return;\n\t\tindex.value++;\n\t}\n\tfunction goToPrevious() {\n\t\tif (isFirst.value) return;\n\t\tindex.value--;\n\t}\n\tfunction goBackTo(step) {\n\t\tif (isAfter(step)) goTo(step);\n\t}\n\tfunction isNext(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value + 1;\n\t}\n\tfunction isPrevious(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value - 1;\n\t}\n\tfunction isCurrent(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value;\n\t}\n\tfunction isBefore(step) {\n\t\treturn index.value < stepNames.value.indexOf(step);\n\t}\n\tfunction isAfter(step) {\n\t\treturn index.value > stepNames.value.indexOf(step);\n\t}\n\treturn {\n\t\tsteps: stepsRef,\n\t\tstepNames,\n\t\tindex,\n\t\tcurrent,\n\t\tnext,\n\t\tprevious,\n\t\tisFirst,\n\t\tisLast,\n\t\tat,\n\t\tget,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoBackTo,\n\t\tisNext,\n\t\tisPrevious,\n\t\tisCurrent,\n\t\tisBefore,\n\t\tisAfter\n\t};\n}\n\n//#endregion\n//#region useStorageAsync/index.ts\n/**\n* Reactive Storage in with async support.\n*\n* @see https://vueuse.org/useStorageAsync\n* @param key\n* @param initialValue\n* @param storage\n* @param options\n*/\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, onReady } = options;\n\tconst rawInit = toValue(initialValue);\n\tconst type = guessSerializerType(rawInit);\n\tconst data = (shallow ? shallowRef : ref)(toValue(initialValue));\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorageAsync\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tasync function read(event) {\n\t\tif (!storage || event && event.key !== key) return;\n\t\ttry {\n\t\t\tconst rawValue = event ? event.newValue : await storage.getItem(key);\n\t\t\tif (rawValue == null) {\n\t\t\t\tdata.value = rawInit;\n\t\t\t\tif (writeDefaults && rawInit !== null) await storage.setItem(key, await serializer.write(rawInit));\n\t\t\t} else if (mergeDefaults) {\n\t\t\t\tconst value = await serializer.read(rawValue);\n\t\t\t\tif (typeof mergeDefaults === \"function\") data.value = mergeDefaults(value, rawInit);\n\t\t\t\telse if (type === \"object\" && !Array.isArray(value)) data.value = {\n\t\t\t\t\t...rawInit,\n\t\t\t\t\t...value\n\t\t\t\t};\n\t\t\t\telse data.value = value;\n\t\t\t} else data.value = await serializer.read(rawValue);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tconst promise = new Promise((resolve) => {\n\t\tread().then(() => {\n\t\t\tonReady === null || onReady === void 0 || onReady(data.value);\n\t\t\tresolve(data);\n\t\t});\n\t});\n\tif (window$1 && listenToStorageChanges) useEventListener(window$1, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n\tif (storage) watchWithFilter(data, async () => {\n\t\ttry {\n\t\t\tif (data.value == null) await storage.removeItem(key);\n\t\t\telse await storage.setItem(key, await serializer.write(data.value));\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\tObject.assign(data, {\n\t\tthen: promise.then.bind(promise),\n\t\tcatch: promise.catch.bind(promise)\n\t});\n\treturn data;\n}\n\n//#endregion\n//#region useStyleTag/index.ts\nlet _id = 0;\n/**\n* Inject <style> element in head.\n*\n* Overload: Omitted id\n*\n* @see https://vueuse.org/useStyleTag\n* @param css\n* @param options\n*/\nfunction useStyleTag(css, options = {}) {\n\tconst isLoaded = shallowRef(false);\n\tconst { document: document$1 = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options;\n\tconst cssRef = shallowRef(css);\n\tlet stop = () => {};\n\tconst load = () => {\n\t\tif (!document$1) return;\n\t\tconst el = document$1.getElementById(id) || document$1.createElement(\"style\");\n\t\tif (!el.isConnected) {\n\t\t\tel.id = id;\n\t\t\tif (options.nonce) el.nonce = options.nonce;\n\t\t\tif (options.media) el.media = options.media;\n\t\t\tdocument$1.head.appendChild(el);\n\t\t}\n\t\tif (isLoaded.value) return;\n\t\tstop = watch(cssRef, (value) => {\n\t\t\tel.textContent = value;\n\t\t}, { immediate: true });\n\t\tisLoaded.value = true;\n\t};\n\tconst unload = () => {\n\t\tif (!document$1 || !isLoaded.value) return;\n\t\tstop();\n\t\tdocument$1.head.removeChild(document$1.getElementById(id));\n\t\tisLoaded.value = false;\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnScopeDispose(unload);\n\treturn {\n\t\tid,\n\t\tcss: cssRef,\n\t\tunload,\n\t\tload,\n\t\tisLoaded: readonly(isLoaded)\n\t};\n}\n\n//#endregion\n//#region useSwipe/index.ts\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useTemplateRefsList/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useTemplateRefsList() {\n\tconst refs = ref([]);\n\trefs.value.set = (el) => {\n\t\tif (el) refs.value.push(el);\n\t};\n\tonBeforeUpdate(() => {\n\t\trefs.value.length = 0;\n\t});\n\treturn refs;\n}\n\n//#endregion\n//#region useTextDirection/index.ts\n/**\n* Reactive dir of the element's text.\n*\n* @see https://vueuse.org/useTextDirection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextDirection(options = {}) {\n\tconst { document: document$1 = defaultDocument, selector = \"html\", observe = false, initialValue = \"ltr\" } = options;\n\tfunction getValue$1() {\n\t\tvar _ref, _document$querySelect;\n\t\treturn (_ref = document$1 === null || document$1 === void 0 || (_document$querySelect = document$1.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute(\"dir\")) !== null && _ref !== void 0 ? _ref : initialValue;\n\t}\n\tconst dir = ref(getValue$1());\n\ttryOnMounted(() => dir.value = getValue$1());\n\tif (observe && document$1) useMutationObserver(document$1.querySelector(selector), () => dir.value = getValue$1(), { attributes: true });\n\treturn computed({\n\t\tget() {\n\t\t\treturn dir.value;\n\t\t},\n\t\tset(v) {\n\t\t\tvar _document$querySelect2, _document$querySelect3;\n\t\t\tdir.value = v;\n\t\t\tif (!document$1) return;\n\t\t\tif (dir.value) (_document$querySelect2 = document$1.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute(\"dir\", dir.value);\n\t\t\telse (_document$querySelect3 = document$1.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute(\"dir\");\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useTextSelection/index.ts\nfunction getRangesFromSelection(selection) {\n\tvar _selection$rangeCount;\n\tconst rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0;\n\treturn Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\n/**\n* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).\n*\n* @see https://vueuse.org/useTextSelection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextSelection(options = {}) {\n\tvar _window$getSelection;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst selection = shallowRef((_window$getSelection = window$1 === null || window$1 === void 0 ? void 0 : window$1.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null);\n\tconst text = computed(() => {\n\t\tvar _selection$value$toSt, _selection$value;\n\t\treturn (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : \"\";\n\t});\n\tconst ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n\tconst rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n\tfunction onSelectionChange() {\n\t\tselection.value = null;\n\t\tif (window$1) selection.value = window$1.getSelection();\n\t}\n\tif (window$1) useEventListener(window$1.document, \"selectionchange\", onSelectionChange, { passive: true });\n\treturn {\n\t\ttext,\n\t\trects,\n\t\tranges,\n\t\tselection\n\t};\n}\n\n//#endregion\n//#region useTextareaAutosize/index.ts\n/**\n* Call window.requestAnimationFrame(), if not available, just call the function\n*\n* @param window\n* @param fn\n*/\nfunction tryRequestAnimationFrame(window$1 = defaultWindow, fn) {\n\tif (window$1 && typeof window$1.requestAnimationFrame === \"function\") window$1.requestAnimationFrame(fn);\n\telse fn();\n}\nfunction useTextareaAutosize(options = {}) {\n\tvar _options$input, _options$styleProp;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst textarea = toRef(options === null || options === void 0 ? void 0 : options.element);\n\tconst input = toRef((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : \"\");\n\tconst styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : \"height\";\n\tconst textareaScrollHeight = shallowRef(1);\n\tconst textareaOldWidth = shallowRef(0);\n\tfunction triggerResize() {\n\t\tvar _textarea$value;\n\t\tif (!textarea.value) return;\n\t\tlet height = \"\";\n\t\ttextarea.value.style[styleProp] = \"1px\";\n\t\ttextareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight;\n\t\tconst _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget);\n\t\tif (_styleTarget) _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n\t\telse height = `${textareaScrollHeight.value}px`;\n\t\ttextarea.value.style[styleProp] = height;\n\t}\n\twatch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n\twatch(textareaScrollHeight, () => {\n\t\tvar _options$onResize;\n\t\treturn options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options);\n\t});\n\tuseResizeObserver(textarea, ([{ contentRect }]) => {\n\t\tif (textareaOldWidth.value === contentRect.width) return;\n\t\ttryRequestAnimationFrame(window$1, () => {\n\t\t\ttextareaOldWidth.value = contentRect.width;\n\t\t\ttriggerResize();\n\t\t});\n\t});\n\tif (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\treturn {\n\t\ttextarea,\n\t\tinput,\n\t\ttriggerResize\n\t};\n}\n\n//#endregion\n//#region useThrottledRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.\n*\n* @see https://vueuse.org/useThrottledRefHistory\n* @param source\n* @param options\n*/\nfunction useThrottledRefHistory(source, options = {}) {\n\tconst { throttle = 200, trailing = true } = options;\n\tconst filter = throttleFilter(throttle, trailing);\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n\n//#endregion\n//#region useTimeAgo/index.ts\nconst DEFAULT_UNITS = [\n\t{\n\t\tmax: 6e4,\n\t\tvalue: 1e3,\n\t\tname: \"second\"\n\t},\n\t{\n\t\tmax: 276e4,\n\t\tvalue: 6e4,\n\t\tname: \"minute\"\n\t},\n\t{\n\t\tmax: 72e6,\n\t\tvalue: 36e5,\n\t\tname: \"hour\"\n\t},\n\t{\n\t\tmax: 5184e5,\n\t\tvalue: 864e5,\n\t\tname: \"day\"\n\t},\n\t{\n\t\tmax: 24192e5,\n\t\tvalue: 6048e5,\n\t\tname: \"week\"\n\t},\n\t{\n\t\tmax: 28512e6,\n\t\tvalue: 2592e6,\n\t\tname: \"month\"\n\t},\n\t{\n\t\tmax: Number.POSITIVE_INFINITY,\n\t\tvalue: 31536e6,\n\t\tname: \"year\"\n\t}\n];\nconst DEFAULT_MESSAGES = {\n\tjustNow: \"just now\",\n\tpast: (n) => n.match(/\\d/) ? `${n} ago` : n,\n\tfuture: (n) => n.match(/\\d/) ? `in ${n}` : n,\n\tmonth: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n\tyear: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n\tday: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n\tweek: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n\thour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n\tminute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n\tsecond: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n\tinvalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n\treturn date.toISOString().slice(0, 10);\n}\n/**\n* Reactive time ago formatter.\n*\n* @see https://vueuse.org/useTimeAgo\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTimeAgo(time, options = {}) {\n\tconst { controls: exposeControls = false, updateInterval = 3e4 } = options;\n\tconst { now,...controls } = useNow({\n\t\tinterval: updateInterval,\n\t\tcontrols: true\n\t});\n\tconst timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n\tif (exposeControls) return {\n\t\ttimeAgo,\n\t\t...controls\n\t};\n\telse return timeAgo;\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n\tconst { max, messages = DEFAULT_MESSAGES, fullDateFormatter = DEFAULT_FORMATTER, units = DEFAULT_UNITS, showSecond = false, rounding = \"round\" } = options;\n\tconst roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n\tconst diff = +now - +from;\n\tconst absDiff = Math.abs(diff);\n\tfunction getValue$1(diff$1, unit) {\n\t\treturn roundFn(Math.abs(diff$1) / unit.value);\n\t}\n\tfunction format(diff$1, unit) {\n\t\tconst val = getValue$1(diff$1, unit);\n\t\tconst past = diff$1 > 0;\n\t\tconst str = applyFormat(unit.name, val, past);\n\t\treturn applyFormat(past ? \"past\" : \"future\", str, past);\n\t}\n\tfunction applyFormat(name, val, isPast) {\n\t\tconst formatter = messages[name];\n\t\tif (typeof formatter === \"function\") return formatter(val, isPast);\n\t\treturn formatter.replace(\"{0}\", val.toString());\n\t}\n\tif (absDiff < 6e4 && !showSecond) return messages.justNow;\n\tif (typeof max === \"number\" && absDiff > max) return fullDateFormatter(new Date(from));\n\tif (typeof max === \"string\") {\n\t\tvar _units$find;\n\t\tconst unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max;\n\t\tif (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from));\n\t}\n\tfor (const [idx, unit] of units.entries()) {\n\t\tif (getValue$1(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]);\n\t\tif (absDiff < unit.max) return format(diff, unit);\n\t}\n\treturn messages.invalid;\n}\n\n//#endregion\n//#region useTimeAgoIntl/index.ts\nconst UNITS = [\n\t{\n\t\tname: \"year\",\n\t\tms: 31536e6\n\t},\n\t{\n\t\tname: \"month\",\n\t\tms: 2592e6\n\t},\n\t{\n\t\tname: \"week\",\n\t\tms: 6048e5\n\t},\n\t{\n\t\tname: \"day\",\n\t\tms: 864e5\n\t},\n\t{\n\t\tname: \"hour\",\n\t\tms: 36e5\n\t},\n\t{\n\t\tname: \"minute\",\n\t\tms: 6e4\n\t},\n\t{\n\t\tname: \"second\",\n\t\tms: 1e3\n\t}\n];\nfunction useTimeAgoIntl(time, options = {}) {\n\tconst { controls: exposeControls = false, updateInterval = 3e4 } = options;\n\tconst { now,...controls } = useNow({\n\t\tinterval: updateInterval,\n\t\tcontrols: true\n\t});\n\tconst result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now)));\n\tconst parts = computed(() => result.value.parts);\n\tconst timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, {\n\t\t...options,\n\t\tlocale: result.value.resolvedLocale\n\t}));\n\treturn exposeControls ? {\n\t\ttimeAgoIntl,\n\t\tparts,\n\t\t...controls\n\t} : timeAgoIntl;\n}\n/**\n* Non-reactive version of useTimeAgoIntl\n*/\nfunction formatTimeAgoIntl(from, options = {}, now = Date.now()) {\n\tconst { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now);\n\treturn formatTimeAgoIntlParts(parts, {\n\t\t...options,\n\t\tlocale: resolvedLocale\n\t});\n}\n/**\n* Get parts from `Intl.RelativeTimeFormat.formatToParts`.\n*/\nfunction getTimeAgoIntlResult(from, options = {}, now = Date.now()) {\n\tvar _options$units;\n\tconst { locale, relativeTimeFormatOptions = { numeric: \"auto\" } } = options;\n\tconst rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions);\n\tconst { locale: resolvedLocale } = rtf.resolvedOptions();\n\tconst diff = +from - +now;\n\tconst absDiff = Math.abs(diff);\n\tconst units = (_options$units = options.units) !== null && _options$units !== void 0 ? _options$units : UNITS;\n\tfor (const { name, ms } of units) if (absDiff >= ms) return {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(Math.round(diff / ms), name)\n\t};\n\treturn {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(0, units[units.length - 1].name)\n\t};\n}\n/**\n* Format parts into a string\n*/\nfunction formatTimeAgoIntlParts(parts, options = {}) {\n\tconst { insertSpace = true, joinParts, locale } = options;\n\tif (typeof joinParts === \"function\") return joinParts(parts, locale);\n\tif (!insertSpace) return parts.map((part) => part.value).join(\"\");\n\treturn parts.map((part) => part.value.trim()).join(\" \");\n}\n\n//#endregion\n//#region useTimeoutPoll/index.ts\nfunction useTimeoutPoll(fn, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst { start } = useTimeoutFn(loop, interval, { immediate });\n\tconst isActive = shallowRef(false);\n\tasync function loop() {\n\t\tif (!isActive.value) return;\n\t\tawait fn();\n\t\tstart();\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value) {\n\t\t\tisActive.value = true;\n\t\t\tif (immediateCallback) fn();\n\t\t\tstart();\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tif (immediate && isClient) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive,\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useTimestamp/index.ts\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, immediate = true, interval = \"requestAnimationFrame\", callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst cb = callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update;\n\tconst controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n\n//#endregion\n//#region useTitle/index.ts\nfunction useTitle(newTitle = null, options = {}) {\n\tvar _document$title, _ref;\n\tconst { document: document$1 = defaultDocument, restoreOnUnmount = (t) => t } = options;\n\tconst originalTitle = (_document$title = document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _document$title !== void 0 ? _document$title : \"\";\n\tconst title = toRef((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _ref !== void 0 ? _ref : null);\n\tconst isReadonly$1 = !!(newTitle && typeof newTitle === \"function\");\n\tfunction format(t) {\n\t\tif (!(\"titleTemplate\" in options)) return t;\n\t\tconst template = options.titleTemplate || \"%s\";\n\t\treturn typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n\t}\n\twatch(title, (newValue, oldValue) => {\n\t\tif (newValue !== oldValue && document$1) document$1.title = format(newValue !== null && newValue !== void 0 ? newValue : \"\");\n\t}, { immediate: true });\n\tif (options.observe && !options.titleTemplate && document$1 && !isReadonly$1) {\n\t\tvar _document$head;\n\t\tuseMutationObserver((_document$head = document$1.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector(\"title\"), () => {\n\t\t\tif (document$1 && document$1.title !== title.value) title.value = format(document$1.title);\n\t\t}, { childList: true });\n\t}\n\ttryOnScopeDispose(() => {\n\t\tif (restoreOnUnmount) {\n\t\t\tconst restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n\t\t\tif (restoredTitle != null && document$1) document$1.title = restoredTitle;\n\t\t}\n\t});\n\treturn title;\n}\n\n//#endregion\n//#region useTransition/index.ts\nconst _TransitionPresets = {\n\teaseInSine: [\n\t\t.12,\n\t\t0,\n\t\t.39,\n\t\t0\n\t],\n\teaseOutSine: [\n\t\t.61,\n\t\t1,\n\t\t.88,\n\t\t1\n\t],\n\teaseInOutSine: [\n\t\t.37,\n\t\t0,\n\t\t.63,\n\t\t1\n\t],\n\teaseInQuad: [\n\t\t.11,\n\t\t0,\n\t\t.5,\n\t\t0\n\t],\n\teaseOutQuad: [\n\t\t.5,\n\t\t1,\n\t\t.89,\n\t\t1\n\t],\n\teaseInOutQuad: [\n\t\t.45,\n\t\t0,\n\t\t.55,\n\t\t1\n\t],\n\teaseInCubic: [\n\t\t.32,\n\t\t0,\n\t\t.67,\n\t\t0\n\t],\n\teaseOutCubic: [\n\t\t.33,\n\t\t1,\n\t\t.68,\n\t\t1\n\t],\n\teaseInOutCubic: [\n\t\t.65,\n\t\t0,\n\t\t.35,\n\t\t1\n\t],\n\teaseInQuart: [\n\t\t.5,\n\t\t0,\n\t\t.75,\n\t\t0\n\t],\n\teaseOutQuart: [\n\t\t.25,\n\t\t1,\n\t\t.5,\n\t\t1\n\t],\n\teaseInOutQuart: [\n\t\t.76,\n\t\t0,\n\t\t.24,\n\t\t1\n\t],\n\teaseInQuint: [\n\t\t.64,\n\t\t0,\n\t\t.78,\n\t\t0\n\t],\n\teaseOutQuint: [\n\t\t.22,\n\t\t1,\n\t\t.36,\n\t\t1\n\t],\n\teaseInOutQuint: [\n\t\t.83,\n\t\t0,\n\t\t.17,\n\t\t1\n\t],\n\teaseInExpo: [\n\t\t.7,\n\t\t0,\n\t\t.84,\n\t\t0\n\t],\n\teaseOutExpo: [\n\t\t.16,\n\t\t1,\n\t\t.3,\n\t\t1\n\t],\n\teaseInOutExpo: [\n\t\t.87,\n\t\t0,\n\t\t.13,\n\t\t1\n\t],\n\teaseInCirc: [\n\t\t.55,\n\t\t0,\n\t\t1,\n\t\t.45\n\t],\n\teaseOutCirc: [\n\t\t0,\n\t\t.55,\n\t\t.45,\n\t\t1\n\t],\n\teaseInOutCirc: [\n\t\t.85,\n\t\t0,\n\t\t.15,\n\t\t1\n\t],\n\teaseInBack: [\n\t\t.36,\n\t\t0,\n\t\t.66,\n\t\t-.56\n\t],\n\teaseOutBack: [\n\t\t.34,\n\t\t1.56,\n\t\t.64,\n\t\t1\n\t],\n\teaseInOutBack: [\n\t\t.68,\n\t\t-.6,\n\t\t.32,\n\t\t1.6\n\t]\n};\n/**\n* Common transitions\n*\n* @see https://easings.net\n*/\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\n/**\n* Create an easing function from cubic bezier points.\n*/\nfunction createEasingFunction([p0, p1, p2, p3]) {\n\tconst a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n\tconst b = (a1, a2) => 3 * a2 - 6 * a1;\n\tconst c = (a1) => 3 * a1;\n\tconst calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n\tconst getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n\tconst getTforX = (x) => {\n\t\tlet aGuessT = x;\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, p0, p2);\n\t\t\tif (currentSlope === 0) return aGuessT;\n\t\t\tconst currentX = calcBezier(aGuessT, p0, p2) - x;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\t\treturn aGuessT;\n\t};\n\treturn (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n\treturn a + alpha * (b - a);\n}\nfunction defaultInterpolation(a, b, t) {\n\tconst aVal = toValue(a);\n\tconst bVal = toValue(b);\n\tif (typeof aVal === \"number\" && typeof bVal === \"number\") return lerp(aVal, bVal, t);\n\tif (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t));\n\tthrow new TypeError(\"Unknown transition type, specify an interpolation function.\");\n}\nfunction normalizeEasing(easing) {\n\tvar _toValue;\n\treturn typeof easing === \"function\" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity;\n}\n/**\n* Transition from one value to another.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction transition(source, from, to, options = {}) {\n\tvar _toValue2;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst fromVal = toValue(from);\n\tconst toVal = toValue(to);\n\tconst duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3;\n\tconst startedAt = Date.now();\n\tconst endAt = Date.now() + duration;\n\tconst interpolation = typeof options.interpolation === \"function\" ? options.interpolation : defaultInterpolation;\n\tconst trans = typeof options.easing !== \"undefined\" ? normalizeEasing(options.easing) : normalizeEasing(options.transition);\n\tconst ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n\treturn new Promise((resolve) => {\n\t\tsource.value = fromVal;\n\t\tconst tick = () => {\n\t\t\tvar _options$abort;\n\t\t\tif ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tsource.value = interpolation(fromVal, toVal, ease((now - startedAt) / duration));\n\t\t\tif (now < endAt) window$1 === null || window$1 === void 0 || window$1.requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tsource.value = toVal;\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\ttick();\n\t});\n}\n/**\n* Transition from one value to another.\n* @deprecated The `executeTransition` function is deprecated, use `transition` instead.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction executeTransition(source, from, to, options = {}) {\n\treturn transition(source, from, to, options);\n}\n/**\n* Follow value with a transition.\n*\n* @see https://vueuse.org/useTransition\n* @param source\n* @param options\n*/\nfunction useTransition(source, options = {}) {\n\tlet currentId = 0;\n\tconst sourceVal = () => {\n\t\tconst v = toValue(source);\n\t\treturn typeof options.interpolation === \"undefined\" && Array.isArray(v) ? v.map(toValue) : v;\n\t};\n\tconst outputRef = shallowRef(sourceVal());\n\twatch(sourceVal, async (to) => {\n\t\tvar _options$onStarted, _options$onFinished;\n\t\tif (toValue(options.disabled)) return;\n\t\tconst id = ++currentId;\n\t\tif (options.delay) await promiseTimeout(toValue(options.delay));\n\t\tif (id !== currentId) return;\n\t\t(_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options);\n\t\tawait transition(outputRef, outputRef.value, to, {\n\t\t\t...options,\n\t\t\tabort: () => {\n\t\t\t\tvar _options$abort2;\n\t\t\t\treturn id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options));\n\t\t\t}\n\t\t});\n\t\t(_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options);\n\t}, { deep: true });\n\twatch(() => toValue(options.disabled), (disabled) => {\n\t\tif (disabled) {\n\t\t\tcurrentId++;\n\t\t\toutputRef.value = sourceVal();\n\t\t}\n\t});\n\ttryOnScopeDispose(() => {\n\t\tcurrentId++;\n\t});\n\treturn computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\n//#endregion\n//#region useUrlSearchParams/index.ts\n/**\n* Reactive URLSearchParams\n*\n* @see https://vueuse.org/useUrlSearchParams\n* @param mode\n* @param options\n*/\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n\tconst { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = \"replace\", window: window$1 = defaultWindow, stringify = (params) => params.toString() } = options;\n\tif (!window$1) return reactive(initialValue);\n\tconst state = reactive({});\n\tfunction getRawParams() {\n\t\tif (mode === \"history\") return window$1.location.search || \"\";\n\t\telse if (mode === \"hash\") {\n\t\t\tconst hash = window$1.location.hash || \"\";\n\t\t\tconst index = hash.indexOf(\"?\");\n\t\t\treturn index > 0 ? hash.slice(index) : \"\";\n\t\t} else return (window$1.location.hash || \"\").replace(/^#/, \"\");\n\t}\n\tfunction constructQuery(params) {\n\t\tconst stringified = stringify(params);\n\t\tif (mode === \"history\") return `${stringified ? `?${stringified}` : \"\"}${window$1.location.hash || \"\"}`;\n\t\tif (mode === \"hash-params\") return `${window$1.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n\t\tconst hash = window$1.location.hash || \"#\";\n\t\tconst index = hash.indexOf(\"?\");\n\t\tif (index > 0) return `${window$1.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n\t\treturn `${window$1.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n\t}\n\tfunction read() {\n\t\treturn new URLSearchParams(getRawParams());\n\t}\n\tfunction updateState(params) {\n\t\tconst unusedKeys = new Set(Object.keys(state));\n\t\tfor (const key of params.keys()) {\n\t\t\tconst paramsForKey = params.getAll(key);\n\t\t\tstate[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n\t\t\tunusedKeys.delete(key);\n\t\t}\n\t\tArray.from(unusedKeys).forEach((key) => delete state[key]);\n\t}\n\tconst { pause, resume } = pausableWatch(state, () => {\n\t\tconst params = new URLSearchParams(\"\");\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst mapEntry = state[key];\n\t\t\tif (Array.isArray(mapEntry)) mapEntry.forEach((value) => params.append(key, value));\n\t\t\telse if (removeNullishValues && mapEntry == null) params.delete(key);\n\t\t\telse if (removeFalsyValues && !mapEntry) params.delete(key);\n\t\t\telse params.set(key, mapEntry);\n\t\t});\n\t\twrite(params, false);\n\t}, { deep: true });\n\tfunction write(params, shouldUpdate, shouldWriteHistory = true) {\n\t\tpause();\n\t\tif (shouldUpdate) updateState(params);\n\t\tif (writeMode === \"replace\") window$1.history.replaceState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params));\n\t\telse if (shouldWriteHistory) window$1.history.pushState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params));\n\t\tnextTick(() => resume());\n\t}\n\tfunction onChanged() {\n\t\tif (!enableWrite) return;\n\t\twrite(read(), true, false);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window$1, \"popstate\", onChanged, listenerOptions);\n\tif (mode !== \"history\") useEventListener(window$1, \"hashchange\", onChanged, listenerOptions);\n\tconst initial = read();\n\tif (initial.keys().next().value) updateState(initial);\n\telse Object.assign(state, initialValue);\n\treturn state;\n}\n\n//#endregion\n//#region useUserMedia/index.ts\n/**\n* Reactive `mediaDevices.getUserMedia` streaming\n*\n* @see https://vueuse.org/useUserMedia\n* @param options\n*/\nfunction useUserMedia(options = {}) {\n\tvar _options$enabled, _options$autoSwitch;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true);\n\tconst constraints = ref(options.constraints);\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia;\n\t});\n\tconst stream = shallowRef();\n\tfunction getDeviceOptions(type) {\n\t\tswitch (type) {\n\t\t\tcase \"video\":\n\t\t\t\tif (constraints.value) return constraints.value.video || false;\n\t\t\t\tbreak;\n\t\t\tcase \"audio\":\n\t\t\t\tif (constraints.value) return constraints.value.audio || false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tasync function _start() {\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator$1.mediaDevices.getUserMedia({\n\t\t\tvideo: getDeviceOptions(\"video\"),\n\t\t\taudio: getDeviceOptions(\"audio\")\n\t\t});\n\t\treturn stream.value;\n\t}\n\tfunction _stop() {\n\t\tvar _stream$value;\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\tasync function restart() {\n\t\t_stop();\n\t\treturn await start();\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\twatch(constraints, () => {\n\t\tif (autoSwitch.value && stream.value) restart();\n\t}, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\trestart,\n\t\tconstraints,\n\t\tenabled,\n\t\tautoSwitch\n\t};\n}\n\n//#endregion\n//#region useVModel/index.ts\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue$1 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue$1());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue$1();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useVModels/index.ts\n/**\n* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.\n*\n* @see https://vueuse.org/useVModels\n* @param props\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModels(props, emit, options = {}) {\n\tconst ret = {};\n\tfor (const key in props) ret[key] = useVModel(props, key, emit, options);\n\treturn ret;\n}\n\n//#endregion\n//#region useVibrate/index.ts\n/**\n* Reactive vibrate\n*\n* @see https://vueuse.org/useVibrate\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVibrate(options) {\n\tconst { pattern = [], interval = 0, navigator: navigator$1 = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof navigator$1 !== \"undefined\" && \"vibrate\" in navigator$1);\n\tconst patternRef = toRef(pattern);\n\tlet intervalControls;\n\tconst vibrate = (pattern$1 = patternRef.value) => {\n\t\tif (isSupported.value) navigator$1.vibrate(pattern$1);\n\t};\n\tconst stop = () => {\n\t\tif (isSupported.value) navigator$1.vibrate(0);\n\t\tintervalControls === null || intervalControls === void 0 || intervalControls.pause();\n\t};\n\tif (interval > 0) intervalControls = useIntervalFn(vibrate, interval, {\n\t\timmediate: false,\n\t\timmediateCallback: false\n\t});\n\treturn {\n\t\tisSupported,\n\t\tpattern,\n\t\tintervalControls,\n\t\tvibrate,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useVirtualList/index.ts\n/**\n* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.\n*/\nfunction useVirtualList(list, options) {\n\tconst { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n\treturn {\n\t\tlist: currentList,\n\t\tscrollTo,\n\t\tcontainerProps: {\n\t\t\tref: containerRef,\n\t\t\tonScroll: () => {\n\t\t\t\tcalculateRange();\n\t\t\t},\n\t\t\tstyle: containerStyle\n\t\t},\n\t\twrapperProps\n\t};\n}\nfunction useVirtualListResources(list) {\n\tconst containerRef = shallowRef(null);\n\tconst size = useElementSize(containerRef);\n\tconst currentList = ref([]);\n\tconst source = shallowRef(list);\n\treturn {\n\t\tstate: ref({\n\t\t\tstart: 0,\n\t\t\tend: 10\n\t\t}),\n\t\tsource,\n\t\tcurrentList,\n\t\tsize,\n\t\tcontainerRef\n\t};\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n\treturn (containerSize) => {\n\t\tif (typeof itemSize === \"number\") return Math.ceil(containerSize / itemSize);\n\t\tconst { start = 0 } = state.value;\n\t\tlet sum = 0;\n\t\tlet capacity = 0;\n\t\tfor (let i = start; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tcapacity = i;\n\t\t\tif (sum > containerSize) break;\n\t\t}\n\t\treturn capacity - start;\n\t};\n}\nfunction createGetOffset(source, itemSize) {\n\treturn (scrollDirection) => {\n\t\tif (typeof itemSize === \"number\") return Math.floor(scrollDirection / itemSize) + 1;\n\t\tlet sum = 0;\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tif (sum >= scrollDirection) {\n\t\t\t\toffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn offset + 1;\n\t};\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n\treturn () => {\n\t\tconst element = containerRef.value;\n\t\tif (element) {\n\t\t\tconst offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n\t\t\tconst viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n\t\t\tconst from = offset - overscan;\n\t\t\tconst to = offset + viewCapacity + overscan;\n\t\t\tstate.value = {\n\t\t\t\tstart: from < 0 ? 0 : from,\n\t\t\t\tend: to > source.value.length ? source.value.length : to\n\t\t\t};\n\t\t\tcurrentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n\t\t\t\tdata: ele,\n\t\t\t\tindex: index + state.value.start\n\t\t\t}));\n\t\t}\n\t};\n}\nfunction createGetDistance(itemSize, source) {\n\treturn (index) => {\n\t\tif (typeof itemSize === \"number\") return index * itemSize;\n\t\treturn source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n\t};\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n\twatch([\n\t\tsize.width,\n\t\tsize.height,\n\t\t() => toValue(list),\n\t\tcontainerRef\n\t], () => {\n\t\tcalculateRange();\n\t});\n}\nfunction createComputedTotalSize(itemSize, source) {\n\treturn computed(() => {\n\t\tif (typeof itemSize === \"number\") return source.value.length * itemSize;\n\t\treturn source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n\t});\n}\nconst scrollToDictionaryForElementScrollKey = {\n\thorizontal: \"scrollLeft\",\n\tvertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n\treturn (index) => {\n\t\tif (containerRef.value) {\n\t\t\tcontainerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n\t\t\tcalculateRange();\n\t\t}\n\t};\n}\nfunction useHorizontalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowX: \"auto\" };\n\tconst { itemWidth, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n\tconst calculateRange = createCalculateRange(\"horizontal\", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources);\n\tconst getDistanceLeft = createGetDistance(itemWidth, source);\n\tconst offsetLeft = computed(() => getDistanceLeft(state.value.start));\n\tconst totalWidth = createComputedTotalSize(itemWidth, source);\n\tuseWatchForSizes(size, list, containerRef, calculateRange);\n\treturn {\n\t\tscrollTo: createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef),\n\t\tcalculateRange,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: `${totalWidth.value - offsetLeft.value}px`,\n\t\t\t\tmarginLeft: `${offsetLeft.value}px`,\n\t\t\t\tdisplay: \"flex\"\n\t\t\t} };\n\t\t}),\n\t\tcontainerStyle,\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\nfunction useVerticalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowY: \"auto\" };\n\tconst { itemHeight, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n\tconst calculateRange = createCalculateRange(\"vertical\", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources);\n\tconst getDistanceTop = createGetDistance(itemHeight, source);\n\tconst offsetTop = computed(() => getDistanceTop(state.value.start));\n\tconst totalHeight = createComputedTotalSize(itemHeight, source);\n\tuseWatchForSizes(size, list, containerRef, calculateRange);\n\treturn {\n\t\tcalculateRange,\n\t\tscrollTo: createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef),\n\t\tcontainerStyle,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: `${totalHeight.value - offsetTop.value}px`,\n\t\t\t\tmarginTop: `${offsetTop.value}px`\n\t\t\t} };\n\t\t}),\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\n\n//#endregion\n//#region useWakeLock/index.ts\n/**\n* Reactive Screen Wake Lock API.\n*\n* @see https://vueuse.org/useWakeLock\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWakeLock(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, document: document$1 = defaultDocument } = options;\n\tconst requestedType = shallowRef(false);\n\tconst sentinel = shallowRef(null);\n\tconst documentVisibility = useDocumentVisibility({ document: document$1 });\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"wakeLock\" in navigator$1);\n\tconst isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n\tif (isSupported.value) {\n\t\tuseEventListener(sentinel, \"release\", () => {\n\t\t\tvar _sentinel$value$type, _sentinel$value;\n\t\t\trequestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false;\n\t\t}, { passive: true });\n\t\twhenever(() => documentVisibility.value === \"visible\" && (document$1 === null || document$1 === void 0 ? void 0 : document$1.visibilityState) === \"visible\" && requestedType.value, (type) => {\n\t\t\trequestedType.value = false;\n\t\t\tforceRequest(type);\n\t\t});\n\t}\n\tasync function forceRequest(type) {\n\t\tvar _sentinel$value2;\n\t\tawait ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release());\n\t\tsentinel.value = isSupported.value ? await navigator$1.wakeLock.request(type) : null;\n\t}\n\tasync function request(type) {\n\t\tif (documentVisibility.value === \"visible\") await forceRequest(type);\n\t\telse requestedType.value = type;\n\t}\n\tasync function release() {\n\t\trequestedType.value = false;\n\t\tconst s = sentinel.value;\n\t\tsentinel.value = null;\n\t\tawait (s === null || s === void 0 ? void 0 : s.release());\n\t}\n\treturn {\n\t\tsentinel,\n\t\tisSupported,\n\t\tisActive,\n\t\trequest,\n\t\tforceRequest,\n\t\trelease\n\t};\n}\n\n//#endregion\n//#region useWebNotification/index.ts\n/**\n* Reactive useWebNotification\n*\n* @see https://vueuse.org/useWebNotification\n* @see https://developer.mozilla.org/en-US/docs/Web/API/notification\n*/\nfunction useWebNotification(options = {}) {\n\tconst { window: window$1 = defaultWindow, requestPermissions: _requestForPermissions = true } = options;\n\tconst defaultWebNotificationOptions = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (!window$1 || !(\"Notification\" in window$1)) return false;\n\t\tif (Notification.permission === \"granted\") return true;\n\t\ttry {\n\t\t\tconst notification$1 = new Notification(\"\");\n\t\t\tnotification$1.onshow = () => {\n\t\t\t\tnotification$1.close();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.name === \"TypeError\") return false;\n\t\t}\n\t\treturn true;\n\t});\n\tconst permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n\tconst notification = ref(null);\n\tconst ensurePermissions = async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionGranted.value && Notification.permission !== \"denied\") {\n\t\t\tif (await Notification.requestPermission() === \"granted\") permissionGranted.value = true;\n\t\t}\n\t\treturn permissionGranted.value;\n\t};\n\tconst { on: onClick, trigger: clickTrigger } = createEventHook();\n\tconst { on: onShow, trigger: showTrigger } = createEventHook();\n\tconst { on: onError, trigger: errorTrigger } = createEventHook();\n\tconst { on: onClose, trigger: closeTrigger } = createEventHook();\n\tconst show = async (overrides) => {\n\t\tif (!isSupported.value || !permissionGranted.value) return;\n\t\tconst options$1 = Object.assign({}, defaultWebNotificationOptions, overrides);\n\t\tnotification.value = new Notification(options$1.title || \"\", options$1);\n\t\tnotification.value.onclick = clickTrigger;\n\t\tnotification.value.onshow = showTrigger;\n\t\tnotification.value.onerror = errorTrigger;\n\t\tnotification.value.onclose = closeTrigger;\n\t\treturn notification.value;\n\t};\n\tconst close = () => {\n\t\tif (notification.value) notification.value.close();\n\t\tnotification.value = null;\n\t};\n\tif (_requestForPermissions) tryOnMounted(ensurePermissions);\n\ttryOnScopeDispose(close);\n\tif (isSupported.value && window$1) {\n\t\tconst document$1 = window$1.document;\n\t\tuseEventListener(document$1, \"visibilitychange\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (document$1.visibilityState === \"visible\") close();\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tnotification,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tshow,\n\t\tclose,\n\t\tonClick,\n\t\tonShow,\n\t\tonError,\n\t\tonClose\n\t};\n}\n\n//#endregion\n//#region useWebSocket/index.ts\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive WebSocket client.\n*\n* @see https://vueuse.org/useWebSocket\n* @param url\n*/\nfunction useWebSocket(url, options = {}) {\n\tconst { onConnected, onDisconnected, onError, onMessage, immediate = true, autoConnect = true, autoClose = true, protocols = [] } = options;\n\tconst data = ref(null);\n\tconst status = shallowRef(\"CLOSED\");\n\tconst wsRef = ref();\n\tconst urlRef = toRef(url);\n\tlet heartbeatPause;\n\tlet heartbeatResume;\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tlet bufferedData = [];\n\tlet retryTimeout;\n\tlet pongTimeoutWait;\n\tconst _sendBuffer = () => {\n\t\tif (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n\t\t\tfor (const buffer of bufferedData) wsRef.value.send(buffer);\n\t\t\tbufferedData = [];\n\t\t}\n\t};\n\tconst resetRetry = () => {\n\t\tif (retryTimeout != null) {\n\t\t\tclearTimeout(retryTimeout);\n\t\t\tretryTimeout = void 0;\n\t\t}\n\t};\n\tconst resetHeartbeat = () => {\n\t\tclearTimeout(pongTimeoutWait);\n\t\tpongTimeoutWait = void 0;\n\t};\n\tconst close = (code = 1e3, reason) => {\n\t\tresetRetry();\n\t\tif (!isClient && !isWorker || !wsRef.value) return;\n\t\texplicitlyClosed = true;\n\t\tresetHeartbeat();\n\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\twsRef.value.close(code, reason);\n\t\twsRef.value = void 0;\n\t};\n\tconst send = (data$1, useBuffer = true) => {\n\t\tif (!wsRef.value || status.value !== \"OPEN\") {\n\t\t\tif (useBuffer) bufferedData.push(data$1);\n\t\t\treturn false;\n\t\t}\n\t\t_sendBuffer();\n\t\twsRef.value.send(data$1);\n\t\treturn true;\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst ws = new WebSocket(urlRef.value, protocols);\n\t\twsRef.value = ws;\n\t\tstatus.value = \"CONNECTING\";\n\t\tws.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\tretried = 0;\n\t\t\tonConnected === null || onConnected === void 0 || onConnected(ws);\n\t\t\theartbeatResume === null || heartbeatResume === void 0 || heartbeatResume();\n\t\t\t_sendBuffer();\n\t\t};\n\t\tws.onclose = (ev) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\tresetHeartbeat();\n\t\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\t\tonDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev);\n\t\t\tif (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect);\n\t\t\t\tif ((typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries))(retried)) {\n\t\t\t\t\tretried += 1;\n\t\t\t\t\tconst delayTime = typeof delay === \"function\" ? delay(retried) : delay;\n\t\t\t\t\tretryTimeout = setTimeout(_init, delayTime);\n\t\t\t\t} else onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tws.onerror = (e) => {\n\t\t\tonError === null || onError === void 0 || onError(ws, e);\n\t\t};\n\t\tws.onmessage = (e) => {\n\t\t\tif (options.heartbeat) {\n\t\t\t\tresetHeartbeat();\n\t\t\t\tconst { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat);\n\t\t\t\tif (e.data === toValue(responseMessage)) return;\n\t\t\t}\n\t\t\tdata.value = e.data;\n\t\t\tonMessage === null || onMessage === void 0 || onMessage(ws, e);\n\t\t};\n\t};\n\tif (options.heartbeat) {\n\t\tconst { message = DEFAULT_PING_MESSAGE, interval = 1e3, pongTimeout = 1e3 } = resolveNestedOptions(options.heartbeat);\n\t\tconst { pause, resume } = useIntervalFn(() => {\n\t\t\tsend(toValue(message), false);\n\t\t\tif (pongTimeoutWait != null) return;\n\t\t\tpongTimeoutWait = setTimeout(() => {\n\t\t\t\tclose();\n\t\t\t\texplicitlyClosed = false;\n\t\t\t}, pongTimeout);\n\t\t}, interval, { immediate: false });\n\t\theartbeatPause = pause;\n\t\theartbeatResume = resume;\n\t}\n\tif (autoClose) {\n\t\tif (isClient) useEventListener(\"beforeunload\", () => close(), { passive: true });\n\t\ttryOnScopeDispose(close);\n\t}\n\tconst open = () => {\n\t\tif (!isClient && !isWorker) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\treturn {\n\t\tdata,\n\t\tstatus,\n\t\tclose,\n\t\tsend,\n\t\topen,\n\t\tws: wsRef\n\t};\n}\n\n//#endregion\n//#region useWebWorker/index.ts\nfunction useWebWorker(arg0, workerOptions, options) {\n\tconst { window: window$1 = defaultWindow } = options !== null && options !== void 0 ? options : {};\n\tconst data = ref(null);\n\tconst worker = shallowRef();\n\tconst post = (...args) => {\n\t\tif (!worker.value) return;\n\t\tworker.value.postMessage(...args);\n\t};\n\tconst terminate = function terminate$1() {\n\t\tif (!worker.value) return;\n\t\tworker.value.terminate();\n\t};\n\tif (window$1) {\n\t\tif (typeof arg0 === \"string\") worker.value = new Worker(arg0, workerOptions);\n\t\telse if (typeof arg0 === \"function\") worker.value = arg0();\n\t\telse worker.value = arg0;\n\t\tworker.value.onmessage = (e) => {\n\t\t\tdata.value = e.data;\n\t\t};\n\t\ttryOnScopeDispose(() => {\n\t\t\tif (worker.value) worker.value.terminate();\n\t\t});\n\t}\n\treturn {\n\t\tdata,\n\t\tpost,\n\t\tterminate,\n\t\tworker\n\t};\n}\n\n//#endregion\n//#region useWebWorkerFn/lib/depsParser.ts\n/**\n*\n* Concatenates the dependencies into a comma separated string.\n* this string will then be passed as an argument to the \"importScripts\" function\n*\n* @param deps array of string\n* @param localDeps array of function\n* @returns a string composed by the concatenation of the array\n* elements \"deps\" and \"importScripts\".\n*\n* @example\n* depsParser(['demo1', 'demo2']) // return importScripts('demo1', 'demo2')\n*/\nfunction depsParser(deps, localDeps) {\n\tif (deps.length === 0 && localDeps.length === 0) return \"\";\n\tconst depsString = deps.map((dep) => `'${dep}'`).toString();\n\tconst depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n\t\tconst str = fn.toString();\n\t\tif (str.trim().startsWith(\"function\")) return str;\n\t\telse return `const ${fn.name} = ${str}`;\n\t}).join(\";\");\n\tconst importString = `importScripts(${depsString});`;\n\treturn `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\nvar depsParser_default = depsParser;\n\n//#endregion\n//#region useWebWorkerFn/lib/jobRunner.ts\n/**\n* This function accepts as a parameter a function \"userFunc\"\n* And as a result returns an anonymous function.\n* This anonymous function, accepts as arguments,\n* the parameters to pass to the function \"useArgs\" and returns a Promise\n* This function can be used as a wrapper, only inside a Worker\n* because it depends by \"postMessage\".\n*\n* @param userFunc {Function} fn the function to run with web worker\n*\n* @returns returns a function that accepts the parameters\n* to be passed to the \"userFunc\" function\n*/\nfunction jobRunner(userFunc) {\n\treturn (e) => {\n\t\tconst userFuncArgs = e.data[0];\n\t\treturn Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n\t\t\tpostMessage([\"SUCCESS\", result]);\n\t\t}).catch((error) => {\n\t\t\tpostMessage([\"ERROR\", error]);\n\t\t});\n\t};\n}\nvar jobRunner_default = jobRunner;\n\n//#endregion\n//#region useWebWorkerFn/lib/createWorkerBlobUrl.ts\n/**\n* Converts the \"fn\" function into the syntax needed to be executed within a web worker\n*\n* @param fn the function to run with web worker\n* @param deps array of strings, imported into the worker through \"importScripts\"\n* @param localDeps array of function, local dependencies\n*\n* @returns a blob url, containing the code of \"fn\" as a string\n*\n* @example\n* createWorkerBlobUrl((a,b) => a+b, [])\n* // return \"onmessage=return Promise.resolve((a,b) => a + b)\n* .then(postMessage(['SUCCESS', result]))\n* .catch(postMessage(['ERROR', error])\"\n*/\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n\tconst blobCode = `${depsParser_default(deps, localDeps)}; onmessage=(${jobRunner_default})(${fn})`;\n\tconst blob = new Blob([blobCode], { type: \"text/javascript\" });\n\treturn URL.createObjectURL(blob);\n}\nvar createWorkerBlobUrl_default = createWorkerBlobUrl;\n\n//#endregion\n//#region useWebWorkerFn/index.ts\n/**\n* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.\n*\n* @see https://vueuse.org/useWebWorkerFn\n* @param fn\n* @param options\n*/\nfunction useWebWorkerFn(fn, options = {}) {\n\tconst { dependencies = [], localDependencies = [], timeout, window: window$1 = defaultWindow } = options;\n\tconst worker = ref();\n\tconst workerStatus = shallowRef(\"PENDING\");\n\tconst promise = ref({});\n\tconst timeoutId = shallowRef();\n\tconst workerTerminate = (status = \"PENDING\") => {\n\t\tif (worker.value && worker.value._url && window$1) {\n\t\t\tworker.value.terminate();\n\t\t\tURL.revokeObjectURL(worker.value._url);\n\t\t\tpromise.value = {};\n\t\t\tworker.value = void 0;\n\t\t\twindow$1.clearTimeout(timeoutId.value);\n\t\t\tworkerStatus.value = status;\n\t\t}\n\t};\n\tworkerTerminate();\n\ttryOnScopeDispose(workerTerminate);\n\tconst generateWorker = () => {\n\t\tconst blobUrl = createWorkerBlobUrl_default(fn, dependencies, localDependencies);\n\t\tconst newWorker = new Worker(blobUrl);\n\t\tnewWorker._url = blobUrl;\n\t\tnewWorker.onmessage = (e) => {\n\t\t\tconst { resolve = () => {}, reject = () => {} } = promise.value;\n\t\t\tconst [status, result] = e.data;\n\t\t\tswitch (status) {\n\t\t\t\tcase \"SUCCESS\":\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tworkerTerminate(status);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treject(result);\n\t\t\t\t\tworkerTerminate(\"ERROR\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tnewWorker.onerror = (e) => {\n\t\t\tconst { reject = () => {} } = promise.value;\n\t\t\te.preventDefault();\n\t\t\treject(e);\n\t\t\tworkerTerminate(\"ERROR\");\n\t\t};\n\t\tif (timeout) timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n\t\treturn newWorker;\n\t};\n\tconst callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n\t\tvar _worker$value;\n\t\tpromise.value = {\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t\t(_worker$value = worker.value) === null || _worker$value === void 0 || _worker$value.postMessage([[...fnArgs]]);\n\t\tworkerStatus.value = \"RUNNING\";\n\t});\n\tconst workerFn = (...fnArgs) => {\n\t\tif (workerStatus.value === \"RUNNING\") {\n\t\t\tconsole.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tworker.value = generateWorker();\n\t\treturn callWorker(...fnArgs);\n\t};\n\treturn {\n\t\tworkerFn,\n\t\tworkerStatus,\n\t\tworkerTerminate\n\t};\n}\n\n//#endregion\n//#region useWindowFocus/index.ts\n/**\n* Reactively track window focus with `window.onfocus` and `window.onblur`.\n*\n* @see https://vueuse.org/useWindowFocus\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowFocus(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tif (!window$1) return shallowRef(false);\n\tconst focused = shallowRef(window$1.document.hasFocus());\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window$1, \"blur\", () => {\n\t\tfocused.value = false;\n\t}, listenerOptions);\n\tuseEventListener(window$1, \"focus\", () => {\n\t\tfocused.value = true;\n\t}, listenerOptions);\n\treturn focused;\n}\n\n//#endregion\n//#region useWindowScroll/index.ts\n/**\n* Reactive window scroll.\n*\n* @see https://vueuse.org/useWindowScroll\n* @param options\n*/\nfunction useWindowScroll(options = {}) {\n\tconst { window: window$1 = defaultWindow,...rest } = options;\n\treturn useScroll(window$1, rest);\n}\n\n//#endregion\n//#region useWindowSize/index.ts\n/**\n* Reactive window size.\n*\n* @see https://vueuse.org/useWindowSize\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowSize(options = {}) {\n\tconst { window: window$1 = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = \"inner\" } = options;\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst update = () => {\n\t\tif (window$1) if (type === \"outer\") {\n\t\t\twidth.value = window$1.outerWidth;\n\t\t\theight.value = window$1.outerHeight;\n\t\t} else if (type === \"visual\" && window$1.visualViewport) {\n\t\t\tconst { width: visualViewportWidth, height: visualViewportHeight, scale } = window$1.visualViewport;\n\t\t\twidth.value = Math.round(visualViewportWidth * scale);\n\t\t\theight.value = Math.round(visualViewportHeight * scale);\n\t\t} else if (includeScrollbar) {\n\t\t\twidth.value = window$1.innerWidth;\n\t\t\theight.value = window$1.innerHeight;\n\t\t} else {\n\t\t\twidth.value = window$1.document.documentElement.clientWidth;\n\t\t\theight.value = window$1.document.documentElement.clientHeight;\n\t\t}\n\t};\n\tupdate();\n\ttryOnMounted(update);\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"resize\", update, listenerOptions);\n\tif (window$1 && type === \"visual\" && window$1.visualViewport) useEventListener(window$1.visualViewport, \"resize\", update, listenerOptions);\n\tif (listenOrientation) watch(useMediaQuery(\"(orientation: portrait)\"), () => update());\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n\n//#endregion\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, formatTimeAgoIntl, formatTimeAgoIntlParts, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, transition, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeAgoIntl, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };","/*!\n * vue-tippy v6.7.1\n * (c) 2025 \n * @license MIT\n */\nimport { getCurrentInstance, ref, shallowRef, onMounted, onUnmounted, isRef, isReactive, watch, isVNode, createApp, h, defineComponent, nextTick, unref, reactive } from 'vue';\n\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar applyStyles$1 = {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;\n\nfunction getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n var offsetHeight = element.offsetHeight;\n var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // Fallback to 1 in case both values are `0`\n\n if (offsetWidth > 0) {\n scaleX = round(rect.width) / offsetWidth || 1;\n }\n\n if (offsetHeight > 0) {\n scaleY = round(rect.height) / offsetHeight || 1;\n }\n }\n\n return {\n width: rect.width / scaleX,\n height: rect.height / scaleY,\n top: rect.top / scaleY,\n right: rect.right / scaleX,\n bottom: rect.bottom / scaleY,\n left: rect.left / scaleX,\n x: rect.left / scaleX,\n y: rect.top / scaleY\n };\n}\n\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}\n\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n\nfunction getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\nfunction withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}\n\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}\n\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect$1(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar arrow$1 = {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect$1,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};\n\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n var state = _ref4.state,\n options = _ref4.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar computeStyles$1 = {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};\n\nvar passive = {\n passive: true\n};\n\nfunction effect$2(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar eventListeners = {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect$2,\n data: {}\n};\n\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\nvar hash$1 = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash$1[matched];\n });\n}\n\nfunction getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}\n\nfunction getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}\n\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body' && (canEscapeClipping ? getComputedStyle(clippingParent).position !== 'static' : true);\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n }\n }\n\n return offsets;\n}\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements$1.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements$1;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar flip$1 = {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar hide$1 = {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar offset$1 = {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar popperOffsets$1 = {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};\n\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min$1 = offset + overflow[mainSide];\n var max$1 = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nvar preventOverflow$1 = {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};\n\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n\nfunction getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}\n\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\n\nvar defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n/**!\n* tippy.js v6.3.7\n* (c) 2017-2021 atomiks\n* MIT License\n*/\n\nvar ROUND_ARROW = '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\nvar BOX_CLASS = \"tippy-box\";\nvar CONTENT_CLASS = \"tippy-content\";\nvar BACKDROP_CLASS = \"tippy-backdrop\";\nvar ARROW_CLASS = \"tippy-arrow\";\nvar SVG_ARROW_CLASS = \"tippy-svg-arrow\";\nvar TOUCH_OPTIONS = {\n passive: true,\n capture: true\n};\nvar TIPPY_DEFAULT_APPEND_TO = function TIPPY_DEFAULT_APPEND_TO() {\n return document.body;\n};\nfunction getValueAtIndexOrReturn(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;\n }\n\n return value;\n}\nfunction isType(value, type) {\n var str = {}.toString.call(value);\n return str.indexOf('[object') === 0 && str.indexOf(type + \"]\") > -1;\n}\nfunction invokeWithArgsOrReturn(value, args) {\n return typeof value === 'function' ? value.apply(void 0, args) : value;\n}\nfunction debounce$1(fn, ms) {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n var timeout;\n return function (arg) {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n fn(arg);\n }, ms);\n };\n}\nfunction removeProperties(obj, keys) {\n var clone = Object.assign({}, obj);\n keys.forEach(function (key) {\n delete clone[key];\n });\n return clone;\n}\nfunction splitBySpaces(value) {\n return value.split(/\\s+/).filter(Boolean);\n}\nfunction normalizeToArray(value) {\n return [].concat(value);\n}\nfunction pushIfUnique(arr, value) {\n if (arr.indexOf(value) === -1) {\n arr.push(value);\n }\n}\nfunction unique(arr) {\n return arr.filter(function (item, index) {\n return arr.indexOf(item) === index;\n });\n}\nfunction getBasePlacement$1(placement) {\n return placement.split('-')[0];\n}\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\nfunction removeUndefinedProps(obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (obj[key] !== undefined) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n\nfunction div() {\n return document.createElement('div');\n}\nfunction isElement$1(value) {\n return ['Element', 'Fragment'].some(function (type) {\n return isType(value, type);\n });\n}\nfunction isNodeList(value) {\n return isType(value, 'NodeList');\n}\nfunction isMouseEvent(value) {\n return isType(value, 'MouseEvent');\n}\nfunction isReferenceElement(value) {\n return !!(value && value._tippy && value._tippy.reference === value);\n}\nfunction getArrayOfElements(value) {\n if (isElement$1(value)) {\n return [value];\n }\n\n if (isNodeList(value)) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return arrayFrom(document.querySelectorAll(value));\n}\nfunction setTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = value + \"ms\";\n }\n });\n}\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\nfunction getOwnerDocument(elementOrElements) {\n var _element$ownerDocumen;\n\n var _normalizeToArray = normalizeToArray(elementOrElements),\n element = _normalizeToArray[0]; // Elements created via a <template> have an ownerDocument with no reference to the body\n\n\n return element != null && (_element$ownerDocumen = element.ownerDocument) != null && _element$ownerDocumen.body ? element.ownerDocument : document;\n}\nfunction isCursorOutsideInteractiveBorder(popperTreeData, event) {\n var clientX = event.clientX,\n clientY = event.clientY;\n return popperTreeData.every(function (_ref) {\n var popperRect = _ref.popperRect,\n popperState = _ref.popperState,\n props = _ref.props;\n var interactiveBorder = props.interactiveBorder;\n var basePlacement = getBasePlacement$1(popperState.placement);\n var offsetData = popperState.modifiersData.offset;\n\n if (!offsetData) {\n return true;\n }\n\n var topDistance = basePlacement === 'bottom' ? offsetData.top.y : 0;\n var bottomDistance = basePlacement === 'top' ? offsetData.bottom.y : 0;\n var leftDistance = basePlacement === 'right' ? offsetData.left.x : 0;\n var rightDistance = basePlacement === 'left' ? offsetData.right.x : 0;\n var exceedsTop = popperRect.top - clientY + topDistance > interactiveBorder;\n var exceedsBottom = clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n var exceedsLeft = popperRect.left - clientX + leftDistance > interactiveBorder;\n var exceedsRight = clientX - popperRect.right - rightDistance > interactiveBorder;\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n });\n}\nfunction updateTransitionEndListener(box, action, listener) {\n var method = action + \"EventListener\"; // some browsers apparently support `transition` (unprefixed) but only fire\n // `webkitTransitionEnd`...\n\n ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n box[method](event, listener);\n });\n}\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\n\nfunction actualContains(parent, child) {\n var target = child;\n\n while (target) {\n var _target$getRootNode;\n\n if (parent.contains(target)) {\n return true;\n }\n\n target = target.getRootNode == null ? void 0 : (_target$getRootNode = target.getRootNode()) == null ? void 0 : _target$getRootNode.host;\n }\n\n return false;\n}\n\nvar currentInput = {\n isTouch: false\n};\nvar lastMouseMoveTime = 0;\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\n\nfunction onDocumentTouchStart() {\n if (currentInput.isTouch) {\n return;\n }\n\n currentInput.isTouch = true;\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\n\nfunction onDocumentMouseMove() {\n var now = performance.now();\n\n if (now - lastMouseMoveTime < 20) {\n currentInput.isTouch = false;\n document.removeEventListener('mousemove', onDocumentMouseMove);\n }\n\n lastMouseMoveTime = now;\n}\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\n\nfunction onWindowBlur() {\n var activeElement = document.activeElement;\n\n if (isReferenceElement(activeElement)) {\n var instance = activeElement._tippy;\n\n if (activeElement.blur && !instance.state.isVisible) {\n activeElement.blur();\n }\n }\n}\nfunction bindGlobalEventListeners() {\n document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n window.addEventListener('blur', onWindowBlur);\n}\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar isIE11 = isBrowser ? // @ts-ignore\n!!window.msCrypto : false;\n\nvar pluginProps = {\n animateFill: false,\n followCursor: false,\n inlinePositioning: false,\n sticky: false\n};\nvar renderProps = {\n allowHTML: false,\n animation: 'fade',\n arrow: true,\n content: '',\n inertia: false,\n maxWidth: 350,\n role: 'tooltip',\n theme: '',\n zIndex: 9999\n};\nvar defaultProps = Object.assign({\n appendTo: TIPPY_DEFAULT_APPEND_TO,\n aria: {\n content: 'auto',\n expanded: 'auto'\n },\n delay: 0,\n duration: [300, 250],\n getReferenceClientRect: null,\n hideOnClick: true,\n ignoreAttributes: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n moveTransition: '',\n offset: [0, 10],\n onAfterUpdate: function onAfterUpdate() {},\n onBeforeUpdate: function onBeforeUpdate() {},\n onCreate: function onCreate() {},\n onDestroy: function onDestroy() {},\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n onTrigger: function onTrigger() {},\n onUntrigger: function onUntrigger() {},\n onClickOutside: function onClickOutside() {},\n placement: 'top',\n plugins: [],\n popperOptions: {},\n render: null,\n showOnCreate: false,\n touch: true,\n trigger: 'mouseenter focus',\n triggerTarget: null\n}, pluginProps, renderProps);\nvar defaultKeys = Object.keys(defaultProps);\nvar setDefaultProps = function setDefaultProps(partialProps) {\n\n var keys = Object.keys(partialProps);\n keys.forEach(function (key) {\n defaultProps[key] = partialProps[key];\n });\n};\nfunction getExtendedPassedProps(passedProps) {\n var plugins = passedProps.plugins || [];\n var pluginProps = plugins.reduce(function (acc, plugin) {\n var name = plugin.name,\n defaultValue = plugin.defaultValue;\n\n if (name) {\n var _name;\n\n acc[name] = passedProps[name] !== undefined ? passedProps[name] : (_name = defaultProps[name]) != null ? _name : defaultValue;\n }\n\n return acc;\n }, {});\n return Object.assign({}, passedProps, pluginProps);\n}\nfunction getDataAttributeProps(reference, plugins) {\n var propKeys = plugins ? Object.keys(getExtendedPassedProps(Object.assign({}, defaultProps, {\n plugins: plugins\n }))) : defaultKeys;\n var props = propKeys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute(\"data-tippy-\" + key) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n }, {});\n return props;\n}\nfunction evaluateProps(reference, props) {\n var out = Object.assign({}, props, {\n content: invokeWithArgsOrReturn(props.content, [reference])\n }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins));\n out.aria = Object.assign({}, defaultProps.aria, out.aria);\n out.aria = {\n expanded: out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n content: out.aria.content === 'auto' ? props.interactive ? null : 'describedby' : out.aria.content\n };\n return out;\n}\n\nvar innerHTML = function innerHTML() {\n return 'innerHTML';\n};\n\nfunction dangerouslySetInnerHTML(element, html) {\n element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value) {\n var arrow = div();\n\n if (value === true) {\n arrow.className = ARROW_CLASS;\n } else {\n arrow.className = SVG_ARROW_CLASS;\n\n if (isElement$1(value)) {\n arrow.appendChild(value);\n } else {\n dangerouslySetInnerHTML(arrow, value);\n }\n }\n\n return arrow;\n}\n\nfunction setContent(content, props) {\n if (isElement$1(props.content)) {\n dangerouslySetInnerHTML(content, '');\n content.appendChild(props.content);\n } else if (typeof props.content !== 'function') {\n if (props.allowHTML) {\n dangerouslySetInnerHTML(content, props.content);\n } else {\n content.textContent = props.content;\n }\n }\n}\nfunction getChildren(popper) {\n var box = popper.firstElementChild;\n var boxChildren = arrayFrom(box.children);\n return {\n box: box,\n content: boxChildren.find(function (node) {\n return node.classList.contains(CONTENT_CLASS);\n }),\n arrow: boxChildren.find(function (node) {\n return node.classList.contains(ARROW_CLASS) || node.classList.contains(SVG_ARROW_CLASS);\n }),\n backdrop: boxChildren.find(function (node) {\n return node.classList.contains(BACKDROP_CLASS);\n })\n };\n}\nfunction render(instance) {\n var popper = div();\n var box = div();\n box.className = BOX_CLASS;\n box.setAttribute('data-state', 'hidden');\n box.setAttribute('tabindex', '-1');\n var content = div();\n content.className = CONTENT_CLASS;\n content.setAttribute('data-state', 'hidden');\n setContent(content, instance.props);\n popper.appendChild(box);\n box.appendChild(content);\n onUpdate(instance.props, instance.props);\n\n function onUpdate(prevProps, nextProps) {\n var _getChildren = getChildren(popper),\n box = _getChildren.box,\n content = _getChildren.content,\n arrow = _getChildren.arrow;\n\n if (nextProps.theme) {\n box.setAttribute('data-theme', nextProps.theme);\n } else {\n box.removeAttribute('data-theme');\n }\n\n if (typeof nextProps.animation === 'string') {\n box.setAttribute('data-animation', nextProps.animation);\n } else {\n box.removeAttribute('data-animation');\n }\n\n if (nextProps.inertia) {\n box.setAttribute('data-inertia', '');\n } else {\n box.removeAttribute('data-inertia');\n }\n\n box.style.maxWidth = typeof nextProps.maxWidth === 'number' ? nextProps.maxWidth + \"px\" : nextProps.maxWidth;\n\n if (nextProps.role) {\n box.setAttribute('role', nextProps.role);\n } else {\n box.removeAttribute('role');\n }\n\n if (prevProps.content !== nextProps.content || prevProps.allowHTML !== nextProps.allowHTML) {\n setContent(content, instance.props);\n }\n\n if (nextProps.arrow) {\n if (!arrow) {\n box.appendChild(createArrowElement(nextProps.arrow));\n } else if (prevProps.arrow !== nextProps.arrow) {\n box.removeChild(arrow);\n box.appendChild(createArrowElement(nextProps.arrow));\n }\n } else if (arrow) {\n box.removeChild(arrow);\n }\n }\n\n return {\n popper: popper,\n onUpdate: onUpdate\n };\n} // Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\n\nrender.$$tippy = true;\n\nvar idCounter = 1;\nvar mouseMoveListeners = []; // Used by `hideAll()`\n\nvar mountedInstances = [];\nfunction createTippy(reference, passedProps) {\n var props = evaluateProps(reference, Object.assign({}, defaultProps, getExtendedPassedProps(removeUndefinedProps(passedProps)))); // ===========================================================================\n // 🔒 Private members\n // ===========================================================================\n\n var showTimeout;\n var hideTimeout;\n var scheduleHideAnimationFrame;\n var isVisibleFromClick = false;\n var didHideDueToDocumentMouseDown = false;\n var didTouchMove = false;\n var ignoreOnFirstUpdate = false;\n var lastTriggerEvent;\n var currentTransitionEndListener;\n var onFirstUpdate;\n var listeners = [];\n var debouncedOnMouseMove = debounce$1(onMouseMove, props.interactiveDebounce);\n var currentTarget; // ===========================================================================\n // 🔑 Public members\n // ===========================================================================\n\n var id = idCounter++;\n var popperInstance = null;\n var plugins = unique(props.plugins);\n var state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false\n };\n var instance = {\n // properties\n id: id,\n reference: reference,\n popper: div(),\n popperInstance: popperInstance,\n props: props,\n state: state,\n plugins: plugins,\n // methods\n clearDelayTimeouts: clearDelayTimeouts,\n setProps: setProps,\n setContent: setContent,\n show: show,\n hide: hide,\n hideWithInteractivity: hideWithInteractivity,\n enable: enable,\n disable: disable,\n unmount: unmount,\n destroy: destroy\n }; // TODO: Investigate why this early return causes a TDZ error in the tests —\n // it doesn't seem to happen in the browser\n\n /* istanbul ignore if */\n\n if (!props.render) {\n\n return instance;\n } // ===========================================================================\n // Initial mutations\n // ===========================================================================\n\n\n var _props$render = props.render(instance),\n popper = _props$render.popper,\n onUpdate = _props$render.onUpdate;\n\n popper.setAttribute('data-tippy-root', '');\n popper.id = \"tippy-\" + instance.id;\n instance.popper = popper;\n reference._tippy = instance;\n popper._tippy = instance;\n var pluginsHooks = plugins.map(function (plugin) {\n return plugin.fn(instance);\n });\n var hasAriaExpanded = reference.hasAttribute('aria-expanded');\n addListeners();\n handleAriaExpandedAttribute();\n handleStyles();\n invokeHook('onCreate', [instance]);\n\n if (props.showOnCreate) {\n scheduleShow();\n } // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n\n\n popper.addEventListener('mouseenter', function () {\n if (instance.props.interactive && instance.state.isVisible) {\n instance.clearDelayTimeouts();\n }\n });\n popper.addEventListener('mouseleave', function () {\n if (instance.props.interactive && instance.props.trigger.indexOf('mouseenter') >= 0) {\n getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n }\n });\n return instance; // ===========================================================================\n // 🔒 Private methods\n // ===========================================================================\n\n function getNormalizedTouchSettings() {\n var touch = instance.props.touch;\n return Array.isArray(touch) ? touch : [touch, 0];\n }\n\n function getIsCustomTouchBehavior() {\n return getNormalizedTouchSettings()[0] === 'hold';\n }\n\n function getIsDefaultRenderFn() {\n var _instance$props$rende;\n\n // @ts-ignore\n return !!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy);\n }\n\n function getCurrentTarget() {\n return currentTarget || reference;\n }\n\n function getDocument() {\n var parent = getCurrentTarget().parentNode;\n return parent ? getOwnerDocument(parent) : document;\n }\n\n function getDefaultTemplateChildren() {\n return getChildren(popper);\n }\n\n function getDelay(isShow) {\n // For touch or keyboard input, force `0` delay for UX reasons\n // Also if the instance is mounted but not visible (transitioning out),\n // ignore delay\n if (instance.state.isMounted && !instance.state.isVisible || currentInput.isTouch || lastTriggerEvent && lastTriggerEvent.type === 'focus') {\n return 0;\n }\n\n return getValueAtIndexOrReturn(instance.props.delay, isShow ? 0 : 1, defaultProps.delay);\n }\n\n function handleStyles(fromHide) {\n if (fromHide === void 0) {\n fromHide = false;\n }\n\n popper.style.pointerEvents = instance.props.interactive && !fromHide ? '' : 'none';\n popper.style.zIndex = \"\" + instance.props.zIndex;\n }\n\n function invokeHook(hook, args, shouldInvokePropsHook) {\n if (shouldInvokePropsHook === void 0) {\n shouldInvokePropsHook = true;\n }\n\n pluginsHooks.forEach(function (pluginHooks) {\n if (pluginHooks[hook]) {\n pluginHooks[hook].apply(pluginHooks, args);\n }\n });\n\n if (shouldInvokePropsHook) {\n var _instance$props;\n\n (_instance$props = instance.props)[hook].apply(_instance$props, args);\n }\n }\n\n function handleAriaContentAttribute() {\n var aria = instance.props.aria;\n\n if (!aria.content) {\n return;\n }\n\n var attr = \"aria-\" + aria.content;\n var id = popper.id;\n var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n nodes.forEach(function (node) {\n var currentValue = node.getAttribute(attr);\n\n if (instance.state.isVisible) {\n node.setAttribute(attr, currentValue ? currentValue + \" \" + id : id);\n } else {\n var nextValue = currentValue && currentValue.replace(id, '').trim();\n\n if (nextValue) {\n node.setAttribute(attr, nextValue);\n } else {\n node.removeAttribute(attr);\n }\n }\n });\n }\n\n function handleAriaExpandedAttribute() {\n if (hasAriaExpanded || !instance.props.aria.expanded) {\n return;\n }\n\n var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n nodes.forEach(function (node) {\n if (instance.props.interactive) {\n node.setAttribute('aria-expanded', instance.state.isVisible && node === getCurrentTarget() ? 'true' : 'false');\n } else {\n node.removeAttribute('aria-expanded');\n }\n });\n }\n\n function cleanupInteractiveMouseListeners() {\n getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners = mouseMoveListeners.filter(function (listener) {\n return listener !== debouncedOnMouseMove;\n });\n }\n\n function onDocumentPress(event) {\n // Moved finger to scroll instead of an intentional tap outside\n if (currentInput.isTouch) {\n if (didTouchMove || event.type === 'mousedown') {\n return;\n }\n }\n\n var actualTarget = event.composedPath && event.composedPath()[0] || event.target; // Clicked on interactive popper\n\n if (instance.props.interactive && actualContains(popper, actualTarget)) {\n return;\n } // Clicked on the event listeners target\n\n\n if (normalizeToArray(instance.props.triggerTarget || reference).some(function (el) {\n return actualContains(el, actualTarget);\n })) {\n if (currentInput.isTouch) {\n return;\n }\n\n if (instance.state.isVisible && instance.props.trigger.indexOf('click') >= 0) {\n return;\n }\n } else {\n invokeHook('onClickOutside', [instance, event]);\n }\n\n if (instance.props.hideOnClick === true) {\n instance.clearDelayTimeouts();\n instance.hide(); // `mousedown` event is fired right before `focus` if pressing the\n // currentTarget. This lets a tippy with `focus` trigger know that it\n // should not show\n\n didHideDueToDocumentMouseDown = true;\n setTimeout(function () {\n didHideDueToDocumentMouseDown = false;\n }); // The listener gets added in `scheduleShow()`, but this may be hiding it\n // before it shows, and hide()'s early bail-out behavior can prevent it\n // from being cleaned up\n\n if (!instance.state.isMounted) {\n removeDocumentPress();\n }\n }\n }\n\n function onTouchMove() {\n didTouchMove = true;\n }\n\n function onTouchStart() {\n didTouchMove = false;\n }\n\n function addDocumentPress() {\n var doc = getDocument();\n doc.addEventListener('mousedown', onDocumentPress, true);\n doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function removeDocumentPress() {\n var doc = getDocument();\n doc.removeEventListener('mousedown', onDocumentPress, true);\n doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n }\n\n function onTransitionedOut(duration, callback) {\n onTransitionEnd(duration, function () {\n if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {\n callback();\n }\n });\n }\n\n function onTransitionedIn(duration, callback) {\n onTransitionEnd(duration, callback);\n }\n\n function onTransitionEnd(duration, callback) {\n var box = getDefaultTemplateChildren().box;\n\n function listener(event) {\n if (event.target === box) {\n updateTransitionEndListener(box, 'remove', listener);\n callback();\n }\n } // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n\n\n if (duration === 0) {\n return callback();\n }\n\n updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n updateTransitionEndListener(box, 'add', listener);\n currentTransitionEndListener = listener;\n }\n\n function on(eventType, handler, options) {\n if (options === void 0) {\n options = false;\n }\n\n var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n nodes.forEach(function (node) {\n node.addEventListener(eventType, handler, options);\n listeners.push({\n node: node,\n eventType: eventType,\n handler: handler,\n options: options\n });\n });\n }\n\n function addListeners() {\n if (getIsCustomTouchBehavior()) {\n on('touchstart', onTrigger, {\n passive: true\n });\n on('touchend', onMouseLeave, {\n passive: true\n });\n }\n\n splitBySpaces(instance.props.trigger).forEach(function (eventType) {\n if (eventType === 'manual') {\n return;\n }\n\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave);\n break;\n\n case 'focus':\n on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut);\n break;\n\n case 'focusin':\n on('focusout', onBlurOrFocusOut);\n break;\n }\n });\n }\n\n function removeListeners() {\n listeners.forEach(function (_ref) {\n var node = _ref.node,\n eventType = _ref.eventType,\n handler = _ref.handler,\n options = _ref.options;\n node.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n\n function onTrigger(event) {\n var _lastTriggerEvent;\n\n var shouldScheduleClickHide = false;\n\n if (!instance.state.isEnabled || isEventListenerStopped(event) || didHideDueToDocumentMouseDown) {\n return;\n }\n\n var wasFocused = ((_lastTriggerEvent = lastTriggerEvent) == null ? void 0 : _lastTriggerEvent.type) === 'focus';\n lastTriggerEvent = event;\n currentTarget = event.currentTarget;\n handleAriaExpandedAttribute();\n\n if (!instance.state.isVisible && isMouseEvent(event)) {\n // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n mouseMoveListeners.forEach(function (listener) {\n return listener(event);\n });\n } // Toggle show/hide when clicking click-triggered tooltips\n\n\n if (event.type === 'click' && (instance.props.trigger.indexOf('mouseenter') < 0 || isVisibleFromClick) && instance.props.hideOnClick !== false && instance.state.isVisible) {\n shouldScheduleClickHide = true;\n } else {\n scheduleShow(event);\n }\n\n if (event.type === 'click') {\n isVisibleFromClick = !shouldScheduleClickHide;\n }\n\n if (shouldScheduleClickHide && !wasFocused) {\n scheduleHide(event);\n }\n }\n\n function onMouseMove(event) {\n var target = event.target;\n var isCursorOverReferenceOrPopper = getCurrentTarget().contains(target) || popper.contains(target);\n\n if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n return;\n }\n\n var popperTreeData = getNestedPopperTree().concat(popper).map(function (popper) {\n var _instance$popperInsta;\n\n var instance = popper._tippy;\n var state = (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.state;\n\n if (state) {\n return {\n popperRect: popper.getBoundingClientRect(),\n popperState: state,\n props: props\n };\n }\n\n return null;\n }).filter(Boolean);\n\n if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n cleanupInteractiveMouseListeners();\n scheduleHide(event);\n }\n }\n\n function onMouseLeave(event) {\n var shouldBail = isEventListenerStopped(event) || instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick;\n\n if (shouldBail) {\n return;\n }\n\n if (instance.props.interactive) {\n instance.hideWithInteractivity(event);\n return;\n }\n\n scheduleHide(event);\n }\n\n function onBlurOrFocusOut(event) {\n if (instance.props.trigger.indexOf('focusin') < 0 && event.target !== getCurrentTarget()) {\n return;\n } // If focus was moved to within the popper\n\n\n if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {\n return;\n }\n\n scheduleHide(event);\n }\n\n function isEventListenerStopped(event) {\n return currentInput.isTouch ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0 : false;\n }\n\n function createPopperInstance() {\n destroyPopperInstance();\n var _instance$props2 = instance.props,\n popperOptions = _instance$props2.popperOptions,\n placement = _instance$props2.placement,\n offset = _instance$props2.offset,\n getReferenceClientRect = _instance$props2.getReferenceClientRect,\n moveTransition = _instance$props2.moveTransition;\n var arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n var computedReference = getReferenceClientRect ? {\n getBoundingClientRect: getReferenceClientRect,\n contextElement: getReferenceClientRect.contextElement || getCurrentTarget()\n } : reference;\n var tippyModifier = {\n name: '$$tippy',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn: function fn(_ref2) {\n var state = _ref2.state;\n\n if (getIsDefaultRenderFn()) {\n var _getDefaultTemplateCh = getDefaultTemplateChildren(),\n box = _getDefaultTemplateCh.box;\n\n ['placement', 'reference-hidden', 'escaped'].forEach(function (attr) {\n if (attr === 'placement') {\n box.setAttribute('data-placement', state.placement);\n } else {\n if (state.attributes.popper[\"data-popper-\" + attr]) {\n box.setAttribute(\"data-\" + attr, '');\n } else {\n box.removeAttribute(\"data-\" + attr);\n }\n }\n });\n state.attributes.popper = {};\n }\n }\n };\n var modifiers = [{\n name: 'offset',\n options: {\n offset: offset\n }\n }, {\n name: 'preventOverflow',\n options: {\n padding: {\n top: 2,\n bottom: 2,\n left: 5,\n right: 5\n }\n }\n }, {\n name: 'flip',\n options: {\n padding: 5\n }\n }, {\n name: 'computeStyles',\n options: {\n adaptive: !moveTransition\n }\n }, tippyModifier];\n\n if (getIsDefaultRenderFn() && arrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrow,\n padding: 3\n }\n });\n }\n\n modifiers.push.apply(modifiers, (popperOptions == null ? void 0 : popperOptions.modifiers) || []);\n instance.popperInstance = createPopper(computedReference, popper, Object.assign({}, popperOptions, {\n placement: placement,\n onFirstUpdate: onFirstUpdate,\n modifiers: modifiers\n }));\n }\n\n function destroyPopperInstance() {\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n instance.popperInstance = null;\n }\n }\n\n function mount() {\n var appendTo = instance.props.appendTo;\n var parentNode; // By default, we'll append the popper to the triggerTargets's parentNode so\n // it's directly after the reference element so the elements inside the\n // tippy can be tabbed to\n // If there are clipping issues, the user can specify a different appendTo\n // and ensure focus management is handled correctly manually\n\n var node = getCurrentTarget();\n\n if (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO || appendTo === 'parent') {\n parentNode = node.parentNode;\n } else {\n parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n } // The popper element needs to exist on the DOM before its position can be\n // updated as Popper needs to read its dimensions\n\n\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper);\n }\n\n instance.state.isMounted = true;\n createPopperInstance();\n }\n\n function getNestedPopperTree() {\n return arrayFrom(popper.querySelectorAll('[data-tippy-root]'));\n }\n\n function scheduleShow(event) {\n instance.clearDelayTimeouts();\n\n if (event) {\n invokeHook('onTrigger', [instance, event]);\n }\n\n addDocumentPress();\n var delay = getDelay(true);\n\n var _getNormalizedTouchSe = getNormalizedTouchSettings(),\n touchValue = _getNormalizedTouchSe[0],\n touchDelay = _getNormalizedTouchSe[1];\n\n if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n delay = touchDelay;\n }\n\n if (delay) {\n showTimeout = setTimeout(function () {\n instance.show();\n }, delay);\n } else {\n instance.show();\n }\n }\n\n function scheduleHide(event) {\n instance.clearDelayTimeouts();\n invokeHook('onUntrigger', [instance, event]);\n\n if (!instance.state.isVisible) {\n removeDocumentPress();\n return;\n } // For interactive tippies, scheduleHide is added to a document.body handler\n // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n // events when trigger contains mouseenter and click, and the tip is\n // currently shown as a result of a click.\n\n\n if (instance.props.trigger.indexOf('mouseenter') >= 0 && instance.props.trigger.indexOf('click') >= 0 && ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 && isVisibleFromClick) {\n return;\n }\n\n var delay = getDelay(false);\n\n if (delay) {\n hideTimeout = setTimeout(function () {\n if (instance.state.isVisible) {\n instance.hide();\n }\n }, delay);\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrame = requestAnimationFrame(function () {\n instance.hide();\n });\n }\n } // ===========================================================================\n // 🔑 Public methods\n // ===========================================================================\n\n\n function enable() {\n instance.state.isEnabled = true;\n }\n\n function disable() {\n // Disabling the instance should also hide it\n // https://github.com/atomiks/tippy.js-react/issues/106\n instance.hide();\n instance.state.isEnabled = false;\n }\n\n function clearDelayTimeouts() {\n clearTimeout(showTimeout);\n clearTimeout(hideTimeout);\n cancelAnimationFrame(scheduleHideAnimationFrame);\n }\n\n function setProps(partialProps) {\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n invokeHook('onBeforeUpdate', [instance, partialProps]);\n removeListeners();\n var prevProps = instance.props;\n var nextProps = evaluateProps(reference, Object.assign({}, prevProps, removeUndefinedProps(partialProps), {\n ignoreAttributes: true\n }));\n instance.props = nextProps;\n addListeners();\n\n if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n cleanupInteractiveMouseListeners();\n debouncedOnMouseMove = debounce$1(onMouseMove, nextProps.interactiveDebounce);\n } // Ensure stale aria-expanded attributes are removed\n\n\n if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n normalizeToArray(prevProps.triggerTarget).forEach(function (node) {\n node.removeAttribute('aria-expanded');\n });\n } else if (nextProps.triggerTarget) {\n reference.removeAttribute('aria-expanded');\n }\n\n handleAriaExpandedAttribute();\n handleStyles();\n\n if (onUpdate) {\n onUpdate(prevProps, nextProps);\n }\n\n if (instance.popperInstance) {\n createPopperInstance(); // Fixes an issue with nested tippies if they are all getting re-rendered,\n // and the nested ones get re-rendered first.\n // https://github.com/atomiks/tippyjs-react/issues/177\n // TODO: find a cleaner / more efficient solution(!)\n\n getNestedPopperTree().forEach(function (nestedPopper) {\n // React (and other UI libs likely) requires a rAF wrapper as it flushes\n // its work in one\n requestAnimationFrame(nestedPopper._tippy.popperInstance.forceUpdate);\n });\n }\n\n invokeHook('onAfterUpdate', [instance, partialProps]);\n }\n\n function setContent(content) {\n instance.setProps({\n content: content\n });\n }\n\n function show() {\n\n\n var isAlreadyVisible = instance.state.isVisible;\n var isDestroyed = instance.state.isDestroyed;\n var isDisabled = !instance.state.isEnabled;\n var isTouchAndTouchDisabled = currentInput.isTouch && !instance.props.touch;\n var duration = getValueAtIndexOrReturn(instance.props.duration, 0, defaultProps.duration);\n\n if (isAlreadyVisible || isDestroyed || isDisabled || isTouchAndTouchDisabled) {\n return;\n } // Normalize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. <span>) is recommended.\n\n\n if (getCurrentTarget().hasAttribute('disabled')) {\n return;\n }\n\n invokeHook('onShow', [instance], false);\n\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n instance.state.isVisible = true;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'visible';\n }\n\n handleStyles();\n addDocumentPress();\n\n if (!instance.state.isMounted) {\n popper.style.transition = 'none';\n } // If flipping to the opposite side after hiding at least once, the\n // animation will use the wrong placement without resetting the duration\n\n\n if (getIsDefaultRenderFn()) {\n var _getDefaultTemplateCh2 = getDefaultTemplateChildren(),\n box = _getDefaultTemplateCh2.box,\n content = _getDefaultTemplateCh2.content;\n\n setTransitionDuration([box, content], 0);\n }\n\n onFirstUpdate = function onFirstUpdate() {\n var _instance$popperInsta2;\n\n if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n return;\n }\n\n ignoreOnFirstUpdate = true; // reflow\n\n void popper.offsetHeight;\n popper.style.transition = instance.props.moveTransition;\n\n if (getIsDefaultRenderFn() && instance.props.animation) {\n var _getDefaultTemplateCh3 = getDefaultTemplateChildren(),\n _box = _getDefaultTemplateCh3.box,\n _content = _getDefaultTemplateCh3.content;\n\n setTransitionDuration([_box, _content], duration);\n setVisibilityState([_box, _content], 'visible');\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n pushIfUnique(mountedInstances, instance); // certain modifiers (e.g. `maxSize`) require a second update after the\n // popper has been positioned for the first time\n\n (_instance$popperInsta2 = instance.popperInstance) == null ? void 0 : _instance$popperInsta2.forceUpdate();\n invokeHook('onMount', [instance]);\n\n if (instance.props.animation && getIsDefaultRenderFn()) {\n onTransitionedIn(duration, function () {\n instance.state.isShown = true;\n invokeHook('onShown', [instance]);\n });\n }\n };\n\n mount();\n }\n\n function hide() {\n\n\n var isAlreadyHidden = !instance.state.isVisible;\n var isDestroyed = instance.state.isDestroyed;\n var isDisabled = !instance.state.isEnabled;\n var duration = getValueAtIndexOrReturn(instance.props.duration, 1, defaultProps.duration);\n\n if (isAlreadyHidden || isDestroyed || isDisabled) {\n return;\n }\n\n invokeHook('onHide', [instance], false);\n\n if (instance.props.onHide(instance) === false) {\n return;\n }\n\n instance.state.isVisible = false;\n instance.state.isShown = false;\n ignoreOnFirstUpdate = false;\n isVisibleFromClick = false;\n\n if (getIsDefaultRenderFn()) {\n popper.style.visibility = 'hidden';\n }\n\n cleanupInteractiveMouseListeners();\n removeDocumentPress();\n handleStyles(true);\n\n if (getIsDefaultRenderFn()) {\n var _getDefaultTemplateCh4 = getDefaultTemplateChildren(),\n box = _getDefaultTemplateCh4.box,\n content = _getDefaultTemplateCh4.content;\n\n if (instance.props.animation) {\n setTransitionDuration([box, content], duration);\n setVisibilityState([box, content], 'hidden');\n }\n }\n\n handleAriaContentAttribute();\n handleAriaExpandedAttribute();\n\n if (instance.props.animation) {\n if (getIsDefaultRenderFn()) {\n onTransitionedOut(duration, instance.unmount);\n }\n } else {\n instance.unmount();\n }\n }\n\n function hideWithInteractivity(event) {\n\n getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n debouncedOnMouseMove(event);\n }\n\n function unmount() {\n\n if (instance.state.isVisible) {\n instance.hide();\n }\n\n if (!instance.state.isMounted) {\n return;\n }\n\n destroyPopperInstance(); // If a popper is not interactive, it will be appended outside the popper\n // tree by default. This seems mainly for interactive tippies, but we should\n // find a workaround if possible\n\n getNestedPopperTree().forEach(function (nestedPopper) {\n nestedPopper._tippy.unmount();\n });\n\n if (popper.parentNode) {\n popper.parentNode.removeChild(popper);\n }\n\n mountedInstances = mountedInstances.filter(function (i) {\n return i !== instance;\n });\n instance.state.isMounted = false;\n invokeHook('onHidden', [instance]);\n }\n\n function destroy() {\n\n if (instance.state.isDestroyed) {\n return;\n }\n\n instance.clearDelayTimeouts();\n instance.unmount();\n removeListeners();\n delete reference._tippy;\n instance.state.isDestroyed = true;\n invokeHook('onDestroy', [instance]);\n }\n}\n\nfunction tippy(targets, optionalProps) {\n if (optionalProps === void 0) {\n optionalProps = {};\n }\n\n var plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n bindGlobalEventListeners();\n var passedProps = Object.assign({}, optionalProps, {\n plugins: plugins\n });\n var elements = getArrayOfElements(targets);\n\n var instances = elements.reduce(function (acc, reference) {\n var instance = reference && createTippy(reference, passedProps);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n }, []);\n return isElement$1(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\nvar hideAll = function hideAll(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n excludedReferenceOrInstance = _ref.exclude,\n duration = _ref.duration;\n\n mountedInstances.forEach(function (instance) {\n var isExcluded = false;\n\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : instance.popper === excludedReferenceOrInstance.popper;\n }\n\n if (!isExcluded) {\n var originalDuration = instance.props.duration;\n instance.setProps({\n duration: duration\n });\n instance.hide();\n\n if (!instance.state.isDestroyed) {\n instance.setProps({\n duration: originalDuration\n });\n }\n }\n });\n};\n\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\n\nvar applyStylesModifier = Object.assign({}, applyStyles$1, {\n effect: function effect(_ref) {\n var state = _ref.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n } // intentionally return no cleanup function\n // return () => { ... }\n\n }\n});\n\nvar createSingleton = function createSingleton(tippyInstances, optionalProps) {\n var _optionalProps$popper;\n\n if (optionalProps === void 0) {\n optionalProps = {};\n }\n\n var individualInstances = tippyInstances;\n var references = [];\n var triggerTargets = [];\n var currentTarget;\n var overrides = optionalProps.overrides;\n var interceptSetPropsCleanups = [];\n var shownOnCreate = false;\n\n function setTriggerTargets() {\n triggerTargets = individualInstances.map(function (instance) {\n return normalizeToArray(instance.props.triggerTarget || instance.reference);\n }).reduce(function (acc, item) {\n return acc.concat(item);\n }, []);\n }\n\n function setReferences() {\n references = individualInstances.map(function (instance) {\n return instance.reference;\n });\n }\n\n function enableInstances(isEnabled) {\n individualInstances.forEach(function (instance) {\n if (isEnabled) {\n instance.enable();\n } else {\n instance.disable();\n }\n });\n }\n\n function interceptSetProps(singleton) {\n return individualInstances.map(function (instance) {\n var originalSetProps = instance.setProps;\n\n instance.setProps = function (props) {\n originalSetProps(props);\n\n if (instance.reference === currentTarget) {\n singleton.setProps(props);\n }\n };\n\n return function () {\n instance.setProps = originalSetProps;\n };\n });\n } // have to pass singleton, as it maybe undefined on first call\n\n\n function prepareInstance(singleton, target) {\n var index = triggerTargets.indexOf(target); // bail-out\n\n if (target === currentTarget) {\n return;\n }\n\n currentTarget = target;\n var overrideProps = (overrides || []).concat('content').reduce(function (acc, prop) {\n acc[prop] = individualInstances[index].props[prop];\n return acc;\n }, {});\n singleton.setProps(Object.assign({}, overrideProps, {\n getReferenceClientRect: typeof overrideProps.getReferenceClientRect === 'function' ? overrideProps.getReferenceClientRect : function () {\n var _references$index;\n\n return (_references$index = references[index]) == null ? void 0 : _references$index.getBoundingClientRect();\n }\n }));\n }\n\n enableInstances(false);\n setReferences();\n setTriggerTargets();\n var plugin = {\n fn: function fn() {\n return {\n onDestroy: function onDestroy() {\n enableInstances(true);\n },\n onHidden: function onHidden() {\n currentTarget = null;\n },\n onClickOutside: function onClickOutside(instance) {\n if (instance.props.showOnCreate && !shownOnCreate) {\n shownOnCreate = true;\n currentTarget = null;\n }\n },\n onShow: function onShow(instance) {\n if (instance.props.showOnCreate && !shownOnCreate) {\n shownOnCreate = true;\n prepareInstance(instance, references[0]);\n }\n },\n onTrigger: function onTrigger(instance, event) {\n prepareInstance(instance, event.currentTarget);\n }\n };\n }\n };\n var singleton = tippy(div(), Object.assign({}, removeProperties(optionalProps, ['overrides']), {\n plugins: [plugin].concat(optionalProps.plugins || []),\n triggerTarget: triggerTargets,\n popperOptions: Object.assign({}, optionalProps.popperOptions, {\n modifiers: [].concat(((_optionalProps$popper = optionalProps.popperOptions) == null ? void 0 : _optionalProps$popper.modifiers) || [], [applyStylesModifier])\n })\n }));\n var originalShow = singleton.show;\n\n singleton.show = function (target) {\n originalShow(); // first time, showOnCreate or programmatic call with no params\n // default to showing first instance\n\n if (!currentTarget && target == null) {\n return prepareInstance(singleton, references[0]);\n } // triggered from event (do nothing as prepareInstance already called by onTrigger)\n // programmatic call with no params when already visible (do nothing again)\n\n\n if (currentTarget && target == null) {\n return;\n } // target is index of instance\n\n\n if (typeof target === 'number') {\n return references[target] && prepareInstance(singleton, references[target]);\n } // target is a child tippy instance\n\n\n if (individualInstances.indexOf(target) >= 0) {\n var ref = target.reference;\n return prepareInstance(singleton, ref);\n } // target is a ReferenceElement\n\n\n if (references.indexOf(target) >= 0) {\n return prepareInstance(singleton, target);\n }\n };\n\n singleton.showNext = function () {\n var first = references[0];\n\n if (!currentTarget) {\n return singleton.show(0);\n }\n\n var index = references.indexOf(currentTarget);\n singleton.show(references[index + 1] || first);\n };\n\n singleton.showPrevious = function () {\n var last = references[references.length - 1];\n\n if (!currentTarget) {\n return singleton.show(last);\n }\n\n var index = references.indexOf(currentTarget);\n var target = references[index - 1] || last;\n singleton.show(target);\n };\n\n var originalSetProps = singleton.setProps;\n\n singleton.setProps = function (props) {\n overrides = props.overrides || overrides;\n originalSetProps(props);\n };\n\n singleton.setInstances = function (nextInstances) {\n enableInstances(true);\n interceptSetPropsCleanups.forEach(function (fn) {\n return fn();\n });\n individualInstances = nextInstances;\n enableInstances(false);\n setReferences();\n setTriggerTargets();\n interceptSetPropsCleanups = interceptSetProps(singleton);\n singleton.setProps({\n triggerTarget: triggerTargets\n });\n };\n\n interceptSetPropsCleanups = interceptSetProps(singleton);\n return singleton;\n};\n\nvar animateFill = {\n name: 'animateFill',\n defaultValue: false,\n fn: function fn(instance) {\n var _instance$props$rende;\n\n // @ts-ignore\n if (!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy)) {\n\n return {};\n }\n\n var _getChildren = getChildren(instance.popper),\n box = _getChildren.box,\n content = _getChildren.content;\n\n var backdrop = instance.props.animateFill ? createBackdropElement() : null;\n return {\n onCreate: function onCreate() {\n if (backdrop) {\n box.insertBefore(backdrop, box.firstElementChild);\n box.setAttribute('data-animatefill', '');\n box.style.overflow = 'hidden';\n instance.setProps({\n arrow: false,\n animation: 'shift-away'\n });\n }\n },\n onMount: function onMount() {\n if (backdrop) {\n var transitionDuration = box.style.transitionDuration;\n var duration = Number(transitionDuration.replace('ms', '')); // The content should fade in after the backdrop has mostly filled the\n // tooltip element. `clip-path` is the other alternative but is not\n // well-supported and is buggy on some devices.\n\n content.style.transitionDelay = Math.round(duration / 10) + \"ms\";\n backdrop.style.transitionDuration = transitionDuration;\n setVisibilityState([backdrop], 'visible');\n }\n },\n onShow: function onShow() {\n if (backdrop) {\n backdrop.style.transitionDuration = '0ms';\n }\n },\n onHide: function onHide() {\n if (backdrop) {\n setVisibilityState([backdrop], 'hidden');\n }\n }\n };\n }\n};\n\nfunction createBackdropElement() {\n var backdrop = div();\n backdrop.className = BACKDROP_CLASS;\n setVisibilityState([backdrop], 'hidden');\n return backdrop;\n}\n\nvar mouseCoords = {\n clientX: 0,\n clientY: 0\n};\nvar activeInstances = [];\n\nfunction storeMouseCoords(_ref) {\n var clientX = _ref.clientX,\n clientY = _ref.clientY;\n mouseCoords = {\n clientX: clientX,\n clientY: clientY\n };\n}\n\nfunction addMouseCoordsListener(doc) {\n doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc) {\n doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nvar followCursor = {\n name: 'followCursor',\n defaultValue: false,\n fn: function fn(instance) {\n var reference = instance.reference;\n var doc = getOwnerDocument(instance.props.triggerTarget || reference);\n var isInternalUpdate = false;\n var wasFocusEvent = false;\n var isUnmounted = true;\n var prevProps = instance.props;\n\n function getIsInitialBehavior() {\n return instance.props.followCursor === 'initial' && instance.state.isVisible;\n }\n\n function addListener() {\n doc.addEventListener('mousemove', onMouseMove);\n }\n\n function removeListener() {\n doc.removeEventListener('mousemove', onMouseMove);\n }\n\n function unsetGetReferenceClientRect() {\n isInternalUpdate = true;\n instance.setProps({\n getReferenceClientRect: null\n });\n isInternalUpdate = false;\n }\n\n function onMouseMove(event) {\n // If the instance is interactive, avoid updating the position unless it's\n // over the reference element\n var isCursorOverReference = event.target ? reference.contains(event.target) : true;\n var followCursor = instance.props.followCursor;\n var clientX = event.clientX,\n clientY = event.clientY;\n var rect = reference.getBoundingClientRect();\n var relativeX = clientX - rect.left;\n var relativeY = clientY - rect.top;\n\n if (isCursorOverReference || !instance.props.interactive) {\n instance.setProps({\n // @ts-ignore - unneeded DOMRect properties\n getReferenceClientRect: function getReferenceClientRect() {\n var rect = reference.getBoundingClientRect();\n var x = clientX;\n var y = clientY;\n\n if (followCursor === 'initial') {\n x = rect.left + relativeX;\n y = rect.top + relativeY;\n }\n\n var top = followCursor === 'horizontal' ? rect.top : y;\n var right = followCursor === 'vertical' ? rect.right : x;\n var bottom = followCursor === 'horizontal' ? rect.bottom : y;\n var left = followCursor === 'vertical' ? rect.left : x;\n return {\n width: right - left,\n height: bottom - top,\n top: top,\n right: right,\n bottom: bottom,\n left: left\n };\n }\n });\n }\n }\n\n function create() {\n if (instance.props.followCursor) {\n activeInstances.push({\n instance: instance,\n doc: doc\n });\n addMouseCoordsListener(doc);\n }\n }\n\n function destroy() {\n activeInstances = activeInstances.filter(function (data) {\n return data.instance !== instance;\n });\n\n if (activeInstances.filter(function (data) {\n return data.doc === doc;\n }).length === 0) {\n removeMouseCoordsListener(doc);\n }\n }\n\n return {\n onCreate: create,\n onDestroy: destroy,\n onBeforeUpdate: function onBeforeUpdate() {\n prevProps = instance.props;\n },\n onAfterUpdate: function onAfterUpdate(_, _ref2) {\n var followCursor = _ref2.followCursor;\n\n if (isInternalUpdate) {\n return;\n }\n\n if (followCursor !== undefined && prevProps.followCursor !== followCursor) {\n destroy();\n\n if (followCursor) {\n create();\n\n if (instance.state.isMounted && !wasFocusEvent && !getIsInitialBehavior()) {\n addListener();\n }\n } else {\n removeListener();\n unsetGetReferenceClientRect();\n }\n }\n },\n onMount: function onMount() {\n if (instance.props.followCursor && !wasFocusEvent) {\n if (isUnmounted) {\n onMouseMove(mouseCoords);\n isUnmounted = false;\n }\n\n if (!getIsInitialBehavior()) {\n addListener();\n }\n }\n },\n onTrigger: function onTrigger(_, event) {\n if (isMouseEvent(event)) {\n mouseCoords = {\n clientX: event.clientX,\n clientY: event.clientY\n };\n }\n\n wasFocusEvent = event.type === 'focus';\n },\n onHidden: function onHidden() {\n if (instance.props.followCursor) {\n unsetGetReferenceClientRect();\n removeListener();\n isUnmounted = true;\n }\n }\n };\n }\n};\n\nfunction getProps(props, modifier) {\n var _props$popperOptions;\n\n return {\n popperOptions: Object.assign({}, props.popperOptions, {\n modifiers: [].concat((((_props$popperOptions = props.popperOptions) == null ? void 0 : _props$popperOptions.modifiers) || []).filter(function (_ref) {\n var name = _ref.name;\n return name !== modifier.name;\n }), [modifier])\n })\n };\n}\n\nvar inlinePositioning = {\n name: 'inlinePositioning',\n defaultValue: false,\n fn: function fn(instance) {\n var reference = instance.reference;\n\n function isEnabled() {\n return !!instance.props.inlinePositioning;\n }\n\n var placement;\n var cursorRectIndex = -1;\n var isInternalUpdate = false;\n var triedPlacements = [];\n var modifier = {\n name: 'tippyInlinePositioning',\n enabled: true,\n phase: 'afterWrite',\n fn: function fn(_ref2) {\n var state = _ref2.state;\n\n if (isEnabled()) {\n if (triedPlacements.indexOf(state.placement) !== -1) {\n triedPlacements = [];\n }\n\n if (placement !== state.placement && triedPlacements.indexOf(state.placement) === -1) {\n triedPlacements.push(state.placement);\n instance.setProps({\n // @ts-ignore - unneeded DOMRect properties\n getReferenceClientRect: function getReferenceClientRect() {\n return _getReferenceClientRect(state.placement);\n }\n });\n }\n\n placement = state.placement;\n }\n }\n };\n\n function _getReferenceClientRect(placement) {\n return getInlineBoundingClientRect(getBasePlacement$1(placement), reference.getBoundingClientRect(), arrayFrom(reference.getClientRects()), cursorRectIndex);\n }\n\n function setInternalProps(partialProps) {\n isInternalUpdate = true;\n instance.setProps(partialProps);\n isInternalUpdate = false;\n }\n\n function addModifier() {\n if (!isInternalUpdate) {\n setInternalProps(getProps(instance.props, modifier));\n }\n }\n\n return {\n onCreate: addModifier,\n onAfterUpdate: addModifier,\n onTrigger: function onTrigger(_, event) {\n if (isMouseEvent(event)) {\n var rects = arrayFrom(instance.reference.getClientRects());\n var cursorRect = rects.find(function (rect) {\n return rect.left - 2 <= event.clientX && rect.right + 2 >= event.clientX && rect.top - 2 <= event.clientY && rect.bottom + 2 >= event.clientY;\n });\n var index = rects.indexOf(cursorRect);\n cursorRectIndex = index > -1 ? index : cursorRectIndex;\n }\n },\n onHidden: function onHidden() {\n cursorRectIndex = -1;\n }\n };\n }\n};\nfunction getInlineBoundingClientRect(currentBasePlacement, boundingRect, clientRects, cursorRectIndex) {\n // Not an inline element, or placement is not yet known\n if (clientRects.length < 2 || currentBasePlacement === null) {\n return boundingRect;\n } // There are two rects and they are disjoined\n\n\n if (clientRects.length === 2 && cursorRectIndex >= 0 && clientRects[0].left > clientRects[1].right) {\n return clientRects[cursorRectIndex] || boundingRect;\n }\n\n switch (currentBasePlacement) {\n case 'top':\n case 'bottom':\n {\n var firstRect = clientRects[0];\n var lastRect = clientRects[clientRects.length - 1];\n var isTop = currentBasePlacement === 'top';\n var top = firstRect.top;\n var bottom = lastRect.bottom;\n var left = isTop ? firstRect.left : lastRect.left;\n var right = isTop ? firstRect.right : lastRect.right;\n var width = right - left;\n var height = bottom - top;\n return {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n }\n\n case 'left':\n case 'right':\n {\n var minLeft = Math.min.apply(Math, clientRects.map(function (rects) {\n return rects.left;\n }));\n var maxRight = Math.max.apply(Math, clientRects.map(function (rects) {\n return rects.right;\n }));\n var measureRects = clientRects.filter(function (rect) {\n return currentBasePlacement === 'left' ? rect.left === minLeft : rect.right === maxRight;\n });\n var _top = measureRects[0].top;\n var _bottom = measureRects[measureRects.length - 1].bottom;\n var _left = minLeft;\n var _right = maxRight;\n\n var _width = _right - _left;\n\n var _height = _bottom - _top;\n\n return {\n top: _top,\n bottom: _bottom,\n left: _left,\n right: _right,\n width: _width,\n height: _height\n };\n }\n\n default:\n {\n return boundingRect;\n }\n }\n}\n\nvar sticky = {\n name: 'sticky',\n defaultValue: false,\n fn: function fn(instance) {\n var reference = instance.reference,\n popper = instance.popper;\n\n function getReference() {\n return instance.popperInstance ? instance.popperInstance.state.elements.reference : reference;\n }\n\n function shouldCheck(value) {\n return instance.props.sticky === true || instance.props.sticky === value;\n }\n\n var prevRefRect = null;\n var prevPopRect = null;\n\n function updatePosition() {\n var currentRefRect = shouldCheck('reference') ? getReference().getBoundingClientRect() : null;\n var currentPopRect = shouldCheck('popper') ? popper.getBoundingClientRect() : null;\n\n if (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect) || currentPopRect && areRectsDifferent(prevPopRect, currentPopRect)) {\n if (instance.popperInstance) {\n instance.popperInstance.update();\n }\n }\n\n prevRefRect = currentRefRect;\n prevPopRect = currentPopRect;\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition);\n }\n }\n\n return {\n onMount: function onMount() {\n if (instance.props.sticky) {\n updatePosition();\n }\n }\n };\n }\n};\n\nfunction areRectsDifferent(rectA, rectB) {\n if (rectA && rectB) {\n return rectA.top !== rectB.top || rectA.right !== rectB.right || rectA.bottom !== rectB.bottom || rectA.left !== rectB.left;\n }\n\n return true;\n}\n\ntippy.setDefaultProps({\n render: render\n});\n\ntippy.setDefaultProps({\r\n //@ts-ignore\r\n onShow: instance => {\r\n if (!instance.props.content)\r\n return false;\r\n },\r\n});\r\nconst isComponentInstance = (value) => {\r\n return value instanceof Object && '$' in value && '$el' in value;\r\n};\r\nfunction useTippy(el, opts = {}, settings = { mount: true, appName: 'Tippy' }) {\r\n settings = Object.assign({ mount: true, appName: 'Tippy' }, settings);\r\n const vm = getCurrentInstance();\r\n const instance = ref();\r\n const state = ref({\r\n isEnabled: false,\r\n isVisible: false,\r\n isDestroyed: false,\r\n isMounted: false,\r\n isShown: false,\r\n });\r\n const headlessApp = shallowRef();\r\n let container = null;\r\n const getContainer = () => {\r\n if (container)\r\n return container;\r\n container = document.createDocumentFragment();\r\n return container;\r\n };\r\n const getContent = (content) => {\r\n let newContent;\r\n let unwrappedContent = isRef(content)\r\n ? content.value\r\n : content;\r\n if (isVNode(unwrappedContent)) {\r\n if (!headlessApp.value) {\r\n headlessApp.value = createApp({\r\n name: settings.appName,\r\n setup: () => {\r\n return () => isRef(content) ? content.value : content;\r\n },\r\n });\r\n if (vm) {\r\n Object.assign(headlessApp.value._context, vm.appContext);\r\n }\r\n headlessApp.value.mount(getContainer());\r\n }\r\n newContent = () => getContainer();\r\n }\r\n else if (typeof unwrappedContent === 'object') {\r\n if (!headlessApp.value) {\r\n headlessApp.value = createApp({\r\n name: settings.appName,\r\n setup: () => {\r\n return () => h(isRef(content) ? content.value : content);\r\n },\r\n });\r\n if (vm) {\r\n Object.assign(headlessApp.value._context, vm.appContext);\r\n }\r\n headlessApp.value.mount(getContainer());\r\n }\r\n newContent = () => getContainer();\r\n }\r\n else {\r\n newContent = unwrappedContent;\r\n }\r\n return newContent;\r\n };\r\n const getProps = (opts) => {\r\n let options = {};\r\n if (isRef(opts)) {\r\n options = opts.value || {};\r\n }\r\n else if (isReactive(opts)) {\r\n options = { ...opts };\r\n }\r\n else {\r\n options = { ...opts };\r\n }\r\n if (options.content) {\r\n options.content = getContent(options.content);\r\n }\r\n if (options.triggerTarget) {\r\n options.triggerTarget = isRef(options.triggerTarget)\r\n ? options.triggerTarget.value\r\n : options.triggerTarget;\r\n }\r\n if (!options.plugins || !Array.isArray(options.plugins)) {\r\n options.plugins = [];\r\n }\r\n options.plugins = options.plugins.filter((plugin) => plugin.name !== 'vueTippyReactiveState');\r\n options.plugins.push({\r\n name: 'vueTippyReactiveState',\r\n fn: () => {\r\n return {\r\n onCreate() {\r\n state.value.isEnabled = true;\r\n },\r\n onMount() {\r\n state.value.isMounted = true;\r\n },\r\n onShow() {\r\n state.value.isMounted = true;\r\n state.value.isVisible = true;\r\n },\r\n onShown() {\r\n state.value.isShown = true;\r\n },\r\n onHide() {\r\n state.value.isMounted = false;\r\n state.value.isVisible = false;\r\n },\r\n onHidden() {\r\n state.value.isShown = false;\r\n },\r\n onUnmounted() {\r\n state.value.isMounted = false;\r\n },\r\n onDestroy() {\r\n state.value.isDestroyed = true;\r\n },\r\n };\r\n }\r\n });\r\n return options;\r\n };\r\n const refresh = () => {\r\n if (!instance.value)\r\n return;\r\n instance.value.setProps(getProps(opts));\r\n };\r\n const refreshContent = () => {\r\n if (!instance.value || !opts.content)\r\n return;\r\n instance.value.setContent(getContent(opts.content));\r\n };\r\n const setContent = (value) => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.setContent(getContent(value));\r\n };\r\n const setProps = (value) => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.setProps(getProps(value));\r\n };\r\n const destroy = () => {\r\n var _a;\r\n if (instance.value) {\r\n instance.value.destroy();\r\n instance.value = undefined;\r\n }\r\n container = null;\r\n (_a = headlessApp.value) === null || _a === void 0 ? void 0 : _a.unmount();\r\n headlessApp.value = undefined;\r\n };\r\n const show = () => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.show();\r\n };\r\n const hide = () => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.hide();\r\n };\r\n const disable = () => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.disable();\r\n state.value.isEnabled = false;\r\n };\r\n const enable = () => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.enable();\r\n state.value.isEnabled = true;\r\n };\r\n const unmount = () => {\r\n var _a;\r\n (_a = instance.value) === null || _a === void 0 ? void 0 : _a.unmount();\r\n };\r\n const mount = () => {\r\n if (!el)\r\n return;\r\n let target = isRef(el) ? el.value : el;\r\n if (typeof target === 'function')\r\n target = target();\r\n if (isComponentInstance(target)) {\r\n target = target.$el;\r\n }\r\n if (target) {\r\n //@ts-ignore\r\n instance.value = tippy(target, getProps(opts));\r\n //@ts-ignore\r\n target.$tippy = response;\r\n }\r\n };\r\n const response = {\r\n tippy: instance,\r\n refresh,\r\n refreshContent,\r\n setContent,\r\n setProps,\r\n destroy,\r\n hide,\r\n show,\r\n disable,\r\n enable,\r\n unmount,\r\n mount,\r\n state,\r\n };\r\n if (settings.mount) {\r\n if (vm) {\r\n if (vm.isMounted) {\r\n mount();\r\n }\r\n else {\r\n onMounted(mount);\r\n }\r\n }\r\n else {\r\n mount();\r\n }\r\n }\r\n if (vm) {\r\n onUnmounted(() => {\r\n destroy();\r\n });\r\n }\r\n if (isRef(opts) || isReactive(opts)) {\r\n watch(opts, refresh, { immediate: false });\r\n }\r\n else if (isRef(opts.content)) {\r\n watch(opts.content, refreshContent, { immediate: false });\r\n }\r\n return response;\r\n}\n\nfunction useTippyComponent(opts = {}, children) {\r\n const instance = ref();\r\n return {\r\n instance,\r\n TippyComponent: h(TippyComponent, {\r\n ...opts,\r\n onVnodeMounted: (vnode) => {\r\n //@ts-ignore\r\n instance.value = vnode.component.ctx;\r\n },\r\n }, children),\r\n };\r\n}\n\nfunction useSingleton(instances, optionalProps) {\r\n const singleton = ref();\r\n onMounted(() => {\r\n const pendingTippyInstances = Array.isArray(instances)\r\n ? instances.map(i => i.value)\r\n : typeof instances === 'function'\r\n ? instances()\r\n : instances.value;\r\n const tippyInstances = pendingTippyInstances\r\n .map((instance) => {\r\n if (instance instanceof Element) {\r\n //@ts-ignore\r\n return instance._tippy;\r\n }\r\n return instance;\r\n })\r\n .filter(Boolean);\r\n singleton.value = createSingleton(tippyInstances, optionalProps\r\n ? { allowHTML: true, ...optionalProps }\r\n : { allowHTML: true });\r\n });\r\n return {\r\n singleton,\r\n };\r\n}\n\nfunction toValue(r) {\r\n return typeof r === 'function'\r\n ? r()\r\n : unref(r);\r\n}\r\nfunction unrefElement(elRef) {\r\n var _a, _b;\r\n const plain = toValue(elRef);\r\n return (_b = (_a = plain) === null || _a === void 0 ? void 0 : _a.$el) !== null && _b !== void 0 ? _b : plain;\r\n}\r\nconst TippyComponent = defineComponent({\r\n props: {\r\n to: {\r\n type: [String, Function],\r\n },\r\n tag: {\r\n type: [String, Object],\r\n default: 'span'\r\n },\r\n contentTag: {\r\n type: [String, Object],\r\n default: 'span'\r\n },\r\n contentClass: {\r\n type: String,\r\n default: null\r\n },\r\n appendTo: { default: () => tippy.defaultProps['appendTo'] },\r\n aria: { default: () => tippy.defaultProps['aria'] },\r\n delay: { default: () => tippy.defaultProps['delay'] },\r\n duration: { default: () => tippy.defaultProps['duration'] },\r\n getReferenceClientRect: { default: () => tippy.defaultProps['getReferenceClientRect'] },\r\n hideOnClick: { type: [Boolean, String], default: () => tippy.defaultProps['hideOnClick'] },\r\n ignoreAttributes: { type: Boolean, default: () => tippy.defaultProps['ignoreAttributes'] },\r\n interactive: { type: Boolean, default: () => tippy.defaultProps['interactive'] },\r\n interactiveBorder: { default: () => tippy.defaultProps['interactiveBorder'] },\r\n interactiveDebounce: { default: () => tippy.defaultProps['interactiveDebounce'] },\r\n moveTransition: { default: () => tippy.defaultProps['moveTransition'] },\r\n offset: { default: () => tippy.defaultProps['offset'] },\r\n onAfterUpdate: { default: () => tippy.defaultProps['onAfterUpdate'] },\r\n onBeforeUpdate: { default: () => tippy.defaultProps['onBeforeUpdate'] },\r\n onCreate: { default: () => tippy.defaultProps['onCreate'] },\r\n onDestroy: { default: () => tippy.defaultProps['onDestroy'] },\r\n onHidden: { default: () => tippy.defaultProps['onHidden'] },\r\n onHide: { default: () => tippy.defaultProps['onHide'] },\r\n onMount: { default: () => tippy.defaultProps['onMount'] },\r\n onShow: { default: () => tippy.defaultProps['onShow'] },\r\n onShown: { default: () => tippy.defaultProps['onShown'] },\r\n onTrigger: { default: () => tippy.defaultProps['onTrigger'] },\r\n onUntrigger: { default: () => tippy.defaultProps['onUntrigger'] },\r\n onClickOutside: { default: () => tippy.defaultProps['onClickOutside'] },\r\n placement: { default: () => tippy.defaultProps['placement'] },\r\n plugins: { default: () => tippy.defaultProps['plugins'] },\r\n popperOptions: { default: () => tippy.defaultProps['popperOptions'] },\r\n render: { default: () => tippy.defaultProps['render'] },\r\n showOnCreate: { type: Boolean, default: () => tippy.defaultProps['showOnCreate'] },\r\n touch: { type: [Boolean, String, Array], default: () => tippy.defaultProps['touch'] },\r\n trigger: { default: () => tippy.defaultProps['trigger'] },\r\n triggerTarget: { default: () => tippy.defaultProps['triggerTarget'] },\r\n animateFill: { type: Boolean, default: () => tippy.defaultProps['animateFill'] },\r\n followCursor: { type: [Boolean, String], default: () => tippy.defaultProps['followCursor'] },\r\n inlinePositioning: { type: Boolean, default: () => tippy.defaultProps['inlinePositioning'] },\r\n sticky: { type: [Boolean, String], default: () => tippy.defaultProps['sticky'] },\r\n allowHTML: { type: Boolean, default: () => tippy.defaultProps['allowHTML'] },\r\n animation: { default: () => tippy.defaultProps['animation'] },\r\n arrow: { default: () => tippy.defaultProps['arrow'] },\r\n content: { default: () => tippy.defaultProps['content'] },\r\n inertia: { default: () => tippy.defaultProps['inertia'] },\r\n maxWidth: { default: () => tippy.defaultProps['maxWidth'] },\r\n role: { default: () => tippy.defaultProps['role'] },\r\n theme: { default: () => tippy.defaultProps['theme'] },\r\n zIndex: { default: () => tippy.defaultProps['zIndex'] }\r\n },\r\n emits: ['state'],\r\n setup(props, { slots, emit, expose }) {\r\n const elem = ref();\r\n const findParentHelper = ref();\r\n const contentElem = ref();\r\n const mounted = ref(false);\r\n const getOptions = () => {\r\n let options = { ...props };\r\n for (const prop of ['to', 'tag', 'contentTag', 'contentClass']) {\r\n if (options.hasOwnProperty(prop)) {\r\n // @ts-ignore\r\n delete options[prop];\r\n }\r\n }\r\n return options;\r\n };\r\n let target = () => unrefElement(elem);\r\n if (props.to) {\r\n if (typeof Element !== 'undefined' && props.to instanceof Element) {\r\n target = () => props.to;\r\n }\r\n else if (props.to === 'parent') {\r\n target = () => {\r\n let el = elem.value;\r\n if (!el) {\r\n el = elem.value = findParentHelper.value.parentElement;\r\n }\r\n return el;\r\n };\r\n }\r\n else if (typeof props.to === 'string' || props.to instanceof String) {\r\n target = () => document.querySelector(props.to);\r\n }\r\n }\r\n const tippy = useTippy(target, getOptions());\r\n let contentSlot = slots.content;\r\n if (!contentSlot && props.to === 'parent') {\r\n contentSlot = slots.default;\r\n }\r\n onMounted(() => {\r\n mounted.value = true;\r\n nextTick(() => {\r\n if (contentSlot)\r\n tippy.setContent(() => contentElem.value);\r\n });\r\n });\r\n watch(tippy.state, () => {\r\n emit('state', unref(tippy.state));\r\n }, { immediate: true, deep: true });\r\n watch(() => props, () => {\r\n tippy.setProps(getOptions());\r\n if (contentSlot)\r\n tippy.setContent(() => contentElem.value);\r\n }, { deep: true });\r\n let exposed = reactive({\r\n elem,\r\n contentElem,\r\n mounted,\r\n ...tippy\r\n });\r\n expose(exposed);\r\n return () => {\r\n const contentTag = typeof props.contentTag === 'string' ? props.contentTag : props.contentTag;\r\n const content = contentSlot\r\n ? h(contentTag, {\r\n ref: contentElem,\r\n style: { display: mounted.value ? 'inherit' : 'none' },\r\n class: props.contentClass,\r\n }, contentSlot(exposed))\r\n : null;\r\n if (props.to === 'parent') {\r\n const result = [];\r\n if (!elem.value) {\r\n const findParentHelperNode = h('span', {\r\n ref: findParentHelper,\r\n 'data-v-tippy': '',\r\n style: { display: 'none' },\r\n });\r\n result.push(findParentHelperNode);\r\n }\r\n if (content) {\r\n result.push(content);\r\n }\r\n return result;\r\n }\r\n const slot = slots.default ? slots.default(exposed) : [];\r\n if (!props.tag) {\r\n const trigger = h(slot[0], {\r\n ref: elem, 'data-v-tippy': ''\r\n });\r\n return content ? [trigger, content] : trigger;\r\n }\r\n const tag = typeof props.tag === 'string' ? props.tag : props.tag;\r\n return h(tag, { ref: elem, 'data-v-tippy': '' }, content ? [slot, content] : slot);\r\n };\r\n },\r\n});\n\nconst booleanProps = [\r\n 'a11y',\r\n 'allowHTML',\r\n 'arrow',\r\n 'flip',\r\n 'flipOnUpdate',\r\n 'hideOnClick',\r\n 'ignoreAttributes',\r\n 'inertia',\r\n 'interactive',\r\n 'lazy',\r\n 'multiple',\r\n 'showOnInit',\r\n 'touch',\r\n 'touchHold',\r\n];\r\nlet props = {};\r\nObject.keys(tippy.defaultProps).forEach((prop) => {\r\n if (booleanProps.includes(prop)) {\r\n props[prop] = {\r\n type: Boolean,\r\n default: function () {\r\n return tippy.defaultProps[prop];\r\n },\r\n };\r\n }\r\n else {\r\n props[prop] = {\r\n default: function () {\r\n return tippy.defaultProps[prop];\r\n },\r\n };\r\n }\r\n});\r\nconst TippySingleton = defineComponent({\r\n props,\r\n setup(props) {\r\n const instances = ref([]);\r\n const { singleton } = useSingleton(instances, props);\r\n return { instances, singleton };\r\n },\r\n mounted() {\r\n var _a;\r\n const parent = this.$el.parentElement;\r\n const elements = parent.querySelectorAll('[data-v-tippy]');\r\n this.instances = Array.from(elements)\r\n .map((el) => el._tippy)\r\n .filter(Boolean);\r\n (_a = this.singleton) === null || _a === void 0 ? void 0 : _a.setInstances(this.instances);\r\n },\r\n render() {\r\n let slot = this.$slots.default ? this.$slots.default() : [];\r\n return h(() => slot);\r\n },\r\n});\n\nconst directive = {\r\n mounted(el, binding, vnode) {\r\n const opts = typeof binding.value === \"string\" ? { content: binding.value } : binding.value || {};\r\n const modifiers = Object.keys(binding.modifiers || {});\r\n const placement = modifiers.find(modifier => modifier !== 'arrow');\r\n const withArrow = modifiers.findIndex(modifier => modifier === 'arrow') !== -1;\r\n if (placement) {\r\n opts.placement = opts.placement || placement;\r\n }\r\n if (withArrow) {\r\n opts.arrow = opts.arrow !== undefined ? opts.arrow : true;\r\n }\r\n if (vnode.props && vnode.props.onTippyShow) {\r\n opts.onShow = function (...args) {\r\n var _a;\r\n return (_a = vnode.props) === null || _a === void 0 ? void 0 : _a.onTippyShow(...args);\r\n };\r\n }\r\n if (vnode.props && vnode.props.onTippyShown) {\r\n opts.onShown = function (...args) {\r\n var _a;\r\n return (_a = vnode.props) === null || _a === void 0 ? void 0 : _a.onTippyShown(...args);\r\n };\r\n }\r\n if (vnode.props && vnode.props.onTippyHidden) {\r\n opts.onHidden = function (...args) {\r\n var _a;\r\n return (_a = vnode.props) === null || _a === void 0 ? void 0 : _a.onTippyHidden(...args);\r\n };\r\n }\r\n if (vnode.props && vnode.props.onTippyHide) {\r\n opts.onHide = function (...args) {\r\n var _a;\r\n return (_a = vnode.props) === null || _a === void 0 ? void 0 : _a.onTippyHide(...args);\r\n };\r\n }\r\n if (vnode.props && vnode.props.onTippyMount) {\r\n opts.onMount = function (...args) {\r\n var _a;\r\n return (_a = vnode.props) === null || _a === void 0 ? void 0 : _a.onTippyMount(...args);\r\n };\r\n }\r\n if (el.getAttribute('title') && !opts.content) {\r\n opts.content = el.getAttribute('title');\r\n el.removeAttribute('title');\r\n }\r\n if (el.getAttribute('content') && !opts.content) {\r\n opts.content = el.getAttribute('content');\r\n }\r\n useTippy(el, opts);\r\n },\r\n unmounted(el) {\r\n if (el.$tippy) {\r\n el.$tippy.destroy();\r\n }\r\n else if (el._tippy) {\r\n el._tippy.destroy();\r\n }\r\n },\r\n updated(el, binding) {\r\n const opts = typeof binding.value === \"string\" ? { content: binding.value } : binding.value || {};\r\n // any kind of falsy content value, even undefined, should be treated as null - 'no tooltip to show'\r\n if (!opts.content) {\r\n opts.content = null;\r\n }\r\n if (el.getAttribute('title') && !opts.content) {\r\n opts.content = el.getAttribute('title');\r\n el.removeAttribute('title');\r\n }\r\n if (el.getAttribute('content') && !opts.content) {\r\n opts.content = el.getAttribute('content');\r\n }\r\n if (el.$tippy) {\r\n el.$tippy.setProps(opts || {});\r\n }\r\n else if (el._tippy) {\r\n el._tippy.setProps(opts || {});\r\n }\r\n },\r\n};\n\nconst plugin = {\r\n install(app, options = {}) {\r\n tippy.setDefaultProps(options.defaultProps || {});\r\n app.directive(options.directive || 'tippy', directive);\r\n app.component(options.component || 'tippy', TippyComponent);\r\n app.component(options.componentSingleton || 'tippy-singleton', TippySingleton);\r\n },\r\n};\n\nconst setDefaultProps$1 = tippy.setDefaultProps;\r\nsetDefaultProps$1({\r\n ignoreAttributes: true,\r\n plugins: [sticky, inlinePositioning, followCursor, animateFill],\r\n});\n\nexport default plugin;\nexport { TippyComponent as Tippy, TippySingleton, directive, hideAll, plugin, ROUND_ARROW as roundArrow, setDefaultProps$1 as setDefaultProps, tippy, useSingleton, useTippy, useTippyComponent };\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n","// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\\-])/i;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._keyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a nested triple\n else if (input.length > 1 && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)))\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._keyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n // Try to find a SPARQL-style keyword\n if (match = this._sparqlKeyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case ')':\n case '}':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n","// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString; xsd:string otherwise\n (char !== '@' ? xsd.string : rdf.langString);\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n return factory.literal(id.substr(1, endPos - 1),\n id[endPos + 1] === '@' ? id.substr(endPos + 2)\n : factory.namedNode(id.substr(endPos + 3)));\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n","// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Support nesting of triples\n this._supportsRDFStar = format === '' || /star|\\*$/.test(format);\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n literal = this._factory.literal(this._literalValue, token.value);\n token = null;\n break;\n }\n\n return { token, literal };\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n this._subject = this._completeLiteral(token).literal;\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token);\n if (!completed)\n return;\n this._object = completed.literal;\n\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (completed.token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(completed.token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n // Continue using the last triple as quoted triple subject for the predicate-object pairs.\n const predicate = this._predicate, object = this._object;\n this._subject = this._factory.quad(subject, predicate, object, this.DEFAULTGRAPH);\n next = this._readPredicate;\n break;\n // |} means that the current quoted triple in annotation syntax is finalized.\n case '|}':\n if (this._subject.termType !== 'Quad')\n return this._error('Unexpected asserted triple closing', token);\n this._subject = null;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF-star quad or the end of a nested RDF-star triple\n _readRDFStarTailOrGraph(token) {\n if (token.type !== '>>') {\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined)\n return this._readRDFStarTail;\n return this._error(`Expected >> to follow \"${this._object.id}\"`, token);\n }\n return this._readRDFStarTail(token);\n }\n\n // ### `_readRDFStarTail` reads the end of a nested RDF-star triple\n _readRDFStarTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<', token);\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<':\n return this._readRDFStarTailOrGraph;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readInTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n","// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n","export function escapeRegex(regex) {\n return regex.replace(/[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n}\n","import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\nconst SUFFIX_SUPPORTED = /^(?:(?:[^/?#]{3,}|\\.?[^/?#.]\\.?)(?:\\/[^/?#]{3,}|\\.?[^/?#.]\\.?)*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string\n if (parentPath === CURRENT && /^[^?#]/.test(suffix))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n","// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\n\n// Characters in literals that require escaping\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._graph = DEFAULTGRAPH;\n this._prefixIRIs = Object.create(null);\n options.prefixes && this.addPrefixes(options.prefixes);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n }\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n if (!graph.equals(this._graph)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n return entity.termType === 'Quad' ?\n this._encodeQuad(entity) : this._encodeIriOrBlank(entity);\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && (entity.value in this._lists))\n entity = this.list(this._lists[entity.value]);\n return 'id' in entity ? entity.id : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (escape.test(iri))\n iri = iri.replace(escapeAll, characterReplacer);\n // Try to represent the IRI as prefixed name\n const prefixMatch = this._prefixRegex.exec(iri);\n return !prefixMatch ? `<${iri}>` :\n (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (escape.test(value))\n value = value.replace(escapeAll, characterReplacer);\n\n // Write a language-tagged literal\n if (literal.language)\n return `\"${value}\"@${literal.language}`;\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n return `<<${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null, this._graph = '';\n }\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher\n if (hasPrefixes) {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixIRIs) {\n IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI;\n prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI];\n }\n IRIlist = escapeRegex(IRIlist, /[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n this._prefixRegex = new RegExp(`^(?:${prefixList})[^\\/]*$|` +\n `^(${IRIlist})([_a-zA-Z0-9][\\\\-_a-zA-Z0-9]*)$`);\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n }\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n","'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/per_context/primordials.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n constructor(errors) {\n if (!Array.isArray(errors)) {\n throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n }\n let message = ''\n for (let i = 0; i < errors.length; i++) {\n message += ` ${errors[i].stack}\\n`\n }\n super(message)\n this.name = 'AggregateError'\n this.errors = errors\n }\n}\nmodule.exports = {\n AggregateError,\n ArrayIsArray(self) {\n return Array.isArray(self)\n },\n ArrayPrototypeIncludes(self, el) {\n return self.includes(el)\n },\n ArrayPrototypeIndexOf(self, el) {\n return self.indexOf(el)\n },\n ArrayPrototypeJoin(self, sep) {\n return self.join(sep)\n },\n ArrayPrototypeMap(self, fn) {\n return self.map(fn)\n },\n ArrayPrototypePop(self, el) {\n return self.pop(el)\n },\n ArrayPrototypePush(self, el) {\n return self.push(el)\n },\n ArrayPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n Error,\n FunctionPrototypeCall(fn, thisArgs, ...args) {\n return fn.call(thisArgs, ...args)\n },\n FunctionPrototypeSymbolHasInstance(self, instance) {\n return Function.prototype[Symbol.hasInstance].call(self, instance)\n },\n MathFloor: Math.floor,\n Number,\n NumberIsInteger: Number.isInteger,\n NumberIsNaN: Number.isNaN,\n NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n NumberParseInt: Number.parseInt,\n ObjectDefineProperties(self, props) {\n return Object.defineProperties(self, props)\n },\n ObjectDefineProperty(self, name, prop) {\n return Object.defineProperty(self, name, prop)\n },\n ObjectGetOwnPropertyDescriptor(self, name) {\n return Object.getOwnPropertyDescriptor(self, name)\n },\n ObjectKeys(obj) {\n return Object.keys(obj)\n },\n ObjectSetPrototypeOf(target, proto) {\n return Object.setPrototypeOf(target, proto)\n },\n Promise,\n PromisePrototypeCatch(self, fn) {\n return self.catch(fn)\n },\n PromisePrototypeThen(self, thenFn, catchFn) {\n return self.then(thenFn, catchFn)\n },\n PromiseReject(err) {\n return Promise.reject(err)\n },\n PromiseResolve(val) {\n return Promise.resolve(val)\n },\n ReflectApply: Reflect.apply,\n RegExpPrototypeTest(self, value) {\n return self.test(value)\n },\n SafeSet: Set,\n String,\n StringPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n StringPrototypeToLowerCase(self) {\n return self.toLowerCase()\n },\n StringPrototypeToUpperCase(self) {\n return self.toUpperCase()\n },\n StringPrototypeTrim(self) {\n return self.trim()\n },\n Symbol,\n SymbolFor: Symbol.for,\n SymbolAsyncIterator: Symbol.asyncIterator,\n SymbolHasInstance: Symbol.hasInstance,\n SymbolIterator: Symbol.iterator,\n SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n TypedArrayPrototypeSet(self, buf, len) {\n return self.set(buf, len)\n },\n Boolean,\n Uint8Array\n}\n","'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/util/inspect.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n format(format, ...args) {\n // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n const replacement = args.shift()\n if (type === 'f') {\n return replacement.toFixed(6)\n } else if (type === 'j') {\n return JSON.stringify(replacement)\n } else if (type === 's' && typeof replacement === 'object') {\n const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n return `${ctor} {}`.trim()\n } else {\n return replacement.toString()\n }\n })\n },\n inspect(value) {\n // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n switch (typeof value) {\n case 'string':\n if (value.includes(\"'\")) {\n if (!value.includes('\"')) {\n return `\"${value}\"`\n } else if (!value.includes('`') && !value.includes('${')) {\n return `\\`${value}\\``\n }\n }\n return `'${value}'`\n case 'number':\n if (isNaN(value)) {\n return 'NaN'\n } else if (Object.is(value, -0)) {\n return String(value)\n }\n return value\n case 'bigint':\n return `${String(value)}n`\n case 'boolean':\n case 'undefined':\n return String(value)\n case 'object':\n return '{}'\n }\n }\n}\n","'use strict'\n\nconst { format, inspect } = require('./util/inspect')\nconst { AggregateError: CustomAggregateError } = require('./primordials')\n\n/*\n This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/errors.js\n\n Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n 'string',\n 'function',\n 'number',\n 'object',\n // Accept 'Function' and 'Object' as alternative to the lower cased version.\n 'Function',\n 'Object',\n 'boolean',\n 'bigint',\n 'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n if (!value) {\n throw new codes.ERR_INTERNAL_ASSERTION(message)\n }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n if (typeof msg === 'function') {\n assert(\n msg.length <= args.length,\n // Default options do not count.\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n )\n return msg(...args)\n }\n const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n assert(\n expectedLength === args.length,\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n )\n if (args.length === 0) {\n return msg\n }\n return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n class NodeError extends Base {\n constructor(...args) {\n super(getMessage(code, message, args))\n }\n toString() {\n return `${this.name} [${code}]: ${this.message}`\n }\n }\n Object.defineProperties(NodeError.prototype, {\n name: {\n value: Base.name,\n writable: true,\n enumerable: false,\n configurable: true\n },\n toString: {\n value() {\n return `${this.name} [${code}]: ${this.message}`\n },\n writable: true,\n enumerable: false,\n configurable: true\n }\n })\n NodeError.prototype.code = code\n NodeError.prototype[kIsNodeError] = true\n codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n // We rename the functions that will be hidden to cut off the stacktrace\n // at the outermost one\n const hidden = nodeInternalPrefix + fn.name\n Object.defineProperty(fn, 'name', {\n value: hidden\n })\n return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n if (innerError && outerError && innerError !== outerError) {\n if (Array.isArray(outerError.errors)) {\n // If `outerError` is already an `AggregateError`.\n outerError.errors.push(innerError)\n return outerError\n }\n const err = new AggregateError([outerError, innerError], outerError.message)\n err.code = outerError.code\n return err\n }\n return innerError || outerError\n}\nclass AbortError extends Error {\n constructor(message = 'The operation was aborted', options = undefined) {\n if (options !== undefined && typeof options !== 'object') {\n throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n }\n super(message, options)\n this.code = 'ABORT_ERR'\n this.name = 'AbortError'\n }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n 'ERR_INVALID_ARG_TYPE',\n (name, expected, actual) => {\n assert(typeof name === 'string', \"'name' must be a string\")\n if (!Array.isArray(expected)) {\n expected = [expected]\n }\n let msg = 'The '\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n msg += `${name} `\n } else {\n msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n }\n msg += 'must be '\n const types = []\n const instances = []\n const other = []\n for (const value of expected) {\n assert(typeof value === 'string', 'All expected entries have to be of type string')\n if (kTypes.includes(value)) {\n types.push(value.toLowerCase())\n } else if (classRegExp.test(value)) {\n instances.push(value)\n } else {\n assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n other.push(value)\n }\n }\n\n // Special handle `object` in case other instances are allowed to outline\n // the differences between each other.\n if (instances.length > 0) {\n const pos = types.indexOf('object')\n if (pos !== -1) {\n types.splice(types, pos, 1)\n instances.push('Object')\n }\n }\n if (types.length > 0) {\n switch (types.length) {\n case 1:\n msg += `of type ${types[0]}`\n break\n case 2:\n msg += `one of type ${types[0]} or ${types[1]}`\n break\n default: {\n const last = types.pop()\n msg += `one of type ${types.join(', ')}, or ${last}`\n }\n }\n if (instances.length > 0 || other.length > 0) {\n msg += ' or '\n }\n }\n if (instances.length > 0) {\n switch (instances.length) {\n case 1:\n msg += `an instance of ${instances[0]}`\n break\n case 2:\n msg += `an instance of ${instances[0]} or ${instances[1]}`\n break\n default: {\n const last = instances.pop()\n msg += `an instance of ${instances.join(', ')}, or ${last}`\n }\n }\n if (other.length > 0) {\n msg += ' or '\n }\n }\n switch (other.length) {\n case 0:\n break\n case 1:\n if (other[0].toLowerCase() !== other[0]) {\n msg += 'an '\n }\n msg += `${other[0]}`\n break\n case 2:\n msg += `one of ${other[0]} or ${other[1]}`\n break\n default: {\n const last = other.pop()\n msg += `one of ${other.join(', ')}, or ${last}`\n }\n }\n if (actual == null) {\n msg += `. Received ${actual}`\n } else if (typeof actual === 'function' && actual.name) {\n msg += `. Received function ${actual.name}`\n } else if (typeof actual === 'object') {\n var _actual$constructor\n if (\n (_actual$constructor = actual.constructor) !== null &&\n _actual$constructor !== undefined &&\n _actual$constructor.name\n ) {\n msg += `. Received an instance of ${actual.constructor.name}`\n } else {\n const inspected = inspect(actual, {\n depth: -1\n })\n msg += `. Received ${inspected}`\n }\n } else {\n let inspected = inspect(actual, {\n colors: false\n })\n if (inspected.length > 25) {\n inspected = `${inspected.slice(0, 25)}...`\n }\n msg += `. Received type ${typeof actual} (${inspected})`\n }\n return msg\n },\n TypeError\n)\nE(\n 'ERR_INVALID_ARG_VALUE',\n (name, value, reason = 'is invalid') => {\n let inspected = inspect(value)\n if (inspected.length > 128) {\n inspected = inspected.slice(0, 128) + '...'\n }\n const type = name.includes('.') ? 'property' : 'argument'\n return `The ${type} '${name}' ${reason}. Received ${inspected}`\n },\n TypeError\n)\nE(\n 'ERR_INVALID_RETURN_VALUE',\n (input, name, value) => {\n var _value$constructor\n const type =\n value !== null &&\n value !== undefined &&\n (_value$constructor = value.constructor) !== null &&\n _value$constructor !== undefined &&\n _value$constructor.name\n ? `instance of ${value.constructor.name}`\n : `type ${typeof value}`\n return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n },\n TypeError\n)\nE(\n 'ERR_MISSING_ARGS',\n (...args) => {\n assert(args.length > 0, 'At least one arg needs to be specified')\n let msg\n const len = args.length\n args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n switch (len) {\n case 1:\n msg += `The ${args[0]} argument`\n break\n case 2:\n msg += `The ${args[0]} and ${args[1]} arguments`\n break\n default:\n {\n const last = args.pop()\n msg += `The ${args.join(', ')}, and ${last} arguments`\n }\n break\n }\n return `${msg} must be specified`\n },\n TypeError\n)\nE(\n 'ERR_OUT_OF_RANGE',\n (str, range, input) => {\n assert(range, 'Missing \"range\" argument')\n let received\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n const limit = BigInt(2) ** BigInt(32)\n if (input > limit || input < -limit) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n } else {\n received = inspect(input)\n }\n return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n },\n RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n AbortError,\n aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n hideStackFrames,\n codes\n}\n","/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict'\n\nconst bufferModule = require('buffer')\nconst { format, inspect } = require('./util/inspect')\nconst {\n codes: { ERR_INVALID_ARG_TYPE }\n} = require('./errors')\nconst { kResistStopPropagation, AggregateError, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n // eslint-disable-next-line indent\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nconst validateFunction = (value, name) => {\n if (typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n }\n}\nmodule.exports = {\n AggregateError,\n kEmptyObject: Object.freeze({}),\n once(callback) {\n let called = false\n return function (...args) {\n if (called) {\n return\n }\n called = true\n callback.apply(this, args)\n }\n },\n createDeferredPromise: function () {\n let resolve\n let reject\n\n // eslint-disable-next-line promise/param-names\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise,\n resolve,\n reject\n }\n },\n promisify(fn) {\n return new Promise((resolve, reject) => {\n fn((err, ...args) => {\n if (err) {\n return reject(err)\n }\n return resolve(...args)\n })\n })\n },\n debuglog() {\n return function () {}\n },\n format,\n inspect,\n types: {\n isAsyncFunction(fn) {\n return fn instanceof AsyncFunction\n },\n isArrayBufferView(arr) {\n return ArrayBuffer.isView(arr)\n }\n },\n isBlob,\n deprecate(fn, message) {\n return fn\n },\n addAbortListener:\n require('events').addAbortListener ||\n function addAbortListener(signal, listener) {\n if (signal === undefined) {\n throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n }\n validateAbortSignal(signal, 'signal')\n validateFunction(listener, 'listener')\n let removeEventListener\n if (signal.aborted) {\n queueMicrotask(() => listener())\n } else {\n signal.addEventListener('abort', listener, {\n __proto__: null,\n once: true,\n [kResistStopPropagation]: true\n })\n removeEventListener = () => {\n signal.removeEventListener('abort', listener)\n }\n }\n return {\n __proto__: null,\n [SymbolDispose]() {\n var _removeEventListener\n ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n ? undefined\n : _removeEventListener()\n }\n }\n },\n AbortSignalAny:\n AbortSignal.any ||\n function AbortSignalAny(signals) {\n // Fast path if there is only one signal.\n if (signals.length === 1) {\n return signals[0]\n }\n const ac = new AbortController()\n const abort = () => ac.abort()\n signals.forEach((signal) => {\n validateAbortSignal(signal, 'signals')\n signal.addEventListener('abort', abort, {\n once: true\n })\n })\n ac.signal.addEventListener(\n 'abort',\n () => {\n signals.forEach((signal) => signal.removeEventListener('abort', abort))\n },\n {\n once: true\n }\n )\n return ac.signal\n }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n","/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n ArrayIsArray,\n ArrayPrototypeIncludes,\n ArrayPrototypeJoin,\n ArrayPrototypeMap,\n NumberIsInteger,\n NumberIsNaN,\n NumberMAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER,\n NumberParseInt,\n ObjectPrototypeHasOwnProperty,\n RegExpPrototypeExec,\n String,\n StringPrototypeToUpperCase,\n StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n hideStackFrames,\n codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n if (typeof value === 'undefined') {\n value = def\n }\n if (typeof value === 'string') {\n if (RegExpPrototypeExec(octalReg, value) === null) {\n throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n }\n value = NumberParseInt(value, 8)\n }\n validateUint32(value, name)\n return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n const min = positive ? 1 : 0\n // 2 ** 32 === 4294967296\n const max = 4294967295\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (\n (min != null && value < min) ||\n (max != null && value > max) ||\n ((min != null || max != null) && NumberIsNaN(value))\n ) {\n throw new ERR_OUT_OF_RANGE(\n name,\n `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n value\n )\n }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n if (!ArrayPrototypeIncludes(oneOf, value)) {\n const allowed = ArrayPrototypeJoin(\n ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n ', '\n )\n const reason = 'must be one of: ' + allowed\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n * allowArray?: boolean,\n * allowFunction?: boolean,\n * nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n if (\n (!nullable && value === null) ||\n (!allowArray && ArrayIsArray(value)) ||\n (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n ) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n * of \"dictionary\" here, which means any value\n * whose Type is either Undefined, Null, or\n * Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n if (!ArrayIsArray(value)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n }\n if (value.length < minLength) {\n const reason = `must be longer than ${minLength}`\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateString(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateBoolean(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n const signal = value[i]\n const indexedName = `${name}[${i}]`\n if (signal == null) {\n throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n }\n validateAbortSignal(signal, indexedName)\n }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n validateString(signal, name)\n if (signals[signal] === undefined) {\n if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n }\n throw new ERR_UNKNOWN_SIGNAL(signal)\n }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n if (!isArrayBufferView(buffer)) {\n throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n const normalizedEncoding = normalizeEncoding(encoding)\n const length = data.length\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n if (\n (typeof port !== 'number' && typeof port !== 'string') ||\n (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n +port !== +port >>> 0 ||\n port > 0xffff ||\n (port === 0 && !allowZero)\n ) {\n throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n }\n return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n if (!ArrayPrototypeIncludes(union, value)) {\n throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n }\n}\n\n/*\n The rules for the Link header field are described here:\n https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n This regex validates any string surrounded by angle brackets\n (not necessarily a valid URI reference) followed by zero or more\n link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n throw new ERR_INVALID_ARG_VALUE(\n name,\n value,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n if (typeof hints === 'string') {\n validateLinkHeaderFormat(hints, 'hints')\n return hints\n } else if (ArrayIsArray(hints)) {\n const hintsLength = hints.length\n let result = ''\n if (hintsLength === 0) {\n return result\n }\n for (let i = 0; i < hintsLength; i++) {\n const link = hints[i]\n validateLinkHeaderFormat(link, 'hints')\n result += link\n if (i !== hintsLength - 1) {\n result += ', '\n }\n }\n return result\n }\n throw new ERR_INVALID_ARG_VALUE(\n 'hints',\n hints,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n}\nmodule.exports = {\n isInt32,\n isUint32,\n parseFileMode,\n validateArray,\n validateStringArray,\n validateBooleanArray,\n validateAbortSignalArray,\n validateBoolean,\n validateBuffer,\n validateDictionary,\n validateEncoding,\n validateFunction,\n validateInt32,\n validateInteger,\n validateNumber,\n validateObject,\n validateOneOf,\n validatePlainFunction,\n validatePort,\n validateSignalName,\n validateString,\n validateUint32,\n validateUndefined,\n validateUnion,\n validateAbortSignal,\n validateLinkHeaderValue\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n var _obj$_readableState\n return !!(\n (\n obj &&\n typeof obj.pipe === 'function' &&\n typeof obj.on === 'function' &&\n (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n (!obj._writableState ||\n ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n ? undefined\n : _obj$_readableState.readable) !== false) &&\n // Duplex\n (!obj._writableState || obj._readableState)\n ) // Writable has .pipe.\n )\n}\nfunction isWritableNodeStream(obj) {\n var _obj$_writableState\n return !!(\n (\n obj &&\n typeof obj.write === 'function' &&\n typeof obj.on === 'function' &&\n (!obj._readableState ||\n ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n ? undefined\n : _obj$_writableState.writable) !== false)\n ) // Duplex\n )\n}\nfunction isDuplexNodeStream(obj) {\n return !!(\n obj &&\n typeof obj.pipe === 'function' &&\n obj._readableState &&\n typeof obj.on === 'function' &&\n typeof obj.write === 'function'\n )\n}\nfunction isNodeStream(obj) {\n return (\n obj &&\n (obj._readableState ||\n obj._writableState ||\n (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n )\n}\nfunction isReadableStream(obj) {\n return !!(\n obj &&\n !isNodeStream(obj) &&\n typeof obj.pipeThrough === 'function' &&\n typeof obj.getReader === 'function' &&\n typeof obj.cancel === 'function'\n )\n}\nfunction isWritableStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n if (obj == null) return false\n if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableEnded === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableFinished === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n if (!isReadableNodeStream(stream)) return null\n if (stream.readableEnded === true) return true\n const rState = stream._readableState\n if (!rState || rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n if (!isReadableNodeStream(stream)) return null\n const rState = stream._readableState\n if (rState !== null && rState !== undefined && rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (isDestroyed(stream)) {\n return true\n }\n if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n return false\n }\n if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n return false\n }\n return true\n}\nfunction isWritableErrored(stream) {\n var _stream$_writableStat, _stream$_writableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.writableErrored) {\n return stream.writableErrored\n }\n return (_stream$_writableStat =\n (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n ? undefined\n : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n ? _stream$_writableStat\n : null\n}\nfunction isReadableErrored(stream) {\n var _stream$_readableStat, _stream$_readableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.readableErrored) {\n return stream.readableErrored\n }\n return (_stream$_readableStat =\n (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n ? undefined\n : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n ? _stream$_readableStat\n : null\n}\nfunction isClosed(stream) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (typeof stream.closed === 'boolean') {\n return stream.closed\n }\n const wState = stream._writableState\n const rState = stream._readableState\n if (\n typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n ) {\n return (\n (wState === null || wState === undefined ? undefined : wState.closed) ||\n (rState === null || rState === undefined ? undefined : rState.closed)\n )\n }\n if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n return stream._closed\n }\n return null\n}\nfunction isOutgoingMessage(stream) {\n return (\n typeof stream._closed === 'boolean' &&\n typeof stream._defaultKeepAlive === 'boolean' &&\n typeof stream._removedConnection === 'boolean' &&\n typeof stream._removedContLen === 'boolean'\n )\n}\nfunction isServerResponse(stream) {\n return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n var _stream$req\n return (\n typeof stream._consuming === 'boolean' &&\n typeof stream._dumped === 'boolean' &&\n ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n undefined\n )\n}\nfunction willEmitClose(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return (\n (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n )\n}\nfunction isDisturbed(stream) {\n var _stream$kIsDisturbed\n return !!(\n stream &&\n ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n ? _stream$kIsDisturbed\n : stream.readableDidRead || stream.readableAborted)\n )\n}\nfunction isErrored(stream) {\n var _ref,\n _ref2,\n _ref3,\n _ref4,\n _ref5,\n _stream$kIsErrored,\n _stream$_readableStat3,\n _stream$_writableStat3,\n _stream$_readableStat4,\n _stream$_writableStat4\n return !!(\n stream &&\n ((_ref =\n (_ref2 =\n (_ref3 =\n (_ref4 =\n (_ref5 =\n (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n ? _stream$kIsErrored\n : stream.readableErrored) !== null && _ref5 !== undefined\n ? _ref5\n : stream.writableErrored) !== null && _ref4 !== undefined\n ? _ref4\n : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n ? undefined\n : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n ? _ref3\n : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n ? undefined\n : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n ? _ref2\n : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n ? undefined\n : _stream$_readableStat4.errored) !== null && _ref !== undefined\n ? _ref\n : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n ? undefined\n : _stream$_writableStat4.errored)\n )\n}\nmodule.exports = {\n isDestroyed,\n kIsDestroyed,\n isDisturbed,\n kIsDisturbed,\n isErrored,\n kIsErrored,\n isReadable,\n kIsReadable,\n kIsClosedPromise,\n kControllerErrorFunction,\n kIsWritable,\n isClosed,\n isDuplexNodeStream,\n isFinished,\n isIterable,\n isReadableNodeStream,\n isReadableStream,\n isReadableEnded,\n isReadableFinished,\n isReadableErrored,\n isNodeStream,\n isWebStream,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableEnded,\n isWritableFinished,\n isWritableErrored,\n isServerRequest,\n isServerResponse,\n willEmitClose,\n isTransformStream\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n isClosed,\n isReadable,\n isReadableNodeStream,\n isReadableStream,\n isReadableFinished,\n isReadableErrored,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableFinished,\n isWritableErrored,\n isNodeStream,\n willEmitClose: _willEmitClose,\n kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n var _options$readable, _options$writable\n if (arguments.length === 2) {\n callback = options\n options = kEmptyObject\n } else if (options == null) {\n options = kEmptyObject\n } else {\n validateObject(options, 'options')\n }\n validateFunction(callback, 'callback')\n validateAbortSignal(options.signal, 'options.signal')\n callback = once(callback)\n if (isReadableStream(stream) || isWritableStream(stream)) {\n return eosWeb(stream, options, callback)\n }\n if (!isNodeStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n const readable =\n (_options$readable = options.readable) !== null && _options$readable !== undefined\n ? _options$readable\n : isReadableNodeStream(stream)\n const writable =\n (_options$writable = options.writable) !== null && _options$writable !== undefined\n ? _options$writable\n : isWritableNodeStream(stream)\n const wState = stream._writableState\n const rState = stream._readableState\n const onlegacyfinish = () => {\n if (!stream.writable) {\n onfinish()\n }\n }\n\n // TODO (ronag): Improve soft detection to include core modules and\n // common ecosystem modules that do properly emit 'close' but fail\n // this generic check.\n let willEmitClose =\n _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n let writableFinished = isWritableFinished(stream, false)\n const onfinish = () => {\n writableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.readable || readable)) {\n return\n }\n if (!readable || readableFinished) {\n callback.call(stream)\n }\n }\n let readableFinished = isReadableFinished(stream, false)\n const onend = () => {\n readableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.writable || writable)) {\n return\n }\n if (!writable || writableFinished) {\n callback.call(stream)\n }\n }\n const onerror = (err) => {\n callback.call(stream, err)\n }\n let closed = isClosed(stream)\n const onclose = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n if (writable && !writableFinished) {\n if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n callback.call(stream)\n }\n const onclosed = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n callback.call(stream)\n }\n const onrequest = () => {\n stream.req.on('finish', onfinish)\n }\n if (isRequest(stream)) {\n stream.on('complete', onfinish)\n if (!willEmitClose) {\n stream.on('abort', onclose)\n }\n if (stream.req) {\n onrequest()\n } else {\n stream.on('request', onrequest)\n }\n } else if (writable && !wState) {\n // legacy streams\n stream.on('end', onlegacyfinish)\n stream.on('close', onlegacyfinish)\n }\n\n // Not all streams will emit 'close' after 'aborted'.\n if (!willEmitClose && typeof stream.aborted === 'boolean') {\n stream.on('aborted', onclose)\n }\n stream.on('end', onend)\n stream.on('finish', onfinish)\n if (options.error !== false) {\n stream.on('error', onerror)\n }\n stream.on('close', onclose)\n if (closed) {\n process.nextTick(onclose)\n } else if (\n (wState !== null && wState !== undefined && wState.errorEmitted) ||\n (rState !== null && rState !== undefined && rState.errorEmitted)\n ) {\n if (!willEmitClose) {\n process.nextTick(onclosed)\n }\n } else if (\n !readable &&\n (!willEmitClose || isReadable(stream)) &&\n (writableFinished || isWritable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (\n !writable &&\n (!willEmitClose || isWritable(stream)) &&\n (readableFinished || isReadable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (rState && stream.req && stream.aborted) {\n process.nextTick(onclosed)\n }\n const cleanup = () => {\n callback = nop\n stream.removeListener('aborted', onclose)\n stream.removeListener('complete', onfinish)\n stream.removeListener('abort', onclose)\n stream.removeListener('request', onrequest)\n if (stream.req) stream.req.removeListener('finish', onfinish)\n stream.removeListener('end', onlegacyfinish)\n stream.removeListener('close', onlegacyfinish)\n stream.removeListener('finish', onfinish)\n stream.removeListener('end', onend)\n stream.removeListener('error', onerror)\n stream.removeListener('close', onclose)\n }\n if (options.signal && !closed) {\n const abort = () => {\n // Keep it because cleanup removes it.\n const endCallback = callback\n cleanup()\n endCallback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n let isAborted = false\n let abort = nop\n if (options.signal) {\n abort = () => {\n isAborted = true\n callback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n const resolverFn = (...args) => {\n if (!isAborted) {\n process.nextTick(() => callback.apply(stream, args))\n }\n }\n PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n return nop\n}\nfunction finished(stream, opts) {\n var _opts\n let autoCleanup = false\n if (opts === null) {\n opts = kEmptyObject\n }\n if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n validateBoolean(opts.cleanup, 'cleanup')\n autoCleanup = opts.cleanup\n }\n return new Promise((resolve, reject) => {\n const cleanup = eos(stream, opts, (err) => {\n if (autoCleanup) {\n cleanup()\n }\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n aggregateTwoErrors,\n codes: { ERR_MULTIPLE_CALLBACK },\n AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n const r = this._readableState\n const w = this._writableState\n // With duplex streams we use the writable side for state.\n const s = w || r\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n if (typeof cb === 'function') {\n cb()\n }\n return this\n }\n\n // We set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n checkError(err, w, r)\n if (w) {\n w.destroyed = true\n }\n if (r) {\n r.destroyed = true\n }\n\n // If still constructing then defer calling _destroy.\n if (!s.constructed) {\n this.once(kDestroy, function (er) {\n _destroy(this, aggregateTwoErrors(er, err), cb)\n })\n } else {\n _destroy(this, err, cb)\n }\n return this\n}\nfunction _destroy(self, err, cb) {\n let called = false\n function onDestroy(err) {\n if (called) {\n return\n }\n called = true\n const r = self._readableState\n const w = self._writableState\n checkError(err, w, r)\n if (w) {\n w.closed = true\n }\n if (r) {\n r.closed = true\n }\n if (typeof cb === 'function') {\n cb(err)\n }\n if (err) {\n process.nextTick(emitErrorCloseNT, self, err)\n } else {\n process.nextTick(emitCloseNT, self)\n }\n }\n try {\n self._destroy(err || null, onDestroy)\n } catch (err) {\n onDestroy(err)\n }\n}\nfunction emitErrorCloseNT(self, err) {\n emitErrorNT(self, err)\n emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n const r = self._readableState\n const w = self._writableState\n if (w) {\n w.closeEmitted = true\n }\n if (r) {\n r.closeEmitted = true\n }\n if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n self.emit('close')\n }\n}\nfunction emitErrorNT(self, err) {\n const r = self._readableState\n const w = self._writableState\n if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n return\n }\n if (w) {\n w.errorEmitted = true\n }\n if (r) {\n r.errorEmitted = true\n }\n self.emit('error', err)\n}\nfunction undestroy() {\n const r = this._readableState\n const w = this._writableState\n if (r) {\n r.constructed = true\n r.closed = false\n r.closeEmitted = false\n r.destroyed = false\n r.errored = null\n r.errorEmitted = false\n r.reading = false\n r.ended = r.readable === false\n r.endEmitted = r.readable === false\n }\n if (w) {\n w.constructed = true\n w.destroyed = false\n w.closed = false\n w.closeEmitted = false\n w.errored = null\n w.errorEmitted = false\n w.finalCalled = false\n w.prefinished = false\n w.ended = w.writable === false\n w.ending = w.writable === false\n w.finished = w.writable === false\n }\n}\nfunction errorOrDestroy(stream, err, sync) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n const r = stream._readableState\n const w = stream._writableState\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n return this\n }\n if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n stream.destroy(err)\n else if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n if (sync) {\n process.nextTick(emitErrorNT, stream, err)\n } else {\n emitErrorNT(stream, err)\n }\n }\n}\nfunction construct(stream, cb) {\n if (typeof stream._construct !== 'function') {\n return\n }\n const r = stream._readableState\n const w = stream._writableState\n if (r) {\n r.constructed = false\n }\n if (w) {\n w.constructed = false\n }\n stream.once(kConstruct, cb)\n if (stream.listenerCount(kConstruct) > 1) {\n // Duplex\n return\n }\n process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n let called = false\n function onConstruct(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n const r = stream._readableState\n const w = stream._writableState\n const s = w || r\n if (r) {\n r.constructed = true\n }\n if (w) {\n w.constructed = true\n }\n if (s.destroyed) {\n stream.emit(kDestroy, err)\n } else if (err) {\n errorOrDestroy(stream, err, true)\n } else {\n process.nextTick(emitConstructNT, stream)\n }\n }\n try {\n stream._construct((err) => {\n process.nextTick(onConstruct, err)\n })\n } catch (err) {\n process.nextTick(onConstruct, err)\n }\n}\nfunction emitConstructNT(stream) {\n stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n stream.emit('error', err)\n process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n if (!stream || isDestroyed(stream)) {\n return\n }\n if (!err && !isFinished(stream)) {\n err = new AbortError()\n }\n\n // TODO: Remove isRequest branches.\n if (isServerRequest(stream)) {\n stream.socket = null\n stream.destroy(err)\n } else if (isRequest(stream)) {\n stream.abort()\n } else if (isRequest(stream.req)) {\n stream.req.abort()\n } else if (typeof stream.destroy === 'function') {\n stream.destroy(err)\n } else if (typeof stream.close === 'function') {\n // TODO: Don't lose err?\n stream.close()\n } else if (err) {\n process.nextTick(emitErrorCloseLegacy, stream, err)\n } else {\n process.nextTick(emitCloseLegacy, stream)\n }\n if (!stream.destroyed) {\n stream[kIsDestroyed] = true\n }\n}\nmodule.exports = {\n construct,\n destroyer,\n destroy,\n undestroy,\n errorOrDestroy\n}\n","'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n const source = this\n function ondata(chunk) {\n if (dest.writable && dest.write(chunk) === false && source.pause) {\n source.pause()\n }\n }\n source.on('data', ondata)\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume()\n }\n }\n dest.on('drain', ondrain)\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend)\n source.on('close', onclose)\n }\n let didOnEnd = false\n function onend() {\n if (didOnEnd) return\n didOnEnd = true\n dest.end()\n }\n function onclose() {\n if (didOnEnd) return\n didOnEnd = true\n if (typeof dest.destroy === 'function') dest.destroy()\n }\n\n // Don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup()\n if (EE.listenerCount(this, 'error') === 0) {\n this.emit('error', er)\n }\n }\n prependListener(source, 'error', onerror)\n prependListener(dest, 'error', onerror)\n\n // Remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata)\n dest.removeListener('drain', ondrain)\n source.removeListener('end', onend)\n source.removeListener('close', onclose)\n source.removeListener('error', onerror)\n dest.removeListener('error', onerror)\n source.removeListener('end', cleanup)\n source.removeListener('close', cleanup)\n dest.removeListener('close', cleanup)\n }\n source.on('end', cleanup)\n source.on('close', cleanup)\n dest.on('close', cleanup)\n dest.emit('pipe', source)\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest\n}\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n Stream,\n prependListener\n}\n","'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n validateAbortSignal(signal, 'signal')\n if (!isNodeStream(stream) && !isWebStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n return stream\n }\n const onAbort = isNodeStream(stream)\n ? () => {\n stream.destroy(\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n : () => {\n stream[kControllerErrorFunction](\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n if (signal.aborted) {\n onAbort()\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(signal, onAbort)\n eos(stream, disposable[SymbolDispose])\n }\n return stream\n}\n","'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n constructor() {\n this.head = null\n this.tail = null\n this.length = 0\n }\n push(v) {\n const entry = {\n data: v,\n next: null\n }\n if (this.length > 0) this.tail.next = entry\n else this.head = entry\n this.tail = entry\n ++this.length\n }\n unshift(v) {\n const entry = {\n data: v,\n next: this.head\n }\n if (this.length === 0) this.tail = entry\n this.head = entry\n ++this.length\n }\n shift() {\n if (this.length === 0) return\n const ret = this.head.data\n if (this.length === 1) this.head = this.tail = null\n else this.head = this.head.next\n --this.length\n return ret\n }\n clear() {\n this.head = this.tail = null\n this.length = 0\n }\n join(s) {\n if (this.length === 0) return ''\n let p = this.head\n let ret = '' + p.data\n while ((p = p.next) !== null) ret += s + p.data\n return ret\n }\n concat(n) {\n if (this.length === 0) return Buffer.alloc(0)\n const ret = Buffer.allocUnsafe(n >>> 0)\n let p = this.head\n let i = 0\n while (p) {\n TypedArrayPrototypeSet(ret, p.data, i)\n i += p.data.length\n p = p.next\n }\n return ret\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n consume(n, hasStrings) {\n const data = this.head.data\n if (n < data.length) {\n // `slice` is the same for buffers and strings.\n const slice = data.slice(0, n)\n this.head.data = data.slice(n)\n return slice\n }\n if (n === data.length) {\n // First chunk is a perfect match.\n return this.shift()\n }\n // Result spans more than one buffer.\n return hasStrings ? this._getString(n) : this._getBuffer(n)\n }\n first() {\n return this.head.data\n }\n *[SymbolIterator]() {\n for (let p = this.head; p; p = p.next) {\n yield p.data\n }\n }\n\n // Consumes a specified amount of characters from the buffered data.\n _getString(n) {\n let ret = ''\n let p = this.head\n let c = 0\n do {\n const str = p.data\n if (n > str.length) {\n ret += str\n n -= str.length\n } else {\n if (n === str.length) {\n ret += str\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n ret += StringPrototypeSlice(str, 0, n)\n this.head = p\n p.data = StringPrototypeSlice(str, n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n _getBuffer(n) {\n const ret = Buffer.allocUnsafe(n)\n const retLen = n\n let p = this.head\n let c = 0\n do {\n const buf = p.data\n if (n > buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n n -= buf.length\n } else {\n if (n === buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n this.head = p\n p.data = buf.slice(n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n return inspect(this, {\n ...options,\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n })\n }\n}\n","'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n validateInteger(value, 'value', 0)\n if (objectMode) {\n defaultHighWaterMarkObjectMode = value\n } else {\n defaultHighWaterMarkBytes = value\n }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n if (hwm != null) {\n if (!NumberIsInteger(hwm) || hwm < 0) {\n const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n throw new ERR_INVALID_ARG_VALUE(name, hwm)\n }\n return MathFloor(hwm)\n }\n\n // Default value\n return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n getHighWaterMark,\n getDefaultHighWaterMark,\n setDefaultHighWaterMark\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n let iterator\n if (typeof iterable === 'string' || iterable instanceof Buffer) {\n return new Readable({\n objectMode: true,\n ...opts,\n read() {\n this.push(iterable)\n this.push(null)\n }\n })\n }\n let isAsync\n if (iterable && iterable[SymbolAsyncIterator]) {\n isAsync = true\n iterator = iterable[SymbolAsyncIterator]()\n } else if (iterable && iterable[SymbolIterator]) {\n isAsync = false\n iterator = iterable[SymbolIterator]()\n } else {\n throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n }\n const readable = new Readable({\n objectMode: true,\n highWaterMark: 1,\n // TODO(ronag): What options should be allowed?\n ...opts\n })\n\n // Flag to protect against _read\n // being called before last iteration completion.\n let reading = false\n readable._read = function () {\n if (!reading) {\n reading = true\n next()\n }\n }\n readable._destroy = function (error, cb) {\n PromisePrototypeThen(\n close(error),\n () => process.nextTick(cb, error),\n // nextTick is here in case cb throws\n (e) => process.nextTick(cb, e || error)\n )\n }\n async function close(error) {\n const hadError = error !== undefined && error !== null\n const hasThrow = typeof iterator.throw === 'function'\n if (hadError && hasThrow) {\n const { value, done } = await iterator.throw(error)\n await value\n if (done) {\n return\n }\n }\n if (typeof iterator.return === 'function') {\n const { value } = await iterator.return()\n await value\n }\n }\n async function next() {\n for (;;) {\n try {\n const { value, done } = isAsync ? await iterator.next() : iterator.next()\n if (done) {\n readable.push(null)\n } else {\n const res = value && typeof value.then === 'function' ? await value : value\n if (res === null) {\n reading = false\n throw new ERR_STREAM_NULL_VALUES()\n } else if (readable.push(res)) {\n continue\n } else {\n reading = false\n }\n }\n } catch (err) {\n readable.destroy(err)\n }\n break\n }\n }\n return readable\n}\nmodule.exports = from\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeIndexOf,\n NumberIsInteger,\n NumberIsNaN,\n NumberParseInt,\n ObjectDefineProperties,\n ObjectKeys,\n ObjectSetPrototypeOf,\n Promise,\n SafeSet,\n SymbolAsyncDispose,\n SymbolAsyncIterator,\n Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_OUT_OF_RANGE,\n ERR_STREAM_PUSH_AFTER_EOF,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder/')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n return {\n enumerable: false,\n get() {\n return (this.state & bit) !== 0\n },\n set(value) {\n if (value) this.state |= bit\n else this.state &= ~bit\n }\n }\n}\nObjectDefineProperties(ReadableState.prototype, {\n objectMode: makeBitMapDescriptor(kObjectMode),\n ended: makeBitMapDescriptor(kEnded),\n endEmitted: makeBitMapDescriptor(kEndEmitted),\n reading: makeBitMapDescriptor(kReading),\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n constructed: makeBitMapDescriptor(kConstructed),\n // A flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n sync: makeBitMapDescriptor(kSync),\n // Whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n needReadable: makeBitMapDescriptor(kNeedReadable),\n emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n readableListening: makeBitMapDescriptor(kReadableListening),\n resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n // True if the error was already emitted and should not be thrown again.\n errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n emitClose: makeBitMapDescriptor(kEmitClose),\n autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n // Has it been destroyed.\n destroyed: makeBitMapDescriptor(kDestroyed),\n // Indicates whether the stream has finished destroying.\n closed: makeBitMapDescriptor(kClosed),\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n // If true, a maybeReadMore has been scheduled.\n readingMore: makeBitMapDescriptor(kReadingMore),\n dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Bit map field to store ReadableState more effciently with 1 bit per field\n // instead of a V8 slot per field.\n this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n // Object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away.\n if (options && options.objectMode) this.state |= kObjectMode\n if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n // The point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift().\n this.buffer = new BufferList()\n this.length = 0\n this.pipes = []\n this.flowing = null\n this[kPaused] = null\n\n // Should close be emitted on destroy. Defaults to true.\n if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n // Should .destroy() be called after 'end' (and potentially 'finish').\n if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n // Indicates whether the stream has errored. When true no further\n // _read calls, 'data' or 'readable' events should occur. This is needed\n // since when autoDestroy is disabled we need a way to tell whether the\n // stream has failed.\n this.errored = null\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Ref the piped dest which we need a drain event on it\n // type: null | Writable | Set<Writable>.\n this.awaitDrainWriters = null\n this.decoder = null\n this.encoding = null\n if (options && options.encoding) {\n this.decoder = new StringDecoder(options.encoding)\n this.encoding = options.encoding\n }\n}\nfunction Readable(options) {\n if (!(this instanceof Readable)) return new Readable(options)\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n this._readableState = new ReadableState(options, this, isDuplex)\n if (options) {\n if (typeof options.read === 'function') this._read = options.read\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n if (this._readableState.needReadable) {\n maybeReadMore(this, this._readableState)\n }\n })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n let error\n if (!this.destroyed) {\n error = this.readableEnded ? null : new AbortError()\n this.destroy(error)\n }\n return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n debug('readableAddChunk', chunk)\n const state = stream._readableState\n let err\n if ((state.state & kObjectMode) === 0) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding\n if (state.encoding !== encoding) {\n if (addToFront && state.encoding) {\n // When unshifting, if state.encoding is set, we have to save\n // the string in the BufferList with the state encoding.\n chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n } else {\n chunk = Buffer.from(chunk, encoding)\n encoding = ''\n }\n }\n } else if (chunk instanceof Buffer) {\n encoding = ''\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = ''\n } else if (chunk != null) {\n err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n if (err) {\n errorOrDestroy(stream, err)\n } else if (chunk === null) {\n state.state &= ~kReading\n onEofChunk(stream, state)\n } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n if (addToFront) {\n if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n else if (state.destroyed || state.errored) return false\n else addChunk(stream, state, chunk, true)\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n } else if (state.destroyed || state.errored) {\n return false\n } else {\n state.state &= ~kReading\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk)\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n else maybeReadMore(stream, state)\n } else {\n addChunk(stream, state, chunk, false)\n }\n }\n } else if (!addToFront) {\n state.state &= ~kReading\n maybeReadMore(stream, state)\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n // Use the guard to avoid creating `Set()` repeatedly\n // when we have multiple pipes.\n if ((state.state & kMultiAwaitDrain) !== 0) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n state.dataEmitted = true\n stream.emit('data', chunk)\n } else {\n // Update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length\n if (addToFront) state.buffer.unshift(chunk)\n else state.buffer.push(chunk)\n if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n }\n maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n const state = this._readableState\n return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n const decoder = new StringDecoder(enc)\n this._readableState.decoder = decoder\n // If setEncoding(null), decoder.encoding equals utf8.\n this._readableState.encoding = this._readableState.decoder.encoding\n const buffer = this._readableState.buffer\n // Iterate over current buffer to convert already stored Buffers:\n let content = ''\n for (const data of buffer) {\n content += decoder.write(data)\n }\n buffer.clear()\n if (content !== '') buffer.push(content)\n this._readableState.length = content.length\n return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n if (n > MAX_HWM) {\n throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts.\n n--\n n |= n >>> 1\n n |= n >>> 2\n n |= n >>> 4\n n |= n >>> 8\n n |= n >>> 16\n n++\n }\n return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || (state.length === 0 && state.ended)) return 0\n if ((state.state & kObjectMode) !== 0) return 1\n if (NumberIsNaN(n)) {\n // Only flow one buffer at a time.\n if (state.flowing && state.length) return state.buffer.first().length\n return state.length\n }\n if (n <= state.length) return n\n return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n)\n // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n // in this scenario, so we are doing it manually.\n if (n === undefined) {\n n = NaN\n } else if (!NumberIsInteger(n)) {\n n = NumberParseInt(n, 10)\n }\n const state = this._readableState\n const nOrig = n\n\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n if (n !== 0) state.state &= ~kEmittedReadable\n\n // If we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (\n n === 0 &&\n state.needReadable &&\n ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n ) {\n debug('read: emitReadable', state.length, state.ended)\n if (state.length === 0 && state.ended) endReadable(this)\n else emitReadable(this)\n return null\n }\n n = howMuchToRead(n, state)\n\n // If we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this)\n return null\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n let doRead = (state.state & kNeedReadable) !== 0\n debug('need readable', doRead)\n\n // If we currently have less than the highWaterMark, then also read some.\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true\n debug('length less than watermark', doRead)\n }\n\n // However, if we've ended, then there's no point, if we're already\n // reading, then it's unnecessary, if we're constructing we have to wait,\n // and if we're destroyed or errored, then it's not allowed,\n if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n doRead = false\n debug('reading, ended or constructing', doRead)\n } else if (doRead) {\n debug('do read')\n state.state |= kReading | kSync\n // If the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.state |= kNeedReadable\n\n // Call internal read method\n try {\n this._read(state.highWaterMark)\n } catch (err) {\n errorOrDestroy(this, err)\n }\n state.state &= ~kSync\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state)\n }\n let ret\n if (n > 0) ret = fromList(n, state)\n else ret = null\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark\n n = 0\n } else {\n state.length -= n\n if (state.multiAwaitDrain) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this)\n }\n if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n state.dataEmitted = true\n this.emit('data', ret)\n }\n return ret\n}\nfunction onEofChunk(stream, state) {\n debug('onEofChunk')\n if (state.ended) return\n if (state.decoder) {\n const chunk = state.decoder.end()\n if (chunk && chunk.length) {\n state.buffer.push(chunk)\n state.length += state.objectMode ? 1 : chunk.length\n }\n }\n state.ended = true\n if (state.sync) {\n // If we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call.\n emitReadable(stream)\n } else {\n // Emit 'readable' now to make sure it gets picked up.\n state.needReadable = false\n state.emittedReadable = true\n // We have to emit readable now that we are EOF. Modules\n // in the ecosystem (e.g. dicer) rely on this event being sync.\n emitReadable_(stream)\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n const state = stream._readableState\n debug('emitReadable', state.needReadable, state.emittedReadable)\n state.needReadable = false\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing)\n state.emittedReadable = true\n process.nextTick(emitReadable_, stream)\n }\n}\nfunction emitReadable_(stream) {\n const state = stream._readableState\n debug('emitReadable_', state.destroyed, state.length, state.ended)\n if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n stream.emit('readable')\n state.emittedReadable = false\n }\n\n // The stream needs another readable event if:\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore && state.constructed) {\n state.readingMore = true\n process.nextTick(maybeReadMore_, stream, state)\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (\n !state.reading &&\n !state.ended &&\n (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n ) {\n const len = state.length\n debug('maybeReadMore read 0')\n stream.read(0)\n if (len === state.length)\n // Didn't get any data, stop spinning.\n break\n }\n state.readingMore = false\n}\n\n// Abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n const src = this\n const state = this._readableState\n if (state.pipes.length === 1) {\n if (!state.multiAwaitDrain) {\n state.multiAwaitDrain = true\n state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n }\n }\n state.pipes.push(dest)\n debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n const endFn = doEnd ? onend : unpipe\n if (state.endEmitted) process.nextTick(endFn)\n else src.once('end', endFn)\n dest.on('unpipe', onunpipe)\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe')\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true\n cleanup()\n }\n }\n }\n function onend() {\n debug('onend')\n dest.end()\n }\n let ondrain\n let cleanedUp = false\n function cleanup() {\n debug('cleanup')\n // Cleanup event handlers once the pipe is broken.\n dest.removeListener('close', onclose)\n dest.removeListener('finish', onfinish)\n if (ondrain) {\n dest.removeListener('drain', ondrain)\n }\n dest.removeListener('error', onerror)\n dest.removeListener('unpipe', onunpipe)\n src.removeListener('end', onend)\n src.removeListener('end', unpipe)\n src.removeListener('data', ondata)\n cleanedUp = true\n\n // If the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n }\n function pause() {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if (!cleanedUp) {\n if (state.pipes.length === 1 && state.pipes[0] === dest) {\n debug('false write response, pause', 0)\n state.awaitDrainWriters = dest\n state.multiAwaitDrain = false\n } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n debug('false write response, pause', state.awaitDrainWriters.size)\n state.awaitDrainWriters.add(dest)\n }\n src.pause()\n }\n if (!ondrain) {\n // When the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n ondrain = pipeOnDrain(src, dest)\n dest.on('drain', ondrain)\n }\n }\n src.on('data', ondata)\n function ondata(chunk) {\n debug('ondata')\n const ret = dest.write(chunk)\n debug('dest.write', ret)\n if (ret === false) {\n pause()\n }\n }\n\n // If the dest has an error, then stop piping into it.\n // However, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er)\n unpipe()\n dest.removeListener('error', onerror)\n if (dest.listenerCount('error') === 0) {\n const s = dest._writableState || dest._readableState\n if (s && !s.errorEmitted) {\n // User incorrectly emitted 'error' directly on the stream.\n errorOrDestroy(dest, er)\n } else {\n dest.emit('error', er)\n }\n }\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror)\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish)\n unpipe()\n }\n dest.once('close', onclose)\n function onfinish() {\n debug('onfinish')\n dest.removeListener('close', onclose)\n unpipe()\n }\n dest.once('finish', onfinish)\n function unpipe() {\n debug('unpipe')\n src.unpipe(dest)\n }\n\n // Tell the dest that it's being piped to.\n dest.emit('pipe', src)\n\n // Start the flow if it hasn't been started already.\n\n if (dest.writableNeedDrain === true) {\n pause()\n } else if (!state.flowing) {\n debug('pipe resume')\n src.resume()\n }\n return dest\n}\nfunction pipeOnDrain(src, dest) {\n return function pipeOnDrainFunctionResult() {\n const state = src._readableState\n\n // `ondrain` will call directly,\n // `this` maybe not a reference to dest,\n // so we use the real dest here.\n if (state.awaitDrainWriters === dest) {\n debug('pipeOnDrain', 1)\n state.awaitDrainWriters = null\n } else if (state.multiAwaitDrain) {\n debug('pipeOnDrain', state.awaitDrainWriters.size)\n state.awaitDrainWriters.delete(dest)\n }\n if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n src.resume()\n }\n }\n}\nReadable.prototype.unpipe = function (dest) {\n const state = this._readableState\n const unpipeInfo = {\n hasUnpiped: false\n }\n\n // If we're not piping anywhere, then do nothing.\n if (state.pipes.length === 0) return this\n if (!dest) {\n // remove all.\n const dests = state.pipes\n state.pipes = []\n this.pause()\n for (let i = 0; i < dests.length; i++)\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n })\n return this\n }\n\n // Try to find the right one.\n const index = ArrayPrototypeIndexOf(state.pipes, dest)\n if (index === -1) return this\n state.pipes.splice(index, 1)\n if (state.pipes.length === 0) this.pause()\n dest.emit('unpipe', this, unpipeInfo)\n return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n const res = Stream.prototype.on.call(this, ev, fn)\n const state = this._readableState\n if (ev === 'data') {\n // Update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0\n\n // Try start flowing on next tick if stream isn't explicitly paused.\n if (state.flowing !== false) this.resume()\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true\n state.flowing = false\n state.emittedReadable = false\n debug('on readable', state.length, state.reading)\n if (state.length) {\n emitReadable(this)\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this)\n }\n }\n }\n return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n const res = Stream.prototype.removeListener.call(this, ev, fn)\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nfunction updateReadableListening(self) {\n const state = self._readableState\n state.readableListening = self.listenerCount('readable') > 0\n if (state.resumeScheduled && state[kPaused] === false) {\n // Flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true\n\n // Crude way to check if we should resume.\n } else if (self.listenerCount('data') > 0) {\n self.resume()\n } else if (!state.readableListening) {\n state.flowing = null\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0')\n self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n const state = this._readableState\n if (!state.flowing) {\n debug('resume')\n // We flow only if there is no one listening\n // for readable, but we still have to call\n // resume().\n state.flowing = !state.readableListening\n resume(this, state)\n }\n state[kPaused] = false\n return this\n}\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true\n process.nextTick(resume_, stream, state)\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading)\n if (!state.reading) {\n stream.read(0)\n }\n state.resumeScheduled = false\n stream.emit('resume')\n flow(stream)\n if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing)\n if (this._readableState.flowing !== false) {\n debug('pause')\n this._readableState.flowing = false\n this.emit('pause')\n }\n this._readableState[kPaused] = true\n return this\n}\nfunction flow(stream) {\n const state = stream._readableState\n debug('flow', state.flowing)\n while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n let paused = false\n\n // TODO (ronag): Should this.destroy(err) emit\n // 'error' on the wrapped stream? Would require\n // a static factory method, e.g. Readable.wrap(stream).\n\n stream.on('data', (chunk) => {\n if (!this.push(chunk) && stream.pause) {\n paused = true\n stream.pause()\n }\n })\n stream.on('end', () => {\n this.push(null)\n })\n stream.on('error', (err) => {\n errorOrDestroy(this, err)\n })\n stream.on('close', () => {\n this.destroy()\n })\n stream.on('destroy', () => {\n this.destroy()\n })\n this._read = () => {\n if (paused && stream.resume) {\n paused = false\n stream.resume()\n }\n }\n\n // Proxy all the other methods. Important when wrapping filters and duplexes.\n const streamKeys = ObjectKeys(stream)\n for (let j = 1; j < streamKeys.length; j++) {\n const i = streamKeys[j]\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = stream[i].bind(stream)\n }\n }\n return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n if (options !== undefined) {\n validateObject(options, 'options')\n }\n return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n if (typeof stream.read !== 'function') {\n stream = Readable.wrap(stream, {\n objectMode: true\n })\n }\n const iter = createAsyncIterator(stream, options)\n iter.stream = stream\n return iter\n}\nasync function* createAsyncIterator(stream, options) {\n let callback = nop\n function next(resolve) {\n if (this === stream) {\n callback()\n callback = nop\n } else {\n callback = resolve\n }\n }\n stream.on('readable', next)\n let error\n const cleanup = eos(\n stream,\n {\n writable: false\n },\n (err) => {\n error = err ? aggregateTwoErrors(error, err) : null\n callback()\n callback = nop\n }\n )\n try {\n while (true) {\n const chunk = stream.destroyed ? null : stream.read()\n if (chunk !== null) {\n yield chunk\n } else if (error) {\n throw error\n } else if (error === null) {\n return\n } else {\n await new Promise(next)\n }\n }\n } catch (err) {\n error = aggregateTwoErrors(error, err)\n throw error\n } finally {\n if (\n (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n (error === undefined || stream._readableState.autoDestroy)\n ) {\n destroyImpl.destroyer(stream, null)\n } else {\n stream.off('readable', next)\n cleanup()\n }\n }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n readable: {\n __proto__: null,\n get() {\n const r = this._readableState\n // r.readable === false means that this is part of a Duplex stream\n // where the readable side was disabled upon construction.\n // Compat. The user might manually disable readable side through\n // deprecated setter.\n return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n },\n set(val) {\n // Backwards compat.\n if (this._readableState) {\n this._readableState.readable = !!val\n }\n }\n },\n readableDidRead: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.dataEmitted\n }\n },\n readableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._readableState.readable !== false &&\n (this._readableState.destroyed || this._readableState.errored) &&\n !this._readableState.endEmitted\n )\n }\n },\n readableHighWaterMark: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark\n }\n },\n readableBuffer: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState && this._readableState.buffer\n }\n },\n readableFlowing: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.flowing\n },\n set: function (state) {\n if (this._readableState) {\n this._readableState.flowing = state\n }\n }\n },\n readableLength: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState.length\n }\n },\n readableObjectMode: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.objectMode : false\n }\n },\n readableEncoding: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.encoding : null\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.errored : null\n }\n },\n closed: {\n __proto__: null,\n get() {\n return this._readableState ? this._readableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.destroyed : false\n },\n set(value) {\n // We ignore the value if the stream\n // has not been initialized yet.\n if (!this._readableState) {\n return\n }\n\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n this._readableState.destroyed = value\n }\n },\n readableEnded: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.endEmitted : false\n }\n }\n})\nObjectDefineProperties(ReadableState.prototype, {\n // Legacy getter for `pipesCount`.\n pipesCount: {\n __proto__: null,\n get() {\n return this.pipes.length\n }\n },\n // Legacy property for `paused`.\n paused: {\n __proto__: null,\n get() {\n return this[kPaused] !== false\n },\n set(value) {\n this[kPaused] = !!value\n }\n }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered.\n if (state.length === 0) return null\n let ret\n if (state.objectMode) ret = state.buffer.shift()\n else if (!n || n >= state.length) {\n // Read it all, truncate the list.\n if (state.decoder) ret = state.buffer.join('')\n else if (state.buffer.length === 1) ret = state.buffer.first()\n else ret = state.buffer.concat(state.length)\n state.buffer.clear()\n } else {\n // read part of list.\n ret = state.buffer.consume(n, state.decoder)\n }\n return ret\n}\nfunction endReadable(stream) {\n const state = stream._readableState\n debug('endReadable', state.endEmitted)\n if (!state.endEmitted) {\n state.ended = true\n process.nextTick(endReadableNT, state, stream)\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length)\n\n // Check that we didn't get one last unshift.\n if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n state.endEmitted = true\n stream.emit('end')\n if (stream.writable && stream.allowHalfOpen === false) {\n process.nextTick(endWritableNT, stream)\n } else if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well.\n const wState = stream._writableState\n const autoDestroy =\n !wState ||\n (wState.autoDestroy &&\n // We don't expect the writable to ever 'finish'\n // if writable is explicitly set to false.\n (wState.finished || wState.writable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n }\n}\nfunction endWritableNT(stream) {\n const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n if (writable) {\n stream.end()\n }\n}\nReadable.from = function (iterable, opts) {\n return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n var _ref, _src$readableObjectMo\n return new Readable({\n objectMode:\n (_ref =\n (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n ? _src$readableObjectMo\n : src.objectMode) !== null && _ref !== undefined\n ? _ref\n : true,\n ...options,\n destroy(err, callback) {\n destroyImpl.destroyer(src, err)\n callback(err)\n }\n }).wrap(src)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeSlice,\n Error,\n FunctionPrototypeSymbolHasInstance,\n ObjectDefineProperty,\n ObjectDefineProperties,\n ObjectSetPrototypeOf,\n StringPrototypeToLowerCase,\n Symbol,\n SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_ALREADY_FINISHED,\n ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!(options && options.objectMode)\n if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n // The point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write().\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // if _final has been called.\n this.finalCalled = false\n\n // drain event flag.\n this.needDrain = false\n // At the start of calling end()\n this.ending = false\n // When end() has been called, and returned.\n this.ended = false\n // When 'finish' is emitted.\n this.finished = false\n\n // Has it been destroyed\n this.destroyed = false\n\n // Should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n const noDecode = !!(options && options.decodeStrings === false)\n this.decodeStrings = !noDecode\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0\n\n // A flag to see when we're in the middle of a write.\n this.writing = false\n\n // When true all writes will be buffered until .uncork() call.\n this.corked = 0\n\n // A flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true\n\n // A flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false\n\n // The callback that's passed to _write(chunk, cb).\n this.onwrite = onwrite.bind(undefined, stream)\n\n // The callback that the user supplies to write(chunk, encoding, cb).\n this.writecb = null\n\n // The amount that is being written when _write is called.\n this.writelen = 0\n\n // Storage for data passed to the afterWrite() callback in case of\n // synchronous _write() completion.\n this.afterWriteTickInfo = null\n resetBuffer(this)\n\n // Number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted.\n this.pendingcb = 0\n\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n this.constructed = true\n\n // Emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams.\n this.prefinished = false\n\n // True if the error was already emitted and should not be thrown again.\n this.errorEmitted = false\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = !options || options.emitClose !== false\n\n // Should .destroy() be called after 'finish' (and potentially 'end').\n this.autoDestroy = !options || options.autoDestroy !== false\n\n // Indicates whether the stream has errored. When true all write() calls\n // should return false. This is needed since when autoDestroy\n // is disabled we need a way to tell whether the stream has failed.\n this.errored = null\n\n // Indicates whether the stream has finished destroying.\n this.closed = false\n\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n this.closeEmitted = false\n this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n state.buffered = []\n state.bufferedIndex = 0\n state.allBuffers = true\n state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n __proto__: null,\n get() {\n return this.buffered.length - this.bufferedIndex\n }\n})\nfunction Writable(options) {\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n this._writableState = new WritableState(options, this, isDuplex)\n if (options) {\n if (typeof options.write === 'function') this._write = options.write\n if (typeof options.writev === 'function') this._writev = options.writev\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.final === 'function') this._final = options.final\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n const state = this._writableState\n if (!state.writing) {\n clearBuffer(this, state)\n }\n finishMaybe(this, state)\n })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n __proto__: null,\n value: function (object) {\n if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n if (this !== Writable) return false\n return object && object._writableState instanceof WritableState\n }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n const state = stream._writableState\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = state.defaultEncoding\n } else {\n if (!encoding) encoding = state.defaultEncoding\n else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n if (typeof cb !== 'function') cb = nop\n }\n if (chunk === null) {\n throw new ERR_STREAM_NULL_VALUES()\n } else if (!state.objectMode) {\n if (typeof chunk === 'string') {\n if (state.decodeStrings !== false) {\n chunk = Buffer.from(chunk, encoding)\n encoding = 'buffer'\n }\n } else if (chunk instanceof Buffer) {\n encoding = 'buffer'\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = 'buffer'\n } else {\n throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n let err\n if (state.ending) {\n err = new ERR_STREAM_WRITE_AFTER_END()\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('write')\n }\n if (err) {\n process.nextTick(cb, err)\n errorOrDestroy(stream, err, true)\n return err\n }\n state.pendingcb++\n return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n const state = this._writableState\n if (state.corked) {\n state.corked--\n if (!state.writing) clearBuffer(this, state)\n }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n this._writableState.defaultEncoding = encoding\n return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n const len = state.objectMode ? 1 : chunk.length\n state.length += len\n\n // stream._write resets state.length\n const ret = state.length < state.highWaterMark\n // We must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true\n if (state.writing || state.corked || state.errored || !state.constructed) {\n state.buffered.push({\n chunk,\n encoding,\n callback\n })\n if (state.allBuffers && encoding !== 'buffer') {\n state.allBuffers = false\n }\n if (state.allNoop && callback !== nop) {\n state.allNoop = false\n }\n } else {\n state.writelen = len\n state.writecb = callback\n state.writing = true\n state.sync = true\n stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n }\n\n // Return false if errored or destroyed in order to break\n // any synchronous while(stream.write(data)) loops.\n return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len\n state.writecb = cb\n state.writing = true\n state.sync = true\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n else if (writev) stream._writev(chunk, state.onwrite)\n else stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n --state.pendingcb\n cb(er)\n // Ensure callbacks are invoked even when autoDestroy is\n // not enabled. Passing `er` here doesn't make sense since\n // it's related to one specific write, not to the buffered\n // writes.\n errorBuffer(state)\n // This can emit error, but error must always follow cb.\n errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n const state = stream._writableState\n const sync = state.sync\n const cb = state.writecb\n if (typeof cb !== 'function') {\n errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n return\n }\n state.writing = false\n state.writecb = null\n state.length -= state.writelen\n state.writelen = 0\n if (er) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n er.stack // eslint-disable-line no-unused-expressions\n\n if (!state.errored) {\n state.errored = er\n }\n\n // In case of duplex streams we need to notify the readable side of the\n // error.\n if (stream._readableState && !stream._readableState.errored) {\n stream._readableState.errored = er\n }\n if (sync) {\n process.nextTick(onwriteError, stream, state, er, cb)\n } else {\n onwriteError(stream, state, er, cb)\n }\n } else {\n if (state.buffered.length > state.bufferedIndex) {\n clearBuffer(stream, state)\n }\n if (sync) {\n // It is a common case that the callback passed to .write() is always\n // the same. In that case, we do not schedule a new nextTick(), but\n // rather just increase a counter, to improve performance and avoid\n // memory allocations.\n if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n state.afterWriteTickInfo.count++\n } else {\n state.afterWriteTickInfo = {\n count: 1,\n cb,\n stream,\n state\n }\n process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n }\n } else {\n afterWrite(stream, state, 1, cb)\n }\n }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n state.afterWriteTickInfo = null\n return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n if (needDrain) {\n state.needDrain = false\n stream.emit('drain')\n }\n while (count-- > 0) {\n state.pendingcb--\n cb()\n }\n if (state.destroyed) {\n errorBuffer(state)\n }\n finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n if (state.writing) {\n return\n }\n for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n var _state$errored\n const { chunk, callback } = state.buffered[n]\n const len = state.objectMode ? 1 : chunk.length\n state.length -= len\n callback(\n (_state$errored = state.errored) !== null && _state$errored !== undefined\n ? _state$errored\n : new ERR_STREAM_DESTROYED('write')\n )\n }\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n var _state$errored2\n onfinishCallbacks[i](\n (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n ? _state$errored2\n : new ERR_STREAM_DESTROYED('end')\n )\n }\n resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n return\n }\n const { buffered, bufferedIndex, objectMode } = state\n const bufferedLength = buffered.length - bufferedIndex\n if (!bufferedLength) {\n return\n }\n let i = bufferedIndex\n state.bufferProcessing = true\n if (bufferedLength > 1 && stream._writev) {\n state.pendingcb -= bufferedLength - 1\n const callback = state.allNoop\n ? nop\n : (err) => {\n for (let n = i; n < buffered.length; ++n) {\n buffered[n].callback(err)\n }\n }\n // Make a copy of `buffered` if it's going to be used by `callback` above,\n // since `doWrite` will mutate the array.\n const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n chunks.allBuffers = state.allBuffers\n doWrite(stream, state, true, state.length, chunks, '', callback)\n resetBuffer(state)\n } else {\n do {\n const { chunk, encoding, callback } = buffered[i]\n buffered[i++] = null\n const len = objectMode ? 1 : chunk.length\n doWrite(stream, state, false, len, chunk, encoding, callback)\n } while (i < buffered.length && !state.writing)\n if (i === buffered.length) {\n resetBuffer(state)\n } else if (i > 256) {\n buffered.splice(0, i)\n state.bufferedIndex = 0\n } else {\n state.bufferedIndex = i\n }\n }\n state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n if (this._writev) {\n this._writev(\n [\n {\n chunk,\n encoding\n }\n ],\n cb\n )\n } else {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n const state = this._writableState\n if (typeof chunk === 'function') {\n cb = chunk\n chunk = null\n encoding = null\n } else if (typeof encoding === 'function') {\n cb = encoding\n encoding = null\n }\n let err\n if (chunk !== null && chunk !== undefined) {\n const ret = _write(this, chunk, encoding)\n if (ret instanceof Error) {\n err = ret\n }\n }\n\n // .end() fully uncorks.\n if (state.corked) {\n state.corked = 1\n this.uncork()\n }\n if (err) {\n // Do nothing...\n } else if (!state.errored && !state.ending) {\n // This is forgiving in terms of unnecessary calls to end() and can hide\n // logic errors. However, usually such errors are harmless and causing a\n // hard error can be disproportionately destructive. It is not always\n // trivial for the user to determine whether end() needs to be called\n // or not.\n\n state.ending = true\n finishMaybe(this, state, true)\n state.ended = true\n } else if (state.finished) {\n err = new ERR_STREAM_ALREADY_FINISHED('end')\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('end')\n }\n if (typeof cb === 'function') {\n if (err || state.finished) {\n process.nextTick(cb, err)\n } else {\n state[kOnFinished].push(cb)\n }\n }\n return this\n}\nfunction needFinish(state) {\n return (\n state.ending &&\n !state.destroyed &&\n state.constructed &&\n state.length === 0 &&\n !state.errored &&\n state.buffered.length === 0 &&\n !state.finished &&\n !state.writing &&\n !state.errorEmitted &&\n !state.closeEmitted\n )\n}\nfunction callFinal(stream, state) {\n let called = false\n function onFinish(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n state.pendingcb--\n if (err) {\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i](err)\n }\n errorOrDestroy(stream, err, state.sync)\n } else if (needFinish(state)) {\n state.prefinished = true\n stream.emit('prefinish')\n // Backwards compat. Don't check state.sync here.\n // Some streams assume 'finish' will be emitted\n // asynchronously relative to _final callback.\n state.pendingcb++\n process.nextTick(finish, stream, state)\n }\n }\n state.sync = true\n state.pendingcb++\n try {\n stream._final(onFinish)\n } catch (err) {\n onFinish(err)\n }\n state.sync = false\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.finalCalled = true\n callFinal(stream, state)\n } else {\n state.prefinished = true\n stream.emit('prefinish')\n }\n }\n}\nfunction finishMaybe(stream, state, sync) {\n if (needFinish(state)) {\n prefinish(stream, state)\n if (state.pendingcb === 0) {\n if (sync) {\n state.pendingcb++\n process.nextTick(\n (stream, state) => {\n if (needFinish(state)) {\n finish(stream, state)\n } else {\n state.pendingcb--\n }\n },\n stream,\n state\n )\n } else if (needFinish(state)) {\n state.pendingcb++\n finish(stream, state)\n }\n }\n }\n}\nfunction finish(stream, state) {\n state.pendingcb--\n state.finished = true\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i]()\n }\n stream.emit('finish')\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well.\n const rState = stream._readableState\n const autoDestroy =\n !rState ||\n (rState.autoDestroy &&\n // We don't expect the readable to ever 'end'\n // if readable is explicitly set to false.\n (rState.endEmitted || rState.readable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n}\nObjectDefineProperties(Writable.prototype, {\n closed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.destroyed : false\n },\n set(value) {\n // Backward compatibility, the user is explicitly managing destroyed.\n if (this._writableState) {\n this._writableState.destroyed = value\n }\n }\n },\n writable: {\n __proto__: null,\n get() {\n const w = this._writableState\n // w.writable === false means that this is part of a Duplex stream\n // where the writable side was disabled upon construction.\n // Compat. The user might manually disable writable side through\n // deprecated setter.\n return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n },\n set(val) {\n // Backwards compatible.\n if (this._writableState) {\n this._writableState.writable = !!val\n }\n }\n },\n writableFinished: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.finished : false\n }\n },\n writableObjectMode: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.objectMode : false\n }\n },\n writableBuffer: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.getBuffer()\n }\n },\n writableEnded: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.ending : false\n }\n },\n writableNeedDrain: {\n __proto__: null,\n get() {\n const wState = this._writableState\n if (!wState) return false\n return !wState.destroyed && !wState.ending && wState.needDrain\n }\n },\n writableHighWaterMark: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.highWaterMark\n }\n },\n writableCorked: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.corked : 0\n }\n },\n writableLength: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.length\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._writableState ? this._writableState.errored : null\n }\n },\n writableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._writableState.writable !== false &&\n (this._writableState.destroyed || this._writableState.errored) &&\n !this._writableState.finished\n )\n }\n }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n const state = this._writableState\n\n // Invoke pending callbacks.\n if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n process.nextTick(errorBuffer, state)\n }\n destroy.call(this, err, cb)\n return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n isReadable,\n isWritable,\n isIterable,\n isNodeStream,\n isReadableNodeStream,\n isWritableNodeStream,\n isDuplexNodeStream,\n isReadableStream,\n isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n constructor(options) {\n super(options)\n\n // https://github.com/nodejs/node/pull/34385\n\n if ((options === null || options === undefined ? undefined : options.readable) === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if ((options === null || options === undefined ? undefined : options.writable) === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n }\n}\nmodule.exports = function duplexify(body, name) {\n if (isDuplexNodeStream(body)) {\n return body\n }\n if (isReadableNodeStream(body)) {\n return _duplexify({\n readable: body\n })\n }\n if (isWritableNodeStream(body)) {\n return _duplexify({\n writable: body\n })\n }\n if (isNodeStream(body)) {\n return _duplexify({\n writable: false,\n readable: false\n })\n }\n if (isReadableStream(body)) {\n return _duplexify({\n readable: Readable.fromWeb(body)\n })\n }\n if (isWritableStream(body)) {\n return _duplexify({\n writable: Writable.fromWeb(body)\n })\n }\n if (typeof body === 'function') {\n const { value, write, final, destroy } = fromAsyncGen(body)\n if (isIterable(value)) {\n return from(Duplexify, value, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n write,\n final,\n destroy\n })\n }\n const then = value === null || value === undefined ? undefined : value.then\n if (typeof then === 'function') {\n let d\n const promise = FunctionPrototypeCall(\n then,\n value,\n (val) => {\n if (val != null) {\n throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n }\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n // TODO (ronag): highWaterMark?\n objectMode: true,\n readable: false,\n write,\n final(cb) {\n final(async () => {\n try {\n await promise\n process.nextTick(cb, null)\n } catch (err) {\n process.nextTick(cb, err)\n }\n })\n },\n destroy\n }))\n }\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n }\n if (isBlob(body)) {\n return duplexify(body.arrayBuffer())\n }\n if (isIterable(body)) {\n return from(Duplexify, body, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n writable: false\n })\n }\n if (\n isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n isWritableStream(body === null || body === undefined ? undefined : body.writable)\n ) {\n return Duplexify.fromWeb(body)\n }\n if (\n typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n ) {\n const readable =\n body !== null && body !== undefined && body.readable\n ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n ? body === null || body === undefined\n ? undefined\n : body.readable\n : duplexify(body.readable)\n : undefined\n const writable =\n body !== null && body !== undefined && body.writable\n ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n ? body === null || body === undefined\n ? undefined\n : body.writable\n : duplexify(body.writable)\n : undefined\n return _duplexify({\n readable,\n writable\n })\n }\n const then = body === null || body === undefined ? undefined : body.then\n if (typeof then === 'function') {\n let d\n FunctionPrototypeCall(\n then,\n body,\n (val) => {\n if (val != null) {\n d.push(val)\n }\n d.push(null)\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n objectMode: true,\n writable: false,\n read() {}\n }))\n }\n throw new ERR_INVALID_ARG_TYPE(\n name,\n [\n 'Blob',\n 'ReadableStream',\n 'WritableStream',\n 'Stream',\n 'Iterable',\n 'AsyncIterable',\n 'Function',\n '{ readable, writable } pair',\n 'Promise'\n ],\n body\n )\n}\nfunction fromAsyncGen(fn) {\n let { promise, resolve } = createDeferredPromise()\n const ac = new AbortController()\n const signal = ac.signal\n const value = fn(\n (async function* () {\n while (true) {\n const _promise = promise\n promise = null\n const { chunk, done, cb } = await _promise\n process.nextTick(cb)\n if (done) return\n if (signal.aborted)\n throw new AbortError(undefined, {\n cause: signal.reason\n })\n ;({ promise, resolve } = createDeferredPromise())\n yield chunk\n }\n })(),\n {\n signal\n }\n )\n return {\n value,\n write(chunk, encoding, cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n chunk,\n done: false,\n cb\n })\n },\n final(cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n done: true,\n cb\n })\n },\n destroy(err, cb) {\n ac.abort()\n cb(err)\n }\n }\n}\nfunction _duplexify(pair) {\n const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n const w = pair.writable\n let readable = !!isReadable(r)\n let writable = !!isWritable(w)\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n }\n }\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplexify({\n // TODO (ronag): highWaterMark?\n readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n readable,\n writable\n })\n if (writable) {\n eos(w, (err) => {\n writable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n d._write = function (chunk, encoding, callback) {\n if (w.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n w.end()\n onfinish = callback\n }\n w.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n w.on('finish', function () {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n eos(r, (err) => {\n readable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n r.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n r.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = r.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n destroyer(w, err)\n destroyer(r, err)\n }\n }\n return d\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n ObjectDefineProperties,\n ObjectGetOwnPropertyDescriptor,\n ObjectKeys,\n ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n const keys = ObjectKeys(Writable.prototype)\n // Allow the keys array to be GC'ed.\n for (let i = 0; i < keys.length; i++) {\n const method = keys[i]\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options)\n Readable.call(this, options)\n Writable.call(this, options)\n if (options) {\n this.allowHalfOpen = options.allowHalfOpen !== false\n if (options.readable === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if (options.writable === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n } else {\n this.allowHalfOpen = true\n }\n}\nObjectDefineProperties(Duplex.prototype, {\n writable: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n },\n writableHighWaterMark: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n },\n writableObjectMode: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n },\n writableBuffer: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n },\n writableLength: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n },\n writableFinished: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n },\n writableCorked: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n },\n writableEnded: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n },\n writableNeedDrain: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n },\n destroyed: {\n __proto__: null,\n get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false\n }\n return this._readableState.destroyed && this._writableState.destroyed\n },\n set(value) {\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n if (this._readableState && this._writableState) {\n this._readableState.destroyed = value\n this._writableState.destroyed = value\n }\n }\n }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n if (!duplexify) {\n duplexify = require('./duplexify')\n }\n return duplexify(body, 'body')\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options)\n\n // TODO (ronag): This should preferably always be\n // applied but would be semver-major. Or even better;\n // make Transform a Readable with the Writable interface.\n const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n if (readableHighWaterMark === 0) {\n // A Duplex will buffer both on the writable and readable side while\n // a Transform just wants to buffer hwm number of elements. To avoid\n // buffering twice we disable buffering on the writable side.\n options = {\n ...options,\n highWaterMark: null,\n readableHighWaterMark,\n // TODO (ronag): 0 is not optimal since we have\n // a \"bug\" where we check needDrain before calling _write and not after.\n // Refs: https://github.com/nodejs/node/pull/32887\n // Refs: https://github.com/nodejs/node/pull/35941\n writableHighWaterMark: options.writableHighWaterMark || 0\n }\n }\n Duplex.call(this, options)\n\n // We have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false\n this[kCallback] = null\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform\n if (typeof options.flush === 'function') this._flush = options.flush\n }\n\n // When the writable side finishes, then flush out anything remaining.\n // Backwards compat. Some Transform streams incorrectly implement _final\n // instead of or in addition to _flush. By using 'prefinish' instead of\n // implementing _final we continue supporting this unfortunate use case.\n this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n if (typeof this._flush === 'function' && !this.destroyed) {\n this._flush((er, data) => {\n if (er) {\n if (cb) {\n cb(er)\n } else {\n this.destroy(er)\n }\n return\n }\n if (data != null) {\n this.push(data)\n }\n this.push(null)\n if (cb) {\n cb()\n }\n })\n } else {\n this.push(null)\n if (cb) {\n cb()\n }\n }\n}\nfunction prefinish() {\n if (this._final !== final) {\n final.call(this)\n }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n const rState = this._readableState\n const wState = this._writableState\n const length = rState.length\n this._transform(chunk, encoding, (err, val) => {\n if (err) {\n callback(err)\n return\n }\n if (val != null) {\n this.push(val)\n }\n if (\n wState.ended ||\n // Backwards compat.\n length === rState.length ||\n // Backwards compat.\n rState.length < rState.highWaterMark\n ) {\n callback()\n } else {\n this[kCallback] = callback\n }\n })\n}\nTransform.prototype._read = function () {\n if (this[kCallback]) {\n const callback = this[kCallback]\n this[kCallback] = null\n callback()\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options)\n Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_PREMATURE_CLOSE\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n isIterable,\n isReadable,\n isReadableNodeStream,\n isNodeStream,\n isTransformStream,\n isWebStream,\n isReadableStream,\n isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n let finished = false\n stream.on('close', () => {\n finished = true\n })\n const cleanup = eos(\n stream,\n {\n readable: reading,\n writable: writing\n },\n (err) => {\n finished = !err\n }\n )\n return {\n destroy: (err) => {\n if (finished) return\n finished = true\n destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n },\n cleanup\n }\n}\nfunction popCallback(streams) {\n // Streams should never be an empty array. It should always contain at least\n // a single stream. Therefore optimize for the average case instead of\n // checking for length === 0 as well.\n validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n if (isIterable(val)) {\n return val\n } else if (isReadableNodeStream(val)) {\n // Legacy streams are not Iterable.\n return fromReadable(val)\n }\n throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n if (!Readable) {\n Readable = require('./readable')\n }\n yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n let error\n let onresolve = null\n const resume = (err) => {\n if (err) {\n error = err\n }\n if (onresolve) {\n const callback = onresolve\n onresolve = null\n callback()\n }\n }\n const wait = () =>\n new Promise((resolve, reject) => {\n if (error) {\n reject(error)\n } else {\n onresolve = () => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n }\n }\n })\n writable.on('drain', resume)\n const cleanup = eos(\n writable,\n {\n readable: false\n },\n resume\n )\n try {\n if (writable.writableNeedDrain) {\n await wait()\n }\n for await (const chunk of iterable) {\n if (!writable.write(chunk)) {\n await wait()\n }\n }\n if (end) {\n writable.end()\n await wait()\n }\n finish()\n } catch (err) {\n finish(error !== err ? aggregateTwoErrors(error, err) : err)\n } finally {\n cleanup()\n writable.off('drain', resume)\n }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n if (isTransformStream(writable)) {\n writable = writable.writable\n }\n // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n const writer = writable.getWriter()\n try {\n for await (const chunk of readable) {\n await writer.ready\n writer.write(chunk).catch(() => {})\n }\n await writer.ready\n if (end) {\n await writer.close()\n }\n finish()\n } catch (err) {\n try {\n await writer.abort(err)\n finish(err)\n } catch (err) {\n finish(err)\n }\n }\n}\nfunction pipeline(...streams) {\n return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n if (streams.length === 1 && ArrayIsArray(streams[0])) {\n streams = streams[0]\n }\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams')\n }\n const ac = new AbortController()\n const signal = ac.signal\n const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n // Need to cleanup event listeners if last stream is readable\n // https://github.com/nodejs/node/issues/35452\n const lastStreamCleanup = []\n validateAbortSignal(outerSignal, 'options.signal')\n function abort() {\n finishImpl(new AbortError())\n }\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n let disposable\n if (outerSignal) {\n disposable = addAbortListener(outerSignal, abort)\n }\n let error\n let value\n const destroys = []\n let finishCount = 0\n function finish(err) {\n finishImpl(err, --finishCount === 0)\n }\n function finishImpl(err, final) {\n var _disposable\n if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n error = err\n }\n if (!error && !final) {\n return\n }\n while (destroys.length) {\n destroys.shift()(error)\n }\n ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n ac.abort()\n if (final) {\n if (!error) {\n lastStreamCleanup.forEach((fn) => fn())\n }\n process.nextTick(callback, error, value)\n }\n }\n let ret\n for (let i = 0; i < streams.length; i++) {\n const stream = streams[i]\n const reading = i < streams.length - 1\n const writing = i > 0\n const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n const isLastStream = i === streams.length - 1\n if (isNodeStream(stream)) {\n if (end) {\n const { destroy, cleanup } = destroyer(stream, reading, writing)\n destroys.push(destroy)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n\n // Catch stream errors that occur after pipe/pump has completed.\n function onError(err) {\n if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n finish(err)\n }\n }\n stream.on('error', onError)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(() => {\n stream.removeListener('error', onError)\n })\n }\n }\n if (i === 0) {\n if (typeof stream === 'function') {\n ret = stream({\n signal\n })\n if (!isIterable(ret)) {\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n }\n } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n } else if (typeof stream === 'function') {\n if (isTransformStream(ret)) {\n var _ret\n ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n } else {\n ret = makeAsyncIterable(ret)\n }\n ret = stream(ret, {\n signal\n })\n if (reading) {\n if (!isIterable(ret, true)) {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n }\n } else {\n var _ret2\n if (!PassThrough) {\n PassThrough = require('./passthrough')\n }\n\n // If the last argument to pipeline is not a stream\n // we must create a proxy stream so that pipeline(...)\n // always returns a stream which can be further\n // composed through `.pipe(stream)`.\n\n const pt = new PassThrough({\n objectMode: true\n })\n\n // Handle Promises/A+ spec, `then` could be a getter that throws on\n // second use.\n const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n if (typeof then === 'function') {\n finishCount++\n then.call(\n ret,\n (val) => {\n value = val\n if (val != null) {\n pt.write(val)\n }\n if (end) {\n pt.end()\n }\n process.nextTick(finish)\n },\n (err) => {\n pt.destroy(err)\n process.nextTick(finish, err)\n }\n )\n } else if (isIterable(ret, true)) {\n finishCount++\n pumpToNode(ret, pt, finish, {\n end\n })\n } else if (isReadableStream(ret) || isTransformStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, pt, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n }\n ret = pt\n const { destroy, cleanup } = destroyer(ret, false, true)\n destroys.push(destroy)\n if (isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n } else if (isNodeStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount += 2\n const cleanup = pipe(ret, stream, finish, {\n end\n })\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n } else if (isTransformStream(ret) || isReadableStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, stream, finish, {\n end\n })\n } else if (isIterable(ret)) {\n finishCount++\n pumpToNode(ret, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else if (isWebStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount++\n pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n end\n })\n } else if (isReadableStream(ret) || isIterable(ret)) {\n finishCount++\n pumpToWeb(ret, stream, finish, {\n end\n })\n } else if (isTransformStream(ret)) {\n finishCount++\n pumpToWeb(ret.readable, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n }\n if (\n (signal !== null && signal !== undefined && signal.aborted) ||\n (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n ) {\n process.nextTick(abort)\n }\n return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n let ended = false\n dst.on('close', () => {\n if (!ended) {\n // Finish if the destination closes before the source has completed.\n finish(new ERR_STREAM_PREMATURE_CLOSE())\n }\n })\n src.pipe(dst, {\n end: false\n }) // If end is true we already will have a listener to end dst.\n\n if (end) {\n // Compat. Before node v10.12.0 stdio used to throw an error so\n // pipe() did/does not end() stdio destinations.\n // Now they allow it but \"secretly\" don't close the underlying fd.\n\n function endFn() {\n ended = true\n dst.end()\n }\n if (isReadableFinished(src)) {\n // End the destination if the source has already ended.\n process.nextTick(endFn)\n } else {\n src.once('end', endFn)\n }\n } else {\n finish()\n }\n eos(\n src,\n {\n readable: true,\n writable: false\n },\n (err) => {\n const rState = src._readableState\n if (\n err &&\n err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n rState &&\n rState.ended &&\n !rState.errored &&\n !rState.errorEmitted\n ) {\n // Some readable streams will emit 'close' before 'end'. However, since\n // this is on the readable side 'end' should still be emitted if the\n // stream has been ended and no error emitted. This should be allowed in\n // favor of backwards compatibility. Since the stream is piped to a\n // destination this should not result in any observable difference.\n // We don't need to check if this is a writable premature close since\n // eos will only fail with premature close on the reading side for\n // duplex streams.\n src.once('end', finish).once('error', finish)\n } else {\n finish(err)\n }\n }\n )\n return eos(\n dst,\n {\n readable: false,\n writable: true\n },\n finish\n )\n}\nmodule.exports = {\n pipelineImpl,\n pipeline\n}\n","'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n isNodeStream,\n isReadable,\n isWritable,\n isWebStream,\n isTransformStream,\n isWritableStream,\n isReadableStream\n} = require('./utils')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n if (streams.length === 0) {\n throw new ERR_MISSING_ARGS('streams')\n }\n if (streams.length === 1) {\n return Duplex.from(streams[0])\n }\n const orgStreams = [...streams]\n if (typeof streams[0] === 'function') {\n streams[0] = Duplex.from(streams[0])\n }\n if (typeof streams[streams.length - 1] === 'function') {\n const idx = streams.length - 1\n streams[idx] = Duplex.from(streams[idx])\n }\n for (let n = 0; n < streams.length; ++n) {\n if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n // TODO(ronag): Add checks for non streams.\n continue\n }\n if (\n n < streams.length - 1 &&\n !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n ) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n }\n if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n }\n }\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n } else if (!readable && !writable) {\n d.destroy()\n }\n }\n const head = streams[0]\n const tail = pipeline(streams, onfinished)\n const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplex({\n // TODO (ronag): highWaterMark?\n writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n writable,\n readable\n })\n if (writable) {\n if (isNodeStream(head)) {\n d._write = function (chunk, encoding, callback) {\n if (head.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n head.end()\n onfinish = callback\n }\n head.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n } else if (isWebStream(head)) {\n const writable = isTransformStream(head) ? head.writable : head\n const writer = writable.getWriter()\n d._write = async function (chunk, encoding, callback) {\n try {\n await writer.ready\n writer.write(chunk).catch(() => {})\n callback()\n } catch (err) {\n callback(err)\n }\n }\n d._final = async function (callback) {\n try {\n await writer.ready\n writer.close().catch(() => {})\n onfinish = callback\n } catch (err) {\n callback(err)\n }\n }\n }\n const toRead = isTransformStream(tail) ? tail.readable : tail\n eos(toRead, () => {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n if (isNodeStream(tail)) {\n tail.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n tail.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = tail.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n } else if (isWebStream(tail)) {\n const readable = isTransformStream(tail) ? tail.readable : tail\n const reader = readable.getReader()\n d._read = async function () {\n while (true) {\n try {\n const { value, done } = await reader.read()\n if (!d.push(value)) {\n return\n }\n if (done) {\n d.push(null)\n return\n }\n } catch {\n return\n }\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n if (isNodeStream(tail)) {\n destroyer(tail, err)\n }\n }\n }\n return d\n}\n","'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n ArrayPrototypePush,\n Boolean,\n MathFloor,\n Number,\n NumberIsNaN,\n Promise,\n PromiseReject,\n PromiseResolve,\n PromisePrototypeThen,\n Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n if (isNodeStream(stream) && !isWritable(stream)) {\n throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n }\n const composedStream = staticCompose(this, stream)\n if (options !== null && options !== undefined && options.signal) {\n // Not validating as we already validated before\n addAbortSignalNoValidate(options.signal, composedStream)\n }\n return composedStream\n}\nfunction map(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let concurrency = 1\n if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n concurrency = MathFloor(options.concurrency)\n }\n let highWaterMark = concurrency - 1\n if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n highWaterMark = MathFloor(options.highWaterMark)\n }\n validateInteger(concurrency, 'options.concurrency', 1)\n validateInteger(highWaterMark, 'options.highWaterMark', 0)\n highWaterMark += concurrency\n return async function* map() {\n const signal = require('../../ours/util').AbortSignalAny(\n [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n )\n const stream = this\n const queue = []\n const signalOpt = {\n signal\n }\n let next\n let resume\n let done = false\n let cnt = 0\n function onCatch() {\n done = true\n afterItemProcessed()\n }\n function afterItemProcessed() {\n cnt -= 1\n maybeResume()\n }\n function maybeResume() {\n if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n resume()\n resume = null\n }\n }\n async function pump() {\n try {\n for await (let val of stream) {\n if (done) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n try {\n val = fn(val, signalOpt)\n if (val === kEmpty) {\n continue\n }\n val = PromiseResolve(val)\n } catch (err) {\n val = PromiseReject(err)\n }\n cnt += 1\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n if (next) {\n next()\n next = null\n }\n if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n await new Promise((resolve) => {\n resume = resolve\n })\n }\n }\n queue.push(kEof)\n } catch (err) {\n const val = PromiseReject(err)\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n } finally {\n done = true\n if (next) {\n next()\n next = null\n }\n }\n }\n pump()\n try {\n while (true) {\n while (queue.length > 0) {\n const val = await queue[0]\n if (val === kEof) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n if (val !== kEmpty) {\n yield val\n }\n queue.shift()\n maybeResume()\n }\n await new Promise((resolve) => {\n next = resolve\n })\n }\n } finally {\n done = true\n if (resume) {\n resume()\n resume = null\n }\n }\n }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n return async function* asIndexedPairs() {\n let index = 0\n for await (const val of this) {\n var _options$signal\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal = options.signal) !== null &&\n _options$signal !== undefined &&\n _options$signal.aborted\n ) {\n throw new AbortError({\n cause: options.signal.reason\n })\n }\n yield [index++, val]\n }\n }.call(this)\n}\nasync function some(fn, options = undefined) {\n for await (const unused of filter.call(this, fn, options)) {\n return true\n }\n return false\n}\nasync function every(fn, options = undefined) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n return !(await some.call(\n this,\n async (...args) => {\n return !(await fn(...args))\n },\n options\n ))\n}\nasync function find(fn, options) {\n for await (const result of filter.call(this, fn, options)) {\n return result\n }\n return undefined\n}\nasync function forEach(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function forEachFn(value, options) {\n await fn(value, options)\n return kEmpty\n }\n // eslint-disable-next-line no-unused-vars\n for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function filterFn(value, options) {\n if (await fn(value, options)) {\n return value\n }\n return kEmpty\n }\n return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n constructor() {\n super('reduce')\n this.message = 'Reduce of an empty stream requires an initial value'\n }\n}\nasync function reduce(reducer, initialValue, options) {\n var _options$signal2\n if (typeof reducer !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let hasInitialValue = arguments.length > 1\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal2 = options.signal) !== null &&\n _options$signal2 !== undefined &&\n _options$signal2.aborted\n ) {\n const err = new AbortError(undefined, {\n cause: options.signal.reason\n })\n this.once('error', () => {}) // The error is already propagated\n await finished(this.destroy(err))\n throw err\n }\n const ac = new AbortController()\n const signal = ac.signal\n if (options !== null && options !== undefined && options.signal) {\n const opts = {\n once: true,\n [kWeakHandler]: this,\n [kResistStopPropagation]: true\n }\n options.signal.addEventListener('abort', () => ac.abort(), opts)\n }\n let gotAnyItemFromStream = false\n try {\n for await (const value of this) {\n var _options$signal3\n gotAnyItemFromStream = true\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal3 = options.signal) !== null &&\n _options$signal3 !== undefined &&\n _options$signal3.aborted\n ) {\n throw new AbortError()\n }\n if (!hasInitialValue) {\n initialValue = value\n hasInitialValue = true\n } else {\n initialValue = await reducer(initialValue, value, {\n signal\n })\n }\n }\n if (!gotAnyItemFromStream && !hasInitialValue) {\n throw new ReduceAwareErrMissingArgs()\n }\n } finally {\n ac.abort()\n }\n return initialValue\n}\nasync function toArray(options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n const result = []\n for await (const val of this) {\n var _options$signal4\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal4 = options.signal) !== null &&\n _options$signal4 !== undefined &&\n _options$signal4.aborted\n ) {\n throw new AbortError(undefined, {\n cause: options.signal.reason\n })\n }\n ArrayPrototypePush(result, val)\n }\n return result\n}\nfunction flatMap(fn, options) {\n const values = map.call(this, fn, options)\n return async function* flatMap() {\n for await (const val of values) {\n yield* val\n }\n }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n // We coerce here to align with the spec\n // https://github.com/tc39/proposal-iterator-helpers/issues/169\n number = Number(number)\n if (NumberIsNaN(number)) {\n return 0\n }\n if (number < 0) {\n throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n }\n return number\n}\nfunction drop(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* drop() {\n var _options$signal5\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal5 = options.signal) !== null &&\n _options$signal5 !== undefined &&\n _options$signal5.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal6\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal6 = options.signal) !== null &&\n _options$signal6 !== undefined &&\n _options$signal6.aborted\n ) {\n throw new AbortError()\n }\n if (number-- <= 0) {\n yield val\n }\n }\n }.call(this)\n}\nfunction take(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* take() {\n var _options$signal7\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal7 = options.signal) !== null &&\n _options$signal7 !== undefined &&\n _options$signal7.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal8\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal8 = options.signal) !== null &&\n _options$signal8 !== undefined &&\n _options$signal8.aborted\n ) {\n throw new AbortError()\n }\n if (number-- > 0) {\n yield val\n }\n\n // Don't get another item from iterator in case we reached the end\n if (number <= 0) {\n return\n }\n }\n }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n drop,\n filter,\n flatMap,\n map,\n take,\n compose\n}\nmodule.exports.promiseReturningOperators = {\n every,\n forEach,\n reduce,\n toArray,\n some,\n find\n}\n","'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n return new Promise((resolve, reject) => {\n let signal\n let end\n const lastArg = streams[streams.length - 1]\n if (\n lastArg &&\n typeof lastArg === 'object' &&\n !isNodeStream(lastArg) &&\n !isIterable(lastArg) &&\n !isWebStream(lastArg)\n ) {\n const options = ArrayPrototypePop(streams)\n signal = options.signal\n end = options.end\n }\n pl(\n streams,\n (err, value) => {\n if (err) {\n reject(err)\n } else {\n resolve(value)\n }\n },\n {\n signal,\n end\n }\n )\n })\n}\nmodule.exports = {\n finished,\n pipeline\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n const op = streamReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return Stream.Readable.from(ReflectApply(op, this, args))\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n const op = promiseReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return ReflectApply(op, this, args)\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n __proto__: null,\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.pipeline\n }\n})\nObjectDefineProperty(eos, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.finished\n }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n","'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n","// **N3Store** objects store N3 quads by graph in memory.\nimport { Readable } from 'readable-stream';\nimport { default as N3DataFactory, termToId, termFromId } from './N3DataFactory';\nimport namespaces from './IRIs';\nimport { isDefaultGraph } from './N3Util';\nimport N3Writer from './N3Writer';\n\nconst ITERATOR = Symbol('iter');\n\nfunction merge(target, source, depth = 4) {\n if (depth === 0)\n return Object.assign(target, source);\n\n for (const key in source)\n target[key] = merge(target[key] || Object.create(null), source[key], depth - 1);\n\n return target;\n}\n\n/**\n * Determines the intersection of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no intersection; this should\n * *not* be set as the value for an index.\n */\nfunction intersect(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n if (key in s2) {\n const intersection = depth === 0 ? null : intersect(s1[key], s2[key], depth - 1);\n if (intersection !== false) {\n target = target || Object.create(null);\n target[key] = intersection;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Determines the difference of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no difference; this should\n * *not* be set as the value for an index.\n */\nfunction difference(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n // When the key is not in the index, then none of the triples defined by s1[key] are\n // in s2 and so we want to copy them over to the resultant store.\n if (!(key in s2)) {\n target = target || Object.create(null);\n target[key] = depth === 0 ? null : merge({}, s1[key], depth - 1);\n }\n else if (depth !== 0) {\n const diff = difference(s1[key], s2[key], depth - 1);\n if (diff !== false) {\n target = target || Object.create(null);\n target[key] = diff;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n// ## Constructor\nexport class N3EntityIndex {\n constructor(options = {}) {\n this._id = 1;\n // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers,\n // saving memory by using only numbers as keys in `_graphs`\n this._ids = Object.create(null);\n this._ids[''] = 1;\n // inverse of `_ids`\n this._entities = Object.create(null);\n this._entities[1] = '';\n // `_blankNodeIndex` is the index of the last automatically named blank node\n this._blankNodeIndex = 0;\n this._factory = options.factory || N3DataFactory;\n }\n\n _termFromId(id) {\n if (id[0] === '.') {\n const entities = this._entities;\n const terms = id.split('.');\n const q = this._factory.quad(\n this._termFromId(entities[terms[1]]),\n this._termFromId(entities[terms[2]]),\n this._termFromId(entities[terms[3]]),\n terms[4] && this._termFromId(entities[terms[4]]),\n );\n return q;\n }\n return termFromId(id, this._factory);\n }\n\n _termToNumericId(term) {\n if (term.termType === 'Quad') {\n const s = this._termToNumericId(term.subject),\n p = this._termToNumericId(term.predicate),\n o = this._termToNumericId(term.object);\n let g;\n\n return s && p && o && (isDefaultGraph(term.graph) || (g = this._termToNumericId(term.graph))) &&\n this._ids[g ? `.${s}.${p}.${o}.${g}` : `.${s}.${p}.${o}`];\n }\n return this._ids[termToId(term)];\n }\n\n _termToNewNumericId(term) {\n // This assumes that no graph term is present - we may wish to error if there is one\n const str = term && term.termType === 'Quad' ?\n `.${this._termToNewNumericId(term.subject)}.${this._termToNewNumericId(term.predicate)}.${this._termToNewNumericId(term.object)}${\n isDefaultGraph(term.graph) ? '' : `.${this._termToNewNumericId(term.graph)}`\n }`\n : termToId(term);\n\n return this._ids[str] || (this._ids[this._entities[++this._id] = str] = this._id);\n }\n\n createBlankNode(suggestedName) {\n let name, index;\n // Generate a name based on the suggested name\n if (suggestedName) {\n name = suggestedName = `_:${suggestedName}`, index = 1;\n while (this._ids[name])\n name = suggestedName + index++;\n }\n // Generate a generic blank node name\n else {\n do { name = `_:b${this._blankNodeIndex++}`; }\n while (this._ids[name]);\n }\n // Add the blank node to the entities, avoiding the generation of duplicates\n this._ids[name] = ++this._id;\n this._entities[this._id] = name;\n return this._factory.blankNode(name.substr(2));\n }\n}\n\n// ## Constructor\nexport default class N3Store {\n constructor(quads, options) {\n // The number of quads is initially zero\n this._size = 0;\n // `_graphs` contains subject, predicate, and object indexes per graph\n this._graphs = Object.create(null);\n\n // Shift parameters if `quads` is not given\n if (!options && quads && !quads[0] && !(typeof quads.match === 'function'))\n options = quads, quads = null;\n options = options || {};\n this._factory = options.factory || N3DataFactory;\n this._entityIndex = options.entityIndex || new N3EntityIndex({ factory: this._factory });\n this._entities = this._entityIndex._entities;\n this._termFromId = this._entityIndex._termFromId.bind(this._entityIndex);\n this._termToNumericId = this._entityIndex._termToNumericId.bind(this._entityIndex);\n this._termToNewNumericId = this._entityIndex._termToNewNumericId.bind(this._entityIndex);\n\n // Add quads if passed\n if (quads)\n this.addAll(quads);\n }\n\n // ## Public properties\n\n // ### `size` returns the number of quads in the store\n get size() {\n // Return the quad count if if was cached\n let size = this._size;\n if (size !== null)\n return size;\n\n // Calculate the number of quads by counting to the deepest level\n size = 0;\n const graphs = this._graphs;\n let subjects, subject;\n for (const graphKey in graphs)\n for (const subjectKey in (subjects = graphs[graphKey].subjects))\n for (const predicateKey in (subject = subjects[subjectKey]))\n size += Object.keys(subject[predicateKey]).length;\n return this._size = size;\n }\n\n // ## Private methods\n\n // ### `_addToIndex` adds a quad to a three-layered index.\n // Returns if the index has changed, if the entry did not already exist.\n _addToIndex(index0, key0, key1, key2) {\n // Create layers as necessary\n const index1 = index0[key0] || (index0[key0] = {});\n const index2 = index1[key1] || (index1[key1] = {});\n // Setting the key to _any_ value signals the presence of the quad\n const existed = key2 in index2;\n if (!existed)\n index2[key2] = null;\n return !existed;\n }\n\n // ### `_removeFromIndex` removes a quad from a three-layered index\n _removeFromIndex(index0, key0, key1, key2) {\n // Remove the quad from the index\n const index1 = index0[key0], index2 = index1[key1];\n delete index2[key2];\n\n // Remove intermediary index layers if they are empty\n for (const key in index2) return;\n delete index1[key1];\n for (const key in index1) return;\n delete index0[key0];\n }\n\n // ### `_findInIndex` finds a set of quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n // `name0`, `name1`, and `name2` are the names of the keys at each level,\n // used when reconstructing the resulting quad\n // (for instance: _subject_, _predicate_, and _object_).\n // Finally, `graphId` will be the graph of the created quads.\n *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) {\n let tmp, index1, index2;\n const entityKeys = this._entities;\n const graph = this._termFromId(entityKeys[graphId]);\n const parts = { subject: null, predicate: null, object: null };\n\n // If a key is specified, use only that part of index 0.\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n parts[name0] = this._termFromId(entityKeys[value0]);\n // If a key is specified, use only that part of index 1.\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n parts[name1] = this._termFromId(entityKeys[value1]);\n // If a key is specified, use only that part of index 2, if it exists.\n const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2);\n // Create quads for all items found in index 2.\n for (let l = 0; l < values.length; l++) {\n parts[name2] = this._termFromId(entityKeys[values[l]]);\n yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph);\n }\n }\n }\n }\n }\n }\n\n // ### `_loop` executes the callback on all keys of index 0\n _loop(index0, callback) {\n for (const key0 in index0)\n callback(key0);\n }\n\n // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0\n _loopByKey0(index0, key0, callback) {\n let index1, key1;\n if (index1 = index0[key0]) {\n for (key1 in index1)\n callback(key1);\n }\n }\n\n // ### `_loopByKey1` executes the callback on given keys of all entries in index 0\n _loopByKey1(index0, key1, callback) {\n let key0, index1;\n for (key0 in index0) {\n index1 = index0[key0];\n if (index1[key1])\n callback(key0);\n }\n }\n\n // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2\n _loopBy2Keys(index0, key0, key1, callback) {\n let index1, index2, key2;\n if ((index1 = index0[key0]) && (index2 = index1[key1])) {\n for (key2 in index2)\n callback(key2);\n }\n }\n\n // ### `_countInIndex` counts matching quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n _countInIndex(index0, key0, key1, key2) {\n let count = 0, tmp, index1, index2;\n\n // If a key is specified, count only that part of index 0\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n // If a key is specified, count only that part of index 1\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n // If a key is specified, count the quad if it exists\n if (key2) (key2 in index2) && count++;\n // Otherwise, count all quads\n else count += Object.keys(index2).length;\n }\n }\n }\n }\n return count;\n }\n\n // ### `_getGraphs` returns an array with the given graph,\n // or all graphs if the argument is null or undefined.\n _getGraphs(graph) {\n graph = graph === '' ? 1 : (graph && (this._termToNumericId(graph) || -1));\n return typeof graph !== 'number' ? this._graphs : { [graph]: this._graphs[graph] };\n }\n\n // ### `_uniqueEntities` returns a function that accepts an entity ID\n // and passes the corresponding entity to callback if it hasn't occurred before.\n _uniqueEntities(callback) {\n const uniqueIds = Object.create(null);\n return id => {\n if (!(id in uniqueIds)) {\n uniqueIds[id] = true;\n callback(this._termFromId(this._entities[id], this._factory));\n }\n };\n }\n\n // ## Public methods\n\n // ### `add` adds the specified quad to the dataset.\n // Returns the dataset instance it was called on.\n // Existing quads, as defined in Quad.equals, will be ignored.\n add(quad) {\n this.addQuad(quad);\n return this;\n }\n\n // ### `addQuad` adds a new quad to the store.\n // Returns if the quad index has changed, if the quad did not already exist.\n addQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n graph = subject.graph, object = subject.object,\n predicate = subject.predicate, subject = subject.subject;\n\n // Convert terms to internal string representation\n graph = graph ? this._termToNewNumericId(graph) : 1;\n\n // Find the graph that will contain the triple\n let graphItem = this._graphs[graph];\n // Create the graph if it doesn't exist yet\n if (!graphItem) {\n graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} };\n // Freezing a graph helps subsequent `add` performance,\n // and properties will never be modified anyway\n Object.freeze(graphItem);\n }\n\n // Since entities can often be long IRIs, we avoid storing them in every index.\n // Instead, we have a separate index that maps entities to numbers,\n // which are then used as keys in the other indexes.\n subject = this._termToNewNumericId(subject);\n predicate = this._termToNewNumericId(predicate);\n object = this._termToNewNumericId(object);\n\n if (!this._addToIndex(graphItem.subjects, subject, predicate, object))\n return false;\n this._addToIndex(graphItem.predicates, predicate, object, subject);\n this._addToIndex(graphItem.objects, object, subject, predicate);\n\n // The cached quad count is now invalid\n this._size = null;\n return true;\n }\n\n // ### `addQuads` adds multiple quads to the store\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `delete` removes the specified quad from the dataset.\n // Returns the dataset instance it was called on.\n delete(quad) {\n this.removeQuad(quad);\n return this;\n }\n\n // ### `has` determines whether a dataset includes a certain quad or quad pattern.\n has(subjectOrQuad, predicate, object, graph) {\n if (subjectOrQuad && subjectOrQuad.subject)\n ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad);\n return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done;\n }\n\n // ### `import` adds a stream of quads to the store\n import(stream) {\n stream.on('data', quad => { this.addQuad(quad); });\n return stream;\n }\n\n // ### `removeQuad` removes a quad from the store if it exists\n removeQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n ({ subject, predicate, object, graph } = subject);\n // Convert terms to internal string representation\n graph = graph ? this._termToNumericId(graph) : 1;\n\n // Find internal identifiers for all components\n // and verify the quad exists.\n const graphs = this._graphs;\n let graphItem, subjects, predicates;\n if (!(subject = subject && this._termToNumericId(subject)) || !(predicate = predicate && this._termToNumericId(predicate)) ||\n !(object = object && this._termToNumericId(object)) || !(graphItem = graphs[graph]) ||\n !(subjects = graphItem.subjects[subject]) ||\n !(predicates = subjects[predicate]) ||\n !(object in predicates))\n return false;\n\n // Remove it from all indexes\n this._removeFromIndex(graphItem.subjects, subject, predicate, object);\n this._removeFromIndex(graphItem.predicates, predicate, object, subject);\n this._removeFromIndex(graphItem.objects, object, subject, predicate);\n if (this._size !== null) this._size--;\n\n // Remove the graph if it is empty\n for (subject in graphItem.subjects) return true;\n delete graphs[graph];\n return true;\n }\n\n // ### `removeQuads` removes multiple quads from the store\n removeQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.removeQuad(quads[i]);\n }\n\n // ### `remove` removes a stream of quads from the store\n remove(stream) {\n stream.on('data', quad => { this.removeQuad(quad); });\n return stream;\n }\n\n // ### `removeMatches` removes all matching quads from the store\n // Setting any field to `undefined` or `null` indicates a wildcard.\n removeMatches(subject, predicate, object, graph) {\n const stream = new Readable({ objectMode: true });\n\n const iterable = this.readQuads(subject, predicate, object, graph);\n stream._read = size => {\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n stream.push(null);\n return;\n }\n stream.push(value);\n }\n };\n\n return this.remove(stream);\n }\n\n // ### `deleteGraph` removes all triples with the given graph from the store\n deleteGraph(graph) {\n return this.removeMatches(null, null, null, graph);\n }\n\n // ### `getQuads` returns an array of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getQuads(subject, predicate, object, graph) {\n return [...this.readQuads(subject, predicate, object, graph)];\n }\n\n /**\n * `readQuads` returns a generator of quads matching a pattern.\n * Setting any field to `undefined` or `null` indicates a wildcard.\n * @deprecated Use `match` instead.\n */\n *readQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, subjectId, predicateId,\n 'object', 'subject', 'predicate', graphId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n yield* this._findInIndex(content.subjects, subjectId, predicateId, null,\n 'subject', 'predicate', 'object', graphId);\n }\n else if (predicateId)\n // If only predicate and possibly object are given, the predicate index will be the fastest\n yield* this._findInIndex(content.predicates, predicateId, objectId, null,\n 'predicate', 'object', 'subject', graphId);\n else if (objectId)\n // If only object is given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, null, null,\n 'object', 'subject', 'predicate', graphId);\n else\n // If nothing is given, iterate subjects and predicates first\n yield* this._findInIndex(content.subjects, null, null, null,\n 'subject', 'predicate', 'object', graphId);\n }\n }\n }\n\n // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments.\n // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset.\n // Note: This method always returns a new DatasetCore, even if that dataset contains no quads.\n // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n // For backwards compatibility, the object return also implements the Readable stream interface.\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph, { entityIndex: this._entityIndex });\n }\n\n // ### `countQuads` returns the number of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n countQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let count = 0, content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return 0;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subject) {\n if (object)\n // If subject and object are given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n count += this._countInIndex(content.subjects, subjectId, predicateId, objectId);\n }\n else if (predicate) {\n // If only predicate and possibly object are given, the predicate index will be the fastest\n count += this._countInIndex(content.predicates, predicateId, objectId, subjectId);\n }\n else {\n // If only object is possibly given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n }\n }\n }\n return count;\n }\n\n // ### `forEach` executes the callback on all quads.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forEach(callback, subject, predicate, object, graph) {\n this.some(quad => {\n callback(quad, this);\n return false;\n }, subject, predicate, object, graph);\n }\n\n // ### `every` executes the callback on all quads,\n // and returns `true` if it returns truthy for all them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n every(callback, subject, predicate, object, graph) {\n return !this.some(quad => !callback(quad, this), subject, predicate, object, graph);\n }\n\n // ### `some` executes the callback on all quads,\n // and returns `true` if it returns truthy for any of them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n some(callback, subject, predicate, object, graph) {\n for (const quad of this.readQuads(subject, predicate, object, graph))\n if (callback(quad, this))\n return true;\n return false;\n }\n\n // ### `getSubjects` returns all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getSubjects(predicate, object, graph) {\n const results = [];\n this.forSubjects(s => { results.push(s); }, predicate, object, graph);\n return results;\n }\n\n // ### `forSubjects` executes the callback on all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forSubjects(callback, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, predicateId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (predicateId) {\n if (objectId)\n // If predicate and object are given, the POS index is best.\n this._loopBy2Keys(content.predicates, predicateId, objectId, callback);\n else\n // If only predicate is given, the SPO index is best.\n this._loopByKey1(content.subjects, predicateId, callback);\n }\n else if (objectId)\n // If only object is given, the OSP index is best.\n this._loopByKey0(content.objects, objectId, callback);\n else\n // If no params given, iterate all the subjects\n this._loop(content.subjects, callback);\n }\n }\n }\n\n // ### `getPredicates` returns all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getPredicates(subject, object, graph) {\n const results = [];\n this.forPredicates(p => { results.push(p); }, subject, object, graph);\n return results;\n }\n\n // ### `forPredicates` executes the callback on all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forPredicates(callback, subject, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the OSP index is best.\n this._loopBy2Keys(content.objects, objectId, subjectId, callback);\n else\n // If only subject is given, the SPO index is best.\n this._loopByKey0(content.subjects, subjectId, callback);\n }\n else if (objectId)\n // If only object is given, the POS index is best.\n this._loopByKey1(content.predicates, objectId, callback);\n else\n // If no params given, iterate all the predicates.\n this._loop(content.predicates, callback);\n }\n }\n }\n\n // ### `getObjects` returns all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getObjects(subject, predicate, graph) {\n const results = [];\n this.forObjects(o => { results.push(o); }, subject, predicate, graph);\n return results;\n }\n\n // ### `forObjects` executes the callback on all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forObjects(callback, subject, predicate, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (predicateId)\n // If subject and predicate are given, the SPO index is best.\n this._loopBy2Keys(content.subjects, subjectId, predicateId, callback);\n else\n // If only subject is given, the OSP index is best.\n this._loopByKey1(content.objects, subjectId, callback);\n }\n else if (predicateId)\n // If only predicate is given, the POS index is best.\n this._loopByKey0(content.predicates, predicateId, callback);\n else\n // If no params given, iterate all the objects.\n this._loop(content.objects, callback);\n }\n }\n }\n\n // ### `getGraphs` returns all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getGraphs(subject, predicate, object) {\n const results = [];\n this.forGraphs(g => { results.push(g); }, subject, predicate, object);\n return results;\n }\n\n // ### `forGraphs` executes the callback on all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forGraphs(callback, subject, predicate, object) {\n for (const graph in this._graphs) {\n this.some(quad => {\n callback(quad.graph);\n return true; // Halt iteration of some()\n }, subject, predicate, object, this._termFromId(this._entities[graph]));\n }\n }\n\n // ### `createBlankNode` creates a new blank node, returning its name\n createBlankNode(suggestedName) {\n return this._entityIndex.createBlankNode(suggestedName);\n }\n\n // ### `extractLists` finds and removes all list triples\n // and returns the items per list.\n extractLists({ remove = false, ignoreErrors = false } = {}) {\n const lists = {}; // has scalar keys so could be a simple Object\n const onError = ignoreErrors ? (() => true) :\n ((node, message) => { throw new Error(`${node.value} ${message}`); });\n\n // Traverse each list from its tail\n const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null);\n const toRemove = remove ? [...tails] : [];\n tails.forEach(tailQuad => {\n const items = []; // the members found as objects of rdf:first quads\n let malformed = false; // signals whether the current list is malformed\n let head; // the head of the list (_:b1 in above example)\n let headPos; // set to subject or object when head is set\n const graph = tailQuad.graph; // make sure list is in exactly one graph\n\n // Traverse the list from tail to end\n let current = tailQuad.subject;\n while (current && !malformed) {\n const objectQuads = this.getQuads(null, null, current, null);\n const subjectQuads = this.getQuads(current, null, null, null);\n let quad, first = null, rest = null, parent = null;\n\n // Find the first and rest of this list node\n for (let i = 0; i < subjectQuads.length && !malformed; i++) {\n quad = subjectQuads[i];\n if (!quad.graph.equals(graph))\n malformed = onError(current, 'not confined to single graph');\n else if (head)\n malformed = onError(current, 'has non-list arcs out');\n\n // one rdf:first\n else if (quad.predicate.value === namespaces.rdf.first) {\n if (first)\n malformed = onError(current, 'has multiple rdf:first arcs');\n else\n toRemove.push(first = quad);\n }\n\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (rest)\n malformed = onError(current, 'has multiple rdf:rest arcs');\n else\n toRemove.push(rest = quad);\n }\n\n // alien triple\n else if (objectQuads.length)\n malformed = onError(current, 'can\\'t be subject and object');\n else {\n head = quad; // e.g. { (1 2 3) :p :o }\n headPos = 'subject';\n }\n }\n\n // { :s :p (1 2) } arrives here with no head\n // { (1 2) :p :o } arrives here with head set to the list.\n for (let i = 0; i < objectQuads.length && !malformed; ++i) {\n quad = objectQuads[i];\n if (head)\n malformed = onError(current, 'can\\'t have coreferences');\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (parent)\n malformed = onError(current, 'has incoming rdf:rest arcs');\n else\n parent = quad;\n }\n else {\n head = quad; // e.g. { :s :p (1 2) }\n headPos = 'object';\n }\n }\n\n // Store the list item and continue with parent\n if (!first)\n malformed = onError(current, 'has no list head');\n else\n items.unshift(first.object);\n current = parent && parent.subject;\n }\n\n // Don't remove any quads if the list is malformed\n if (malformed)\n remove = false;\n // Store the list under the value of its head\n else if (head)\n lists[head[headPos].value] = items;\n });\n\n // Remove list quads if requested\n if (remove)\n this.removeQuads(toRemove);\n return lists;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n addAll(quads) {\n if (quads instanceof DatasetCoreAndReadableStream)\n quads = quads.filtered;\n\n if (Array.isArray(quads))\n this.addQuads(quads);\n else if (quads instanceof N3Store && quads._entityIndex === this._entityIndex) {\n if (quads._size !== 0) {\n this._graphs = merge(this._graphs, quads._graphs);\n this._size = null; // Invalidate the cached size\n }\n }\n else {\n for (const quad of quads)\n this.add(quad);\n }\n return this;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n contains(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return true;\n\n if (!(other instanceof N3Store) || this._entityIndex !== other._entityIndex)\n return other.every(quad => this.has(quad));\n\n const g1 = this._graphs, g2 = other._graphs;\n let s1, s2, p1, p2, o1;\n for (const graph in g2) {\n if (!(s1 = g1[graph])) return false;\n s1 = s1.subjects;\n for (const subject in (s2 = g2[graph].subjects)) {\n if (!(p1 = s1[subject])) return false;\n for (const predicate in (p2 = s2[subject])) {\n if (!(o1 = p1[predicate])) return false;\n for (const object in p2[predicate])\n if (!(object in o1)) return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This method removes the quads in the current dataset that match the given arguments.\n *\n * The logic described in {@link https://rdf.js.org/dataset-spec/#quad-matching|Quad Matching} is applied for each\n * quad in this dataset, to select the quads which will be deleted.\n *\n * @param subject The optional exact subject to match.\n * @param predicate The optional exact predicate to match.\n * @param object The optional exact object to match.\n * @param graph The optional exact graph to match.\n */\n deleteMatches(subject, predicate, object, graph) {\n for (const quad of this.match(subject, predicate, object, graph))\n this.removeQuad(quad);\n return this;\n }\n\n /**\n * Returns a new dataset that contains all quads from the current dataset that are not included in the given dataset.\n */\n difference(other) {\n if (other && other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return new N3Store({ entityIndex: this._entityIndex });\n\n if ((other instanceof N3Store) && other._entityIndex === this._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = difference(this._graphs, other._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => !other.has(quad));\n }\n\n /**\n * Returns true if the current dataset contains the same graph structure as the given dataset.\n *\n * Blank Nodes will be normalized.\n */\n equals(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n return other === this || (this.size === other.size && this.contains(other));\n }\n\n /**\n * Creates a new dataset with all the quads that pass the test implemented by the provided `iteratee`.\n *\n * This method is aligned with Array.prototype.filter() in ECMAScript-262.\n */\n filter(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n if (iteratee(quad, this))\n store.add(quad);\n return store;\n }\n\n /**\n * Returns a new dataset containing all quads from the current dataset that are also included in the given dataset.\n */\n intersection(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n return store;\n }\n else if ((other instanceof N3Store) && this._entityIndex === other._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = intersect(other._graphs, this._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => other.has(quad));\n }\n\n /**\n * Returns a new dataset containing all quads returned by applying `iteratee` to each quad in the current dataset.\n */\n map(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n store.add(iteratee(quad, this));\n return store;\n }\n\n /**\n * This method calls the `iteratee` method on each `quad` of the `Dataset`. The first time the `iteratee` method\n * is called, the `accumulator` value is the `initialValue`, or, if not given, equals the first quad of the `Dataset`.\n * The return value of each call to the `iteratee` method is used as the `accumulator` value for the next call.\n *\n * This method returns the return value of the last `iteratee` call.\n *\n * This method is aligned with `Array.prototype.reduce()` in ECMAScript-262.\n */\n reduce(callback, initialValue) {\n const iter = this.readQuads();\n let accumulator = initialValue === undefined ? iter.next().value : initialValue;\n for (const quad of iter)\n accumulator = callback(accumulator, quad, this);\n return accumulator;\n }\n\n /**\n * Returns the set of quads within the dataset as a host-language-native sequence, for example an `Array` in\n * ECMAScript-262.\n *\n * Since a `Dataset` is an unordered set, the order of the quads within the returned sequence is arbitrary.\n */\n toArray() {\n return this.getQuads();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset, preprocessed with the\n * {@link https://json-ld.github.io/normalization/spec/|RDF Dataset Normalization} algorithm.\n */\n toCanonical() {\n throw new Error('not implemented');\n }\n\n /**\n * Returns a stream that contains all quads of the dataset.\n */\n toStream() {\n return this.match();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset.\n *\n * No prior normalization is required, therefore the results for the same quads may vary depending on the `Dataset`\n * implementation.\n */\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n /**\n * Returns a new `Dataset` that is a concatenation of this dataset and the quads given as an argument.\n */\n union(quads) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n\n store.addAll(quads);\n return store;\n }\n\n // ### Store is an iterable.\n // Can be used where iterables are expected: for...of loops, array spread operator,\n // `yield*`, and destructuring assignment (order is not guaranteed).\n *[Symbol.iterator]() {\n yield* this.readQuads();\n }\n}\n\n/**\n * Returns a subset of the `index` with that part of the index\n * matching the `ids` array. `ids` contains 3 elements that are\n * either numerical ids; or `null`.\n *\n * `false` is returned when there are no matching indices; this should\n * *not* be set as the value for an index.\n */\nfunction indexMatch(index, ids, depth = 0) {\n const ind = ids[depth];\n if (ind && !(ind in index))\n return false;\n\n let target = false;\n for (const key in (ind ? { [ind]: index[ind] } : index)) {\n const result = depth === 2 ? null : indexMatch(index[key], ids, depth + 1);\n\n if (result !== false) {\n target = target || Object.create(null);\n target[key] = result;\n }\n }\n return target;\n}\n\n/**\n * A class that implements both DatasetCore and Readable.\n */\nclass DatasetCoreAndReadableStream extends Readable {\n constructor(n3Store, subject, predicate, object, graph, options) {\n super({ objectMode: true });\n Object.assign(this, { n3Store, subject, predicate, object, graph, options });\n }\n\n get filtered() {\n if (!this._filtered) {\n const { n3Store, graph, object, predicate, subject } = this;\n const newStore = this._filtered = new N3Store({ factory: n3Store._factory, entityIndex: this.options.entityIndex });\n\n let subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = newStore._termToNumericId(subject)) ||\n predicate && !(predicateId = newStore._termToNumericId(predicate)) ||\n object && !(objectId = newStore._termToNumericId(object)))\n return newStore;\n\n const graphs = n3Store._getGraphs(graph);\n for (const graphKey in graphs) {\n let subjects, predicates, objects, content;\n if (content = graphs[graphKey]) {\n if (!subjectId && predicateId) {\n if (predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n }\n else if (objectId) {\n if (objects = indexMatch(content.objects, [objectId, subjectId, predicateId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n }\n }\n else if (subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId])) {\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n\n if (subjects)\n newStore._graphs[graphKey] = { subjects, predicates, objects };\n }\n }\n newStore._size = null;\n }\n return this._filtered;\n }\n\n get size() {\n return this.filtered.size;\n }\n\n _read(size) {\n if (size > 0 && !this[ITERATOR])\n this[ITERATOR] = this[Symbol.iterator]();\n const iterable = this[ITERATOR];\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n this.push(null);\n return;\n }\n this.push(value);\n }\n }\n\n addAll(quads) {\n return this.filtered.addAll(quads);\n }\n\n contains(other) {\n return this.filtered.contains(other);\n }\n\n deleteMatches(subject, predicate, object, graph) {\n return this.filtered.deleteMatches(subject, predicate, object, graph);\n }\n\n difference(other) {\n return this.filtered.difference(other);\n }\n\n equals(other) {\n return this.filtered.equals(other);\n }\n\n every(callback, subject, predicate, object, graph) {\n return this.filtered.every(callback, subject, predicate, object, graph);\n }\n\n filter(iteratee) {\n return this.filtered.filter(iteratee);\n }\n\n forEach(callback, subject, predicate, object, graph) {\n return this.filtered.forEach(callback, subject, predicate, object, graph);\n }\n\n import(stream) {\n return this.filtered.import(stream);\n }\n\n intersection(other) {\n return this.filtered.intersection(other);\n }\n\n map(iteratee) {\n return this.filtered.map(iteratee);\n }\n\n some(callback, subject, predicate, object, graph) {\n return this.filtered.some(callback, subject, predicate, object, graph);\n }\n\n toCanonical() {\n return this.filtered.toCanonical();\n }\n\n toStream() {\n return this._filtered ?\n this._filtered.toStream()\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph);\n }\n\n union(quads) {\n return this._filtered ?\n this._filtered.union(quads)\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph).addAll(quads);\n }\n\n toArray() {\n return this._filtered ? this._filtered.toArray() : this.n3Store.getQuads(this.subject, this.predicate, this.object, this.graph);\n }\n\n reduce(callback, initialValue) {\n return this.filtered.reduce(callback, initialValue);\n }\n\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n add(quad) {\n return this.filtered.add(quad);\n }\n\n delete(quad) {\n return this.filtered.delete(quad);\n }\n\n has(quad) {\n return this.filtered.has(quad);\n }\n\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph, this.options);\n }\n\n *[Symbol.iterator]() {\n yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph);\n }\n}\n","import N3Store from './N3Store';\n\nexport default class N3DatasetCoreFactory {\n dataset(quads) {\n return new N3Store(quads);\n }\n}\n","import DF from './N3DataFactory';\n\n/**\n * Gets rules from a dataset. This will only collect horn rules declared using log:implies.\n */\nexport function getRulesFromDataset(dataset) {\n const rules = [];\n for (const { subject, object } of dataset.match(null, DF.namedNode('http://www.w3.org/2000/10/swap/log#implies'), null, DF.defaultGraph())) {\n const premise = [...dataset.match(null, null, null, subject)];\n const conclusion = [...dataset.match(null, null, null, object)];\n rules.push({ premise, conclusion });\n }\n return rules;\n}\n\nexport default class N3Reasoner {\n constructor(store) {\n this._store = store;\n }\n\n _add(subject, predicate, object, graphItem, cb) {\n // Only add to the remaining indexes if there is not already a value in the index\n if (!this._store._addToIndex(graphItem.subjects, subject, predicate, object)) return;\n this._store._addToIndex(graphItem.predicates, predicate, object, subject);\n this._store._addToIndex(graphItem.objects, object, subject, predicate);\n cb();\n }\n\n // eslint-disable-next-line no-warning-comments\n _evaluatePremise(rule, content, cb, i = 0) {\n let v1, v2, value, index1, index2;\n const [val0, val1, val2] = rule.premise[i].value, index = content[rule.premise[i].content];\n const v0 = !(value = val0.value);\n for (value in v0 ? index : { [value]: index[value] }) {\n if (index1 = index[value]) {\n if (v0) val0.value = Number(value);\n v1 = !(value = val1.value);\n for (value in v1 ? index1 : { [value]: index1[value] }) {\n if (index2 = index1[value]) {\n if (v1) val1.value = Number(value);\n v2 = !(value = val2.value);\n for (value in v2 ? index2 : { [value]: index2[value] }) {\n if (v2) val2.value = Number(value);\n\n if (i === rule.premise.length - 1)\n rule.conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { cb(c); });\n });\n else\n this._evaluatePremise(rule, content, cb, i + 1);\n }\n if (v2) val2.value = null;\n }\n }\n if (v1) val1.value = null;\n }\n }\n if (v0) val0.value = null;\n }\n\n _evaluateRules(rules, content, cb) {\n for (let i = 0; i < rules.length; i++) {\n this._evaluatePremise(rules[i], content, cb);\n }\n }\n\n // A naive reasoning algorithm where rules are just applied by repeatedly applying rules\n // until no more evaluations are made\n _reasonGraphNaive(rules, content) {\n const newRules = [];\n\n function addRule(conclusion) {\n if (conclusion.next)\n conclusion.next.forEach(rule => {\n newRules.push([conclusion.subject.value, conclusion.predicate.value, conclusion.object.value, rule]);\n });\n }\n\n // eslint-disable-next-line func-style\n const addConclusions = conclusion => {\n conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { addRule(c); });\n });\n };\n\n this._evaluateRules(rules, content, addRule);\n\n let r;\n while ((r = newRules.pop()) !== undefined) {\n const [subject, predicate, object, rule] = r;\n const v1 = rule.basePremise.subject.value;\n if (!v1) rule.basePremise.subject.value = subject;\n const v2 = rule.basePremise.predicate.value;\n if (!v2) rule.basePremise.predicate.value = predicate;\n const v3 = rule.basePremise.object.value;\n if (!v3) rule.basePremise.object.value = object;\n\n if (rule.premise.length === 0) {\n addConclusions(rule.conclusion);\n }\n else {\n this._evaluatePremise(rule, content, addRule);\n }\n\n if (!v1) rule.basePremise.subject.value = null;\n if (!v2) rule.basePremise.predicate.value = null;\n if (!v3) rule.basePremise.object.value = null;\n }\n }\n\n _createRule({ premise, conclusion }) {\n const varMapping = {};\n\n const toId = value => value.termType === 'Variable' ?\n // If the term is a variable, then create an empty object that values can be placed into\n (varMapping[value.value] = varMapping[value.value] || {}) :\n // If the term is not a variable, then set the ID value\n { value: this._store._termToNewNumericId(value) };\n\n // eslint-disable-next-line func-style\n const t = term => ({ subject: toId(term.subject), predicate: toId(term.predicate), object: toId(term.object) });\n\n return {\n premise: premise.map(p => t(p)),\n conclusion: conclusion.map(p => t(p)),\n variables: Object.values(varMapping),\n };\n }\n\n reason(rules) {\n if (!Array.isArray(rules)) {\n rules = getRulesFromDataset(rules);\n }\n rules = rules.map(rule => this._createRule(rule));\n\n for (const r1 of rules) {\n for (const r2 of rules) {\n for (let i = 0; i < r2.premise.length; i++) {\n const p = r2.premise[i];\n for (const c of r1.conclusion) {\n if (termEq(p.subject, c.subject) && termEq(p.predicate, c.predicate) && termEq(p.object, c.object)) {\n const set = new Set();\n\n const premise = [];\n\n // Since these *will* be substituted when we apply the rule,\n // we need to do this, so that we index correctly in the subsequent section\n p.subject.value = p.subject.value || 1;\n p.object.value = p.object.value || 1;\n p.predicate.value = p.predicate.value || 1;\n\n for (let j = 0; j < r2.premise.length; j++) {\n if (j !== i) {\n premise.push(getIndex(r2.premise[j], set));\n }\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: Create new rule, with new indexing\n // Future, 'collapse' the next statements when they share a premise/base-premise\n (c.next = c.next || []).push({\n premise,\n conclusion: r2.conclusion,\n // This is a single premise of the form { subject, predicate, object },\n // which we can use to instantiate the rule using the new data that was emitted\n basePremise: p,\n });\n }\n r2.variables.forEach(v => { v.value = null; });\n }\n }\n }\n }\n\n for (const rule of rules) {\n const set = new Set();\n rule.premise = rule.premise.map(p => getIndex(p, set));\n }\n\n const graphs = this._store._getGraphs();\n for (const graphId in graphs) {\n this._reasonGraphNaive(rules, graphs[graphId]);\n }\n\n this._store._size = null;\n }\n}\n\nfunction getIndex({ subject, predicate, object }, set) {\n const s = subject.value || set.has(subject) || (set.add(subject), false);\n const p = predicate.value || set.has(predicate) || (set.add(predicate), false);\n const o = object.value || set.has(object) || (set.add(object), false);\n\n return (!s && p) ? { content: 'predicates', value: [predicate, object, subject] } :\n o ? { content: 'objects', value: [object, subject, predicate] } :\n { content: 'subjects', value: [subject, predicate, object] };\n}\n\nfunction termEq(t1, t2) {\n if (t1.value === null) {\n t1.value = t2.value;\n }\n return t1.value === t2.value;\n}\n","// **N3StreamParser** parses a text stream into a quad stream.\nimport { Transform } from 'readable-stream';\nimport N3Parser from './N3Parser';\n\n// ## Constructor\nexport default class N3StreamParser extends Transform {\n constructor(options) {\n super({ decodeStrings: true });\n this._readableState.objectMode = true;\n\n // Set up parser with dummy stream to obtain `data` and `end` callbacks\n const parser = new N3Parser(options);\n let onData, onEnd;\n\n const callbacks = {\n // Handle quads by pushing them down the pipeline\n onQuad: (error, quad) => { error && this.emit('error', error) || quad && this.push(quad); },\n // Emit prefixes through the `prefix` event\n onPrefix: (prefix, uri) => { this.emit('prefix', prefix, uri); },\n };\n\n if (options && options.comments)\n callbacks.onComment = comment => { this.emit('comment', comment); };\n\n parser.parse({\n on: (event, callback) => {\n switch (event) {\n case 'data': onData = callback; break;\n case 'end': onEnd = callback; break;\n }\n },\n }, callbacks);\n\n // Implement Transform methods through parser callbacks\n this._transform = (chunk, encoding, done) => { onData(chunk); done(); };\n this._flush = done => { onEnd(); done(); };\n }\n\n // ### Parses a stream of strings\n import(stream) {\n stream.on('data', chunk => { this.write(chunk); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n return this;\n }\n}\n","// **N3StreamWriter** serializes a quad stream into a text stream.\nimport { Transform } from 'readable-stream';\nimport N3Writer from './N3Writer';\n\n// ## Constructor\nexport default class N3StreamWriter extends Transform {\n constructor(options) {\n super({ encoding: 'utf8', writableObjectMode: true });\n\n // Set up writer with a dummy stream object\n const writer = this._writer = new N3Writer({\n write: (quad, encoding, callback) => { this.push(quad); callback && callback(); },\n end: callback => { this.push(null); callback && callback(); },\n }, options);\n\n // Implement Transform methods on top of writer\n this._transform = (quad, encoding, done) => { writer.addQuad(quad, done); };\n this._flush = done => { writer.end(done); };\n }\n\n// ### Serializes a stream of quads\n import(stream) {\n stream.on('data', quad => { this.write(quad); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n stream.on('prefix', (prefix, iri) => { this._writer.addPrefix(prefix, iri); });\n return this;\n }\n}\n","import Lexer from './N3Lexer';\nimport Parser from './N3Parser';\nimport Writer from './N3Writer';\nimport Store, { N3EntityIndex as EntityIndex } from './N3Store';\nimport StoreFactory from './N3StoreFactory';\nimport Reasoner, { getRulesFromDataset } from './N3Reasoner';\nimport StreamParser from './N3StreamParser';\nimport StreamWriter from './N3StreamWriter';\nimport * as Util from './N3Util';\nimport BaseIRI from './BaseIRI';\n\nimport {\n default as DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n} from './N3DataFactory';\n\n// Named exports\nexport {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n getRulesFromDataset,\n};\n\n// Export all named exports as a default object for backward compatibility\nexport default {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint-disable camelcase */\n/**\n * Convenience class that extends the n3 store API that deletes\n * quads as they are extracted from the store\n */\nconst n3_1 = require(\"n3\");\nclass VolitileStore extends n3_1.Store {\n getQuadsOnce(s, p, o, g) {\n const quads = this.getQuads(s, p, o, g);\n this.removeQuads(quads);\n return quads;\n }\n getObjectsOnce(s, p, g) {\n return this.getQuadsOnce(s, p, null, g).map((term) => term.object);\n }\n}\nexports.default = VolitileStore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BlankNode = void 0;\n/**\n * A term that represents an RDF blank node with a label.\n */\nclass BlankNode {\n constructor(value) {\n this.termType = 'BlankNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'BlankNode' && other.value === this.value;\n }\n}\nexports.BlankNode = BlankNode;\n//# sourceMappingURL=BlankNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultGraph = void 0;\n/**\n * A singleton term instance that represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass DefaultGraph {\n constructor() {\n this.termType = 'DefaultGraph';\n this.value = '';\n // Private constructor\n }\n equals(other) {\n return !!other && other.termType === 'DefaultGraph';\n }\n}\nexports.DefaultGraph = DefaultGraph;\nDefaultGraph.INSTANCE = new DefaultGraph();\n//# sourceMappingURL=DefaultGraph.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NamedNode = void 0;\n/**\n * A term that contains an IRI.\n */\nclass NamedNode {\n constructor(value) {\n this.termType = 'NamedNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'NamedNode' && other.value === this.value;\n }\n}\nexports.NamedNode = NamedNode;\n//# sourceMappingURL=NamedNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Literal = void 0;\nconst NamedNode_1 = require(\"./NamedNode\");\n/**\n * A term that represents an RDF literal, containing a string with an optional language tag or datatype.\n */\nclass Literal {\n constructor(value, languageOrDatatype) {\n this.termType = 'Literal';\n this.value = value;\n if (typeof languageOrDatatype === 'string') {\n this.language = languageOrDatatype;\n this.datatype = Literal.RDF_LANGUAGE_STRING;\n }\n else if (languageOrDatatype) {\n this.language = '';\n this.datatype = languageOrDatatype;\n }\n else {\n this.language = '';\n this.datatype = Literal.XSD_STRING;\n }\n }\n equals(other) {\n return !!other && other.termType === 'Literal' && other.value === this.value &&\n other.language === this.language && this.datatype.equals(other.datatype);\n }\n}\nexports.Literal = Literal;\nLiteral.RDF_LANGUAGE_STRING = new NamedNode_1.NamedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString');\nLiteral.XSD_STRING = new NamedNode_1.NamedNode('http://www.w3.org/2001/XMLSchema#string');\n//# sourceMappingURL=Literal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quad = void 0;\n/**\n * An instance of DefaultGraph represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass Quad {\n constructor(subject, predicate, object, graph) {\n this.termType = 'Quad';\n this.value = '';\n this.subject = subject;\n this.predicate = predicate;\n this.object = object;\n this.graph = graph;\n }\n equals(other) {\n // `|| !other.termType` is for backwards-compatibility with old factories without RDF* support.\n return !!other && (other.termType === 'Quad' || !other.termType) &&\n this.subject.equals(other.subject) &&\n this.predicate.equals(other.predicate) &&\n this.object.equals(other.object) &&\n this.graph.equals(other.graph);\n }\n}\nexports.Quad = Quad;\n//# sourceMappingURL=Quad.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Variable = void 0;\n/**\n * A term that represents a variable.\n */\nclass Variable {\n constructor(value) {\n this.termType = 'Variable';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'Variable' && other.value === this.value;\n }\n}\nexports.Variable = Variable;\n//# sourceMappingURL=Variable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataFactory = void 0;\nconst BlankNode_1 = require(\"./BlankNode\");\nconst DefaultGraph_1 = require(\"./DefaultGraph\");\nconst Literal_1 = require(\"./Literal\");\nconst NamedNode_1 = require(\"./NamedNode\");\nconst Quad_1 = require(\"./Quad\");\nconst Variable_1 = require(\"./Variable\");\nlet dataFactoryCounter = 0;\n/**\n * A factory for instantiating RDF terms and quads.\n */\nclass DataFactory {\n constructor(options) {\n this.blankNodeCounter = 0;\n options = options || {};\n this.blankNodePrefix = options.blankNodePrefix || `df_${dataFactoryCounter++}_`;\n }\n /**\n * @param value The IRI for the named node.\n * @return A new instance of NamedNode.\n * @see NamedNode\n */\n namedNode(value) {\n return new NamedNode_1.NamedNode(value);\n }\n /**\n * @param value The optional blank node identifier.\n * @return A new instance of BlankNode.\n * If the `value` parameter is undefined a new identifier\n * for the blank node is generated for each call.\n * @see BlankNode\n */\n blankNode(value) {\n return new BlankNode_1.BlankNode(value || `${this.blankNodePrefix}${this.blankNodeCounter++}`);\n }\n /**\n * @param value The literal value.\n * @param languageOrDatatype The optional language or datatype.\n * If `languageOrDatatype` is a NamedNode,\n * then it is used for the value of `NamedNode.datatype`.\n * Otherwise `languageOrDatatype` is used for the value\n * of `NamedNode.language`.\n * @return A new instance of Literal.\n * @see Literal\n */\n literal(value, languageOrDatatype) {\n return new Literal_1.Literal(value, languageOrDatatype);\n }\n /**\n * This method is optional.\n * @param value The variable name\n * @return A new instance of Variable.\n * @see Variable\n */\n variable(value) {\n return new Variable_1.Variable(value);\n }\n /**\n * @return An instance of DefaultGraph.\n */\n defaultGraph() {\n return DefaultGraph_1.DefaultGraph.INSTANCE;\n }\n /**\n * @param subject The quad subject term.\n * @param predicate The quad predicate term.\n * @param object The quad object term.\n * @param graph The quad graph term.\n * @return A new instance of Quad.\n * @see Quad\n */\n quad(subject, predicate, object, graph) {\n return new Quad_1.Quad(subject, predicate, object, graph || this.defaultGraph());\n }\n /**\n * Create a deep copy of the given term using this data factory.\n * @param original An RDF term.\n * @return A deep copy of the given term.\n */\n fromTerm(original) {\n // TODO: remove nasty any casts when this TS bug has been fixed:\n // https://github.com/microsoft/TypeScript/issues/26933\n switch (original.termType) {\n case 'NamedNode':\n return this.namedNode(original.value);\n case 'BlankNode':\n return this.blankNode(original.value);\n case 'Literal':\n if (original.language) {\n return this.literal(original.value, original.language);\n }\n if (!original.datatype.equals(Literal_1.Literal.XSD_STRING)) {\n return this.literal(original.value, this.fromTerm(original.datatype));\n }\n return this.literal(original.value);\n case 'Variable':\n return this.variable(original.value);\n case 'DefaultGraph':\n return this.defaultGraph();\n case 'Quad':\n return this.quad(this.fromTerm(original.subject), this.fromTerm(original.predicate), this.fromTerm(original.object), this.fromTerm(original.graph));\n }\n }\n /**\n * Create a deep copy of the given quad using this data factory.\n * @param original An RDF quad.\n * @return A deep copy of the given quad.\n */\n fromQuad(original) {\n return this.fromTerm(original);\n }\n /**\n * Reset the internal blank node counter.\n */\n resetBlankNodeCounter() {\n this.blankNodeCounter = 0;\n }\n}\nexports.DataFactory = DataFactory;\n//# sourceMappingURL=DataFactory.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./lib/BlankNode\"), exports);\n__exportStar(require(\"./lib/DataFactory\"), exports);\n__exportStar(require(\"./lib/DefaultGraph\"), exports);\n__exportStar(require(\"./lib/Literal\"), exports);\n__exportStar(require(\"./lib/NamedNode\"), exports);\n__exportStar(require(\"./lib/Quad\"), exports);\n__exportStar(require(\"./lib/Variable\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringQuadToQuad = exports.quadToStringQuad = exports.stringToTerm = exports.getLiteralLanguage = exports.getLiteralType = exports.getLiteralValue = exports.termToString = void 0;\nconst rdf_data_factory_1 = require(\"rdf-data-factory\");\nconst FACTORY = new rdf_data_factory_1.DataFactory();\n/**\n * Utility methods for converting between string-based RDF representations and RDFJS objects.\n *\n * RDF Terms are represented as follows:\n * * Blank nodes: '_:myBlankNode'\n * * Variables: '_myVariable'\n * * Literals: '\"myString\"', '\"myLanguageString\"@en-us', '\"<p>e</p>\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML>'\n * * URIs: '<http://example.org>'\n *\n * Quads/triples are represented as hashes with 'subject', 'predicate', 'object' and 'graph' (optional)\n * as keys, and string-based RDF terms as values.\n */\n/**\n * Convert an RDFJS term to a string-based representation.\n * @param {RDF.Term} term An RDFJS term.\n * @return {string} A string-based term representation.\n */\nfunction termToString(term) {\n // TODO: remove nasty any casts when this TS bug has been fixed: https://github.com/microsoft/TypeScript/issues/26933\n if (!term) {\n return undefined;\n }\n switch (term.termType) {\n case 'NamedNode': return (`<${escapeIRI(term.value)}>`);\n case 'BlankNode': return (`_:${term.value}`);\n case 'Literal': {\n const literalValue = term;\n return (`\"${escapeStringRDF(literalValue.value)}\"${literalValue.datatype &&\n literalValue.datatype.value !== 'http://www.w3.org/2001/XMLSchema#string' &&\n literalValue.datatype.value !== 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString' ?\n `^^<${literalValue.datatype.value}>` :\n ''}${literalValue.language ? `@${literalValue.language}` : ''}`);\n }\n case 'Quad': return (`<<${termToString(term.subject)} ${termToString(term.predicate)} ${termToString(term.object)}${term.graph.termType === 'DefaultGraph' ? '' : ` ${termToString(term.graph)}`}>>`);\n case 'Variable': return (`?${term.value}`);\n case 'DefaultGraph': return term.value;\n }\n}\nexports.termToString = termToString;\n/**\n * Get the string value of a literal.\n * @param {string} literalValue An RDF literal enclosed by '\"'.\n * @return {string} The literal value inside the '\"'.\n */\nfunction getLiteralValue(literalValue) {\n const match = /^\"([^]*)\"((\\^\\^.*)|(@.*))?$/u.exec(literalValue);\n if (!match) {\n throw new Error(`${literalValue} is not a literal`);\n }\n return match[1].replace(/\\\\\"/ug, '\"');\n}\nexports.getLiteralValue = getLiteralValue;\n/**\n * Get the datatype of the given literal.\n * @param {string} literalValue An RDF literal.\n * @return {string} The datatype of the literal.\n */\nfunction getLiteralType(literalValue) {\n const match = /^\"[^]*\"(?:\\^\\^<([^\"]+)>|(@)[^@\"]+)?$/u.exec(literalValue);\n if (!match) {\n throw new Error(`${literalValue} is not a literal`);\n }\n return match[1] || (match[2] ?\n 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString' :\n 'http://www.w3.org/2001/XMLSchema#string');\n}\nexports.getLiteralType = getLiteralType;\n/**\n * Get the language of the given literal.\n * @param {string} literalValue An RDF literal.\n * @return {string} The language of the literal.\n */\nfunction getLiteralLanguage(literalValue) {\n const match = /^\"[^]*\"(?:@([^@\"]+)|\\^\\^[^\"]+)?$/u.exec(literalValue);\n if (!match) {\n throw new Error(`${literalValue} is not a literal`);\n }\n return match[1] ? match[1].toLowerCase() : '';\n}\nexports.getLiteralLanguage = getLiteralLanguage;\n/**\n * Transform a string-based RDF term to an RDFJS term.\n * @param {string} value A string-based RDF-term.\n * @param {RDF.DataFactory} dataFactory An optional datafactory to create terms with.\n * @return {RDF.Term} An RDF-JS term.\n */\nfunction stringToTerm(value, dataFactory) {\n dataFactory = dataFactory || FACTORY;\n if (!value || (value.length === 0)) {\n return dataFactory.defaultGraph();\n }\n switch (value[0]) {\n case '_': return dataFactory.blankNode(value.slice(2));\n case '?':\n if (!dataFactory.variable) {\n throw new Error(`Missing 'variable()' method on the given DataFactory`);\n }\n return dataFactory.variable(value.slice(1));\n case '\"': {\n const language = getLiteralLanguage(value);\n const type = dataFactory.namedNode(getLiteralType(value));\n return dataFactory.literal(getLiteralValue(value), language || type);\n }\n case '<':\n default:\n if (value.startsWith('<<') && value.endsWith('>>')) {\n // Iterate character-by-character to detect spaces that are *not* wrapped in <<>>\n const terms = value.slice(2, -2);\n const stringTerms = [];\n let ignoreTags = 0;\n let lastIndex = 0;\n for (let i = 0; i < terms.length; i++) {\n const char = terms[i];\n if (char === '<') {\n ignoreTags++;\n }\n if (char === '>') {\n if (ignoreTags === 0) {\n throw new Error(`Found closing tag without opening tag in ${value}`);\n }\n else {\n ignoreTags--;\n }\n }\n if (char === ' ' && ignoreTags === 0) {\n stringTerms.push(terms.slice(lastIndex, i));\n lastIndex = i + 1;\n }\n }\n if (ignoreTags !== 0) {\n throw new Error(`Found opening tag without closing tag in ${value}`);\n }\n stringTerms.push(terms.slice(lastIndex, terms.length));\n // We require 3 or 4 components\n if (stringTerms.length !== 3 && stringTerms.length !== 4) {\n throw new Error(`Nested quad syntax error ${value}`);\n }\n return dataFactory.quad(stringToTerm(stringTerms[0]), stringToTerm(stringTerms[1]), stringToTerm(stringTerms[2]), stringTerms[3] ? stringToTerm(stringTerms[3]) : undefined);\n }\n if (!value.startsWith('<') || !value.endsWith('>')) {\n throw new Error(`Detected invalid iri for named node (must be wrapped in <>): ${value}`);\n }\n return dataFactory.namedNode(value.slice(1, -1));\n }\n}\nexports.stringToTerm = stringToTerm;\n/**\n * Convert an RDFJS quad to a string-based quad representation.\n * @param {Quad} q An RDFJS quad.\n * @return {IStringQuad} A hash with string-based quad terms.\n * @template Q The type of quad, defaults to RDF.Quad.\n */\nfunction quadToStringQuad(quad) {\n return {\n subject: termToString(quad.subject),\n predicate: termToString(quad.predicate),\n object: termToString(quad.object),\n graph: termToString(quad.graph),\n };\n}\nexports.quadToStringQuad = quadToStringQuad;\n/**\n * Convert a string-based quad representation to an RDFJS quad.\n * @param {IStringQuad} stringQuad A hash with string-based quad terms.\n * @param {RDF.DataFactory} dataFactory An optional datafactory to create terms with.\n * @return {Q} An RDFJS quad.\n * @template Q The type of quad, defaults to RDF.Quad.\n */\nfunction stringQuadToQuad(stringQuad, dataFactory) {\n dataFactory = dataFactory || FACTORY;\n return dataFactory.quad(stringToTerm(stringQuad.subject, dataFactory), stringToTerm(stringQuad.predicate, dataFactory), stringToTerm(stringQuad.object, dataFactory), stringToTerm(stringQuad.graph, dataFactory));\n}\nexports.stringQuadToQuad = stringQuadToQuad;\nfunction escapeIRI(iriValue) {\n return iriValue.replace(escapePattern, replaceEscapedCharacter);\n}\nfunction escapeStringRDF(stringValue) {\n if (escapePattern.test(stringValue)) {\n stringValue = stringValue.replace(escapePattern, replaceEscapedCharacter);\n }\n return stringValue;\n}\n// Characters in literals and IRIs that require escaping\n// Also containing potential surrogate pairs\n/* eslint-disable require-unicode-regexp */ /* eslint-disable unicorn/better-regex */\nconst escapePattern = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n/* eslint-enable require-unicode-regexp */ /* eslint-enable unicorn/better-regex */\nconst escapes = new Map([\n ['\\\\', '\\\\\\\\'],\n ['\"', '\\\\\"'],\n ['\\t', '\\\\t'],\n ['\\n', '\\\\n'],\n ['\\r', '\\\\r'],\n ['\\b', '\\\\b'],\n ['\\f', '\\\\f'],\n]);\nfunction replaceEscapedCharacter(character) {\n // Try simplest case first, get replacement for character\n const result = escapes.get(character);\n if (!result) {\n if (character.length === 1) {\n // Single unicode charachters, i.e. not a surrogate pair\n const code = character.charCodeAt(0).toString(16);\n return `${'\\\\u0000'.slice(0, -code.length)}${code}`;\n }\n // Surrogate pairs\n const code = ((character.charCodeAt(0) - 55296) * 1024 + character.charCodeAt(1) + 9216).toString(16);\n return `${'\\\\U00000000'.slice(0, -code.length)}${code}`;\n }\n return result;\n}\n//# sourceMappingURL=TermUtil.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.termToString = exports.stringToTerm = exports.stringQuadToQuad = exports.quadToStringQuad = exports.getLiteralValue = exports.getLiteralType = exports.getLiteralLanguage = void 0;\nconst TermUtil_1 = require(\"./lib/TermUtil\");\nObject.defineProperty(exports, \"getLiteralLanguage\", { enumerable: true, get: function () { return TermUtil_1.getLiteralLanguage; } });\nObject.defineProperty(exports, \"getLiteralType\", { enumerable: true, get: function () { return TermUtil_1.getLiteralType; } });\nObject.defineProperty(exports, \"getLiteralValue\", { enumerable: true, get: function () { return TermUtil_1.getLiteralValue; } });\nObject.defineProperty(exports, \"quadToStringQuad\", { enumerable: true, get: function () { return TermUtil_1.quadToStringQuad; } });\nObject.defineProperty(exports, \"stringQuadToQuad\", { enumerable: true, get: function () { return TermUtil_1.stringQuadToQuad; } });\nObject.defineProperty(exports, \"stringToTerm\", { enumerable: true, get: function () { return TermUtil_1.stringToTerm; } });\nObject.defineProperty(exports, \"termToString\", { enumerable: true, get: function () { return TermUtil_1.termToString; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copied from https://github.com/rubensworks/rdf-string-ttl.js/blob/31fe9415569cfbde2aec661e4a2a8ae67e81782b/lib/TermUtil.ts#L229\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeStringRDF = escapeStringRDF;\nexports.escapeIRI = escapeIRI;\nconst escapes = new Map([\n ['\\\\', '\\\\\\\\'],\n ['\"', '\\\\\"'],\n ['\\t', '\\\\t'],\n ['\\n', '\\\\n'],\n ['\\r', '\\\\r'],\n ['\\b', '\\\\b'],\n ['\\f', '\\\\f'],\n]);\nfunction replaceEscapedCharacter(character) {\n // Try simplest case first, get replacement for character\n const result = escapes.get(character);\n if (!result) {\n if (character.length === 1) {\n // Single unicode charachters, i.e. not a surrogate pair\n const code = character.charCodeAt(0).toString(16);\n return `${'\\\\u0000'.slice(0, -code.length)}${code}`;\n }\n // Surrogate pairs\n const code = ((character.charCodeAt(0) - 55296) * 1024 + character.charCodeAt(1) + 9216)\n .toString(16);\n return `${'\\\\U00000000'.slice(0, -code.length)}${code}`;\n }\n return result;\n}\n// eslint-disable-next-line no-control-regex\nconst escapePattern = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\nfunction escapeStringRDF(stringValue) {\n if (escapePattern.test(stringValue)) {\n return stringValue.replace(escapePattern, replaceEscapedCharacter);\n }\n return stringValue;\n}\nfunction escapeIRI(iriValue) {\n return iriValue.replace(escapePattern, replaceEscapedCharacter);\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TTLWriter = void 0;\nconst n3_1 = require(\"n3\");\nconst rdf_string_ttl_1 = require(\"rdf-string-ttl\");\nconst escape_1 = require(\"./escape\");\nconst compareTerms = (a, b) => {\n for (const key of ['termType', 'value']) {\n const comparison = a[key].localeCompare(b[key]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n if (a.termType === 'Literal' && b.termType === 'Literal') {\n if (a.datatype.value !== b.datatype.value) {\n return a.datatype.value.localeCompare(b.datatype.value);\n }\n if (a.language !== b.language) {\n return a.language.localeCompare(b.language);\n }\n }\n return 0;\n};\nfunction getNamespace(str) {\n var _a;\n return (_a = /^[^]*[#/]/.exec(str)) === null || _a === void 0 ? void 0 : _a[0];\n}\nconst defaultPrefixes = {\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rdfs: 'http://www.w3.org/2000/01/rdf-schema#',\n owl: 'http://www.w3.org/2002/07/owl#',\n sh: 'http://www.w3.org/ns/shacl#',\n xsd: 'http://www.w3.org/2001/XMLSchema#',\n ex: 'http://example.com/ns#',\n};\nconst WELL_DEFINED_DATATYPES = ['http://www.w3.org/1999/02/22-rdf-syntax-ns#langString', 'http://www.w3.org/2001/XMLSchema#string', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString'];\nclass TTLWriter {\n constructor(\n // eslint-disable-next-line no-unused-vars\n store, \n // eslint-disable-next-line no-unused-vars\n writer, prefixes = {}, options = {}) {\n this.store = store;\n this.isN3 = false;\n this.isImpliedBy = false;\n this.prefixes = {};\n this.prefixRev = {};\n this.explicitBnodes = new Set();\n this.currentGraph = n3_1.DataFactory.defaultGraph();\n this.baseIRI = null;\n this.baseIRIString = undefined;\n this.explicitBaseIRI = false;\n this.ordered = false;\n switch (options === null || options === void 0 ? void 0 : options.format) {\n case 'text/n3':\n this.isN3 = true;\n break;\n case undefined:\n case 'text/turtle':\n break;\n default:\n throw new Error(`Unsupported format: ${options === null || options === void 0 ? void 0 : options.format}`);\n }\n this.isImpliedBy = (options === null || options === void 0 ? void 0 : options.isImpliedBy) || false;\n this.explicitBaseIRI = (options === null || options === void 0 ? void 0 : options.explicitBaseIRI) || false;\n if (n3_1.BaseIRI.supports(options.baseIri)) {\n this.baseIRI = new n3_1.BaseIRI(options.baseIri);\n this.baseIRIString = options.baseIri;\n }\n if (!this.isN3) {\n const graphs = store.getGraphs(null, null, null);\n if (graphs.length > 1) {\n throw new Error('More than one graph found - can serialize in the default graph');\n }\n if (graphs.length === 1 && !graphs[0].equals(n3_1.DataFactory.defaultGraph())) {\n throw new Error(`Expected all triples to be in the default graph, instead triples were in ${graphs[0].value}`);\n }\n }\n this.ordered = (options === null || options === void 0 ? void 0 : options.ordered) || false;\n const terms = new Set();\n function addTerm(term) {\n if (term.termType === 'NamedNode') {\n terms.add(term.value);\n }\n else if (term.termType === 'Quad') {\n addTerm(term.subject);\n if (term.predicate.termType !== 'NamedNode' || term.predicate.value !== 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') {\n addTerm(term.predicate);\n }\n addTerm(term.object);\n addTerm(term.graph);\n }\n else if (term.termType === 'Literal' && term.datatype.termType === 'NamedNode' && !WELL_DEFINED_DATATYPES.includes(term.datatype.value)) {\n addTerm(term.datatype);\n }\n }\n for (const list of [\n this.store.getSubjects(null, null, null),\n this.store.getPredicates(null, null, null).filter((p) => p.termType !== 'NamedNode' || p.value !== 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),\n this.store.getObjects(null, null, null),\n ]) {\n for (const node of list) {\n addTerm(node);\n }\n }\n const termList = [...terms];\n termList.sort();\n const allPrefixKeys = [...Object.keys(prefixes), ...Object.keys(defaultPrefixes)];\n if (this.ordered) {\n // Sort prefixes alphabetically if ordered is true\n allPrefixKeys.sort();\n }\n for (const key of allPrefixKeys) {\n const iri = prefixes[key] || defaultPrefixes[key];\n if (!(iri in this.prefixRev) && termList.some((term) => term.startsWith(iri))) {\n this.prefixRev[iri] = key;\n this.prefixes[key] = iri;\n }\n }\n this.writer = writer;\n }\n write() {\n return __awaiter(this, void 0, void 0, function* () {\n // Write the BASE statement if explicitBaseIRI is enabled\n if (this.explicitBaseIRI && typeof this.baseIRIString === 'string') {\n this.writer.add(`@base <${(0, escape_1.escapeIRI)(this.baseIRIString)}> .`);\n this.writer.newLine(1);\n }\n // Write the prefixes\n const prefixes = Object.keys(this.prefixes);\n if (this.ordered) {\n // Sort prefixes alphabetically if ordered is true\n prefixes.sort();\n }\n for (const prefix of prefixes) {\n if (typeof prefix === 'string') {\n this.writer.add(`@prefix ${prefix}: <${this.prefixes[prefix]}> .`);\n this.writer.newLine(1);\n }\n }\n this.writer.newLine(1);\n // TODO: See if we need this in any regard\n // NOTE: We really should be using the same logic as below to determine\n // the order to print things\n // First write annotated quads\n // for (const subject of this.store.getSubjects(null, null, null)) {\n // // Test if the quad is in the store as an annotated statement\n // // @ts-ignore\n // if (subject.termType === 'Quad' && this.store.has(subject)) {\n // await this.writeTurtleSubject(subject);\n // }\n // }\n yield this.writeGraph();\n this.writer.end();\n });\n }\n writeGraph() {\n return __awaiter(this, void 0, void 0, function* () {\n // First write Named Node subjects\n const subjects = this.store.getSubjects(null, null, this.currentGraph);\n if (this.ordered) {\n // Sort subjects alphabetically if ordered is true\n subjects.sort((a, b) => compareTerms(a, b));\n }\n for (const subject of subjects) {\n if (subject.termType === 'NamedNode') {\n yield this.writeTurtleSubject(subject);\n }\n }\n // Then write blank node subjects that can be anonymized at the top level\n const bnodes = this.store.getSubjects(null, null, this.currentGraph).filter((s) => s.termType === 'BlankNode');\n if (this.ordered) {\n // Sort blank nodes alphabetically if ordered is true\n bnodes.sort((a, b) => compareTerms(a, b));\n }\n for (const subject of bnodes) {\n if (subject.termType === 'BlankNode'\n && !this.explicitBnodes.has(subject.value)\n // Ensure still in store as subject\n && this.store.getQuads(subject, null, null, this.currentGraph).length > 0\n && this.store.getQuads(null, subject, null, this.currentGraph).length === 0\n && this.store.getQuads(null, null, subject, this.currentGraph).length === 0) {\n yield this.writeTurtleSubject(subject, true);\n }\n }\n // Next write blank nodes that cannot be anonymized within another set of statements\n // (it is not an explicit bnode,\n // occurs as the object of one quad,\n // and only as the subject in other quads)\n const b2nodes = this.store.getSubjects(null, null, this.currentGraph).filter((s) => s.termType === 'BlankNode');\n if (this.ordered) {\n // Sort blank nodes alphabetically if ordered is true\n b2nodes.sort((a, b) => compareTerms(a, b));\n }\n for (const subject of b2nodes) {\n // Ensure still in store as subject\n if (subject.termType === 'BlankNode' && !(this.store.getQuads(null, null, subject, this.currentGraph).length !== 1\n || !this.store.getQuads(null, null, subject, this.currentGraph)[0].subject.equals(subject))) {\n this.explicitBnodes.add(subject.value);\n yield this.writeTurtleSubject(subject);\n }\n }\n const subjects2 = this.store.getSubjects(null, null, this.currentGraph);\n if (this.ordered) {\n // Sort subjects alphabetically if ordered is true\n subjects2.sort((a, b) => compareTerms(a, b));\n }\n for (const subject of subjects2) {\n // Ensure still in store as subject\n if (this.store.getQuads(subject, null, null, this.currentGraph).length > 0) {\n if (subject.termType === 'BlankNode') {\n this.explicitBnodes.add(subject.value);\n }\n yield this.writeTurtleSubject(subject);\n }\n }\n });\n }\n writeNestedGraph(term) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isN3 && this.store.getQuads(null, null, null, term).length !== 0) {\n const { currentGraph } = this;\n this.currentGraph = term;\n this.writer.add('{');\n this.writer.indent();\n this.writer.newLine(1);\n yield this.writeGraph();\n this.writer.deindent();\n this.writer.newLine(1);\n this.writer.add('}');\n this.currentGraph = currentGraph;\n return true;\n }\n return false;\n });\n }\n writeTurtleSubject(term_1) {\n return __awaiter(this, arguments, void 0, function* (term, anonymizeSubject = false) {\n if (yield this.writeNestedGraph(term)) {\n // noop\n }\n else if (this.isN3 && (yield this.writeList(term, true))) {\n // noop\n }\n else if (anonymizeSubject) {\n this.writer.add('[]');\n }\n else {\n this.writer.add(yield this.termToString(term));\n }\n this.writer.add(' ');\n this.writer.indent();\n yield this.writeTurtlePredicates(term);\n this.writer.deindent();\n this.writer.add(' .');\n this.writer.newLine(this.store.size === 0 ? 1 : 2);\n });\n }\n termToString(term) {\n return __awaiter(this, void 0, void 0, function* () {\n if (term.termType === 'NamedNode') {\n if (this.isN3 && term.value === 'http://www.w3.org/2000/10/swap/log#implies') {\n return '=>';\n }\n if (this.isN3 && this.isImpliedBy && term.value === 'http://www.w3.org/2000/10/swap/log#isImpliedBy') {\n return '<=';\n }\n const namespace = getNamespace(term.value);\n if (namespace && namespace in this.prefixRev) {\n if (namespace in this.prefixRev) {\n return `${this.prefixRev[namespace]}:${term.value.slice(namespace.length)}`;\n }\n }\n }\n if (term.termType === 'NamedNode' && this.baseIRI !== null) {\n return `<${(0, escape_1.escapeIRI)(this.baseIRI.toRelative(term.value))}>`;\n }\n if (term.termType === 'Literal' && (term.datatypeString === 'http://www.w3.org/2001/XMLSchema#integer'\n || term.datatypeString === 'http://www.w3.org/2001/XMLSchema#boolean')) {\n return term.value;\n }\n if (term.termType === 'Quad') {\n if (!term.graph.equals(n3_1.DataFactory.defaultGraph())) {\n throw new Error('Default graph expected on nested quads');\n }\n return `<<${yield this.termToString(term.subject)} ${term.predicate.termType === 'NamedNode'\n && term.predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'\n ? 'a'\n : yield this.termToString(term.predicate)} ${yield this.termToString(term.object)}>>`;\n }\n if (term.termType === 'Literal' && !WELL_DEFINED_DATATYPES.includes(term.datatype.value)) {\n return `\"${(0, escape_1.escapeStringRDF)(term.value)}\"^^${yield this.termToString(term.datatype)}`;\n }\n return (0, rdf_string_ttl_1.termToString)(term);\n });\n }\n writeTurtlePredicates(term) {\n return __awaiter(this, void 0, void 0, function* () {\n const predicates = this.store.getPredicates(term, null, this.currentGraph);\n if (this.ordered) {\n // Sort predicates alphabetically if ordered is true\n predicates.sort((a, b) => compareTerms(a, b));\n }\n return this.writeGivenTurtlePredicates(term, predicates);\n });\n }\n writeGivenTurtlePredicates(term, predicates) {\n return __awaiter(this, void 0, void 0, function* () {\n let semi = false;\n if (predicates.some((predicate) => predicate.equals(n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')))) {\n const types = this.store.getObjectsOnce(term, n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), this.currentGraph);\n if (this.ordered) {\n // Sort types alphabetically if ordered is true\n types.sort((a, b) => compareTerms(a, b));\n }\n if (types.length > 0) {\n semi = true;\n this.writer.add('a ');\n yield this.writeTurtleObjects(types);\n }\n }\n for (const predicate of predicates) {\n if (!predicate.equals(n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'))) {\n if (semi) {\n this.writer.add(' ;');\n this.writer.newLine(1);\n }\n else {\n semi = true;\n }\n this.writer.add(yield this.termToString(predicate));\n this.writer.add(' ');\n const objects = this.store.getObjectsOnce(term, predicate, this.currentGraph);\n if (this.ordered) {\n // Sort objects alphabetically if ordered is true\n objects.sort((a, b) => compareTerms(a, b));\n }\n yield this.writeTurtleObjects(objects, term, predicate);\n }\n }\n });\n }\n writeTurtleObjects(objects, subject, predicate) {\n return __awaiter(this, void 0, void 0, function* () {\n const blankObjects = [];\n const nonBlankObjects = [];\n for (const object of objects) {\n if (object.termType === 'BlankNode'\n && [\n ...this.store.match(null, null, object, this.currentGraph),\n ...this.store.match(null, object, null, this.currentGraph),\n ].length === 0\n && !this.explicitBnodes.has(object.value)) {\n blankObjects.push(object);\n }\n else {\n if (object.termType === 'BlankNode') {\n this.explicitBnodes.add(object.value);\n }\n nonBlankObjects.push(object);\n }\n }\n if (this.ordered) {\n // Sort objects alphabetically if ordered is true\n blankObjects.sort((a, b) => compareTerms(a, b));\n nonBlankObjects.sort((a, b) => compareTerms(a, b));\n }\n let comma = false;\n let lastQuad = false;\n this.writer.indent();\n for (const object of nonBlankObjects) {\n if (comma) {\n this.writer.add(', ');\n if (lastQuad) {\n // Start a new line for multiple quad objects\n this.writer.newLine(1);\n }\n }\n this.writer.add(yield this.termToString(object));\n // @ts-ignore (n3.js type error?)\n lastQuad = object.termType === 'Quad';\n if (subject && predicate) {\n const quad = n3_1.DataFactory.quad(subject, predicate, object);\n if (this.store.getQuads(quad, null, null, this.currentGraph).length > 0) {\n this.writer.add(' {| ');\n yield this.writeTurtlePredicates(quad);\n this.writer.add(' |}');\n }\n }\n comma = true;\n }\n this.writer.deindent();\n // this.writer.add(\n // (await Promise.all(nonBlankObjects.map((object) => this.termToString(object)))).join(', '),\n // );\n // let comma = nonBlankObjects.length > 0;\n if (blankObjects.length > 0) {\n for (const blank of blankObjects) {\n if (comma) {\n this.writer.add(', ');\n }\n else {\n comma = true;\n }\n if (yield this.writeNestedGraph(blank)) {\n // noop\n }\n else if (!(yield this.writeList(blank))) {\n this.writer.add('[');\n if (this.store.getQuads(blank, null, null, this.currentGraph).length > 0) {\n this.writer.indent();\n this.writer.newLine(1);\n yield this.writeTurtlePredicates(blank);\n this.writer.deindent();\n this.writer.newLine(1);\n }\n this.writer.add(']');\n }\n // Write annotations as appropriate\n if (subject && predicate) {\n const quad = n3_1.DataFactory.quad(subject, predicate, blank);\n if (this.store.getQuads(quad, null, null, this.currentGraph).length > 0) {\n this.writer.add(' {| ');\n yield this.writeTurtlePredicates(quad);\n this.writer.add(' |}');\n }\n }\n }\n }\n });\n }\n writeList(object_1) {\n return __awaiter(this, arguments, void 0, function* (object, isSubject = false) {\n let node = object;\n const elems = [];\n const quads = [];\n while (!node.equals(n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'))) {\n const first = this.store.getQuadsOnce(node, n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#first'), null, this.currentGraph);\n const rest = this.store.getQuadsOnce(node, n3_1.DataFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#rest'), null, this.currentGraph);\n quads.push(...first, ...rest);\n if (first.length !== 1\n || rest.length !== 1\n || (this.store.getQuads(node, null, null, this.currentGraph).length !== 0 && !isSubject)) {\n this.store.addQuads(quads);\n return false;\n }\n elems.push(first[0].object);\n node = rest[0].object;\n // eslint-disable-next-line no-param-reassign\n isSubject = false;\n }\n let space = false;\n this.writer.add('(');\n for (const elem of elems) {\n if (space) {\n this.writer.add(' ');\n }\n else {\n space = true;\n }\n yield this.writeTurtleObjects([elem]);\n }\n this.writer.add(')');\n return true;\n });\n }\n}\nexports.TTLWriter = TTLWriter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Convenience class used to write chunks\n */\nclass Writer {\n constructor(options) {\n this.indents = 0;\n this.compact = false;\n this.write = options.write;\n this.end = options.end;\n this.compact = options.compact || false;\n }\n indent() {\n this.indents += 1;\n return this;\n }\n deindent() {\n this.indents -= 1;\n return this;\n }\n add(s) {\n this.write(s, 'utf-8');\n return this;\n }\n newLine(no) {\n if (!this.compact) {\n this.write('\\n'.repeat(no) + ' '.repeat(this.indents), 'utf-8');\n }\n return this;\n }\n}\nexports.default = Writer;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.write = write;\nconst volatile_store_1 = __importDefault(require(\"./volatile-store\"));\nconst ttlwriter_1 = require(\"./ttlwriter\");\nconst writer_1 = __importDefault(require(\"./writer\"));\nfunction write(quads, options) {\n return __awaiter(this, void 0, void 0, function* () {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n try {\n let s = '';\n const volatileStore = new volatile_store_1.default(quads);\n const w = new writer_1.default({\n write: (chunk) => {\n s += chunk;\n },\n end: () => {\n resolve(s);\n },\n compact: options === null || options === void 0 ? void 0 : options.compact,\n });\n const writer = new ttlwriter_1.TTLWriter(volatileStore, w, options === null || options === void 0 ? void 0 : options.prefixes, options);\n yield writer.write();\n }\n catch (e) {\n reject(e);\n }\n }));\n });\n}\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nexport const EM_SIZE = 16 // Pixels, sets ``font-size`` in CellDLStylesheet\nexport const EX_SIZE = EM_SIZE / 2\n\nconst CM_PER_INCH = 2.54\nconst MM_PER_INCH = 10 * CM_PER_INCH\n\nconst POINTS_PER_INCH = 72\nconst PICAS_PER_INCH = 6\nconst PIXELS_PER_INCH = 96\n\n//==============================================================================\n\nconst __unit_scaling: Map<string, number | null> = new Map([\n ['px', 1],\n ['in', PIXELS_PER_INCH],\n ['cm', PIXELS_PER_INCH / CM_PER_INCH],\n ['mm', PIXELS_PER_INCH / MM_PER_INCH],\n ['pt', PIXELS_PER_INCH / POINTS_PER_INCH],\n ['pc', PIXELS_PER_INCH / PICAS_PER_INCH],\n ['%', null], // 1/100.0 of viewport dimension\n ['em', EM_SIZE], // em/pt depends on current font size\n ['ex', EX_SIZE] // ex/pt depends on current font size\n])\n\nconst __unit_length_re = /(.*)(em|ex|px|in|cm|mm|pt|pc|%)/\n\nexport function lengthToPixels(length: string | number | null): number | null {\n if (typeof length !== 'string') {\n return length\n }\n const match = length.match(__unit_length_re)\n if (match === null || match.length < 3) {\n return +length\n } else {\n // @ts-expect-error:\n const scaling = __unit_scaling.get(match[2])\n if (scaling !== null && scaling !== undefined) {\n // @ts-expect-error:\n return scaling * +match[1]\n }\n }\n return null\n}\n\nexport function pixelsToLength(pixels: string | number, units: string): string | null {\n const scaling = __unit_scaling.get(units)\n if (scaling !== null && scaling !== undefined) {\n return `${Math.round((+pixels * 1000) / scaling) / 1000}${units}`\n }\n return null\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport type { PointLike } from '../common/points'\nimport type { StringProperties } from '../common/types'\nimport type { Extent } from '../geometry'\nimport { lengthToPixels } from '../geometry/units'\n\n//==============================================================================\n\nexport const SVG_URI = 'http://www.w3.org/2000/svg'\n\n//==============================================================================\n\nexport interface INodeStyle {\n gradientFill: boolean\n colours: string[]\n direction?: string\n}\n\nexport interface IPathStyle {\n colour: string // defaut is CONNECTION_COLOUR (with opacity of 0.7)\n width: number // default is CONNECTION_WIDTH (but +2 when selected)\n dashed: boolean // set `dashed` class`\n}\n\n//==============================================================================\n\nexport interface LatexMathSvgOptions {\n background?: string|string[]\n border?: string\n 'border-width'?: string\n class?: string\n 'corner-radius'?: string\n 'middle-colour'?: string\n 'min-height'?: string\n 'min-width'?: string\n padding?: string\n 'vertical-align'?: string\n}\n\n//==============================================================================\n\nexport function svgSize(svgDocument: Document): PointLike | null {\n const svgElement = svgDocument.documentElement\n const width = lengthToPixels(svgElement.getAttribute('width'))\n const height = lengthToPixels(svgElement.getAttribute('height'))\n if (width && height) {\n return {\n x: width,\n y: height\n }\n }\n return null\n}\n\nexport function getViewbox(svgElement: SVGGraphicsElement): Extent {\n return svgElement\n .getAttribute('viewBox')\n ?.split(' ')\n .map((n) => +n) as Extent\n}\n\n//==============================================================================\n\ntype Attributes = StringProperties\n\nexport function createSVGElement(tagName: string, attributes: Attributes): SVGElement {\n const element = document.createElementNS(SVG_URI, tagName)\n for (const [key, value] of Object.entries(attributes)) {\n element.setAttribute(key, value)\n }\n return element\n}\n\nfunction attributePairs(attributes: Attributes): string {\n const attributePairs: string[] = []\n for (const [key, value] of Object.entries(attributes)) {\n attributePairs.push(` ${key}=\"${value}\"`)\n }\n return attributePairs.join('')\n}\n\n//==============================================================================\n\nfunction svgCircleAttributes(c: PointLike, r: number, attributes: Attributes): Attributes {\n return Object.assign({}, attributes, {\n cx: `${c.x}`,\n cy: `${c.y}`,\n r: `${r}`\n })\n}\n\nexport function svgCircle(centre: PointLike, radius: number, attributes: Attributes = {}): string {\n return `<circle${attributePairs(svgCircleAttributes(centre, radius, attributes))}/>`\n}\n\nexport function svgCircleElement(centre: PointLike, radius: number, attributes: Attributes = {}): SVGCircleElement {\n return createSVGElement('circle', svgCircleAttributes(centre, radius, attributes)) as SVGCircleElement\n}\n\n//==============================================================================\n\nexport function svgPath(points: PointLike[], attributes: Attributes = {}): string {\n const description = svgPathDescription(points)\n return description ? `<path${attributePairs(attributes)} d=\"${description}\"/>` : ''\n}\n\nexport function svgPathDescription(points: PointLike[]): string {\n const pts = points.map((pt) => `${pt.x},${pt.y}`)\n return pts.length > 1 ? `M${pts.join(' L')}` : ''\n}\n\nexport function svgPathElement(points: PointLike[], attributes: Attributes = {}): SVGPathElement {\n const description = svgPathDescription(points)\n return createSVGElement('path', Object.assign({}, attributes, { d: description })) as SVGPathElement\n}\n\n//==============================================================================\n\nfunction svgRectAttributes(tl: PointLike, br: PointLike, attributes: Attributes): Attributes {\n return Object.assign({}, attributes, {\n x: `${Math.min(tl.x, br.x)}`,\n y: `${Math.min(tl.y, br.y)}`,\n width: `${Math.abs(br.x - tl.x)}`,\n height: `${Math.abs(br.y - tl.y)}`\n })\n}\n\nexport function svgRect(topLeft: PointLike, bottomRight: PointLike, attributes: Attributes = {}): string {\n return `<rect${attributePairs(svgRectAttributes(topLeft, bottomRight, attributes))}/>`\n}\n\nexport function svgRectElement(\n topLeft: PointLike,\n bottomRight: PointLike,\n attributes: StringProperties = {}\n): SVGRectElement {\n return createSVGElement('rect', svgRectAttributes(topLeft, bottomRight, attributes)) as SVGRectElement\n}\n\n//==============================================================================\n//==============================================================================\n\n// Minimal CSS needed for stand-alone image\nexport const LatexStyleRules = [\n 'svg {color: black}', // default value of ``currentColor``\n 'svg a{fill:blue;stroke:blue}',\n // Round the corners of filled background rectangles\n '[data-mml-node=\"mstyle\"]>rect[data-bgcolor=\"true\"]{rx: 8%; ry: 12%}',\n '[data-mml-node=\"merror\"]>g{fill:red;stroke:red}',\n '[data-mml-node=\"merror\"]>rect[data-background]{fill:yellow;stroke:none}',\n '[data-frame],[data-line]{stroke-width:70px;fill:none}',\n '.mjx-dashed{stroke-dasharray:140}',\n '.mjx-dotted{stroke-linecap:round;stroke-dasharray:0,140}',\n 'use[data-c]{stroke-width:3px}'\n].join('')\n\n//==============================================================================\n\nexport function base64Svg(svg: string): string {\n return `data:image/svg+xml;base64,${Buffer.from(svg, 'utf8').toString('base64')}`\n}\n\n//==============================================================================\n\nexport function getSvgImageFromBase64(svgText: string): string|undefined {\n const base64 = svgText.match(/data:image\\/svg\\+xml;base64,(?<base64>.*)/)\n if (base64) {\n return Buffer.from(base64.groups!.base64!, 'base64').toString('utf8')\n }\n}\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Editor\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport { isNamedNode, namedNode, type NamedNode } from './rdfstore'\n\nimport { SVG_URI } from '../common/svgUtils'\n\n//==============================================================================\n\nexport const CELLDL_URI = 'http://celldl.org/ontologies/celldl#'\n\nexport const BG_URI = 'https://bg-rdf.org/ontologies/bondgraph#'\nexport const BGF_URI = 'https://bg-rdf.org/ontologies/bondgraph-framework#'\nexport const CDT_URI = 'https://w3id.org/cdt/'\n\nexport const TPL_URI = 'https://bg-rdf.org/templates/'\n\nexport const DCT_URI = 'http://purl.org/dc/terms/'\nexport const OWL_URI = 'http://www.w3.org/2002/07/owl#'\nexport const RDF_URI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'\nexport const RDFS_URI = 'http://www.w3.org/2000/01/rdf-schema#'\nexport const XSD_URI = 'http://www.w3.org/2001/XMLSchema#'\n\n//==============================================================================\n\nexport const CELLDL_DECLARATIONS = {\n celldl: CELLDL_URI,\n\n // These should come from BG plugin\n bg: BG_URI,\n bgf: BGF_URI,\n cdt: CDT_URI,\n tpl: TPL_URI\n}\n\nexport const WEB_DECLARATIONS = {\n dcterms: DCT_URI,\n owl: OWL_URI,\n rdf: RDF_URI,\n rdfs: RDFS_URI,\n svg: `${SVG_URI}/`,\n xsd: XSD_URI\n}\n\nconst declaredNamespaces = Object.assign({}, CELLDL_DECLARATIONS, WEB_DECLARATIONS)\n\nexport const SPARQL_PREFIXES = Object.entries(declaredNamespaces).map(\n (prefixUri) => `PREFIX ${prefixUri[0]}: <${prefixUri[1]}>`).join('\\n')\n\n//==============================================================================\n\nexport type NamespaceType = (_: string) => NamedNode\n\nexport class Namespace {\n #nsuri: string\n\n constructor(nsuri: string) {\n this.#nsuri = nsuri\n }\n\n uri(ln: string): NamedNode {\n return namedNode(this.#nsuri + (ln || ''))\n }\n}\n\n//==============================================================================\n\nexport const CELLDL = new Namespace(CELLDL_URI)\n\nexport const BG = new Namespace(BG_URI)\nexport const BGF = new Namespace(BGF_URI)\nexport const CDT = new Namespace(CDT_URI)\nexport const TPL = new Namespace(TPL_URI)\n\nexport const DCT = new Namespace(DCT_URI)\nexport const OWL = new Namespace(OWL_URI)\nexport const RDF = new Namespace(RDF_URI)\nexport const RDFS = new Namespace(RDFS_URI)\nexport const XSD = new Namespace(XSD_URI)\n\n//==============================================================================\n\nexport function curieSuffix(NS: Namespace, term: string | NamedNode): string {\n const curie: string = isNamedNode(term) ? (<NamedNode>term).uri : <string>term\n const fullUri = expandCurie(curie)\n const nsUri = NS.uri('').uri\n if (fullUri.startsWith(nsUri)) {\n return fullUri.slice(nsUri.length)\n }\n return curie\n}\n\n//==============================================================================\n\nexport function getCurie(term: string | NamedNode): string {\n const fullUri: string = isNamedNode(term) ? (<NamedNode>term).uri : <string>term\n for (const [prefix, nsUri] of Object.entries(declaredNamespaces)) {\n if (fullUri.startsWith(nsUri)) {\n return `${prefix}:${fullUri.slice(nsUri.length)}`\n }\n }\n return fullUri\n}\n\n//==============================================================================\n\nconst declaredNamespacesMap = new Map(Object.entries(declaredNamespaces))\n\nexport function expandCurie(curie: string): string {\n const parts = curie.split(':')\n // @ts-expect-error: `parts[0]` is defined\n if (parts.length > 1 && declaredNamespacesMap.has(parts[0])) {\n // @ts-expect-error: `parts[0]` is defined\n return `${declaredNamespacesMap.get(parts[0])}${parts.slice(1).join(':')}`\n }\n return curie\n}\n\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Editor\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport {\n blankNode,\n isBlankNode,\n isLiteral,\n isNamedNode,\n MetadataPropertiesMap,\n type MetadataPropertyValue,\n type ContentType,\n type NamedNode,\n type Statement\n} from '.'\n\nimport type { SubjectType, PredicateType, ObjectType } from '.'\n\n//==============================================================================\n\nimport { RDF } from './namespaces'\n\n//==============================================================================\n\nexport interface PredicateValue {\n predicate: PredicateType\n object: ObjectType\n}\n\n//==============================================================================\n\nexport abstract class BaseStore {\n\n abstract add(s: SubjectType, p: PredicateType, o: ObjectType, g: NamedNode | null): Statement\n\n abstract contains(\n s: SubjectType | null,\n p: PredicateType | null,\n o: ObjectType | null,\n g: NamedNode | null\n ): boolean\n\n abstract load(baseIri: string|null, rdf: string, contentType: ContentType, graph: NamedNode|null): void\n\n abstract removeStatements(\n s: SubjectType | null,\n p: PredicateType | null,\n o: ObjectType | null,\n g: NamedNode | null\n ): void\n\n abstract serialise(\n baseIri: string,\n contentType: ContentType,\n namespaces: Record<string, string>,\n graph: NamedNode | null\n ): Promise<string>\n\n abstract query(sparql: string, all_graphs: boolean): Map<string, unknown>[]\n\n abstract statements(graph: NamedNode | null): Statement[]\n\n abstract statementsMatching(\n s: SubjectType | null,\n p: PredicateType | null,\n o: ObjectType | null,\n g: NamedNode | null\n ): Statement[]\n\n abstract subjectsOfType(parentType: NamedNode): [SubjectType, NamedNode][]\n\n abstract update(sparql: string): void\n\n addMetadataPropertiesForSubject(subject: SubjectType, properties: MetadataPropertiesMap) {\n const statements: Statement[] = []\n for (const [predicate, value] of properties.predicateValues()) {\n statements.push(...this.#addMetadataProperties(subject, predicate, value))\n }\n return statements\n }\n\n #addMetadataProperties(subject: SubjectType, predicate: PredicateType, value: MetadataPropertyValue): Statement[] {\n const statements: Statement[] = []\n if (isLiteral(value) || isNamedNode(value)) {\n // @ts-expect-error: value is a Literal or NamedNode\n statements.push(this.add(subject, predicate, value))\n } else if (value instanceof MetadataPropertiesMap) {\n const node = blankNode()\n statements.push(this.add(subject, predicate, node, null))\n statements.push(...this.addMetadataPropertiesForSubject(node, value))\n } else if (Array.isArray(value) && value.length > 0) {\n const node = blankNode()\n statements.push(this.add(subject, predicate, node, null))\n this.#addListAsCollection(node, value) // ??\n } else if (value instanceof Set) {\n for (const v of value.values()) {\n statements.push(...this.#addMetadataProperties(subject, predicate, v))\n }\n }\n return statements\n }\n\n addStatementList(statements: Statement[]) {\n statements.forEach((s) => {\n this.add(s.subject, s.predicate, s.object, null)\n })\n }\n\n metadataFromPredicates(predicateValues: PredicateValue[]): MetadataPropertiesMap {\n const metadata = new MetadataPropertiesMap()\n for (const predicateValue of predicateValues) {\n const value = this.#metadataValue(predicateValue.object)\n if (value) {\n metadata.setProperty(predicateValue.predicate, value, true)\n }\n }\n return metadata\n }\n\n metadataPropertiesForSubject(subject: SubjectType): MetadataPropertiesMap {\n const predicateValues = this.statementsMatching(subject, null, null, null) as PredicateValue[]\n return this.metadataFromPredicates(predicateValues)\n }\n\n removeStatementList(statements: Statement[]) {\n statements.forEach((s) => {\n this.removeStatements(s.subject, s.predicate, s.object, null)\n })\n }\n\n #metadataValue(value: ObjectType): MetadataPropertyValue | null {\n if (isLiteral(value) || isNamedNode(value)) {\n // @ts-expect-error: `value` is a Literal or NamedNode\n return value\n } else if (isBlankNode(value)) {\n // @ts-expect-error: value is a BlankNode\n if (this.contains(value, RDF.uri('rest'), null)) {\n // @ts-expect-error: `value` is a BlankNode\n return this.#listFromCollection(value)\n } else {\n // @ts-expect-error: `value` is a BlankNode\n return this.metadataPropertiesForSubject(value)\n }\n }\n return null\n }\n\n #listFromCollection(subject: SubjectType): MetadataPropertyValue[] {\n // Based on https://github.com/ontola/rdfdev-js/blob/master/packages/collections/src/list.ts\n const result: MetadataPropertyValue[] = []\n const nodes = [subject.value]\n let next = subject\n while (next && !next.equals(RDF.uri('nil'))) {\n const headItem = this.statementsMatching(next, RDF.uri('first'), null, null)\n if (headItem.length !== 1 || headItem[0] === undefined) break\n const value = this.#metadataValue(headItem[0].object)\n if (!value) break\n result.push(value)\n const nextItem = this.statementsMatching(next, RDF.uri('rest'), null, null)\n if (nextItem.length !== 1 || nextItem[0] === undefined) break\n next = nextItem[0].object as NamedNode\n if (nodes.includes(next.value)) {\n break\n }\n nodes.push(next.value)\n }\n return result\n }\n\n #addListAsCollection(subject: SubjectType, values: MetadataPropertyValue[]): Statement[] {\n const statements: Statement[] = []\n let current = subject\n values.forEach((value, index) => {\n statements.push(...this.#addMetadataProperties(current, RDF.uri('first'), value))\n if (index < values.length - 1) {\n const next = blankNode()\n statements.push(this.add(current, RDF.uri('rest'), next, null))\n current = next\n }\n })\n statements.push(this.add(current, RDF.uri('rest'), RDF.uri('nil'), null))\n return statements\n }\n}\n\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Editor\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport type * as $oxigraph from '../assets/oxigraph/web'\n\nimport { write as prettyTurtle } from '@jeswr/pretty-turtle'\n\n//==============================================================================\n\nimport { WEB_DECLARATIONS } from './namespaces'\n\n//==============================================================================\n\ntype Quad = $oxigraph.Quad\n\ntype Variable = $oxigraph.Variable\n\n//==============================================================================\n\nexport type Term = $oxigraph.Term\n\n//==============================================================================\n\nexport type BlankNode = $oxigraph.BlankNode\n\nexport function blankNode(value: string|undefined=undefined) {\n return globalThis.oxigraph.blankNode(value)\n}\n\nexport function isBlankNode(term: unknown): boolean {\n // @ts-expect-error: term is of unknown type\n return !!term.termType && term.termType === 'BlankNode'\n}\n\n//==============================================================================\n\nexport type Literal = $oxigraph.Literal\n\nexport function literal(value: string|number|boolean, datatype: NamedNode|undefined=undefined) {\n return globalThis.oxigraph.literal(value, datatype)\n}\n\nexport function isLiteral(term: unknown): boolean {\n // @ts-expect-error: term is of unknown type\n return !!term.termType && term.termType === 'Literal'\n}\n\n//==============================================================================\n\nexport interface NamedNode extends $oxigraph.NamedNode {\n uri: string\n id: () => string\n}\n\nfunction makeNamedNode(term: Term): NamedNode | Term {\n if (isNamedNode(term)) {\n (term as NamedNode).uri = term.value;\n (term as NamedNode).id = () => {\n let parts = term.value.split('#')\n if (parts.length < 2) {\n parts = term.value.split('/')\n }\n // biome-ignore lint/style/noNonNullAssertion: parts is not empty\n return parts.length > 1 ? parts.at(-1)! : ''\n }\n return term as NamedNode\n }\n return term\n}\n\nexport function namedNode(value: string): NamedNode {\n return makeNamedNode(globalThis.oxigraph.namedNode(value)) as NamedNode\n}\n\nexport function isNamedNode(term: unknown): boolean {\n // @ts-expect-error: term is of unknown type\n return !!term.termType && term.termType === 'NamedNode'\n}\n\n//==============================================================================\n\nexport type SubjectType = BlankNode | NamedNode | Quad | Variable\nexport type PredicateType = NamedNode | Variable\nexport type ObjectType = BlankNode | Literal | NamedNode | Quad | Variable\n\nexport interface Statement extends Quad {\n subject: SubjectType\n predicate: PredicateType\n object: ObjectType\n}\n\nfunction makeStatement(quad: Quad): Statement {\n return {\n graph: makeNamedNode(quad.graph),\n object: makeNamedNode(quad.object),\n predicate: makeNamedNode(quad.predicate),\n subject: makeNamedNode(quad.subject),\n termType: quad.termType,\n value: quad.value\n } as Statement\n}\n\n//==============================================================================\n\nexport type ContentType = string\n\nexport const TurtleContentType: ContentType = 'text/turtle'\n\n//==============================================================================\n//==============================================================================\n\nimport { BaseStore } from './store'\n\n//==============================================================================\n\nexport class RdfStore extends BaseStore {\n #rdfStore: $oxigraph.Store\n\n constructor() {\n super()\n this.#rdfStore = new globalThis.oxigraph.Store()\n }\n\n statements(graph: NamedNode | null = null): Statement[] {\n return this.statementsMatching(null, null, null, graph)\n }\n\n add(s: SubjectType, p: PredicateType, o: ObjectType, g: NamedNode | null = null): Statement {\n const statement = globalThis.oxigraph.quad(s, p, o, g || globalThis.oxigraph.defaultGraph())\n this.#rdfStore.add(statement)\n return makeStatement(statement)\n }\n\n contains(\n s: SubjectType | null = null,\n p: PredicateType | null = null,\n o: ObjectType | null = null,\n g: NamedNode | null = null\n ): boolean {\n return this.#rdfStore.match(s, p, o, g || globalThis.oxigraph.defaultGraph()).length > 0\n }\n\n load(baseIri: string|null=null, rdf: string, contentType: ContentType=TurtleContentType, graph: NamedNode|null=null) {\n try {\n this.#rdfStore.load(rdf, {\n format: contentType,\n base_iri: baseIri || undefined,\n to_graph_name: graph || globalThis.oxigraph.defaultGraph()\n })\n } catch (error) {\n throw new Error(`Error parsing RDF: ${(<Error>error).message}`)\n }\n }\n\n removeStatements(\n s: SubjectType | null = null,\n p: PredicateType | null = null,\n o: ObjectType | null = null,\n g: NamedNode | null = null\n ) {\n const statements = this.#rdfStore.match(s, p, o, g || globalThis.oxigraph.defaultGraph())\n for (const statement of statements) {\n this.#rdfStore.delete(statement)\n }\n }\n\n async serialise(\n baseIri: string,\n contentType: ContentType = TurtleContentType,\n namespaces: Record<string, string> = {},\n graph: NamedNode | null = null\n ): Promise<string> {\n if (contentType === TurtleContentType) {\n const quads = this.#rdfStore.match(null, null, null, graph || globalThis.oxigraph.defaultGraph())\n const turtle = await prettyTurtle(quads, {\n format: 'text/turtle',\n prefixes: Object.assign({ '': `${baseIri}#` }, WEB_DECLARATIONS, namespaces),\n baseIri: baseIri,\n explicitBaseIRI: true,\n compact: false,\n ordered: true\n })\n return turtle.replaceAll(baseIri, '')\n } else {\n return this.#rdfStore.dump({\n format: contentType,\n from_graph_name: graph || globalThis.oxigraph.defaultGraph()\n })\n }\n }\n\n query(sparql: string, all_graphs: boolean = false): Map<string, Term>[] {\n try {\n const results = this.#rdfStore.query(sparql, {\n use_default_graph_as_union: all_graphs\n }) as Map<string, Term>[]\n for (const result of results) {\n for (const term of result.values()) {\n makeNamedNode(term)\n }\n }\n return results\n } catch (error) {\n console.log(`Error parsing SPARQL query: ${(<Error>error).message} ${sparql}`)\n let inLib = true\n for (const location of (<Error>error).stack!.split('\\n')) {\n if (inLib) {\n inLib = location.indexOf('RdfStore.query') < 0\n } else {\n console.log(location)\n }\n }\n }\n return []\n }\n\n statementsMatching(\n s: SubjectType | null = null,\n p: PredicateType | null = null,\n o: ObjectType | null = null,\n g: NamedNode | null = null\n ): Statement[] {\n const statements: Quad[] = this.#rdfStore.match(s, p, o, g || globalThis.oxigraph.defaultGraph())\n return statements.map((s) => makeStatement(s))\n }\n\n subjectsOfType(parentType: NamedNode): [SubjectType, NamedNode][] {\n return this.query(\n `PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\nSELECT DISTINCT ?s ?t WHERE {\n ?s rdf:type/rdfs:subClassOf* <${parentType.uri}> .\n ?s rdf:type ?t .\n } ORDER BY ?s`,\n true\n ).map((r) => [r.get('s') as SubjectType,\n r.get('t') as NamedNode])\n }\n\n update(sparql: string): void {\n try {\n this.#rdfStore.update(sparql)\n } catch (error) {\n console.log(`Error parsing SPARQL update: ${(<Error>error).message} ${sparql}`)\n let inLib = true\n for (const location of (<Error>error).stack!.split('\\n')) {\n if (inLib) {\n inLib = location.indexOf('RdfStore.update') < 0\n } else {\n console.log(location)\n }\n }\n }\n }\n}\n\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Editor\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nexport {\n blankNode,\n isBlankNode,\n isLiteral,\n isNamedNode,\n literal,\n namedNode,\n RdfStore,\n TurtleContentType\n} from './rdfstore'\n\nexport type {\n BlankNode,\n ContentType,\n Literal,\n NamedNode,\n ObjectType,\n PredicateType,\n Statement,\n SubjectType,\n Term\n} from './rdfstore'\n\nexport type { PredicateValue } from './store'\n\nexport * from './namespaces'\n\n//==============================================================================\n\nimport { type Literal, isLiteral, type NamedNode, namedNode, isNamedNode } from './rdfstore'\n\nimport type { PredicateType } from './rdfstore'\n\nimport { RDF } from './namespaces'\n\n//==============================================================================\n\n/**\n * The type of the ``object`` of a ``predicate``\n */\nexport type MetadataPropertyValue = Literal | NamedNode | MetadataCollection\nexport type MetadataCollection = MetadataPropertyValue[] | Set<MetadataPropertyValue> | MetadataPropertiesMap\n\n/**\n * A ``<predicate, object>`` pair\n */\nexport type MetadataProperty = [NamedNode, MetadataPropertyValue]\n\n//==============================================================================\n\nexport function fragment(uri: NamedNode|string): string {\n // @ts-expect-error: uri is a NamedNode\n const uriString = isNamedNode(uri) ? uri.value : uri\n const parts = uriString.split('#')\n return parts.at(-1)\n}\n\n//==============================================================================\n\n/**\n * An associative map with ``object`` values for a subject's ``predicate`` properties.\n *\n * We extend ``Map`` to add a ``copy()`` method.\n */\nexport class MetadataPropertiesMap extends Map<string, MetadataPropertyValue> {\n #rdfTypes: Set<string> = new Set()\n\n static fromProperties(properties: MetadataProperty[]): MetadataPropertiesMap {\n return properties.reduce((metadata, prop) => {\n metadata.setProperty(prop[0], prop[1])\n return metadata\n }, new MetadataPropertiesMap())\n }\n\n get rdfTypes() {\n return this.#rdfTypes\n }\n\n copy(): MetadataPropertiesMap {\n const metadata = new MetadataPropertiesMap()\n for (const [key, value] of this.entries()) {\n metadata.set(key, this.#copyValue(value))\n }\n metadata.#rdfTypes = new Set(this.#rdfTypes.values())\n return metadata\n }\n\n #copyValue(value: MetadataPropertyValue): MetadataPropertyValue {\n if (isLiteral(value) || isNamedNode(value)) {\n return value\n } else if (value instanceof MetadataPropertiesMap) {\n return value.copy()\n } else if (Array.isArray(value)) {\n return value.map((v) => this.#copyValue(v)) as MetadataPropertyValue\n } else {\n // @ts-expect-error: `value` is not a Literal nor NamedNode\n return new Set([...value.values()].map((v) => this.#copyValue(v))) as MetadataPropertyValue\n }\n }\n\n getProperty(predicate: PredicateType): MetadataPropertyValue | null {\n return this.get(predicate.value) || null\n }\n\n getPropertyAsArray(predicate: PredicateType): MetadataPropertyValue[] {\n const value = this.getProperty(predicate)\n if (!value) return []\n if (isLiteral(value) || isNamedNode(value) || value instanceof MetadataPropertiesMap) {\n return [value]\n } else if (Array.isArray(value)) {\n return value\n } else {\n // @ts-expect-error: `value` is a set`\n return [...value.values()]\n }\n }\n\n isA(type: NamedNode): boolean {\n return this.#rdfTypes.has(type.uri)\n }\n\n *predicateValues(): IterableIterator<[NamedNode, MetadataPropertyValue]> {\n for (const [p, value] of super.entries()) {\n yield [namedNode(p), value]\n }\n }\n\n setProperty(predicate: PredicateType, value: MetadataPropertyValue, multiValued = false) {\n if (predicate.equals(RDF.uri('type')) && isNamedNode(value)) {\n // @ts-expect-error: `value` is a NamedNode\n this.#rdfTypes.add(value.uri)\n }\n // @ts-expect-error: `predicate` is a NamedNode\n const property = predicate.uri\n if (multiValued && this.has(property)) {\n const values = this.get(property)\n if (values instanceof Set) {\n let inSet = false\n if (isLiteral(value) || isNamedNode(value)) {\n for (const v of values) {\n // @ts-expect-error: `value` is a Literal or NamedNode\n if (value.equals(v)) {\n inSet = true\n break\n }\n }\n }\n if (!inSet) {\n values.add(value)\n }\n } else if (values) {\n // @ts-expect-error: `values` is a Literal or NamedNode\n if (!(isLiteral(values) || isNamedNode(values)) || !values.equals(value)) {\n this.set(property, new Set<MetadataPropertyValue>([values, value]))\n }\n } else {\n this.set(property, new Set<MetadataPropertyValue>([value]))\n }\n } else {\n this.set(property, value)\n }\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nexport interface PointLike {\n x: number\n y: number\n}\n\nexport type PointArray = [number, number]\n\n//==============================================================================\n\n// Two points are considered to be the same if the square of the distance between\n// them is no bigger than POINT_EPSILON_SQUARED\n\nexport const POINT_EPSILON = 1e-4\nexport const POINT_EPSILON_SQUARED = POINT_EPSILON * POINT_EPSILON\n\n//==============================================================================\n\nexport class Point implements PointLike {\n constructor(\n readonly x: number = 0,\n readonly y: number = 0\n ) {}\n\n static fromPoint(point: PointLike): Point {\n return new Point(point.x, point.y)\n }\n\n static fromArray(coords: PointArray): Point {\n return new Point(coords[0], coords[1])\n }\n\n asArray(): PointArray {\n return [this.x, this.y]\n }\n\n add(point: PointLike): Point {\n return Point.fromPoint(PointMath.add(this, point))\n }\n\n colinear(p1: PointLike, p2: PointLike, between: boolean = false): boolean {\n return PointMath.colinear(this, p1, p2, between)\n }\n\n copy(): Point {\n return new Point(this.x, this.y)\n }\n\n distance(point: PointLike): number {\n return PointMath.distance(this, point)\n }\n\n equals(point: PointLike): boolean {\n return PointMath.equals(this, point)\n }\n\n isZero(): boolean {\n return PointMath.isZero(this)\n }\n\n apply(fn: (n: number) => number): Point {\n return Point.fromPoint(PointMath.apply(this, fn))\n }\n\n scalarScale(scale: number): Point {\n return Point.fromPoint(PointMath.scalarScale(this, scale))\n }\n\n scale(scale: PointLike): Point {\n return Point.fromPoint(PointMath.scale(this, scale))\n }\n\n subtract(point: PointLike): Point {\n return Point.fromPoint(PointMath.subtract(this, point))\n }\n\n toString(): string {\n return `(${this.x}, ${this.y})`\n }\n}\n\n//==============================================================================\n\n// biome-ignore lint/complexity/noStaticOnlyClass: use static members to provide a namespace\nexport class PointMath {\n static add(p1: PointLike, p2: PointLike): Point {\n return new Point(p1.x + p2.x, p1.y + p2.y)\n }\n\n static apply(p1: PointLike, fn: (number: number) => number): Point {\n return new Point(fn(p1.x), fn(p1.y))\n }\n\n static colinear(p0: PointLike, p1: PointLike, p2: PointLike, between: boolean = false): boolean {\n const d0 = PointMath.distance(p0, p1)\n const d1 = PointMath.distance(p1, p2)\n const d2 = PointMath.distance(p0, p2)\n if (d2 > d0 && d2 > d1) {\n return d0 + d1 < d2 * (1 + POINT_EPSILON)\n } else if (between) {\n return false\n } else if (d1 > d0 && d1 > d2) {\n return d0 + d2 < d1 * (1 + POINT_EPSILON)\n } else {\n return d1 + d2 < d0 * (1 + POINT_EPSILON)\n }\n }\n\n static distance(p1: PointLike, p2: PointLike): number {\n return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2)\n }\n\n static equals(p1: PointLike, p2: PointLike): boolean {\n return (p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2 <= POINT_EPSILON_SQUARED\n }\n\n static isZero(pt: PointLike): boolean {\n return pt.x ** 2 + pt.y ** 2 <= POINT_EPSILON_SQUARED\n }\n\n static scalarScale(p1: PointLike, scale: number): Point {\n return new Point(scale * p1.x, scale * p1.y)\n }\n\n static scale(p1: PointLike, scale: PointLike): Point {\n return new Point(scale.x * p1.x, scale.y * p1.y)\n }\n\n static subtract(p1: PointLike, p2: PointLike): Point {\n return new Point(p1.x - p2.x, p1.y - p2.y)\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport type { Pair } from './common/types'\n\n//==============================================================================\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n//==============================================================================\n\nexport function round(length: number, decimalPlaces: number = 3): number {\n const tenPower = 10 ** decimalPlaces\n return Math.round(tenPower * length) / tenPower\n}\n\nexport function roundEqual(l1: number, l2: number, decimalPlaces: number = 3): boolean {\n const tenPower = 10 ** decimalPlaces\n return Math.round(tenPower * l1) / tenPower === Math.round(tenPower * l2) / tenPower\n}\n\n//==============================================================================\n\nexport function* range(startOrStop: number, stop: number | null = null, step: number | null = null) {\n if (stop === null) {\n stop = startOrStop\n startOrStop = 0\n }\n if (step === null) {\n step = 1\n }\n for (let x = startOrStop; x < stop; x += step) {\n yield x\n }\n}\n\n//==============================================================================\n\n// From https://stackoverflow.com/a/65064026\n\nexport function pairwise<T>(a: T[]): Pair<T>[] {\n return a.flatMap((x: T) => {\n return a.flatMap((y: T): Pair<T>[] => {\n return x !== y ? [[x, y]] : []\n })\n })\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport { Point, type PointLike } from '../common/points'\nimport type { Transform } from '../geometry/transforms'\nimport { round } from '../utils'\n\n//==============================================================================\n\n/**\n * [left, top, width, height]\n */\nexport type Extent = [number, number, number, number]\n\n//==============================================================================\n\nexport class Bounds {\n #left: number\n #right: number\n #top: number\n #bottom: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n // Ensure bounds are in ``normal`` order\n ;[this.#left, this.#right] = left <= right ? [left, right] : [right, left]\n ;[this.#top, this.#bottom] = top <= bottom ? [top, bottom] : [bottom, top]\n }\n\n get left() {\n return this.#left\n }\n\n get right() {\n return this.#right\n }\n\n get top() {\n return this.#top\n }\n\n get bottom() {\n return this.#bottom\n }\n\n static fromPoints(pt0: PointLike, pt1: PointLike): Bounds {\n return new Bounds(pt0.x, pt0.y, pt1.x, pt1.y)\n }\n\n static fromSvg(svgElement: SVGGraphicsElement, globalTransform: Transform | null = null): Bounds {\n const bbox = svgElement.getBBox()\n let topLeft = new Point(bbox.x, bbox.y)\n let bottomRight = new Point(bbox.x + bbox.width, bbox.y + bbox.height)\n if (globalTransform) {\n topLeft = globalTransform.transformPoint(topLeft)\n bottomRight = globalTransform.transformPoint(bottomRight)\n }\n const bounds = new Bounds(topLeft.x, topLeft.y, bottomRight.x, bottomRight.y)\n return bounds\n }\n\n get height(): number {\n return this.#bottom - this.#top\n }\n\n get topLeft(): Point {\n return new Point(this.#left, this.#top)\n }\n\n get width(): number {\n return this.#right - this.#left\n }\n\n asArray(): [number, number, number, number] {\n return [this.#left, this.#top, this.#right, this.#bottom]\n }\n\n asPoints(): [Point, Point] {\n return [new Point(this.#left, this.#top), new Point(this.#right, this.#bottom)]\n }\n\n equal(bounds: Bounds, epsilon = 0.0001): boolean {\n // Assume bounds are normalised\n return (\n Math.abs(this.#left - bounds.#left) < epsilon &&\n Math.abs(this.#top - bounds.#top) < epsilon &&\n Math.abs(this.#right - bounds.#right) < epsilon &&\n Math.abs(this.#bottom - bounds.#bottom) < epsilon\n )\n }\n\n expand(margin: number): Bounds {\n return new Bounds(this.#left - margin, this.#top - margin, this.#right + margin, this.#bottom + margin)\n }\n\n inContainer(container: Bounds): boolean {\n return (\n this.#left >= container.#left &&\n this.#top <= container.#top &&\n this.#top >= container.#top &&\n this.#bottom <= container.#bottom\n )\n }\n}\n\n//==============================================================================\n\ninterface NumericRange {\n minimum: number\n maximum: number\n}\n\n//==============================================================================\n\nclass IdGenerator {\n static #instance: IdGenerator | null = null\n #nextId: number = 0\n\n private constructor() {\n if (IdGenerator.#instance) {\n throw new Error('Use `IdGenerator.instance` instead of `new`')\n }\n IdGenerator.#instance = this\n }\n\n static get instance() {\n if (!IdGenerator.#instance) {\n IdGenerator.#instance = new IdGenerator()\n }\n return IdGenerator.#instance\n }\n\n get nextId() {\n this.#nextId += 1\n return this.#nextId\n }\n}\n\nconst idGenerator = IdGenerator.instance\n\nfunction nextId(prefix: string = ''): string {\n return `${prefix}:${idGenerator.nextId}`\n}\n\n//==============================================================================\n\nexport class RestrictedValue implements NumericRange {\n #dirty: boolean = false\n #value: number = 0\n #minimum: number | RestrictedValue = -Infinity\n #maximum: number | RestrictedValue = Infinity\n readonly id: string\n\n constructor(\n value: number = 0,\n rangeStart: number | RestrictedValue = -Infinity,\n rangeEnd: number | RestrictedValue = Infinity\n ) {\n this.#value = value\n if (this.#getValue(rangeStart) <= this.#getValue(rangeEnd)) {\n this.#minimum = rangeStart\n this.#maximum = rangeEnd\n } else {\n this.#minimum = rangeEnd\n this.#maximum = rangeStart\n }\n this.id = nextId('V')\n }\n\n clean() {\n this.#dirty = false\n }\n get dirty() {\n return this.#dirty\n }\n\n get fixed() {\n return this.minimum === this.maximum\n }\n\n get minimum() {\n return this.#getValue(this.#minimum)\n }\n\n get maximum() {\n return this.#getValue(this.#maximum)\n }\n\n get value() {\n return this.#value\n }\n set value(value: number) {\n if (this.#value !== value) {\n if (value < this.minimum) {\n value = this.minimum\n } else if (value > this.maximum) {\n value = this.maximum\n }\n if (this.#value !== value) {\n this.#value = value\n this.#dirty = true\n }\n }\n }\n\n #getValue(value: number | RestrictedValue): number {\n return typeof value === 'number' ? value : value.value\n }\n\n copy(): RestrictedValue {\n return new RestrictedValue(this.#value, this.#minimum, this.#maximum)\n }\n\n adjustValue(delta: number) {\n this.#minimum = this.minimum + delta\n this.#maximum = this.maximum + delta\n this.#value += delta\n }\n\n narrowRange(minimum: number | RestrictedValue, maximum: number | RestrictedValue) {\n let minValue = minimum\n let maxValue = maximum\n if (this.#getValue(minValue) > this.#getValue(maxValue)) {\n minValue = maximum\n maxValue = minimum\n }\n if (this.#getValue(minValue) > this.minimum) {\n this.#minimum = minValue\n }\n if (this.#getValue(maxValue) < this.maximum) {\n this.#maximum = maxValue\n }\n }\n\n reassignMaximum(maximum: number | RestrictedValue) {\n this.#maximum = maximum\n }\n\n reassignMinimum(minimum: number | RestrictedValue) {\n this.#minimum = minimum\n }\n\n reassignValue(value: number) {\n this.#value = value\n }\n\n toString() {\n return `${this.id}: [${round(this.minimum)}, ${round(this.#value)}, ${round(this.maximum)}]`\n }\n}\n\n//==============================================================================\n\nexport class FixedValue extends RestrictedValue {\n constructor(value: number) {\n super(value, value, value)\n }\n\n get fixed() {\n return true\n }\n\n copy(): FixedValue {\n return new FixedValue(this.value)\n }\n\n narrowRange(_minimum: number, _maximum: number) {}\n\n reassignValue(value: number) {\n super.reassignValue(value)\n super.reassignMinimum(value)\n super.reassignMaximum(value)\n }\n}\n\n//==============================================================================\n\nexport class ComputedValue extends RestrictedValue {\n #value: () => number\n\n constructor(\n value: () => number,\n minimum: number | RestrictedValue = -Infinity,\n maximum: number | RestrictedValue = Infinity\n ) {\n super(value(), minimum, maximum)\n this.#value = value\n }\n\n get dirty() {\n return true // Always recompute\n }\n\n get value() {\n super.value = this.#value()\n return super.value\n }\n set value(_: number) {}\n}\n\n//==============================================================================\n\nexport class RestrictedPoint {\n #xValue: RestrictedValue\n #yValue: RestrictedValue\n\n constructor(xValue: RestrictedValue, yValue: RestrictedValue) {\n this.#xValue = xValue\n this.#yValue = yValue\n }\n\n static fromPoint(point: PointLike): RestrictedPoint {\n return new RestrictedPoint(new RestrictedValue(point.x), new RestrictedValue(point.y))\n }\n\n get dirty() {\n return this.#xValue.dirty || this.#yValue.dirty\n }\n\n get fixed() {\n return this.#xValue.fixed && this.#yValue.fixed\n }\n\n get point(): Point {\n return new Point(this.#xValue.value, this.#yValue.value)\n }\n set point(point: PointLike) {\n this.#xValue.value = point.x\n this.#yValue.value = point.y\n }\n\n get x() {\n return this.#xValue.value\n }\n get y() {\n return this.#yValue.value\n }\n\n get xValue() {\n return this.#xValue\n }\n set xValue(value: RestrictedValue) {\n this.#xValue = value\n }\n\n get yValue() {\n return this.#yValue\n }\n set yValue(value: RestrictedValue) {\n this.#yValue = value\n }\n\n clean() {\n this.#xValue.clean()\n this.#yValue.clean()\n }\n\n adjustValue(delta: PointLike) {\n this.xValue.adjustValue(delta.x)\n this.yValue.adjustValue(delta.y)\n }\n\n copy(): RestrictedPoint {\n return new RestrictedPoint(this.#xValue, this.#yValue)\n }\n\n reassignValue(point: PointLike) {\n this.xValue.reassignValue(point.x)\n this.yValue.reassignValue(point.y)\n }\n\n toString(): string {\n return `RP: (${round(this.x)}, ${round(this.y)})`\n }\n}\n\n//==============================================================================\n\nexport class FixedPoint extends RestrictedPoint {\n constructor(xValue: FixedValue, yValue: FixedValue) {\n super(xValue, yValue)\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport { Point, PointMath } from '../common/points'\nimport { svgRect } from '../common/svgUtils'\nimport type { StringProperties } from '../common/types'\nimport { FixedPoint, FixedValue } from '../geometry'\n\nimport { RestrictedPoint } from '.'\n\n//==============================================================================\n\nexport class ControlRect {\n #topLeft!: RestrictedPoint\n #bottomRight!: RestrictedPoint\n #size!: Point\n #centroid!: RestrictedPoint\n #centroidOffset!: Point\n #svgElement: SVGRectElement | null = null\n\n constructor(corner_0: RestrictedPoint, corner_1: RestrictedPoint, centroidOffset: Point | null = null) {\n this.setCornerPositions(corner_0, corner_1)\n this.setCentroidOffset(centroidOffset || new Point(0.5, 0.5))\n }\n\n get centroid() {\n return this.#centroid\n }\n\n get dirty() {\n return this.#topLeft.dirty || this.#bottomRight.dirty\n }\n\n get fixed() {\n return this.#topLeft.fixed && this.#bottomRight.fixed\n }\n\n get svgElement() {\n return this.#svgElement\n }\n\n get topLeftPoint() {\n return this.#topLeft.point\n }\n\n clean() {\n this.#topLeft.clean()\n this.#bottomRight.clean()\n }\n\n copy(): ControlRect {\n return new ControlRect(this.#topLeft, this.#bottomRight, this.#centroidOffset)\n }\n\n setCornerPositions(corner_0: RestrictedPoint, corner_1: RestrictedPoint) {\n let x0 = corner_0.xValue,\n y0 = corner_0.yValue\n let x1 = corner_1.xValue,\n y1 = corner_1.yValue\n if (x0.value > x1.value) {\n x0 = corner_1.xValue\n x1 = corner_0.xValue\n }\n if (y0.value > y1.value) {\n y0 = corner_1.yValue\n y1 = corner_0.yValue\n }\n this.#topLeft = new RestrictedPoint(x0, y0)\n this.#bottomRight = new RestrictedPoint(x1, y1)\n this.#size = PointMath.subtract(this.#bottomRight.point, this.#topLeft.point)\n }\n\n setCentroidOffset(centroidOffset: Point) {\n this.#centroidOffset = centroidOffset\n this.#centroid = RestrictedPoint.fromPoint(this.#size.scale(this.#centroidOffset).add(this.#topLeft.point))\n }\n\n svg(attributes: StringProperties = {}) {\n return svgRect(this.#topLeft.point, this.#bottomRight.point, attributes)\n }\n}\n\n//==============================================================================\n\nexport class FixedControlRect extends ControlRect {\n constructor(bounds: [number, number, number, number]) {\n super(\n new FixedPoint(new FixedValue(bounds[0]), new FixedValue(bounds[1])),\n new FixedPoint(new FixedValue(bounds[2]), new FixedValue(bounds[3]))\n )\n }\n}\n\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport { EM_SIZE } from '../geometry/units'\n\n//==============================================================================\n\nexport const CONNECTION_ARROW_SIZE = [4, 4] // [W, H] pixels\nexport const CONNECTION_SPLAY_PADDING = 16 // If <= 1.0 then fraction of elements width and height else pixels\nexport const MAX_CONNECTION_SPLAY_PADDING = 20 // pixels\n\nexport const CONNECTION_COLOUR = '#456'\nexport const OLD_CONNECTION_COLOUR = \"#334155\" // For auto update of `stroke` in <path> elements\n\nexport const CONNECTION_WIDTH = 2 // pixels\nexport const CONNECTION_DASH = 2 // * width\n\nexport const INTERFACE_PORT_RADIUS = 4 // pixels\nexport const SELECTION_STROKE_WIDTH = 3 // pixels\n\n//==============================================================================\n\nexport const CELLDL_BACKGROUND_CLASS = 'celldl-background'\n\n//==============================================================================\n\nexport function arrowMarkerDefinition(markerId: string, markerType: string): string {\n // see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker\n const W = 1\n return `<marker id=\"${markerId}\" viewBox=\"0 0 ${5.5 * W} ${5 * W}\" class=\"${markerType}\"\n refX=\"${5 * W}\" refY=\"${2.5 * W}\" orient=\"auto-start-reverse\" markerUnits=\"strokeWidth\"\n markerWidth=\"${CONNECTION_ARROW_SIZE[0]}\" markerHeight=\"${CONNECTION_ARROW_SIZE[1]}\">\n <path fill=\"context-stroke\" stroke=\"context-stroke\" d=\"M0,0 L${5.05 * W},${2.2 * W} L${5.05 * W},${2.8 * W} L0,${5 * W} L${W},${2.5 * W} z\" />\n </marker>`\n}\n\n//==============================================================================\n\nexport type GradientStop = {\n offset: string\n colour: string\n}\n\nexport function gradientDefinition(type: string, gradientId: string, stops: GradientStop[]): string {\n return `<${type}Gradient id=\"${gradientId}\">${stops\n .map((def) => `<stop offset=\"${def.offset}\" stop-color=\"${def.colour}\" />`)\n .join('\\n ')}</${type}Gradient>`\n}\n\n//==============================================================================\n\nexport const CellDLStylesheet = [\n `svg{font-size:${EM_SIZE}px}`,\n /* Conduits */\n '.celldl-Conduit{z-index:9999}',\n /* Connections */\n `.celldl-Connection{stroke-linejoin:round;fill:none}`,\n /* Compartments */\n '.celldl-Compartment>rect.compartment{fill:#CCC;opacity:0.6;stroke:#444;rx:10px;ry:10px}',\n /* Interfaces */\n `.celldl-InterfacePort{fill:red;r:${INTERFACE_PORT_RADIUS}px}`,\n `.celldl-Unconnected{fill:red;fill-opacity:0.1;stroke:red;r:${INTERFACE_PORT_RADIUS}px}`\n].join('')\n\n//==============================================================================\n","/**\n * Calculate a point transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param point {Point} Point\n * @returns {Point} Point\n */\nexport function applyToPoint (matrix, point) {\n return Array.isArray(point)\n ? [\n matrix.a * point[0] + matrix.c * point[1] + matrix.e,\n matrix.b * point[0] + matrix.d * point[1] + matrix.f\n ]\n : {\n x: matrix.a * point.x + matrix.c * point.y + matrix.e,\n y: matrix.b * point.x + matrix.d * point.y + matrix.f\n }\n}\n\n/**\n * Calculate an array of points transformed with an affine matrix\n * @param matrix {Matrix} Affine Matrix\n * @param points {Point[]} Array of point\n * @returns {Point[]} Array of point\n */\nexport function applyToPoints (matrix, points) {\n return points.map(point => applyToPoint(matrix, point))\n}\n","/**\n * @ignore\n * @type {RegExp}\n */\nconst matrixRegex = /^matrix\\(\\s*([0-9_+-.e]+)\\s*,\\s*([0-9_+-.e]+)\\s*,\\s*([0-9_+-.e]+)\\s*,\\s*([0-9_+-.e]+)\\s*,\\s*([0-9_+-.e]+)\\s*,\\s*([0-9_+-.e]+)\\s*\\)$/i\n\n/**\n * Parse a string formatted as matrix(a,b,c,d,e,f)\n * @param string {string} String with an affine matrix\n * @returns {Matrix} Affine Matrix\n *\n * @example\n * > fromString('matrix(1,2,3,4,5,6)')\n * {a: 1, b: 2, c: 3, d: 4, c: 5, e: 6}\n */\nexport function fromString (string) {\n const parseFloatOrThrow = number => {\n const n = parseFloat(number)\n if (Number.isFinite(n)) return n // excludes NaN, +Infinite, -Infinite\n throw new Error(`'${string}' is not a matrix`)\n }\n\n const prefix = string.substring(0, 7).toLowerCase()\n const suffix = string.substring(string.length - 1)\n const body = string.substring(7, string.length - 1)\n const elements = body.split(',')\n\n if (\n prefix === 'matrix(' &&\n suffix === ')' &&\n elements.length === 6\n ) {\n return {\n a: parseFloatOrThrow(elements[0]),\n b: parseFloatOrThrow(elements[1]),\n c: parseFloatOrThrow(elements[2]),\n d: parseFloatOrThrow(elements[3]),\n e: parseFloatOrThrow(elements[4]),\n f: parseFloatOrThrow(elements[5])\n }\n }\n\n throw new Error(`'${string}' is not a matrix`)\n}\n\n/**\n * Parse a string formatted as matrix(a,b,c,d,e,f) - Legacy implementation of `fromString(matrix)`;\n * Read this PR for details {@link https://github.com/chrvadala/transformation-matrix/pull/107}\n * @param string {string} String with an affine matrix\n * @deprecated\n * @returns {Matrix} Affine Matrix\n *\n * @example\n * > fromStringLegacy('matrix(1,2,3,4,5,6)')\n * {a: 1, b: 2, c: 3, d: 4, c: 5, e: 6}\n */\nexport function fromStringLegacy (string) {\n const parsed = string.match(matrixRegex)\n if (parsed === null || parsed.length < 7) throw new Error(`'${string}' is not a matrix`)\n return {\n a: parseFloat(parsed[1]),\n b: parseFloat(parsed[2]),\n c: parseFloat(parsed[3]),\n d: parseFloat(parsed[4]),\n e: parseFloat(parsed[5]),\n f: parseFloat(parsed[6])\n }\n}\n","/**\n * Identity matrix\n * @returns {Matrix} Affine Matrix\n */\nexport function identity () {\n return {\n a: 1,\n c: 0,\n e: 0,\n b: 0,\n d: 1,\n f: 0\n }\n}\n","/**\n * Calculate a matrix that is the inverse of the provided matrix\n * @param matrix {Matrix} Affine Matrix\n * @returns {Matrix} Inverted Affine Matrix\n */\nexport function inverse (matrix) {\n // http://www.wolframalpha.com/input/?i=Inverse+%5B%7B%7Ba,c,e%7D,%7Bb,d,f%7D,%7B0,0,1%7D%7D%5D\n\n const { a, b, c, d, e, f } = matrix\n\n const denom = a * d - b * c\n\n return {\n a: d / denom,\n b: b / -denom,\n c: c / -denom,\n d: a / denom,\n e: (d * e - c * f) / -denom,\n f: (b * e - a * f) / denom\n }\n}\n","/**\n * Calculate a translate matrix\n * @param tx {number} Translation on axis x\n * @param [ty = 0] {number} Translation on axis y\n * @returns {Matrix} Affine Matrix\n */\nexport function translate (tx, ty = 0) {\n return {\n a: 1,\n c: 0,\n e: tx,\n b: 0,\n d: 1,\n f: ty\n }\n}\n","/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function transform (...matrices) {\n matrices = Array.isArray(matrices[0]) ? matrices[0] : matrices\n\n const multiply = (m1, m2) => {\n return {\n a: m1.a * m2.a + m1.c * m2.b,\n c: m1.a * m2.c + m1.c * m2.d,\n e: m1.a * m2.e + m1.c * m2.f + m1.e,\n b: m1.b * m2.a + m1.d * m2.b,\n d: m1.b * m2.c + m1.d * m2.d,\n f: m1.b * m2.e + m1.d * m2.f + m1.f\n }\n }\n\n switch (matrices.length) {\n case 0:\n throw new Error('no matrices provided')\n\n case 1:\n return matrices[0]\n\n case 2:\n return multiply(matrices[0], matrices[1])\n\n default: {\n const [m1, m2, ...rest] = matrices\n const m = multiply(m1, m2)\n return transform(m, ...rest)\n }\n }\n}\n\n/**\n * Merge multiple matrices into one\n * @param matrices {...Matrix | Matrix[]} Matrices listed as separate parameters or in an array\n * @returns {Matrix} Affine Matrix\n */\nexport function compose (...matrices) {\n return transform(...matrices)\n}\n","/**\n * Serialize an affine matrix to a string that can be used with CSS or SVG\n * @param matrix {Matrix} Affine Matrix\n * @returns {string} String that contains an affine matrix formatted as matrix(a,b,c,d,e,f)\n */\nexport function toCSS (matrix) {\n return toString(matrix)\n}\n\n/**\n * Serialize an affine matrix to a string that can be used with CSS or SVG\n * @param matrix {Matrix} Affine Matrix\n * @returns {string} String that contains an affine matrix formatted as matrix(a,b,c,d,e,f)\n */\nexport function toSVG (matrix) {\n return toString(matrix)\n}\n\n/**\n * Serialize an affine matrix to a string that can be used with CSS or SVG\n * @param matrix {Matrix} Affine Matrix\n * @returns {string} String that contains an affine matrix formatted as matrix(a,b,c,d,e,f)\n */\nexport function toString (matrix) {\n return `matrix(${matrix.a},${matrix.b},${matrix.c},${matrix.d},${matrix.e},${matrix.f})`\n}\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport {\n applyToPoint,\n applyToPoints,\n compose,\n fromString,\n identity,\n inverse,\n type Matrix,\n toString as transformToString,\n translate\n} from 'transformation-matrix'\n\n//==============================================================================\n\nimport { Point, type PointLike } from '../common/points'\n\n//==============================================================================\n\nexport class Transform {\n #matrix: Matrix\n\n constructor(matrix: Matrix) {\n this.#matrix = matrix\n }\n\n static fromString(matrix: string): Transform {\n if (matrix === '' || matrix === 'none') {\n return new Transform(identity())\n } else {\n return new Transform(fromString(matrix))\n }\n }\n\n static Identity(): Transform {\n return new Transform(identity())\n }\n\n get isIdentity(): boolean {\n return transformToString(this.#matrix) === transformToString(identity())\n }\n\n inverse(): Transform {\n return new Transform(inverse(this.#matrix))\n }\n\n leftMultiply(transform: Transform): Transform {\n return new Transform(compose([transform.#matrix, this.#matrix]))\n }\n\n toString(): string {\n return transformToString(this.#matrix)\n }\n\n transformPoint(point: PointLike): Point {\n return Point.fromPoint(applyToPoint(this.#matrix, point))\n }\n\n transformPoints(points: PointLike[]): Point[] {\n return applyToPoints(this.#matrix, points).map((pt) => Point.fromPoint(pt))\n }\n\n static Translate(tx: number, ty: number): Transform {\n return new Transform(translate(tx, ty))\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\n\nimport { CELLDL_CLASS, type CellDLObject } from '../celldlObjects'\nimport { Point, type PointLike } from '../common/points'\nimport { CONNECTION_WIDTH, SELECTION_STROKE_WIDTH } from '../common/styling'\nimport { svgCircle } from '../common/svgUtils'\nimport { Bounds } from '../geometry'\nimport { FixedControlRect } from '../geometry/controls'\nimport { Transform } from '../geometry/transforms'\n\n\nconst CONDUIT_SELECTION_RADIUS = 9\n\n//==============================================================================\n\nexport class CellDLSVGElement {\n #bounds!: Bounds\n #centroid!: Point\n #centroidOffset: Point = new Point(0.5, 0.5)\n #cornerOffsets!: [Point, Point, Point, Point] // Wrt centroid, anticlockwise from bottom right\n #selected: boolean = false\n #selectionClasses: Set<string> = new Set()\n #selectionElement: SVGGraphicsElement\n #size: Point = new Point()\n #svgElement: SVGGraphicsElement\n #topLeft!: Point\n #globalTransform: Transform | null = null\n\n constructor(\n readonly celldlObject: CellDLObject,\n svgElement: SVGGraphicsElement | null\n ) {\n if (svgElement === null) {\n throw new Error(`CellDL object '${celldlObject.id}' isn't represented in SVG...`)\n }\n const svgDiagramElement = celldlObject.celldlModel?.svgDiagram\n // get all transformations that are being applied to the SVG element\n this.#globalTransform = Transform.Identity()\n let element = svgElement\n while (element !== svgDiagramElement) {\n const transform = getComputedStyle(element).transform\n if (transform !== 'none') {\n this.#globalTransform = this.#globalTransform.leftMultiply(Transform.fromString(transform))\n }\n element = element.parentNode as SVGGraphicsElement\n }\n if (this.#globalTransform.isIdentity) {\n this.#globalTransform = null\n }\n celldlObject.setCelldlSvgElement(this)\n this.#svgElement = svgElement\n this.#selectionElement = svgElement\n this.#updatedSvgElement()\n }\n\n get bounds(): Bounds {\n return this.#bounds\n }\n\n get centroid(): Point {\n return this.#centroid\n }\n\n get centroidOffset(): Point {\n return this.#centroidOffset\n }\n\n get corners(): [Point, Point] {\n return [this.#cornerOffsets[0], this.#cornerOffsets[2]]\n }\n\n get globalTransform() {\n return this.#globalTransform\n }\n\n get height(): number {\n return this.#size.y\n }\n\n get id(): string {\n return this.celldlObject.id\n }\n\n get selected() {\n return this.#selected\n }\n\n get size() {\n return this.#size\n }\n\n get svgElement() {\n return this.#svgElement\n }\n\n get topLeft() {\n return this.#topLeft\n }\n\n get width(): number {\n return this.#size.x\n }\n\n setCentroid(centroid: Point) {\n this.#centroid = centroid\n }\n\n svgBounds(recalculate: boolean = false): Bounds {\n // Get bounds in global coordinates\n return recalculate || this.#bounds === undefined\n ? Bounds.fromSvg(this.#svgElement, this.#globalTransform)\n : this.#bounds\n }\n\n #selectionElementMembers(): SVGGraphicsElement[] {\n const members: SVGGraphicsElement[] = []\n if (this.#selectionElement.tagName === 'g'\n && this.#selectionElement.classList.contains(CELLDL_CLASS.Connection)) {\n const children = this.#selectionElement.children\n for (let index = 0; index < children.length; ++index) {\n // biome-ignore lint/style/noNonNullAssertion: index is in range\n members.push(children[index]! as SVGGraphicsElement)\n }\n } else {\n members.push(this.#selectionElement)\n }\n return members\n }\n\n #setSelectionClass(cls: string, enable: boolean) {\n if (enable) {\n for (const element of this.#selectionElementMembers()) {\n element.classList.add(cls)\n }\n this.#selectionClasses.add(cls)\n } else {\n for (const element of this.#selectionElementMembers()) {\n element.classList.remove(cls)\n }\n this.#selectionClasses.delete(cls)\n }\n }\n\n activate(active = true) {\n this.#setSelectionClass('active', active)\n }\n\n highlight(highlight = true) {\n this.#setSelectionClass('highlight', highlight)\n }\n\n pointerEvent(_eventType: string, _svgElement: SVGGraphicsElement, _svgCoords: PointLike): boolean {\n return false\n }\n\n select(selected = true) {\n this.#setSelectionClass('selected', selected)\n this.#selected = selected\n }\n\n #updateBounds() {\n const bounds = this.svgBounds(true)\n this.#size = new Point(bounds.right - bounds.left, bounds.bottom - bounds.top)\n if (this.#centroid) {\n this.#topLeft = this.#centroid.subtract(this.#size.scale(this.#centroidOffset))\n // Get bounds in local coordinates\n this.#bounds = new Bounds(\n this.#topLeft.x,\n this.#topLeft.y,\n this.#topLeft.x + this.#size.x,\n this.#topLeft.y + this.#size.y\n )\n } else {\n this.#topLeft = new Point(bounds.left, bounds.top)\n this.#bounds = bounds\n this.#centroid = this.#size.scale(this.#centroidOffset).add(this.#topLeft)\n }\n const topLeftOffset = this.#size.scale(this.#centroidOffset).scalarScale(-1)\n // Corner offsets are wrt centroid, anticlockwise from bottom right; see comment below in ``boundaryIntersections()``\n const connectionComponentGap: number = CONNECTION_WIDTH / 2 - SELECTION_STROKE_WIDTH / 2\n if (connectionComponentGap !== 0) {\n this.#cornerOffsets = [\n topLeftOffset.add(this.#size).add({ x: connectionComponentGap, y: connectionComponentGap }),\n topLeftOffset\n .add({ x: this.#size.x, y: 0 })\n .add({ x: connectionComponentGap, y: -connectionComponentGap }),\n topLeftOffset.add({ x: -connectionComponentGap, y: -connectionComponentGap }),\n topLeftOffset\n .add({ x: 0, y: this.#size.y })\n .add({ x: -connectionComponentGap, y: connectionComponentGap })\n ]\n } else {\n this.#cornerOffsets = [\n topLeftOffset.add(this.#size),\n topLeftOffset.add({ x: this.#size.x, y: 0 }),\n topLeftOffset,\n topLeftOffset.add({ x: 0, y: this.#size.y })\n ]\n }\n }\n\n #updatedSvgElement() {\n // Find the relative offset to the element's centroid\n this.#centroidOffset = new Point(0.5, 0.5)\n if (this.#svgElement.tagName === 'g') {\n const firstChild = this.#svgElement.children.item(0) as SVGGraphicsElement\n if (firstChild.dataset.centreX) {\n this.#centroidOffset = new Point(+firstChild.dataset.centreX, +firstChild.dataset.centreY!)\n }\n }\n // And set the elements bounds relative to its centroid\n this.#updateBounds()\n // Add a dummy rectangle to a group so that it can be activated and selected\n if (\n this.#svgElement.tagName === 'g' &&\n !this.#svgElement.classList.contains(CELLDL_CLASS.Connection) &&\n this.#svgElement.firstElementChild !== null\n ) {\n const bounds = (\n this.#svgElement.classList.contains(CELLDL_CLASS.Compartment)\n ? Bounds.fromSvg(this.#svgElement.firstChild as SVGGraphicsElement)\n : Bounds.fromSvg(this.#svgElement)\n ).expand(SELECTION_STROKE_WIDTH / 2)\n // Set height, width and offset of an <svg> child...\n if (this.#svgElement.firstElementChild.tagName === 'svg') {\n const svgChild = this.#svgElement.firstElementChild\n svgChild.setAttribute('x', `${bounds.topLeft.x}px`)\n svgChild.setAttribute('y', `${bounds.topLeft.y}px`)\n svgChild.setAttribute('width', `${bounds.width}px`)\n svgChild.setAttribute('height', `${bounds.height}px`)\n }\n const selectionRect = new FixedControlRect(bounds.asArray()) // versus control rect in RectangularObject\n const svg = selectionRect.svg({\n class: `selection-element parent-id editor-specific ${[...this.#selectionClasses.values()].join(' ')}`\n })\n this.#svgElement.insertAdjacentHTML('beforeend', svg)\n this.#selectionElement = this.#svgElement.lastChild as SVGGraphicsElement\n // Indicate a component is a conduit with a circular mark at its centre\n if (this.celldlObject.isConduit) {\n const centre = new Point(bounds.right - bounds.left, bounds.bottom - bounds.top)\n .scale(this.#centroidOffset)\n .add(new Point(bounds.left, bounds.top))\n const svg = svgCircle(centre, CONDUIT_SELECTION_RADIUS, {\n class: 'selection-element parent-id editor-specific conduit'\n })\n this.#svgElement.insertAdjacentHTML('beforeend', svg)\n }\n }\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport type { CellDLObject } from '../celldlObjects'\nimport { RestrictedPoint } from '../geometry'\nimport { ControlRect } from '../geometry/controls'\n\nimport { CellDLSVGElement } from '.'\n\n//==============================================================================\n\nexport class BoundedElement extends CellDLSVGElement {\n #controlRect: ControlRect\n\n constructor(object: CellDLObject, svgElement: SVGGraphicsElement) {\n super(object, svgElement)\n // local transform on the element\n this.#controlRect = new ControlRect(\n RestrictedPoint.fromPoint(this.topLeft),\n RestrictedPoint.fromPoint(this.topLeft.add(this.size)),\n this.centroidOffset\n )\n this.setCentroid(this.#controlRect.centroid.point)\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport type { PropertiesType } from '../common/types'\nimport { CELLDL, type NamedNode } from '../metadata'\nimport type { CellDLSVGElement } from '../SVGElements'\nimport { BoundedElement } from '../SVGElements/boundedelement'\nimport type { CellDLModel } from '../viewer/model'\n\n//==============================================================================\n\nexport enum CELLDL_CLASS {\n Annotation = 'celldl-Annotation',\n Component = 'celldl-Component',\n Connector = 'celldl-Connector',\n Connection = 'celldl-Connection',\n Conduit = 'celldl-Conduit',\n Compartment = 'celldl-Compartment',\n Interface = 'celldl-InterfacePort',\n Layer = 'celldl-Layer',\n UnconnectedPort = 'celldl-Unconnected',\n Unknown = ''\n}\n\n//==============================================================================\n\nexport class CellDLObject {\n static celldlClassName: CELLDL_CLASS = CELLDL_CLASS.Unknown\n static celldlType: string = 'Object'\n\n #celldlClassName: CELLDL_CLASS\n #celldlModel: CellDLModel\n #celldlSvgElement: CellDLSVGElement|undefined\n #celldlType: NamedNode\n\n #tooltip: string|undefined\n\n constructor(\n public readonly uri: NamedNode,\n readonly options: PropertiesType = {},\n celldlModel: CellDLModel\n ) {\n this.#celldlModel = celldlModel\n // @ts-expect-error: celldlClassName is a member of the object's constructor\n this.#celldlClassName = this.constructor.celldlClassName\n // @ts-expect-error: celldlType is a member of the object's constructor\n this.#celldlType = CELLDL.uri(this.constructor.celldlType)\n }\n\n toString(): string {\n return `${this.#celldlClassName} ${this.id}`\n }\n\n get celldlClassName() {\n return this.#celldlClassName\n }\n\n get celldlModel() {\n return this.#celldlModel\n }\n\n get celldlSvgElement() {\n return this.#celldlSvgElement\n }\n setCelldlSvgElement(celldlSvgElement: CellDLSVGElement) {\n this.#celldlSvgElement = celldlSvgElement\n }\n\n get hasEditGuides() {\n return false\n }\n\n get id(): string {\n return this.uri.id()\n }\n\n isA(rdfType: NamedNode) {\n return this.#celldlType.equals(rdfType) // || this.#metadataProperties.isA(rdfType)\n }\n\n get isAlignable() {\n return true\n }\n\n get isAnnotation() {\n return this.celldlClassName === CELLDL_CLASS.Annotation\n }\n\n get isComponent() {\n // Conduits are a component sub-class\n return this.celldlClassName === CELLDL_CLASS.Component || this.celldlClassName === CELLDL_CLASS.Conduit\n }\n\n get isConduit() {\n return this.celldlClassName === CELLDL_CLASS.Conduit\n }\n\n get isConnectable() {\n return false\n }\n\n get isConnection() {\n return this.celldlClassName === CELLDL_CLASS.Connection\n }\n\n get isCompartment() {\n return this.celldlClassName === CELLDL_CLASS.Compartment\n }\n\n get isInterface() {\n return this.celldlClassName === CELLDL_CLASS.Interface\n }\n\n get selected() {\n return this.#celldlSvgElement?.selected\n }\n\n get svgElement() {\n return this.#celldlSvgElement?.svgElement || null\n }\n\n get tooltip(): string|undefined {\n return this.#tooltip\n }\n set tooltip(tooltip: string) {\n this.#tooltip = tooltip\n }\n\n activate(active = true) {\n this.#celldlSvgElement?.activate(active)\n }\n\n highlight(highlight = true) {\n this.#celldlSvgElement?.highlight(highlight)\n }\n\n select(selected = true) {\n this.#celldlSvgElement?.select(selected)\n }\n\n assignSvgElement(_svgElement: SVGGraphicsElement) {\n }\n}\n\n//==============================================================================\n\nexport class CellDLMoveableObject extends CellDLObject {\n assignSvgElement(svgElement: SVGGraphicsElement) {\n new BoundedElement(this, svgElement)\n }\n}\n\n//==============================================================================\n\nexport class CellDLAnnotation extends CellDLMoveableObject {\n static celldlClassName = CELLDL_CLASS.Annotation\n static celldlType = 'Annotation'\n}\n\n//==============================================================================\n\nexport class CellDLConnectedObject extends CellDLMoveableObject {\n static celldlType = 'Connector'\n\n get isConnectable() {\n return true\n }\n}\n\n//==============================================================================\n\nexport class CellDLComponent extends CellDLConnectedObject {\n static celldlClassName = CELLDL_CLASS.Component\n static celldlType = 'Component'\n}\n\n//==============================================================================\n\nexport class CellDLConduit extends CellDLComponent {\n static readonly celldlClassName = CELLDL_CLASS.Conduit\n static celldlType = 'Conduit'\n}\n\n//==============================================================================\n\nexport class CellDLCompartment extends CellDLConnectedObject {\n static readonly celldlClassName = CELLDL_CLASS.Compartment\n static celldlType = 'Compartment'\n}\n\n//==============================================================================\n\nexport class CellDLConnection extends CellDLObject {\n static readonly celldlClassName = CELLDL_CLASS.Connection\n static celldlType = 'Connection'\n}\n\n//==============================================================================\n\nexport class CellDLInterface extends CellDLConnectedObject {\n static readonly celldlClassName = CELLDL_CLASS.Interface\n static celldlType = 'Interface'\n\n #externalConnections: CellDLConnection[] = []\n\n toString(): string {\n return `${super.toString()} External: ${this.#externalConnections.map((c) => c.id).join(', ')}`\n }\n}\n\n//==============================================================================\n\nexport class CellDLUnconnectedPort extends CellDLConnectedObject {\n static readonly celldlClassName = CELLDL_CLASS.UnconnectedPort\n static celldlType = 'UnconnectedPort'\n}\n\n//==============================================================================\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport {\n CellDLAnnotation,\n CellDLCompartment,\n CellDLComponent,\n CellDLConduit,\n type CellDLConnectedObject,\n CellDLConnection,\n CellDLInterface,\n type CellDLObject,\n CellDLUnconnectedPort\n} from '../celldlObjects'\n\nimport {\n CONNECTION_COLOUR,\n OLD_CONNECTION_COLOUR\n} from '../common/styling'\n\nimport type { Constructor } from '../common/types'\n\nimport { lengthToPixels } from '../geometry/units'\n\nimport * as $rdf from '../metadata'\nimport {\n CELLDL,\n type NamedNode,\n type MetadataPropertyValue\n} from '../metadata'\n\nimport type { CellDLViewer } from '.'\n\nimport type { Annotations, Annotation, ModelViewerOptions, ViewerEvent } from '../index'\n\n//==============================================================================\n//==============================================================================\n\nconst CELLDL_METADATA_ID = 'celldl-rdf-metadata'\n\nconst VIEWER_DIAGRAM_URI = 'file://tmp/viewing.celldl'\n\n//==============================================================================\n\nexport class CellDLModel {\n #svgDiagram: SVGSVGElement|null = null\n\n #kb = new $rdf.RdfStore()\n #celldlViewer: CellDLViewer\n\n #documentNode: NamedNode\n #documentNS: $rdf.Namespace\n\n #annotations: Map<string, Annotation> = new Map()\n #objects: Map<string, CellDLObject> = new Map()\n\n constructor(celldlViewer: CellDLViewer, celldlData: string='', annotations: Annotations={},\n options: ModelViewerOptions|undefined=undefined) {\n this.#celldlViewer = celldlViewer\n this.#documentNode = $rdf.namedNode(VIEWER_DIAGRAM_URI)\n this.#documentNS = new $rdf.Namespace(`${VIEWER_DIAGRAM_URI}#`)\n if (celldlData !== '') {\n this.#loadSvgDiagram(celldlData)\n this.#loadMetadata()\n const tooltipField = options ? options.tooltip : undefined\n for (const object of this.#objects.values()) {\n if (object.id in annotations) {\n // @ts-expect-error: objectId is in annotations\n const annotation: Annotation = annotations[object.id]\n this.#annotations.set(object.id, annotation)\n if (tooltipField && tooltipField in annotation) {\n object.tooltip = String(annotation[tooltipField])\n }\n }\n }\n }\n }\n\n finishSetup() {\n // Called when the loaded diagram has been drawn as SVG\n this.#loadComponents()\n this.#loadInterfaces()\n this.#loadConduits()\n this.#loadConnections()\n this.#loadAnnotations()\n this.#loadAnnotatedSVGFeatures()\n }\n\n async viewModel() {\n if (this.#svgDiagram) {\n await this.#celldlViewer.viewDiagram(this)\n } else {\n this.#celldlViewer.closeDiagram()\n }\n }\n\n viewerEvent(type: string, object: CellDLObject|undefined=undefined) {\n const eventDetail: ViewerEvent = {\n type: type\n }\n if (object) {\n eventDetail.component = {\n id: object.id\n }\n if (this.#annotations.has(object.id)) {\n eventDetail.component.annotation = this.#annotations.get(object.id)\n }\n }\n document.dispatchEvent(\n new CustomEvent('viewer-event', {\n detail: eventDetail\n })\n )\n }\n\n get rdfStore() {\n return this.#kb\n }\n\n get svgDiagram() {\n return this.#svgDiagram\n }\n\n get uri(): string {\n return this.#documentNode.value\n }\n\n makeUri(id: string): NamedNode {\n return this.#documentNS.uri(id)\n }\n\n objectById(id: string): CellDLObject | null {\n return this.#objects.get(id) || null\n }\n\n #loadSvgDiagram(svgData: string) {\n const parser = new DOMParser()\n const svgDocument = parser.parseFromString(svgData, 'image/svg+xml')\n const svgDiagram = <SVGSVGElement>svgDocument.firstElementChild\n if (svgDiagram.hasAttribute('width') && svgDiagram.hasAttribute('height')) {\n const width = lengthToPixels(<string>svgDiagram.getAttribute('width'))\n const height = lengthToPixels(<string>svgDiagram.getAttribute('height'))\n if (width !== null && height !== null) {\n svgDiagram.attributes.removeNamedItem('width')\n svgDiagram.attributes.removeNamedItem('height')\n if (!svgDiagram.hasAttribute('viewBox')) {\n svgDiagram.setAttribute('viewBox', `0 0 ${width} ${height}`)\n }\n }\n }\n // Tweak the colour of <path> elements in existing CellDL files so they show\n // better in dark mode.\n const strokedPaths = svgDiagram.querySelectorAll(`path[stroke=\"${OLD_CONNECTION_COLOUR}\"]`)\n for (let index = 0; index < strokedPaths.length; ++index) {\n // @ts-expect-error: `index` is in range\n const path: HTMLElement = strokedPaths[index]\n path.setAttribute('stroke', CONNECTION_COLOUR)\n }\n this.#svgDiagram = svgDiagram\n }\n\n #loadMetadata() {\n const metadataElement = this.#svgDiagram?.getElementById(CELLDL_METADATA_ID) as SVGMetadataElement\n if (\n metadataElement &&\n (!('contentType' in metadataElement.dataset) || metadataElement.dataset.contentType === $rdf.TurtleContentType)\n ) {\n const childNodes = metadataElement.childNodes\n for (let index = 0; index < childNodes.length; ++index) {\n // biome-ignore lint/style/noNonNullAssertion: index is in range\n const childNode = childNodes[index]!\n if (childNode.nodeName === '#cdata-section') {\n this.#kb.load(this.#documentNode.uri, (<CDATASection>childNode).data, $rdf.TurtleContentType)\n break\n }\n }\n }\n }\n\n #setObjectSvgElement(celldlObject: CellDLObject): boolean {\n const svgElement = <SVGGraphicsElement>this.#svgDiagram?.getElementById(celldlObject.id)\n if (svgElement) {\n celldlObject.assignSvgElement(svgElement)\n return true\n }\n console.error(`Missing SVG element for ${celldlObject.id}`)\n return false\n }\n\n #celldlObjectFromRdf<T extends CellDLObject>(CellDLClass: Constructor<T>, subject: $rdf.SubjectType): T {\n const metadata = this.#kb.metadataPropertiesForSubject(subject)\n const celldlObject = new CellDLClass(subject, metadata, this)\n return celldlObject\n }\n\n #subjectsOfType(parentType: NamedNode): [$rdf.SubjectType, NamedNode][] {\n return this.#kb.subjectsOfType(parentType).filter((st) => st[0].value.startsWith(this.#documentNode.value))\n }\n\n #addMoveableObject(object: CellDLObject) {\n this.#objects.set(object.id, object)\n }\n\n #loadObject<T extends CellDLObject>(type: NamedNode, CellDLClass: Constructor<T>) {\n for (const subjectType of this.#subjectsOfType(type)) {\n if (subjectType[1].equals(type)) {\n const object = this.#celldlObjectFromRdf(CellDLClass, subjectType[0])\n if (this.#setObjectSvgElement(object)) {\n this.#addMoveableObject(object)\n }\n }\n }\n }\n\n #loadAnnotations() {\n this.#loadObject(CELLDL.uri('Annotation'), CellDLAnnotation)\n }\n\n #loadComponents() {\n this.#loadObject(CELLDL.uri('Component'), CellDLComponent)\n this.#loadObject(CELLDL.uri('UnconnectedPort'), CellDLUnconnectedPort)\n }\n\n #loadInterfaces() {\n this.#loadObject(CELLDL.uri('Connector'), CellDLInterface)\n }\n\n #loadConduits() {\n this.#loadObject(CELLDL.uri('Conduit'), CellDLConduit)\n }\n\n getConnector(connectorNode: MetadataPropertyValue | null): CellDLConnectedObject | null {\n // @ts-expect-error: `value` property exists on a NamedNode\n if (connectorNode && $rdf.isNamedNode(connectorNode) && connectorNode.value.startsWith(this.#documentNode.value)) {\n const connectorId = (<NamedNode>connectorNode).id()\n const connector = this.#objects.get(connectorId) as CellDLConnectedObject\n return connector?.isConnectable ? connector : null\n }\n return null\n }\n\n #loadConnections() {\n this.#loadObject(CELLDL.uri('Connection'), CellDLConnection)\n }\n\n #loadAnnotatedSVGFeatures() {\n // @ts-expect-error: we have an SVG diagram\n const featuresWithId = this.#svgDiagram.querySelectorAll(`*[id]`)\n for (let index = 0; index < featuresWithId.length; ++index) {\n // @ts-expect-error: `index` is in range\n const feature: SVGGraphicsElement = featuresWithId[index]\n if (!this.#objects.has(feature.id)) {\n // This must match CELLDL_STYLE_CLASS and CELLDL_CLASS_MAP in the Editor's code.\n const CellDLClass = feature.classList.contains('celldl-Annotation') ? CellDLAnnotation\n : feature.classList.contains('celldl-Compartment') ? CellDLCompartment\n : feature.classList.contains('celldl-Component') ? CellDLComponent\n : feature.classList.contains('celldl-Connection') ? CellDLConnection\n : feature.classList.contains('celldl-InterfacePort') ? CellDLInterface\n : feature.classList.contains('celldl-Unconnected') ? CellDLUnconnectedPort\n : null\n if (CellDLClass !== null) {\n const object = new CellDLClass(this.makeUri(feature.id), {}, this)\n object.assignSvgElement(feature)\n this.#addMoveableObject(object)\n }\n }\n }\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Model Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\n\nimport { Point } from '../common/points'\nimport { getViewbox } from '../common/svgUtils'\nimport type { Extent } from '../geometry'\n\n//==============================================================================\n\nexport default class PanZoom {\n #panning: boolean = false\n #pointerDownPosition: Point = new Point()\n\n #svgDiagram: SVGSVGElement | null = null\n #containerId: string\n #containerOrigin: Point = new Point()\n #containerSize: Point = new Point()\n #resizeObserver: ResizeObserver\n #validContainer: boolean = true\n\n #minScale: number = 0.125\n #scale: number = 1\n #maxScale: number = 32\n #step: number = 0.05\n\n constructor(container: HTMLElement) {\n // options\n container.addEventListener('wheel', this.#wheelEvent.bind(this), { passive: true })\n this.#containerId = container.id\n this.#containerOrigin = new Point(\n container.offsetLeft + container.clientLeft,\n container.offsetTop + container.clientTop\n )\n if (container.clientWidth === 0 || container.clientHeight === 0) {\n console.error('Container for viewer has no size...')\n this.#validContainer = false\n }\n this.#containerSize = new Point(container.clientWidth, container.clientHeight)\n this.#resizeObserver = new ResizeObserver(this.#resizeObservation.bind(this))\n this.#resizeObserver.observe(container)\n }\n\n get panning() {\n return this.#panning\n }\n\n get scale() {\n return this.#scale\n }\n\n #currentViewbox(): Extent {\n // @ts-expect-error: we have an SVG diagram\n return getViewbox(this.#svgDiagram)\n }\n\n #setViewbox(viewbox: Extent) {\n // @ts-expect-error: we have an SVG diagram\n this.#svgDiagram.setAttribute('viewBox', viewbox.map((n) => String(n)).join(' '))\n }\n\n enable(svgDiagram: SVGSVGElement) {\n if (!this.#validContainer) {\n return\n }\n // Scale large diagrams down to fit container\n let viewbox = getViewbox(svgDiagram)\n if (viewbox[2] * this.#containerSize.y >= viewbox[3] * this.#containerSize.x) {\n // Too wide, so scale width\n this.#scale = this.#containerSize.x / viewbox[2]\n viewbox[1] -= (this.#containerSize.y / this.#scale - viewbox[3]) / 2\n viewbox[3] = this.#containerSize.y / this.#scale\n } else {\n // Too high, so scale height\n this.#scale = this.#containerSize.y / viewbox[3]\n viewbox[0] -= (this.#containerSize.x / this.#scale - viewbox[2]) / 2\n viewbox[2] = this.#containerSize.x / this.#scale\n }\n if (this.#minScale > this.#scale) {\n this.#minScale = this.#scale\n }\n\n // Otherwise centre small diagrams that don't require scaling down\n if (this.#scale >= 1) {\n this.#scale = 1\n viewbox = getViewbox(svgDiagram)\n const delta = this.#containerSize.subtract({ x: viewbox[2], y: viewbox[3] })\n viewbox[0] -= delta.x / 2\n viewbox[1] -= delta.y / 2\n viewbox[2] = this.#containerSize.x\n viewbox[3] = this.#containerSize.y\n }\n\n this.#svgDiagram = svgDiagram\n this.#setViewbox(viewbox)\n this.#panning = false\n }\n\n disable() {\n this.#svgDiagram = null\n this.#panning = false\n this.#scale = 1.0\n }\n\n pointerDown(event: PointerEvent) {\n this.#panning = true\n this.#pointerDownPosition = Point.fromPoint(event)\n }\n\n pointerMove(event: PointerEvent): boolean {\n if (this.#svgDiagram && this.#panning) {\n const delta = this.#pointerDownPosition.subtract(event).scalarScale(1.0 / this.#scale)\n if (!delta.isZero()) {\n const viewbox = this.#currentViewbox()\n viewbox[0] += delta.x\n viewbox[1] += delta.y\n this.#setViewbox(viewbox)\n this.#pointerDownPosition = Point.fromPoint(event)\n return true\n }\n }\n return false\n }\n\n pointerUp(_event: PointerEvent) {\n this.#panning = false\n }\n\n #resizeObservation(entries: ResizeObserverEntry[]) {\n if (this.#svgDiagram) {\n for (const entry of entries) {\n if (entry.target.id === this.#containerId) {\n const containerSize = new Point(entry.contentRect.width, entry.contentRect.height)\n const viewbox = this.#currentViewbox()\n const delta = containerSize.subtract(this.#containerSize)\n if (Math.abs(delta.x * viewbox[3]) >= Math.abs(delta.y * viewbox[2])) {\n this.#scale = containerSize.x / viewbox[2]\n viewbox[1] -= (this.#containerSize.y / this.#scale - viewbox[3]) / 2\n viewbox[3] = containerSize.y / this.#scale\n } else {\n this.#scale = containerSize.y / viewbox[3]\n viewbox[0] -= (this.#containerSize.x / this.#scale - viewbox[2]) / 2\n viewbox[2] = containerSize.x / this.#scale\n }\n this.#containerSize = containerSize\n this.#setViewbox(viewbox)\n }\n }\n }\n }\n\n #wheelEvent(event: WheelEvent) {\n if (this.#svgDiagram) {\n // Normalise in case shift modifier is used on macOS\n const delta = event.deltaY === 0 && event.deltaX ? event.deltaX : event.deltaY\n const wheel = delta < 0 ? 1 : -1\n const toScale = this.#scale * Math.exp((wheel * this.#step) / 3)\n this.#scale = Math.min(Math.max(toScale, this.#minScale), this.#maxScale)\n const viewSize = this.#containerSize.scalarScale(1.0 / this.#scale)\n const viewbox = this.#currentViewbox()\n viewbox[0] +=\n ((viewbox[2] - viewSize.x) * (event.clientX - this.#containerOrigin.x)) / this.#containerSize.x\n viewbox[1] +=\n ((viewbox[3] - viewSize.y) * (event.clientY - this.#containerOrigin.y)) / this.#containerSize.y\n viewbox[2] = viewSize.x\n viewbox[3] = viewSize.y\n this.#setViewbox(viewbox)\n }\n }\n}\n\n//==============================================================================\n","/******************************************************************************\n\nCellDL Viewer\n\nCopyright (c) 2022 - 2025 David Brooks\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n******************************************************************************/\n\nimport * as vue from 'vue'\nimport { useTippy } from \"vue-tippy\"\n\n//==============================================================================\n\nimport '../assets/svgContent.css'\n\nimport type { CellDLObject } from '../celldlObjects'\n\nimport type { CellDLModel } from './model'\n\n//==============================================================================\n\nimport PanZoom from './panzoom'\n\n//==============================================================================\n\nconst MAX_POINTER_CLICK_TIME = 200 // milliseconds\n\n//==============================================================================\n\nexport function notifyChanges() {\n document.dispatchEvent(new CustomEvent('file-edited'))\n}\n\n//==============================================================================\n\nexport function getElementId(element: SVGGraphicsElement): string {\n if (element.dataset.parentId) {\n return element.dataset.parentId\n } else if (element.classList.contains('parent-id')) {\n return element.parentElement?.id || ''\n }\n while (element.tagName === 'text') {\n const prevElement = element.previousElementSibling\n if (prevElement) {\n element = prevElement as SVGGraphicsElement\n } else {\n break\n }\n }\n return element.id\n}\n\n//==============================================================================\n\nconst SVG_PANEL_ID = 'svg-panel'\n\nexport class CellDLViewer {\n static instance: CellDLViewer | null = null\n\n #container: HTMLElement | null = null\n #celldlModel: CellDLModel | null = null\n #svgDiagram: SVGSVGElement | null = null\n\n #panning: boolean = false\n #panzoom: PanZoom | null = null\n #pointerMoved: boolean = false\n\n #activeObject: CellDLObject | null = null\n #selectedObject: CellDLObject | null = null\n\n #pointerDownTime: number = 0\n\n #tooltip: vue.Ref|undefined\n #tooltipElement: HTMLElement|undefined\n #tooltipStyle: string = ''\n\n constructor() {\n CellDLViewer.instance = this\n }\n\n mount(svgContainer: HTMLElement) {\n this.#container = svgContainer\n\n // Create a panzoom handler\n this.#panzoom = new PanZoom(this.#container)\n\n // Create a tooltip\n\n const { tippy } = useTippy(this.#container, {\n content: '',\n animation: 'none',\n duration: [0, 0],\n showOnCreate: false,\n hideOnClick: false,\n trigger: 'manual',\n arrow: true,\n followCursor: true\n })\n if (tippy.value) {\n this.#tooltip = tippy\n this.#tooltipElement = this.#tooltip.value.popper\n }\n }\n\n #addPointerEventHandlers() {\n if (this.#container) {\n this.#container.addEventListener('click', this.#pointerClickEvent.bind(this))\n\n this.#container.addEventListener('pointerover', this.#pointerOverEvent.bind(this))\n this.#container.addEventListener('pointerout', this.#pointerOutEvent.bind(this))\n\n this.#container.addEventListener('pointerdown', this.#pointerDownEvent.bind(this))\n this.#container.addEventListener('pointermove', this.#pointerMoveEvent.bind(this))\n this.#container.addEventListener('pointerup', this.#pointerUpEvent.bind(this))\n }\n }\n\n #removePointerEventHandlers() {\n if (this.#container) {\n this.#container.removeEventListener('click', this.#pointerClickEvent.bind(this))\n\n this.#container.removeEventListener('pointerover', this.#pointerOverEvent.bind(this))\n this.#container.removeEventListener('pointerout', this.#pointerOutEvent.bind(this))\n\n this.#container.removeEventListener('pointerdown', this.#pointerDownEvent.bind(this))\n this.#container.removeEventListener('pointermove', this.#pointerMoveEvent.bind(this))\n this.#container.removeEventListener('pointerup', this.#pointerUpEvent.bind(this))\n }\n }\n\n get celldlModel() {\n return this.#celldlModel\n }\n\n get windowSize(): [number, number] {\n if (this.#container) {\n return [this.#container.clientWidth, this.#container.clientHeight]\n }\n return [0, 0]\n }\n\n async viewDiagram(celldlModel: CellDLModel) {\n if (this.#celldlModel !== null) {\n this.closeDiagram(true)\n } else {\n this.#addPointerEventHandlers()\n }\n this.#celldlModel = celldlModel\n this.#svgDiagram = celldlModel.svgDiagram\n\n // Show the model's diagram in the viewer's window\n if (this.#container) {\n // @ts-expect-error: we have a SVG diagram\n this.#container.appendChild(this.#svgDiagram)\n }\n\n // Allow for the diagram to render\n await vue.nextTick()\n\n // Finish setting up the model as we now have SVG elements\n celldlModel.finishSetup()\n\n // Enable pan/zoom and toolBars\n // @ts-expect-error: we have a SVG diagram\n this.#panzoom?.enable(this.#svgDiagram)\n\n // Set initial state\n this.#activeObject = null\n this.#pointerMoved = false\n this.#selectedObject = null\n }\n\n closeDiagram(newDiagram: boolean=false) {\n if (this.#celldlModel !== null) {\n if (!newDiagram) {\n this.#removePointerEventHandlers()\n }\n this.#panzoom?.disable()\n if (this.#container) {\n this.#container.removeChild(this.#svgDiagram as Node)\n }\n this.#svgDiagram = null\n this.#celldlModel = null\n }\n }\n\n resetObjectStates() {\n this.#unsetSelectedObject()\n this.#unsetActiveObject()\n }\n\n #setDefaultCursor() {\n this.#svgDiagram?.style.removeProperty('cursor')\n if (this.#container) {\n this.#container.style.setProperty('cursor', 'default')\n }\n }\n\n #hideTooltip() {\n if (this.#tooltip) {\n this.#tooltip.value.hide()\n }\n }\n\n #showTooltip(msg: string, style: string = '') {\n if (msg === '') {\n this.#hideTooltip()\n } else if (this.#tooltip) {\n this.#tooltip.value.setContent(msg)\n this.#tooltip.value.show()\n if (this.#tooltipElement) {\n if (this.#tooltipStyle !== '') {\n this.#tooltipElement.classList.remove(this.#tooltipStyle)\n this.#tooltipStyle = ''\n }\n if (style !== '') {\n const tooltipStyle = `tooltip-${style}`\n this.#tooltipElement.classList.add(tooltipStyle)\n this.#tooltipStyle = tooltipStyle\n }\n }\n }\n }\n\n #emitModelEvent(type: string, object: CellDLObject|undefined=undefined) {\n if (this.#celldlModel) {\n this.#celldlModel.viewerEvent(type, object)\n }\n }\n\n #activateObject(object: CellDLObject, active: boolean) {\n object.activate(active)\n }\n\n #setActiveObject(activeObject: CellDLObject | null) {\n if (activeObject && this.#activeObject !== activeObject) {\n this.#activateObject(activeObject, true)\n this.#activeObject = activeObject\n if (activeObject.tooltip) {\n this.#showTooltip(activeObject.tooltip, 'info')\n }\n this.#emitModelEvent('active', activeObject)\n }\n }\n\n #unsetActiveObject() {\n if (this.#activeObject) {\n this.#activateObject(this.#activeObject, false)\n this.#activeObject = null\n this.#emitModelEvent('unactive')\n }\n }\n\n #setSelectedObject(selectedObject: CellDLObject) {\n this.#unsetSelectedObject() // This will depend upon multi-selection\n if (selectedObject !== null) {\n selectedObject.select(true)\n this.#selectedObject = selectedObject\n this.#emitModelEvent('select', selectedObject)\n }\n }\n\n #unsetSelectedObject() {\n if (this.#selectedObject) {\n this.#emitModelEvent('unselect', this.#selectedObject)\n this.#selectedObject.select(false)\n this.#selectedObject = null\n }\n }\n\n #pointerClickEvent(event: MouseEvent) {\n const element = event.target as SVGGraphicsElement\n if (\n this.#celldlModel === null ||\n !this.#svgDiagram?.contains(element) ||\n // clickTolerance = 1px ? to set pointerMoved?\n (this.#pointerMoved && Date.now() - this.#pointerDownTime > MAX_POINTER_CLICK_TIME)\n ) {\n return\n }\n const clickedObject = this.#celldlModel.objectById(getElementId(element))\n this.#selectionClickEvent(event, element, clickedObject)\n }\n\n #selectionClickEvent(_event: MouseEvent, _element: SVGGraphicsElement, clickedObject: CellDLObject|null) {\n let deselected = false\n if (this.#selectedObject !== null) {\n // Deselect\n deselected = clickedObject === this.#selectedObject\n this.#unsetSelectedObject()\n }\n if (!deselected && clickedObject && clickedObject === this.#activeObject) {\n // Select when active object is clicked\n this.#setSelectedObject(clickedObject)\n }\n }\n\n #notDiagramElement(element: SVGGraphicsElement) {\n return (\n element === this.#svgDiagram ||\n element.id === SVG_PANEL_ID ||\n !this.#svgDiagram?.contains(element)\n )\n }\n\n #pointerOverEvent(event: PointerEvent) {\n if (this.#celldlModel === null) {\n return\n }\n const element = event.target as SVGGraphicsElement\n const currentObject = this.#celldlModel.objectById(getElementId(element))\n\n if (this.#notDiagramElement(element)) {\n this.#hideTooltip()\n if (this.#activeObject && currentObject !== this.#activeObject) {\n this.#unsetActiveObject()\n }\n return\n }\n\n if (this.#activeObject && currentObject !== this.#activeObject) {\n this.#unsetActiveObject()\n }\n if (currentObject) {\n this.#setActiveObject(currentObject)\n }\n }\n\n #pointerOutEvent(event: PointerEvent) {\n const element = event.target as SVGGraphicsElement\n if (element === this.#svgDiagram || !this.#svgDiagram?.contains(element)) {\n if (this.#activeObject) {\n this.#unsetActiveObject()\n }\n }\n }\n\n #pointerDownEvent(event: PointerEvent) {\n this.#pointerMoved = false\n this.#pointerDownTime = Date.now()\n this.#svgDiagram?.style.removeProperty('cursor')\n this.#container?.style.setProperty('cursor', 'grab')\n // @ts-expect-error: `panzoom` is defined\n this.#panzoom.pointerDown(event)\n this.#panning = true\n }\n\n #pointerMoveEvent(event: PointerEvent) {\n if (this.#panning) {\n // @ts-expect-error: `panzoom` is defined\n this.#pointerMoved = this.#panzoom.pointerMove(event) || this.#pointerMoved\n return\n }\n this.#pointerMoved = true\n }\n\n #pointerUpEvent(event: PointerEvent) {\n if (this.#celldlModel === null) {\n return\n }\n if (this.#panning) {\n // @ts-expect-error: `panzoom` is defined\n this.#panzoom.pointerUp(event)\n this.#panning = false\n this.#setDefaultCursor()\n return\n }\n }\n}\n\n//==============================================================================\n//==============================================================================\n","<template>\n <div ref=\"svgContent\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport * as vue from 'vue'\nimport * as vueusecore from '@vueuse/core'\n\nimport vueTippy from 'vue-tippy'\nimport 'tippy.js/dist/tippy.css'\n\n//==============================================================================\n\nimport { CellDLModel } from '../viewer/model'\nimport { CellDLViewer } from '../viewer'\n\n//==============================================================================\n\nimport type { CellDLViewerProps, ViewerEvent } from '../index'\n\nconst props = defineProps<CellDLViewerProps>()\n\n//==============================================================================\n//==============================================================================\n\n// Get the current Vue app instance to use some PrimeVue plugins and VueTippy.\n\nconst crtInstance = vue.getCurrentInstance();\n\nif (crtInstance) {\n const app = crtInstance.appContext.app;\n\n app.use(vueTippy)\n}\n\n//==============================================================================\n//==============================================================================\n\nconst svgContent = vue.ref(null)\n\nlet celldlModel: CellDLModel|undefined\n\nconst celldlViewer: CellDLViewer = new CellDLViewer()\n\n//==============================================================================\n\nconst emit = defineEmits<{\n 'error': [msg: string]\n 'event': [detail: ViewerEvent]\n}>()\n\n//==============================================================================\n\nconst showDiagram = async () => {\n if (props.celldlData === '') {\n celldlModel = new CellDLModel(celldlViewer)\n await celldlModel.viewModel()\n } else {\n try {\n celldlModel = new CellDLModel(celldlViewer, props.celldlData, props.annotations, props.options)\n await celldlModel.viewModel()\n } catch(err) {\n emit('error', `Invalid CellDL file... (${err})`)\n }\n }\n}\n\n//==============================================================================\n\nvue.watch(\n () => props.celldlData,\n async () => {\n await showDiagram()\n }\n)\n\n//==============================================================================\n\nvue.onMounted(async () => {\n if (svgContent.value) {\n celldlViewer.mount(svgContent.value)\n await showDiagram()\n }\n})\n\n//==============================================================================\n\nvueusecore.useEventListener(document, 'viewer-event', (event: CustomEvent) => {\n emit('event', event.detail)\n})\n\n//==============================================================================\n//==============================================================================\n</script>\n"],"names":["isClient","toString","isObject","val","toArray","value","watchImmediate","source","cb","options","watch","defaultWindow","unrefElement","elRef","_$el","plain","toValue","useEventListener","args","register","el","event","listener","firstParamTargets","computed","test","e","_firstParamTargets$va","_firstParamTargets$va2","unref","raw_targets","raw_events","raw_listeners","raw_options","_","onCleanup","optionsClone","cleanups","fn","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","element","getWindow","node","ownerDocument","isElement","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","state","name","style","attributes","effect","_ref2","initialStyles","styleProperties","property","attribute","applyStyles$1","getBasePlacement","max","min","round","getBoundingClientRect","includeScale","rect","scaleX","scaleY","offsetHeight","offsetWidth","getLayoutRect","clientRect","width","height","contains","parent","child","rootNode","next","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","min$1","max$1","withinMaxClamp","v","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","keys","hashMap","key","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","len","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","offset","axisProp","effect$1","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","x","y","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","position","gpuAcceleration","adaptive","roundOffsets","isFixed","_ref3","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_Object$assign","computeStyles","_ref4","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","effect$2","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","hash$1","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","html","visualViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","list","isBody","target","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","placements$1","allowedPlacements","overflows","a","b","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","_i","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","data","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","order","modifiers","map","visited","result","modifier","sort","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","debounce","pending","resolve","mergeByName","merged","current","existing","DEFAULT_OPTIONS","areValidElements","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","m","runModifierEffects","_state$elements","index","_state$orderedModifie","_state$orderedModifie2","_ref3$options","cleanupFn","noopFn","createPopper","BOX_CLASS","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","TIPPY_DEFAULT_APPEND_TO","getValueAtIndexOrReturn","defaultValue","isType","type","str","invokeWithArgsOrReturn","debounce$1","ms","timeout","arg","removeProperties","obj","clone","splitBySpaces","normalizeToArray","pushIfUnique","arr","unique","item","getBasePlacement$1","arrayFrom","removeUndefinedProps","div","isElement$1","isNodeList","isMouseEvent","isReferenceElement","getArrayOfElements","setTransitionDuration","els","setVisibilityState","getOwnerDocument","elementOrElements","_normalizeToArray","isCursorOutsideInteractiveBorder","popperTreeData","clientX","clientY","popperState","props","interactiveBorder","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","updateTransitionEndListener","box","action","method","actualContains","_target$getRootNode","currentInput","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","now","onWindowBlur","activeElement","bindGlobalEventListeners","isBrowser","isIE11","pluginProps","renderProps","defaultProps","defaultKeys","setDefaultProps","partialProps","getExtendedPassedProps","passedProps","plugins","plugin","_name","getDataAttributeProps","propKeys","valueAsString","evaluateProps","out","innerHTML","dangerouslySetInnerHTML","createArrowElement","setContent","content","getChildren","boxChildren","render","onUpdate","prevProps","nextProps","_getChildren","idCounter","mouseMoveListeners","mountedInstances","createTippy","showTimeout","hideTimeout","scheduleHideAnimationFrame","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","lastTriggerEvent","currentTransitionEndListener","onFirstUpdate","listeners","debouncedOnMouseMove","onMouseMove","currentTarget","id","popperInstance","clearDelayTimeouts","setProps","show","hideWithInteractivity","enable","disable","unmount","destroy","_props$render","pluginsHooks","hasAriaExpanded","addListeners","handleAriaExpandedAttribute","handleStyles","invokeHook","scheduleShow","getDocument","getNormalizedTouchSettings","touch","getIsCustomTouchBehavior","getIsDefaultRenderFn","_instance$props$rende","getCurrentTarget","getDefaultTemplateChildren","getDelay","isShow","fromHide","hook","shouldInvokePropsHook","pluginHooks","_instance$props","handleAriaContentAttribute","aria","attr","nodes","currentValue","nextValue","cleanupInteractiveMouseListeners","onDocumentPress","actualTarget","removeDocumentPress","onTouchMove","onTouchStart","addDocumentPress","doc","onTransitionedOut","duration","callback","onTransitionEnd","onTransitionedIn","on","eventType","handler","onTrigger","onMouseLeave","onBlurOrFocusOut","removeListeners","_lastTriggerEvent","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","getNestedPopperTree","_instance$popperInsta","shouldBail","createPopperInstance","destroyPopperInstance","_instance$props2","popperOptions","getReferenceClientRect","moveTransition","computedReference","tippyModifier","_getDefaultTemplateCh","mount","appendTo","parentNode","delay","_getNormalizedTouchSe","touchValue","touchDelay","nestedPopper","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","_getDefaultTemplateCh2","_instance$popperInsta2","_getDefaultTemplateCh3","_box","_content","isAlreadyHidden","_getDefaultTemplateCh4","tippy","targets","optionalProps","elements","instances","applyStylesModifier","createSingleton","tippyInstances","_optionalProps$popper","individualInstances","references","triggerTargets","overrides","interceptSetPropsCleanups","shownOnCreate","setTriggerTargets","setReferences","enableInstances","isEnabled","interceptSetProps","singleton","originalSetProps","prepareInstance","overrideProps","prop","_references$index","originalShow","ref","first","last","nextInstances","animateFill","backdrop","createBackdropElement","transitionDuration","mouseCoords","activeInstances","storeMouseCoords","addMouseCoordsListener","removeMouseCoordsListener","followCursor","isInternalUpdate","wasFocusEvent","isUnmounted","getIsInitialBehavior","addListener","removeListener","unsetGetReferenceClientRect","isCursorOverReference","relativeX","relativeY","create","getProps","_props$popperOptions","inlinePositioning","cursorRectIndex","triedPlacements","_getReferenceClientRect","getInlineBoundingClientRect","setInternalProps","addModifier","cursorRect","currentBasePlacement","boundingRect","clientRects","firstRect","lastRect","isTop","minLeft","maxRight","measureRects","_top","_bottom","_left","_right","_width","_height","sticky","getReference","shouldCheck","prevRefRect","prevPopRect","updatePosition","currentRefRect","currentPopRect","areRectsDifferent","rectA","rectB","isComponentInstance","useTippy","opts","settings","vm","getCurrentInstance","headlessApp","shallowRef","container","getContainer","getContent","newContent","unwrappedContent","isRef","isVNode","createApp","h","isReactive","refresh","refreshContent","_a","response","onMounted","onUnmounted","useSingleton","_b","TippyComponent","defineComponent","slots","emit","expose","elem","findParentHelper","contentElem","mounted","getOptions","contentSlot","nextTick","exposed","reactive","contentTag","findParentHelperNode","slot","trigger","tag","booleanProps","TippySingleton","directive","binding","vnode","withArrow","app","setDefaultProps$1","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","num","encodeChunk","uint8","output","extraBytes","parts","maxChunkLength","len2","ieee754","buffer","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","c","rt","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","numberIsNaN","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","boundsError","lo","hi","checkInt","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","range","input","msg","received","addNumericalSeparator","checkBounds","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","BufferBigIntNotDefined","RDF","XSD","SWAP","namespaces","xsd","escapeSequence","escapeReplacements","illegalIriChars","lineModeRegExps","invalidRegExp","N3Lexer","inputFinished","currentLineLength","whiteSpaceMatch","comment","emitToken","line","firstChar","prefix","match","matchLength","inconclusive","reportSyntaxError","token","self","invalid","replaced","sequence","unicode4","unicode8","escapedChar","charCode","opening","openingLength","closingPos","backslashCount","raw","lines","issue","err","tokens","error","t","rdf","DEFAULTGRAPH","_blankNodeCounter","DataFactory","namedNode","blankNode","variable","literal","defaultGraph","quad","fromTerm","fromQuad","Term","other","Literal","atPos","NamedNode","dtPos","char","DefaultGraph","termFromId","factory","nested","endPos","termToId","term","subject","predicate","object","graph","iri","BlankNode","languageOrDataType","datatype","Variable","Quad","inQuad","blankNodePrefix","N3Parser","initDataFactory","format","isTurtle","isTriG","isNTriples","isNQuads","isN3","isLineMode","baseIRI","fragmentPos","n3Mode","context","quantifier","empty","previousList","stack","listItem","completed","inversePredicate","prefixNode","entity","afterPath","contextStack","message","noop","pathStart","segmentStart","quadCallback","prefixCallback","onQuad","onPrefix","onComment","quads","processNextToken","parser","N3DataFactory","isNamedNode","isBlankNode","isLiteral","isVariable","isQuad","isDefaultGraph","inDefaultGraph","prefixes","defaultPrefixes","processPrefix","cache","local","escapeRegex","regex","BASE_UNSUPPORTED","SUFFIX_SUPPORTED","CURRENT","PARENT","QUERY","FRAGMENT","BaseIRI","base","scheme","regexHead","regexTail","segments","segmenter","segment","query","fragment","parentPath","suffix","escape","escapeAll","escapedCharacters","SerializedTerm","N3Writer","outputStream","chunk","done","quadsString","characterReplacer","prefixMatch","hasPrefixes","IRIlist","prefixList","prefixIRI","children","contents","singleDone","character","AggregateError","primordials","sep","thisArgs","thenFn","catchFn","inspect","_unused","replacement","CustomAggregateError","kIsNodeError","kTypes","classRegExp","nodeInternalPrefix","codes","assert","expectedLength","NodeError","hideStackFrames","hidden","aggregateTwoErrors","innerError","outerError","AbortError","expected","types","_actual$constructor","inspected","reason","_value$constructor","AbortController","AbortSignal","browserModule","R","ReflectApply","receiver","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","EventEmitter","eventsModule","once","defaultMaxListeners","checkListener","_getMaxListeners","that","doError","events","er","arrayClone","_addListener","prepend","w","onceWrapper","_onceWrap","wrapped","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","reject","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","bufferModule","ERR_INVALID_ARG_TYPE","require$$2","kResistStopPropagation","SymbolDispose","require$$3","require$$4","AsyncFunction","Blob","isBlob","validateAbortSignal","signal","validateFunction","module","called","rej","require$$5","removeEventListener","_removeEventListener","signals","ac","abort","ArrayIsArray","ArrayPrototypeIncludes","ArrayPrototypeJoin","ArrayPrototypeMap","NumberIsInteger","NumberMAX_SAFE_INTEGER","NumberMIN_SAFE_INTEGER","NumberParseInt","ObjectPrototypeHasOwnProperty","RegExpPrototypeExec","String","StringPrototypeToUpperCase","StringPrototypeTrim","ERR_SOCKET_BAD_PORT","ERR_INVALID_ARG_VALUE","ERR_OUT_OF_RANGE","ERR_UNKNOWN_SIGNAL","normalizeEncoding","isAsyncFunction","isArrayBufferView","isInt32","isUint32","octalReg","modeDesc","parseFileMode","def","validateUint32","validateInteger","validateInt32","positive","validateString","validateOneOf","oneOf","validateBoolean","getOwnPropertyValueOrDefault","validateObject","allowArray","allowFunction","validateDictionary","validateArray","minLength","validateStringArray","validateBooleanArray","validateAbortSignalArray","indexedName","validateSignalName","validateBuffer","validateEncoding","normalizedEncoding","validatePort","port","allowZero","validatePlainFunction","validateUndefined","validateUnion","union","linkValueRegExp","validateLinkHeaderFormat","validateLinkHeaderValue","hints","hintsLength","link","validators","process","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","Item","SymbolAsyncIterator","SymbolIterator","SymbolFor","kIsDestroyed","kIsErrored","kIsReadable","kIsWritable","kIsDisturbed","kIsClosedPromise","kControllerErrorFunction","isReadableNodeStream","strict","_obj$_readableState","isWritableNodeStream","_obj$_writableState","isDuplexNodeStream","isNodeStream","isReadableStream","isWritableStream","isTransformStream","isWebStream","isIterable","isAsync","stream","wState","rState","isWritableEnded","isWritableFinished","isReadableEnded","isReadableFinished","isReadable","isWritable","isFinished","isWritableErrored","_stream$_writableStat","_stream$_writableStat2","isReadableErrored","_stream$_readableStat","_stream$_readableStat2","isClosed","isOutgoingMessage","isServerResponse","isServerRequest","_stream$req","willEmitClose","isDisturbed","_stream$kIsDisturbed","isErrored","_ref5","_stream$kIsErrored","_stream$_readableStat3","_stream$_writableStat3","_stream$_readableStat4","_stream$_writableStat4","utils","ERR_STREAM_PREMATURE_CLOSE","kEmptyObject","Promise","PromisePrototypeThen","_willEmitClose","addAbortListener","isRequest","nop","eos","_options$readable","_options$writable","eosWeb","readable","writable","onlegacyfinish","onfinish","writableFinished","readableFinished","onend","onerror","closed","onclose","errored","onclosed","onrequest","cleanup","endCallback","disposable","originalCallback","isAborted","resolverFn","finished","_opts","autoCleanup","endOfStreamModule","ERR_MULTIPLE_CALLBACK","Symbol","kDestroy","kConstruct","checkError","r","_destroy","onDestroy","emitErrorCloseNT","emitCloseNT","emitErrorNT","undestroy","errorOrDestroy","sync","construct","constructNT","onConstruct","emitConstructNT","emitCloseLegacy","emitErrorCloseLegacy","destroyer","destroy_1","ObjectSetPrototypeOf","EE","Stream","dest","ondata","ondrain","didOnEnd","prependListener","legacy","onAbort","StringPrototypeSlice","TypedArrayPrototypeSet","Uint8Array","buffer_list","entry","p","hasStrings","slice","retLen","MathFloor","defaultHighWaterMarkBytes","defaultHighWaterMarkObjectMode","highWaterMarkFrom","isDuplex","duplexKey","getDefaultHighWaterMark","objectMode","setDefaultHighWaterMark","getHighWaterMark","hwm","copyProps","SafeBuffer","isEncoding","_normalizeEncoding","enc","retried","nenc","string_decoder","StringDecoder","nb","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","total","ERR_STREAM_NULL_VALUES","Readable","iterable","iterator","reading","close","hadError","hasThrow","from_1","ArrayPrototypeIndexOf","ObjectDefineProperties","ObjectKeys","SafeSet","SymbolAsyncDispose","ReadableState","addAbortSignal","require$$6","debug","require$$7","BufferList","require$$8","destroyImpl","require$$9","require$$10","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_PUSH_AFTER_EOF","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","require$$11","require$$12","kPaused","require$$13","require$$14","kObjectMode","kEnded","kEndEmitted","kReading","kConstructed","kSync","kNeedReadable","kEmittedReadable","kReadableListening","kResumeScheduled","kErrorEmitted","kEmitClose","kAutoDestroy","kDestroyed","kClosed","kCloseEmitted","kMultiAwaitDrain","kReadingMore","kDataEmitted","makeBitMapDescriptor","bit","require$$15","maybeReadMore","readableAddChunk","addToFront","onEofChunk","addChunk","emitReadable","decoder","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","fromList","emitReadable_","flow","maybeReadMore_","pipeOpts","endFn","unpipe","onunpipe","unpipeInfo","cleanedUp","pause","pipeOnDrain","dests","ev","nReadingNextTick","updateReadableListening","resume","resume_","paused","streamKeys","streamToAsyncIterator","iter","createAsyncIterator","endReadableNT","endWritableNT","webStreamsAdapters","lazyWebStreams","readableStream","streamReadable","_src$readableObjectMo","ArrayPrototypeSlice","Error","FunctionPrototypeSymbolHasInstance","ObjectDefineProperty","StringPrototypeToLowerCase","SymbolHasInstance","Writable","WritableState","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_ALREADY_FINISHED","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","kOnFinished","noDecode","onwrite","resetBuffer","clearBuffer","finishMaybe","_write","writeOrBuffer","doWrite","writev","onwriteError","errorBuffer","afterWriteTick","count","_state$errored","onfinishCallbacks","_state$errored2","buffered","bufferedIndex","bufferedLength","chunks","needFinish","callFinal","onFinish","finish","prefinish","writableStream","streamWritable","ERR_INVALID_RETURN_VALUE","Duplex","createDeferredPromise","FunctionPrototypeCall","Duplexify","duplexify","_duplexify","final","fromAsyncGen","then","promise","_promise","_resolve","pair","onreadable","onfinished","ObjectGetOwnPropertyDescriptor","duplex","transform","Transform","kCallback","readableHighWaterMark","passthrough","PassThrough","ERR_MISSING_ARGS","writing","popCallback","streams","makeAsyncIterable","fromReadable","pumpToNode","onresolve","wait","pumpToWeb","writer","pipeline","pipelineImpl","outerSignal","lastStreamCleanup","finishImpl","destroys","finishCount","_disposable","isLastStream","onError","_ret2","pt","toRead","pipe","ended","pipeline_1","compose","orgStreams","idx","head","tail","reader","kWeakHandler","staticCompose","addAbortSignalNoValidate","deprecate","ArrayPrototypePush","Boolean","Number","PromiseReject","PromiseResolve","kEmpty","kEof","composedStream","concurrency","highWaterMark","signalOpt","cnt","onCatch","afterItemProcessed","maybeResume","pump","asIndexedPairs","_options$signal","some","unused","filter","every","find","forEach","forEachFn","filterFn","ReduceAwareErrMissingArgs","reduce","reducer","initialValue","_options$signal2","hasInitialValue","gotAnyItemFromStream","_options$signal3","_options$signal4","flatMap","values","toIntegerOrInfinity","number","drop","_options$signal5","_options$signal6","take","_options$signal7","_options$signal8","operators","ArrayPrototypePop","pl","lastArg","promises","customPromisify","streamReturningOperators","promiseReturningOperators","ERR_ILLEGAL_CONSTRUCTOR","streamModule","op","require$$16","require$$17","require$$18","CustomStream","originalDestroy","ITERATOR","merge","depth","intersect","s1","s2","intersection","difference","diff","N3EntityIndex","entities","terms","o","g","suggestedName","N3Store","graphs","subjects","graphKey","subjectKey","predicateKey","index0","key0","key1","key2","index1","index2","existed","name0","name1","name2","graphId","entityKeys","value0","value1","l","uniqueIds","graphItem","subjectOrQuad","predicates","subjectId","predicateId","objectId","DatasetCoreAndReadableStream","results","remove","ignoreErrors","lists","tails","toRemove","tailQuad","items","malformed","headPos","objectQuads","subjectQuads","rest","g1","g2","p1","p2","o1","store","iteratee","accumulator","indexMatch","ids","ind","n3Store","newStore","objects","N3DatasetCoreFactory","getRulesFromDataset","dataset","rules","DF","premise","conclusion","N3Reasoner","rule","v1","v2","val0","val1","val2","v0","newRules","addRule","addConclusions","v3","varMapping","toId","r1","r2","termEq","set","getIndex","t1","t2","N3StreamParser","onData","onEnd","callbacks","uri","N3StreamWriter","Lexer","Parser","Writer","Store","StoreFactory","EntityIndex","StreamParser","StreamWriter","Util","Reasoner","Triple","volatileStore","n3_1","VolitileStore","BlankNode_1","BlankNode$1","DefaultGraph_1","DefaultGraph$1","NamedNode_1","NamedNode$1","Literal_1","Literal$1","languageOrDatatype","Quad_1","Quad$1","Variable_1","Variable$1","DataFactory_1","dataFactoryCounter","DataFactory$1","original","__createBinding","this","k","k2","desc","__exportStar","TermUtil","rdf_data_factory_1","FACTORY","termToString","escapeIRI","literalValue","escapeStringRDF","getLiteralValue","getLiteralType","getLiteralLanguage","stringToTerm","dataFactory","language","stringTerms","ignoreTags","lastIndex","quadToStringQuad","stringQuadToQuad","stringQuad","iriValue","escapePattern","replaceEscapedCharacter","stringValue","escapes","TermUtil_1","_escape","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","ttlwriter","rdf_string_ttl_1","escape_1","compareTerms","comparison","getNamespace","WELL_DEFINED_DATATYPES","TTLWriter","addTerm","termList","allPrefixKeys","bnodes","b2nodes","subjects2","currentGraph","term_1","anonymizeSubject","namespace","semi","blankObjects","nonBlankObjects","comma","lastQuad","blank","object_1","isSubject","elems","space","no","__importDefault","mod","dist","volatile_store_1","ttlwriter_1","writer_1","EM_SIZE","EX_SIZE","CM_PER_INCH","MM_PER_INCH","POINTS_PER_INCH","PICAS_PER_INCH","PIXELS_PER_INCH","__unit_scaling","__unit_length_re","lengthToPixels","scaling","SVG_URI","getViewbox","svgElement","attributePairs","svgCircleAttributes","svgCircle","centre","radius","svgRectAttributes","tl","br","svgRect","topLeft","bottomRight","CELLDL_URI","BG_URI","BGF_URI","CDT_URI","TPL_URI","DCT_URI","OWL_URI","RDF_URI","RDFS_URI","XSD_URI","CELLDL_DECLARATIONS","WEB_DECLARATIONS","declaredNamespaces","prefixUri","Namespace","#nsuri","nsuri","ln","CELLDL","BaseStore","properties","statements","#addMetadataProperties","MetadataPropertiesMap","#addListAsCollection","predicateValues","metadata","predicateValue","#metadataValue","#listFromCollection","headItem","nextItem","makeNamedNode","makeStatement","TurtleContentType","RdfStore","#rdfStore","statement","baseIri","contentType","prettyTurtle","sparql","all_graphs","inLib","location","parentType","#rdfTypes","#copyValue","multiValued","inSet","POINT_EPSILON","POINT_EPSILON_SQUARED","Point","point","coords","PointMath","between","scale","p0","d0","d1","d2","decimalPlaces","tenPower","Bounds","#left","#right","#top","#bottom","pt0","pt1","globalTransform","bbox","bounds","epsilon","margin","IdGenerator","#instance","#nextId","idGenerator","nextId","RestrictedValue","#dirty","#value","#minimum","#maximum","rangeStart","rangeEnd","#getValue","delta","minimum","maximum","minValue","maxValue","FixedValue","_minimum","_maximum","RestrictedPoint","#xValue","#yValue","xValue","yValue","FixedPoint","ControlRect","#topLeft","#bottomRight","#size","#centroid","#centroidOffset","#svgElement","corner_0","corner_1","centroidOffset","x0","y0","x1","y1","FixedControlRect","CONNECTION_COLOUR","OLD_CONNECTION_COLOUR","CONNECTION_WIDTH","SELECTION_STROKE_WIDTH","applyToPoint","matrix","applyToPoints","points","parseFloatOrThrow","identity","inverse","f","denom","translate","tx","ty","matrices","m1","m2","#matrix","transformToString","CONDUIT_SELECTION_RADIUS","CellDLSVGElement","#bounds","#cornerOffsets","#selected","#selectionClasses","#selectionElement","#globalTransform","celldlObject","svgDiagramElement","#updatedSvgElement","centroid","recalculate","#selectionElementMembers","members","CELLDL_CLASS","#setSelectionClass","cls","active","highlight","_eventType","_svgElement","_svgCoords","selected","#updateBounds","topLeftOffset","connectionComponentGap","firstChild","svgChild","svg","BoundedElement","#controlRect","CellDLObject","#celldlClassName","#celldlModel","#celldlSvgElement","#celldlType","#tooltip","celldlModel","celldlSvgElement","rdfType","tooltip","CellDLMoveableObject","CellDLAnnotation","CellDLConnectedObject","CellDLComponent","CellDLConduit","CellDLCompartment","CellDLConnection","CellDLInterface","#externalConnections","CellDLUnconnectedPort","CELLDL_METADATA_ID","VIEWER_DIAGRAM_URI","CellDLModel","#svgDiagram","#kb","$rdf.RdfStore","#celldlViewer","#documentNode","#documentNS","#annotations","#objects","celldlViewer","celldlData","annotations","$rdf.namedNode","$rdf.Namespace","#loadSvgDiagram","#loadMetadata","tooltipField","annotation","#loadComponents","#loadInterfaces","#loadConduits","#loadConnections","#loadAnnotations","#loadAnnotatedSVGFeatures","eventDetail","svgData","svgDiagram","strokedPaths","metadataElement","$rdf.TurtleContentType","childNodes","childNode","#setObjectSvgElement","#celldlObjectFromRdf","CellDLClass","#subjectsOfType","st","#addMoveableObject","#loadObject","subjectType","connectorNode","$rdf.isNamedNode","connectorId","connector","featuresWithId","feature","PanZoom","#panning","#pointerDownPosition","#containerId","#containerOrigin","#containerSize","#resizeObserver","#validContainer","#minScale","#scale","#maxScale","#step","#wheelEvent","#resizeObservation","#currentViewbox","#setViewbox","viewbox","_event","entries","containerSize","wheel","toScale","viewSize","MAX_POINTER_CLICK_TIME","getElementId","prevElement","SVG_PANEL_ID","CellDLViewer","#container","#panzoom","#pointerMoved","#activeObject","#selectedObject","#pointerDownTime","#tooltipElement","#tooltipStyle","svgContainer","#addPointerEventHandlers","#pointerClickEvent","#pointerOverEvent","#pointerOutEvent","#pointerDownEvent","#pointerMoveEvent","#pointerUpEvent","#removePointerEventHandlers","vue","newDiagram","#unsetSelectedObject","#unsetActiveObject","#setDefaultCursor","#hideTooltip","#showTooltip","tooltipStyle","#emitModelEvent","#activateObject","#setActiveObject","activeObject","#setSelectedObject","selectedObject","clickedObject","#selectionClickEvent","_element","deselected","#notDiagramElement","currentObject","__props","crtInstance","vueTippy","svgContent","__emit","showDiagram","vueusecore.useEventListener"],"mappings":";;AAkPA,MAAMA,KAAW,OAAO,SAAW,OAAe,OAAO,WAAa;AACrD,OAAO,oBAAsB,OAAe,sBAAsB;AAMnF,MAAMC,KAAW,OAAO,UAAU,UAC5BC,KAAW,CAACC,MAAQF,GAAS,KAAKE,CAAG,MAAM;AAmPjD,SAASC,GAAQC,GAAO;AACvB,SAAO,MAAM,QAAQA,CAAK,IAAIA,IAAQ,CAACA,CAAK;AAC7C;AAk8CA,SAASC,GAAeC,GAAQC,GAAIC,GAAS;AAC5C,SAAOC,GAAMH,GAAQC,GAAI;AAAA,IACxB,GAAGC;AAAA,IACH,WAAW;AAAA,EACb,CAAE;AACF;AC1wDA,MAAME,KAAgBX,KAAW,SAAS;AAY1C,SAASY,GAAaC,GAAO;AAC5B,MAAIC;AACJ,QAAMC,IAAQC,GAAQH,CAAK;AAC3B,UAAQC,IAAqDC,GAAM,SAAS,QAAQD,MAAS,SAASA,IAAOC;AAC9G;AAIA,SAASE,MAAoBC,GAAM;AAClC,QAAMC,IAAW,CAACC,GAAIC,GAAOC,GAAUb,OACtCW,EAAG,iBAAiBC,GAAOC,GAAUb,CAAO,GACrC,MAAMW,EAAG,oBAAoBC,GAAOC,GAAUb,CAAO,IAEvDc,IAAoBC,GAAS,MAAM;AACxC,UAAMC,IAAOrB,GAAQY,GAAQE,EAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAACQ,MAAMA,KAAK,IAAI;AAC9D,WAAOD,EAAK,MAAM,CAACC,MAAM,OAAOA,KAAM,QAAQ,IAAID,IAAO;AAAA,EAC1D,CAAC;AACD,SAAOnB,GAAe,MAAM;AAC3B,QAAIqB,GAAuBC;AAC3B,WAAO;AAAA,OACLD,KAAyBC,IAAyBL,EAAkB,WAAW,QAAQK,MAA2B,SAAS,SAASA,EAAuB,IAAI,CAACF,MAAMd,GAAac,CAAC,CAAC,OAAO,QAAQC,MAA0B,SAASA,IAAwB,CAAChB,EAAa,EAAE,OAAO,CAACe,MAAMA,KAAK,IAAI;AAAA,MACvStB,GAAQY,GAAQO,EAAkB,QAAQL,EAAK,CAAC,IAAIA,EAAK,CAAC,CAAC,CAAC;AAAA,MAC5Dd,GAAQyB,GAAMN,EAAkB,QAAQL,EAAK,CAAC,IAAIA,EAAK,CAAC,CAAC,CAAC;AAAA,MAC1DF,GAAQO,EAAkB,QAAQL,EAAK,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,IACtD;AAAA,EACC,GAAG,CAAC,CAACY,GAAaC,GAAYC,GAAeC,CAAW,GAAGC,GAAGC,MAAc;AAC3E,QAAI,CAA4DL,GAAY,UAAW,CAA0DC,GAAW,UAAW,CAAgEC,GAAc,OAAS;AAC9P,UAAMI,IAAelC,GAAS+B,CAAW,IAAI,EAAE,GAAGA,EAAW,IAAKA,GAC5DI,IAAWP,EAAY,QAAQ,CAACV,MAAOW,EAAW,QAAQ,CAACV,MAAUW,EAAc,IAAI,CAACV,MAAaH,EAASC,GAAIC,GAAOC,GAAUc,CAAY,CAAC,CAAC,CAAC;AACxJ,IAAAD,EAAU,MAAM;AACf,MAAAE,EAAS,QAAQ,CAACC,MAAOA,EAAE,CAAE;AAAA,IAC9B,CAAC;AAAA,EACF,GAAG,EAAE,OAAO,QAAQ;AACrB;AClNA,IAAIC,KAAM,OACNC,KAAS,UACTC,KAAQ,SACRC,KAAO,QACPC,KAAO,QACPC,KAAiB,CAACL,IAAKC,IAAQC,IAAOC,EAAI,GAC1CG,KAAQ,SACRC,KAAM,OACNC,KAAkB,mBAClBC,KAAW,YACXC,KAAS,UACTC,KAAY,aACZC,KAAmC,gBAAAP,GAAe,OAAO,SAAUQ,GAAKC,GAAW;AACrF,SAAOD,EAAI,OAAO,CAACC,IAAY,MAAMR,IAAOQ,IAAY,MAAMP,EAAG,CAAC;AACpE,GAAG,EAAE,GACDQ,KAA0B,iBAAA,EAAG,OAAOV,IAAgB,CAACD,EAAI,CAAC,EAAE,OAAO,SAAUS,GAAKC,GAAW;AAC/F,SAAOD,EAAI,OAAO,CAACC,GAAWA,IAAY,MAAMR,IAAOQ,IAAY,MAAMP,EAAG,CAAC;AAC/E,GAAG,CAAA,CAAE,GAEDS,KAAa,cACbC,KAAO,QACPC,KAAY,aAEZC,KAAa,cACbC,KAAO,QACPC,KAAY,aAEZC,KAAc,eACdC,KAAQ,SACRC,KAAa,cACbC,KAAiB,CAACT,IAAYC,IAAMC,IAAWC,IAAYC,IAAMC,IAAWC,IAAaC,IAAOC,EAAU;AAE9G,SAASE,GAAYC,GAAS;AAC5B,SAAOA,KAAWA,EAAQ,YAAY,IAAI,YAAW,IAAK;AAC5D;AAEA,SAASC,GAAUC,GAAM;AACvB,MAAIA,KAAQ;AACV,WAAO;AAGT,MAAIA,EAAK,SAAQ,MAAO,mBAAmB;AACzC,QAAIC,IAAgBD,EAAK;AACzB,WAAOC,KAAgBA,EAAc,eAAe;AAAA,EACtD;AAEA,SAAOD;AACT;AAEA,SAASE,GAAUF,GAAM;AACvB,MAAIG,IAAaJ,GAAUC,CAAI,EAAE;AACjC,SAAOA,aAAgBG,KAAcH,aAAgB;AACvD;AAEA,SAASI,GAAcJ,GAAM;AAC3B,MAAIG,IAAaJ,GAAUC,CAAI,EAAE;AACjC,SAAOA,aAAgBG,KAAcH,aAAgB;AACvD;AAEA,SAASK,GAAaL,GAAM;AAE1B,MAAI,OAAO,aAAe;AACxB,WAAO;AAGT,MAAIG,IAAaJ,GAAUC,CAAI,EAAE;AACjC,SAAOA,aAAgBG,KAAcH,aAAgB;AACvD;AAIA,SAASM,GAAYC,GAAM;AACzB,MAAIC,IAAQD,EAAK;AACjB,SAAO,KAAKC,EAAM,QAAQ,EAAE,QAAQ,SAAUC,GAAM;AAClD,QAAIC,IAAQF,EAAM,OAAOC,CAAI,KAAK,CAAA,GAC9BE,IAAaH,EAAM,WAAWC,CAAI,KAAK,CAAA,GACvCX,IAAUU,EAAM,SAASC,CAAI;AAEjC,IAAI,CAACL,GAAcN,CAAO,KAAK,CAACD,GAAYC,CAAO,MAOnD,OAAO,OAAOA,EAAQ,OAAOY,CAAK,GAClC,OAAO,KAAKC,CAAU,EAAE,QAAQ,SAAUF,GAAM;AAC9C,UAAIxE,IAAQ0E,EAAWF,CAAI;AAE3B,MAAIxE,MAAU,KACZ6D,EAAQ,gBAAgBW,CAAI,IAE5BX,EAAQ,aAAaW,GAAMxE,MAAU,KAAO,KAAKA,CAAK;AAAA,IAE1D,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS2E,GAAOC,GAAO;AACrB,MAAIL,IAAQK,EAAM,OACdC,IAAgB;AAAA,IAClB,QAAQ;AAAA,MACN,UAAUN,EAAM,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,IACd;AAAA,IACI,OAAO;AAAA,MACL,UAAU;AAAA,IAChB;AAAA,IACI,WAAW,CAAA;AAAA,EACf;AACE,gBAAO,OAAOA,EAAM,SAAS,OAAO,OAAOM,EAAc,MAAM,GAC/DN,EAAM,SAASM,GAEXN,EAAM,SAAS,SACjB,OAAO,OAAOA,EAAM,SAAS,MAAM,OAAOM,EAAc,KAAK,GAGxD,WAAY;AACjB,WAAO,KAAKN,EAAM,QAAQ,EAAE,QAAQ,SAAUC,GAAM;AAClD,UAAIX,IAAUU,EAAM,SAASC,CAAI,GAC7BE,IAAaH,EAAM,WAAWC,CAAI,KAAK,CAAA,GACvCM,IAAkB,OAAO,KAAKP,EAAM,OAAO,eAAeC,CAAI,IAAID,EAAM,OAAOC,CAAI,IAAIK,EAAcL,CAAI,CAAC,GAE1GC,IAAQK,EAAgB,OAAO,SAAUL,GAAOM,GAAU;AAC5D,eAAAN,EAAMM,CAAQ,IAAI,IACXN;AAAA,MACT,GAAG,CAAA,CAAE;AAEL,MAAI,CAACN,GAAcN,CAAO,KAAK,CAACD,GAAYC,CAAO,MAInD,OAAO,OAAOA,EAAQ,OAAOY,CAAK,GAClC,OAAO,KAAKC,CAAU,EAAE,QAAQ,SAAUM,GAAW;AACnD,QAAAnB,EAAQ,gBAAgBmB,CAAS;AAAA,MACnC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAGA,IAAIC,KAAgB;AAAA,EAClB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIZ;AAAA,EACJ,QAAQM;AAAA,EACR,UAAU,CAAC,eAAe;AAC5B;AAEA,SAASO,GAAiBlC,GAAW;AACnC,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AAEA,IAAImC,KAAM,KAAK,KACXC,KAAM,KAAK,KACXC,KAAQ,KAAK;AAEjB,SAASC,GAAsBzB,GAAS0B,GAAc;AACpD,EAAIA,MAAiB,WACnBA,IAAe;AAGjB,MAAIC,IAAO3B,EAAQ,sBAAqB,GACpC4B,IAAS,GACTC,IAAS;AAEb,MAAIvB,GAAcN,CAAO,KAAK0B,GAAc;AAC1C,QAAII,IAAe9B,EAAQ,cACvB+B,IAAc/B,EAAQ;AAG1B,IAAI+B,IAAc,MAChBH,IAASJ,GAAMG,EAAK,KAAK,IAAII,KAAe,IAG1CD,IAAe,MACjBD,IAASL,GAAMG,EAAK,MAAM,IAAIG,KAAgB;AAAA,EAElD;AAEA,SAAO;AAAA,IACL,OAAOH,EAAK,QAAQC;AAAA,IACpB,QAAQD,EAAK,SAASE;AAAA,IACtB,KAAKF,EAAK,MAAME;AAAA,IAChB,OAAOF,EAAK,QAAQC;AAAA,IACpB,QAAQD,EAAK,SAASE;AAAA,IACtB,MAAMF,EAAK,OAAOC;AAAA,IAClB,GAAGD,EAAK,OAAOC;AAAA,IACf,GAAGD,EAAK,MAAME;AAAA,EAClB;AACA;AAIA,SAASG,GAAchC,GAAS;AAC9B,MAAIiC,IAAaR,GAAsBzB,CAAO,GAG1CkC,IAAQlC,EAAQ,aAChBmC,IAASnC,EAAQ;AAErB,SAAI,KAAK,IAAIiC,EAAW,QAAQC,CAAK,KAAK,MACxCA,IAAQD,EAAW,QAGjB,KAAK,IAAIA,EAAW,SAASE,CAAM,KAAK,MAC1CA,IAASF,EAAW,SAGf;AAAA,IACL,GAAGjC,EAAQ;AAAA,IACX,GAAGA,EAAQ;AAAA,IACX,OAAOkC;AAAA,IACP,QAAQC;AAAA,EACZ;AACA;AAEA,SAASC,GAASC,GAAQC,GAAO;AAC/B,MAAIC,IAAWD,EAAM,eAAeA,EAAM,YAAW;AAErD,MAAID,EAAO,SAASC,CAAK;AACvB,WAAO;AAEJ,MAAIC,KAAYhC,GAAagC,CAAQ,GAAG;AACzC,QAAIC,IAAOF;AAEX,OAAG;AACD,UAAIE,KAAQH,EAAO,WAAWG,CAAI;AAChC,eAAO;AAIT,MAAAA,IAAOA,EAAK,cAAcA,EAAK;AAAA,IACjC,SAASA;AAAA,EACX;AAGF,SAAO;AACT;AAEA,SAASC,GAAiBzC,GAAS;AACjC,SAAOC,GAAUD,CAAO,EAAE,iBAAiBA,CAAO;AACpD;AAEA,SAAS0C,GAAe1C,GAAS;AAC/B,SAAO,CAAC,SAAS,MAAM,IAAI,EAAE,QAAQD,GAAYC,CAAO,CAAC,KAAK;AAChE;AAEA,SAAS2C,GAAmB3C,GAAS;AAEnC,WAASI,GAAUJ,CAAO,IAAIA,EAAQ;AAAA;AAAA,IACtCA,EAAQ;AAAA,QAAa,OAAO,UAAU;AACxC;AAEA,SAAS4C,GAAc5C,GAAS;AAC9B,SAAID,GAAYC,CAAO,MAAM,SACpBA;AAAA;AAAA;AAAA;AAAA,IAMPA,EAAQ;AAAA,IACRA,EAAQ;AAAA,KACRO,GAAaP,CAAO,IAAIA,EAAQ,OAAO;AAAA;AAAA,IAEvC2C,GAAmB3C,CAAO;AAAA;AAG9B;AAEA,SAAS6C,GAAoB7C,GAAS;AACpC,SAAI,CAACM,GAAcN,CAAO;AAAA,EAC1ByC,GAAiBzC,CAAO,EAAE,aAAa,UAC9B,OAGFA,EAAQ;AACjB;AAIA,SAAS8C,GAAmB9C,GAAS;AACnC,MAAI+C,IAAY,UAAU,UAAU,YAAW,EAAG,QAAQ,SAAS,MAAM,IACrEC,IAAO,UAAU,UAAU,QAAQ,SAAS,MAAM;AAEtD,MAAIA,KAAQ1C,GAAcN,CAAO,GAAG;AAElC,QAAIiD,IAAaR,GAAiBzC,CAAO;AAEzC,QAAIiD,EAAW,aAAa;AAC1B,aAAO;AAAA,EAEX;AAIA,WAFIC,IAAcN,GAAc5C,CAAO,GAEhCM,GAAc4C,CAAW,KAAK,CAAC,QAAQ,MAAM,EAAE,QAAQnD,GAAYmD,CAAW,CAAC,IAAI,KAAG;AAC3F,QAAIC,IAAMV,GAAiBS,CAAW;AAItC,QAAIC,EAAI,cAAc,UAAUA,EAAI,gBAAgB,UAAUA,EAAI,YAAY,WAAW,CAAC,aAAa,aAAa,EAAE,QAAQA,EAAI,UAAU,MAAM,MAAMJ,KAAaI,EAAI,eAAe,YAAYJ,KAAaI,EAAI,UAAUA,EAAI,WAAW;AAC5O,aAAOD;AAEP,IAAAA,IAAcA,EAAY;AAAA,EAE9B;AAEA,SAAO;AACT;AAIA,SAASE,GAAgBpD,GAAS;AAIhC,WAHIqD,IAASpD,GAAUD,CAAO,GAC1BsD,IAAeT,GAAoB7C,CAAO,GAEvCsD,KAAgBZ,GAAeY,CAAY,KAAKb,GAAiBa,CAAY,EAAE,aAAa;AACjG,IAAAA,IAAeT,GAAoBS,CAAY;AAGjD,SAAIA,MAAiBvD,GAAYuD,CAAY,MAAM,UAAUvD,GAAYuD,CAAY,MAAM,UAAUb,GAAiBa,CAAY,EAAE,aAAa,YACxID,IAGFC,KAAgBR,GAAmB9C,CAAO,KAAKqD;AACxD;AAEA,SAASE,GAAyBpE,GAAW;AAC3C,SAAO,CAAC,OAAO,QAAQ,EAAE,QAAQA,CAAS,KAAK,IAAI,MAAM;AAC3D;AAEA,SAASqE,GAAOC,GAAOtH,GAAOuH,GAAO;AACnC,SAAOpC,GAAImC,GAAOlC,GAAIpF,GAAOuH,CAAK,CAAC;AACrC;AACA,SAASC,GAAepC,GAAKpF,GAAOmF,GAAK;AACvC,MAAIsC,IAAIJ,GAAOjC,GAAKpF,GAAOmF,CAAG;AAC9B,SAAOsC,IAAItC,IAAMA,IAAMsC;AACzB;AAEA,SAASC,KAAqB;AAC5B,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AACA;AAEA,SAASC,GAAmBC,GAAe;AACzC,SAAO,OAAO,OAAO,CAAA,GAAIF,GAAkB,GAAIE,CAAa;AAC9D;AAEA,SAASC,GAAgB7H,GAAO8H,GAAM;AACpC,SAAOA,EAAK,OAAO,SAAUC,GAASC,GAAK;AACzC,WAAAD,EAAQC,CAAG,IAAIhI,GACR+H;AAAA,EACT,GAAG,CAAA,CAAE;AACP;AAEA,IAAIE,KAAkB,SAAyBC,GAAS3D,GAAO;AAC7D,SAAA2D,IAAU,OAAOA,KAAY,aAAaA,EAAQ,OAAO,OAAO,CAAA,GAAI3D,EAAM,OAAO;AAAA,IAC/E,WAAWA,EAAM;AAAA,EACrB,CAAG,CAAC,IAAI2D,GACCP,GAAmB,OAAOO,KAAY,WAAWA,IAAUL,GAAgBK,GAAS3F,EAAc,CAAC;AAC5G;AAEA,SAAS4F,GAAM7D,GAAM;AACnB,MAAI8D,GAEA7D,IAAQD,EAAK,OACbE,IAAOF,EAAK,MACZlE,IAAUkE,EAAK,SACf+D,IAAe9D,EAAM,SAAS,OAC9B+D,IAAgB/D,EAAM,cAAc,eACpCgE,IAAgBrD,GAAiBX,EAAM,SAAS,GAChDiE,IAAOpB,GAAyBmB,CAAa,GAC7CE,IAAa,CAACpG,IAAMD,EAAK,EAAE,QAAQmG,CAAa,KAAK,GACrDG,IAAMD,IAAa,WAAW;AAElC,MAAI,GAACJ,KAAgB,CAACC,IAItB;AAAA,QAAIV,IAAgBK,GAAgB7H,EAAQ,SAASmE,CAAK,GACtDoE,IAAY9C,GAAcwC,CAAY,GACtCO,IAAUJ,MAAS,MAAMtG,KAAMG,IAC/BwG,IAAUL,MAAS,MAAMrG,KAASC,IAClC0G,IAAUvE,EAAM,MAAM,UAAUmE,CAAG,IAAInE,EAAM,MAAM,UAAUiE,CAAI,IAAIF,EAAcE,CAAI,IAAIjE,EAAM,MAAM,OAAOmE,CAAG,GACjHK,IAAYT,EAAcE,CAAI,IAAIjE,EAAM,MAAM,UAAUiE,CAAI,GAC5DQ,IAAoB/B,GAAgBoB,CAAY,GAChDY,IAAaD,IAAoBR,MAAS,MAAMQ,EAAkB,gBAAgB,IAAIA,EAAkB,eAAe,IAAI,GAC3HE,IAAoBJ,IAAU,IAAIC,IAAY,GAG9C3D,IAAMwC,EAAcgB,CAAO,GAC3BzD,IAAM8D,IAAaN,EAAUD,CAAG,IAAId,EAAciB,CAAO,GACzDM,IAASF,IAAa,IAAIN,EAAUD,CAAG,IAAI,IAAIQ,GAC/CE,IAAS/B,GAAOjC,GAAK+D,GAAQhE,CAAG,GAEhCkE,IAAWb;AACf,IAAAjE,EAAM,cAAcC,CAAI,KAAK4D,IAAwB,CAAA,GAAIA,EAAsBiB,CAAQ,IAAID,GAAQhB,EAAsB,eAAegB,IAASD,GAAQf;AAAA;AAC3J;AAEA,SAASkB,GAAS1E,GAAO;AACvB,MAAIL,IAAQK,EAAM,OACdxE,IAAUwE,EAAM,SAChB2E,IAAmBnJ,EAAQ,SAC3BiI,IAAekB,MAAqB,SAAS,wBAAwBA;AAEzE,EAAIlB,KAAgB,SAKhB,OAAOA,KAAiB,aAC1BA,IAAe9D,EAAM,SAAS,OAAO,cAAc8D,CAAY,GAE3D,CAACA,MAKFpC,GAAS1B,EAAM,SAAS,QAAQ8D,CAAY,MAKjD9D,EAAM,SAAS,QAAQ8D;AACzB;AAGA,IAAImB,KAAU;AAAA,EACZ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIrB;AAAA,EACJ,QAAQmB;AAAA,EACR,UAAU,CAAC,eAAe;AAAA,EAC1B,kBAAkB,CAAC,iBAAiB;AACtC;AAEA,SAASG,GAAazG,GAAW;AAC/B,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AAEA,IAAI0G,KAAa;AAAA,EACf,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAIA,SAASC,GAAkBrF,GAAM;AAC/B,MAAIsF,IAAItF,EAAK,GACTuF,IAAIvF,EAAK,GACTwF,IAAM,QACNC,IAAMD,EAAI,oBAAoB;AAClC,SAAO;AAAA,IACL,GAAGzE,GAAMuE,IAAIG,CAAG,IAAIA,KAAO;AAAA,IAC3B,GAAG1E,GAAMwE,IAAIE,CAAG,IAAIA,KAAO;AAAA,EAC/B;AACA;AAEA,SAASC,GAAYpF,GAAO;AAC1B,MAAIqF,GAEArH,IAASgC,EAAM,QACfsF,IAAatF,EAAM,YACnB5B,IAAY4B,EAAM,WAClBuF,IAAYvF,EAAM,WAClBwF,IAAUxF,EAAM,SAChByF,IAAWzF,EAAM,UACjB0F,IAAkB1F,EAAM,iBACxB2F,IAAW3F,EAAM,UACjB4F,IAAe5F,EAAM,cACrB6F,IAAU7F,EAAM,SAEhB8F,IAAQF,MAAiB,KAAOb,GAAkBS,CAAO,IAAI,OAAOI,KAAiB,aAAaA,EAAaJ,CAAO,IAAIA,GAC1HO,IAAUD,EAAM,GAChBd,IAAIe,MAAY,SAAS,IAAIA,GAC7BC,IAAUF,EAAM,GAChBb,IAAIe,MAAY,SAAS,IAAIA,GAE7BC,IAAOT,EAAQ,eAAe,GAAG,GACjCU,IAAOV,EAAQ,eAAe,GAAG,GACjCW,IAAQ1I,IACR2I,IAAQ9I,IACR4H,IAAM;AAEV,MAAIS,GAAU;AACZ,QAAIpD,IAAeF,GAAgBrE,CAAM,GACrCqI,IAAa,gBACbC,IAAY;AAchB,QAZI/D,MAAiBrD,GAAUlB,CAAM,MACnCuE,IAAeX,GAAmB5D,CAAM,GAEpC0D,GAAiBa,CAAY,EAAE,aAAa,YAAYkD,MAAa,eACvEY,IAAa,gBACbC,IAAY,iBAKhB/D,IAAeA,GAEXnE,MAAcd,OAAQc,MAAcX,MAAQW,MAAcZ,OAAU+H,MAAc1H,IAAK;AACzF,MAAAuI,IAAQ7I;AACR,UAAIgJ,KAAUV,KAAWX,EAAI,iBAAiBA,EAAI,eAAe;AAAA;AAAA,QACjE3C,EAAa8D,CAAU;AAAA;AACvB,MAAApB,KAAKsB,KAAUjB,EAAW,QAC1BL,KAAKS,IAAkB,IAAI;AAAA,IAC7B;AAEA,QAAItH,MAAcX,OAASW,MAAcd,MAAOc,MAAcb,OAAWgI,MAAc1H,IAAK;AAC1F,MAAAsI,IAAQ3I;AACR,UAAIgJ,IAAUX,KAAWX,EAAI,iBAAiBA,EAAI,eAAe;AAAA;AAAA,QACjE3C,EAAa+D,CAAS;AAAA;AACtB,MAAAtB,KAAKwB,IAAUlB,EAAW,OAC1BN,KAAKU,IAAkB,IAAI;AAAA,IAC7B;AAAA,EACF;AAEA,MAAIe,IAAe,OAAO,OAAO;AAAA,IAC/B,UAAUhB;AAAA,EACd,GAAKE,KAAYb,EAAU;AAEzB,MAAIY,GAAiB;AACnB,QAAIgB;AAEJ,WAAO,OAAO,OAAO,CAAA,GAAID,IAAeC,IAAiB,CAAA,GAAIA,EAAeN,CAAK,IAAIF,IAAO,MAAM,IAAIQ,EAAeP,CAAK,IAAIF,IAAO,MAAM,IAAIS,EAAe,aAAaxB,EAAI,oBAAoB,MAAM,IAAI,eAAeF,IAAI,SAASC,IAAI,QAAQ,iBAAiBD,IAAI,SAASC,IAAI,UAAUyB,EAAc;AAAA,EACjT;AAEA,SAAO,OAAO,OAAO,CAAA,GAAID,IAAepB,IAAkB,CAAA,GAAIA,EAAgBe,CAAK,IAAIF,IAAOjB,IAAI,OAAO,IAAII,EAAgBc,CAAK,IAAIF,IAAOjB,IAAI,OAAO,IAAIK,EAAgB,YAAY,IAAIA,EAAe;AAC7M;AAEA,SAASsB,GAAcC,GAAO;AAC5B,MAAIjH,IAAQiH,EAAM,OACdpL,IAAUoL,EAAM,SAChBC,IAAwBrL,EAAQ,iBAChCkK,IAAkBmB,MAA0B,SAAS,KAAOA,GAC5DC,IAAoBtL,EAAQ,UAC5BmK,IAAWmB,MAAsB,SAAS,KAAOA,GACjDC,IAAwBvL,EAAQ,cAChCoK,IAAemB,MAA0B,SAAS,KAAOA,GAEzDN,IAAe;AAAA,IACjB,WAAWnG,GAAiBX,EAAM,SAAS;AAAA,IAC3C,WAAWkF,GAAalF,EAAM,SAAS;AAAA,IACvC,QAAQA,EAAM,SAAS;AAAA,IACvB,YAAYA,EAAM,MAAM;AAAA,IACxB,iBAAiB+F;AAAA,IACjB,SAAS/F,EAAM,QAAQ,aAAa;AAAA,EACxC;AAEE,EAAIA,EAAM,cAAc,iBAAiB,SACvCA,EAAM,OAAO,SAAS,OAAO,OAAO,CAAA,GAAIA,EAAM,OAAO,QAAQyF,GAAY,OAAO,OAAO,CAAA,GAAIqB,GAAc;AAAA,IACvG,SAAS9G,EAAM,cAAc;AAAA,IAC7B,UAAUA,EAAM,QAAQ;AAAA,IACxB,UAAUgG;AAAA,IACV,cAAcC;AAAA,EACpB,CAAK,CAAC,CAAC,IAGDjG,EAAM,cAAc,SAAS,SAC/BA,EAAM,OAAO,QAAQ,OAAO,OAAO,CAAA,GAAIA,EAAM,OAAO,OAAOyF,GAAY,OAAO,OAAO,CAAA,GAAIqB,GAAc;AAAA,IACrG,SAAS9G,EAAM,cAAc;AAAA,IAC7B,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAciG;AAAA,EACpB,CAAK,CAAC,CAAC,IAGLjG,EAAM,WAAW,SAAS,OAAO,OAAO,IAAIA,EAAM,WAAW,QAAQ;AAAA,IACnE,yBAAyBA,EAAM;AAAA,EACnC,CAAG;AACH;AAGA,IAAIqH,KAAkB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIL;AAAA,EACJ,MAAM,CAAA;AACR,GAEIM,KAAU;AAAA,EACZ,SAAS;AACX;AAEA,SAASC,GAASxH,GAAM;AACtB,MAAIC,IAAQD,EAAK,OACbyH,IAAWzH,EAAK,UAChBlE,IAAUkE,EAAK,SACf0H,IAAkB5L,EAAQ,QAC1B6L,IAASD,MAAoB,SAAS,KAAOA,GAC7CE,IAAkB9L,EAAQ,QAC1B+L,IAASD,MAAoB,SAAS,KAAOA,GAC7ChF,IAASpD,GAAUS,EAAM,SAAS,MAAM,GACxC6H,IAAgB,GAAG,OAAO7H,EAAM,cAAc,WAAWA,EAAM,cAAc,MAAM;AAEvF,SAAI0H,KACFG,EAAc,QAAQ,SAAUC,GAAc;AAC5C,IAAAA,EAAa,iBAAiB,UAAUN,EAAS,QAAQF,EAAO;AAAA,EAClE,CAAC,GAGCM,KACFjF,EAAO,iBAAiB,UAAU6E,EAAS,QAAQF,EAAO,GAGrD,WAAY;AACjB,IAAII,KACFG,EAAc,QAAQ,SAAUC,GAAc;AAC5C,MAAAA,EAAa,oBAAoB,UAAUN,EAAS,QAAQF,EAAO;AAAA,IACrE,CAAC,GAGCM,KACFjF,EAAO,oBAAoB,UAAU6E,EAAS,QAAQF,EAAO;AAAA,EAEjE;AACF;AAGA,IAAIS,KAAiB;AAAA,EACnB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAI,WAAc;AAAA,EAAC;AAAA,EACnB,QAAQR;AAAA,EACR,MAAM,CAAA;AACR,GAEIS,KAAO;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AACP;AACA,SAASC,GAAqBxJ,GAAW;AACvC,SAAOA,EAAU,QAAQ,0BAA0B,SAAUyJ,GAAS;AACpE,WAAOF,GAAKE,CAAO;AAAA,EACrB,CAAC;AACH;AAEA,IAAIC,KAAS;AAAA,EACX,OAAO;AAAA,EACP,KAAK;AACP;AACA,SAASC,GAA8B3J,GAAW;AAChD,SAAOA,EAAU,QAAQ,cAAc,SAAUyJ,GAAS;AACxD,WAAOC,GAAOD,CAAO;AAAA,EACvB,CAAC;AACH;AAEA,SAASG,GAAgB7I,GAAM;AAC7B,MAAI+F,IAAMhG,GAAUC,CAAI,GACpB8I,IAAa/C,EAAI,aACjBgD,IAAYhD,EAAI;AACpB,SAAO;AAAA,IACL,YAAY+C;AAAA,IACZ,WAAWC;AAAA,EACf;AACA;AAEA,SAASC,GAAoBlJ,GAAS;AAQpC,SAAOyB,GAAsBkB,GAAmB3C,CAAO,CAAC,EAAE,OAAO+I,GAAgB/I,CAAO,EAAE;AAC5F;AAEA,SAASmJ,GAAgBnJ,GAAS;AAChC,MAAIiG,IAAMhG,GAAUD,CAAO,GACvBoJ,IAAOzG,GAAmB3C,CAAO,GACjCqJ,IAAiBpD,EAAI,gBACrB/D,IAAQkH,EAAK,aACbjH,IAASiH,EAAK,cACdrD,IAAI,GACJC,IAAI;AAMR,SAAIqD,MACFnH,IAAQmH,EAAe,OACvBlH,IAASkH,EAAe,QASnB,iCAAiC,KAAK,UAAU,SAAS,MAC5DtD,IAAIsD,EAAe,YACnBrD,IAAIqD,EAAe,aAIhB;AAAA,IACL,OAAOnH;AAAA,IACP,QAAQC;AAAA,IACR,GAAG4D,IAAImD,GAAoBlJ,CAAO;AAAA,IAClC,GAAGgG;AAAA,EACP;AACA;AAIA,SAASsD,GAAgBtJ,GAAS;AAChC,MAAIuJ,GAEAH,IAAOzG,GAAmB3C,CAAO,GACjCwJ,IAAYT,GAAgB/I,CAAO,GACnCyJ,KAAQF,IAAwBvJ,EAAQ,kBAAkB,OAAO,SAASuJ,EAAsB,MAChGrH,IAAQZ,GAAI8H,EAAK,aAAaA,EAAK,aAAaK,IAAOA,EAAK,cAAc,GAAGA,IAAOA,EAAK,cAAc,CAAC,GACxGtH,IAASb,GAAI8H,EAAK,cAAcA,EAAK,cAAcK,IAAOA,EAAK,eAAe,GAAGA,IAAOA,EAAK,eAAe,CAAC,GAC7G1D,IAAI,CAACyD,EAAU,aAAaN,GAAoBlJ,CAAO,GACvDgG,IAAI,CAACwD,EAAU;AAEnB,SAAI/G,GAAiBgH,KAAQL,CAAI,EAAE,cAAc,UAC/CrD,KAAKzE,GAAI8H,EAAK,aAAaK,IAAOA,EAAK,cAAc,CAAC,IAAIvH,IAGrD;AAAA,IACL,OAAOA;AAAA,IACP,QAAQC;AAAA,IACR,GAAG4D;AAAA,IACH,GAAGC;AAAA,EACP;AACA;AAEA,SAAS0D,GAAe1J,GAAS;AAE/B,MAAI2J,IAAoBlH,GAAiBzC,CAAO,GAC5C4J,IAAWD,EAAkB,UAC7BE,IAAYF,EAAkB,WAC9BG,IAAYH,EAAkB;AAElC,SAAO,6BAA6B,KAAKC,IAAWE,IAAYD,CAAS;AAC3E;AAEA,SAASE,GAAgB7J,GAAM;AAC7B,SAAI,CAAC,QAAQ,QAAQ,WAAW,EAAE,QAAQH,GAAYG,CAAI,CAAC,KAAK,IAEvDA,EAAK,cAAc,OAGxBI,GAAcJ,CAAI,KAAKwJ,GAAexJ,CAAI,IACrCA,IAGF6J,GAAgBnH,GAAc1C,CAAI,CAAC;AAC5C;AASA,SAAS8J,GAAkBhK,GAASiK,GAAM;AACxC,MAAIV;AAEJ,EAAIU,MAAS,WACXA,IAAO,CAAA;AAGT,MAAIzB,IAAeuB,GAAgB/J,CAAO,GACtCkK,IAAS1B,QAAmBe,IAAwBvJ,EAAQ,kBAAkB,OAAO,SAASuJ,EAAsB,OACpHtD,IAAMhG,GAAUuI,CAAY,GAC5B2B,IAASD,IAAS,CAACjE,CAAG,EAAE,OAAOA,EAAI,kBAAkB,CAAA,GAAIyD,GAAelB,CAAY,IAAIA,IAAe,CAAA,CAAE,IAAIA,GAC7G4B,IAAcH,EAAK,OAAOE,CAAM;AACpC,SAAOD,IAASE;AAAA;AAAA,IAChBA,EAAY,OAAOJ,GAAkBpH,GAAcuH,CAAM,CAAC,CAAC;AAAA;AAC7D;AAEA,SAASE,GAAiB1I,GAAM;AAC9B,SAAO,OAAO,OAAO,CAAA,GAAIA,GAAM;AAAA,IAC7B,MAAMA,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK,IAAIA,EAAK;AAAA,IACrB,QAAQA,EAAK,IAAIA,EAAK;AAAA,EAC1B,CAAG;AACH;AAEA,SAAS2I,GAA2BtK,GAAS;AAC3C,MAAI2B,IAAOF,GAAsBzB,CAAO;AACxC,SAAA2B,EAAK,MAAMA,EAAK,MAAM3B,EAAQ,WAC9B2B,EAAK,OAAOA,EAAK,OAAO3B,EAAQ,YAChC2B,EAAK,SAASA,EAAK,MAAM3B,EAAQ,cACjC2B,EAAK,QAAQA,EAAK,OAAO3B,EAAQ,aACjC2B,EAAK,QAAQ3B,EAAQ,aACrB2B,EAAK,SAAS3B,EAAQ,cACtB2B,EAAK,IAAIA,EAAK,MACdA,EAAK,IAAIA,EAAK,KACPA;AACT;AAEA,SAAS4I,GAA2BvK,GAASwK,GAAgB;AAC3D,SAAOA,MAAmB1L,KAAWuL,GAAiBlB,GAAgBnJ,CAAO,CAAC,IAAII,GAAUoK,CAAc,IAAIF,GAA2BE,CAAc,IAAIH,GAAiBf,GAAgB3G,GAAmB3C,CAAO,CAAC,CAAC;AAC1N;AAKA,SAASyK,GAAmBzK,GAAS;AACnC,MAAInB,IAAkBmL,GAAkBpH,GAAc5C,CAAO,CAAC,GAC1D0K,IAAoB,CAAC,YAAY,OAAO,EAAE,QAAQjI,GAAiBzC,CAAO,EAAE,QAAQ,KAAK,GACzF2K,IAAiBD,KAAqBpK,GAAcN,CAAO,IAAIoD,GAAgBpD,CAAO,IAAIA;AAE9F,SAAKI,GAAUuK,CAAc,IAKtB9L,EAAgB,OAAO,SAAU2L,GAAgB;AACtD,WAAOpK,GAAUoK,CAAc,KAAKpI,GAASoI,GAAgBG,CAAc,KAAK5K,GAAYyK,CAAc,MAAM,WAAWE,IAAoBjI,GAAiB+H,CAAc,EAAE,aAAa,WAAW;AAAA,EAC1M,CAAC,IANQ,CAAA;AAOX;AAIA,SAASI,GAAgB5K,GAAS6K,GAAUC,GAAc;AACxD,MAAIC,IAAsBF,MAAa,oBAAoBJ,GAAmBzK,CAAO,IAAI,CAAA,EAAG,OAAO6K,CAAQ,GACvGhM,IAAkB,CAAA,EAAG,OAAOkM,GAAqB,CAACD,CAAY,CAAC,GAC/DE,IAAsBnM,EAAgB,CAAC,GACvCoM,IAAepM,EAAgB,OAAO,SAAUqM,GAASV,GAAgB;AAC3E,QAAI7I,IAAO4I,GAA2BvK,GAASwK,CAAc;AAC7D,WAAAU,EAAQ,MAAM5J,GAAIK,EAAK,KAAKuJ,EAAQ,GAAG,GACvCA,EAAQ,QAAQ3J,GAAII,EAAK,OAAOuJ,EAAQ,KAAK,GAC7CA,EAAQ,SAAS3J,GAAII,EAAK,QAAQuJ,EAAQ,MAAM,GAChDA,EAAQ,OAAO5J,GAAIK,EAAK,MAAMuJ,EAAQ,IAAI,GACnCA;AAAA,EACT,GAAGX,GAA2BvK,GAASgL,CAAmB,CAAC;AAC3D,SAAAC,EAAa,QAAQA,EAAa,QAAQA,EAAa,MACvDA,EAAa,SAASA,EAAa,SAASA,EAAa,KACzDA,EAAa,IAAIA,EAAa,MAC9BA,EAAa,IAAIA,EAAa,KACvBA;AACT;AAEA,SAASE,GAAe1K,GAAM;AAC5B,MAAIzB,IAAYyB,EAAK,WACjBT,IAAUS,EAAK,SACftB,IAAYsB,EAAK,WACjBiE,IAAgBvF,IAAYkC,GAAiBlC,CAAS,IAAI,MAC1DmH,IAAYnH,IAAYyG,GAAazG,CAAS,IAAI,MAClDiM,IAAUpM,EAAU,IAAIA,EAAU,QAAQ,IAAIgB,EAAQ,QAAQ,GAC9DqL,IAAUrM,EAAU,IAAIA,EAAU,SAAS,IAAIgB,EAAQ,SAAS,GAChEuG;AAEJ,UAAQ7B,GAAa;AAAA,IACnB,KAAKrG;AACH,MAAAkI,IAAU;AAAA,QACR,GAAG6E;AAAA,QACH,GAAGpM,EAAU,IAAIgB,EAAQ;AAAA,MACjC;AACM;AAAA,IAEF,KAAK1B;AACH,MAAAiI,IAAU;AAAA,QACR,GAAG6E;AAAA,QACH,GAAGpM,EAAU,IAAIA,EAAU;AAAA,MACnC;AACM;AAAA,IAEF,KAAKT;AACH,MAAAgI,IAAU;AAAA,QACR,GAAGvH,EAAU,IAAIA,EAAU;AAAA,QAC3B,GAAGqM;AAAA,MACX;AACM;AAAA,IAEF,KAAK7M;AACH,MAAA+H,IAAU;AAAA,QACR,GAAGvH,EAAU,IAAIgB,EAAQ;AAAA,QACzB,GAAGqL;AAAA,MACX;AACM;AAAA,IAEF;AACE,MAAA9E,IAAU;AAAA,QACR,GAAGvH,EAAU;AAAA,QACb,GAAGA,EAAU;AAAA,MACrB;AAAA,EACA;AAEE,MAAIsM,IAAW5G,IAAgBnB,GAAyBmB,CAAa,IAAI;AAEzE,MAAI4G,KAAY,MAAM;AACpB,QAAIzG,IAAMyG,MAAa,MAAM,WAAW;AAExC,YAAQhF,GAAS;AAAA,MACf,KAAK3H;AACH,QAAA4H,EAAQ+E,CAAQ,IAAI/E,EAAQ+E,CAAQ,KAAKtM,EAAU6F,CAAG,IAAI,IAAI7E,EAAQ6E,CAAG,IAAI;AAC7E;AAAA,MAEF,KAAKjG;AACH,QAAA2H,EAAQ+E,CAAQ,IAAI/E,EAAQ+E,CAAQ,KAAKtM,EAAU6F,CAAG,IAAI,IAAI7E,EAAQ6E,CAAG,IAAI;AAC7E;AAAA,IACR;AAAA,EACE;AAEA,SAAO0B;AACT;AAEA,SAASgF,GAAe7K,GAAOnE,GAAS;AACtC,EAAIA,MAAY,WACdA,IAAU,CAAA;AAGZ,MAAIiP,IAAWjP,GACXkP,IAAqBD,EAAS,WAC9BrM,IAAYsM,MAAuB,SAAS/K,EAAM,YAAY+K,GAC9DC,IAAoBF,EAAS,UAC7BX,IAAWa,MAAsB,SAAS7M,KAAkB6M,GAC5DC,IAAwBH,EAAS,cACjCV,IAAea,MAA0B,SAAS7M,KAAW6M,GAC7DC,IAAwBJ,EAAS,gBACjCK,IAAiBD,MAA0B,SAAS7M,KAAS6M,GAC7DE,IAAuBN,EAAS,aAChCO,IAAcD,MAAyB,SAAS,KAAQA,GACxDE,IAAmBR,EAAS,SAC5BnH,IAAU2H,MAAqB,SAAS,IAAIA,GAC5CjI,IAAgBD,GAAmB,OAAOO,KAAY,WAAWA,IAAUL,GAAgBK,GAAS3F,EAAc,CAAC,GACnHuN,IAAaJ,MAAmB9M,KAASC,KAAYD,IACrDsH,IAAa3F,EAAM,MAAM,QACzBV,IAAUU,EAAM,SAASqL,IAAcE,IAAaJ,CAAc,GAClEK,IAAqBtB,GAAgBxK,GAAUJ,CAAO,IAAIA,IAAUA,EAAQ,kBAAkB2C,GAAmBjC,EAAM,SAAS,MAAM,GAAGmK,GAAUC,CAAY,GAC/JqB,IAAsB1K,GAAsBf,EAAM,SAAS,SAAS,GACpE+D,IAAgB0G,GAAe;AAAA,IACjC,WAAWgB;AAAA,IACX,SAAS9F;AAAA,IAET,WAAWlH;AAAA,EACf,CAAG,GACGiN,IAAmB/B,GAAiB,OAAO,OAAO,IAAIhE,GAAY5B,CAAa,CAAC,GAChF4H,IAAoBR,MAAmB9M,KAASqN,IAAmBD,GAGnEG,IAAkB;AAAA,IACpB,KAAKJ,EAAmB,MAAMG,EAAkB,MAAMtI,EAAc;AAAA,IACpE,QAAQsI,EAAkB,SAASH,EAAmB,SAASnI,EAAc;AAAA,IAC7E,MAAMmI,EAAmB,OAAOG,EAAkB,OAAOtI,EAAc;AAAA,IACvE,OAAOsI,EAAkB,QAAQH,EAAmB,QAAQnI,EAAc;AAAA,EAC9E,GACMwI,KAAa7L,EAAM,cAAc;AAErC,MAAImL,MAAmB9M,MAAUwN,IAAY;AAC3C,QAAIhH,IAASgH,GAAWpN,CAAS;AACjC,WAAO,KAAKmN,CAAe,EAAE,QAAQ,SAAUnI,GAAK;AAClD,UAAIqI,IAAW,CAACjO,IAAOD,EAAM,EAAE,QAAQ6F,CAAG,KAAK,IAAI,IAAI,IACnDQ,IAAO,CAACtG,IAAKC,EAAM,EAAE,QAAQ6F,CAAG,KAAK,IAAI,MAAM;AACnD,MAAAmI,EAAgBnI,CAAG,KAAKoB,EAAOZ,CAAI,IAAI6H;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,SAAOF;AACT;AAEA,SAASG,GAAqB/L,GAAOnE,GAAS;AAC5C,EAAIA,MAAY,WACdA,IAAU,CAAA;AAGZ,MAAIiP,IAAWjP,GACX4C,IAAYqM,EAAS,WACrBX,IAAWW,EAAS,UACpBV,IAAeU,EAAS,cACxBnH,IAAUmH,EAAS,SACnBkB,IAAiBlB,EAAS,gBAC1BmB,IAAwBnB,EAAS,uBACjCoB,IAAwBD,MAA0B,SAASvN,KAAauN,GACxErG,IAAYV,GAAazG,CAAS,GAClC0N,IAAevG,IAAYoG,IAAiBzN,KAAsBA,GAAoB,OAAO,SAAUE,GAAW;AACpH,WAAOyG,GAAazG,CAAS,MAAMmH;AAAA,EACrC,CAAC,IAAI5H,IACDoO,IAAoBD,EAAa,OAAO,SAAU1N,GAAW;AAC/D,WAAOyN,EAAsB,QAAQzN,CAAS,KAAK;AAAA,EACrD,CAAC;AAED,EAAI2N,EAAkB,WAAW,MAC/BA,IAAoBD;AAItB,MAAIE,IAAYD,EAAkB,OAAO,SAAU5N,GAAKC,GAAW;AACjE,WAAAD,EAAIC,CAAS,IAAIoM,GAAe7K,GAAO;AAAA,MACrC,WAAWvB;AAAA,MACX,UAAU0L;AAAA,MACV,cAAcC;AAAA,MACd,SAASzG;AAAA,IACf,CAAK,EAAEhD,GAAiBlC,CAAS,CAAC,GACvBD;AAAA,EACT,GAAG,CAAA,CAAE;AACL,SAAO,OAAO,KAAK6N,CAAS,EAAE,KAAK,SAAUC,GAAGC,GAAG;AACjD,WAAOF,EAAUC,CAAC,IAAID,EAAUE,CAAC;AAAA,EACnC,CAAC;AACH;AAEA,SAASC,GAA8B/N,GAAW;AAChD,MAAIkC,GAAiBlC,CAAS,MAAMV;AAClC,WAAO,CAAA;AAGT,MAAI0O,IAAoBxE,GAAqBxJ,CAAS;AACtD,SAAO,CAAC2J,GAA8B3J,CAAS,GAAGgO,GAAmBrE,GAA8BqE,CAAiB,CAAC;AACvH;AAEA,SAASC,GAAK3M,GAAM;AAClB,MAAIC,IAAQD,EAAK,OACblE,IAAUkE,EAAK,SACfE,IAAOF,EAAK;AAEhB,MAAI,CAAAC,EAAM,cAAcC,CAAI,EAAE,OAoC9B;AAAA,aAhCI0M,IAAoB9Q,EAAQ,UAC5B+Q,IAAgBD,MAAsB,SAAS,KAAOA,GACtDE,IAAmBhR,EAAQ,SAC3BiR,IAAeD,MAAqB,SAAS,KAAOA,GACpDE,IAA8BlR,EAAQ,oBACtC8H,IAAU9H,EAAQ,SAClBsO,IAAWtO,EAAQ,UACnBuO,IAAevO,EAAQ,cACvBwP,IAAcxP,EAAQ,aACtBmR,IAAwBnR,EAAQ,gBAChCmQ,IAAiBgB,MAA0B,SAAS,KAAOA,GAC3Dd,IAAwBrQ,EAAQ,uBAChCoR,IAAqBjN,EAAM,QAAQ,WACnCgE,IAAgBrD,GAAiBsM,CAAkB,GACnDC,IAAkBlJ,MAAkBiJ,GACpCE,IAAqBJ,MAAgCG,KAAmB,CAAClB,IAAiB,CAAC/D,GAAqBgF,CAAkB,CAAC,IAAIT,GAA8BS,CAAkB,IACvLvO,IAAa,CAACuO,CAAkB,EAAE,OAAOE,CAAkB,EAAE,OAAO,SAAU3O,IAAKC,IAAW;AAChG,aAAOD,GAAI,OAAOmC,GAAiBlC,EAAS,MAAMV,KAAOgO,GAAqB/L,GAAO;AAAA,QACnF,WAAWvB;AAAA,QACX,UAAU0L;AAAA,QACV,cAAcC;AAAA,QACd,SAASzG;AAAA,QACT,gBAAgBqI;AAAA,QAChB,uBAAuBE;AAAA,MAC7B,CAAK,IAAIzN,EAAS;AAAA,IAChB,GAAG,CAAA,CAAE,GACD2O,IAAgBpN,EAAM,MAAM,WAC5B2F,IAAa3F,EAAM,MAAM,QACzBqN,IAAY,oBAAI,IAAG,GACnBC,IAAqB,IACrBC,KAAwB7O,EAAW,CAAC,GAE/B8O,IAAI,GAAGA,IAAI9O,EAAW,QAAQ8O,KAAK;AAC1C,UAAI/O,IAAYC,EAAW8O,CAAC,GAExBC,IAAiB9M,GAAiBlC,CAAS,GAE3CiP,IAAmBxI,GAAazG,CAAS,MAAMR,IAC/CiG,KAAa,CAACvG,IAAKC,EAAM,EAAE,QAAQ6P,CAAc,KAAK,GACtDtJ,KAAMD,KAAa,UAAU,UAC7BgF,KAAW2B,GAAe7K,GAAO;AAAA,QACnC,WAAWvB;AAAA,QACX,UAAU0L;AAAA,QACV,cAAcC;AAAA,QACd,aAAaiB;AAAA,QACb,SAAS1H;AAAA,MACf,CAAK,GACGgK,KAAoBzJ,KAAawJ,IAAmB7P,KAAQC,KAAO4P,IAAmB9P,KAASD;AAEnG,MAAIyP,EAAcjJ,EAAG,IAAIwB,EAAWxB,EAAG,MACrCwJ,KAAoB1F,GAAqB0F,EAAiB;AAG5D,UAAIC,IAAmB3F,GAAqB0F,EAAiB,GACzDE,KAAS,CAAA;AAUb,UARIjB,KACFiB,GAAO,KAAK3E,GAASuE,CAAc,KAAK,CAAC,GAGvCX,KACFe,GAAO,KAAK3E,GAASyE,EAAiB,KAAK,GAAGzE,GAAS0E,CAAgB,KAAK,CAAC,GAG3EC,GAAO,MAAM,SAAUC,IAAO;AAChC,eAAOA;AAAA,MACT,CAAC,GAAG;AACF,QAAAP,KAAwB9O,GACxB6O,IAAqB;AACrB;AAAA,MACF;AAEA,MAAAD,EAAU,IAAI5O,GAAWoP,EAAM;AAAA,IACjC;AAEA,QAAIP;AAqBF,eAnBIS,IAAiB/B,IAAiB,IAAI,GAEtCgC,IAAQ,SAAeC,IAAI;AAC7B,YAAIC,KAAmBxP,EAAW,KAAK,SAAUD,IAAW;AAC1D,cAAIoP,IAASR,EAAU,IAAI5O,EAAS;AAEpC,cAAIoP;AACF,mBAAOA,EAAO,MAAM,GAAGI,EAAE,EAAE,MAAM,SAAUH,GAAO;AAChD,qBAAOA;AAAA,YACT,CAAC;AAAA,QAEL,CAAC;AAED,YAAII;AACF,iBAAAX,KAAwBW,IACjB;AAAA,MAEX,GAESD,IAAKF,GAAgBE,IAAK,GAAGA,KAAM;AAC1C,YAAIE,IAAOH,EAAMC,CAAE;AAEnB,YAAIE,MAAS,QAAS;AAAA,MACxB;AAGF,IAAInO,EAAM,cAAcuN,OACtBvN,EAAM,cAAcC,CAAI,EAAE,QAAQ,IAClCD,EAAM,YAAYuN,IAClBvN,EAAM,QAAQ;AAAA;AAElB;AAGA,IAAIoO,KAAS;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAI1B;AAAA,EACJ,kBAAkB,CAAC,QAAQ;AAAA,EAC3B,MAAM;AAAA,IACJ,OAAO;AAAA,EACX;AACA;AAEA,SAAS2B,GAAenF,GAAUjI,GAAMqN,GAAkB;AACxD,SAAIA,MAAqB,WACvBA,IAAmB;AAAA,IACjB,GAAG;AAAA,IACH,GAAG;AAAA,EACT,IAGS;AAAA,IACL,KAAKpF,EAAS,MAAMjI,EAAK,SAASqN,EAAiB;AAAA,IACnD,OAAOpF,EAAS,QAAQjI,EAAK,QAAQqN,EAAiB;AAAA,IACtD,QAAQpF,EAAS,SAASjI,EAAK,SAASqN,EAAiB;AAAA,IACzD,MAAMpF,EAAS,OAAOjI,EAAK,QAAQqN,EAAiB;AAAA,EACxD;AACA;AAEA,SAASC,GAAsBrF,GAAU;AACvC,SAAO,CAACvL,IAAKE,IAAOD,IAAQE,EAAI,EAAE,KAAK,SAAU0Q,GAAM;AACrD,WAAOtF,EAASsF,CAAI,KAAK;AAAA,EAC3B,CAAC;AACH;AAEA,SAASC,GAAK1O,GAAM;AAClB,MAAIC,IAAQD,EAAK,OACbE,IAAOF,EAAK,MACZqN,IAAgBpN,EAAM,MAAM,WAC5B2F,IAAa3F,EAAM,MAAM,QACzBsO,IAAmBtO,EAAM,cAAc,iBACvC0O,IAAoB7D,GAAe7K,GAAO;AAAA,IAC5C,gBAAgB;AAAA,EACpB,CAAG,GACG2O,IAAoB9D,GAAe7K,GAAO;AAAA,IAC5C,aAAa;AAAA,EACjB,CAAG,GACG4O,IAA2BP,GAAeK,GAAmBtB,CAAa,GAC1EyB,IAAsBR,GAAeM,GAAmBhJ,GAAY2I,CAAgB,GACpFQ,IAAoBP,GAAsBK,CAAwB,GAClEG,IAAmBR,GAAsBM,CAAmB;AAChE,EAAA7O,EAAM,cAAcC,CAAI,IAAI;AAAA,IAC1B,0BAA0B2O;AAAA,IAC1B,qBAAqBC;AAAA,IACrB,mBAAmBC;AAAA,IACnB,kBAAkBC;AAAA,EACtB,GACE/O,EAAM,WAAW,SAAS,OAAO,OAAO,IAAIA,EAAM,WAAW,QAAQ;AAAA,IACnE,gCAAgC8O;AAAA,IAChC,uBAAuBC;AAAA,EAC3B,CAAG;AACH;AAGA,IAAIC,KAAS;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,kBAAkB,CAAC,iBAAiB;AAAA,EACpC,IAAIP;AACN;AAEA,SAASQ,GAAwBxQ,GAAWyQ,GAAOrK,GAAQ;AACzD,MAAIb,IAAgBrD,GAAiBlC,CAAS,GAC1C0Q,IAAiB,CAACrR,IAAMH,EAAG,EAAE,QAAQqG,CAAa,KAAK,IAAI,KAAK,GAEhEjE,IAAO,OAAO8E,KAAW,aAAaA,EAAO,OAAO,OAAO,CAAA,GAAIqK,GAAO;AAAA,IACxE,WAAWzQ;AAAA,EACf,CAAG,CAAC,IAAIoG,GACFuK,IAAWrP,EAAK,CAAC,GACjBsP,IAAWtP,EAAK,CAAC;AAErB,SAAAqP,IAAWA,KAAY,GACvBC,KAAYA,KAAY,KAAKF,GACtB,CAACrR,IAAMD,EAAK,EAAE,QAAQmG,CAAa,KAAK,IAAI;AAAA,IACjD,GAAGqL;AAAA,IACH,GAAGD;AAAA,EACP,IAAM;AAAA,IACF,GAAGA;AAAA,IACH,GAAGC;AAAA,EACP;AACA;AAEA,SAASxK,GAAOxE,GAAO;AACrB,MAAIL,IAAQK,EAAM,OACdxE,IAAUwE,EAAM,SAChBJ,IAAOI,EAAM,MACbiP,IAAkBzT,EAAQ,QAC1BgJ,IAASyK,MAAoB,SAAS,CAAC,GAAG,CAAC,IAAIA,GAC/CC,IAAO7Q,GAAW,OAAO,SAAUF,GAAKC,GAAW;AACrD,WAAAD,EAAIC,CAAS,IAAIwQ,GAAwBxQ,GAAWuB,EAAM,OAAO6E,CAAM,GAChErG;AAAA,EACT,GAAG,CAAA,CAAE,GACDgR,IAAwBD,EAAKvP,EAAM,SAAS,GAC5CqF,IAAImK,EAAsB,GAC1BlK,IAAIkK,EAAsB;AAE9B,EAAIxP,EAAM,cAAc,iBAAiB,SACvCA,EAAM,cAAc,cAAc,KAAKqF,GACvCrF,EAAM,cAAc,cAAc,KAAKsF,IAGzCtF,EAAM,cAAcC,CAAI,IAAIsP;AAC9B;AAGA,IAAIE,KAAW;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU,CAAC,eAAe;AAAA,EAC1B,IAAI5K;AACN;AAEA,SAASd,GAAchE,GAAM;AAC3B,MAAIC,IAAQD,EAAK,OACbE,IAAOF,EAAK;AAKhB,EAAAC,EAAM,cAAcC,CAAI,IAAIwK,GAAe;AAAA,IACzC,WAAWzK,EAAM,MAAM;AAAA,IACvB,SAASA,EAAM,MAAM;AAAA,IAErB,WAAWA,EAAM;AAAA,EACrB,CAAG;AACH;AAGA,IAAI0P,KAAkB;AAAA,EACpB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAI3L;AAAA,EACJ,MAAM,CAAA;AACR;AAEA,SAAS4L,GAAW1L,GAAM;AACxB,SAAOA,MAAS,MAAM,MAAM;AAC9B;AAEA,SAAS2L,GAAgB7P,GAAM;AAC7B,MAAIC,IAAQD,EAAK,OACblE,IAAUkE,EAAK,SACfE,IAAOF,EAAK,MACZ4M,IAAoB9Q,EAAQ,UAC5B+Q,IAAgBD,MAAsB,SAAS,KAAOA,GACtDE,IAAmBhR,EAAQ,SAC3BiR,IAAeD,MAAqB,SAAS,KAAQA,GACrD1C,IAAWtO,EAAQ,UACnBuO,IAAevO,EAAQ,cACvBwP,IAAcxP,EAAQ,aACtB8H,IAAU9H,EAAQ,SAClBgU,IAAkBhU,EAAQ,QAC1BiU,IAASD,MAAoB,SAAS,KAAOA,GAC7CE,IAAwBlU,EAAQ,cAChCmU,IAAeD,MAA0B,SAAS,IAAIA,GACtD7G,IAAW2B,GAAe7K,GAAO;AAAA,IACnC,UAAUmK;AAAA,IACV,cAAcC;AAAA,IACd,SAASzG;AAAA,IACT,aAAa0H;AAAA,EACjB,CAAG,GACGrH,IAAgBrD,GAAiBX,EAAM,SAAS,GAChD4F,IAAYV,GAAalF,EAAM,SAAS,GACxCkN,IAAkB,CAACtH,GACnBgF,IAAW/H,GAAyBmB,CAAa,GACjDiM,IAAUN,GAAW/E,CAAQ,GAC7B7G,IAAgB/D,EAAM,cAAc,eACpCoN,IAAgBpN,EAAM,MAAM,WAC5B2F,IAAa3F,EAAM,MAAM,QACzBkQ,KAAoB,OAAOF,KAAiB,aAAaA,EAAa,OAAO,OAAO,CAAA,GAAIhQ,EAAM,OAAO;AAAA,IACvG,WAAWA,EAAM;AAAA,EACrB,CAAG,CAAC,IAAIgQ,GACFG,IAA8B,OAAOD,MAAsB,WAAW;AAAA,IACxE,UAAUA;AAAA,IACV,SAASA;AAAA,EACb,IAAM,OAAO,OAAO;AAAA,IAChB,UAAU;AAAA,IACV,SAAS;AAAA,EACb,GAAKA,EAAiB,GAChBE,IAAsBpQ,EAAM,cAAc,SAASA,EAAM,cAAc,OAAOA,EAAM,SAAS,IAAI,MACjGuP,IAAO;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AAEE,MAAKxL,GAIL;AAAA,QAAI6I,GAAe;AACjB,UAAIyD,GAEAC,KAAW1F,MAAa,MAAMjN,KAAMG,IACpCyS,KAAU3F,MAAa,MAAMhN,KAASC,IACtCsG,KAAMyG,MAAa,MAAM,WAAW,SACpC/F,KAASd,EAAc6G,CAAQ,GAC/B7H,IAAQ8B,KAASqE,EAASoH,EAAQ,GAClCtN,KAAQ6B,KAASqE,EAASqH,EAAO,GACjCC,IAAWV,IAAS,CAACnK,EAAWxB,EAAG,IAAI,IAAI,GAC3CsM,IAAS7K,MAAc3H,KAAQmP,EAAcjJ,EAAG,IAAIwB,EAAWxB,EAAG,GAClEuM,IAAS9K,MAAc3H,KAAQ,CAAC0H,EAAWxB,EAAG,IAAI,CAACiJ,EAAcjJ,EAAG,GAGpEL,IAAe9D,EAAM,SAAS,OAC9BoE,KAAY0L,KAAUhM,IAAexC,GAAcwC,CAAY,IAAI;AAAA,QACrE,OAAO;AAAA,QACP,QAAQ;AAAA,MACd,GACQ6M,KAAqB3Q,EAAM,cAAc,kBAAkB,IAAIA,EAAM,cAAc,kBAAkB,EAAE,UAAUmD,GAAkB,GACnIyN,KAAkBD,GAAmBL,EAAQ,GAC7CO,KAAkBF,GAAmBJ,EAAO,GAM5CO,IAAWhO,GAAO,GAAGsK,EAAcjJ,EAAG,GAAGC,GAAUD,EAAG,CAAC,GACvD4M,IAAY7D,IAAkBE,EAAcjJ,EAAG,IAAI,IAAIqM,IAAWM,IAAWF,KAAkBT,EAA4B,WAAWM,IAASK,IAAWF,KAAkBT,EAA4B,UACxMa,KAAY9D,IAAkB,CAACE,EAAcjJ,EAAG,IAAI,IAAIqM,IAAWM,IAAWD,KAAkBV,EAA4B,WAAWO,IAASI,IAAWD,KAAkBV,EAA4B,UACzM1L,KAAoBzE,EAAM,SAAS,SAAS0C,GAAgB1C,EAAM,SAAS,KAAK,GAChFiR,KAAexM,KAAoBmG,MAAa,MAAMnG,GAAkB,aAAa,IAAIA,GAAkB,cAAc,IAAI,GAC7HyM,KAAuBb,IAA+DD,IAAoBxF,CAAQ,MAAM,OAAOyF,IAAwB,GACvJc,IAAYtM,KAASkM,IAAYG,IAAsBD,IACvDG,IAAYvM,KAASmM,KAAYE,GACjCG,KAAkBvO,GAAOgN,IAASjP,GAAIkC,GAAOoO,CAAS,IAAIpO,GAAO8B,IAAQiL,IAASlP,GAAIoC,IAAOoO,CAAS,IAAIpO,EAAK;AACnH,MAAAe,EAAc6G,CAAQ,IAAIyG,IAC1B9B,EAAK3E,CAAQ,IAAIyG,KAAkBxM;AAAA,IACrC;AAEA,QAAIiI,GAAc;AAChB,UAAIwE,GAEAC,KAAY3G,MAAa,MAAMjN,KAAMG,IAErC0T,IAAW5G,MAAa,MAAMhN,KAASC,IAEvC4T,IAAU1N,EAAckM,CAAO,GAE/ByB,IAAOzB,MAAY,MAAM,WAAW,SAEpC0B,IAAOF,IAAUvI,EAASqI,EAAS,GAEnCK,KAAOH,IAAUvI,EAASsI,CAAQ,GAElCK,KAAe,CAAClU,IAAKG,EAAI,EAAE,QAAQkG,CAAa,MAAM,IAEtD8N,MAAwBR,IAAgElB,IAAoBH,CAAO,MAAM,OAAOqB,IAAyB,GAEzJS,KAAaF,KAAeF,IAAOF,IAAUrE,EAAcsE,CAAI,IAAI/L,EAAW+L,CAAI,IAAII,KAAuB3B,EAA4B,SAEzI6B,IAAaH,KAAeJ,IAAUrE,EAAcsE,CAAI,IAAI/L,EAAW+L,CAAI,IAAII,KAAuB3B,EAA4B,UAAUyB,IAE5IK,IAAmBnC,KAAU+B,KAAe5O,GAAe8O,IAAYN,GAASO,CAAU,IAAIlP,GAAOgN,IAASiC,KAAaJ,GAAMF,GAAS3B,IAASkC,IAAaJ,EAAI;AAExK,MAAA7N,EAAckM,CAAO,IAAIgC,GACzB1C,EAAKU,CAAO,IAAIgC,IAAmBR;AAAA,IACrC;AAEA,IAAAzR,EAAM,cAAcC,CAAI,IAAIsP;AAAA;AAC9B;AAGA,IAAI2C,KAAoB;AAAA,EACtB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAItC;AAAA,EACJ,kBAAkB,CAAC,QAAQ;AAC7B;AAEA,SAASuC,GAAqB7S,GAAS;AACrC,SAAO;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACvB;AACA;AAEA,SAAS8S,GAAc5S,GAAM;AAC3B,SAAIA,MAASD,GAAUC,CAAI,KAAK,CAACI,GAAcJ,CAAI,IAC1C6I,GAAgB7I,CAAI,IAEpB2S,GAAqB3S,CAAI;AAEpC;AAEA,SAAS6S,GAAgB/S,GAAS;AAChC,MAAI2B,IAAO3B,EAAQ,sBAAqB,GACpC4B,IAASJ,GAAMG,EAAK,KAAK,IAAI3B,EAAQ,eAAe,GACpD6B,IAASL,GAAMG,EAAK,MAAM,IAAI3B,EAAQ,gBAAgB;AAC1D,SAAO4B,MAAW,KAAKC,MAAW;AACpC;AAIA,SAASmR,GAAiBC,GAAyB3P,GAAcsD,GAAS;AACxE,EAAIA,MAAY,WACdA,IAAU;AAGZ,MAAIsM,IAA0B5S,GAAcgD,CAAY,GACpD6P,IAAuB7S,GAAcgD,CAAY,KAAKyP,GAAgBzP,CAAY,GAClF8P,IAAkBzQ,GAAmBW,CAAY,GACjD3B,IAAOF,GAAsBwR,GAAyBE,CAAoB,GAC1E/K,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf,GACM7B,IAAU;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AAEE,UAAI2M,KAA2B,CAACA,KAA2B,CAACtM,QACtD7G,GAAYuD,CAAY,MAAM;AAAA,EAClCoG,GAAe0J,CAAe,OAC5BhL,IAAS0K,GAAcxP,CAAY,IAGjChD,GAAcgD,CAAY,KAC5BiD,IAAU9E,GAAsB6B,GAAc,EAAI,GAClDiD,EAAQ,KAAKjD,EAAa,YAC1BiD,EAAQ,KAAKjD,EAAa,aACjB8P,MACT7M,EAAQ,IAAI2C,GAAoBkK,CAAe,KAI5C;AAAA,IACL,GAAGzR,EAAK,OAAOyG,EAAO,aAAa7B,EAAQ;AAAA,IAC3C,GAAG5E,EAAK,MAAMyG,EAAO,YAAY7B,EAAQ;AAAA,IACzC,OAAO5E,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACjB;AACA;AAEA,SAAS0R,GAAMC,GAAW;AACxB,MAAIC,IAAM,oBAAI,IAAG,GACbC,IAAU,oBAAI,IAAG,GACjBC,IAAS,CAAA;AACb,EAAAH,EAAU,QAAQ,SAAUI,GAAU;AACpC,IAAAH,EAAI,IAAIG,EAAS,MAAMA,CAAQ;AAAA,EACjC,CAAC;AAED,WAASC,EAAKD,GAAU;AACtB,IAAAF,EAAQ,IAAIE,EAAS,IAAI;AACzB,QAAIE,IAAW,GAAG,OAAOF,EAAS,YAAY,IAAIA,EAAS,oBAAoB,EAAE;AACjF,IAAAE,EAAS,QAAQ,SAAUC,GAAK;AAC9B,UAAI,CAACL,EAAQ,IAAIK,CAAG,GAAG;AACrB,YAAIC,IAAcP,EAAI,IAAIM,CAAG;AAE7B,QAAIC,KACFH,EAAKG,CAAW;AAAA,MAEpB;AAAA,IACF,CAAC,GACDL,EAAO,KAAKC,CAAQ;AAAA,EACtB;AAEA,SAAAJ,EAAU,QAAQ,SAAUI,GAAU;AACpC,IAAKF,EAAQ,IAAIE,EAAS,IAAI,KAE5BC,EAAKD,CAAQ;AAAA,EAEjB,CAAC,GACMD;AACT;AAEA,SAASM,GAAeT,GAAW;AAEjC,MAAIU,IAAmBX,GAAMC,CAAS;AAEtC,SAAOxT,GAAe,OAAO,SAAUZ,GAAK+U,GAAO;AACjD,WAAO/U,EAAI,OAAO8U,EAAiB,OAAO,SAAUN,GAAU;AAC5D,aAAOA,EAAS,UAAUO;AAAA,IAC5B,CAAC,CAAC;AAAA,EACJ,GAAG,CAAA,CAAE;AACP;AAEA,SAASC,GAAS9V,GAAI;AACpB,MAAI+V;AACJ,SAAO,WAAY;AACjB,WAAKA,MACHA,IAAU,IAAI,QAAQ,SAAUC,GAAS;AACvC,cAAQ,UAAU,KAAK,WAAY;AACjC,QAAAD,IAAU,QACVC,EAAQhW,EAAE,CAAE;AAAA,MACd,CAAC;AAAA,IACH,CAAC,IAGI+V;AAAA,EACT;AACF;AAEA,SAASE,GAAYf,GAAW;AAC9B,MAAIgB,IAAShB,EAAU,OAAO,SAAUgB,GAAQC,GAAS;AACvD,QAAIC,IAAWF,EAAOC,EAAQ,IAAI;AAClC,WAAAD,EAAOC,EAAQ,IAAI,IAAIC,IAAW,OAAO,OAAO,CAAA,GAAIA,GAAUD,GAAS;AAAA,MACrE,SAAS,OAAO,OAAO,CAAA,GAAIC,EAAS,SAASD,EAAQ,OAAO;AAAA,MAC5D,MAAM,OAAO,OAAO,CAAA,GAAIC,EAAS,MAAMD,EAAQ,IAAI;AAAA,IACzD,CAAK,IAAIA,GACED;AAAA,EACT,GAAG,CAAA,CAAE;AAEL,SAAO,OAAO,KAAKA,CAAM,EAAE,IAAI,SAAUnQ,GAAK;AAC5C,WAAOmQ,EAAOnQ,CAAG;AAAA,EACnB,CAAC;AACH;AAEA,IAAIsQ,KAAkB;AAAA,EACpB,WAAW;AAAA,EACX,WAAW,CAAA;AAAA,EACX,UAAU;AACZ;AAEA,SAASC,KAAmB;AAC1B,WAAStC,IAAO,UAAU,QAAQpV,IAAO,IAAI,MAAMoV,CAAI,GAAGuC,IAAO,GAAGA,IAAOvC,GAAMuC;AAC/E,IAAA3X,EAAK2X,CAAI,IAAI,UAAUA,CAAI;AAG7B,SAAO,CAAC3X,EAAK,KAAK,SAAUgD,GAAS;AACnC,WAAO,EAAEA,KAAW,OAAOA,EAAQ,yBAA0B;AAAA,EAC/D,CAAC;AACH;AAEA,SAAS4U,GAAgBC,GAAkB;AACzC,EAAIA,MAAqB,WACvBA,IAAmB,CAAA;AAGrB,MAAIC,IAAoBD,GACpBE,IAAwBD,EAAkB,kBAC1CE,IAAmBD,MAA0B,SAAS,CAAA,IAAKA,GAC3DE,IAAyBH,EAAkB,gBAC3CI,IAAiBD,MAA2B,SAASR,KAAkBQ;AAC3E,SAAO,SAAsBjW,GAAWD,GAAQxC,GAAS;AACvD,IAAIA,MAAY,WACdA,IAAU2Y;AAGZ,QAAIxU,IAAQ;AAAA,MACV,WAAW;AAAA,MACX,kBAAkB,CAAA;AAAA,MAClB,SAAS,OAAO,OAAO,CAAA,GAAI+T,IAAiBS,CAAc;AAAA,MAC1D,eAAe,CAAA;AAAA,MACf,UAAU;AAAA,QACR,WAAWlW;AAAA,QACX,QAAQD;AAAA,MAChB;AAAA,MACM,YAAY,CAAA;AAAA,MACZ,QAAQ,CAAA;AAAA,IACd,GACQoW,IAAmB,CAAA,GACnBC,IAAc,IACdlN,IAAW;AAAA,MACb,OAAOxH;AAAA,MACP,YAAY,SAAoB2U,GAAkB;AAChD,YAAI9Y,IAAU,OAAO8Y,KAAqB,aAAaA,EAAiB3U,EAAM,OAAO,IAAI2U;AACzF,QAAAC,EAAsB,GACtB5U,EAAM,UAAU,OAAO,OAAO,CAAA,GAAIwU,GAAgBxU,EAAM,SAASnE,CAAO,GACxEmE,EAAM,gBAAgB;AAAA,UACpB,WAAWN,GAAUpB,CAAS,IAAIgL,GAAkBhL,CAAS,IAAIA,EAAU,iBAAiBgL,GAAkBhL,EAAU,cAAc,IAAI,CAAA;AAAA,UAC1I,QAAQgL,GAAkBjL,CAAM;AAAA,QAC1C;AAGQ,YAAIiV,IAAmBD,GAAeM,GAAY,GAAG,OAAOW,GAAkBtU,EAAM,QAAQ,SAAS,CAAC,CAAC;AAEvG,eAAAA,EAAM,mBAAmBsT,EAAiB,OAAO,SAAUuB,GAAG;AAC5D,iBAAOA,EAAE;AAAA,QACX,CAAC,GAEDC,EAAkB,GACXtN,EAAS,OAAM;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAa,WAAuB;AAClC,YAAI,CAAAkN,GAIJ;AAAA,cAAIK,IAAkB/U,EAAM,UACxB1B,IAAYyW,EAAgB,WAC5B1W,IAAS0W,EAAgB;AAG7B,cAAKf,GAAiB1V,GAAWD,CAAM,GAMvC;AAAA,YAAA2B,EAAM,QAAQ;AAAA,cACZ,WAAWsS,GAAiBhU,GAAWoE,GAAgBrE,CAAM,GAAG2B,EAAM,QAAQ,aAAa,OAAO;AAAA,cAClG,QAAQsB,GAAcjD,CAAM;AAAA,YACtC,GAMQ2B,EAAM,QAAQ,IACdA,EAAM,YAAYA,EAAM,QAAQ,WAKhCA,EAAM,iBAAiB,QAAQ,SAAUgT,GAAU;AACjD,qBAAOhT,EAAM,cAAcgT,EAAS,IAAI,IAAI,OAAO,OAAO,CAAA,GAAIA,EAAS,IAAI;AAAA,YAC7E,CAAC;AAED,qBAASgC,IAAQ,GAAGA,IAAQhV,EAAM,iBAAiB,QAAQgV,KAAS;AAElE,kBAAIhV,EAAM,UAAU,IAAM;AACxB,gBAAAA,EAAM,QAAQ,IACdgV,IAAQ;AACR;AAAA,cACF;AAEA,kBAAIC,IAAwBjV,EAAM,iBAAiBgV,CAAK,GACpDtX,IAAKuX,EAAsB,IAC3BC,IAAyBD,EAAsB,SAC/CnK,IAAWoK,MAA2B,SAAS,CAAA,IAAKA,GACpDjV,KAAOgV,EAAsB;AAEjC,cAAI,OAAOvX,KAAO,eAChBsC,IAAQtC,EAAG;AAAA,gBACT,OAAOsC;AAAA,gBACP,SAAS8K;AAAA,gBACT,MAAM7K;AAAA,gBACN,UAAUuH;AAAA,cACxB,CAAa,KAAKxH;AAAA,YAEV;AAAA;AAAA;AAAA,MACF;AAAA;AAAA;AAAA,MAGA,QAAQwT,GAAS,WAAY;AAC3B,eAAO,IAAI,QAAQ,SAAUE,GAAS;AACpC,UAAAlM,EAAS,YAAW,GACpBkM,EAAQ1T,CAAK;AAAA,QACf,CAAC;AAAA,MACH,CAAC;AAAA,MACD,SAAS,WAAmB;AAC1B,QAAA4U,EAAsB,GACtBF,IAAc;AAAA,MAChB;AAAA,IACN;AAEI,QAAI,CAACV,GAAiB1V,GAAWD,CAAM;AAErC,aAAOmJ;AAGT,IAAAA,EAAS,WAAW3L,CAAO,EAAE,KAAK,SAAUmE,GAAO;AACjD,MAAI,CAAC0U,KAAe7Y,EAAQ,iBAC1BA,EAAQ,cAAcmE,CAAK;AAAA,IAE/B,CAAC;AAMD,aAAS8U,IAAqB;AAC5B,MAAA9U,EAAM,iBAAiB,QAAQ,SAAUmG,GAAO;AAC9C,YAAIlG,IAAOkG,EAAM,MACbgP,IAAgBhP,EAAM,SACtBtK,IAAUsZ,MAAkB,SAAS,CAAA,IAAKA,GAC1C/U,IAAS+F,EAAM;AAEnB,YAAI,OAAO/F,KAAW,YAAY;AAChC,cAAIgV,IAAYhV,EAAO;AAAA,YACrB,OAAOJ;AAAA,YACP,MAAMC;AAAA,YACN,UAAUuH;AAAA,YACV,SAAS3L;AAAA,UACrB,CAAW,GAEGwZ,IAAS,WAAkB;AAAA,UAAC;AAEhC,UAAAZ,EAAiB,KAAKW,KAAaC,CAAM;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAST,IAAyB;AAChC,MAAAH,EAAiB,QAAQ,SAAU/W,GAAI;AACrC,eAAOA,EAAE;AAAA,MACX,CAAC,GACD+W,IAAmB,CAAA;AAAA,IACrB;AAEA,WAAOjN;AAAA,EACT;AACF;AAEA,IAAI8M,KAAmB,CAACvM,IAAgB2H,IAAiBrI,IAAiB3G,IAAe+O,IAAUrB,IAAQ8D,IAAmBjN,IAAS+J,EAAM,GACzIsG,KAA4B,gBAAApB,GAAgB;AAAA,EAC9C,kBAAkBI;AACpB,CAAC,GASGiB,KAAY,aACZC,KAAgB,iBAChBC,KAAiB,kBACjBC,KAAc,eACdC,KAAkB,mBAClBC,KAAgB;AAAA,EAClB,SAAS;AAAA,EACT,SAAS;AACX,GACIC,KAA0B,WAAmC;AAC/D,SAAO,SAAS;AAClB;AACA,SAASC,GAAwBra,GAAOuZ,GAAOe,GAAc;AAC3D,MAAI,MAAM,QAAQta,CAAK,GAAG;AACxB,QAAIyH,IAAIzH,EAAMuZ,CAAK;AACnB,WAAO9R,MAAY,MAAM,QAAQ6S,CAAY,IAAIA,EAAaf,CAAK,IAAIe;AAAA,EACzE;AAEA,SAAOta;AACT;AACA,SAASua,GAAOva,GAAOwa,GAAM;AAC3B,MAAIC,IAAM,CAAA,EAAG,SAAS,KAAKza,CAAK;AAChC,SAAOya,EAAI,QAAQ,SAAS,MAAM,KAAKA,EAAI,QAAQD,IAAO,GAAG,IAAI;AACnE;AACA,SAASE,GAAuB1a,GAAOa,GAAM;AAC3C,SAAO,OAAOb,KAAU,aAAaA,EAAM,MAAM,QAAQa,CAAI,IAAIb;AACnE;AACA,SAAS2a,GAAW1Y,GAAI2Y,GAAI;AAE1B,MAAIA,MAAO;AACT,WAAO3Y;AAGT,MAAI4Y;AACJ,SAAO,SAAUC,GAAK;AACpB,iBAAaD,CAAO,GACpBA,IAAU,WAAW,WAAY;AAC/B,MAAA5Y,EAAG6Y,CAAG;AAAA,IACR,GAAGF,CAAE;AAAA,EACP;AACF;AACA,SAASG,GAAiBC,GAAKlT,GAAM;AACnC,MAAImT,IAAQ,OAAO,OAAO,CAAA,GAAID,CAAG;AACjC,SAAAlT,EAAK,QAAQ,SAAUE,GAAK;AAC1B,WAAOiT,EAAMjT,CAAG;AAAA,EAClB,CAAC,GACMiT;AACT;AACA,SAASC,GAAclb,GAAO;AAC5B,SAAOA,EAAM,MAAM,KAAK,EAAE,OAAO,OAAO;AAC1C;AACA,SAASmb,GAAiBnb,GAAO;AAC/B,SAAO,CAAA,EAAG,OAAOA,CAAK;AACxB;AACA,SAASob,GAAaC,GAAKrb,GAAO;AAChC,EAAIqb,EAAI,QAAQrb,CAAK,MAAM,MACzBqb,EAAI,KAAKrb,CAAK;AAElB;AACA,SAASsb,GAAOD,GAAK;AACnB,SAAOA,EAAI,OAAO,SAAUE,GAAMhC,GAAO;AACvC,WAAO8B,EAAI,QAAQE,CAAI,MAAMhC;AAAA,EAC/B,CAAC;AACH;AACA,SAASiC,GAAmBxY,GAAW;AACrC,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;AACA,SAASyY,GAAUzb,GAAO;AACxB,SAAO,GAAG,MAAM,KAAKA,CAAK;AAC5B;AACA,SAAS0b,GAAqBV,GAAK;AACjC,SAAO,OAAO,KAAKA,CAAG,EAAE,OAAO,SAAUjY,GAAKiF,GAAK;AACjD,WAAIgT,EAAIhT,CAAG,MAAM,WACfjF,EAAIiF,CAAG,IAAIgT,EAAIhT,CAAG,IAGbjF;AAAA,EACT,GAAG,CAAA,CAAE;AACP;AAEA,SAAS4Y,KAAM;AACb,SAAO,SAAS,cAAc,KAAK;AACrC;AACA,SAASC,GAAY5b,GAAO;AAC1B,SAAO,CAAC,WAAW,UAAU,EAAE,KAAK,SAAUwa,GAAM;AAClD,WAAOD,GAAOva,GAAOwa,CAAI;AAAA,EAC3B,CAAC;AACH;AACA,SAASqB,GAAW7b,GAAO;AACzB,SAAOua,GAAOva,GAAO,UAAU;AACjC;AACA,SAAS8b,GAAa9b,GAAO;AAC3B,SAAOua,GAAOva,GAAO,YAAY;AACnC;AACA,SAAS+b,GAAmB/b,GAAO;AACjC,SAAO,CAAC,EAAEA,KAASA,EAAM,UAAUA,EAAM,OAAO,cAAcA;AAChE;AACA,SAASgc,GAAmBhc,GAAO;AACjC,SAAI4b,GAAY5b,CAAK,IACZ,CAACA,CAAK,IAGX6b,GAAW7b,CAAK,IACXyb,GAAUzb,CAAK,IAGpB,MAAM,QAAQA,CAAK,IACdA,IAGFyb,GAAU,SAAS,iBAAiBzb,CAAK,CAAC;AACnD;AACA,SAASic,GAAsBC,GAAKlc,GAAO;AACzC,EAAAkc,EAAI,QAAQ,SAAUnb,GAAI;AACxB,IAAIA,MACFA,EAAG,MAAM,qBAAqBf,IAAQ;AAAA,EAE1C,CAAC;AACH;AACA,SAASmc,GAAmBD,GAAK3X,GAAO;AACtC,EAAA2X,EAAI,QAAQ,SAAUnb,GAAI;AACxB,IAAIA,KACFA,EAAG,aAAa,cAAcwD,CAAK;AAAA,EAEvC,CAAC;AACH;AACA,SAAS6X,GAAiBC,GAAmB;AAC3C,MAAIjP,GAEAkP,IAAoBnB,GAAiBkB,CAAiB,GACtDxY,IAAUyY,EAAkB,CAAC;AAGjC,SAAOzY,KAAW,SAASuJ,IAAwBvJ,EAAQ,kBAAkB,QAAQuJ,EAAsB,OAAOvJ,EAAQ,gBAAgB;AAC5I;AACA,SAAS0Y,GAAiCC,GAAgBxb,GAAO;AAC/D,MAAIyb,IAAUzb,EAAM,SAChB0b,IAAU1b,EAAM;AACpB,SAAOwb,EAAe,MAAM,SAAUlY,GAAM;AAC1C,QAAI4F,IAAa5F,EAAK,YAClBqY,IAAcrY,EAAK,aACnBsY,IAAQtY,EAAK,OACbuY,IAAoBD,EAAM,mBAC1BrU,IAAgBiT,GAAmBmB,EAAY,SAAS,GACxDvM,IAAauM,EAAY,cAAc;AAE3C,QAAI,CAACvM;AACH,aAAO;AAGT,QAAI0M,IAAcvU,MAAkB,WAAW6H,EAAW,IAAI,IAAI,GAC9D2M,IAAiBxU,MAAkB,QAAQ6H,EAAW,OAAO,IAAI,GACjE4M,IAAezU,MAAkB,UAAU6H,EAAW,KAAK,IAAI,GAC/D6M,IAAgB1U,MAAkB,SAAS6H,EAAW,MAAM,IAAI,GAChE8M,IAAahT,EAAW,MAAMwS,IAAUI,IAAcD,GACtDM,IAAgBT,IAAUxS,EAAW,SAAS6S,IAAiBF,GAC/DO,IAAclT,EAAW,OAAOuS,IAAUO,IAAeH,GACzDQ,IAAeZ,IAAUvS,EAAW,QAAQ+S,IAAgBJ;AAChE,WAAOK,KAAcC,KAAiBC,KAAeC;AAAA,EACvD,CAAC;AACH;AACA,SAASC,GAA4BC,GAAKC,GAAQvc,GAAU;AAC1D,MAAIwc,IAASD,IAAS;AAGtB,GAAC,iBAAiB,qBAAqB,EAAE,QAAQ,SAAUxc,GAAO;AAChE,IAAAuc,EAAIE,CAAM,EAAEzc,GAAOC,CAAQ;AAAA,EAC7B,CAAC;AACH;AAMA,SAASyc,GAAexX,GAAQC,GAAO;AAGrC,WAFI6H,IAAS7H,GAEN6H,KAAQ;AACb,QAAI2P;AAEJ,QAAIzX,EAAO,SAAS8H,CAAM;AACxB,aAAO;AAGT,IAAAA,IAASA,EAAO,eAAe,SAAiB2P,IAAsB3P,EAAO,YAAW,MAAO,OAAzD,SAAyE2P,EAAoB;AAAA,EACrI;AAEA,SAAO;AACT;AAEA,IAAIC,KAAe;AAAA,EACjB,SAAS;AACX,GACIC,KAAoB;AAQxB,SAASC,KAAuB;AAC9B,EAAIF,GAAa,YAIjBA,GAAa,UAAU,IAEnB,OAAO,eACT,SAAS,iBAAiB,aAAaG,EAAmB;AAE9D;AAOA,SAASA,KAAsB;AAC7B,MAAIC,IAAM,YAAY,IAAG;AAEzB,EAAIA,IAAMH,KAAoB,OAC5BD,GAAa,UAAU,IACvB,SAAS,oBAAoB,aAAaG,EAAmB,IAG/DF,KAAoBG;AACtB;AAQA,SAASC,KAAe;AACtB,MAAIC,IAAgB,SAAS;AAE7B,MAAInC,GAAmBmC,CAAa,GAAG;AACrC,QAAInS,IAAWmS,EAAc;AAE7B,IAAIA,EAAc,QAAQ,CAACnS,EAAS,MAAM,aACxCmS,EAAc,KAAI;AAAA,EAEtB;AACF;AACA,SAASC,KAA2B;AAClC,WAAS,iBAAiB,cAAcL,IAAsB3D,EAAa,GAC3E,OAAO,iBAAiB,QAAQ8D,EAAY;AAC9C;AAEA,IAAIG,KAAY,OAAO,SAAW,OAAe,OAAO,WAAa,KACjEC,KAASD;AAAA;AAAA,EACb,CAAC,CAAC,OAAO;AAAA,IAAW,IAEhBE,KAAc;AAAA,EAChB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,QAAQ;AACV,GACIC,KAAc;AAAA,EAChB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV,GACIC,KAAe,OAAO,OAAO;AAAA,EAC/B,UAAUpE;AAAA,EACV,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,EACd;AAAA,EACE,OAAO;AAAA,EACP,UAAU,CAAC,KAAK,GAAG;AAAA,EACnB,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,QAAQ,CAAC,GAAG,EAAE;AAAA,EACd,eAAe,WAAyB;AAAA,EAAC;AAAA,EACzC,gBAAgB,WAA0B;AAAA,EAAC;AAAA,EAC3C,UAAU,WAAoB;AAAA,EAAC;AAAA,EAC/B,WAAW,WAAqB;AAAA,EAAC;AAAA,EACjC,UAAU,WAAoB;AAAA,EAAC;AAAA,EAC/B,QAAQ,WAAkB;AAAA,EAAC;AAAA,EAC3B,SAAS,WAAmB;AAAA,EAAC;AAAA,EAC7B,QAAQ,WAAkB;AAAA,EAAC;AAAA,EAC3B,SAAS,WAAmB;AAAA,EAAC;AAAA,EAC7B,WAAW,WAAqB;AAAA,EAAC;AAAA,EACjC,aAAa,WAAuB;AAAA,EAAC;AAAA,EACrC,gBAAgB,WAA0B;AAAA,EAAC;AAAA,EAC3C,WAAW;AAAA,EACX,SAAS,CAAA;AAAA,EACT,eAAe,CAAA;AAAA,EACf,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,eAAe;AACjB,GAAGkE,IAAaC,EAAW,GACvBE,KAAc,OAAO,KAAKD,EAAY,GACtCE,KAAkB,SAAyBC,GAAc;AAE3D,MAAI7W,IAAO,OAAO,KAAK6W,CAAY;AACnC,EAAA7W,EAAK,QAAQ,SAAUE,GAAK;AAC1B,IAAAwW,GAAaxW,CAAG,IAAI2W,EAAa3W,CAAG;AAAA,EACtC,CAAC;AACH;AACA,SAAS4W,GAAuBC,GAAa;AAC3C,MAAIC,IAAUD,EAAY,WAAW,CAAA,GACjCP,IAAcQ,EAAQ,OAAO,SAAU/b,GAAKgc,GAAQ;AACtD,QAAIva,IAAOua,EAAO,MACdzE,IAAeyE,EAAO;AAE1B,QAAIva,GAAM;AACR,UAAIwa;AAEJ,MAAAjc,EAAIyB,CAAI,IAAIqa,EAAYra,CAAI,MAAM,SAAYqa,EAAYra,CAAI,KAAKwa,IAAQR,GAAaha,CAAI,MAAM,OAAOwa,IAAQ1E;AAAA,IACnH;AAEA,WAAOvX;AAAA,EACT,GAAG,CAAA,CAAE;AACL,SAAO,OAAO,OAAO,IAAI8b,GAAaP,CAAW;AACnD;AACA,SAASW,GAAsBpc,GAAWic,GAAS;AACjD,MAAII,IAAWJ,IAAU,OAAO,KAAKF,GAAuB,OAAO,OAAO,CAAA,GAAIJ,IAAc;AAAA,IAC1F,SAASM;AAAA,EACb,CAAG,CAAC,CAAC,IAAIL,IACH7B,IAAQsC,EAAS,OAAO,SAAUnc,GAAKiF,GAAK;AAC9C,QAAImX,KAAiBtc,EAAU,aAAa,gBAAgBmF,CAAG,KAAK,IAAI,KAAI;AAE5E,QAAI,CAACmX;AACH,aAAOpc;AAGT,QAAIiF,MAAQ;AACV,MAAAjF,EAAIiF,CAAG,IAAImX;AAAA;AAEX,UAAI;AACF,QAAApc,EAAIiF,CAAG,IAAI,KAAK,MAAMmX,CAAa;AAAA,MACrC,QAAY;AACV,QAAApc,EAAIiF,CAAG,IAAImX;AAAA,MACb;AAGF,WAAOpc;AAAA,EACT,GAAG,CAAA,CAAE;AACL,SAAO6Z;AACT;AACA,SAASwC,GAAcvc,GAAW+Z,GAAO;AACvC,MAAIyC,IAAM,OAAO,OAAO,CAAA,GAAIzC,GAAO;AAAA,IACjC,SAASlC,GAAuBkC,EAAM,SAAS,CAAC/Z,CAAS,CAAC;AAAA,EAC9D,GAAK+Z,EAAM,mBAAmB,CAAA,IAAKqC,GAAsBpc,GAAW+Z,EAAM,OAAO,CAAC;AAChF,SAAAyC,EAAI,OAAO,OAAO,OAAO,CAAA,GAAIb,GAAa,MAAMa,EAAI,IAAI,GACxDA,EAAI,OAAO;AAAA,IACT,UAAUA,EAAI,KAAK,aAAa,SAASzC,EAAM,cAAcyC,EAAI,KAAK;AAAA,IACtE,SAASA,EAAI,KAAK,YAAY,SAASzC,EAAM,cAAc,OAAO,gBAAgByC,EAAI,KAAK;AAAA,EAC/F,GACSA;AACT;AAEA,IAAIC,KAAY,WAAqB;AACnC,SAAO;AACT;AAEA,SAASC,GAAwB1b,GAASoJ,GAAM;AAC9C,EAAApJ,EAAQyb,GAAS,CAAE,IAAIrS;AACzB;AAEA,SAASuS,GAAmBxf,GAAO;AACjC,MAAImI,IAAQwT,GAAG;AAEf,SAAI3b,MAAU,KACZmI,EAAM,YAAY8R,MAElB9R,EAAM,YAAY+R,IAEd0B,GAAY5b,CAAK,IACnBmI,EAAM,YAAYnI,CAAK,IAEvBuf,GAAwBpX,GAAOnI,CAAK,IAIjCmI;AACT;AAEA,SAASsX,GAAWC,GAAS9C,GAAO;AAClC,EAAIhB,GAAYgB,EAAM,OAAO,KAC3B2C,GAAwBG,GAAS,EAAE,GACnCA,EAAQ,YAAY9C,EAAM,OAAO,KACxB,OAAOA,EAAM,WAAY,eAC9BA,EAAM,YACR2C,GAAwBG,GAAS9C,EAAM,OAAO,IAE9C8C,EAAQ,cAAc9C,EAAM;AAGlC;AACA,SAAS+C,GAAY/c,GAAQ;AAC3B,MAAI2a,IAAM3a,EAAO,mBACbgd,IAAcnE,GAAU8B,EAAI,QAAQ;AACxC,SAAO;AAAA,IACL,KAAKA;AAAA,IACL,SAASqC,EAAY,KAAK,SAAU7b,GAAM;AACxC,aAAOA,EAAK,UAAU,SAASgW,EAAa;AAAA,IAC9C,CAAC;AAAA,IACD,OAAO6F,EAAY,KAAK,SAAU7b,GAAM;AACtC,aAAOA,EAAK,UAAU,SAASkW,EAAW,KAAKlW,EAAK,UAAU,SAASmW,EAAe;AAAA,IACxF,CAAC;AAAA,IACD,UAAU0F,EAAY,KAAK,SAAU7b,GAAM;AACzC,aAAOA,EAAK,UAAU,SAASiW,EAAc;AAAA,IAC/C,CAAC;AAAA,EACL;AACA;AACA,SAAS6F,GAAO9T,GAAU;AACxB,MAAInJ,IAAS+Y,GAAG,GACZ4B,IAAM5B,GAAG;AACb,EAAA4B,EAAI,YAAYzD,IAChByD,EAAI,aAAa,cAAc,QAAQ,GACvCA,EAAI,aAAa,YAAY,IAAI;AACjC,MAAImC,IAAU/D,GAAG;AACjB,EAAA+D,EAAQ,YAAY3F,IACpB2F,EAAQ,aAAa,cAAc,QAAQ,GAC3CD,GAAWC,GAAS3T,EAAS,KAAK,GAClCnJ,EAAO,YAAY2a,CAAG,GACtBA,EAAI,YAAYmC,CAAO,GACvBI,EAAS/T,EAAS,OAAOA,EAAS,KAAK;AAEvC,WAAS+T,EAASC,GAAWC,GAAW;AACtC,QAAIC,IAAeN,GAAY/c,CAAM,GACjC2a,IAAM0C,EAAa,KACnBP,IAAUO,EAAa,SACvB9X,IAAQ8X,EAAa;AAEzB,IAAID,EAAU,QACZzC,EAAI,aAAa,cAAcyC,EAAU,KAAK,IAE9CzC,EAAI,gBAAgB,YAAY,GAG9B,OAAOyC,EAAU,aAAc,WACjCzC,EAAI,aAAa,kBAAkByC,EAAU,SAAS,IAEtDzC,EAAI,gBAAgB,gBAAgB,GAGlCyC,EAAU,UACZzC,EAAI,aAAa,gBAAgB,EAAE,IAEnCA,EAAI,gBAAgB,cAAc,GAGpCA,EAAI,MAAM,WAAW,OAAOyC,EAAU,YAAa,WAAWA,EAAU,WAAW,OAAOA,EAAU,UAEhGA,EAAU,OACZzC,EAAI,aAAa,QAAQyC,EAAU,IAAI,IAEvCzC,EAAI,gBAAgB,MAAM,IAGxBwC,EAAU,YAAYC,EAAU,WAAWD,EAAU,cAAcC,EAAU,cAC/EP,GAAWC,GAAS3T,EAAS,KAAK,GAGhCiU,EAAU,QACP7X,IAEM4X,EAAU,UAAUC,EAAU,UACvCzC,EAAI,YAAYpV,CAAK,GACrBoV,EAAI,YAAYiC,GAAmBQ,EAAU,KAAK,CAAC,KAHnDzC,EAAI,YAAYiC,GAAmBQ,EAAU,KAAK,CAAC,IAK5C7X,KACToV,EAAI,YAAYpV,CAAK;AAAA,EAEzB;AAEA,SAAO;AAAA,IACL,QAAQvF;AAAA,IACR,UAAUkd;AAAA,EACd;AACA;AAGAD,GAAO,UAAU;AAEjB,IAAIK,KAAY,GACZC,KAAqB,CAAA,GAErBC,KAAmB,CAAA;AACvB,SAASC,GAAYxd,GAAWgc,GAAa;AAC3C,MAAIjC,IAAQwC,GAAcvc,GAAW,OAAO,OAAO,CAAA,GAAI2b,IAAcI,GAAuBlD,GAAqBmD,CAAW,CAAC,CAAC,CAAC,GAI3HyB,GACAC,GACAC,GACAC,IAAqB,IACrBC,IAAgC,IAChCC,IAAe,IACfC,IAAsB,IACtBC,GACAC,GACAC,GACAC,IAAY,CAAA,GACZC,IAAuBtG,GAAWuG,GAAatE,EAAM,mBAAmB,GACxEuE,GAIAC,IAAKlB,MACLmB,IAAiB,MACjBvC,IAAUxD,GAAOsB,EAAM,OAAO,GAC9BrY,IAAQ;AAAA;AAAA,IAEV,WAAW;AAAA;AAAA,IAEX,WAAW;AAAA;AAAA,IAEX,aAAa;AAAA;AAAA,IAEb,WAAW;AAAA;AAAA,IAEX,SAAS;AAAA,EACb,GACMwH,IAAW;AAAA;AAAA,IAEb,IAAIqV;AAAA,IACJ,WAAWve;AAAA,IACX,QAAQ8Y,GAAG;AAAA,IACX,gBAAgB0F;AAAA,IAChB,OAAOzE;AAAA,IACP,OAAOrY;AAAA,IACP,SAASua;AAAA;AAAA,IAET,oBAAoBwC;AAAA,IACpB,UAAUC;AAAA,IACV,YAAY9B;AAAA,IACZ,MAAM+B;AAAA,IACN,MAAMxO;AAAA,IACN,uBAAuByO;AAAA,IACvB,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,SAASC;AAAA,IACT,SAASC;AAAA,EACb;AAKE,MAAI,CAACjF,EAAM;AAET,WAAO7Q;AAMT,MAAI+V,IAAgBlF,EAAM,OAAO7Q,CAAQ,GACrCnJ,IAASkf,EAAc,QACvBhC,IAAWgC,EAAc;AAE7B,EAAAlf,EAAO,aAAa,mBAAmB,EAAE,GACzCA,EAAO,KAAK,WAAWmJ,EAAS,IAChCA,EAAS,SAASnJ,GAClBC,EAAU,SAASkJ,GACnBnJ,EAAO,SAASmJ;AAChB,MAAIgW,IAAejD,EAAQ,IAAI,SAAUC,GAAQ;AAC/C,WAAOA,EAAO,GAAGhT,CAAQ;AAAA,EAC3B,CAAC,GACGiW,KAAkBnf,EAAU,aAAa,eAAe;AAC5D,SAAAof,GAAY,GACZC,EAA2B,GAC3BC,GAAY,GACZC,EAAW,YAAY,CAACrW,CAAQ,CAAC,GAE7B6Q,EAAM,gBACRyF,EAAY,GAKdzf,EAAO,iBAAiB,cAAc,WAAY;AAChD,IAAImJ,EAAS,MAAM,eAAeA,EAAS,MAAM,aAC/CA,EAAS,mBAAkB;AAAA,EAE/B,CAAC,GACDnJ,EAAO,iBAAiB,cAAc,WAAY;AAChD,IAAImJ,EAAS,MAAM,eAAeA,EAAS,MAAM,QAAQ,QAAQ,YAAY,KAAK,KAChFuW,KAAc,iBAAiB,aAAarB,CAAoB;AAAA,EAEpE,CAAC,GACMlV;AAIP,WAASwW,IAA6B;AACpC,QAAIC,IAAQzW,EAAS,MAAM;AAC3B,WAAO,MAAM,QAAQyW,CAAK,IAAIA,IAAQ,CAACA,GAAO,CAAC;AAAA,EACjD;AAEA,WAASC,IAA2B;AAClC,WAAOF,EAA0B,EAAG,CAAC,MAAM;AAAA,EAC7C;AAEA,WAASG,IAAuB;AAC9B,QAAIC;AAGJ,WAAO,CAAC,GAAGA,IAAwB5W,EAAS,MAAM,WAAW,QAAQ4W,EAAsB;AAAA,EAC7F;AAEA,WAASC,IAAmB;AAC1B,WAAOzB,KAAiBte;AAAA,EAC1B;AAEA,WAASyf,KAAc;AACrB,QAAIpc,IAAS0c,EAAgB,EAAG;AAChC,WAAO1c,IAASkW,GAAiBlW,CAAM,IAAI;AAAA,EAC7C;AAEA,WAAS2c,KAA6B;AACpC,WAAOlD,GAAY/c,CAAM;AAAA,EAC3B;AAEA,WAASkgB,GAASC,GAAQ;AAIxB,WAAIhX,EAAS,MAAM,aAAa,CAACA,EAAS,MAAM,aAAa6R,GAAa,WAAWiD,KAAoBA,EAAiB,SAAS,UAC1H,IAGFxG,GAAwBtO,EAAS,MAAM,OAAOgX,IAAS,IAAI,GAAGvE,GAAa,KAAK;AAAA,EACzF;AAEA,WAAS2D,GAAaa,GAAU;AAC9B,IAAIA,MAAa,WACfA,IAAW,KAGbpgB,EAAO,MAAM,gBAAgBmJ,EAAS,MAAM,eAAe,CAACiX,IAAW,KAAK,QAC5EpgB,EAAO,MAAM,SAAS,KAAKmJ,EAAS,MAAM;AAAA,EAC5C;AAEA,WAASqW,EAAWa,GAAMpiB,IAAMqiB,IAAuB;AAWrD,QAVIA,OAA0B,WAC5BA,KAAwB,KAG1BnB,EAAa,QAAQ,SAAUoB,IAAa;AAC1C,MAAIA,GAAYF,CAAI,KAClBE,GAAYF,CAAI,EAAE,MAAME,IAAatiB,EAAI;AAAA,IAE7C,CAAC,GAEGqiB,IAAuB;AACzB,UAAIE;AAEJ,OAACA,KAAkBrX,EAAS,OAAOkX,CAAI,EAAE,MAAMG,IAAiBviB,EAAI;AAAA,IACtE;AAAA,EACF;AAEA,WAASwiB,KAA6B;AACpC,QAAIC,IAAOvX,EAAS,MAAM;AAE1B,QAAKuX,EAAK,SAIV;AAAA,UAAIC,KAAO,UAAUD,EAAK,SACtBlC,KAAKxe,EAAO,IACZ4gB,KAAQrI,GAAiBpP,EAAS,MAAM,iBAAiBlJ,CAAS;AACtE,MAAA2gB,GAAM,QAAQ,SAAUzf,IAAM;AAC5B,YAAI0f,KAAe1f,GAAK,aAAawf,EAAI;AAEzC,YAAIxX,EAAS,MAAM;AACjB,UAAAhI,GAAK,aAAawf,IAAME,KAAeA,KAAe,MAAMrC,KAAKA,EAAE;AAAA,aAC9D;AACL,cAAIsC,KAAYD,MAAgBA,GAAa,QAAQrC,IAAI,EAAE,EAAE,KAAI;AAEjE,UAAIsC,KACF3f,GAAK,aAAawf,IAAMG,EAAS,IAEjC3f,GAAK,gBAAgBwf,EAAI;AAAA,QAE7B;AAAA,MACF,CAAC;AAAA;AAAA,EACH;AAEA,WAASrB,IAA8B;AACrC,QAAI,EAAAF,MAAmB,CAACjW,EAAS,MAAM,KAAK,WAI5C;AAAA,UAAIyX,IAAQrI,GAAiBpP,EAAS,MAAM,iBAAiBlJ,CAAS;AACtE,MAAA2gB,EAAM,QAAQ,SAAUzf,IAAM;AAC5B,QAAIgI,EAAS,MAAM,cACjBhI,GAAK,aAAa,iBAAiBgI,EAAS,MAAM,aAAahI,OAAS6e,EAAgB,IAAK,SAAS,OAAO,IAE7G7e,GAAK,gBAAgB,eAAe;AAAA,MAExC,CAAC;AAAA;AAAA,EACH;AAEA,WAAS4f,IAAmC;AAC1C,IAAArB,KAAc,oBAAoB,aAAarB,CAAoB,GACnEd,KAAqBA,GAAmB,OAAO,SAAUlf,GAAU;AACjE,aAAOA,MAAaggB;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,WAAS2C,EAAgB5iB,GAAO;AAE9B,QAAI,EAAA4c,GAAa,YACX+C,KAAgB3f,EAAM,SAAS,eAKrC;AAAA,UAAI6iB,KAAe7iB,EAAM,gBAAgBA,EAAM,aAAY,EAAG,CAAC,KAAKA,EAAM;AAE1E,UAAI,EAAA+K,EAAS,MAAM,eAAe2R,GAAe9a,GAAQihB,EAAY,IAKrE;AAAA,YAAI1I,GAAiBpP,EAAS,MAAM,iBAAiBlJ,CAAS,EAAE,KAAK,SAAU9B,IAAI;AACjF,iBAAO2c,GAAe3c,IAAI8iB,EAAY;AAAA,QACxC,CAAC;AAKC,cAJIjG,GAAa,WAIb7R,EAAS,MAAM,aAAaA,EAAS,MAAM,QAAQ,QAAQ,OAAO,KAAK;AACzE;AAAA;AAGF,UAAAqW,EAAW,kBAAkB,CAACrW,GAAU/K,CAAK,CAAC;AAGhD,QAAI+K,EAAS,MAAM,gBAAgB,OACjCA,EAAS,mBAAkB,GAC3BA,EAAS,KAAI,GAIb2U,IAAgC,IAChC,WAAW,WAAY;AACrB,UAAAA,IAAgC;AAAA,QAClC,CAAC,GAII3U,EAAS,MAAM,aAClB+X,GAAmB;AAAA;AAAA;AAAA,EAGzB;AAEA,WAASC,IAAc;AACrB,IAAApD,IAAe;AAAA,EACjB;AAEA,WAASqD,KAAe;AACtB,IAAArD,IAAe;AAAA,EACjB;AAEA,WAASsD,KAAmB;AAC1B,QAAIC,IAAM5B,GAAW;AACrB,IAAA4B,EAAI,iBAAiB,aAAaN,GAAiB,EAAI,GACvDM,EAAI,iBAAiB,YAAYN,GAAiBzJ,EAAa,GAC/D+J,EAAI,iBAAiB,cAAcF,IAAc7J,EAAa,GAC9D+J,EAAI,iBAAiB,aAAaH,GAAa5J,EAAa;AAAA,EAC9D;AAEA,WAAS2J,KAAsB;AAC7B,QAAII,IAAM5B,GAAW;AACrB,IAAA4B,EAAI,oBAAoB,aAAaN,GAAiB,EAAI,GAC1DM,EAAI,oBAAoB,YAAYN,GAAiBzJ,EAAa,GAClE+J,EAAI,oBAAoB,cAAcF,IAAc7J,EAAa,GACjE+J,EAAI,oBAAoB,aAAaH,GAAa5J,EAAa;AAAA,EACjE;AAEA,WAASgK,GAAkBC,GAAUC,IAAU;AAC7C,IAAAC,EAAgBF,GAAU,WAAY;AACpC,MAAI,CAACrY,EAAS,MAAM,aAAanJ,EAAO,cAAcA,EAAO,WAAW,SAASA,CAAM,KACrFyhB,GAAQ;AAAA,IAEZ,CAAC;AAAA,EACH;AAEA,WAASE,EAAiBH,GAAUC,IAAU;AAC5C,IAAAC,EAAgBF,GAAUC,EAAQ;AAAA,EACpC;AAEA,WAASC,EAAgBF,GAAUC,IAAU;AAC3C,QAAI9G,KAAMsF,GAA0B,EAAG;AAEvC,aAAS5hB,GAASD,IAAO;AACvB,MAAIA,GAAM,WAAWuc,OACnBD,GAA4BC,IAAK,UAAUtc,EAAQ,GACnDojB,GAAQ;AAAA,IAEZ;AAIA,QAAID,MAAa;AACf,aAAOC,GAAQ;AAGjB,IAAA/G,GAA4BC,IAAK,UAAUuD,CAA4B,GACvExD,GAA4BC,IAAK,OAAOtc,EAAQ,GAChD6f,IAA+B7f;AAAA,EACjC;AAEA,WAASujB,GAAGC,GAAWC,IAAStkB,IAAS;AACvC,IAAIA,OAAY,WACdA,KAAU;AAGZ,QAAIojB,KAAQrI,GAAiBpP,EAAS,MAAM,iBAAiBlJ,CAAS;AACtE,IAAA2gB,GAAM,QAAQ,SAAUzf,IAAM;AAC5B,MAAAA,GAAK,iBAAiB0gB,GAAWC,IAAStkB,EAAO,GACjD4gB,EAAU,KAAK;AAAA,QACb,MAAMjd;AAAA,QACN,WAAW0gB;AAAA,QACX,SAASC;AAAA,QACT,SAAStkB;AAAA,MACjB,CAAO;AAAA,IACH,CAAC;AAAA,EACH;AAEA,WAAS6hB,KAAe;AACtB,IAAIQ,EAAwB,MAC1B+B,GAAG,cAAcG,GAAW;AAAA,MAC1B,SAAS;AAAA,IACjB,CAAO,GACDH,GAAG,YAAYI,GAAc;AAAA,MAC3B,SAAS;AAAA,IACjB,CAAO,IAGH1J,GAAcnP,EAAS,MAAM,OAAO,EAAE,QAAQ,SAAU0Y,GAAW;AACjE,UAAIA,MAAc;AAMlB,gBAFAD,GAAGC,GAAWE,CAAS,GAEfF,GAAS;AAAA,UACf,KAAK;AACH,YAAAD,GAAG,cAAcI,CAAY;AAC7B;AAAA,UAEF,KAAK;AACH,YAAAJ,GAAGnG,KAAS,aAAa,QAAQwG,EAAgB;AACjD;AAAA,UAEF,KAAK;AACH,YAAAL,GAAG,YAAYK,EAAgB;AAC/B;AAAA,QACV;AAAA,IACI,CAAC;AAAA,EACH;AAEA,WAASC,KAAkB;AACzB,IAAA9D,EAAU,QAAQ,SAAU1c,GAAM;AAChC,UAAIP,KAAOO,EAAK,MACZmgB,KAAYngB,EAAK,WACjBogB,KAAUpgB,EAAK,SACflE,KAAUkE,EAAK;AACnB,MAAAP,GAAK,oBAAoB0gB,IAAWC,IAAStkB,EAAO;AAAA,IACtD,CAAC,GACD4gB,IAAY,CAAA;AAAA,EACd;AAEA,WAAS2D,EAAU3jB,GAAO;AACxB,QAAI+jB,IAEAC,KAA0B;AAE9B,QAAI,GAACjZ,EAAS,MAAM,aAAakZ,EAAuBjkB,CAAK,KAAK0f,IAIlE;AAAA,UAAIwE,OAAeH,KAAoBlE,MAAqB,OAAO,SAASkE,GAAkB,UAAU;AACxG,MAAAlE,IAAmB7f,GACnBmgB,IAAgBngB,EAAM,eACtBkhB,EAA2B,GAEvB,CAACnW,EAAS,MAAM,aAAa+P,GAAa9a,CAAK,KAKjDmf,GAAmB,QAAQ,SAAUlf,IAAU;AAC7C,eAAOA,GAASD,CAAK;AAAA,MACvB,CAAC,GAICA,EAAM,SAAS,YAAY+K,EAAS,MAAM,QAAQ,QAAQ,YAAY,IAAI,KAAK0U,MAAuB1U,EAAS,MAAM,gBAAgB,MAASA,EAAS,MAAM,YAC/JiZ,KAA0B,KAE1B3C,EAAarhB,CAAK,GAGhBA,EAAM,SAAS,YACjByf,IAAqB,CAACuE,KAGpBA,MAA2B,CAACE,MAC9BC,GAAankB,CAAK;AAAA;AAAA,EAEtB;AAEA,WAASkgB,EAAYlgB,GAAO;AAC1B,QAAIgN,KAAShN,EAAM,QACfokB,KAAgCxC,EAAgB,EAAG,SAAS5U,EAAM,KAAKpL,EAAO,SAASoL,EAAM;AAEjG,QAAI,EAAAhN,EAAM,SAAS,eAAeokB,KAIlC;AAAA,UAAI5I,KAAiB6I,IAAsB,OAAOziB,CAAM,EAAE,IAAI,SAAUA,IAAQ;AAC9E,YAAI0iB,IAEAvZ,KAAWnJ,GAAO,QAClB2B,MAAS+gB,KAAwBvZ,GAAS,mBAAmB,OAAO,SAASuZ,GAAsB;AAEvG,eAAI/gB,KACK;AAAA,UACL,YAAY3B,GAAO,sBAAqB;AAAA,UACxC,aAAa2B;AAAA,UACb,OAAOqY;AAAA,QACjB,IAGa;AAAA,MACT,CAAC,EAAE,OAAO,OAAO;AAEjB,MAAIL,GAAiCC,IAAgBxb,CAAK,MACxD2iB,EAAgC,GAChCwB,GAAankB,CAAK;AAAA;AAAA,EAEtB;AAEA,WAAS4jB,EAAa5jB,GAAO;AAC3B,QAAIukB,KAAaN,EAAuBjkB,CAAK,KAAK+K,EAAS,MAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK0U;AAElG,QAAI,CAAA8E,IAIJ;AAAA,UAAIxZ,EAAS,MAAM,aAAa;AAC9B,QAAAA,EAAS,sBAAsB/K,CAAK;AACpC;AAAA,MACF;AAEA,MAAAmkB,GAAankB,CAAK;AAAA;AAAA,EACpB;AAEA,WAAS6jB,GAAiB7jB,GAAO;AAC/B,IAAI+K,EAAS,MAAM,QAAQ,QAAQ,SAAS,IAAI,KAAK/K,EAAM,WAAW4hB,OAKlE7W,EAAS,MAAM,eAAe/K,EAAM,iBAAiB4B,EAAO,SAAS5B,EAAM,aAAa,KAI5FmkB,GAAankB,CAAK;AAAA,EACpB;AAEA,WAASikB,EAAuBjkB,GAAO;AACrC,WAAO4c,GAAa,UAAU6E,QAA+BzhB,EAAM,KAAK,QAAQ,OAAO,KAAK,IAAI;AAAA,EAClG;AAEA,WAASwkB,KAAuB;AAC9B,IAAAC,EAAqB;AACrB,QAAIC,IAAmB3Z,EAAS,OAC5B4Z,KAAgBD,EAAiB,eACjC1iB,KAAY0iB,EAAiB,WAC7Btc,KAASsc,EAAiB,QAC1BE,KAAyBF,EAAiB,wBAC1CG,KAAiBH,EAAiB,gBAClCvd,KAAQua,EAAoB,IAAK/C,GAAY/c,CAAM,EAAE,QAAQ,MAC7DkjB,KAAoBF,KAAyB;AAAA,MAC/C,uBAAuBA;AAAA,MACvB,gBAAgBA,GAAuB,kBAAkBhD,EAAgB;AAAA,IAC/E,IAAQ/f,GACAkjB,KAAgB;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU,CAAC,eAAe;AAAA,MAC1B,IAAI,SAAYnhB,IAAO;AACrB,YAAIL,KAAQK,GAAM;AAElB,YAAI8d,EAAoB,GAAI;AAC1B,cAAIsD,IAAwBnD,GAA0B,GAClDtF,IAAMyI,EAAsB;AAEhC,WAAC,aAAa,oBAAoB,SAAS,EAAE,QAAQ,SAAUzC,IAAM;AACnE,YAAIA,OAAS,cACXhG,EAAI,aAAa,kBAAkBhZ,GAAM,SAAS,IAE9CA,GAAM,WAAW,OAAO,iBAAiBgf,EAAI,IAC/ChG,EAAI,aAAa,UAAUgG,IAAM,EAAE,IAEnChG,EAAI,gBAAgB,UAAUgG,EAAI;AAAA,UAGxC,CAAC,GACDhf,GAAM,WAAW,SAAS,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACN,GACQ4S,KAAY,CAAC;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,QACP,QAAQ/N;AAAA,MAChB;AAAA,IACA,GAAO;AAAA,MACD,MAAM;AAAA,MACN,SAAS;AAAA,QACP,SAAS;AAAA,UACP,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,QACjB;AAAA,MACA;AAAA,IACA,GAAO;AAAA,MACD,MAAM;AAAA,MACN,SAAS;AAAA,QACP,SAAS;AAAA,MACjB;AAAA,IACA,GAAO;AAAA,MACD,MAAM;AAAA,MACN,SAAS;AAAA,QACP,UAAU,CAACyc;AAAA,MACnB;AAAA,IACA,GAAOE,EAAa;AAEhB,IAAIrD,EAAoB,KAAMva,MAC5BgP,GAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,QACP,SAAShP;AAAA,QACT,SAAS;AAAA,MACnB;AAAA,IACA,CAAO,GAGHgP,GAAU,KAAK,MAAMA,IAA6CwO,IAAc,aAAc,EAAE,GAChG5Z,EAAS,iBAAiB8N,GAAaiM,IAAmBljB,GAAQ,OAAO,OAAO,CAAA,GAAI+iB,IAAe;AAAA,MACjG,WAAW3iB;AAAA,MACX,eAAe+d;AAAA,MACf,WAAW5J;AAAA,IACjB,CAAK,CAAC;AAAA,EACJ;AAEA,WAASsO,IAAwB;AAC/B,IAAI1Z,EAAS,mBACXA,EAAS,eAAe,QAAO,GAC/BA,EAAS,iBAAiB;AAAA,EAE9B;AAEA,WAASka,IAAQ;AACf,QAAIC,IAAWna,EAAS,MAAM,UAC1Boa,IAMApiB,KAAO6e,EAAgB;AAE3B,IAAI7W,EAAS,MAAM,eAAema,MAAa9L,MAA2B8L,MAAa,WACrFC,KAAapiB,GAAK,aAElBoiB,KAAazL,GAAuBwL,GAAU,CAACniB,EAAI,CAAC,GAKjDoiB,GAAW,SAASvjB,CAAM,KAC7BujB,GAAW,YAAYvjB,CAAM,GAG/BmJ,EAAS,MAAM,YAAY,IAC3ByZ,GAAoB;AAAA,EACtB;AAEA,WAASH,IAAsB;AAC7B,WAAO5J,GAAU7Y,EAAO,iBAAiB,mBAAmB,CAAC;AAAA,EAC/D;AAEA,WAASyf,EAAarhB,GAAO;AAC3B,IAAA+K,EAAS,mBAAkB,GAEvB/K,KACFohB,EAAW,aAAa,CAACrW,GAAU/K,CAAK,CAAC,GAG3CijB,GAAgB;AAChB,QAAImC,KAAQtD,GAAS,EAAI,GAErBuD,KAAwB9D,EAA0B,GAClD+D,KAAaD,GAAsB,CAAC,GACpCE,KAAaF,GAAsB,CAAC;AAExC,IAAIzI,GAAa,WAAW0I,OAAe,UAAUC,OACnDH,KAAQG,KAGNH,KACF9F,IAAc,WAAW,WAAY;AACnC,MAAAvU,EAAS,KAAI;AAAA,IACf,GAAGqa,EAAK,IAERra,EAAS,KAAI;AAAA,EAEjB;AAEA,WAASoZ,GAAankB,GAAO;AAI3B,QAHA+K,EAAS,mBAAkB,GAC3BqW,EAAW,eAAe,CAACrW,GAAU/K,CAAK,CAAC,GAEvC,CAAC+K,EAAS,MAAM,WAAW;AAC7B,MAAA+X,GAAmB;AACnB;AAAA,IACF;AAMA,QAAI,EAAA/X,EAAS,MAAM,QAAQ,QAAQ,YAAY,KAAK,KAAKA,EAAS,MAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK,CAAC,cAAc,WAAW,EAAE,QAAQ/K,EAAM,IAAI,KAAK,KAAKyf,IAIjK;AAAA,UAAI2F,KAAQtD,GAAS,EAAK;AAE1B,MAAIsD,KACF7F,IAAc,WAAW,WAAY;AACnC,QAAIxU,EAAS,MAAM,aACjBA,EAAS,KAAI;AAAA,MAEjB,GAAGqa,EAAK,IAIR5F,IAA6B,sBAAsB,WAAY;AAC7D,QAAAzU,EAAS,KAAI;AAAA,MACf,CAAC;AAAA;AAAA,EAEL;AAKA,WAAS2V,KAAS;AAChB,IAAA3V,EAAS,MAAM,YAAY;AAAA,EAC7B;AAEA,WAAS4V,KAAU;AAGjB,IAAA5V,EAAS,KAAI,GACbA,EAAS,MAAM,YAAY;AAAA,EAC7B;AAEA,WAASuV,KAAqB;AAC5B,iBAAahB,CAAW,GACxB,aAAaC,CAAW,GACxB,qBAAqBC,CAA0B;AAAA,EACjD;AAEA,WAASe,EAAS5C,GAAc;AAE9B,QAAI,CAAA5S,EAAS,MAAM,aAInB;AAAA,MAAAqW,EAAW,kBAAkB,CAACrW,GAAU4S,CAAY,CAAC,GACrDmG,GAAe;AACf,UAAI/E,KAAYhU,EAAS,OACrBiU,KAAYZ,GAAcvc,GAAW,OAAO,OAAO,CAAA,GAAIkd,IAAWrE,GAAqBiD,CAAY,GAAG;AAAA,QACxG,kBAAkB;AAAA,MACxB,CAAK,CAAC;AACF,MAAA5S,EAAS,QAAQiU,IACjBiC,GAAY,GAERlC,GAAU,wBAAwBC,GAAU,wBAC9C2D,EAAgC,GAChC1C,IAAuBtG,GAAWuG,GAAalB,GAAU,mBAAmB,IAI1ED,GAAU,iBAAiB,CAACC,GAAU,gBACxC7E,GAAiB4E,GAAU,aAAa,EAAE,QAAQ,SAAUhc,IAAM;AAChE,QAAAA,GAAK,gBAAgB,eAAe;AAAA,MACtC,CAAC,IACQic,GAAU,iBACnBnd,EAAU,gBAAgB,eAAe,GAG3Cqf,EAA2B,GAC3BC,GAAY,GAERrC,KACFA,EAASC,IAAWC,EAAS,GAG3BjU,EAAS,mBACXyZ,MAKAH,EAAmB,EAAG,QAAQ,SAAUmB,IAAc;AAGpD,8BAAsBA,GAAa,OAAO,eAAe,WAAW;AAAA,MACtE,CAAC,IAGHpE,EAAW,iBAAiB,CAACrW,GAAU4S,CAAY,CAAC;AAAA;AAAA,EACtD;AAEA,WAASc,EAAWC,GAAS;AAC3B,IAAA3T,EAAS,SAAS;AAAA,MAChB,SAAS2T;AAAA,IACf,CAAK;AAAA,EACH;AAEA,WAAS8B,IAAO;AAGd,QAAIiF,IAAmB1a,EAAS,MAAM,WAClCkN,KAAclN,EAAS,MAAM,aAC7B2a,KAAa,CAAC3a,EAAS,MAAM,WAC7B4a,KAA0B/I,GAAa,WAAW,CAAC7R,EAAS,MAAM,OAClEqY,KAAW/J,GAAwBtO,EAAS,MAAM,UAAU,GAAGyS,GAAa,QAAQ;AAExF,QAAI,EAAAiI,KAAoBxN,MAAeyN,MAAcC,OAOjD,CAAA/D,EAAgB,EAAG,aAAa,UAAU,MAI9CR,EAAW,UAAU,CAACrW,CAAQ,GAAG,EAAK,GAElCA,EAAS,MAAM,OAAOA,CAAQ,MAAM,KAmBxC;AAAA,UAfAA,EAAS,MAAM,YAAY,IAEvB2W,EAAoB,MACtB9f,EAAO,MAAM,aAAa,YAG5Buf,GAAY,GACZ8B,GAAgB,GAEXlY,EAAS,MAAM,cAClBnJ,EAAO,MAAM,aAAa,SAKxB8f,EAAoB,GAAI;AAC1B,YAAIkE,KAAyB/D,GAA0B,GACnDtF,KAAMqJ,GAAuB,KAC7BlH,KAAUkH,GAAuB;AAErC,QAAA3K,GAAsB,CAACsB,IAAKmC,EAAO,GAAG,CAAC;AAAA,MACzC;AAEA,MAAAqB,IAAgB,WAAyB;AACvC,YAAI8F;AAEJ,YAAI,GAAC9a,EAAS,MAAM,aAAa6U,IASjC;AAAA,cALAA,IAAsB,IAEjBhe,EAAO,cACZA,EAAO,MAAM,aAAamJ,EAAS,MAAM,gBAErC2W,EAAoB,KAAM3W,EAAS,MAAM,WAAW;AACtD,gBAAI+a,KAAyBjE,GAA0B,GACnDkE,KAAOD,GAAuB,KAC9BE,KAAWF,GAAuB;AAEtC,YAAA7K,GAAsB,CAAC8K,IAAMC,EAAQ,GAAG5C,EAAQ,GAChDjI,GAAmB,CAAC4K,IAAMC,EAAQ,GAAG,SAAS;AAAA,UAChD;AAEA,UAAA3D,GAA0B,GAC1BnB,EAA2B,GAC3B9G,GAAagF,IAAkBrU,CAAQ,IAGtC8a,KAAyB9a,EAAS,mBAAmB,QAAgB8a,GAAuB,YAAW,GACxGzE,EAAW,WAAW,CAACrW,CAAQ,CAAC,GAE5BA,EAAS,MAAM,aAAa2W,EAAoB,KAClD6B,EAAiBH,IAAU,WAAY;AACrC,YAAArY,EAAS,MAAM,UAAU,IACzBqW,EAAW,WAAW,CAACrW,CAAQ,CAAC;AAAA,UAClC,CAAC;AAAA;AAAA,MAEL,GAEAka,EAAK;AAAA;AAAA,EACP;AAEA,WAASjT,IAAO;AAGd,QAAIiU,IAAkB,CAAClb,EAAS,MAAM,WAClCkN,KAAclN,EAAS,MAAM,aAC7B2a,KAAa,CAAC3a,EAAS,MAAM,WAC7BqY,KAAW/J,GAAwBtO,EAAS,MAAM,UAAU,GAAGyS,GAAa,QAAQ;AAExF,QAAI,EAAAyI,KAAmBhO,MAAeyN,QAItCtE,EAAW,UAAU,CAACrW,CAAQ,GAAG,EAAK,GAElCA,EAAS,MAAM,OAAOA,CAAQ,MAAM,KAiBxC;AAAA,UAbAA,EAAS,MAAM,YAAY,IAC3BA,EAAS,MAAM,UAAU,IACzB6U,IAAsB,IACtBH,IAAqB,IAEjBiC,EAAoB,MACtB9f,EAAO,MAAM,aAAa,WAG5B+gB,EAAgC,GAChCG,GAAmB,GACnB3B,GAAa,EAAI,GAEbO,EAAoB,GAAI;AAC1B,YAAIwE,KAAyBrE,GAA0B,GACnDtF,KAAM2J,GAAuB,KAC7BxH,KAAUwH,GAAuB;AAErC,QAAInb,EAAS,MAAM,cACjBkQ,GAAsB,CAACsB,IAAKmC,EAAO,GAAG0E,EAAQ,GAC9CjI,GAAmB,CAACoB,IAAKmC,EAAO,GAAG,QAAQ;AAAA,MAE/C;AAEA,MAAA2D,GAA0B,GAC1BnB,EAA2B,GAEvBnW,EAAS,MAAM,YACb2W,EAAoB,KACtByB,GAAkBC,IAAUrY,EAAS,OAAO,IAG9CA,EAAS,QAAO;AAAA;AAAA,EAEpB;AAEA,WAAS0V,EAAsBzgB,GAAO;AAEpC,IAAAshB,KAAc,iBAAiB,aAAarB,CAAoB,GAChE7F,GAAa+E,IAAoBc,CAAoB,GACrDA,EAAqBjgB,CAAK;AAAA,EAC5B;AAEA,WAAS4gB,IAAU;AAMjB,IAJI7V,EAAS,MAAM,aACjBA,EAAS,KAAI,GAGVA,EAAS,MAAM,cAIpB0Z,KAIAJ,EAAmB,EAAG,QAAQ,SAAUmB,GAAc;AACpD,MAAAA,EAAa,OAAO,QAAO;AAAA,IAC7B,CAAC,GAEG5jB,EAAO,cACTA,EAAO,WAAW,YAAYA,CAAM,GAGtCwd,KAAmBA,GAAiB,OAAO,SAAUrO,GAAG;AACtD,aAAOA,MAAMhG;AAAA,IACf,CAAC,GACDA,EAAS,MAAM,YAAY,IAC3BqW,EAAW,YAAY,CAACrW,CAAQ,CAAC;AAAA,EACnC;AAEA,WAAS8V,IAAU;AAEjB,IAAI9V,EAAS,MAAM,gBAInBA,EAAS,mBAAkB,GAC3BA,EAAS,QAAO,GAChB+Y,GAAe,GACf,OAAOjiB,EAAU,QACjBkJ,EAAS,MAAM,cAAc,IAC7BqW,EAAW,aAAa,CAACrW,CAAQ,CAAC;AAAA,EACpC;AACF;AAEA,SAASob,GAAMC,GAASC,GAAe;AACrC,EAAIA,MAAkB,WACpBA,IAAgB,CAAA;AAGlB,MAAIvI,IAAUN,GAAa,QAAQ,OAAO6I,EAAc,WAAW,EAAE;AAErE,EAAAlJ,GAAwB;AACxB,MAAIU,IAAc,OAAO,OAAO,CAAA,GAAIwI,GAAe;AAAA,IACjD,SAASvI;AAAA,EACb,CAAG,GACGwI,IAAWtL,GAAmBoL,CAAO,GAErCG,IAAYD,EAAS,OAAO,SAAUvkB,GAAKF,GAAW;AACxD,QAAIkJ,IAAWlJ,KAAawd,GAAYxd,GAAWgc,CAAW;AAE9D,WAAI9S,KACFhJ,EAAI,KAAKgJ,CAAQ,GAGZhJ;AAAA,EACT,GAAG,CAAA,CAAE;AACL,SAAO6Y,GAAYwL,CAAO,IAAIG,EAAU,CAAC,IAAIA;AAC/C;AAEAJ,GAAM,eAAe3I;AACrB2I,GAAM,kBAAkBzI;AACxByI,GAAM,eAAevJ;AAiCrB,IAAI4J,KAAsB,OAAO,OAAO,CAAA,GAAIviB,IAAe;AAAA,EACzD,QAAQ,SAAgBX,GAAM;AAC5B,QAAIC,IAAQD,EAAK,OACbO,IAAgB;AAAA,MAClB,QAAQ;AAAA,QACN,UAAUN,EAAM,QAAQ;AAAA,QACxB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA,MAChB;AAAA,MACM,OAAO;AAAA,QACL,UAAU;AAAA,MAClB;AAAA,MACM,WAAW,CAAA;AAAA,IACjB;AACI,WAAO,OAAOA,EAAM,SAAS,OAAO,OAAOM,EAAc,MAAM,GAC/DN,EAAM,SAASM,GAEXN,EAAM,SAAS,SACjB,OAAO,OAAOA,EAAM,SAAS,MAAM,OAAOM,EAAc,KAAK;AAAA,EAIjE;AACF,CAAC,GAEG4iB,KAAkB,SAAyBC,GAAgBL,GAAe;AAC5E,MAAIM;AAEJ,EAAIN,MAAkB,WACpBA,IAAgB,CAAA;AAGlB,MAAIO,IAAsBF,GACtBG,IAAa,CAAA,GACbC,IAAiB,CAAA,GACjB3G,GACA4G,IAAYV,EAAc,WAC1BW,IAA4B,CAAA,GAC5BC,IAAgB;AAEpB,WAASC,IAAoB;AAC3B,IAAAJ,IAAiBF,EAAoB,IAAI,SAAU7b,GAAU;AAC3D,aAAOoP,GAAiBpP,EAAS,MAAM,iBAAiBA,EAAS,SAAS;AAAA,IAC5E,CAAC,EAAE,OAAO,SAAUhJ,GAAKwY,GAAM;AAC7B,aAAOxY,EAAI,OAAOwY,CAAI;AAAA,IACxB,GAAG,CAAA,CAAE;AAAA,EACP;AAEA,WAAS4M,IAAgB;AACvB,IAAAN,IAAaD,EAAoB,IAAI,SAAU7b,GAAU;AACvD,aAAOA,EAAS;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,WAASqc,EAAgBC,GAAW;AAClC,IAAAT,EAAoB,QAAQ,SAAU7b,GAAU;AAC9C,MAAIsc,IACFtc,EAAS,OAAM,IAEfA,EAAS,QAAO;AAAA,IAEpB,CAAC;AAAA,EACH;AAEA,WAASuc,EAAkBC,GAAW;AACpC,WAAOX,EAAoB,IAAI,SAAU7b,GAAU;AACjD,UAAIyc,IAAmBzc,EAAS;AAEhC,aAAAA,EAAS,WAAW,SAAU6Q,GAAO;AACnC,QAAA4L,EAAiB5L,CAAK,GAElB7Q,EAAS,cAAcoV,KACzBoH,EAAU,SAAS3L,CAAK;AAAA,MAE5B,GAEO,WAAY;AACjB,QAAA7Q,EAAS,WAAWyc;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAGA,WAASC,EAAgBF,GAAWva,GAAQ;AAC1C,QAAIuL,IAAQuO,EAAe,QAAQ9Z,CAAM;AAEzC,QAAIA,MAAWmT,GAIf;AAAA,MAAAA,IAAgBnT;AAChB,UAAI0a,KAAiBX,KAAa,IAAI,OAAO,SAAS,EAAE,OAAO,SAAUhlB,GAAK4lB,IAAM;AAClF,eAAA5lB,EAAI4lB,EAAI,IAAIf,EAAoBrO,CAAK,EAAE,MAAMoP,EAAI,GAC1C5lB;AAAA,MACT,GAAG,CAAA,CAAE;AACL,MAAAwlB,EAAU,SAAS,OAAO,OAAO,CAAA,GAAIG,GAAe;AAAA,QAClD,wBAAwB,OAAOA,EAAc,0BAA2B,aAAaA,EAAc,yBAAyB,WAAY;AACtI,cAAIE;AAEJ,kBAAQA,IAAoBf,EAAWtO,CAAK,MAAM,OAAO,SAASqP,EAAkB,sBAAqB;AAAA,QAC3G;AAAA,MACN,CAAK,CAAC;AAAA;AAAA,EACJ;AAEA,EAAAR,EAAgB,EAAK,GACrBD,EAAa,GACbD,EAAiB;AACjB,MAAInJ,IAAS;AAAA,IACX,IAAI,WAAc;AAChB,aAAO;AAAA,QACL,WAAW,WAAqB;AAC9B,UAAAqJ,EAAgB,EAAI;AAAA,QACtB;AAAA,QACA,UAAU,WAAoB;AAC5B,UAAAjH,IAAgB;AAAA,QAClB;AAAA,QACA,gBAAgB,SAAwBpV,GAAU;AAChD,UAAIA,EAAS,MAAM,gBAAgB,CAACkc,MAClCA,IAAgB,IAChB9G,IAAgB;AAAA,QAEpB;AAAA,QACA,QAAQ,SAAgBpV,GAAU;AAChC,UAAIA,EAAS,MAAM,gBAAgB,CAACkc,MAClCA,IAAgB,IAChBQ,EAAgB1c,GAAU8b,EAAW,CAAC,CAAC;AAAA,QAE3C;AAAA,QACA,WAAW,SAAmB9b,GAAU/K,GAAO;AAC7C,UAAAynB,EAAgB1c,GAAU/K,EAAM,aAAa;AAAA,QAC/C;AAAA,MACR;AAAA,IACI;AAAA,EACJ,GACMunB,IAAYpB,GAAMxL,GAAG,GAAI,OAAO,OAAO,CAAA,GAAIZ,GAAiBsM,GAAe,CAAC,WAAW,CAAC,GAAG;AAAA,IAC7F,SAAS,CAACtI,CAAM,EAAE,OAAOsI,EAAc,WAAW,EAAE;AAAA,IACpD,eAAeS;AAAA,IACf,eAAe,OAAO,OAAO,CAAA,GAAIT,EAAc,eAAe;AAAA,MAC5D,WAAW,CAAA,EAAG,SAASM,IAAwBN,EAAc,kBAAkB,OAAO,SAASM,EAAsB,cAAc,CAAA,GAAI,CAACH,EAAmB,CAAC;AAAA,IAClK,CAAK;AAAA,EACL,CAAG,CAAC,GACEqB,IAAeN,EAAU;AAE7B,EAAAA,EAAU,OAAO,SAAUva,GAAQ;AAIjC,QAHA6a,KAGI,CAAC1H,KAAiBnT,KAAU;AAC9B,aAAOya,EAAgBF,GAAWV,EAAW,CAAC,CAAC;AAKjD,QAAI,EAAA1G,KAAiBnT,KAAU,OAK/B;AAAA,UAAI,OAAOA,KAAW;AACpB,eAAO6Z,EAAW7Z,CAAM,KAAKya,EAAgBF,GAAWV,EAAW7Z,CAAM,CAAC;AAI5E,UAAI4Z,EAAoB,QAAQ5Z,CAAM,KAAK,GAAG;AAC5C,YAAI8a,IAAM9a,EAAO;AACjB,eAAOya,EAAgBF,GAAWO,CAAG;AAAA,MACvC;AAGA,UAAIjB,EAAW,QAAQ7Z,CAAM,KAAK;AAChC,eAAOya,EAAgBF,GAAWva,CAAM;AAAA;AAAA,EAE5C,GAEAua,EAAU,WAAW,WAAY;AAC/B,QAAIQ,IAAQlB,EAAW,CAAC;AAExB,QAAI,CAAC1G;AACH,aAAOoH,EAAU,KAAK,CAAC;AAGzB,QAAIhP,IAAQsO,EAAW,QAAQ1G,CAAa;AAC5C,IAAAoH,EAAU,KAAKV,EAAWtO,IAAQ,CAAC,KAAKwP,CAAK;AAAA,EAC/C,GAEAR,EAAU,eAAe,WAAY;AACnC,QAAIS,IAAOnB,EAAWA,EAAW,SAAS,CAAC;AAE3C,QAAI,CAAC1G;AACH,aAAOoH,EAAU,KAAKS,CAAI;AAG5B,QAAIzP,IAAQsO,EAAW,QAAQ1G,CAAa,GACxCnT,IAAS6Z,EAAWtO,IAAQ,CAAC,KAAKyP;AACtC,IAAAT,EAAU,KAAKva,CAAM;AAAA,EACvB;AAEA,MAAIwa,IAAmBD,EAAU;AAEjC,SAAAA,EAAU,WAAW,SAAU3L,GAAO;AACpC,IAAAmL,IAAYnL,EAAM,aAAamL,GAC/BS,EAAiB5L,CAAK;AAAA,EACxB,GAEA2L,EAAU,eAAe,SAAUU,GAAe;AAChD,IAAAb,EAAgB,EAAI,GACpBJ,EAA0B,QAAQ,SAAU/lB,GAAI;AAC9C,aAAOA,EAAE;AAAA,IACX,CAAC,GACD2lB,IAAsBqB,GACtBb,EAAgB,EAAK,GACrBD,EAAa,GACbD,EAAiB,GACjBF,IAA4BM,EAAkBC,CAAS,GACvDA,EAAU,SAAS;AAAA,MACjB,eAAeT;AAAA,IACrB,CAAK;AAAA,EACH,GAEAE,IAA4BM,EAAkBC,CAAS,GAChDA;AACT,GAEIW,KAAc;AAAA,EAChB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,IAAI,SAAYnd,GAAU;AACxB,QAAI4W;AAGJ,QAAI,GAAGA,IAAwB5W,EAAS,MAAM,WAAW,QAAQ4W,EAAsB;AAErF,aAAO,CAAA;AAGT,QAAI1C,IAAeN,GAAY5T,EAAS,MAAM,GAC1CwR,IAAM0C,EAAa,KACnBP,IAAUO,EAAa,SAEvBkJ,IAAWpd,EAAS,MAAM,cAAcqd,GAAqB,IAAK;AACtE,WAAO;AAAA,MACL,UAAU,WAAoB;AAC5B,QAAID,MACF5L,EAAI,aAAa4L,GAAU5L,EAAI,iBAAiB,GAChDA,EAAI,aAAa,oBAAoB,EAAE,GACvCA,EAAI,MAAM,WAAW,UACrBxR,EAAS,SAAS;AAAA,UAChB,OAAO;AAAA,UACP,WAAW;AAAA,QACvB,CAAW;AAAA,MAEL;AAAA,MACA,SAAS,WAAmB;AAC1B,YAAIod,GAAU;AACZ,cAAIE,IAAqB9L,EAAI,MAAM,oBAC/B6G,IAAW,OAAOiF,EAAmB,QAAQ,MAAM,EAAE,CAAC;AAI1D,UAAA3J,EAAQ,MAAM,kBAAkB,KAAK,MAAM0E,IAAW,EAAE,IAAI,MAC5D+E,EAAS,MAAM,qBAAqBE,GACpClN,GAAmB,CAACgN,CAAQ,GAAG,SAAS;AAAA,QAC1C;AAAA,MACF;AAAA,MACA,QAAQ,WAAkB;AACxB,QAAIA,MACFA,EAAS,MAAM,qBAAqB;AAAA,MAExC;AAAA,MACA,QAAQ,WAAkB;AACxB,QAAIA,KACFhN,GAAmB,CAACgN,CAAQ,GAAG,QAAQ;AAAA,MAE3C;AAAA,IACN;AAAA,EACE;AACF;AAEA,SAASC,KAAwB;AAC/B,MAAID,IAAWxN,GAAG;AAClB,SAAAwN,EAAS,YAAYnP,IACrBmC,GAAmB,CAACgN,CAAQ,GAAG,QAAQ,GAChCA;AACT;AAEA,IAAIG,KAAc;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AACX,GACIC,KAAkB,CAAA;AAEtB,SAASC,GAAiBllB,GAAM;AAC9B,MAAImY,IAAUnY,EAAK,SACfoY,IAAUpY,EAAK;AACnB,EAAAglB,KAAc;AAAA,IACZ,SAAS7M;AAAA,IACT,SAASC;AAAA,EACb;AACA;AAEA,SAAS+M,GAAuBvF,GAAK;AACnC,EAAAA,EAAI,iBAAiB,aAAasF,EAAgB;AACpD;AAEA,SAASE,GAA0BxF,GAAK;AACtC,EAAAA,EAAI,oBAAoB,aAAasF,EAAgB;AACvD;AAEA,IAAIG,KAAe;AAAA,EACjB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,IAAI,SAAY5d,GAAU;AACxB,QAAIlJ,IAAYkJ,EAAS,WACrBmY,IAAM9H,GAAiBrQ,EAAS,MAAM,iBAAiBlJ,CAAS,GAChE+mB,IAAmB,IACnBC,IAAgB,IAChBC,IAAc,IACd/J,IAAYhU,EAAS;AAEzB,aAASge,IAAuB;AAC9B,aAAOhe,EAAS,MAAM,iBAAiB,aAAaA,EAAS,MAAM;AAAA,IACrE;AAEA,aAASie,IAAc;AACrB,MAAA9F,EAAI,iBAAiB,aAAahD,CAAW;AAAA,IAC/C;AAEA,aAAS+I,IAAiB;AACxB,MAAA/F,EAAI,oBAAoB,aAAahD,CAAW;AAAA,IAClD;AAEA,aAASgJ,IAA8B;AACrC,MAAAN,IAAmB,IACnB7d,EAAS,SAAS;AAAA,QAChB,wBAAwB;AAAA,MAChC,CAAO,GACD6d,IAAmB;AAAA,IACrB;AAEA,aAAS1I,EAAYlgB,GAAO;AAG1B,UAAImpB,IAAwBnpB,EAAM,SAAS6B,EAAU,SAAS7B,EAAM,MAAM,IAAI,IAC1E2oB,IAAe5d,EAAS,MAAM,cAC9B0Q,IAAUzb,EAAM,SAChB0b,IAAU1b,EAAM,SAChBwE,IAAO3C,EAAU,sBAAqB,GACtCunB,IAAY3N,IAAUjX,EAAK,MAC3B6kB,IAAY3N,IAAUlX,EAAK;AAE/B,OAAI2kB,KAAyB,CAACpe,EAAS,MAAM,gBAC3CA,EAAS,SAAS;AAAA;AAAA,QAEhB,wBAAwB,WAAkC;AACxD,cAAIvG,IAAO3C,EAAU,sBAAqB,GACtC+G,KAAI6S,GACJ5S,IAAI6S;AAER,UAAIiN,MAAiB,cACnB/f,KAAIpE,EAAK,OAAO4kB,GAChBvgB,IAAIrE,EAAK,MAAM6kB;AAGjB,cAAInoB,IAAMynB,MAAiB,eAAenkB,EAAK,MAAMqE,GACjDzH,IAAQunB,MAAiB,aAAankB,EAAK,QAAQoE,IACnDzH,IAASwnB,MAAiB,eAAenkB,EAAK,SAASqE,GACvDxH,KAAOsnB,MAAiB,aAAankB,EAAK,OAAOoE;AACrD,iBAAO;AAAA,YACL,OAAOxH,IAAQC;AAAA,YACf,QAAQF,IAASD;AAAA,YACjB,KAAKA;AAAA,YACL,OAAOE;AAAA,YACP,QAAQD;AAAA,YACR,MAAME;AAAA,UACpB;AAAA,QACU;AAAA,MACV,CAAS;AAAA,IAEL;AAEA,aAASioB,IAAS;AAChB,MAAIve,EAAS,MAAM,iBACjBwd,GAAgB,KAAK;AAAA,QACnB,UAAUxd;AAAA,QACV,KAAKmY;AAAA,MACf,CAAS,GACDuF,GAAuBvF,CAAG;AAAA,IAE9B;AAEA,aAASrC,IAAU;AACjB,MAAA0H,KAAkBA,GAAgB,OAAO,SAAUzV,GAAM;AACvD,eAAOA,EAAK,aAAa/H;AAAA,MAC3B,CAAC,GAEGwd,GAAgB,OAAO,SAAUzV,GAAM;AACzC,eAAOA,EAAK,QAAQoQ;AAAA,MACtB,CAAC,EAAE,WAAW,KACZwF,GAA0BxF,CAAG;AAAA,IAEjC;AAEA,WAAO;AAAA,MACL,UAAUoG;AAAA,MACV,WAAWzI;AAAA,MACX,gBAAgB,WAA0B;AACxC,QAAA9B,IAAYhU,EAAS;AAAA,MACvB;AAAA,MACA,eAAe,SAAuBlK,GAAG+C,GAAO;AAC9C,YAAI+kB,IAAe/kB,EAAM;AAEzB,QAAIglB,KAIAD,MAAiB,UAAa5J,EAAU,iBAAiB4J,MAC3D9H,EAAO,GAEH8H,KACFW,EAAM,GAEFve,EAAS,MAAM,aAAa,CAAC8d,KAAiB,CAACE,OACjDC,EAAW,MAGbC,EAAc,GACdC,EAA2B;AAAA,MAGjC;AAAA,MACA,SAAS,WAAmB;AAC1B,QAAIne,EAAS,MAAM,gBAAgB,CAAC8d,MAC9BC,MACF5I,EAAYoI,EAAW,GACvBQ,IAAc,KAGXC,EAAoB,KACvBC,EAAW;AAAA,MAGjB;AAAA,MACA,WAAW,SAAmBnoB,GAAGb,GAAO;AACtC,QAAI8a,GAAa9a,CAAK,MACpBsoB,KAAc;AAAA,UACZ,SAAStoB,EAAM;AAAA,UACf,SAASA,EAAM;AAAA,QAC3B,IAGQ6oB,IAAgB7oB,EAAM,SAAS;AAAA,MACjC;AAAA,MACA,UAAU,WAAoB;AAC5B,QAAI+K,EAAS,MAAM,iBACjBme,EAA2B,GAC3BD,EAAc,GACdH,IAAc;AAAA,MAElB;AAAA,IACN;AAAA,EACE;AACF;AAEA,SAASS,GAAS3N,GAAOrF,GAAU;AACjC,MAAIiT;AAEJ,SAAO;AAAA,IACL,eAAe,OAAO,OAAO,CAAA,GAAI5N,EAAM,eAAe;AAAA,MACpD,WAAW,CAAA,EAAG,UAAU4N,IAAuB5N,EAAM,kBAAkB,OAAO,SAAS4N,EAAqB,cAAc,CAAA,GAAI,OAAO,SAAUlmB,GAAM;AACnJ,YAAIE,IAAOF,EAAK;AAChB,eAAOE,MAAS+S,EAAS;AAAA,MAC3B,CAAC,GAAG,CAACA,CAAQ,CAAC;AAAA,IACpB,CAAK;AAAA,EACL;AACA;AAEA,IAAIkT,KAAoB;AAAA,EACtB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,IAAI,SAAY1e,GAAU;AACxB,QAAIlJ,IAAYkJ,EAAS;AAEzB,aAASsc,IAAY;AACnB,aAAO,CAAC,CAACtc,EAAS,MAAM;AAAA,IAC1B;AAEA,QAAI/I,GACA0nB,IAAkB,IAClBd,IAAmB,IACnBe,IAAkB,CAAA,GAClBpT,IAAW;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,IAAI,SAAY3S,GAAO;AACrB,YAAIL,IAAQK,EAAM;AAElB,QAAIyjB,EAAS,MACPsC,EAAgB,QAAQpmB,EAAM,SAAS,MAAM,OAC/ComB,IAAkB,CAAA,IAGhB3nB,MAAcuB,EAAM,aAAaomB,EAAgB,QAAQpmB,EAAM,SAAS,MAAM,OAChFomB,EAAgB,KAAKpmB,EAAM,SAAS,GACpCwH,EAAS,SAAS;AAAA;AAAA,UAEhB,wBAAwB,WAAkC;AACxD,mBAAO6e,EAAwBrmB,EAAM,SAAS;AAAA,UAChD;AAAA,QACd,CAAa,IAGHvB,IAAYuB,EAAM;AAAA,MAEtB;AAAA,IACN;AAEI,aAASqmB,EAAwB5nB,GAAW;AAC1C,aAAO6nB,GAA4BrP,GAAmBxY,CAAS,GAAGH,EAAU,yBAAyB4Y,GAAU5Y,EAAU,eAAc,CAAE,GAAG6nB,CAAe;AAAA,IAC7J;AAEA,aAASI,EAAiBnM,GAAc;AACtC,MAAAiL,IAAmB,IACnB7d,EAAS,SAAS4S,CAAY,GAC9BiL,IAAmB;AAAA,IACrB;AAEA,aAASmB,IAAc;AACrB,MAAKnB,KACHkB,EAAiBP,GAASxe,EAAS,OAAOwL,CAAQ,CAAC;AAAA,IAEvD;AAEA,WAAO;AAAA,MACL,UAAUwT;AAAA,MACV,eAAeA;AAAA,MACf,WAAW,SAAmBlpB,GAAGb,GAAO;AACtC,YAAI8a,GAAa9a,CAAK,GAAG;AACvB,cAAIyS,IAAQgI,GAAU1P,EAAS,UAAU,eAAc,CAAE,GACrDif,IAAavX,EAAM,KAAK,SAAUjO,GAAM;AAC1C,mBAAOA,EAAK,OAAO,KAAKxE,EAAM,WAAWwE,EAAK,QAAQ,KAAKxE,EAAM,WAAWwE,EAAK,MAAM,KAAKxE,EAAM,WAAWwE,EAAK,SAAS,KAAKxE,EAAM;AAAA,UACxI,CAAC,GACGuY,IAAQ9F,EAAM,QAAQuX,CAAU;AACpC,UAAAN,IAAkBnR,IAAQ,KAAKA,IAAQmR;AAAA,QACzC;AAAA,MACF;AAAA,MACA,UAAU,WAAoB;AAC5B,QAAAA,IAAkB;AAAA,MACpB;AAAA,IACN;AAAA,EACE;AACF;AACA,SAASG,GAA4BI,GAAsBC,GAAcC,GAAaT,GAAiB;AAErG,MAAIS,EAAY,SAAS,KAAKF,MAAyB;AACrD,WAAOC;AAIT,MAAIC,EAAY,WAAW,KAAKT,KAAmB,KAAKS,EAAY,CAAC,EAAE,OAAOA,EAAY,CAAC,EAAE;AAC3F,WAAOA,EAAYT,CAAe,KAAKQ;AAGzC,UAAQD,GAAoB;AAAA,IAC1B,KAAK;AAAA,IACL,KAAK,UACH;AACE,UAAIG,IAAYD,EAAY,CAAC,GACzBE,IAAWF,EAAYA,EAAY,SAAS,CAAC,GAC7CG,IAAQL,MAAyB,OACjC/oB,IAAMkpB,EAAU,KAChBjpB,IAASkpB,EAAS,QAClBhpB,IAAOipB,IAAQF,EAAU,OAAOC,EAAS,MACzCjpB,IAAQkpB,IAAQF,EAAU,QAAQC,EAAS,OAC3CtlB,IAAQ3D,IAAQC,GAChB2D,IAAS7D,IAASD;AACtB,aAAO;AAAA,QACL,KAAKA;AAAA,QACL,QAAQC;AAAA,QACR,MAAME;AAAA,QACN,OAAOD;AAAA,QACP,OAAO2D;AAAA,QACP,QAAQC;AAAA,MAClB;AAAA,IACM;AAAA,IAEF,KAAK;AAAA,IACL,KAAK,SACH;AACE,UAAIulB,IAAU,KAAK,IAAI,MAAM,MAAMJ,EAAY,IAAI,SAAU1X,GAAO;AAClE,eAAOA,EAAM;AAAA,MACf,CAAC,CAAC,GACE+X,IAAW,KAAK,IAAI,MAAM,MAAML,EAAY,IAAI,SAAU1X,GAAO;AACnE,eAAOA,EAAM;AAAA,MACf,CAAC,CAAC,GACEgY,IAAeN,EAAY,OAAO,SAAU3lB,GAAM;AACpD,eAAOylB,MAAyB,SAASzlB,EAAK,SAAS+lB,IAAU/lB,EAAK,UAAUgmB;AAAA,MAClF,CAAC,GACGE,IAAOD,EAAa,CAAC,EAAE,KACvBE,IAAUF,EAAaA,EAAa,SAAS,CAAC,EAAE,QAChDG,IAAQL,GACRM,IAASL,GAETM,IAASD,IAASD,GAElBG,IAAUJ,IAAUD;AAExB,aAAO;AAAA,QACL,KAAKA;AAAA,QACL,QAAQC;AAAA,QACR,MAAMC;AAAA,QACN,OAAOC;AAAA,QACP,OAAOC;AAAA,QACP,QAAQC;AAAA,MAClB;AAAA,IACM;AAAA,IAEF;AAEI,aAAOb;AAAA,EAEf;AACA;AAEA,IAAIc,KAAS;AAAA,EACX,MAAM;AAAA,EACN,cAAc;AAAA,EACd,IAAI,SAAYjgB,GAAU;AACxB,QAAIlJ,IAAYkJ,EAAS,WACrBnJ,IAASmJ,EAAS;AAEtB,aAASkgB,IAAe;AACtB,aAAOlgB,EAAS,iBAAiBA,EAAS,eAAe,MAAM,SAAS,YAAYlJ;AAAA,IACtF;AAEA,aAASqpB,EAAYlsB,GAAO;AAC1B,aAAO+L,EAAS,MAAM,WAAW,MAAQA,EAAS,MAAM,WAAW/L;AAAA,IACrE;AAEA,QAAImsB,IAAc,MACdC,IAAc;AAElB,aAASC,IAAiB;AACxB,UAAIC,IAAiBJ,EAAY,WAAW,IAAID,EAAY,EAAG,sBAAqB,IAAK,MACrFM,IAAiBL,EAAY,QAAQ,IAAItpB,EAAO,sBAAqB,IAAK;AAE9E,OAAI0pB,KAAkBE,GAAkBL,GAAaG,CAAc,KAAKC,KAAkBC,GAAkBJ,GAAaG,CAAc,MACjIxgB,EAAS,kBACXA,EAAS,eAAe,OAAM,GAIlCogB,IAAcG,GACdF,IAAcG,GAEVxgB,EAAS,MAAM,aACjB,sBAAsBsgB,CAAc;AAAA,IAExC;AAEA,WAAO;AAAA,MACL,SAAS,WAAmB;AAC1B,QAAItgB,EAAS,MAAM,UACjBsgB,EAAc;AAAA,MAElB;AAAA,IACN;AAAA,EACE;AACF;AAEA,SAASG,GAAkBC,GAAOC,GAAO;AACvC,SAAID,KAASC,IACJD,EAAM,QAAQC,EAAM,OAAOD,EAAM,UAAUC,EAAM,SAASD,EAAM,WAAWC,EAAM,UAAUD,EAAM,SAASC,EAAM,OAGlH;AACT;AAEAvF,GAAM,gBAAgB;AAAA,EACpB,QAAQtH;AACV,CAAC;AAEDsH,GAAM,gBAAgB;AAAA;AAAA,EAElB,QAAQ,CAAApb,MAAY;AAChB,QAAI,CAACA,EAAS,MAAM;AAChB,aAAO;AAAA,EACf;AACJ,CAAC;AACD,MAAM4gB,KAAsB,CAAC3sB,MAClBA,aAAiB,UAAU,OAAOA,KAAS,SAASA;AAE/D,SAAS4sB,GAAS7rB,GAAI8rB,IAAO,IAAIC,IAAW,EAAE,OAAO,IAAM,SAAS,WAAW;AAC3E,EAAAA,IAAW,OAAO,OAAO,EAAE,OAAO,IAAM,SAAS,WAAWA,CAAQ;AACpE,QAAMC,IAAKC,MACLjhB,IAAW+c,MACXvkB,IAAQukB,GAAI;AAAA,IACd,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACjB,CAAK,GACKmE,IAAcC;AACpB,MAAIC,IAAY;AAChB,QAAMC,IAAe,MACbD,MAEJA,IAAY,SAAS,0BACdA,IAELE,IAAa,CAAC3N,MAAY;AAC5B,QAAI4N,GACAC,KAAmBC,GAAM9N,CAAO,IAC9BA,EAAQ,QACRA;AACN,WAAI+N,GAAQF,EAAgB,KACnBN,EAAY,UACbA,EAAY,QAAQS,GAAU;AAAA,MAC1B,MAAMZ,EAAS;AAAA,MACf,OAAO,MACI,MAAMU,GAAM9N,CAAO,IAAIA,EAAQ,QAAQA;AAAA,IAEtE,CAAiB,GACGqN,KACA,OAAO,OAAOE,EAAY,MAAM,UAAUF,EAAG,UAAU,GAE3DE,EAAY,MAAM,MAAMG,EAAY,CAAE,IAE1CE,IAAa,MAAMF,OAEd,OAAOG,MAAqB,YAC5BN,EAAY,UACbA,EAAY,QAAQS,GAAU;AAAA,MAC1B,MAAMZ,EAAS;AAAA,MACf,OAAO,MACI,MAAMa,GAAEH,GAAM9N,CAAO,IAAIA,EAAQ,QAAQA,CAAO;AAAA,IAE/E,CAAiB,GACGqN,KACA,OAAO,OAAOE,EAAY,MAAM,UAAUF,EAAG,UAAU,GAE3DE,EAAY,MAAM,MAAMG,EAAY,CAAE,IAE1CE,IAAa,MAAMF,OAGnBE,IAAaC,IAEVD;AAAA,EACX,GACM/C,IAAW,CAACsC,MAAS;AACvB,QAAIzsB,IAAU,CAAA;AACd,WAAIotB,GAAMX,CAAI,IACVzsB,IAAUysB,EAAK,SAAS,KAEnBe,GAAWf,CAAI,IACpBzsB,IAAU,EAAE,GAAGysB,MAGfzsB,IAAU,EAAE,GAAGysB,KAEfzsB,EAAQ,YACRA,EAAQ,UAAUitB,EAAWjtB,EAAQ,OAAO,IAE5CA,EAAQ,kBACRA,EAAQ,gBAAgBotB,GAAMptB,EAAQ,aAAa,IAC7CA,EAAQ,cAAc,QACtBA,EAAQ,iBAEd,CAACA,EAAQ,WAAW,CAAC,MAAM,QAAQA,EAAQ,OAAO,OAClDA,EAAQ,UAAU,KAEtBA,EAAQ,UAAUA,EAAQ,QAAQ,OAAO,CAAC2e,OAAWA,GAAO,SAAS,uBAAuB,GAC5F3e,EAAQ,QAAQ,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,OACO;AAAA,QACH,WAAW;AACP,UAAAmE,EAAM,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,UAAU;AACN,UAAAA,EAAM,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,SAAS;AACL,UAAAA,EAAM,MAAM,YAAY,IACxBA,EAAM,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,UAAU;AACN,UAAAA,EAAM,MAAM,UAAU;AAAA,QAC1B;AAAA,QACA,SAAS;AACL,UAAAA,EAAM,MAAM,YAAY,IACxBA,EAAM,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,WAAW;AACP,UAAAA,EAAM,MAAM,UAAU;AAAA,QAC1B;AAAA,QACA,cAAc;AACV,UAAAA,EAAM,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,YAAY;AACR,UAAAA,EAAM,MAAM,cAAc;AAAA,QAC9B;AAAA,MACpB;AAAA,IAEA,CAAS,GACMnE;AAAA,EACX,GACMytB,IAAU,MAAM;AAClB,IAAK9hB,EAAS,SAEdA,EAAS,MAAM,SAASwe,EAASsC,CAAI,CAAC;AAAA,EAC1C,GACMiB,IAAiB,MAAM;AACzB,IAAI,CAAC/hB,EAAS,SAAS,CAAC8gB,EAAK,WAE7B9gB,EAAS,MAAM,WAAWshB,EAAWR,EAAK,OAAO,CAAC;AAAA,EACtD,GACMpN,IAAa,CAACzf,MAAU;AAC1B,QAAI+tB;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG,WAAWV,EAAWrtB,CAAK,CAAC;AAAA,EAC9F,GACMuhB,IAAW,CAACvhB,MAAU;AACxB,QAAI+tB;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG,SAASxD,EAASvqB,CAAK,CAAC;AAAA,EAC1F,GACM6hB,IAAU,MAAM;AAClB,QAAIkM;AACJ,IAAIhiB,EAAS,UACTA,EAAS,MAAM,WACfA,EAAS,QAAQ,SAErBohB,IAAY,OACXY,IAAKd,EAAY,WAAW,QAAQc,MAAO,UAAkBA,EAAG,WACjEd,EAAY,QAAQ;AAAA,EACxB,GACMzL,IAAO,MAAM;AACf,QAAIuM;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG;EAClE,GACM/a,IAAO,MAAM;AACf,QAAI+a;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG;EAClE,GACMpM,IAAU,MAAM;AAClB,QAAIoM;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG,WAC9DxpB,EAAM,MAAM,YAAY;AAAA,EAC5B,GACMmd,IAAS,MAAM;AACjB,QAAIqM;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG,UAC9DxpB,EAAM,MAAM,YAAY;AAAA,EAC5B,GACMqd,IAAU,MAAM;AAClB,QAAImM;AACJ,KAACA,IAAKhiB,EAAS,WAAW,QAAQgiB,MAAO,UAAkBA,EAAG;EAClE,GACM9H,IAAQ,MAAM;AAChB,QAAI,CAACllB;AACD;AACJ,QAAIiN,IAASwf,GAAMzsB,CAAE,IAAIA,EAAG,QAAQA;AACpC,IAAI,OAAOiN,KAAW,eAClBA,IAASA,EAAM,IACf2e,GAAoB3e,CAAM,MAC1BA,IAASA,EAAO,MAEhBA,MAEAjC,EAAS,QAAQob,GAAMnZ,GAAQuc,EAASsC,CAAI,CAAC,GAE7C7e,EAAO,SAASggB;AAAA,EAExB,GACMA,IAAW;AAAA,IACb,OAAOjiB;AAAA,IACP,SAAA8hB;AAAA,IACA,gBAAAC;AAAA,IACA,YAAArO;AAAA,IACA,UAAA8B;AAAA,IACA,SAAAM;AAAA,IACA,MAAA7O;AAAA,IACA,MAAAwO;AAAA,IACA,SAAAG;AAAA,IACA,QAAAD;AAAA,IACA,SAAAE;AAAA,IACA,OAAAqE;AAAA,IACA,OAAA1hB;AAAA,EACR;AACI,SAAIuoB,EAAS,UACLC,IACIA,EAAG,YACH9G,MAGAgI,GAAUhI,CAAK,IAInBA,MAGJ8G,KACAmB,GAAY,MAAM;AACd,IAAArM;EACJ,CAAC,GAED2L,GAAMX,CAAI,KAAKe,GAAWf,CAAI,IAC9BxsB,GAAMwsB,GAAMgB,GAAS,EAAE,WAAW,GAAK,CAAE,IAEpCL,GAAMX,EAAK,OAAO,KACvBxsB,GAAMwsB,EAAK,SAASiB,GAAgB,EAAE,WAAW,GAAK,CAAE,GAErDE;AACX;AAgBA,SAASG,GAAa5G,GAAWF,GAAe;AAC5C,QAAMkB,IAAYO;AAClB,SAAAmF,GAAU,MAAM;AAMZ,UAAMvG,KALwB,MAAM,QAAQH,CAAS,IAC/CA,EAAU,IAAI,CAAAxV,MAAKA,EAAE,KAAK,IAC1B,OAAOwV,KAAc,aACjBA,EAAS,IACTA,EAAU,OAEf,IAAI,CAACxb,MACFA,aAAoB,UAEbA,EAAS,SAEbA,CACV,EACI,OAAO,OAAO;AACnB,IAAAwc,EAAU,QAAQd,GAAgBC,GAAgBL,IAC5C,EAAE,WAAW,IAAM,GAAGA,EAAa,IACnC,EAAE,WAAW,GAAI,CAAE;AAAA,EAC7B,CAAC,GACM;AAAA,IACH,WAAAkB;AAAA,EACR;AACA;AAEA,SAAS5nB,GAAQ,GAAG;AAChB,SAAO,OAAO,KAAM,aACd,EAAC,IACDa,GAAM,CAAC;AACjB;AACA,SAASjB,GAAaC,GAAO;AACzB,MAAIutB,GAAIK;AACR,QAAM1tB,IAAQC,GAAQH,CAAK;AAC3B,UAAQ4tB,KAAML,IAAKrtB,OAAW,QAAQqtB,MAAO,SAAS,SAASA,EAAG,SAAS,QAAQK,MAAO,SAASA,IAAK1tB;AAC5G;AACA,MAAM2tB,KAAiBC,GAAgB;AAAA,EACnC,OAAO;AAAA,IACH,IAAI;AAAA,MACA,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACnC;AAAA,IACQ,KAAK;AAAA,MACD,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACrB;AAAA,IACQ,YAAY;AAAA,MACR,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACrB;AAAA,IACQ,cAAc;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACrB;AAAA,IACQ,UAAU,EAAE,SAAS,MAAMnH,GAAM,aAAa,SAAW;AAAA,IACzD,MAAM,EAAE,SAAS,MAAMA,GAAM,aAAa,KAAO;AAAA,IACjD,OAAO,EAAE,SAAS,MAAMA,GAAM,aAAa,MAAQ;AAAA,IACnD,UAAU,EAAE,SAAS,MAAMA,GAAM,aAAa,SAAW;AAAA,IACzD,wBAAwB,EAAE,SAAS,MAAMA,GAAM,aAAa,uBAAyB;AAAA,IACrF,aAAa,EAAE,MAAM,CAAC,SAAS,MAAM,GAAG,SAAS,MAAMA,GAAM,aAAa,YAAc;AAAA,IACxF,kBAAkB,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,iBAAmB;AAAA,IACxF,aAAa,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,YAAc;AAAA,IAC9E,mBAAmB,EAAE,SAAS,MAAMA,GAAM,aAAa,kBAAoB;AAAA,IAC3E,qBAAqB,EAAE,SAAS,MAAMA,GAAM,aAAa,oBAAsB;AAAA,IAC/E,gBAAgB,EAAE,SAAS,MAAMA,GAAM,aAAa,eAAiB;AAAA,IACrE,QAAQ,EAAE,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,IACrD,eAAe,EAAE,SAAS,MAAMA,GAAM,aAAa,cAAgB;AAAA,IACnE,gBAAgB,EAAE,SAAS,MAAMA,GAAM,aAAa,eAAiB;AAAA,IACrE,UAAU,EAAE,SAAS,MAAMA,GAAM,aAAa,SAAW;AAAA,IACzD,WAAW,EAAE,SAAS,MAAMA,GAAM,aAAa,UAAY;AAAA,IAC3D,UAAU,EAAE,SAAS,MAAMA,GAAM,aAAa,SAAW;AAAA,IACzD,QAAQ,EAAE,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,IACrD,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,QAAQ,EAAE,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,IACrD,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,WAAW,EAAE,SAAS,MAAMA,GAAM,aAAa,UAAY;AAAA,IAC3D,aAAa,EAAE,SAAS,MAAMA,GAAM,aAAa,YAAc;AAAA,IAC/D,gBAAgB,EAAE,SAAS,MAAMA,GAAM,aAAa,eAAiB;AAAA,IACrE,WAAW,EAAE,SAAS,MAAMA,GAAM,aAAa,UAAY;AAAA,IAC3D,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,eAAe,EAAE,SAAS,MAAMA,GAAM,aAAa,cAAgB;AAAA,IACnE,QAAQ,EAAE,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,IACrD,cAAc,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,aAAe;AAAA,IAChF,OAAO,EAAE,MAAM,CAAC,SAAS,QAAQ,KAAK,GAAG,SAAS,MAAMA,GAAM,aAAa,MAAQ;AAAA,IACnF,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,eAAe,EAAE,SAAS,MAAMA,GAAM,aAAa,cAAgB;AAAA,IACnE,aAAa,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,YAAc;AAAA,IAC9E,cAAc,EAAE,MAAM,CAAC,SAAS,MAAM,GAAG,SAAS,MAAMA,GAAM,aAAa,aAAe;AAAA,IAC1F,mBAAmB,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,kBAAoB;AAAA,IAC1F,QAAQ,EAAE,MAAM,CAAC,SAAS,MAAM,GAAG,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,IAC9E,WAAW,EAAE,MAAM,SAAS,SAAS,MAAMA,GAAM,aAAa,UAAY;AAAA,IAC1E,WAAW,EAAE,SAAS,MAAMA,GAAM,aAAa,UAAY;AAAA,IAC3D,OAAO,EAAE,SAAS,MAAMA,GAAM,aAAa,MAAQ;AAAA,IACnD,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,SAAS,EAAE,SAAS,MAAMA,GAAM,aAAa,QAAU;AAAA,IACvD,UAAU,EAAE,SAAS,MAAMA,GAAM,aAAa,SAAW;AAAA,IACzD,MAAM,EAAE,SAAS,MAAMA,GAAM,aAAa,KAAO;AAAA,IACjD,OAAO,EAAE,SAAS,MAAMA,GAAM,aAAa,MAAQ;AAAA,IACnD,QAAQ,EAAE,SAAS,MAAMA,GAAM,aAAa,OAAS;AAAA,EAC7D;AAAA,EACI,OAAO,CAAC,OAAO;AAAA,EACf,MAAMvK,GAAO,EAAE,OAAA2R,GAAO,MAAAC,GAAM,QAAAC,EAAM,GAAI;AAClC,UAAMC,IAAO5F,MACP6F,IAAmB7F,MACnB8F,IAAc9F,MACd+F,IAAU/F,GAAI,EAAK,GACnBgG,IAAa,MAAM;AACrB,UAAI1uB,IAAU,EAAE,GAAGwc;AACnB,iBAAW+L,KAAQ,CAAC,MAAM,OAAO,cAAc,cAAc;AACzD,QAAIvoB,EAAQ,eAAeuoB,CAAI,KAE3B,OAAOvoB,EAAQuoB,CAAI;AAG3B,aAAOvoB;AAAA,IACX;AACA,QAAI4N,IAAS,MAAMzN,GAAamuB,CAAI;AACpC,IAAI9R,EAAM,OACF,OAAO,UAAY,OAAeA,EAAM,cAAc,UACtD5O,IAAS,MAAM4O,EAAM,KAEhBA,EAAM,OAAO,WAClB5O,IAAS,MAAM;AACX,UAAIjN,IAAK2tB,EAAK;AACd,aAAK3tB,MACDA,IAAK2tB,EAAK,QAAQC,EAAiB,MAAM,gBAEtC5tB;AAAA,IACX,KAEK,OAAO6b,EAAM,MAAO,YAAYA,EAAM,cAAc,YACzD5O,IAAS,MAAM,SAAS,cAAc4O,EAAM,EAAE;AAGtD,UAAMuK,IAAQyF,GAAS5e,GAAQ8gB,EAAU,CAAE;AAC3C,QAAIC,IAAcR,EAAM;AACxB,IAAI,CAACQ,KAAenS,EAAM,OAAO,aAC7BmS,IAAcR,EAAM,UAExBN,GAAU,MAAM;AACZ,MAAAY,EAAQ,QAAQ,IAChBG,GAAS,MAAM;AACX,QAAID,KACA5H,EAAM,WAAW,MAAMyH,EAAY,KAAK;AAAA,MAChD,CAAC;AAAA,IACL,CAAC,GACDvuB,GAAM8mB,EAAM,OAAO,MAAM;AACrB,MAAAqH,EAAK,SAAShtB,GAAM2lB,EAAM,KAAK,CAAC;AAAA,IACpC,GAAG,EAAE,WAAW,IAAM,MAAM,GAAI,CAAE,GAClC9mB,GAAM,MAAMuc,GAAO,MAAM;AACrB,MAAAuK,EAAM,SAAS2H,EAAU,CAAE,GACvBC,KACA5H,EAAM,WAAW,MAAMyH,EAAY,KAAK;AAAA,IAChD,GAAG,EAAE,MAAM,GAAI,CAAE;AACjB,QAAIK,IAAUC,GAAS;AAAA,MACnB,MAAAR;AAAA,MACA,aAAAE;AAAA,MACA,SAAAC;AAAA,MACA,GAAG1H;AAAA,IACf,CAAS;AACD,WAAAsH,EAAOQ,CAAO,GACP,MAAM;AACT,YAAME,KAAa,OAAOvS,EAAM,cAAe,UAAWA,EAAM,aAC1D8C,IAAUqP,IACVpB,GAAEwB,GAAY;AAAA,QACZ,KAAKP;AAAA,QACL,OAAO,EAAE,SAASC,EAAQ,QAAQ,YAAY,OAAM;AAAA,QACpD,OAAOjS,EAAM;AAAA,MACjC,GAAmBmS,EAAYE,CAAO,CAAC,IACrB;AACN,UAAIrS,EAAM,OAAO,UAAU;AACvB,cAAMtF,IAAS,CAAA;AACf,YAAI,CAACoX,EAAK,OAAO;AACb,gBAAMU,IAAuBzB,GAAE,QAAQ;AAAA,YACnC,KAAKgB;AAAA,YACL,gBAAgB;AAAA,YAChB,OAAO,EAAE,SAAS,OAAM;AAAA,UAChD,CAAqB;AACD,UAAArX,EAAO,KAAK8X,CAAoB;AAAA,QACpC;AACA,eAAI1P,KACApI,EAAO,KAAKoI,CAAO,GAEhBpI;AAAA,MACX;AACA,YAAM+X,IAAOd,EAAM,UAAUA,EAAM,QAAQU,CAAO,IAAI;AACtD,UAAI,CAACrS,EAAM,KAAK;AACZ,cAAM0S,IAAU3B,GAAE0B,EAAK,CAAC,GAAG;AAAA,UACvB,KAAKX;AAAA,UAAM,gBAAgB;AAAA,QAC/C,CAAiB;AACD,eAAOhP,IAAU,CAAC4P,GAAS5P,CAAO,IAAI4P;AAAA,MAC1C;AACA,YAAMC,KAAM,OAAO3S,EAAM,OAAQ,UAAWA,EAAM;AAClD,aAAO+Q,GAAE4B,GAAK,EAAE,KAAKb,GAAM,gBAAgB,GAAE,GAAIhP,IAAU,CAAC2P,GAAM3P,CAAO,IAAI2P,CAAI;AAAA,IACrF;AAAA,EACJ;AACJ,CAAC,GAEKG,KAAe;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAI5S,KAAQ,CAAA;AACZ,OAAO,KAAKuK,GAAM,YAAY,EAAE,QAAQ,CAACwB,MAAS;AAC9C,EAAI6G,GAAa,SAAS7G,CAAI,IAC1B/L,GAAM+L,CAAI,IAAI;AAAA,IACV,MAAM;AAAA,IACN,SAAS,WAAY;AACjB,aAAOxB,GAAM,aAAawB,CAAI;AAAA,IAClC;AAAA,EACZ,IAGQ/L,GAAM+L,CAAI,IAAI;AAAA,IACV,SAAS,WAAY;AACjB,aAAOxB,GAAM,aAAawB,CAAI;AAAA,IAClC;AAAA,EACZ;AAEA,CAAC;AACD,MAAM8G,KAAiBnB,GAAgB;AAAA,EACnC,OAAA1R;AAAA,EACA,MAAMA,GAAO;AACT,UAAM2K,IAAYuB,GAAI,CAAA,CAAE,GAClB,EAAE,WAAAP,EAAS,IAAK4F,GAAa5G,GAAW3K,CAAK;AACnD,WAAO,EAAE,WAAA2K,GAAW,WAAAgB;EACxB;AAAA,EACA,UAAU;AACN,QAAIwF;AAEJ,UAAMzG,IADS,KAAK,IAAI,cACA,iBAAiB,gBAAgB;AACzD,SAAK,YAAY,MAAM,KAAKA,CAAQ,EAC/B,IAAI,CAACvmB,MAAOA,EAAG,MAAM,EACrB,OAAO,OAAO,IAClBgtB,IAAK,KAAK,eAAe,QAAQA,MAAO,UAAkBA,EAAG,aAAa,KAAK,SAAS;AAAA,EAC7F;AAAA,EACA,SAAS;AACL,QAAIsB,IAAO,KAAK,OAAO,UAAU,KAAK,OAAO,QAAO,IAAK;AACzD,WAAO1B,GAAE,MAAM0B,CAAI;AAAA,EACvB;AACJ,CAAC,GAEKK,KAAY;AAAA,EACd,QAAQ3uB,GAAI4uB,GAASC,GAAO;AACxB,UAAM/C,IAAO,OAAO8C,EAAQ,SAAU,WAAW,EAAE,SAASA,EAAQ,MAAK,IAAKA,EAAQ,SAAS,CAAA,GACzFxY,IAAY,OAAO,KAAKwY,EAAQ,aAAa,CAAA,CAAE,GAC/C3sB,IAAYmU,EAAU,KAAK,CAAAI,MAAYA,MAAa,OAAO,GAC3DsY,IAAY1Y,EAAU,UAAU,CAAAI,MAAYA,MAAa,OAAO,MAAM;AAC5E,IAAIvU,MACA6pB,EAAK,YAAYA,EAAK,aAAa7pB,IAEnC6sB,MACAhD,EAAK,QAAQA,EAAK,UAAU,SAAYA,EAAK,QAAQ,KAErD+C,EAAM,SAASA,EAAM,MAAM,gBAC3B/C,EAAK,SAAS,YAAahsB,GAAM;AAC7B,UAAIktB;AACJ,cAAQA,IAAK6B,EAAM,WAAW,QAAQ7B,MAAO,SAAS,SAASA,EAAG,YAAY,GAAGltB,CAAI;AAAA,IACzF,IAEA+uB,EAAM,SAASA,EAAM,MAAM,iBAC3B/C,EAAK,UAAU,YAAahsB,GAAM;AAC9B,UAAIktB;AACJ,cAAQA,IAAK6B,EAAM,WAAW,QAAQ7B,MAAO,SAAS,SAASA,EAAG,aAAa,GAAGltB,CAAI;AAAA,IAC1F,IAEA+uB,EAAM,SAASA,EAAM,MAAM,kBAC3B/C,EAAK,WAAW,YAAahsB,GAAM;AAC/B,UAAIktB;AACJ,cAAQA,IAAK6B,EAAM,WAAW,QAAQ7B,MAAO,SAAS,SAASA,EAAG,cAAc,GAAGltB,CAAI;AAAA,IAC3F,IAEA+uB,EAAM,SAASA,EAAM,MAAM,gBAC3B/C,EAAK,SAAS,YAAahsB,GAAM;AAC7B,UAAIktB;AACJ,cAAQA,IAAK6B,EAAM,WAAW,QAAQ7B,MAAO,SAAS,SAASA,EAAG,YAAY,GAAGltB,CAAI;AAAA,IACzF,IAEA+uB,EAAM,SAASA,EAAM,MAAM,iBAC3B/C,EAAK,UAAU,YAAahsB,GAAM;AAC9B,UAAIktB;AACJ,cAAQA,IAAK6B,EAAM,WAAW,QAAQ7B,MAAO,SAAS,SAASA,EAAG,aAAa,GAAGltB,CAAI;AAAA,IAC1F,IAEAE,EAAG,aAAa,OAAO,KAAK,CAAC8rB,EAAK,YAClCA,EAAK,UAAU9rB,EAAG,aAAa,OAAO,GACtCA,EAAG,gBAAgB,OAAO,IAE1BA,EAAG,aAAa,SAAS,KAAK,CAAC8rB,EAAK,YACpCA,EAAK,UAAU9rB,EAAG,aAAa,SAAS,IAE5C6rB,GAAS7rB,GAAI8rB,CAAI;AAAA,EACrB;AAAA,EACA,UAAU9rB,GAAI;AACV,IAAIA,EAAG,SACHA,EAAG,OAAO,YAELA,EAAG,UACRA,EAAG,OAAO;EAElB;AAAA,EACA,QAAQA,GAAI4uB,GAAS;AACjB,UAAM9C,IAAO,OAAO8C,EAAQ,SAAU,WAAW,EAAE,SAASA,EAAQ,MAAK,IAAKA,EAAQ,SAAS,CAAA;AAE/F,IAAK9C,EAAK,YACNA,EAAK,UAAU,OAEf9rB,EAAG,aAAa,OAAO,KAAK,CAAC8rB,EAAK,YAClCA,EAAK,UAAU9rB,EAAG,aAAa,OAAO,GACtCA,EAAG,gBAAgB,OAAO,IAE1BA,EAAG,aAAa,SAAS,KAAK,CAAC8rB,EAAK,YACpCA,EAAK,UAAU9rB,EAAG,aAAa,SAAS,IAExCA,EAAG,SACHA,EAAG,OAAO,SAAS8rB,KAAQ,CAAA,CAAE,IAExB9rB,EAAG,UACRA,EAAG,OAAO,SAAS8rB,KAAQ,CAAA,CAAE;AAAA,EAErC;AACJ,GAEM9N,KAAS;AAAA,EACX,QAAQ+Q,GAAK1vB,IAAU,IAAI;AACvB,IAAA+mB,GAAM,gBAAgB/mB,EAAQ,gBAAgB,CAAA,CAAE,GAChD0vB,EAAI,UAAU1vB,EAAQ,aAAa,SAASsvB,EAAS,GACrDI,EAAI,UAAU1vB,EAAQ,aAAa,SAASiuB,EAAc,GAC1DyB,EAAI,UAAU1vB,EAAQ,sBAAsB,mBAAmBqvB,EAAc;AAAA,EACjF;AACJ,GAEMM,KAAoB5I,GAAM;AAChC4I,GAAkB;AAAA,EACd,kBAAkB;AAAA,EAClB,SAAS,CAAC/D,IAAQvB,IAAmBd,IAAcT,EAAW;AAClE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCj9ID8G,GAAA,aAAqBC,GACrBD,GAAA,cAAsBE,GACtBF,GAAA,gBAAwBG;AAOxB,WALIC,IAAS,CAAA,GACTC,IAAY,CAAA,GACZC,IAAM,OAAO,aAAe,MAAc,aAAa,OAEvDC,IAAO,oEACF,IAAI,GAAG7nB,IAAM6nB,EAAK,QAAQ,IAAI7nB,GAAK,EAAE;AAC5C,IAAA0nB,EAAO,CAAC,IAAIG,EAAK,CAAC,GAClBF,EAAUE,EAAK,WAAW,CAAC,CAAC,IAAI;AAKlC,EAAAF,EAAU,EAAiB,IAAI,IAC/BA,EAAU,EAAiB,IAAI;AAE/B,WAASG,EAASC,GAAK;AACrB,QAAI/nB,IAAM+nB,EAAI;AAEd,QAAI/nB,IAAM,IAAI;AACZ,YAAM,IAAI,MAAM,gDAAgD;AAKlE,QAAIgoB,IAAWD,EAAI,QAAQ,GAAG;AAC9B,IAAIC,MAAa,OAAIA,IAAWhoB;AAEhC,QAAIioB,IAAkBD,MAAahoB,IAC/B,IACA,IAAKgoB,IAAW;AAEpB,WAAO,CAACA,GAAUC,CAAe;AAAA,EACnC;AAGA,WAASV,EAAYQ,GAAK;AACxB,QAAIG,IAAOJ,EAAQC,CAAG,GAClBC,IAAWE,EAAK,CAAC,GACjBD,IAAkBC,EAAK,CAAC;AAC5B,YAASF,IAAWC,KAAmB,IAAI,IAAKA;AAAA,EAClD;AAEA,WAASE,EAAaJ,GAAKC,GAAUC,GAAiB;AACpD,YAASD,IAAWC,KAAmB,IAAI,IAAKA;AAAA,EAClD;AAEA,WAAST,EAAaO,GAAK;AACzB,QAAIK,GACAF,IAAOJ,EAAQC,CAAG,GAClBC,IAAWE,EAAK,CAAC,GACjBD,IAAkBC,EAAK,CAAC,GAExBvV,IAAM,IAAIiV,EAAIO,EAAYJ,GAAKC,GAAUC,CAAe,CAAC,GAEzDI,IAAU,GAGVroB,IAAMioB,IAAkB,IACxBD,IAAW,IACXA,GAEA3e;AACJ,SAAKA,IAAI,GAAGA,IAAIrJ,GAAKqJ,KAAK;AACxB,MAAA+e,IACGT,EAAUI,EAAI,WAAW1e,CAAC,CAAC,KAAK,KAChCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,KAAK,KACpCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,KAAK,IACrCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,GACjCsJ,EAAI0V,GAAS,IAAKD,KAAO,KAAM,KAC/BzV,EAAI0V,GAAS,IAAKD,KAAO,IAAK,KAC9BzV,EAAI0V,GAAS,IAAID,IAAM;AAGzB,WAAIH,MAAoB,MACtBG,IACGT,EAAUI,EAAI,WAAW1e,CAAC,CAAC,KAAK,IAChCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,KAAK,GACvCsJ,EAAI0V,GAAS,IAAID,IAAM,MAGrBH,MAAoB,MACtBG,IACGT,EAAUI,EAAI,WAAW1e,CAAC,CAAC,KAAK,KAChCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,KAAK,IACpCse,EAAUI,EAAI,WAAW1e,IAAI,CAAC,CAAC,KAAK,GACvCsJ,EAAI0V,GAAS,IAAKD,KAAO,IAAK,KAC9BzV,EAAI0V,GAAS,IAAID,IAAM,MAGlBzV;AAAA,EACT;AAEA,WAAS2V,EAAiBC,GAAK;AAC7B,WAAOb,EAAOa,KAAO,KAAK,EAAI,IAC5Bb,EAAOa,KAAO,KAAK,EAAI,IACvBb,EAAOa,KAAO,IAAI,EAAI,IACtBb,EAAOa,IAAM,EAAI;AAAA,EACrB;AAEA,WAASC,EAAaC,GAAO3uB,GAAOC,GAAK;AAGvC,aAFIquB,GACAM,IAAS,CAAA,GACJrf,IAAIvP,GAAOuP,IAAItP,GAAKsP,KAAK;AAChC,MAAA+e,KACIK,EAAMpf,CAAC,KAAK,KAAM,aAClBof,EAAMpf,IAAI,CAAC,KAAK,IAAK,UACtBof,EAAMpf,IAAI,CAAC,IAAI,MAClBqf,EAAO,KAAKJ,EAAgBF,CAAG,CAAC;AAElC,WAAOM,EAAO,KAAK,EAAE;AAAA,EACvB;AAEA,WAASjB,EAAegB,GAAO;AAQ7B,aAPIL,GACApoB,IAAMyoB,EAAM,QACZE,IAAa3oB,IAAM,GACnB4oB,IAAQ,CAAA,GACRC,IAAiB,OAGZxf,IAAI,GAAGyf,IAAO9oB,IAAM2oB,GAAYtf,IAAIyf,GAAMzf,KAAKwf;AACtD,MAAAD,EAAM,KAAKJ,EAAYC,GAAOpf,GAAIA,IAAIwf,IAAkBC,IAAOA,IAAQzf,IAAIwf,CAAe,CAAC;AAI7F,WAAIF,MAAe,KACjBP,IAAMK,EAAMzoB,IAAM,CAAC,GACnB4oB,EAAM;AAAA,MACJlB,EAAOU,KAAO,CAAC,IACfV,EAAQU,KAAO,IAAK,EAAI,IACxB;AAAA,IACN,KACaO,MAAe,MACxBP,KAAOK,EAAMzoB,IAAM,CAAC,KAAK,KAAKyoB,EAAMzoB,IAAM,CAAC,GAC3C4oB,EAAM;AAAA,MACJlB,EAAOU,KAAO,EAAE,IAChBV,EAAQU,KAAO,IAAK,EAAI,IACxBV,EAAQU,KAAO,IAAK,EAAI,IACxB;AAAA,IACN,IAGSQ,EAAM,KAAK,EAAE;AAAA,EACtB;;;;;;wBCpJAG,GAAA,OAAe,SAAUC,GAAQtoB,GAAQuoB,GAAMC,GAAMC,GAAQ;AAC3D,QAAIxwB,GAAG+X,GACH0Y,IAAQD,IAAS,IAAKD,IAAO,GAC7BG,KAAQ,KAAKD,KAAQ,GACrBE,IAAQD,KAAQ,GAChBE,IAAQ,IACRlgB,IAAI4f,IAAQE,IAAS,IAAK,GAC1BK,IAAIP,IAAO,KAAK,GAChBQ,IAAIT,EAAOtoB,IAAS2I,CAAC;AAOzB,SALAA,KAAKmgB,GAEL7wB,IAAI8wB,KAAM,KAAM,CAACF,KAAU,GAC3BE,MAAO,CAACF,GACRA,KAASH,GACFG,IAAQ,GAAG5wB,IAAKA,IAAI,MAAOqwB,EAAOtoB,IAAS2I,CAAC,GAAGA,KAAKmgB,GAAGD,KAAS;AAAG;AAK1E,SAHA7Y,IAAI/X,KAAM,KAAM,CAAC4wB,KAAU,GAC3B5wB,MAAO,CAAC4wB,GACRA,KAASL,GACFK,IAAQ,GAAG7Y,IAAKA,IAAI,MAAOsY,EAAOtoB,IAAS2I,CAAC,GAAGA,KAAKmgB,GAAGD,KAAS;AAAG;AAE1E,QAAI5wB,MAAM;AACR,MAAAA,IAAI,IAAI2wB;AAAA,SACH;AAAA,UAAI3wB,MAAM0wB;AACf,eAAO3Y,IAAI,OAAQ+Y,IAAI,KAAK,KAAK;AAEjC,MAAA/Y,IAAIA,IAAI,KAAK,IAAI,GAAGwY,CAAI,GACxBvwB,IAAIA,IAAI2wB;AAAA;AAEV,YAAQG,IAAI,KAAK,KAAK/Y,IAAI,KAAK,IAAI,GAAG/X,IAAIuwB,CAAI;AAAA,EAChD,GAEAH,GAAA,QAAgB,SAAUC,GAAQ1xB,GAAOoJ,GAAQuoB,GAAMC,GAAMC,GAAQ;AACnE,QAAIxwB,GAAG+X,GAAGgZ,GACNN,IAAQD,IAAS,IAAKD,IAAO,GAC7BG,KAAQ,KAAKD,KAAQ,GACrBE,IAAQD,KAAQ,GAChBM,IAAMT,MAAS,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,GAC1D7f,IAAI4f,IAAO,IAAKE,IAAS,GACzB,IAAIF,IAAO,IAAI,IACfQ,IAAInyB,IAAQ,KAAMA,MAAU,KAAK,IAAIA,IAAQ,IAAK,IAAI;AAmC1D,SAjCAA,IAAQ,KAAK,IAAIA,CAAK,GAElB,MAAMA,CAAK,KAAKA,MAAU,SAC5BoZ,IAAI,MAAMpZ,CAAK,IAAI,IAAI,GACvBqB,IAAI0wB,MAEJ1wB,IAAI,KAAK,MAAM,KAAK,IAAIrB,CAAK,IAAI,KAAK,GAAG,GACrCA,KAASoyB,IAAI,KAAK,IAAI,GAAG,CAAC/wB,CAAC,KAAK,MAClCA,KACA+wB,KAAK,IAEH/wB,IAAI2wB,KAAS,IACfhyB,KAASqyB,IAAKD,IAEdpyB,KAASqyB,IAAK,KAAK,IAAI,GAAG,IAAIL,CAAK,GAEjChyB,IAAQoyB,KAAK,MACf/wB,KACA+wB,KAAK,IAGH/wB,IAAI2wB,KAASD,KACf3Y,IAAI,GACJ/X,IAAI0wB,KACK1wB,IAAI2wB,KAAS,KACtB5Y,KAAMpZ,IAAQoyB,IAAK,KAAK,KAAK,IAAI,GAAGR,CAAI,GACxCvwB,IAAIA,IAAI2wB,MAER5Y,IAAIpZ,IAAQ,KAAK,IAAI,GAAGgyB,IAAQ,CAAC,IAAI,KAAK,IAAI,GAAGJ,CAAI,GACrDvwB,IAAI,KAIDuwB,KAAQ,GAAGF,EAAOtoB,IAAS2I,CAAC,IAAIqH,IAAI,KAAMrH,KAAK,GAAGqH,KAAK,KAAKwY,KAAQ;AAAG;AAI9E,SAFAvwB,IAAKA,KAAKuwB,IAAQxY,GAClB0Y,KAAQF,GACDE,IAAO,GAAGJ,EAAOtoB,IAAS2I,CAAC,IAAI1Q,IAAI,KAAM0Q,KAAK,GAAG1Q,KAAK,KAAKywB,KAAQ;AAAG;AAE7E,IAAAJ,EAAOtoB,IAAS2I,IAAI,CAAC,KAAKogB,IAAI;AAAA,EAChC;;;;;AC1EA,UAAMG,IAASC,GAAA,GACTd,IAAUe,GAAA,GACVC,IACH,OAAO,UAAW,cAAc,OAAO,OAAO,OAAW,aACtD,uBAAO,IAAO,4BAA4B,IAC1C;AAENC,IAAAA,EAAA,SAAiBC,GACjBD,EAAA,aAAqBE,GACrBF,EAAA,oBAA4B;AAE5B,UAAMG,IAAe;AACrBH,IAAAA,EAAA,aAAqBG,GAgBrBF,EAAO,sBAAsBG,EAAiB,GAE1C,CAACH,EAAO,uBAAuB,OAAO,UAAY,OAClD,OAAO,QAAQ,SAAU,cAC3B,QAAQ;AAAA,MACN;AAAA,IAEJ;AAGA,aAASG,IAAqB;AAE5B,UAAI;AACF,cAAMzX,IAAM,IAAI,WAAW,CAAC,GACtB0X,IAAQ,EAAE,KAAK,WAAY;AAAE,iBAAO;AAAA,QAAE,EAAE;AAC9C,sBAAO,eAAeA,GAAO,WAAW,SAAS,GACjD,OAAO,eAAe1X,GAAK0X,CAAK,GACzB1X,EAAI,UAAU;AAAA,MACzB,QAAc;AACV,eAAO;AAAA,MACX;AAAA,IACA;AAEA,WAAO,eAAesX,EAAO,WAAW,UAAU;AAAA,MAChD,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,YAAKA,EAAO,SAAS,IAAI;AACzB,iBAAO,KAAK;AAAA,MAChB;AAAA,KACC,GAED,OAAO,eAAeA,EAAO,WAAW,UAAU;AAAA,MAChD,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,YAAKA,EAAO,SAAS,IAAI;AACzB,iBAAO,KAAK;AAAA,MAChB;AAAA,KACC;AAED,aAASK,EAAcC,GAAQ;AAC7B,UAAIA,IAASJ;AACX,cAAM,IAAI,WAAW,gBAAgBI,IAAS,gCAAgC;AAGhF,YAAMC,IAAM,IAAI,WAAWD,CAAM;AACjC,oBAAO,eAAeC,GAAKP,EAAO,SAAS,GACpCO;AAAA,IACT;AAYA,aAASP,EAAQ7X,GAAKqY,GAAkBF,GAAQ;AAE9C,UAAI,OAAOnY,KAAQ,UAAU;AAC3B,YAAI,OAAOqY,KAAqB;AAC9B,gBAAM,IAAI;AAAA,YACR;AAAA,UACR;AAEI,eAAOC,EAAYtY,CAAG;AAAA,MAC1B;AACE,aAAOuY,EAAKvY,GAAKqY,GAAkBF,CAAM;AAAA,IAC3C;AAEA,IAAAN,EAAO,WAAW;AAElB,aAASU,EAAMrzB,GAAOmzB,GAAkBF,GAAQ;AAC9C,UAAI,OAAOjzB,KAAU;AACnB,eAAOszB,EAAWtzB,GAAOmzB,CAAgB;AAG3C,UAAI,YAAY,OAAOnzB,CAAK;AAC1B,eAAOuzB,EAAcvzB,CAAK;AAG5B,UAAIA,KAAS;AACX,cAAM,IAAI;AAAA,UACR,oHAC0C,OAAOA;AAAA,QACvD;AAQE,UALIwzB,EAAWxzB,GAAO,WAAW,KAC5BA,KAASwzB,EAAWxzB,EAAM,QAAQ,WAAW,KAI9C,OAAO,oBAAsB,QAC5BwzB,EAAWxzB,GAAO,iBAAiB,KACnCA,KAASwzB,EAAWxzB,EAAM,QAAQ,iBAAiB;AACtD,eAAOyzB,EAAgBzzB,GAAOmzB,GAAkBF,CAAM;AAGxD,UAAI,OAAOjzB,KAAU;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,YAAM0zB,IAAU1zB,EAAM,WAAWA,EAAM,QAAO;AAC9C,UAAI0zB,KAAW,QAAQA,MAAY1zB;AACjC,eAAO2yB,EAAO,KAAKe,GAASP,GAAkBF,CAAM;AAGtD,YAAMniB,IAAI6iB,EAAW3zB,CAAK;AAC1B,UAAI8Q,EAAG,QAAOA;AAEd,UAAI,OAAO,SAAW,OAAe,OAAO,eAAe,QACvD,OAAO9Q,EAAM,OAAO,WAAW,KAAM;AACvC,eAAO2yB,EAAO,KAAK3yB,EAAM,OAAO,WAAW,EAAE,QAAQ,GAAGmzB,GAAkBF,CAAM;AAGlF,YAAM,IAAI;AAAA,QACR,oHAC0C,OAAOjzB;AAAA,MACrD;AAAA,IACA;AAUA,IAAA2yB,EAAO,OAAO,SAAU3yB,GAAOmzB,GAAkBF,GAAQ;AACvD,aAAOI,EAAKrzB,GAAOmzB,GAAkBF,CAAM;AAAA,IAC7C,GAIA,OAAO,eAAeN,EAAO,WAAW,WAAW,SAAS,GAC5D,OAAO,eAAeA,GAAQ,UAAU;AAExC,aAASiB,EAAYC,GAAM;AACzB,UAAI,OAAOA,KAAS;AAClB,cAAM,IAAI,UAAU,wCAAwC;AACvD,UAAIA,IAAO;AAChB,cAAM,IAAI,WAAW,gBAAgBA,IAAO,gCAAgC;AAAA,IAEhF;AAEA,aAASC,EAAOD,GAAME,GAAMC,GAAU;AAEpC,aADAJ,EAAWC,CAAI,GACXA,KAAQ,IACHb,EAAaa,CAAI,IAEtBE,MAAS,SAIJ,OAAOC,KAAa,WACvBhB,EAAaa,CAAI,EAAE,KAAKE,GAAMC,CAAQ,IACtChB,EAAaa,CAAI,EAAE,KAAKE,CAAI,IAE3Bf,EAAaa,CAAI;AAAA,IAC1B;AAMA,IAAAlB,EAAO,QAAQ,SAAUkB,GAAME,GAAMC,GAAU;AAC7C,aAAOF,EAAMD,GAAME,GAAMC,CAAQ;AAAA,IACnC;AAEA,aAASZ,EAAaS,GAAM;AAC1B,aAAAD,EAAWC,CAAI,GACRb,EAAaa,IAAO,IAAI,IAAII,EAAQJ,CAAI,IAAI,CAAC;AAAA,IACtD;AAKA,IAAAlB,EAAO,cAAc,SAAUkB,GAAM;AACnC,aAAOT,EAAYS,CAAI;AAAA,IACzB,GAIAlB,EAAO,kBAAkB,SAAUkB,GAAM;AACvC,aAAOT,EAAYS,CAAI;AAAA,IACzB;AAEA,aAASP,EAAYY,GAAQF,GAAU;AAKrC,WAJI,OAAOA,KAAa,YAAYA,MAAa,QAC/CA,IAAW,SAGT,CAACrB,EAAO,WAAWqB,CAAQ;AAC7B,cAAM,IAAI,UAAU,uBAAuBA,CAAQ;AAGrD,YAAMf,IAAShD,EAAWiE,GAAQF,CAAQ,IAAI;AAC9C,UAAId,IAAMF,EAAaC,CAAM;AAE7B,YAAMkB,IAASjB,EAAI,MAAMgB,GAAQF,CAAQ;AAEzC,aAAIG,MAAWlB,MAIbC,IAAMA,EAAI,MAAM,GAAGiB,CAAM,IAGpBjB;AAAA,IACT;AAEA,aAASkB,EAAeC,GAAO;AAC7B,YAAMpB,IAASoB,EAAM,SAAS,IAAI,IAAIJ,EAAQI,EAAM,MAAM,IAAI,GACxDnB,IAAMF,EAAaC,CAAM;AAC/B,eAASlhB,IAAI,GAAGA,IAAIkhB,GAAQlhB,KAAK;AAC/B,QAAAmhB,EAAInhB,CAAC,IAAIsiB,EAAMtiB,CAAC,IAAI;AAEtB,aAAOmhB;AAAA,IACT;AAEA,aAASK,EAAee,GAAW;AACjC,UAAId,EAAWc,GAAW,UAAU,GAAG;AACrC,cAAMC,IAAO,IAAI,WAAWD,CAAS;AACrC,eAAOb,EAAgBc,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU;AAAA,MACxE;AACE,aAAOH,EAAcE,CAAS;AAAA,IAChC;AAEA,aAASb,EAAiBY,GAAOG,GAAYvB,GAAQ;AACnD,UAAIuB,IAAa,KAAKH,EAAM,aAAaG;AACvC,cAAM,IAAI,WAAW,sCAAsC;AAG7D,UAAIH,EAAM,aAAaG,KAAcvB,KAAU;AAC7C,cAAM,IAAI,WAAW,sCAAsC;AAG7D,UAAIC;AACJ,aAAIsB,MAAe,UAAavB,MAAW,SACzCC,IAAM,IAAI,WAAWmB,CAAK,IACjBpB,MAAW,SACpBC,IAAM,IAAI,WAAWmB,GAAOG,CAAU,IAEtCtB,IAAM,IAAI,WAAWmB,GAAOG,GAAYvB,CAAM,GAIhD,OAAO,eAAeC,GAAKP,EAAO,SAAS,GAEpCO;AAAA,IACT;AAEA,aAASS,EAAY3Y,GAAK;AACxB,UAAI2X,EAAO,SAAS3X,CAAG,GAAG;AACxB,cAAMtS,IAAMurB,EAAQjZ,EAAI,MAAM,IAAI,GAC5BkY,IAAMF,EAAatqB,CAAG;AAE5B,eAAIwqB,EAAI,WAAW,KAInBlY,EAAI,KAAKkY,GAAK,GAAG,GAAGxqB,CAAG,GAChBwqB;AAAA,MACX;AAEE,UAAIlY,EAAI,WAAW;AACjB,eAAI,OAAOA,EAAI,UAAW,YAAYyZ,GAAYzZ,EAAI,MAAM,IACnDgY,EAAa,CAAC,IAEhBoB,EAAcpZ,CAAG;AAG1B,UAAIA,EAAI,SAAS,YAAY,MAAM,QAAQA,EAAI,IAAI;AACjD,eAAOoZ,EAAcpZ,EAAI,IAAI;AAAA,IAEjC;AAEA,aAASiZ,EAAShB,GAAQ;AAGxB,UAAIA,KAAUJ;AACZ,cAAM,IAAI,WAAW,4DACaA,EAAa,SAAS,EAAE,IAAI,QAAQ;AAExE,aAAOI,IAAS;AAAA,IAClB;AAEA,aAASL,EAAYK,GAAQ;AAC3B,aAAI,CAACA,KAAUA,MACbA,IAAS,IAEJN,EAAO,MAAM,CAACM,CAAM;AAAA,IAC7B;AAEA,IAAAN,EAAO,WAAW,SAAmB7hB,GAAG;AACtC,aAAOA,KAAK,QAAQA,EAAE,cAAc,MAClCA,MAAM6hB,EAAO;AAAA,IACjB,GAEAA,EAAO,UAAU,SAAkB9hB,GAAGC,GAAG;AAGvC,UAFI0iB,EAAW3iB,GAAG,UAAU,MAAGA,IAAI8hB,EAAO,KAAK9hB,GAAGA,EAAE,QAAQA,EAAE,UAAU,IACpE2iB,EAAW1iB,GAAG,UAAU,MAAGA,IAAI6hB,EAAO,KAAK7hB,GAAGA,EAAE,QAAQA,EAAE,UAAU,IACpE,CAAC6hB,EAAO,SAAS9hB,CAAC,KAAK,CAAC8hB,EAAO,SAAS7hB,CAAC;AAC3C,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,UAAID,MAAMC,EAAG,QAAO;AAEpB,UAAIlH,IAAIiH,EAAE,QACNhH,IAAIiH,EAAE;AAEV,eAASiB,IAAI,GAAGrJ,IAAM,KAAK,IAAIkB,GAAGC,CAAC,GAAGkI,IAAIrJ,GAAK,EAAEqJ;AAC/C,YAAIlB,EAAEkB,CAAC,MAAMjB,EAAEiB,CAAC,GAAG;AACjB,UAAAnI,IAAIiH,EAAEkB,CAAC,GACPlI,IAAIiH,EAAEiB,CAAC;AACP;AAAA,QACN;AAGE,aAAInI,IAAIC,IAAU,KACdA,IAAID,IAAU,IACX;AAAA,IACT,GAEA+oB,EAAO,aAAa,SAAqBqB,GAAU;AACjD,cAAQ,OAAOA,CAAQ,EAAE,YAAW,GAAE;AAAA,QACpC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,GAEArB,EAAO,SAAS,SAAiB7kB,GAAMmlB,GAAQ;AAC7C,UAAI,CAAC,MAAM,QAAQnlB,CAAI;AACrB,cAAM,IAAI,UAAU,6CAA6C;AAGnE,UAAIA,EAAK,WAAW;AAClB,eAAO6kB,EAAO,MAAM,CAAC;AAGvB,UAAI5gB;AACJ,UAAIkhB,MAAW;AAEb,aADAA,IAAS,GACJlhB,IAAI,GAAGA,IAAIjE,EAAK,QAAQ,EAAEiE;AAC7B,UAAAkhB,KAAUnlB,EAAKiE,CAAC,EAAE;AAItB,YAAM2f,IAASiB,EAAO,YAAYM,CAAM;AACxC,UAAIyB,IAAM;AACV,WAAK3iB,IAAI,GAAGA,IAAIjE,EAAK,QAAQ,EAAEiE,GAAG;AAChC,YAAImhB,IAAMplB,EAAKiE,CAAC;AAChB,YAAIyhB,EAAWN,GAAK,UAAU;AAC5B,UAAIwB,IAAMxB,EAAI,SAASxB,EAAO,UACvBiB,EAAO,SAASO,CAAG,MAAGA,IAAMP,EAAO,KAAKO,CAAG,IAChDA,EAAI,KAAKxB,GAAQgD,CAAG,KAEpB,WAAW,UAAU,IAAI;AAAA,YACvBhD;AAAA,YACAwB;AAAA,YACAwB;AAAA,UACV;AAAA,iBAEgB/B,EAAO,SAASO,CAAG;AAG7B,UAAAA,EAAI,KAAKxB,GAAQgD,CAAG;AAAA;AAFpB,gBAAM,IAAI,UAAU,6CAA6C;AAInE,QAAAA,KAAOxB,EAAI;AAAA,MACf;AACE,aAAOxB;AAAA,IACT;AAEA,aAASzB,EAAYiE,GAAQF,GAAU;AACrC,UAAIrB,EAAO,SAASuB,CAAM;AACxB,eAAOA,EAAO;AAEhB,UAAI,YAAY,OAAOA,CAAM,KAAKV,EAAWU,GAAQ,WAAW;AAC9D,eAAOA,EAAO;AAEhB,UAAI,OAAOA,KAAW;AACpB,cAAM,IAAI;AAAA,UACR,6FACmB,OAAOA;AAAA,QAChC;AAGE,YAAMxrB,IAAMwrB,EAAO,QACbS,IAAa,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM;AAC5D,UAAI,CAACA,KAAajsB,MAAQ,EAAG,QAAO;AAGpC,UAAIksB,IAAc;AAClB;AACE,gBAAQZ,GAAQ;AAAA,UACd,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOtrB;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACH,mBAAOmsB,EAAYX,CAAM,EAAE;AAAA,UAC7B,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOxrB,IAAM;AAAA,UACf,KAAK;AACH,mBAAOA,MAAQ;AAAA,UACjB,KAAK;AACH,mBAAOosB,EAAcZ,CAAM,EAAE;AAAA,UAC/B;AACE,gBAAIU;AACF,qBAAOD,IAAY,KAAKE,EAAYX,CAAM,EAAE;AAE9C,YAAAF,KAAY,KAAKA,GAAU,YAAW,GACtCY,IAAc;AAAA,QACtB;AAAA,IAEA;AACA,IAAAjC,EAAO,aAAa1C;AAEpB,aAAS8E,EAAcf,GAAUxxB,GAAOC,GAAK;AAC3C,UAAImyB,IAAc;AA8BlB,WArBIpyB,MAAU,UAAaA,IAAQ,OACjCA,IAAQ,IAINA,IAAQ,KAAK,YAIbC,MAAQ,UAAaA,IAAM,KAAK,YAClCA,IAAM,KAAK,SAGTA,KAAO,OAKXA,OAAS,GACTD,OAAW,GAEPC,KAAOD;AACT,eAAO;AAKT,WAFKwxB,MAAUA,IAAW;AAGxB,gBAAQA,GAAQ;AAAA,UACd,KAAK;AACH,mBAAOgB,GAAS,MAAMxyB,GAAOC,CAAG;AAAA,UAElC,KAAK;AAAA,UACL,KAAK;AACH,mBAAOwyB,GAAU,MAAMzyB,GAAOC,CAAG;AAAA,UAEnC,KAAK;AACH,mBAAOyyB,GAAW,MAAM1yB,GAAOC,CAAG;AAAA,UAEpC,KAAK;AAAA,UACL,KAAK;AACH,mBAAO0yB,EAAY,MAAM3yB,GAAOC,CAAG;AAAA,UAErC,KAAK;AACH,mBAAO2yB,EAAY,MAAM5yB,GAAOC,CAAG;AAAA,UAErC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO4yB,EAAa,MAAM7yB,GAAOC,CAAG;AAAA,UAEtC;AACE,gBAAImyB,EAAa,OAAM,IAAI,UAAU,uBAAuBZ,CAAQ;AACpE,YAAAA,KAAYA,IAAW,IAAI,YAAW,GACtCY,IAAc;AAAA,QACtB;AAAA,IAEA;AAQA,IAAAjC,EAAO,UAAU,YAAY;AAE7B,aAAS2C,EAAM,GAAGC,GAAGnc,GAAG;AACtB,YAAMrH,IAAI,EAAEwjB,CAAC;AACb,QAAEA,CAAC,IAAI,EAAEnc,CAAC,GACV,EAAEA,CAAC,IAAIrH;AAAA,IACT;AAEA,IAAA4gB,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAMjqB,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASqJ,IAAI,GAAGA,IAAIrJ,GAAKqJ,KAAK;AAC5B,QAAAujB,EAAK,MAAMvjB,GAAGA,IAAI,CAAC;AAErB,aAAO;AAAA,IACT,GAEA4gB,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAMjqB,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASqJ,IAAI,GAAGA,IAAIrJ,GAAKqJ,KAAK;AAC5B,QAAAujB,EAAK,MAAMvjB,GAAGA,IAAI,CAAC,GACnBujB,EAAK,MAAMvjB,IAAI,GAAGA,IAAI,CAAC;AAEzB,aAAO;AAAA,IACT,GAEA4gB,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAMjqB,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASqJ,IAAI,GAAGA,IAAIrJ,GAAKqJ,KAAK;AAC5B,QAAAujB,EAAK,MAAMvjB,GAAGA,IAAI,CAAC,GACnBujB,EAAK,MAAMvjB,IAAI,GAAGA,IAAI,CAAC,GACvBujB,EAAK,MAAMvjB,IAAI,GAAGA,IAAI,CAAC,GACvBujB,EAAK,MAAMvjB,IAAI,GAAGA,IAAI,CAAC;AAEzB,aAAO;AAAA,IACT,GAEA4gB,EAAO,UAAU,WAAW,WAAqB;AAC/C,YAAMM,IAAS,KAAK;AACpB,aAAIA,MAAW,IAAU,KACrB,UAAU,WAAW,IAAUgC,GAAU,MAAM,GAAGhC,CAAM,IACrD8B,EAAa,MAAM,MAAM,SAAS;AAAA,IAC3C,GAEApC,EAAO,UAAU,iBAAiBA,EAAO,UAAU,UAEnDA,EAAO,UAAU,SAAS,SAAiB7hB,GAAG;AAC5C,UAAI,CAAC6hB,EAAO,SAAS7hB,CAAC,EAAG,OAAM,IAAI,UAAU,2BAA2B;AACxE,aAAI,SAASA,IAAU,KAChB6hB,EAAO,QAAQ,MAAM7hB,CAAC,MAAM;AAAA,IACrC,GAEA6hB,EAAO,UAAU,UAAU,WAAoB;AAC7C,UAAIlY,IAAM;AACV,YAAMtV,IAAMutB,EAAQ;AACpB,aAAAjY,IAAM,KAAK,SAAS,OAAO,GAAGtV,CAAG,EAAE,QAAQ,WAAW,KAAK,EAAE,KAAI,GAC7D,KAAK,SAASA,MAAKsV,KAAO,UACvB,aAAaA,IAAM;AAAA,IAC5B,GACIgY,MACFE,EAAO,UAAUF,CAAmB,IAAIE,EAAO,UAAU,UAG3DA,EAAO,UAAU,UAAU,SAAkB3kB,GAAQxL,GAAOC,GAAK+yB,GAAWC,GAAS;AAInF,UAHIjC,EAAWxlB,GAAQ,UAAU,MAC/BA,IAAS2kB,EAAO,KAAK3kB,GAAQA,EAAO,QAAQA,EAAO,UAAU,IAE3D,CAAC2kB,EAAO,SAAS3kB,CAAM;AACzB,cAAM,IAAI;AAAA,UACR,mFACoB,OAAOA;AAAA,QACjC;AAgBE,UAbIxL,MAAU,WACZA,IAAQ,IAENC,MAAQ,WACVA,IAAMuL,IAASA,EAAO,SAAS,IAE7BwnB,MAAc,WAChBA,IAAY,IAEVC,MAAY,WACdA,IAAU,KAAK,SAGbjzB,IAAQ,KAAKC,IAAMuL,EAAO,UAAUwnB,IAAY,KAAKC,IAAU,KAAK;AACtE,cAAM,IAAI,WAAW,oBAAoB;AAG3C,UAAID,KAAaC,KAAWjzB,KAASC;AACnC,eAAO;AAET,UAAI+yB,KAAaC;AACf,eAAO;AAET,UAAIjzB,KAASC;AACX,eAAO;AAQT,UALAD,OAAW,GACXC,OAAS,GACT+yB,OAAe,GACfC,OAAa,GAET,SAASznB,EAAQ,QAAO;AAE5B,UAAIpE,IAAI6rB,IAAUD,GACd3rB,IAAIpH,IAAMD;AACd,YAAMkG,KAAM,KAAK,IAAIkB,GAAGC,CAAC,GAEnB6rB,KAAW,KAAK,MAAMF,GAAWC,CAAO,GACxCE,KAAa3nB,EAAO,MAAMxL,GAAOC,CAAG;AAE1C,eAASsP,KAAI,GAAGA,KAAIrJ,IAAK,EAAEqJ;AACzB,YAAI2jB,GAAS3jB,EAAC,MAAM4jB,GAAW5jB,EAAC,GAAG;AACjC,UAAAnI,IAAI8rB,GAAS3jB,EAAC,GACdlI,IAAI8rB,GAAW5jB,EAAC;AAChB;AAAA,QACN;AAGE,aAAInI,IAAIC,IAAU,KACdA,IAAID,IAAU,IACX;AAAA,IACT;AAWA,aAASgsB,EAAsBlE,GAAQ5xB,GAAK00B,GAAYR,GAAU6B,GAAK;AAErE,UAAInE,EAAO,WAAW,EAAG,QAAO;AAmBhC,UAhBI,OAAO8C,KAAe,YACxBR,IAAWQ,GACXA,IAAa,KACJA,IAAa,aACtBA,IAAa,aACJA,IAAa,gBACtBA,IAAa,cAEfA,IAAa,CAACA,GACVC,GAAYD,CAAU,MAExBA,IAAaqB,IAAM,IAAKnE,EAAO,SAAS,IAItC8C,IAAa,MAAGA,IAAa9C,EAAO,SAAS8C,IAC7CA,KAAc9C,EAAO,QAAQ;AAC/B,YAAImE,EAAK,QAAO;AACX,QAAArB,IAAa9C,EAAO,SAAS;AAAA,MACtC,WAAa8C,IAAa;AACtB,YAAIqB,EAAK,CAAArB,IAAa;AAAA,YACjB,QAAO;AASd,UALI,OAAO10B,KAAQ,aACjBA,IAAM6yB,EAAO,KAAK7yB,GAAKk0B,CAAQ,IAI7BrB,EAAO,SAAS7yB,CAAG;AAErB,eAAIA,EAAI,WAAW,IACV,KAEFg2B,EAAapE,GAAQ5xB,GAAK00B,GAAYR,GAAU6B,CAAG;AACrD,UAAI,OAAO/1B,KAAQ;AAExB,eADAA,IAAMA,IAAM,KACR,OAAO,WAAW,UAAU,WAAY,aACtC+1B,IACK,WAAW,UAAU,QAAQ,KAAKnE,GAAQ5xB,GAAK00B,CAAU,IAEzD,WAAW,UAAU,YAAY,KAAK9C,GAAQ5xB,GAAK00B,CAAU,IAGjEsB,EAAapE,GAAQ,CAAC5xB,CAAG,GAAG00B,GAAYR,GAAU6B,CAAG;AAG9D,YAAM,IAAI,UAAU,sCAAsC;AAAA,IAC5D;AAEA,aAASC,EAAcza,GAAKvb,GAAK00B,GAAYR,GAAU6B,GAAK;AAC1D,UAAIE,IAAY,GACZC,IAAY3a,EAAI,QAChB4a,IAAYn2B,EAAI;AAEpB,UAAIk0B,MAAa,WACfA,IAAW,OAAOA,CAAQ,EAAE,YAAW,GACnCA,MAAa,UAAUA,MAAa,WACpCA,MAAa,aAAaA,MAAa,aAAY;AACrD,YAAI3Y,EAAI,SAAS,KAAKvb,EAAI,SAAS;AACjC,iBAAO;AAET,QAAAi2B,IAAY,GACZC,KAAa,GACbC,KAAa,GACbzB,KAAc;AAAA,MACpB;AAGE,eAASrxB,GAAM+vB,IAAKnhB,IAAG;AACrB,eAAIgkB,MAAc,IACT7C,GAAInhB,EAAC,IAELmhB,GAAI,aAAanhB,KAAIgkB,CAAS;AAAA,MAE3C;AAEE,UAAIhkB;AACJ,UAAI8jB,GAAK;AACP,YAAIK,KAAa;AACjB,aAAKnkB,KAAIyiB,GAAYziB,KAAIikB,GAAWjkB;AAClC,cAAI5O,GAAKkY,GAAKtJ,EAAC,MAAM5O,GAAKrD,GAAKo2B,OAAe,KAAK,IAAInkB,KAAImkB,EAAU;AAEnE,gBADIA,OAAe,OAAIA,KAAankB,KAChCA,KAAImkB,KAAa,MAAMD,EAAW,QAAOC,KAAaH;AAAA;AAE1D,YAAIG,OAAe,OAAInkB,MAAKA,KAAImkB,KAChCA,KAAa;AAAA,MAGrB;AAEI,aADI1B,IAAayB,IAAYD,MAAWxB,IAAawB,IAAYC,IAC5DlkB,KAAIyiB,GAAYziB,MAAK,GAAGA,MAAK;AAChC,cAAIokB,KAAQ;AACZ,mBAASC,KAAI,GAAGA,KAAIH,GAAWG;AAC7B,gBAAIjzB,GAAKkY,GAAKtJ,KAAIqkB,EAAC,MAAMjzB,GAAKrD,GAAKs2B,EAAC,GAAG;AACrC,cAAAD,KAAQ;AACR;AAAA,YACV;AAEM,cAAIA,GAAO,QAAOpkB;AAAA,QACxB;AAGE,aAAO;AAAA,IACT;AAEA,IAAA4gB,EAAO,UAAU,WAAW,SAAmB7yB,GAAK00B,GAAYR,GAAU;AACxE,aAAO,KAAK,QAAQl0B,GAAK00B,GAAYR,CAAQ,MAAM;AAAA,IACrD,GAEArB,EAAO,UAAU,UAAU,SAAkB7yB,GAAK00B,GAAYR,GAAU;AACtE,aAAO4B,EAAqB,MAAM91B,GAAK00B,GAAYR,GAAU,EAAI;AAAA,IACnE,GAEArB,EAAO,UAAU,cAAc,SAAsB7yB,GAAK00B,GAAYR,GAAU;AAC9E,aAAO4B,EAAqB,MAAM91B,GAAK00B,GAAYR,GAAU,EAAK;AAAA,IACpE;AAEA,aAASqC,EAAUnD,GAAKgB,GAAQ9qB,GAAQ6pB,GAAQ;AAC9C,MAAA7pB,IAAS,OAAOA,CAAM,KAAK;AAC3B,YAAMktB,IAAYpD,EAAI,SAAS9pB;AAC/B,MAAK6pB,KAGHA,IAAS,OAAOA,CAAM,GAClBA,IAASqD,MACXrD,IAASqD,MAJXrD,IAASqD;AAQX,YAAMC,IAASrC,EAAO;AAEtB,MAAIjB,IAASsD,IAAS,MACpBtD,IAASsD,IAAS;AAEpB,UAAIxkB;AACJ,WAAKA,IAAI,GAAGA,IAAIkhB,GAAQ,EAAElhB,GAAG;AAC3B,cAAMykB,IAAS,SAAStC,EAAO,OAAOniB,IAAI,GAAG,CAAC,GAAG,EAAE;AACnD,YAAI0iB,GAAY+B,CAAM,EAAG,QAAOzkB;AAChC,QAAAmhB,EAAI9pB,IAAS2I,CAAC,IAAIykB;AAAA,MACtB;AACE,aAAOzkB;AAAA,IACT;AAEA,aAAS0kB,GAAWvD,GAAKgB,GAAQ9qB,GAAQ6pB,GAAQ;AAC/C,aAAOyD,EAAW7B,EAAYX,GAAQhB,EAAI,SAAS9pB,CAAM,GAAG8pB,GAAK9pB,GAAQ6pB,CAAM;AAAA,IACjF;AAEA,aAAS0D,EAAYzD,GAAKgB,GAAQ9qB,GAAQ6pB,GAAQ;AAChD,aAAOyD,EAAWE,GAAa1C,CAAM,GAAGhB,GAAK9pB,GAAQ6pB,CAAM;AAAA,IAC7D;AAEA,aAAS4D,EAAa3D,GAAKgB,GAAQ9qB,GAAQ6pB,GAAQ;AACjD,aAAOyD,EAAW5B,EAAcZ,CAAM,GAAGhB,GAAK9pB,GAAQ6pB,CAAM;AAAA,IAC9D;AAEA,aAAS6D,EAAW5D,GAAKgB,GAAQ9qB,GAAQ6pB,GAAQ;AAC/C,aAAOyD,EAAWK,EAAe7C,GAAQhB,EAAI,SAAS9pB,CAAM,GAAG8pB,GAAK9pB,GAAQ6pB,CAAM;AAAA,IACpF;AAEA,IAAAN,EAAO,UAAU,QAAQ,SAAgBuB,GAAQ9qB,GAAQ6pB,GAAQe,GAAU;AAEzE,UAAI5qB,MAAW;AACb,QAAA4qB,IAAW,QACXf,IAAS,KAAK,QACd7pB,IAAS;AAAA,eAEA6pB,MAAW,UAAa,OAAO7pB,KAAW;AACnD,QAAA4qB,IAAW5qB,GACX6pB,IAAS,KAAK,QACd7pB,IAAS;AAAA,eAEA,SAASA,CAAM;AACxB,QAAAA,IAASA,MAAW,GAChB,SAAS6pB,CAAM,KACjBA,IAASA,MAAW,GAChBe,MAAa,WAAWA,IAAW,YAEvCA,IAAWf,GACXA,IAAS;AAAA;AAGX,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,YAAMqD,IAAY,KAAK,SAASltB;AAGhC,WAFI6pB,MAAW,UAAaA,IAASqD,OAAWrD,IAASqD,IAEpDpC,EAAO,SAAS,MAAMjB,IAAS,KAAK7pB,IAAS,MAAOA,IAAS,KAAK;AACrE,cAAM,IAAI,WAAW,wCAAwC;AAG/D,MAAK4qB,MAAUA,IAAW;AAE1B,UAAIY,IAAc;AAClB;AACE,gBAAQZ,GAAQ;AAAA,UACd,KAAK;AACH,mBAAOqC,EAAS,MAAMnC,GAAQ9qB,GAAQ6pB,CAAM;AAAA,UAE9C,KAAK;AAAA,UACL,KAAK;AACH,mBAAOwD,GAAU,MAAMvC,GAAQ9qB,GAAQ6pB,CAAM;AAAA,UAE/C,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO0D,EAAW,MAAMzC,GAAQ9qB,GAAQ6pB,CAAM;AAAA,UAEhD,KAAK;AAEH,mBAAO4D,EAAY,MAAM3C,GAAQ9qB,GAAQ6pB,CAAM;AAAA,UAEjD,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO6D,EAAU,MAAM5C,GAAQ9qB,GAAQ6pB,CAAM;AAAA,UAE/C;AACE,gBAAI2B,EAAa,OAAM,IAAI,UAAU,uBAAuBZ,CAAQ;AACpE,YAAAA,KAAY,KAAKA,GAAU,YAAW,GACtCY,IAAc;AAAA,QACtB;AAAA,IAEA,GAEAjC,EAAO,UAAU,SAAS,WAAmB;AAC3C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,MAAM,UAAU,MAAM,KAAK,KAAK,QAAQ,MAAM,CAAC;AAAA,MACzD;AAAA,IACA;AAEA,aAASyC,EAAalC,GAAK1wB,GAAOC,GAAK;AACrC,aAAID,MAAU,KAAKC,MAAQywB,EAAI,SACtBZ,EAAO,cAAcY,CAAG,IAExBZ,EAAO,cAAcY,EAAI,MAAM1wB,GAAOC,CAAG,CAAC;AAAA,IAErD;AAEA,aAASwyB,GAAW/B,GAAK1wB,GAAOC,GAAK;AACnC,MAAAA,IAAM,KAAK,IAAIywB,EAAI,QAAQzwB,CAAG;AAC9B,YAAMu0B,IAAM,CAAA;AAEZ,UAAIjlB,IAAIvP;AACR,aAAOuP,IAAItP,KAAK;AACd,cAAMw0B,IAAY/D,EAAInhB,CAAC;AACvB,YAAImlB,IAAY,MACZC,IAAoBF,IAAY,MAChC,IACCA,IAAY,MACT,IACCA,IAAY,MACT,IACA;AAEZ,YAAIllB,IAAIolB,KAAoB10B,GAAK;AAC/B,cAAI20B,IAAYC,IAAWC,IAAYC;AAEvC,kBAAQJ,GAAgB;AAAA,YACtB,KAAK;AACH,cAAIF,IAAY,QACdC,IAAYD;AAEd;AAAA,YACF,KAAK;AACH,cAAAG,KAAalE,EAAInhB,IAAI,CAAC,IACjBqlB,KAAa,SAAU,QAC1BG,MAAiBN,IAAY,OAAS,IAAOG,KAAa,IACtDG,KAAgB,QAClBL,IAAYK;AAGhB;AAAA,YACF,KAAK;AACH,cAAAH,KAAalE,EAAInhB,IAAI,CAAC,GACtBslB,KAAYnE,EAAInhB,IAAI,CAAC,IAChBqlB,KAAa,SAAU,QAASC,KAAY,SAAU,QACzDE,MAAiBN,IAAY,OAAQ,MAAOG,KAAa,OAAS,IAAOC,KAAY,IACjFE,KAAgB,SAAUA,KAAgB,SAAUA,KAAgB,WACtEL,IAAYK;AAGhB;AAAA,YACF,KAAK;AACH,cAAAH,KAAalE,EAAInhB,IAAI,CAAC,GACtBslB,KAAYnE,EAAInhB,IAAI,CAAC,GACrBulB,KAAapE,EAAInhB,IAAI,CAAC,IACjBqlB,KAAa,SAAU,QAASC,KAAY,SAAU,QAASC,KAAa,SAAU,QACzFC,MAAiBN,IAAY,OAAQ,MAAQG,KAAa,OAAS,MAAOC,KAAY,OAAS,IAAOC,KAAa,IAC/GC,KAAgB,SAAUA,KAAgB,YAC5CL,IAAYK;AAAA,UAG1B;AAAA,QACA;AAEI,QAAIL,MAAc,QAGhBA,IAAY,OACZC,IAAmB,KACVD,IAAY,UAErBA,KAAa,OACbF,EAAI,KAAKE,MAAc,KAAK,OAAQ,KAAM,GAC1CA,IAAY,QAASA,IAAY,OAGnCF,EAAI,KAAKE,CAAS,GAClBnlB,KAAKolB;AAAA,MACT;AAEE,aAAOK,GAAsBR,CAAG;AAAA,IAClC;AAKA,UAAMS,KAAuB;AAE7B,aAASD,GAAuBE,GAAY;AAC1C,YAAMhvB,IAAMgvB,EAAW;AACvB,UAAIhvB,KAAO+uB;AACT,eAAO,OAAO,aAAa,MAAM,QAAQC,CAAU;AAIrD,UAAIV,IAAM,IACNjlB,IAAI;AACR,aAAOA,IAAIrJ;AACT,QAAAsuB,KAAO,OAAO,aAAa;AAAA,UACzB;AAAA,UACAU,EAAW,MAAM3lB,GAAGA,KAAK0lB,EAAoB;AAAA,QACnD;AAEE,aAAOT;AAAA,IACT;AAEA,aAAS9B,GAAYhC,GAAK1wB,GAAOC,GAAK;AACpC,UAAIk1B,IAAM;AACV,MAAAl1B,IAAM,KAAK,IAAIywB,EAAI,QAAQzwB,CAAG;AAE9B,eAASsP,IAAIvP,GAAOuP,IAAItP,GAAK,EAAEsP;AAC7B,QAAA4lB,KAAO,OAAO,aAAazE,EAAInhB,CAAC,IAAI,GAAI;AAE1C,aAAO4lB;AAAA,IACT;AAEA,aAASxC,EAAajC,GAAK1wB,GAAOC,GAAK;AACrC,UAAIk1B,IAAM;AACV,MAAAl1B,IAAM,KAAK,IAAIywB,EAAI,QAAQzwB,CAAG;AAE9B,eAASsP,IAAIvP,GAAOuP,IAAItP,GAAK,EAAEsP;AAC7B,QAAA4lB,KAAO,OAAO,aAAazE,EAAInhB,CAAC,CAAC;AAEnC,aAAO4lB;AAAA,IACT;AAEA,aAAS3C,GAAU9B,GAAK1wB,GAAOC,GAAK;AAClC,YAAMiG,IAAMwqB,EAAI;AAEhB,OAAI,CAAC1wB,KAASA,IAAQ,OAAGA,IAAQ,KAC7B,CAACC,KAAOA,IAAM,KAAKA,IAAMiG,OAAKjG,IAAMiG;AAExC,UAAI2W,IAAM;AACV,eAAStN,IAAIvP,GAAOuP,IAAItP,GAAK,EAAEsP;AAC7B,QAAAsN,KAAOuY,GAAoB1E,EAAInhB,CAAC,CAAC;AAEnC,aAAOsN;AAAA,IACT;AAEA,aAASgW,EAAcnC,GAAK1wB,GAAOC,GAAK;AACtC,YAAMo1B,IAAQ3E,EAAI,MAAM1wB,GAAOC,CAAG;AAClC,UAAIu0B,IAAM;AAEV,eAASjlB,IAAI,GAAGA,IAAI8lB,EAAM,SAAS,GAAG9lB,KAAK;AACzC,QAAAilB,KAAO,OAAO,aAAaa,EAAM9lB,CAAC,IAAK8lB,EAAM9lB,IAAI,CAAC,IAAI,GAAI;AAE5D,aAAOilB;AAAA,IACT;AAEA,IAAArE,EAAO,UAAU,QAAQ,SAAgBnwB,GAAOC,GAAK;AACnD,YAAMiG,IAAM,KAAK;AACjB,MAAAlG,IAAQ,CAAC,CAACA,GACVC,IAAMA,MAAQ,SAAYiG,IAAM,CAAC,CAACjG,GAE9BD,IAAQ,KACVA,KAASkG,GACLlG,IAAQ,MAAGA,IAAQ,MACdA,IAAQkG,MACjBlG,IAAQkG,IAGNjG,IAAM,KACRA,KAAOiG,GACHjG,IAAM,MAAGA,IAAM,MACVA,IAAMiG,MACfjG,IAAMiG,IAGJjG,IAAMD,MAAOC,IAAMD;AAEvB,YAAMs1B,IAAS,KAAK,SAASt1B,GAAOC,CAAG;AAEvC,oBAAO,eAAeq1B,GAAQnF,EAAO,SAAS,GAEvCmF;AAAA,IACT;AAKA,aAASC,EAAa3uB,GAAQ4uB,GAAK/E,GAAQ;AACzC,UAAK7pB,IAAS,MAAO,KAAKA,IAAS,EAAG,OAAM,IAAI,WAAW,oBAAoB;AAC/E,UAAIA,IAAS4uB,IAAM/E,EAAQ,OAAM,IAAI,WAAW,uCAAuC;AAAA,IACzF;AAEA,IAAAN,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqBvpB,GAAQ6mB,GAAYgI,GAAU;AAC/E,MAAA7uB,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACvBgI,KAAUF,EAAY3uB,GAAQ6mB,GAAY,KAAK,MAAM;AAE1D,UAAInwB,IAAM,KAAKsJ,CAAM,GACjB8uB,IAAM,GACNnmB,IAAI;AACR,aAAO,EAAEA,IAAIke,MAAeiI,KAAO;AACjC,QAAAp4B,KAAO,KAAKsJ,IAAS2I,CAAC,IAAImmB;AAG5B,aAAOp4B;AAAA,IACT,GAEA6yB,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqBvpB,GAAQ6mB,GAAYgI,GAAU;AAC/E,MAAA7uB,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACvBgI,KACHF,EAAY3uB,GAAQ6mB,GAAY,KAAK,MAAM;AAG7C,UAAInwB,IAAM,KAAKsJ,IAAS,EAAE6mB,CAAU,GAChCiI,IAAM;AACV,aAAOjI,IAAa,MAAMiI,KAAO;AAC/B,QAAAp4B,KAAO,KAAKsJ,IAAS,EAAE6mB,CAAU,IAAIiI;AAGvC,aAAOp4B;AAAA,IACT,GAEA6yB,EAAO,UAAU,YACjBA,EAAO,UAAU,YAAY,SAAoBvpB,GAAQ6uB,GAAU;AACjE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1C,KAAKA,CAAM;AAAA,IACpB,GAEAupB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1C,KAAKA,CAAM,IAAK,KAAKA,IAAS,CAAC,KAAK;AAAA,IAC7C,GAEAupB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GACzC,KAAKA,CAAM,KAAK,IAAK,KAAKA,IAAS,CAAC;AAAA,IAC9C,GAEAupB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,IAExC,KAAKA,CAAM,IACf,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC,KAAK,MACpB,KAAKA,IAAS,CAAC,IAAI;AAAA,IAC1B,GAEAupB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,IAAI,YACnB,KAAKA,IAAS,CAAC,KAAK,KACrB,KAAKA,IAAS,CAAC,KAAK,IACrB,KAAKA,IAAS,CAAC;AAAA,IACnB,GAEAupB,EAAO,UAAU,kBAAkBwF,GAAmB,SAA0B/uB,GAAQ;AACtF,MAAAA,IAASA,MAAW,GACpBgvB,EAAehvB,GAAQ,QAAQ;AAC/B,YAAM2f,IAAQ,KAAK3f,CAAM,GACnB4f,IAAO,KAAK5f,IAAS,CAAC;AAC5B,OAAI2f,MAAU,UAAaC,MAAS,WAClCqP,EAAYjvB,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMkvB,IAAKvP,IACT,KAAK,EAAE3f,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IAElBmvB,IAAK,KAAK,EAAEnvB,CAAM,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB4f,IAAO,KAAK;AAEd,aAAO,OAAOsP,CAAE,KAAK,OAAOC,CAAE,KAAK,OAAO,EAAE;AAAA,IAC9C,CAAC,GAED5F,EAAO,UAAU,kBAAkBwF,GAAmB,SAA0B/uB,GAAQ;AACtF,MAAAA,IAASA,MAAW,GACpBgvB,EAAehvB,GAAQ,QAAQ;AAC/B,YAAM2f,IAAQ,KAAK3f,CAAM,GACnB4f,IAAO,KAAK5f,IAAS,CAAC;AAC5B,OAAI2f,MAAU,UAAaC,MAAS,WAClCqP,EAAYjvB,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMmvB,IAAKxP,IAAQ,KAAK,KACtB,KAAK,EAAE3f,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,GAETkvB,IAAK,KAAK,EAAElvB,CAAM,IAAI,KAAK,KAC/B,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB4f;AAEF,cAAQ,OAAOuP,CAAE,KAAK,OAAO,EAAE,KAAK,OAAOD,CAAE;AAAA,IAC/C,CAAC,GAED3F,EAAO,UAAU,YAAY,SAAoBvpB,GAAQ6mB,GAAYgI,GAAU;AAC7E,MAAA7uB,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACvBgI,KAAUF,EAAY3uB,GAAQ6mB,GAAY,KAAK,MAAM;AAE1D,UAAInwB,IAAM,KAAKsJ,CAAM,GACjB8uB,IAAM,GACNnmB,IAAI;AACR,aAAO,EAAEA,IAAIke,MAAeiI,KAAO;AACjC,QAAAp4B,KAAO,KAAKsJ,IAAS2I,CAAC,IAAImmB;AAE5B,aAAAA,KAAO,KAEHp4B,KAAOo4B,MAAKp4B,KAAO,KAAK,IAAI,GAAG,IAAImwB,CAAU,IAE1CnwB;AAAA,IACT,GAEA6yB,EAAO,UAAU,YAAY,SAAoBvpB,GAAQ6mB,GAAYgI,GAAU;AAC7E,MAAA7uB,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACvBgI,KAAUF,EAAY3uB,GAAQ6mB,GAAY,KAAK,MAAM;AAE1D,UAAIle,IAAIke,GACJiI,IAAM,GACNp4B,IAAM,KAAKsJ,IAAS,EAAE2I,CAAC;AAC3B,aAAOA,IAAI,MAAMmmB,KAAO;AACtB,QAAAp4B,KAAO,KAAKsJ,IAAS,EAAE2I,CAAC,IAAImmB;AAE9B,aAAAA,KAAO,KAEHp4B,KAAOo4B,MAAKp4B,KAAO,KAAK,IAAI,GAAG,IAAImwB,CAAU,IAE1CnwB;AAAA,IACT,GAEA6yB,EAAO,UAAU,WAAW,SAAmBvpB,GAAQ6uB,GAAU;AAG/D,aAFA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC3C,KAAKA,CAAM,IAAI,OACZ,MAAO,KAAKA,CAAM,IAAI,KAAK,KADA,KAAKA,CAAM;AAAA,IAEjD,GAEAupB,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,MAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM;AACjD,YAAMtJ,IAAM,KAAKsJ,CAAM,IAAK,KAAKA,IAAS,CAAC,KAAK;AAChD,aAAQtJ,IAAM,QAAUA,IAAM,aAAaA;AAAA,IAC7C,GAEA6yB,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,MAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM;AACjD,YAAMtJ,IAAM,KAAKsJ,IAAS,CAAC,IAAK,KAAKA,CAAM,KAAK;AAChD,aAAQtJ,IAAM,QAAUA,IAAM,aAAaA;AAAA,IAC7C,GAEA6yB,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,IAChB,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC,KAAK,KACpB,KAAKA,IAAS,CAAC,KAAK;AAAA,IACzB,GAEAupB,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,KAAK,KACrB,KAAKA,IAAS,CAAC,KAAK,KACpB,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC;AAAA,IACpB,GAEAupB,EAAO,UAAU,iBAAiBwF,GAAmB,SAAyB/uB,GAAQ;AACpF,MAAAA,IAASA,MAAW,GACpBgvB,EAAehvB,GAAQ,QAAQ;AAC/B,YAAM2f,IAAQ,KAAK3f,CAAM,GACnB4f,IAAO,KAAK5f,IAAS,CAAC;AAC5B,OAAI2f,MAAU,UAAaC,MAAS,WAClCqP,EAAYjvB,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMtJ,IAAM,KAAKsJ,IAAS,CAAC,IACzB,KAAKA,IAAS,CAAC,IAAI,KAAK,IACxB,KAAKA,IAAS,CAAC,IAAI,KAAK,MACvB4f,KAAQ;AAEX,cAAQ,OAAOlpB,CAAG,KAAK,OAAO,EAAE,KAC9B,OAAOipB,IACP,KAAK,EAAE3f,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,EAAE;AAAA,IAC5B,CAAC,GAEDupB,EAAO,UAAU,iBAAiBwF,GAAmB,SAAyB/uB,GAAQ;AACpF,MAAAA,IAASA,MAAW,GACpBgvB,EAAehvB,GAAQ,QAAQ;AAC/B,YAAM2f,IAAQ,KAAK3f,CAAM,GACnB4f,IAAO,KAAK5f,IAAS,CAAC;AAC5B,OAAI2f,MAAU,UAAaC,MAAS,WAClCqP,EAAYjvB,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMtJ,KAAOipB,KAAS;AAAA,MACpB,KAAK,EAAE3f,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM;AAEf,cAAQ,OAAOtJ,CAAG,KAAK,OAAO,EAAE,KAC9B,OAAO,KAAK,EAAEsJ,CAAM,IAAI,KAAK,KAC7B,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB4f,CAAI;AAAA,IACR,CAAC,GAED2J,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1CqoB,EAAQ,KAAK,MAAMroB,GAAQ,IAAM,IAAI,CAAC;AAAA,IAC/C,GAEAupB,EAAO,UAAU,cAAc,SAAsBvpB,GAAQ6uB,GAAU;AACrE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1CqoB,EAAQ,KAAK,MAAMroB,GAAQ,IAAO,IAAI,CAAC;AAAA,IAChD,GAEAupB,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1CqoB,EAAQ,KAAK,MAAMroB,GAAQ,IAAM,IAAI,CAAC;AAAA,IAC/C,GAEAupB,EAAO,UAAU,eAAe,SAAuBvpB,GAAQ6uB,GAAU;AACvE,aAAA7uB,IAASA,MAAW,GACf6uB,KAAUF,EAAY3uB,GAAQ,GAAG,KAAK,MAAM,GAC1CqoB,EAAQ,KAAK,MAAMroB,GAAQ,IAAO,IAAI,CAAC;AAAA,IAChD;AAEA,aAASovB,EAAUtF,GAAKlzB,GAAOoJ,GAAQ4uB,GAAK7yB,GAAKC,GAAK;AACpD,UAAI,CAACutB,EAAO,SAASO,CAAG,EAAG,OAAM,IAAI,UAAU,6CAA6C;AAC5F,UAAIlzB,IAAQmF,KAAOnF,IAAQoF,EAAK,OAAM,IAAI,WAAW,mCAAmC;AACxF,UAAIgE,IAAS4uB,IAAM9E,EAAI,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AAAA,IAC1E;AAEA,IAAAP,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAc,SAAsB3yB,GAAOoJ,GAAQ6mB,GAAYgI,GAAU;AAIxF,UAHAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACxB,CAACgI,GAAU;AACb,cAAMQ,IAAW,KAAK,IAAI,GAAG,IAAIxI,CAAU,IAAI;AAC/C,QAAAuI,EAAS,MAAMx4B,GAAOoJ,GAAQ6mB,GAAYwI,GAAU,CAAC;AAAA,MACzD;AAEE,UAAIP,IAAM,GACNnmB,IAAI;AAER,WADA,KAAK3I,CAAM,IAAIpJ,IAAQ,KAChB,EAAE+R,IAAIke,MAAeiI,KAAO;AACjC,aAAK9uB,IAAS2I,CAAC,IAAK/R,IAAQk4B,IAAO;AAGrC,aAAO9uB,IAAS6mB;AAAA,IAClB,GAEA0C,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAc,SAAsB3yB,GAAOoJ,GAAQ6mB,GAAYgI,GAAU;AAIxF,UAHAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACpB6mB,IAAaA,MAAe,GACxB,CAACgI,GAAU;AACb,cAAMQ,IAAW,KAAK,IAAI,GAAG,IAAIxI,CAAU,IAAI;AAC/C,QAAAuI,EAAS,MAAMx4B,GAAOoJ,GAAQ6mB,GAAYwI,GAAU,CAAC;AAAA,MACzD;AAEE,UAAI1mB,IAAIke,IAAa,GACjBiI,IAAM;AAEV,WADA,KAAK9uB,IAAS2I,CAAC,IAAI/R,IAAQ,KACpB,EAAE+R,KAAK,MAAMmmB,KAAO;AACzB,aAAK9uB,IAAS2I,CAAC,IAAK/R,IAAQk4B,IAAO;AAGrC,aAAO9uB,IAAS6mB;AAAA,IAClB,GAEA0C,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC1E,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,KAAM,CAAC,GACvD,KAAKA,CAAM,IAAKpJ,IAAQ,KACjBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,OAAQ,CAAC,GACzD,KAAKA,CAAM,IAAKpJ,IAAQ,KACxB,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GACvBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,OAAQ,CAAC,GACzD,KAAKA,CAAM,IAAKpJ,MAAU,GAC1B,KAAKoJ,IAAS,CAAC,IAAKpJ,IAAQ,KACrBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,YAAY,CAAC,GAC7D,KAAKA,IAAS,CAAC,IAAKpJ,MAAU,IAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,IAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GAC9B,KAAKoJ,CAAM,IAAKpJ,IAAQ,KACjBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,YAAY,CAAC,GAC7D,KAAKA,CAAM,IAAKpJ,MAAU,IAC1B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,IAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,IAAQ,KACrBoJ,IAAS;AAAA,IAClB;AAEA,aAASsvB,EAAgBxF,GAAKlzB,GAAOoJ,GAAQhE,GAAKD,GAAK;AACrD,MAAAwzB,GAAW34B,GAAOoF,GAAKD,GAAK+tB,GAAK9pB,GAAQ,CAAC;AAE1C,UAAIkvB,IAAK,OAAOt4B,IAAQ,OAAO,UAAU,CAAC;AAC1C,MAAAkzB,EAAI9pB,GAAQ,IAAIkvB,GAChBA,IAAKA,KAAM,GACXpF,EAAI9pB,GAAQ,IAAIkvB,GAChBA,IAAKA,KAAM,GACXpF,EAAI9pB,GAAQ,IAAIkvB,GAChBA,IAAKA,KAAM,GACXpF,EAAI9pB,GAAQ,IAAIkvB;AAChB,UAAIC,IAAK,OAAOv4B,KAAS,OAAO,EAAE,IAAI,OAAO,UAAU,CAAC;AACxD,aAAAkzB,EAAI9pB,GAAQ,IAAImvB,GAChBA,IAAKA,KAAM,GACXrF,EAAI9pB,GAAQ,IAAImvB,GAChBA,IAAKA,KAAM,GACXrF,EAAI9pB,GAAQ,IAAImvB,GAChBA,IAAKA,KAAM,GACXrF,EAAI9pB,GAAQ,IAAImvB,GACTnvB;AAAA,IACT;AAEA,aAASwvB,GAAgB1F,GAAKlzB,GAAOoJ,GAAQhE,GAAKD,GAAK;AACrD,MAAAwzB,GAAW34B,GAAOoF,GAAKD,GAAK+tB,GAAK9pB,GAAQ,CAAC;AAE1C,UAAIkvB,IAAK,OAAOt4B,IAAQ,OAAO,UAAU,CAAC;AAC1C,MAAAkzB,EAAI9pB,IAAS,CAAC,IAAIkvB,GAClBA,IAAKA,KAAM,GACXpF,EAAI9pB,IAAS,CAAC,IAAIkvB,GAClBA,IAAKA,KAAM,GACXpF,EAAI9pB,IAAS,CAAC,IAAIkvB,GAClBA,IAAKA,KAAM,GACXpF,EAAI9pB,IAAS,CAAC,IAAIkvB;AAClB,UAAIC,IAAK,OAAOv4B,KAAS,OAAO,EAAE,IAAI,OAAO,UAAU,CAAC;AACxD,aAAAkzB,EAAI9pB,IAAS,CAAC,IAAImvB,GAClBA,IAAKA,KAAM,GACXrF,EAAI9pB,IAAS,CAAC,IAAImvB,GAClBA,IAAKA,KAAM,GACXrF,EAAI9pB,IAAS,CAAC,IAAImvB,GAClBA,IAAKA,KAAM,GACXrF,EAAI9pB,CAAM,IAAImvB,GACPnvB,IAAS;AAAA,IAClB;AAEA,IAAAupB,EAAO,UAAU,mBAAmBwF,GAAmB,SAA2Bn4B,GAAOoJ,IAAS,GAAG;AACnG,aAAOsvB,EAAe,MAAM14B,GAAOoJ,GAAQ,OAAO,CAAC,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACpF,CAAC,GAEDupB,EAAO,UAAU,mBAAmBwF,GAAmB,SAA2Bn4B,GAAOoJ,IAAS,GAAG;AACnG,aAAOwvB,GAAe,MAAM54B,GAAOoJ,GAAQ,OAAO,CAAC,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACpF,CAAC,GAEDupB,EAAO,UAAU,aAAa,SAAqB3yB,GAAOoJ,GAAQ6mB,GAAYgI,GAAU;AAGtF,UAFAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GAChB,CAAC6uB,GAAU;AACb,cAAMY,KAAQ,KAAK,IAAI,GAAI,IAAI5I,IAAc,CAAC;AAE9C,QAAAuI,EAAS,MAAMx4B,GAAOoJ,GAAQ6mB,GAAY4I,KAAQ,GAAG,CAACA,EAAK;AAAA,MAC/D;AAEE,UAAI9mB,IAAI,GACJmmB,IAAM,GACNY,IAAM;AAEV,WADA,KAAK1vB,CAAM,IAAIpJ,IAAQ,KAChB,EAAE+R,IAAIke,MAAeiI,KAAO;AACjC,QAAIl4B,IAAQ,KAAK84B,MAAQ,KAAK,KAAK1vB,IAAS2I,IAAI,CAAC,MAAM,MACrD+mB,IAAM,IAER,KAAK1vB,IAAS2I,CAAC,KAAM/R,IAAQk4B,KAAQ,KAAKY,IAAM;AAGlD,aAAO1vB,IAAS6mB;AAAA,IAClB,GAEA0C,EAAO,UAAU,aAAa,SAAqB3yB,GAAOoJ,GAAQ6mB,GAAYgI,GAAU;AAGtF,UAFAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GAChB,CAAC6uB,GAAU;AACb,cAAMY,KAAQ,KAAK,IAAI,GAAI,IAAI5I,IAAc,CAAC;AAE9C,QAAAuI,EAAS,MAAMx4B,GAAOoJ,GAAQ6mB,GAAY4I,KAAQ,GAAG,CAACA,EAAK;AAAA,MAC/D;AAEE,UAAI9mB,IAAIke,IAAa,GACjBiI,IAAM,GACNY,IAAM;AAEV,WADA,KAAK1vB,IAAS2I,CAAC,IAAI/R,IAAQ,KACpB,EAAE+R,KAAK,MAAMmmB,KAAO;AACzB,QAAIl4B,IAAQ,KAAK84B,MAAQ,KAAK,KAAK1vB,IAAS2I,IAAI,CAAC,MAAM,MACrD+mB,IAAM,IAER,KAAK1vB,IAAS2I,CAAC,KAAM/R,IAAQk4B,KAAQ,KAAKY,IAAM;AAGlD,aAAO1vB,IAAS6mB;AAAA,IAClB,GAEA0C,EAAO,UAAU,YAAY,SAAoB3yB,GAAOoJ,GAAQ6uB,GAAU;AACxE,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,KAAM,IAAK,GACvDpJ,IAAQ,MAAGA,IAAQ,MAAOA,IAAQ,IACtC,KAAKoJ,CAAM,IAAKpJ,IAAQ,KACjBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,OAAQ,MAAO,GAC/D,KAAKA,CAAM,IAAKpJ,IAAQ,KACxB,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GACvBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,OAAQ,MAAO,GAC/D,KAAKA,CAAM,IAAKpJ,MAAU,GAC1B,KAAKoJ,IAAS,CAAC,IAAKpJ,IAAQ,KACrBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,YAAY,WAAW,GACvE,KAAKA,CAAM,IAAKpJ,IAAQ,KACxB,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,IAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,IACvBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KAAUO,EAAS,MAAMx4B,GAAOoJ,GAAQ,GAAG,YAAY,WAAW,GACnEpJ,IAAQ,MAAGA,IAAQ,aAAaA,IAAQ,IAC5C,KAAKoJ,CAAM,IAAKpJ,MAAU,IAC1B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,IAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,MAAU,GAC9B,KAAKoJ,IAAS,CAAC,IAAKpJ,IAAQ,KACrBoJ,IAAS;AAAA,IAClB,GAEAupB,EAAO,UAAU,kBAAkBwF,GAAmB,SAA0Bn4B,GAAOoJ,IAAS,GAAG;AACjG,aAAOsvB,EAAe,MAAM14B,GAAOoJ,GAAQ,CAAC,OAAO,oBAAoB,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACxG,CAAC,GAEDupB,EAAO,UAAU,kBAAkBwF,GAAmB,SAA0Bn4B,GAAOoJ,IAAS,GAAG;AACjG,aAAOwvB,GAAe,MAAM54B,GAAOoJ,GAAQ,CAAC,OAAO,oBAAoB,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACxG,CAAC;AAED,aAAS2vB,GAAc7F,GAAKlzB,GAAOoJ,GAAQ4uB,GAAK7yB,GAAKC,GAAK;AACxD,UAAIgE,IAAS4uB,IAAM9E,EAAI,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AACxE,UAAI9pB,IAAS,EAAG,OAAM,IAAI,WAAW,oBAAoB;AAAA,IAC3D;AAEA,aAAS4vB,GAAY9F,GAAKlzB,GAAOoJ,GAAQ6vB,GAAchB,GAAU;AAC/D,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KACHc,GAAa7F,GAAKlzB,GAAOoJ,GAAQ,CAAkD,GAErFqoB,EAAQ,MAAMyB,GAAKlzB,GAAOoJ,GAAQ6vB,GAAc,IAAI,CAAC,GAC9C7vB,IAAS;AAAA,IAClB;AAEA,IAAAupB,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAOe,GAAW,MAAMh5B,GAAOoJ,GAAQ,IAAM6uB,CAAQ;AAAA,IACvD,GAEAtF,EAAO,UAAU,eAAe,SAAuB3yB,GAAOoJ,GAAQ6uB,GAAU;AAC9E,aAAOe,GAAW,MAAMh5B,GAAOoJ,GAAQ,IAAO6uB,CAAQ;AAAA,IACxD;AAEA,aAASiB,GAAahG,GAAKlzB,GAAOoJ,GAAQ6vB,GAAchB,GAAU;AAChE,aAAAj4B,IAAQ,CAACA,GACToJ,IAASA,MAAW,GACf6uB,KACHc,GAAa7F,GAAKlzB,GAAOoJ,GAAQ,CAAoD,GAEvFqoB,EAAQ,MAAMyB,GAAKlzB,GAAOoJ,GAAQ6vB,GAAc,IAAI,CAAC,GAC9C7vB,IAAS;AAAA,IAClB;AAEA,IAAAupB,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAOiB,GAAY,MAAMl5B,GAAOoJ,GAAQ,IAAM6uB,CAAQ;AAAA,IACxD,GAEAtF,EAAO,UAAU,gBAAgB,SAAwB3yB,GAAOoJ,GAAQ6uB,GAAU;AAChF,aAAOiB,GAAY,MAAMl5B,GAAOoJ,GAAQ,IAAO6uB,CAAQ;AAAA,IACzD,GAGAtF,EAAO,UAAU,OAAO,SAAe3kB,GAAQmrB,GAAa32B,GAAOC,GAAK;AACtE,UAAI,CAACkwB,EAAO,SAAS3kB,CAAM,EAAG,OAAM,IAAI,UAAU,6BAA6B;AAS/E,UARKxL,MAAOA,IAAQ,IAChB,CAACC,KAAOA,MAAQ,MAAGA,IAAM,KAAK,SAC9B02B,KAAenrB,EAAO,WAAQmrB,IAAcnrB,EAAO,SAClDmrB,MAAaA,IAAc,IAC5B12B,IAAM,KAAKA,IAAMD,MAAOC,IAAMD,IAG9BC,MAAQD,KACRwL,EAAO,WAAW,KAAK,KAAK,WAAW,EAAG,QAAO;AAGrD,UAAImrB,IAAc;AAChB,cAAM,IAAI,WAAW,2BAA2B;AAElD,UAAI32B,IAAQ,KAAKA,KAAS,KAAK,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AAChF,UAAIC,IAAM,EAAG,OAAM,IAAI,WAAW,yBAAyB;AAG3D,MAAIA,IAAM,KAAK,WAAQA,IAAM,KAAK,SAC9BuL,EAAO,SAASmrB,IAAc12B,IAAMD,MACtCC,IAAMuL,EAAO,SAASmrB,IAAc32B;AAGtC,YAAMkG,IAAMjG,IAAMD;AAElB,aAAI,SAASwL,KAAU,OAAO,WAAW,UAAU,cAAe,aAEhE,KAAK,WAAWmrB,GAAa32B,GAAOC,CAAG,IAEvC,WAAW,UAAU,IAAI;AAAA,QACvBuL;AAAA,QACA,KAAK,SAASxL,GAAOC,CAAG;AAAA,QACxB02B;AAAA,MACN,GAGSzwB;AAAA,IACT,GAMAiqB,EAAO,UAAU,OAAO,SAAe7yB,GAAK0C,GAAOC,GAAKuxB,GAAU;AAEhE,UAAI,OAAOl0B,KAAQ,UAAU;AAS3B,YARI,OAAO0C,KAAU,YACnBwxB,IAAWxxB,GACXA,IAAQ,GACRC,IAAM,KAAK,UACF,OAAOA,KAAQ,aACxBuxB,IAAWvxB,GACXA,IAAM,KAAK,SAETuxB,MAAa,UAAa,OAAOA,KAAa;AAChD,gBAAM,IAAI,UAAU,2BAA2B;AAEjD,YAAI,OAAOA,KAAa,YAAY,CAACrB,EAAO,WAAWqB,CAAQ;AAC7D,gBAAM,IAAI,UAAU,uBAAuBA,CAAQ;AAErD,YAAIl0B,EAAI,WAAW,GAAG;AACpB,gBAAMywB,IAAOzwB,EAAI,WAAW,CAAC;AAC7B,WAAKk0B,MAAa,UAAUzD,IAAO,OAC/ByD,MAAa,cAEfl0B,IAAMywB;AAAA,QAEd;AAAA,MACA,MAAS,CAAI,OAAOzwB,KAAQ,WACxBA,IAAMA,IAAM,MACH,OAAOA,KAAQ,cACxBA,IAAM,OAAOA,CAAG;AAIlB,UAAI0C,IAAQ,KAAK,KAAK,SAASA,KAAS,KAAK,SAASC;AACpD,cAAM,IAAI,WAAW,oBAAoB;AAG3C,UAAIA,KAAOD;AACT,eAAO;AAGT,MAAAA,IAAQA,MAAU,GAClBC,IAAMA,MAAQ,SAAY,KAAK,SAASA,MAAQ,GAE3C3C,MAAKA,IAAM;AAEhB,UAAIiS;AACJ,UAAI,OAAOjS,KAAQ;AACjB,aAAKiS,IAAIvP,GAAOuP,IAAItP,GAAK,EAAEsP;AACzB,eAAKA,CAAC,IAAIjS;AAAA,WAEP;AACL,cAAM+3B,IAAQlF,EAAO,SAAS7yB,CAAG,IAC7BA,IACA6yB,EAAO,KAAK7yB,GAAKk0B,CAAQ,GACvBtrB,IAAMmvB,EAAM;AAClB,YAAInvB,MAAQ;AACV,gBAAM,IAAI,UAAU,gBAAgB5I,IAClC,mCAAmC;AAEvC,aAAKiS,IAAI,GAAGA,IAAItP,IAAMD,GAAO,EAAEuP;AAC7B,eAAKA,IAAIvP,CAAK,IAAIq1B,EAAM9lB,IAAIrJ,CAAG;AAAA,MAErC;AAEE,aAAO;AAAA,IACT;AAMA,UAAM0wB,IAAS,CAAA;AACf,aAASC,EAAGC,GAAKC,GAAYC,GAAM;AACjC,MAAAJ,EAAOE,CAAG,IAAI,cAAwBE,EAAK;AAAA,QACzC,cAAe;AACb,gBAAK,GAEL,OAAO,eAAe,MAAM,WAAW;AAAA,YACrC,OAAOD,EAAW,MAAM,MAAM,SAAS;AAAA,YACvC,UAAU;AAAA,YACV,cAAc;AAAA,WACf,GAGD,KAAK,OAAO,GAAG,KAAK,IAAI,KAAKD,CAAG,KAGhC,KAAK,OAEL,OAAO,KAAK;AAAA,QAClB;AAAA,QAEI,IAAI,OAAQ;AACV,iBAAOA;AAAA,QACb;AAAA,QAEI,IAAI,KAAMt5B,GAAO;AACf,iBAAO,eAAe,MAAM,QAAQ;AAAA,YAClC,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAAA;AAAA,YACA,UAAU;AAAA,WACX;AAAA,QACP;AAAA,QAEI,WAAY;AACV,iBAAO,GAAG,KAAK,IAAI,KAAKs5B,CAAG,MAAM,KAAK,OAAO;AAAA,QACnD;AAAA,MACA;AAAA,IACA;AAEA,IAAAD;AAAA,MAAE;AAAA,MACA,SAAU70B,GAAM;AACd,eAAIA,IACK,GAAGA,CAAI,iCAGT;AAAA,MACX;AAAA,MAAK;AAAA,IAAU,GACf60B;AAAA,MAAE;AAAA,MACA,SAAU70B,GAAM2vB,GAAQ;AACtB,eAAO,QAAQ3vB,CAAI,oDAAoD,OAAO2vB,CAAM;AAAA,MACxF;AAAA,MAAK;AAAA,IAAS,GACdkF;AAAA,MAAE;AAAA,MACA,SAAU5e,GAAKgf,GAAOC,GAAO;AAC3B,YAAIC,IAAM,iBAAiBlf,CAAG,sBAC1Bmf,IAAWF;AACf,eAAI,OAAO,UAAUA,CAAK,KAAK,KAAK,IAAIA,CAAK,IAAI,KAAK,KACpDE,IAAWC,GAAsB,OAAOH,CAAK,CAAC,IACrC,OAAOA,KAAU,aAC1BE,IAAW,OAAOF,CAAK,IACnBA,IAAQ,OAAO,CAAC,KAAK,OAAO,EAAE,KAAKA,IAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,QACrEE,IAAWC,GAAsBD,CAAQ,IAE3CA,KAAY,MAEdD,KAAO,eAAeF,CAAK,cAAcG,CAAQ,IAC1CD;AAAA,MACX;AAAA,MAAK;AAAA,IAAU;AAEf,aAASE,GAAuB/5B,GAAK;AACnC,UAAIk3B,IAAM,IACNjlB,IAAIjS,EAAI;AACZ,YAAM0C,IAAQ1C,EAAI,CAAC,MAAM,MAAM,IAAI;AACnC,aAAOiS,KAAKvP,IAAQ,GAAGuP,KAAK;AAC1B,QAAAilB,IAAM,IAAIl3B,EAAI,MAAMiS,IAAI,GAAGA,CAAC,CAAC,GAAGilB,CAAG;AAErC,aAAO,GAAGl3B,EAAI,MAAM,GAAGiS,CAAC,CAAC,GAAGilB,CAAG;AAAA,IACjC;AAKA,aAAS8C,GAAa5G,GAAK9pB,GAAQ6mB,GAAY;AAC7C,MAAAmI,EAAehvB,GAAQ,QAAQ,IAC3B8pB,EAAI9pB,CAAM,MAAM,UAAa8pB,EAAI9pB,IAAS6mB,CAAU,MAAM,WAC5DoI,EAAYjvB,GAAQ8pB,EAAI,UAAUjD,IAAa,EAAE;AAAA,IAErD;AAEA,aAAS0I,GAAY34B,GAAOoF,GAAKD,GAAK+tB,GAAK9pB,GAAQ6mB,GAAY;AAC7D,UAAIjwB,IAAQmF,KAAOnF,IAAQoF,GAAK;AAC9B,cAAMmwB,IAAI,OAAOnwB,KAAQ,WAAW,MAAM;AAC1C,YAAIq0B;AAEF,cAAIr0B,MAAQ,KAAKA,MAAQ,OAAO,CAAC,IAC/Bq0B,IAAQ,OAAOlE,CAAC,WAAWA,CAAC,QAAQtF,IAAa,KAAK,CAAC,GAAGsF,CAAC,KAE3DkE,IAAQ,SAASlE,CAAC,QAAQtF,IAAa,KAAK,IAAI,CAAC,GAAGsF,CAAC,iBACzCtF,IAAa,KAAK,IAAI,CAAC,GAAGsF,CAAC,IAKrC,IAAI6D,EAAO,iBAAiB,SAASK,GAAOz5B,CAAK;AAAA,MAC3D;AACE,MAAA85B,GAAY5G,GAAK9pB,GAAQ6mB,CAAU;AAAA,IACrC;AAEA,aAASmI,EAAgBp4B,GAAOwE,GAAM;AACpC,UAAI,OAAOxE,KAAU;AACnB,cAAM,IAAIo5B,EAAO,qBAAqB50B,GAAM,UAAUxE,CAAK;AAAA,IAE/D;AAEA,aAASq4B,EAAar4B,GAAOizB,GAAQzY,GAAM;AACzC,YAAI,KAAK,MAAMxa,CAAK,MAAMA,KACxBo4B,EAAep4B,GAAOwa,CAAI,GACpB,IAAI4e,EAAO,iBAAyB,UAAU,cAAcp5B,CAAK,KAGrEizB,IAAS,IACL,IAAImG,EAAO,yBAAwB,IAGrC,IAAIA,EAAO;AAAA,QAAyB;AAAA,QACR,eAA6BnG,CAAM;AAAA,QACnCjzB;AAAA,MAAK;AAAA,IACzC;AAKA,UAAM+5B,IAAoB;AAE1B,aAASC,GAAavf,GAAK;AAMzB,UAJAA,IAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,GAEtBA,IAAMA,EAAI,KAAI,EAAG,QAAQsf,GAAmB,EAAE,GAE1Ctf,EAAI,SAAS,EAAG,QAAO;AAE3B,aAAOA,EAAI,SAAS,MAAM;AACxB,QAAAA,IAAMA,IAAM;AAEd,aAAOA;AAAA,IACT;AAEA,aAASoa,EAAaX,GAAQ+F,GAAO;AACnC,MAAAA,IAAQA,KAAS;AACjB,UAAI/C;AACJ,YAAMjE,IAASiB,EAAO;AACtB,UAAIgG,IAAgB;AACpB,YAAMrC,IAAQ,CAAA;AAEd,eAAS9lB,IAAI,GAAGA,IAAIkhB,GAAQ,EAAElhB,GAAG;AAI/B,YAHAmlB,IAAYhD,EAAO,WAAWniB,CAAC,GAG3BmlB,IAAY,SAAUA,IAAY,OAAQ;AAE5C,cAAI,CAACgD,GAAe;AAElB,gBAAIhD,IAAY,OAAQ;AAEtB,eAAK+C,KAAS,KAAK,MAAIpC,EAAM,KAAK,KAAM,KAAM,GAAI;AAClD;AAAA,YACV,WAAmB9lB,IAAI,MAAMkhB,GAAQ;AAE3B,eAAKgH,KAAS,KAAK,MAAIpC,EAAM,KAAK,KAAM,KAAM,GAAI;AAClD;AAAA,YACV;AAGQ,YAAAqC,IAAgBhD;AAEhB;AAAA,UACR;AAGM,cAAIA,IAAY,OAAQ;AACtB,aAAK+C,KAAS,KAAK,MAAIpC,EAAM,KAAK,KAAM,KAAM,GAAI,GAClDqC,IAAgBhD;AAChB;AAAA,UACR;AAGM,UAAAA,KAAagD,IAAgB,SAAU,KAAKhD,IAAY,SAAU;AAAA,QACxE,MAAW,CAAIgD,MAEJD,KAAS,KAAK,MAAIpC,EAAM,KAAK,KAAM,KAAM,GAAI;AAMpD,YAHAqC,IAAgB,MAGZhD,IAAY,KAAM;AACpB,eAAK+C,KAAS,KAAK,EAAG;AACtB,UAAApC,EAAM,KAAKX,CAAS;AAAA,QAC1B,WAAeA,IAAY,MAAO;AAC5B,eAAK+C,KAAS,KAAK,EAAG;AACtB,UAAApC,EAAM;AAAA,YACJX,KAAa,IAAM;AAAA,YACnBA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA,WAAeA,IAAY,OAAS;AAC9B,eAAK+C,KAAS,KAAK,EAAG;AACtB,UAAApC,EAAM;AAAA,YACJX,KAAa,KAAM;AAAA,YACnBA,KAAa,IAAM,KAAO;AAAA,YAC1BA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA,WAAeA,IAAY,SAAU;AAC/B,eAAK+C,KAAS,KAAK,EAAG;AACtB,UAAApC,EAAM;AAAA,YACJX,KAAa,KAAO;AAAA,YACpBA,KAAa,KAAM,KAAO;AAAA,YAC1BA,KAAa,IAAM,KAAO;AAAA,YAC1BA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA;AACM,gBAAM,IAAI,MAAM,oBAAoB;AAAA,MAE1C;AAEE,aAAOW;AAAA,IACT;AAEA,aAASjB,GAAcnc,GAAK;AAC1B,YAAM0f,IAAY,CAAA;AAClB,eAASpoB,IAAI,GAAGA,IAAI0I,EAAI,QAAQ,EAAE1I;AAEhC,QAAAooB,EAAU,KAAK1f,EAAI,WAAW1I,CAAC,IAAI,GAAI;AAEzC,aAAOooB;AAAA,IACT;AAEA,aAASpD,EAAgBtc,GAAKwf,GAAO;AACnC,UAAI7H,GAAGmG,GAAID;AACX,YAAM6B,IAAY,CAAA;AAClB,eAASpoB,IAAI,GAAGA,IAAI0I,EAAI,UACjB,GAAAwf,KAAS,KAAK,IADW,EAAEloB;AAGhC,QAAAqgB,IAAI3X,EAAI,WAAW1I,CAAC,GACpBwmB,IAAKnG,KAAK,GACVkG,IAAKlG,IAAI,KACT+H,EAAU,KAAK7B,CAAE,GACjB6B,EAAU,KAAK5B,CAAE;AAGnB,aAAO4B;AAAA,IACT;AAEA,aAASrF,EAAera,GAAK;AAC3B,aAAO6X,EAAO,YAAY0H,GAAYvf,CAAG,CAAC;AAAA,IAC5C;AAEA,aAASic,EAAY0D,GAAKC,GAAKjxB,GAAQ6pB,GAAQ;AAC7C,UAAIlhB;AACJ,WAAKA,IAAI,GAAGA,IAAIkhB,KACT,EAAAlhB,IAAI3I,KAAUixB,EAAI,UAAYtoB,KAAKqoB,EAAI,SADtB,EAAEroB;AAExB,QAAAsoB,EAAItoB,IAAI3I,CAAM,IAAIgxB,EAAIroB,CAAC;AAEzB,aAAOA;AAAA,IACT;AAKA,aAASyhB,EAAYxY,GAAKR,GAAM;AAC9B,aAAOQ,aAAeR,KACnBQ,KAAO,QAAQA,EAAI,eAAe,QAAQA,EAAI,YAAY,QAAQ,QACjEA,EAAI,YAAY,SAASR,EAAK;AAAA,IACpC;AACA,aAASia,GAAazZ,GAAK;AAEzB,aAAOA,MAAQA;AAAA,IACjB;AAIA,UAAM4c,MAAuB,WAAY;AACvC,YAAM0C,IAAW,oBACXC,IAAQ,IAAI,MAAM,GAAG;AAC3B,eAASxoB,IAAI,GAAGA,IAAI,IAAI,EAAEA,GAAG;AAC3B,cAAMyoB,IAAMzoB,IAAI;AAChB,iBAASqkB,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,UAAAmE,EAAMC,IAAMpE,CAAC,IAAIkE,EAASvoB,CAAC,IAAIuoB,EAASlE,CAAC;AAAA,MAE/C;AACE,aAAOmE;AAAA,IACT,GAAC;AAGD,aAASpC,GAAoBl2B,GAAI;AAC/B,aAAO,OAAO,SAAW,MAAcw4B,KAAyBx4B;AAAA,IAClE;AAEA,aAASw4B,KAA0B;AACjC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAAA;;;ACzjEA,MAAMC,KAAO,+CACTC,KAAO,qCACPC,KAAO,mCAEXC,KAAe;AAAA,EACb,KAAK;AAAA,IACH,SAAS,GAAGF,EAAG;AAAA,IACf,SAAS,GAAGA,EAAG;AAAA,IACf,QAAS,GAAGA,EAAG;AAAA,IACf,SAAS,GAAGA,EAAG;AAAA,IACf,QAAS,GAAGA,EAAG;AAAA,EACnB;AAAA,EACE,KAAK;AAAA,IACH,MAAY,GAAGD,EAAG;AAAA,IAClB,KAAY,GAAGA,EAAG;AAAA,IAClB,OAAY,GAAGA,EAAG;AAAA,IAClB,MAAY,GAAGA,EAAG;AAAA,IAClB,YAAY,GAAGA,EAAG;AAAA,EACtB;AAAA,EACE,KAAK;AAAA,IACH,QAAQ;AAAA,EACZ;AAAA,EACE,GAAG;AAAA,IACD,SAAS,GAAGE,EAAI;AAAA,IAChB,QAAS,GAAGA,EAAI;AAAA,EACpB;AAAA,EACE,KAAK;AAAA,IACH,SAAS,GAAGA,EAAI;AAAA,IAChB,aAAa,GAAGA,EAAI;AAAA,EACxB;AACA,GC1BM,EAAA,KAAEE,GAAG,IAAKD,IAGVE,KAAiB,oDACjBC,KAAqB;AAAA,EACzB,MAAM;AAAA,EAAM,KAAK;AAAA,EAAK,KAAK;AAAA,EAC3B,GAAK;AAAA;AAAA,EAAM,GAAK;AAAA,EAAM,GAAK;AAAA,EAAM,GAAK;AAAA,EAAM,GAAK;AAAA,EACjD,GAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,GAAK;AAAA,EAAK,KAAK;AAAA,EACjE,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EACjE,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAAA,EAAK,KAAK;AAC/C,GACMC,KAAkB,8BAElBC,KAAkB;AAAA,EACtB,MAAM;AAAA,EACN,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AACd,GACMC,KAAgB;AAGP,MAAMC,GAAQ;AAAA,EAC3B,YAAYh7B,GAAS;AA2BnB,QAxBA,KAAK,OAAO,qCACZ,KAAK,gBAAgB,2CACrB,KAAK,sBAAsB,4BAC3B,KAAK,0BAA0B,4BAC/B,KAAK,YAAY,6CACjB,KAAK,UAAU,8XACf,KAAK,YAAY,sjCACjB,KAAK,YAAY,iZACjB,KAAK,SAAS,gaACd,KAAK,UAAU,mFACf,KAAK,WAAW,6CAChB,KAAK,WAAW,wBAChB,KAAK,iBAAiB,qCACtB,KAAK,mBAAmB,6BACxB,KAAK,WAAW,6CAChB,KAAK,WAAW,eAChB,KAAK,cAAc,WACnB,KAAK,aAAa,oBAClBA,IAAUA,KAAW,CAAA,GAGrB,KAAK,eAAeA,EAAQ,aAGxB,KAAK,YAAY,CAAC,CAACA,EAAQ,UAAU;AACvC,WAAK,UAAU;AAEf,iBAAW4H,KAAO;AAChB,QAAI,EAAEA,KAAOkzB,OAAoB,KAAKlzB,CAAG,aAAa,WACpD,KAAKA,CAAG,IAAImzB;AAAA,IAElB;AAGE,WAAK,UAAU/6B,EAAQ,OAAO;AAGhC,SAAK,WAAW,CAAC,CAACA,EAAQ,UAE1B,KAAK,qBAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA,EAKA,eAAeikB,GAAUgX,GAAe;AAEtC,QAAI3B,IAAQ,KAAK,QACb4B,IAAoB5B,EAAM;AAC9B,eAAa;AAEX,UAAI6B,GAAiBC;AACrB,aAAOD,IAAkB,KAAK,SAAS,KAAK7B,CAAK;AAE/C,QAAI,KAAK,aAAa8B,IAAU,KAAK,SAAS,KAAKD,EAAgB,CAAC,CAAC,MACnEE,EAAU,WAAWD,EAAQ,CAAC,GAAG,IAAI,KAAK,OAAOD,EAAgB,CAAC,EAAE,MAAM,GAE5E7B,IAAQA,EAAM,OAAO6B,EAAgB,CAAC,EAAE,QAAQ7B,EAAM,MAAM,GAC5D4B,IAAoB5B,EAAM,QAC1B,KAAK;AAOP,UAJI,CAAC6B,MAAoBA,IAAkB,KAAK,YAAY,KAAK7B,CAAK,OACpEA,IAAQA,EAAM,OAAO6B,EAAgB,CAAC,EAAE,QAAQ7B,EAAM,MAAM,IAG1D,KAAK,WAAW,KAAKA,CAAK;AAE5B,eAAI2B,MAEE,KAAK,aAAaG,IAAU,KAAK,SAAS,KAAK9B,CAAK,MACtD+B,EAAU,WAAWD,EAAQ,CAAC,GAAG,IAAI,KAAK,OAAO9B,EAAM,MAAM,GAC/DA,IAAQ,MACR+B,EAAU,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,IAEjC,KAAK,SAAS/B;AAIvB,YAAMgC,IAAO,KAAK,OAAOC,IAAYjC,EAAM,CAAC;AAC5C,UAAIlf,IAAO,IAAIxa,IAAQ,IAAI47B,IAAS,IAChCC,IAAQ,MAAMC,IAAc,GAAGC,IAAe;AAClD,cAAQJ,GAAS;AAAA,QACjB,KAAK;AAEH,cAAIjC,EAAM,SAAS;AACjB;AAEG,cAAIA,EAAM,CAAC,MAAM;AAIpB,gBAHA,KAAK,kBAAkB,MAEvBA,IAAQA,EAAM,OAAO,CAAC,GAClBA,EAAM,CAAC,MAAM,KAAK;AACpB,cAAAqC,IAAe;AACf;AAAA,YACF;AAAA,iBAGG;AACH,YAAI,KAAK,YACPD,IAAc,GACdthB,IAAO;AAET;AAAA,UACF;AAAA;AAAA,QAEF,KAAK;AAEH,cAAIqhB,IAAQ,KAAK,cAAc,KAAKnC,CAAK;AACvC,YAAAlf,IAAO,OAAOxa,IAAQ67B,EAAM,CAAC;AAAA,mBAEtBA,IAAQ,KAAK,KAAK,KAAKnC,CAAK,GAAG;AAEtC,gBADA15B,IAAQ,KAAK,UAAU67B,EAAM,CAAC,CAAC,GAC3B77B,MAAU,QAAQi7B,GAAgB,KAAKj7B,CAAK;AAC9C,qBAAOg8B,EAAkB,IAAI;AAC/B,YAAAxhB,IAAO;AAAA,UACT,MAEK,CAAIkf,EAAM,SAAS,KAAKA,EAAM,CAAC,MAAM,OACxClf,IAAO,MAAMshB,IAAc,KAEpB,KAAK,WAAWpC,EAAM,SAAS,KAAKA,EAAM,CAAC,MAAM,QACxDoC,IAAc,GACV,KAAK,gBAActhB,IAAO,gBAAgBxa,IAAQ,QACjDwa,IAAO,WAAWxa,IAAQ;AAEjC;AAAA,QAEF,KAAK;AACH,UAAI05B,EAAM,SAAS,KAAKA,EAAM,CAAC,MAAM,QACnClf,IAAO,MAAMshB,IAAc;AAC7B;AAAA,QAEF,KAAK;AAIH,YAAKD,IAAQ,KAAK,OAAO,KAAKnC,CAAK,MAC/B2B,MAAkBQ,IAAQ,KAAK,OAAO,KAAK,GAAGnC,CAAK,GAAG,QACxDlf,IAAO,SAASohB,IAAS,KAAK57B,IAAQ67B,EAAM,CAAC;AAC/C;AAAA,QAEF,KAAK;AAEH,cAAIA,IAAQ,KAAK,oBAAoB,KAAKnC,CAAK;AAC7C,YAAA15B,IAAQ67B,EAAM,CAAC;AAAA,mBAGd,EAAE,OAAA77B,GAAO,aAAA87B,EAAW,IAAK,KAAK,cAAcpC,CAAK,GAC9C15B,MAAU;AACZ,mBAAOg8B,EAAkB,IAAI;AAEjC,WAAIH,MAAU,QAAQC,MAAgB,OACpCthB,IAAO,WACP,KAAK,qBAAqB;AAE5B;AAAA,QAEF,KAAK;AACH,cAAI,CAAC,KAAK,WAAW;AAEnB,gBAAIqhB,IAAQ,KAAK,wBAAwB,KAAKnC,CAAK;AACjD,cAAA15B,IAAQ67B,EAAM,CAAC;AAAA,qBAGd,EAAE,OAAA77B,GAAO,aAAA87B,EAAW,IAAK,KAAK,cAAcpC,CAAK,GAC9C15B,MAAU;AACZ,qBAAOg8B,EAAkB,IAAI;AAEjC,aAAIH,MAAU,QAAQC,MAAgB,OACpCthB,IAAO,WACP,KAAK,qBAAqB;AAAA,UAE9B;AACA;AAAA,QAEF,KAAK;AAEH,UAAI,KAAK,YAAYqhB,IAAQ,KAAK,UAAU,KAAKnC,CAAK,OACpDlf,IAAO,OAAOxa,IAAQ67B,EAAM,CAAC;AAC/B;AAAA,QAEF,KAAK;AAEH,UAAI,KAAK,oBAAoB,cAAcA,IAAQ,KAAK,UAAU,KAAKnC,CAAK,MAC1Elf,IAAO,YAAYxa,IAAQ67B,EAAM,CAAC,MAE3BA,IAAQ,KAAK,SAAS,KAAKnC,CAAK,OACvClf,IAAOqhB,EAAM,CAAC;AAChB;AAAA,QAEF,KAAK;AAEH,cAAInC,EAAM,WAAW,IAAI2B,IAAiB3B,EAAM,CAAC,IAAI,OAAOA,EAAM,CAAC,IAAI,KAAM;AAC3E,YAAAlf,IAAO,KACPshB,IAAc;AACd;AAAA,UACF;AAAA;AAAA,QAGF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAIH,WAAID,IAAQ,KAAK,QAAQ,KAAKnC,CAAK,KAC/B2B,MAAkBQ,IAAQ,KAAK,QAAQ,KAAK,GAAGnC,CAAK,GAAG,QACzDlf,IAAO,WAAWxa,IAAQ67B,EAAM,CAAC,GACjCD,IAAU,OAAOC,EAAM,CAAC,KAAM,WAAWf,GAAI,SAClC,OAAOe,EAAM,CAAC,KAAM,WAAWf,GAAI,UAAUA,GAAI;AAE9D;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAEH,WAAIe,IAAQ,KAAK,eAAe,KAAKnC,CAAK,KACxClf,IAAOqhB,EAAM,CAAC,EAAE,YAAW,IAE3BE,IAAe;AACjB;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAEH,WAAIF,IAAQ,KAAK,SAAS,KAAKnC,CAAK,MAClClf,IAAO,WAAWxa,IAAQ67B,EAAM,CAAC,GAAGD,IAASd,GAAI,WAEjDiB,IAAe;AACjB;AAAA,QAEF,KAAK;AAEH,WAAIF,IAAQ,KAAK,iBAAiB,KAAKnC,CAAK,MAC1Clf,IAAO,gBAAgBxa,IAAQ,OAE/B+7B,IAAe;AACjB;AAAA,QAEF,KAAK;AAEH,UAAI,KAAK,WAAWrC,EAAM,SAAS,MACjClf,IAAO,gBACHkf,EAAM,CAAC,MAAM,OACfoC,IAAc,GAAG97B,IAAQ,QAEzB87B,IAAc,GAAG97B,IAAQ;AAE7B;AAAA,QAEF,KAAK;AACH,cAAI,CAAC,KAAK;AACR;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAK,KAAK,cACR87B,IAAc,GACdthB,IAAOmhB;AAET;AAAA,QACF,KAAK;AAEH,UAAI,CAAC,KAAK,aAAajC,EAAM,UAAU,MAEjCA,EAAM,CAAC,MAAM,OACflf,IAAO,MAAMshB,IAAc,MAE3BthB,IAAOmhB,GAAWG,IAAc;AAEpC;AAAA,QACF,KAAK;AAGH,UAAIpC,EAAM,UAAU,KAAKA,EAAM,CAAC,MAAM,QACpClf,IAAO,MAAMshB,IAAc;AAC7B;AAAA,QAEF;AACE,UAAAC,IAAe;AAAA,MACvB;AAiBM,UAdIA,OAEG,KAAK,oBAAoB,aAAa,KAAK,oBAAoB,cAC/DF,IAAQ,KAAK,QAAQ,KAAKnC,CAAK,MAClClf,IAAO,UAAUxa,IAAQ67B,EAAM,CAAC,KAAK,QAI7BA,IAAQ,KAAK,UAAU,KAAKnC,CAAK,MAClC2B,MAAkBQ,IAAQ,KAAK,UAAU,KAAK,GAAGnC,CAAK,GAAG,QAChElf,IAAO,YAAYohB,IAASC,EAAM,CAAC,KAAK,IAAI77B,IAAQ,KAAK,UAAU67B,EAAM,CAAC,CAAC,KAI3E,KAAK,oBAAoB;AAC3B,gBAAQrhB,GAAI;AAAA,UACZ,KAAK;AAAY,YAAAA,IAAO;AAAW;AAAA,UACnC,KAAK;AAAY,YAAAA,IAAO;AAAW;AAAA,UACnC;AAAiB,YAAAA,IAAO;AAAA,QAChC;AAIM,UAAI,CAACA;AAIH,eAAI6gB,KAAkB,CAAC,YAAY,KAAK3B,CAAK,KAAK,QAAQ,KAAKA,CAAK,IAC3DsC,EAAkB,IAAI,IAEtB,KAAK,SAAStC;AAIzB,YAAMzG,IAAS6I,KAAeD,EAAM,CAAC,EAAE,QACjCI,IAAQR,EAAUjhB,GAAMxa,GAAO47B,GAAQF,GAAMzI,CAAM;AACzD,WAAK,gBAAgBgJ,GACrB,KAAK,kBAAkBzhB,GAGvBkf,IAAQA,EAAM,OAAOzG,GAAQyG,EAAM,MAAM;AAAA,IAC3C;AAGA,aAAS+B,EAAUjhB,GAAMxa,GAAO47B,GAAQF,GAAMzI,GAAQ;AACpD,YAAMzwB,IAAQk3B,IAAQ4B,IAAoB5B,EAAM,SAAS4B,GACnD74B,IAAMD,IAAQywB,GACdgJ,IAAQ,EAAE,MAAAzhB,GAAM,OAAAxa,GAAO,QAAA47B,GAAQ,MAAAF,GAAM,OAAAl5B,GAAO,KAAAC,EAAG;AACrD,aAAA4hB,EAAS,MAAM4X,CAAK,GACbA;AAAA,IACT;AAEA,aAASD,EAAkBE,GAAM;AAAE,MAAA7X,EAAS6X,EAAK,aAAa,OAAO,KAAKxC,CAAK,EAAE,CAAC,CAAC,CAAC;AAAA,IAAG;AAAA,EACzF;AAAA;AAAA,EAGA,UAAUne,GAAM;AACd,QAAI4gB,IAAU;AACd,UAAMC,IAAW7gB,EAAK,QAAQwf,IAAgB,CAACsB,GAAUC,GAAUC,GAAUC,MAAgB;AAE3F,UAAI,OAAOF,KAAa;AACtB,eAAO,OAAO,aAAa,OAAO,SAASA,GAAU,EAAE,CAAC;AAE1D,UAAI,OAAOC,KAAa,UAAU;AAChC,YAAIE,IAAW,OAAO,SAASF,GAAU,EAAE;AAC3C,eAAOE,KAAY,QAAS,OAAO,aAAa,OAAO,SAASF,GAAU,EAAE,CAAC,IAC3E,OAAO,aAAa,UAAWE,KAAY,UAAY,KAAK,SAAUA,IAAW,KAAM;AAAA,MAC3F;AAEA,aAAID,KAAexB,KACVA,GAAmBwB,CAAW,KAEvCL,IAAU,IACH;AAAA,IACT,CAAC;AACD,WAAOA,IAAU,OAAOC;AAAA,EAC1B;AAAA;AAAA,EAGA,cAAc1C,GAAO;AAEnB,QAAIA,EAAM,UAAU,GAAG;AAErB,YAAMgD,IAAUhD,EAAM,MAAM,mBAAmB,EAAE,CAAC,GAC5CiD,IAAgBD,EAAQ;AAG9B,UAAIE,IAAa,KAAK,IAAI,KAAK,oBAAoBD,CAAa;AAChE,cAAQC,IAAalD,EAAM,QAAQgD,GAASE,CAAU,KAAK,KAAG;AAE5D,YAAIC,IAAiB;AACrB,eAAOnD,EAAMkD,IAAaC,IAAiB,CAAC,MAAM;AAChD,UAAAA;AAIF,YAAIA,IAAiB,MAAM,GAAG;AAE5B,gBAAMC,IAAMpD,EAAM,UAAUiD,GAAeC,CAAU,GAC/CG,IAAQD,EAAI,MAAM,YAAY,EAAE,SAAS,GACzChB,IAAcc,IAAaD;AAEjC,cAAIA,MAAkB,KAAKI,MAAU,KACjCJ,MAAkB,KAAK,KAAK;AAC9B;AACF,sBAAK,SAASI,GACP,EAAE,OAAO,KAAK,UAAUD,CAAG,GAAG,aAAAhB,EAAW;AAAA,QAClD;AACA,QAAAc;AAAA,MACF;AACA,WAAK,qBAAqBlD,EAAM,SAASiD,IAAgB;AAAA,IAC3D;AACA,WAAO,EAAE,OAAO,IAAI,aAAa,EAAC;AAAA,EACpC;AAAA;AAAA,EAGA,aAAaK,GAAO;AAClB,SAAK,SAAS;AACd,UAAMC,IAAM,IAAI,MAAM,eAAeD,CAAK,aAAa,KAAK,KAAK,GAAG;AACpE,WAAAC,EAAI,UAAU;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,IAC1B,GACWA;AAAA,EACT;AAAA;AAAA,EAGA,iBAAiBvD,GAAO;AACtB,WAAOA,EAAM,WAAW,QAAQ,IAAIA,EAAM,OAAO,CAAC,IAAIA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAMA,SAASA,GAAOrV,GAAU;AAIxB,QAHA,KAAK,QAAQ,GAGT,OAAOqV,KAAU;AAGnB,UAFA,KAAK,SAAS,KAAK,iBAAiBA,CAAK,GAErC,OAAOrV,KAAa;AACtB,uBAAe,MAAM,KAAK,eAAeA,GAAU,EAAI,CAAC;AAAA,WAErD;AACH,cAAM6Y,IAAS,CAAA;AACf,YAAIC;AAEJ,YADA,KAAK,eAAe,CAAC97B,GAAG+7B,MAAM/7B,IAAK87B,IAAQ97B,IAAK67B,EAAO,KAAKE,CAAC,GAAG,EAAI,GAChED,EAAO,OAAMA;AACjB,eAAOD;AAAA,MACT;AAAA;AAIA,WAAK,iBAAiB,MAClB,OAAOxD,EAAM,eAAgB,cAC/BA,EAAM,YAAY,MAAM,GAE1BA,EAAM,GAAG,QAAQ,CAAA5lB,MAAQ;AACvB,QAAI,KAAK,WAAW,QAAQA,EAAK,WAAW,MAEtC,KAAK,mBACPA,IAAO6e,GAAAA,OAAO,OAAO,CAAC,KAAK,gBAAgB7e,CAAI,CAAC,GAChD,KAAK,iBAAiB,OAGpBA,EAAKA,EAAK,SAAS,CAAC,IAAI,MAC1B,KAAK,iBAAiBA,KAKlB,OAAO,KAAK,SAAW,MACzB,KAAK,SAAS,KAAK,iBAAiB,OAAOA,KAAS,WAAWA,IAAOA,EAAK,UAAU,IAErF,KAAK,UAAUA,GACjB,KAAK,eAAeuQ,GAAU,EAAK;AAAA,MAGzC,CAAC,GAEDqV,EAAM,GAAG,OAAO,MAAM;AACpB,QAAI,OAAO,KAAK,UAAW,YACzB,KAAK,eAAerV,GAAU,EAAI;AAAA,MACtC,CAAC,GACDqV,EAAM,GAAG,SAASrV,CAAQ;AAAA,EAE9B;AACF;ACzgBA,MAAM,OAAEgZ,IAAG,KAAEvC,GAAG,IAAKD;AAGrB,IAAIyC,IACAC,KAAoB;AAKxB,MAAMC,KAAc;AAAA,EACpB,WAAEC;AAAAA,EACF,WAAEC;AAAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAQA;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC;AACF;AAIO,MAAMC,GAAK;AAAA,EAChB,YAAY7c,GAAI;AACd,SAAK,KAAKA;AAAA,EACZ;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,OAAO8c,GAAO;AAGZ,WAAIA,aAAiBD,KACZ,KAAK,OAAOC,EAAM,KAEpB,CAAC,CAACA,KAAS,KAAK,aAAaA,EAAM,YACxB,KAAK,UAAaA,EAAM;AAAA,EAC5C;AAAA;AAAA;AAAA,EAIA,WAAW;AACT,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,SAAS;AACP,WAAO;AAAA,MACL,UAAU,KAAK;AAAA,MACf,OAAU,KAAK;AAAA,IACrB;AAAA,EACE;AACF;SAIO,cAAwBD,GAAK;AAAA;AAAA,EAElC,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AACF,QAGO,MAAME,WAAgBF,GAAK;AAAA;AAAA,EAEhC,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,CAAC;AAAA,EACtD;AAAA;AAAA,EAGA,IAAI,WAAW;AAEb,UAAM7c,IAAK,KAAK;AAChB,QAAIgd,IAAQhd,EAAG,YAAY,GAAG,IAAI;AAElC,WAAOgd,IAAQhd,EAAG,UAAUA,EAAGgd,GAAO,MAAM,MAAMhd,EAAG,OAAOgd,CAAK,EAAE,YAAW,IAAK;AAAA,EACrF;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,IAAIC,GAAU,KAAK,cAAc;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,iBAAiB;AAEnB,UAAMjd,IAAK,KAAK,IAAIkd,IAAQld,EAAG,YAAY,GAAG,IAAI,GAC5Cmd,IAAOD,IAAQld,EAAG,SAASA,EAAGkd,CAAK,IAAI;AAE7C,WAAOC,MAAS,MAAMnd,EAAG,OAAOkd,IAAQ,CAAC;AAAA;AAAA,MAEjCC,MAAS,MAAMzD,GAAI,SAASuC,GAAI;AAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,OAAOa,GAAO;AAGZ,WAAIA,aAAiBC,KACZ,KAAK,OAAOD,EAAM,KAEpB,CAAC,CAACA,KAAS,CAAC,CAACA,EAAM,YACR,KAAK,aAAaA,EAAM,YACxB,KAAK,UAAaA,EAAM,SACxB,KAAK,aAAaA,EAAM,YACxB,KAAK,SAAS,UAAUA,EAAM,SAAS;AAAA,EAC3D;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,MACL,UAAU,KAAK;AAAA,MACf,OAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,UAAU,EAAE,UAAU,aAAa,OAAO,KAAK,eAAc;AAAA,IACnE;AAAA,EACE;AACF,QAGO,cAAwBD,GAAK;AAAA,EAClC,YAAYz5B,GAAM;AAChB,UAAM,KAAKA,CAAI,EAAE;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK,GAAG,OAAO,CAAC;AAAA,EACzB;AACF,QAEO,cAAuBy5B,GAAK;AAAA,EACjC,YAAYz5B,GAAM;AAChB,UAAM,IAAIA,CAAI,EAAE;AAAA,EAClB;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK,GAAG,OAAO,CAAC;AAAA,EACzB;AACF,QAGO,cAA2By5B,GAAK;AAAA,EACrC,cAAc;AACZ,iBAAM,EAAE,GACDX,MAAgB;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAOY,GAAO;AAIZ,WAAQ,SAASA,KAAW,CAAC,CAACA,KAAU,KAAK,aAAaA,EAAM;AAAA,EAClE;AACF;AAGAZ,KAAe,IAAIkB,GAAY;AAOxB,SAASC,GAAWrd,GAAIsd,GAASC,GAAQ;AAI9C,MAHAD,IAAUA,KAAWlB,IAGjB,CAACpc;AACH,WAAOsd,EAAQ,aAAY;AAG7B,UAAQtd,EAAG,CAAC,GAAC;AAAA,IACb,KAAK;AACH,aAAOsd,EAAQ,SAAStd,EAAG,OAAO,CAAC,CAAC;AAAA,IACtC,KAAK;AACH,aAAOsd,EAAQ,UAAUtd,EAAG,OAAO,CAAC,CAAC;AAAA,IACvC,KAAK;AAEH,UAAIsd,MAAYlB;AACd,eAAO,IAAIW,GAAQ/c,CAAE;AAEvB,UAAIA,EAAGA,EAAG,SAAS,CAAC,MAAM;AACxB,eAAOsd,EAAQ,QAAQtd,EAAG,OAAO,GAAGA,EAAG,SAAS,CAAC,CAAC;AAEpD,YAAMwd,IAASxd,EAAG,YAAY,KAAKA,EAAG,SAAS,CAAC;AAChD,aAAOsd,EAAQ;AAAA,QAAQtd,EAAG,OAAO,GAAGwd,IAAS,CAAC;AAAA,QACtCxd,EAAGwd,IAAS,CAAC,MAAM,MAAMxd,EAAG,OAAOwd,IAAS,CAAC,IACpBF,EAAQ,UAAUtd,EAAG,OAAOwd,IAAS,CAAC,CAAC;AAAA,MAAC;AAAA,IAC3E,KAAK;AACH,MAAAxd,IAAK,KAAK,MAAMA,CAAE;AAClB;AAAA,IACF;AACE,UAAI,CAACud,KAAU,CAAC,MAAM,QAAQvd,CAAE;AAC9B,eAAOsd,EAAQ,UAAUtd,CAAE;AAAA,EAEjC;AACE,SAAOsd,EAAQ;AAAA,IACbD,GAAWrd,EAAG,CAAC,GAAGsd,GAAS,EAAI;AAAA,IAC/BD,GAAWrd,EAAG,CAAC,GAAGsd,GAAS,EAAI;AAAA,IAC/BD,GAAWrd,EAAG,CAAC,GAAGsd,GAAS,EAAI;AAAA,IAC/Btd,EAAG,CAAC,KAAKqd,GAAWrd,EAAG,CAAC,GAAGsd,GAAS,EAAI;AAAA,EAC5C;AACA;AAOO,SAASG,GAASC,GAAMH,GAAQ;AACrC,MAAI,OAAOG,KAAS;AAClB,WAAOA;AACT,MAAIA,aAAgBb,MAAQa,EAAK,aAAa;AAC5C,WAAOA,EAAK;AACd,MAAI,CAACA;AACH,WAAOxB,GAAa;AAGtB,UAAQwB,EAAK,UAAQ;AAAA,IACrB,KAAK;AAAgB,aAAOA,EAAK;AAAA,IACjC,KAAK;AAAgB,aAAO,KAAKA,EAAK,KAAK;AAAA,IAC3C,KAAK;AAAgB,aAAO,IAAIA,EAAK,KAAK;AAAA,IAC1C,KAAK;AAAgB,aAAO;AAAA,IAC5B,KAAK;AAAgB,aAAO,IAAIA,EAAK,KAAK,IACxCA,EAAK,WAAW,IAAIA,EAAK,QAAQ,KAC9BA,EAAK,YAAYA,EAAK,SAAS,UAAUhE,GAAI,SAAS,KAAKgE,EAAK,SAAS,KAAK,KAAK,EAAG;AAAA,IAC3F,KAAK;AACH,YAAM9H,IAAM;AAAA,QACV6H,GAASC,EAAK,SAAS,EAAI;AAAA,QAC3BD,GAASC,EAAK,WAAW,EAAI;AAAA,QAC7BD,GAASC,EAAK,QAAQ,EAAI;AAAA,MAChC;AACI,aAAIA,EAAK,SAASA,EAAK,MAAM,aAAa,kBACxC9H,EAAI,KAAK6H,GAASC,EAAK,OAAO,EAAI,CAAC,GAE9BH,IAAS3H,IAAM,KAAK,UAAUA,CAAG;AAAA,IAC1C;AAAS,YAAM,IAAI,MAAM,wBAAwB8H,EAAK,QAAQ,EAAE;AAAA,EAClE;AACA;SAIO,cAAmBb,GAAK;AAAA,EAC7B,YAAYc,GAASC,GAAWC,GAAQC,GAAO;AAC7C,UAAM,EAAE,GACR,KAAK,WAAaH,GAClB,KAAK,aAAaC,GAClB,KAAK,UAAaC,GAClB,KAAK,SAAaC,KAAS5B;AAAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,SAAS;AACP,WAAO;AAAA,MACL,UAAW,KAAK;AAAA,MAChB,SAAW,KAAK,SAAS,OAAM;AAAA,MAC/B,WAAW,KAAK,WAAW,OAAM;AAAA,MACjC,QAAW,KAAK,QAAQ,OAAM;AAAA,MAC9B,OAAW,KAAK,OAAO,OAAM;AAAA,IACnC;AAAA,EACE;AAAA;AAAA,EAGA,OAAOY,GAAO;AACZ,WAAO,CAAC,CAACA,KAAS,KAAK,SAAS,OAAOA,EAAM,OAAO,KAClC,KAAK,WAAW,OAAOA,EAAM,SAAS,KACtC,KAAK,QAAQ,OAAOA,EAAM,MAAM,KAChC,KAAK,OAAO,OAAOA,EAAM,KAAK;AAAA,EAClD;AACF;AAcA,SAAST,GAAU0B,GAAK;AACtB,SAAO,IAAId,GAAUc,CAAG;AAC1B;AAGA,SAASzB,GAAUl5B,GAAM;AACvB,SAAO,IAAI46B,GAAU56B,KAAQ,MAAM+4B,IAAmB,EAAE;AAC1D;AAGA,SAASK,GAAQ59B,GAAOq/B,GAAoB;AAE1C,MAAI,OAAOA,KAAuB;AAChC,WAAO,IAAIlB,GAAQ,IAAIn+B,CAAK,KAAKq/B,EAAmB,YAAW,CAAE,EAAE;AAGrE,MAAIC,IAAWD,IAAqBA,EAAmB,QAAQ;AAC/D,SAAIC,MAAa,OAEX,OAAOt/B,KAAU,YACnBs/B,IAAWxE,GAAI,UAER,OAAO96B,KAAU,aACpB,OAAO,SAASA,CAAK,IACvBs/B,IAAW,OAAO,UAAUt/B,CAAK,IAAI86B,GAAI,UAAUA,GAAI,UAEvDwE,IAAWxE,GAAI,QACV,OAAO,MAAM96B,CAAK,MACrBA,IAAQA,IAAQ,IAAI,QAAQ,YAM5Bs/B,MAAa,MAAMA,MAAaxE,GAAI,SAC1C,IAAIqD,GAAQ,IAAIn+B,CAAK,GAAG,IACxB,IAAIm+B,GAAQ,IAAIn+B,CAAK,MAAMs/B,CAAQ,EAAE;AACzC;AAGA,SAAS3B,GAASn5B,GAAM;AACtB,SAAO,IAAI+6B,GAAS/6B,CAAI;AAC1B;AAGA,SAASq5B,KAAe;AACtB,SAAOP;AACT;AAGA,SAASQ,GAAKiB,GAASC,GAAWC,GAAQC,GAAO;AAC/C,SAAO,IAAIM,GAAKT,GAASC,GAAWC,GAAQC,CAAK;AACnD;AAEO,SAASnB,GAASe,GAAM;AAC7B,MAAIA,aAAgBb;AAClB,WAAOa;AAGT,UAAQA,EAAK,UAAQ;AAAA,IACrB,KAAK;AAAgB,aAAOrB,GAAUqB,EAAK,KAAK;AAAA,IAChD,KAAK;AAAgB,aAAOpB,GAAUoB,EAAK,KAAK;AAAA,IAChD,KAAK;AAAgB,aAAOnB,GAASmB,EAAK,KAAK;AAAA,IAC/C,KAAK;AAAgB,aAAOxB;AAAAA,IAC5B,KAAK;AAAgB,aAAOM,GAAQkB,EAAK,OAAOA,EAAK,YAAYA,EAAK,QAAQ;AAAA,IAC9E,KAAK;AAAgB,aAAOd,GAASc,CAAI;AAAA,IACzC;AAAqB,YAAM,IAAI,MAAM,wBAAwBA,EAAK,QAAQ,EAAE;AAAA,EAC9E;AACA;AAEO,SAASd,GAASyB,GAAQ;AAC/B,MAAIA,aAAkBD;AACpB,WAAOC;AAET,MAAIA,EAAO,aAAa;AACtB,UAAM,IAAI,MAAM,wBAAwBA,EAAO,QAAQ,EAAE;AAE3D,SAAO3B,GAAKC,GAAS0B,EAAO,OAAO,GAAG1B,GAAS0B,EAAO,SAAS,GAAG1B,GAAS0B,EAAO,MAAM,GAAG1B,GAAS0B,EAAO,KAAK,CAAC;AACnH;AC1ZA,IAAIC,KAAkB;AAGP,MAAMC,GAAS;AAAA,EAC5B,YAAYv/B,GAAS;AACnB,SAAK,gBAAgB,CAAA,GACrB,KAAK,SAAS,MAGdA,IAAUA,KAAW,CAAA,GACrB,KAAK,SAASA,EAAQ,OAAO,GAC7BA,EAAQ,WAAWw/B,GAAgB,MAAMx/B,EAAQ,OAAO;AAGxD,UAAMy/B,IAAU,OAAOz/B,EAAQ,UAAW,WAC7BA,EAAQ,OAAO,MAAM,MAAM,EAAE,CAAC,EAAE,YAAW,IAAK,IACzD0/B,IAAW,SAAS,KAAKD,CAAM,GAAGE,IAAS,OAAO,KAAKF,CAAM,GAC7DG,IAAa,SAAS,KAAKH,CAAM,GAAGI,IAAW,OAAO,KAAKJ,CAAM,GACjEK,IAAO,KAAK,UAAU,KAAK,KAAKL,CAAM,GACtCM,IAAaH,KAAcC;AAC/B,KAAM,KAAK,uBAAuB,EAAEH,KAAYI,QAC9C,KAAK,6BAA6B,KAAK,iBAEzC,KAAK,iBAAiB,EAAEJ,KAAYC,KAAUC,KAAcE,IAE5D,KAAK,eAAe9/B,EAAQ,aAE5B,KAAK,mBAAmBy/B,MAAW,MAAM,WAAW,KAAKA,CAAM,GAE3DM,MACF,KAAK,sBAAsB,CAAAhB,MAAgB,OAC7C,KAAK,mBAAmB,OAAO/+B,EAAQ,mBAAoB,WAAW,KAC5CA,EAAQ,gBAAgB,QAAQ,WAAW,IAAI,GACzE,KAAK,SAASA,EAAQ,SAAS,IAAIg7B,GAAQ,EAAE,UAAU+E,GAAY,IAAID,GAAM,aAAa,KAAK,aAAY,CAAE,GAE7G,KAAK,uBAAuB,CAAC,CAAC9/B,EAAQ;AAAA,EACxC;AAAA;AAAA;AAAA,EAKA,OAAO,wBAAwB;AAC7B,IAAAs/B,KAAkB;AAAA,EACpB;AAAA;AAAA;AAAA,EAKA,SAASU,GAAS;AAChB,QAAI,CAACA;AACH,WAAK,QAAQ,IACb,KAAK,YAAY;AAAA,SAEd;AAEH,YAAMC,IAAcD,EAAQ,QAAQ,GAAG;AACvC,MAAIC,KAAe,MACjBD,IAAUA,EAAQ,OAAO,GAAGC,CAAW,IAEzC,KAAK,QAAQD,GACb,KAAK,YAAcA,EAAQ,QAAQ,GAAG,IAAI,IAAIA,IAC3BA,EAAQ,QAAQ,qBAAqB,EAAE,GAC1DA,IAAUA,EAAQ,MAAM,4CAA4C,GACpE,KAAK,YAAcA,EAAQ,CAAC,GAC5B,KAAK,cAAcA,EAAQ,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,aAAa5lB,GAAM0kB,GAAOH,GAASC,GAAWC,GAAQ;AACpD,UAAMqB,IAAS,KAAK;AACpB,SAAK,cAAc,KAAK;AAAA,MACtB,MAAA9lB;AAAA,MACA,SAAAukB;AAAA,MAAS,WAAAC;AAAA,MAAW,QAAAC;AAAA,MAAQ,OAAAC;AAAA,MAC5B,SAASoB,IAAS,KAAK,oBAAoB;AAAA,MAC3C,aAAaA,IAAS,KAAK,UAAU,IAAI;AAAA,MACzC,YAAYA,IAAS,KAAK,cAAc;AAAA,IAC9C,CAAK,GAEGA,MAEF,KAAK,oBAAoB,IAGzB,KAAK,UAAU,IAAK,KAAK,SAAS,GAAG,KAAK,OAAO,KAAK,MAAM,KAE5D,KAAK,cAAc,OAAO,OAAO,KAAK,WAAW;AAAA,EAErD;AAAA;AAAA;AAAA,EAIA,gBAAgB9lB,GAAMyhB,GAAO;AAE3B,UAAMsE,IAAU,KAAK,cAAc,IAAG;AACtC,QAAI,CAACA,KAAWA,EAAQ,SAAS/lB;AAC/B,aAAO,KAAK,OAAO,cAAcyhB,EAAM,IAAI,IAAIA,CAAK;AAGtD,SAAK,WAAasE,EAAQ,SAC1B,KAAK,aAAaA,EAAQ,WAC1B,KAAK,UAAaA,EAAQ,QAC1B,KAAK,SAAaA,EAAQ,OAGtB,KAAK,YACP,KAAK,oBAAoBA,EAAQ,SACjC,KAAK,UAAU,IAAIA,EAAQ,aAC3B,KAAK,cAAcA,EAAQ;AAAA,EAE/B;AAAA;AAAA,EAGA,kBAAkBtE,GAAO;AACvB,YAAQA,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AACH,eAAI,KAAK,WAAW,OACX,KAAK,OAAO,kBAAkBA,CAAK,KAC5C,OAAO,KAAK,UAAU,GACf,KAAK,UAAU,MAAM,MAAM,KAAK,SAAS;AAAA;AAAA,MAElD,KAAK;AACH,aAAK,eAAe;AAAA,MACtB,KAAK;AACH,eAAO,KAAK;AAAA;AAAA,MAEd,KAAK;AACH,aAAK,eAAe;AAAA,MACtB,KAAK;AACH,eAAO,KAAK;AAAA;AAAA,MAEd,KAAK;AACH,YAAI,KAAK;AACP,sBAAK,SAAS,IACd,KAAK,WAAW,MACT,KAAK;AAAA,MAEhB,KAAK;AACH,YAAI,KAAK;AACP,iBAAO,KAAK;AAAA;AAAA,MAEhB;AACE,eAAO,KAAK,aAAaA,CAAK;AAAA,IACpC;AAAA,EACE;AAAA;AAAA,EAGA,YAAYA,GAAOuE,GAAY;AAC7B,QAAIxgC;AACJ,YAAQi8B,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AAAA,MACL,KAAK;AACH,cAAMkD,IAAM,KAAK,YAAYlD,EAAM,KAAK;AACxC,YAAIkD,MAAQ;AACV,iBAAO,KAAK,OAAO,eAAelD,CAAK;AACzC,QAAAj8B,IAAQ,KAAK,SAAS,UAAUm/B,CAAG;AACnC;AAAA;AAAA,MAEF,KAAK;AAAA,MACL,KAAK;AACH,cAAMvD,IAAS,KAAK,UAAUK,EAAM,MAAM;AAC1C,YAAIL,MAAW;AACb,iBAAO,KAAK,OAAO,qBAAqBK,EAAM,MAAM,MAAMA,CAAK;AACjE,QAAAj8B,IAAQ,KAAK,SAAS,UAAU47B,IAASK,EAAM,KAAK;AACpD;AAAA;AAAA,MAEF,KAAK;AACH,QAAAj8B,IAAQ,KAAK,SAAS,UAAU,KAAK,UAAUi8B,EAAM,MAAM,IAAIA,EAAM,KAAK;AAC1E;AAAA;AAAA,MAEF,KAAK;AACH,QAAAj8B,IAAQ,KAAK,SAAS,SAASi8B,EAAM,MAAM,OAAO,CAAC,CAAC;AACpD;AAAA;AAAA,MAEF;AACE,eAAO,KAAK,OAAO,2BAA2BA,EAAM,IAAI,IAAIA,CAAK;AAAA,IACvE;AAEI,WAAI,CAACuE,KAAc,KAAK,WAAYxgC,EAAM,MAAM,KAAK,gBACnDA,IAAQ,KAAK,YAAYA,EAAM,EAAE,IAC5BA;AAAA,EACT;AAAA;AAAA,EAGA,aAAai8B,GAAO;AAElB,YADA,KAAK,aAAa,MACVA,EAAM,MAAI;AAAA,MAClB,KAAK;AAEH,oBAAK;AAAA,UAAa;AAAA,UAAS,KAAK;AAAA,UACd,KAAK,WAAW,KAAK,SAAS,UAAS;AAAA,UAAI;AAAA,UAAM;AAAA,QAAI,GAChE,KAAK;AAAA,MACd,KAAK;AAEH,oBAAK,aAAa,QAAQ,KAAK,QAAQ,KAAK,SAAS,MAAM,IAAI,GAC/D,KAAK,WAAW,MACT,KAAK;AAAA,MACd,KAAK;AAEH,eAAK,KAAK,WAEV,KAAK;AAAA,UAAa;AAAA,UAAW,KAAK;AAAA,UAChB,KAAK,SAAS,KAAK,SAAS,UAAS;AAAA,UAAI;AAAA,UAAM;AAAA,QAAI,GAC9D,KAAK,gBAHH,KAAK,OAAO,oBAAoBA,CAAK;AAAA,MAIhD,KAAK;AAEH,eAAO,KAAK,iBAAiBA,CAAK;AAAA,MACpC,KAAK;AACH,eAAK,KAAK,WAEV,KAAK,WAAW,MAChB,KAAK,aAAa,KAAK,YACvB,KAAK,cAAc,aACZ,KAAK,uBAJH,KAAK,OAAO,yBAAyBA,CAAK;AAAA,MAKrD,KAAK;AACH,eAAK,KAAK,WAEV,KAAK,WAAW,MAChB,KAAK,aAAa,KAAK,WACvB,KAAK,cAAc,YACZ,KAAK,uBAJH,KAAK,OAAO,wBAAwBA,CAAK;AAAA,MAKpD,KAAK;AACH,YAAI,CAAC,KAAK;AACR,iBAAO,KAAK,OAAO,sBAAsBA,CAAK;AAEhD,YAAIA,EAAM,OAAO,WAAW;AAC1B,sBAAK,gBAAgBA,EAAM,OACpB,KAAK;AAGZ,aAAK,WAAW,KAAK,SAAS,QAAQA,EAAM,OAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC;AAE1F;AAAA,MACF,KAAK;AACH,eAAK,KAAK,oBAEV,KAAK,aAAa,MAAM,KAAK,QAAQ,MAAM,MAAM,IAAI,GACrD,KAAK,SAAS,MACP,KAAK,gBAHH,KAAK,OAAO,8BAA8BA,CAAK;AAAA,MAI1D;AAEE,aAAK,KAAK,WAAW,KAAK,YAAYA,CAAK,OAAO;AAChD;AAEF,YAAI,KAAK;AACP,iBAAO,KAAK,eAAe,KAAK,0BAA0B;AAAA,IAClE;AAII,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,eAAeA,GAAO;AACpB,UAAMzhB,IAAOyhB,EAAM;AACnB,YAAQzhB,GAAI;AAAA,MACZ,KAAK;AACH,aAAK,oBAAoB;AAAA,MAC3B,KAAK;AACH,aAAK,aAAa,KAAK,cAAcyhB,EAAM,KAAK;AAChD;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAEH,eAAI,KAAK,eAAe,OACf,KAAK,OAAO,cAAczhB,CAAI,IAAIyhB,CAAK,KAChD,KAAK,WAAW,MACTzhB,MAAS,MAAM,KAAK,mBAAmByhB,CAAK,IAAI,KAAK,iBAAiBA,CAAK;AAAA,MACpF,KAAK;AAEH,eAAO,KAAK,eAAe,OAAO,KAAK,iBAChC,KAAK,OAAO,gCAAgCA,CAAK;AAAA,MAC1D,KAAK;AACH,YAAI,KAAK;AAEP,sBAAK;AAAA,YAAa;AAAA,YAAS,KAAK;AAAA,YAAQ,KAAK;AAAA,YAC3B,KAAK,WAAW,KAAK,SAAS,UAAS;AAAA,YAAI;AAAA,UAAI,GAC1D,KAAK;AAAA,MAEhB,KAAK;AACH,YAAI,CAAC,KAAK;AACR,iBAAO,KAAK,OAAO,sCAAsCA,CAAK;AAAA,MAClE;AACE,aAAK,KAAK,aAAa,KAAK,YAAYA,CAAK,OAAO;AAClD;AAAA,IACR;AAEI,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,YAAYA,GAAO;AACjB,YAAQA,EAAM,MAAI;AAAA,MAClB,KAAK;AAEH,YAAIA,EAAM,OAAO,WAAW;AAC1B,sBAAK,gBAAgBA,EAAM,OACpB,KAAK;AAIZ,aAAK,UAAU,KAAK,SAAS,QAAQA,EAAM,OAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC;AACzF;AAAA,MACF,KAAK;AAEH,oBAAK;AAAA,UAAa;AAAA,UAAS,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAU,KAAK;AAAA,UAC1C,KAAK,WAAW,KAAK,SAAS,UAAS;AAAA,QAAE,GACpD,KAAK;AAAA,MACd,KAAK;AAEH,oBAAK,aAAa,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,YAAY,KAAK,OAAO,GACnF,KAAK,WAAW,MACT,KAAK;AAAA,MACd,KAAK;AAEH,eAAK,KAAK,WAEV,KAAK;AAAA,UAAa;AAAA,UAAW,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAU,KAAK;AAAA,UAC5C,KAAK,SAAS,KAAK,SAAS,UAAS;AAAA,QAAE,GAClD,KAAK,gBAHH,KAAK,OAAO,oBAAoBA,CAAK;AAAA,MAIhD,KAAK;AACH,eAAK,KAAK,oBAEV,KAAK,aAAa,MAAM,KAAK,QAAQ,KAAK,UAAU,KAAK,YAAY,IAAI,GACzE,KAAK,SAAS,MACP,KAAK,gBAHH,KAAK,OAAO,8BAA8BA,CAAK;AAAA,MAI1D;AAEE,aAAK,KAAK,UAAU,KAAK,YAAYA,CAAK,OAAO;AAC/C;AAEF,YAAI,KAAK;AACP,iBAAO,KAAK,eAAe,KAAK,qBAAoB,CAAE;AAAA,IAC9D;AACI,WAAO,KAAK,qBAAoB;AAAA,EAClC;AAAA;AAAA,EAGA,2BAA2BA,GAAO;AAChC,WAAOA,EAAM,SAAS,MAAM,KAAK,WAAWA,CAAK,IAAI,KAAK,eAAeA,CAAK;AAAA,EAChF;AAAA;AAAA,EAGA,WAAWA,GAAO;AAChB,WAAIA,EAAM,SAAS,MACV,KAAK,OAAO,0BAA0BA,EAAM,IAAI,IAAIA,CAAK,KAElE,KAAK,SAAS,KAAK,UAAU,KAAK,WAAW,MACtC,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,mBAAmBA,GAAO;AACxB,WAAIA,EAAM,SAAS,OACjB,KAAK,WAAW,MACT,KAAK,mBAAmBA,CAAK,MAGpC,KAAK,aAAa,MACX,KAAK,eAAeA,CAAK;AAAA,EAEpC;AAAA;AAAA,EAGA,mBAAmBA,GAAO;AACxB,QAAIA,EAAM,SAAS;AACjB,aAAO,KAAK,0BAA0BA,CAAK;AAG7C,IAAI,KAAK,aAAa,QACpB,KAAK,MAAM,KAAK,UAAU,KAAK,YAAY,KAAK,SAAS,KAAK,MAAM;AAGtE,UAAMwE,IAAQ,KAAK,eAAe;AAGlC,WAFA,KAAK,gBAAgB,SAASxE,CAAK,GAE/B,KAAK,YAAY,OACZ,KAAK,qBAAoB,IAEzB,KAAK,eAAe,OACpB,KAAK,cAILwE,IAAQ,KAAK,6BAA6B,KAAK;AAAA,EAC1D;AAAA;AAAA,EAGA,yBAAyBxE,GAAO;AAC9B,YAAQA,EAAM,MAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAEH,oBAAK,WAAW,MACT,KAAK,iBAAiBA,CAAK;AAAA,MACpC;AACE,eAAO,KAAK,eAAeA,CAAK;AAAA,IACtC;AAAA,EACE;AAAA;AAAA,EAGA,cAAcA,GAAO;AACnB,QAAI1gB,IAAO,MACPzN,IAAO,MACPzH,IAAO,KAAK;AAChB,UAAMq6B,IAAe,KAAK,UACtBC,IAAQ,KAAK,eACbz6B,IAASy6B,EAAMA,EAAM,SAAS,CAAC;AAEnC,YAAQ1E,EAAM,MAAI;AAAA,MAClB,KAAK;AAEH,aAAK;AAAA,UAAa;AAAA,UAAS,KAAK;AAAA,UACdnuB,IAAO,KAAK,SAAS,UAAS;AAAA,UAAI,KAAK;AAAA,UACvC,KAAK,WAAWyN,IAAO,KAAK,SAAS,UAAS;AAAA,QAAE,GAClElV,IAAO,KAAK;AACZ;AAAA,MACF,KAAK;AAEH,aAAK;AAAA,UAAa;AAAA,UAAQ,KAAK;AAAA,UACbyH,IAAO,KAAK,SAAS,UAAS;AAAA,UAAI,KAAK;AAAA,UAAW,KAAK;AAAA,QAAO,GAChF,KAAK,WAAW;AAChB;AAAA,MACF,KAAK;AAQH,YANA,KAAK,gBAAgB,QAAQmuB,CAAK,GAG9B0E,EAAM,WAAW,KAAKA,EAAMA,EAAM,SAAS,CAAC,EAAE,SAAS,UACzD,KAAK,MAAM,KAAK,UAAU,KAAK,YAAY,KAAK,SAAS,KAAK,MAAM,GAElE,KAAK,eAAe;AAItB,cAFAt6B,IAAO,KAAK,gBAER,KAAK,aAAa,KAAK;AACzB,mBAAOA;AAAA,mBAITA,IAAO,KAAK,qBAAoB,GAE5B,KAAK,YAAY,KAAK;AACxB,iBAAOA;AAGX,QAAAyH,IAAO,KAAK;AACZ;AAAA,MACF,KAAK;AAEH,QAAImuB,EAAM,OAAO,WAAW,KAC1B,KAAK,gBAAgBA,EAAM,OAC3B51B,IAAO,KAAK,gCAIZkV,IAAO,KAAK,SAAS,QAAQ0gB,EAAM,OAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC,GAC/E51B,IAAO,KAAK,qBAAoB;AAElC;AAAA,MACF,KAAK;AAEH,eAAK,KAAK,WAEV,KAAK;AAAA,UAAa;AAAA,UAAW,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAU,KAAK;AAAA,UAC5C,KAAK,SAAS,KAAK,SAAS,UAAS;AAAA,QAAE,GAClD,KAAK,gBAHH,KAAK,OAAO,oBAAoB41B,CAAK;AAAA,MAIhD;AACE,aAAK1gB,IAAO,KAAK,YAAY0gB,CAAK,OAAO;AACvC;AAAA,IACR;AAmBI,QAhBInuB,MAAS,SACX,KAAK,WAAWA,IAAO,KAAK,SAAS,UAAS,IAG5C4yB,MAAiB,OAEfx6B,EAAO,cAAc,OACvBA,EAAO,UAAU4H,IAEjB5H,EAAO,SAAS4H,IAIlB,KAAK,MAAM4yB,GAAc,KAAK,UAAU5yB,GAAM,KAAK,MAAM,GAGvDyN,MAAS,MAAM;AAEjB,UAAI,KAAK,YAAY0gB,EAAM,SAAS,SAASA,EAAM,SAAS;AAE1D,oBAAK,aAAa,QAAQ,KAAK,QAAQnuB,GAAM,KAAK,WAAWyN,CAAI,GACjE,KAAK,WAAWA,GAAM,KAAK,aAAa,MAEjC,KAAK,eAAe,KAAK,aAAa;AAG/C,WAAK,MAAMzN,GAAM,KAAK,WAAWyN,GAAM,KAAK,MAAM;AAAA,IACpD;AACA,WAAOlV;AAAA,EACT;AAAA;AAAA,EAGA,oBAAoB41B,GAAO;AACzB,WAAO,KAAK,uBAAuBA,GAAO,EAAK;AAAA,EACjD;AAAA;AAAA,EAIA,4BAA4BA,GAAO;AACjC,WAAO,KAAK,uBAAuBA,GAAO,EAAI;AAAA,EAChD;AAAA;AAAA,EAGA,iBAAiBA,GAAO;AAEtB,QAAI2B,IAAU,KAAK,SAAS,QAAQ,KAAK,aAAa;AAEtD,YAAQ3B,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AAAA,MACL,KAAK;AACH,cAAMqD,IAAW,KAAK,YAAYrD,CAAK;AACvC,YAAIqD,MAAa,OAAW;AAC5B,QAAA1B,IAAU,KAAK,SAAS,QAAQ,KAAK,eAAe0B,CAAQ,GAC5DrD,IAAQ;AACR;AAAA;AAAA,MAEF,KAAK;AACH,QAAA2B,IAAU,KAAK,SAAS,QAAQ,KAAK,eAAe3B,EAAM,KAAK,GAC/DA,IAAQ;AACR;AAAA,IACN;AAEI,WAAO,EAAE,OAAAA,GAAO,SAAA2B,EAAO;AAAA,EACzB;AAAA;AAAA,EAGA,wBAAwB3B,GAAO;AAC7B,gBAAK,WAAW,KAAK,iBAAiBA,CAAK,EAAE,SACtC,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,uBAAuBA,GAAO2E,GAAU;AACtC,UAAMC,IAAY,KAAK,iBAAiB5E,CAAK;AAC7C,QAAK4E;AASL,aAPA,KAAK,UAAUA,EAAU,SAIrBD,KACF,KAAK,MAAM,KAAK,UAAU,KAAK,WAAW,KAAK,SAAS,KAAK,MAAM,GAEjEC,EAAU,UAAU,OACf,KAAK,qBAAoB,KAGhC,KAAK,gBAAgB,KAAK,qBAAoB,GACvC,KAAK,cAAcA,EAAU,KAAK;AAAA,EAE7C;AAAA;AAAA,EAGA,iBAAiB5E,GAAO;AACtB,WAAIA,EAAM,SAAS,MACV,KAAK,iBAAiBA,CAAK,KAGhC,KAAK,aAAa,QACpB,KAAK,MAAM,KAAK,UAAU,KAAK,YAAY,KAAK,SAAS,KAAK,MAAM,GAGtE,KAAK,gBAAgB,WAAWA,CAAK,GAG9B,KAAK,YAAY,OAAO,KAAK,iBAAiB,KAAK,qBAAoB;AAAA,EAChF;AAAA;AAAA,EAGA,iBAAiBA,GAAO;AACtB,QAAI51B,GAAM64B,IAAQ,KAAK;AACvB,UAAMH,IAAU,KAAK,UAAU+B,IAAmB,KAAK;AACvD,YAAQ7E,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AACH,YAAI,KAAK,WAAW;AAClB,iBAAO,KAAK,OAAO,4BAA4BA,CAAK;AACtD,YAAI,KAAK;AACP,iBAAO,KAAK,iBAAiBA,CAAK;AACpC,aAAK,SAAS;AAAA;AAAA,MAEhB,KAAK;AACH,aAAK,WAAW,MAChB51B,IAAO,KAAK,cAAc,SAAS,KAAK,eAAe,KAAK,mBACxDy6B,MAAkB,KAAK,oBAAoB;AAC/C;AAAA;AAAA,MAEF,KAAK;AACH,QAAAz6B,IAAO,KAAK;AACZ;AAAA;AAAA,MAEF,KAAK;AACH,QAAAA,IAAO,KAAK;AACZ;AAAA;AAAA,MAEF,KAAK;AACH,YAAI,CAAC,KAAK;AACR,iBAAO,KAAK,OAAO,8BAA8B41B,CAAK;AAExD,cAAM+C,IAAY,KAAK,YAAYC,IAAS,KAAK;AACjD,aAAK,WAAW,KAAK,SAAS,KAAKF,GAASC,GAAWC,GAAQ,KAAK,YAAY,GAChF54B,IAAO,KAAK;AACZ;AAAA;AAAA,MAEF,KAAK;AACH,YAAI,KAAK,SAAS,aAAa;AAC7B,iBAAO,KAAK,OAAO,sCAAsC41B,CAAK;AAChE,aAAK,WAAW,MAChB51B,IAAO,KAAK;AACZ;AAAA,MACF;AAEE,YAAI,KAAK,kBAAkB,KAAK,WAAW,SAAS64B,IAAQ,KAAK,YAAYjD,CAAK,OAAO,QAAW;AAClG,UAAA51B,IAAO,KAAK;AACZ;AAAA,QACF;AACA,eAAO,KAAK,OAAO,mCAAmC,KAAK,QAAQ,EAAE,KAAK41B,CAAK;AAAA,IACrF;AAEI,QAAI8C,MAAY,MAAM;AACpB,YAAMC,IAAY,KAAK,YAAYC,IAAS,KAAK;AACjD,MAAK6B,IAGH,KAAK,MAAM7B,GAASD,GAAWD,GAASG,CAAK,IAF7C,KAAK,MAAMH,GAASC,GAAWC,GAASC,CAAK;AAAA,IAGjD;AACA,WAAO74B;AAAA,EACT;AAAA;AAAA,EAGA,0BAA0B41B,GAAO;AAC/B,QAAI51B;AACJ,YAAQ41B,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AACH,QAAA51B,IAAO,KAAK;AACZ;AAAA;AAAA,MAEF,KAAK;AACH,QAAAA,IAAO,KAAK;AACZ;AAAA,MACF;AACE,eAAO,KAAK,OAAO,mCAAmC,KAAK,QAAQ,EAAE,KAAK41B,CAAK;AAAA,IACrF;AAEI,gBAAK,MAAM,KAAK,UAAU,KAAK,YAAY,KAAK,SAAS,KAAK,MAAM,GAC7D51B;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB41B,GAAO;AAC1B,WAAIA,EAAM,SAAS,MACV,KAAK,OAAO,+BAA+BA,CAAK,IAClD,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,YAAYA,GAAO;AACjB,WAAIA,EAAM,SAAS,WACV,KAAK,OAAO,qCAAqCA,CAAK,KAC/D,KAAK,UAAUA,EAAM,OACd,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,eAAeA,GAAO;AACpB,QAAIA,EAAM,SAAS;AACjB,aAAO,KAAK,OAAO,kCAAkC,KAAK,OAAO,MAAMA,CAAK;AAC9E,UAAM8E,IAAa,KAAK,YAAY9E,CAAK;AACzC,gBAAK,UAAU,KAAK,OAAO,IAAI8E,EAAW,OAC1C,KAAK,gBAAgB,KAAK,SAASA,CAAU,GACtC,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,aAAa9E,GAAO;AAClB,UAAMkD,IAAMlD,EAAM,SAAS,SAAS,KAAK,YAAYA,EAAM,KAAK;AAChE,WAAKkD,KAEL,KAAK,SAASA,CAAG,GACV,KAAK,+BAFH,KAAK,OAAO,iDAAiDlD,CAAK;AAAA,EAG7E;AAAA;AAAA,EAGA,qBAAqBA,GAAO;AAC1B,YAAQA,EAAM,MAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,KAAK,aAAaA,CAAK,GAAG,KAAK;AAAA,MACxC,KAAK;AACH,eAAO,KAAK;AAAA,MACd;AACE,eAAO,KAAK,OAAO,uBAAuBA,CAAK;AAAA,IACrD;AAAA,EACE;AAAA;AAAA,EAGA,0BAA0BA,GAAO;AAC/B,WAAIA,EAAM,SAAS,MACV,KAAK,OAAO,uBAAuBA,CAAK,KACjD,KAAK,WAAW,KAAK,SAAS,UAAS,GAChC,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,4BAA4BA,GAAO;AAEjC,WAAI,KAAK,gBACP,KAAK,eAAe,IACb,KAAK,kBAAkBA,CAAK,KAGjCA,EAAM,SAAS,MACV,KAAK,OAAO,0CAA0CA,CAAK,IAC7D,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,oBAAoBA,GAAO;AACzB,QAAI+E;AACJ,YAAQ/E,EAAM,MAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACH,aAAK+E,IAAS,KAAK,YAAY/E,GAAO,EAAI,OAAO;AAC/C;AAAA,MACJ;AACE,eAAO,KAAK,OAAO,cAAcA,EAAM,IAAI,IAAIA,CAAK;AAAA,IAC1D;AAEI,WAAK,KAAK,wBAKJ,KAAK,aAAa,OACpB,KAAK;AAAA,MAAM,KAAK,UAAU,KAAK;AAAA,MAAc,KAAK;AAAA,MACvC,KAAK,WAAW,KAAK,SAAS,UAAS;AAAA,MAAI,KAAK;AAAA,IAAiB,IAG5E,KAAK;AAAA,MAAM,KAAK;AAAA,MAAU,KAAK;AAAA,MACpB,KAAK,WAAW,KAAK,SAAS,UAAS;AAAA,MAAI,KAAK;AAAA,IAAiB,GAE9E,KAAK,MAAM,KAAK,UAAU,KAAK,WAAW+E,GAAQ,KAAK,iBAAiB,KAZxE,KAAK,YAAYA,EAAO,EAAE,IAAI,KAAK,SAAS,KAAK,WAAW,EAAE,KAAK,SAAS,UAAS,EAAG,KAAK,GAcxF,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,2BAA2B/E,GAAO;AAEhC,WAAIA,EAAM,SAAS,MACV,KAAK,uBAIR,KAAK,yBACP,KAAK,MAAM,KAAK,UAAU,KAAK,UAAU,KAAK,SAAS,KAAK,iBAAiB,GAC7E,KAAK,WAAW,OAGlB,KAAK,gBAAgB,KAAK,qBAAoB,GACvC,KAAK,cAAcA,CAAK;AAAA,EAEnC;AAAA;AAAA,EAGA,eAAegF,GAAW;AACxB,gBAAK,aAAaA,GACX,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,UAAUhF,GAAO;AACf,YAAQA,EAAM,MAAI;AAAA;AAAA,MAElB,KAAK;AAAK,eAAO,KAAK;AAAA;AAAA,MAEtB,KAAK;AAAK,eAAO,KAAK;AAAA;AAAA,MAEtB;AACE,cAAM0E,IAAQ,KAAK,eAAez6B,IAASy6B,EAAM,UAAUA,EAAMA,EAAM,SAAS,CAAC;AAEjF,YAAIz6B,KAAUA,EAAO,SAAS,QAAQ;AAEpC,gBAAMqV,IAAO,KAAK;AAElB,eAAK,gBAAgB,QAAQ0gB,CAAK,GAElC,KAAK,MAAM,KAAK,UAAU,KAAK,WAAW1gB,GAAM,KAAK,MAAM;AAAA,QAC7D;AACA,eAAO,KAAK,WAAW0gB,CAAK;AAAA,IAClC;AAAA,EACE;AAAA;AAAA,EAGA,iBAAiBA,GAAO;AACtB,QAAI8C,GAASC;AACb,UAAMC,IAAS,KAAK,SAAS,UAAS;AAEtC,SAAKD,IAAY,KAAK,YAAY/C,CAAK,OAAO;AAG9C,aAAI,KAAK,eAAe,QACtB8C,IAAU,KAAK,UAAU,KAAK,WAAWE,MAGzCF,IAAU,KAAK,SAAU,KAAK,UAAWE,IAE3C,KAAK,MAAMF,GAASC,GAAWC,GAAQ,KAAK,MAAM,GAC3C,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,kBAAkBhD,GAAO;AACvB,UAAM8C,IAAU,KAAK,SAAS,UAAS;AACvC,QAAIC,GAAWC;AAEf,SAAKD,IAAY,KAAK,YAAY/C,CAAK,OAAO;AAG9C,aAAI,KAAK,eAAe,QACtBgD,IAAS,KAAK,UAAU,KAAK,WAAWF,MAGxCE,IAAS,KAAK,SAAU,KAAK,UAAWF,IAE1C,KAAK,MAAMA,GAASC,GAAWC,GAAQ,KAAK,MAAM,GAC3C,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,wBAAwBhD,GAAO;AAC7B,WAAIA,EAAM,SAAS,OAEb,KAAK,kBAAkB,KAAK,WAAW,SAAS,KAAK,SAAS,KAAK,YAAYA,CAAK,OAAO,SACtF,KAAK,mBACP,KAAK,OAAO,0BAA0B,KAAK,QAAQ,EAAE,KAAKA,CAAK,IAEjE,KAAK,iBAAiBA,CAAK;AAAA,EACpC;AAAA;AAAA,EAGA,iBAAiBA,GAAO;AACtB,QAAIA,EAAM,SAAS;AACjB,aAAO,KAAK,OAAO,uBAAuBA,EAAM,IAAI,IAAIA,CAAK;AAE/D,UAAM6B,IAAO,KAAK,SAAS;AAAA,MAAK,KAAK;AAAA,MAAU,KAAK;AAAA,MAAY,KAAK;AAAA,MACnE,KAAK,UAAU,KAAK;AAAA,IAAY;AAGlC,WAFA,KAAK,gBAAgB,MAAM7B,CAAK,GAE5B,KAAK,aAAa,QACpB,KAAK,WAAW6B,GACT,KAAK,mBAIZ,KAAK,UAAUA,GACR,KAAK,qBAAoB;AAAA,EAEpC;AAAA;AAAA,EAGA,uBAAuB;AACrB,UAAMoD,IAAe,KAAK;AAC1B,QAAI,CAACA,EAAa;AAChB,aAAO,KAAK;AAEd,YAAQA,EAAaA,EAAa,SAAS,CAAC,EAAE,MAAI;AAAA,MAClD,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,IAClB;AAAA,EACE;AAAA;AAAA,EAGA,MAAMnC,GAASC,GAAWC,GAAQC,GAAO;AACvC,SAAK,UAAU,MAAM,KAAK,SAAS,KAAKH,GAASC,GAAWC,GAAQC,KAAS,KAAK,YAAY,CAAC;AAAA,EACjG;AAAA;AAAA,EAGA,OAAOiC,GAASlF,GAAO;AACrB,UAAMgB,IAAM,IAAI,MAAM,GAAGkE,CAAO,YAAYlF,EAAM,IAAI,GAAG;AACzD,IAAAgB,EAAI,UAAU;AAAA,MACZ,OAAOhB;AAAA,MACP,MAAMA,EAAM;AAAA,MACZ,eAAe,KAAK,OAAO;AAAA,IACjC,GACI,KAAK,UAAUgB,CAAG,GAClB,KAAK,YAAYmE;AAAA,EACnB;AAAA;AAAA,EAGA,YAAYjC,GAAK;AACf,WAAO,uBAAuB,KAAKA,CAAG,IAAIA,IAAM,KAAK,oBAAoBA,CAAG;AAAA,EAC9E;AAAA;AAAA;AAAA,EAIA,oBAAoBA,GAAK;AAEvB,QAAI,CAACA,EAAI;AACP,aAAO,KAAK;AAEd,YAAQA,EAAI,CAAC,GAAC;AAAA;AAAA,MAEd,KAAK;AAAK,eAAO,KAAK,QAAQA;AAAA;AAAA,MAE9B,KAAK;AAAK,eAAO,KAAK,MAAM,QAAQ,cAAcA,CAAG;AAAA;AAAA,MAErD,KAAK;AAEH,gBAAQA,EAAI,CAAC,MAAM,MAAM,KAAK,cAAc,KAAK,aAAa,KAAK,mBAAmBA,CAAG;AAAA;AAAA,MAE3F;AAEE,eAAQ,WAAW,KAAKA,CAAG,IAAK,OAAO,KAAK,mBAAmB,KAAK,YAAYA,CAAG;AAAA,IACzF;AAAA,EACE;AAAA;AAAA,EAGA,mBAAmBA,GAAK;AAEtB,QAAI,CAAC,uBAAuB,KAAKA,CAAG;AAClC,aAAOA;AAGT,UAAMlM,IAASkM,EAAI;AACnB,QAAI7nB,IAAS,IAAI,IAAI,IAAI+pB,IAAY,IAAIC,IAAe,GAAGj7B,IAAO;AAElE,WAAO,IAAI4sB,KAAQ;AACjB,cAAQ5sB,GAAI;AAAA;AAAA,QAEZ,KAAK;AACH,cAAIg7B,IAAY,KAEVlC,EAAI,EAAE,CAAC,MAAM,OAAOA,EAAI,EAAE,CAAC,MAAM;AAEnC,oBAAQkC,IAAY,IAAI,KAAKpO,KAAUkM,EAAIkC,CAAS,MAAM;AACxD,kBAAIA;AAEV;AAAA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACH,cAAIpO;AACJ;AAAA;AAAA,QAEF,KAAK;AACH,cAAIkM,EAAI,IAAI,CAAC,MAAM;AAEjB,oBADA94B,IAAO84B,EAAI,EAAE,IAAI,CAAC,GACV94B,GAAI;AAAA;AAAA,cAEZ,KAAK;AACH,gBAAAiR,KAAU6nB,EAAI,UAAUmC,GAAc,IAAI,CAAC,GAC3CA,IAAe,IAAI;AACnB;AAAA;AAAA,cAEF,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AACH,uBAAOhqB,IAAS6nB,EAAI,UAAUmC,GAAc,CAAC,IAAInC,EAAI,OAAO,IAAI,CAAC;AAAA;AAAA,cAEnE,KAAK;AAEH,oBADA94B,IAAO84B,EAAI,EAAE,IAAI,CAAC,GACd94B,MAAS,UAAaA,MAAS,OAAOA,MAAS,OAAOA,MAAS,KAAK;AAMtE,sBALAiR,KAAU6nB,EAAI,UAAUmC,GAAc,IAAI,CAAC,IAEtCA,IAAehqB,EAAO,YAAY,GAAG,MAAM+pB,MAC9C/pB,IAASA,EAAO,OAAO,GAAGgqB,CAAY,IAEpCj7B,MAAS;AACX,2BAAO,GAAGiR,CAAM,IAAI6nB,EAAI,OAAO,IAAI,CAAC,CAAC;AACvC,kBAAAmC,IAAe,IAAI;AAAA,gBACrB;AAAA,YACZ;AAAA,MAEA;AACM,MAAAj7B,IAAO84B,EAAI,EAAE,CAAC;AAAA,IAChB;AACA,WAAO7nB,IAAS6nB,EAAI,UAAUmC,CAAY;AAAA,EAC5C;AAAA;AAAA;AAAA,EAKA,MAAM5H,GAAO6H,GAAcC,GAAgB;AAGzC,QAAIC,GAAQC,GAAUC;AAsBtB,QArBIJ,MAAiBA,EAAa,UAAUA,EAAa,YAAYA,EAAa,cAChFE,IAASF,EAAa,QACtBG,IAAWH,EAAa,UACxBI,IAAYJ,EAAa,cAGzBE,IAASF,GACTG,IAAWF,IAIb,KAAK,gBAAgB,KAAK,mBAC1B,KAAK,eAAe,IACpB,KAAK,YAAY,uBAAO,OAAO,IAAI,GACnC,KAAK,UAAU,IAAI,KAAK,mBAAmB,KAAK,iBAAiB,OAAO,CAAC,IAC9B,IAAI9B,IAAiB,KAChE,KAAK,kBAAkBgC,KAAYN,IACnC,KAAK,oBAAoB,IACzB,KAAK,cAAc,uBAAO,OAAO,IAAI,GAGjC,CAACK,GAAQ;AACX,YAAMG,IAAQ,CAAA;AACd,UAAIzE;AAKJ,UAJA,KAAK,YAAY,CAAC97B,GAAG+7B,MAAM;AAAE,QAAA/7B,IAAK87B,IAAQ97B,IAAK+7B,KAAKwE,EAAM,KAAKxE,CAAC;AAAA,MAAG,GACnE,KAAK,OAAO,SAAS1D,CAAK,EAAE,MAAM,CAAAuC,MACzB,KAAK,gBAAgB,KAAK,cAAcA,CAAK,CACrD,GACGkB,EAAO,OAAMA;AACjB,aAAOyE;AAAA,IACT;AAEA,QAAIC,IAAmB,CAAC1E,GAAOlB,MAAU;AACvC,MAAIkB,MAAU,QACZ,KAAK,UAAUA,CAAK,GAAG,KAAK,YAAYiE,MACjC,KAAK,kBACZ,KAAK,gBAAgB,KAAK,cAAcnF,CAAK;AAAA,IACjD;AAGA,IAAI0F,MAEF,KAAK,OAAO,WAAW,IAEvBE,IAAmB,CAAC1E,GAAOlB,MAAU;AACnC,MAAIkB,MAAU,QACZ,KAAK,UAAUA,CAAK,GAAG,KAAK,YAAYiE,MACjC,KAAK,kBACRnF,EAAM,SAAS,YACjB0F,EAAU1F,EAAM,KAAK,IAErB,KAAK,gBAAgB,KAAK,cAAcA,CAAK;AAAA,IAEnD,IAIF,KAAK,YAAYwF,GACjB,KAAK,OAAO,SAAS/H,GAAOmI,CAAgB;AAAA,EAC9C;AACF;AAGA,SAAST,KAAO;AAAC;AAGjB,SAASxB,GAAgBkC,GAAQpD,GAAS;AACxC,EAAAoD,EAAO,WAAWpD,GAElBoD,EAAO,eAAepD,EAAQ,aAAY,GAG1CoD,EAAO,YAAapD,EAAQ,UAAU7D,GAAW,IAAI,KAAK,GAC1DiH,EAAO,WAAapD,EAAQ,UAAU7D,GAAW,IAAI,IAAI,GACzDiH,EAAO,UAAapD,EAAQ,UAAU7D,GAAW,IAAI,GAAG,GACxDiH,EAAO,YAAapD,EAAQ,UAAU7D,GAAW,EAAE,MAAM,GACzDiH,EAAO,aAAapD,EAAQ,UAAU7D,GAAW,EAAE,OAAO,GAC1DiH,EAAO,gBAAgB;AAAA,IACrB,GAAKpD,EAAQ,UAAU7D,GAAW,IAAI,IAAI;AAAA,IAC1C,KAAK6D,EAAQ,UAAU7D,GAAW,IAAI,MAAM;AAAA,IAC5C,KAAK6D,EAAQ,UAAU7D,GAAW,IAAI,OAAO;AAAA,IAC7C,KAAK6D,EAAQ,UAAU7D,GAAW,IAAI,WAAW;AAAA,EACrD,GACEiH,EAAO,oBAAoBpD,EAAQ,UAAU,oBAAoB;AACnE;AACAkB,GAAgBD,GAAS,WAAWoC,EAAa;AC3kC1C,SAASC,GAAYlD,GAAM;AAChC,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASmD,GAAYnD,GAAM;AAChC,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASoD,GAAUpD,GAAM;AAC9B,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASqD,GAAWrD,GAAM;AAC/B,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASsD,GAAOtD,GAAM;AAC3B,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASuD,GAAevD,GAAM;AACnC,SAAO,CAAC,CAACA,KAAQA,EAAK,aAAa;AACrC;AAGO,SAASwD,GAAexE,GAAM;AACnC,SAAOuE,GAAevE,EAAK,KAAK;AAClC;AAGO,SAASlC,GAAOuD,GAAKT,GAAS;AACnC,SAAO6D,GAAS,EAAE,IAAIpD,EAAI,SAASA,EAAG,GAAIT,CAAO,EAAE,EAAE;AACvD;AAGO,SAAS6D,GAASC,GAAiB9D,GAAS;AAEjD,QAAM6D,IAAW,uBAAO,OAAO,IAAI;AACnC,aAAW3G,KAAU4G;AACnB,IAAAC,EAAc7G,GAAQ4G,EAAgB5G,CAAM,CAAC;AAE/C,EAAA8C,IAAUA,KAAWqD;AAIrB,WAASU,EAAc7G,GAAQuD,GAAK;AAElC,QAAI,OAAOA,KAAQ,UAAU;AAE3B,YAAMuD,IAAQ,uBAAO,OAAO,IAAI;AAChC,MAAAH,EAAS3G,CAAM,IAAI,CAAA+G,MACVD,EAAMC,CAAK,MAAMD,EAAMC,CAAK,IAAIjE,EAAQ,UAAUS,IAAMwD,CAAK;AAAA,IAExE,WACS,EAAE/G,KAAU2G;AACnB,YAAM,IAAI,MAAM,mBAAmB3G,CAAM,EAAE;AAE7C,WAAO2G,EAAS3G,CAAM;AAAA,EACxB;AACA,SAAO6G;AACT;;;;;;;;;;;;;ACtEO,SAASG,GAAYC,GAAO;AACjC,SAAOA,EAAM,QAAQ,2BAA2B,MAAM;AACxD;ACGA,MAAMC,KAAmB,wEACnBC,KAAmB,kFACnBC,KAAU,MACVC,KAAS,OACTC,KAAQ,KACRC,KAAW;AAEF,MAAMC,GAAQ;AAAA,EAC3B,YAAYC,GAAM;AAChB,SAAK,OAAOA,GACZ,KAAK,cAAc,GACnB,KAAK,eAAe,MACpB,KAAK,oBAAoB,IAAI,MAAMA,EAAK,SAAS,CAAC;AAAA,EACpD;AAAA,EAEA,OAAO,SAASA,GAAM;AACpB,WAAO,CAACP,GAAiB,KAAKO,CAAI;AAAA,EACpC;AAAA,EAEA,kBAAkB;AAChB,QAAI,KAAK;AACP,aAAO,KAAK;AACd,QAAI,CAACD,GAAQ,SAAS,KAAK,IAAI;AAC7B,aAAO,KAAK,eAAe;AAG7B,UAAME,IAAS,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,GACvCC,IAAY,CAAC,KAAKX,GAAYU,CAAM,CAAC,GACrCE,IAAY,CAAA,GAGZC,IAAW,IAAIC,IAAY;AACjC,QAAIC,GAASC,IAAQ,GAAGC,IAAW,GAAG7a,IAAO0a,EAAU,YAAYJ,EAAO;AAC1E,WAAO,CAACM,KAAS,CAACC,MAAaF,IAAUD,EAAU,KAAK,KAAK,IAAI;AAE/D,MAAIC,EAAQ,CAAC,MAAMR,KACjBU,IAAWH,EAAU,YAAY,KAGjCH,EAAU,KAAKX,GAAYe,EAAQ,CAAC,CAAC,GAAG,KAAK,GAC7CH,EAAU,KAAK,IAAI,GAGfG,EAAQ,CAAC,MAAMT,KACjBO,EAAS,KAAKza,IAAO0a,EAAU,SAAS,KAExCE,IAAQ5a,IAAO0a,EAAU,WACzBG,IAAW,KAAK,KAAK,QAAQV,IAAUS,CAAK,GAC5C,KAAK,kBAAkBA,CAAK,IAAIV;AAMtC,aAASnxB,IAAI,GAAGA,IAAI0xB,EAAS,QAAQ1xB;AACnC,WAAK,kBAAkB0xB,EAAS1xB,CAAC,CAAC,IAAIkxB,GAAO,OAAOQ,EAAS,SAAS1xB,IAAI,CAAC;AAC7E,gBAAK,kBAAkB0xB,EAASA,EAAS,SAAS,CAAC,CAAC,IAAIT,IAGxD,KAAK,cAAca,IAAW,IAAIA,IAAW,KAAK,KAAK,QACvDN,EAAU;AAAA,MACRX,GAAY,KAAK,KAAK,UAAU5Z,GAAM,KAAK,WAAW,CAAC;AAAA,MACvD4a,IAAQ,YAAY;AAAA,IAC1B,GACW,KAAK,eAAe,IAAI,OAAO,CAAC,GAAGL,GAAW,GAAGC,CAAS,EAAE,KAAK,EAAE,CAAC;AAAA,EAC7E;AAAA,EAEA,WAAWrE,GAAK;AAEd,UAAMtD,IAAQ,KAAK,gBAAe,EAAG,KAAKsD,CAAG;AAC7C,QAAI,CAACtD;AACH,aAAOsD;AAGT,UAAMlM,IAAS4I,EAAM,CAAC,EAAE;AACxB,QAAI5I,MAAW,KAAK,eAAeA,MAAWkM,EAAI;AAChD,aAAO;AAGT,UAAM2E,IAAa,KAAK,kBAAkB7Q,CAAM;AAChD,QAAI6Q,GAAY;AACd,YAAMC,IAAS5E,EAAI,UAAUlM,CAAM;AAEnC,aAAI6Q,MAAeZ,MAAS,CAACH,GAAiB,KAAKgB,CAAM,IAChD5E,IAEL2E,MAAed,MAAW,SAAS,KAAKe,CAAM,IACzCA,IAEFD,IAAaC;AAAA,IACtB;AAGA,WAAO5E,EAAI,UAAUlM,IAAS,CAAC;AAAA,EACjC;AACF;AC7FA,MAAMqK,KAAeyE,GAAc,aAAY,GAEzC,EAAE,KAAA1E,IAAK,KAAAvC,GAAG,IAAKD,IAGfmJ,KAAY,6CACdC,KAAY,gEACZC,KAAoB;AAAA,EAClB,MAAM;AAAA,EAAQ,KAAK;AAAA,EAAO,KAAM;AAAA,EAChC,MAAM;AAAA,EAAO,MAAM;AAAA,EAAO,MAAM;AAAA,EAAO,MAAM;AACnD;AAGA,MAAMC,WAAuBlG,GAAK;AAAA;AAAA;AAAA,EAGhC,OAAOC,GAAO;AACZ,WAAOA,MAAU;AAAA,EACnB;AACF;AAGe,MAAMkG,GAAS;AAAA,EAC5B,YAAYC,GAAcjkC,GAAS;AAWjC,QATA,KAAK,eAAe,OAGhBikC,KAAgB,OAAOA,EAAa,SAAU,eAChDjkC,IAAUikC,GAAcA,IAAe,OACzCjkC,IAAUA,KAAW,CAAA,GACrB,KAAK,SAASA,EAAQ,OAGjBikC;AASH,WAAK,gBAAgBA,GACrB,KAAK,aAAajkC,EAAQ,QAAQ,SAAY,KAAO,CAAC,CAACA,EAAQ;AAAA,SAV9C;AACjB,UAAIgxB,IAAS;AACb,WAAK,gBAAgB;AAAA,QACnB,MAAMkT,GAAOtQ,GAAUuQ,GAAM;AAAE,UAAAnT,KAAUkT,GAAOC,KAAQA,EAAI;AAAA,QAAI;AAAA,QAChE,KAAK,CAAAA,MAAQ;AAAE,UAAAA,KAAQA,EAAK,MAAMnT,CAAM;AAAA,QAAG;AAAA,MACnD,GACM,KAAK,aAAa;AAAA,IACpB;AAOA,SAAK,WAAW,MACV,eAAgB,KAAKhxB,EAAQ,MAAM,KAUvC,KAAK,YAAY,IACjB,KAAK,aAAa,KAAK,mBAVvB,KAAK,YAAY,IACjB,KAAK,SAASk9B,IACd,KAAK,cAAc,uBAAO,OAAO,IAAI,GACrCl9B,EAAQ,YAAY,KAAK,YAAYA,EAAQ,QAAQ,GACjDA,EAAQ,YACV,KAAK,WAAW,IAAIgjC,GAAQhjC,EAAQ,OAAO;AAAA,EAOjD;AAAA;AAAA;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAOk9B,GAAa,OAAO,KAAK,MAAM;AAAA,EACxC;AAAA;AAAA,EAGA,OAAOpJ,GAAQ7P,GAAU;AACvB,SAAK,cAAc,MAAM6P,GAAQ,QAAQ7P,CAAQ;AAAA,EACnD;AAAA;AAAA,EAGA,WAAW0a,GAASC,GAAWC,GAAQC,GAAOqF,GAAM;AAClD,QAAI;AAEF,MAAKrF,EAAM,OAAO,KAAK,MAAM,MAE3B,KAAK,QAAQ,KAAK,aAAa,OAAO,KAAM,KAAK,kBAAkB;AAAA,IAAQ;AAAA;AAAA,MAC9D5B,GAAa,OAAO4B,CAAK,IAAI,KAAK,GAAG,KAAK,kBAAkBA,CAAK,CAAC;AAAA,EAAO,GACtF,KAAK,SAASA,GACd,KAAK,WAAW,OAGdH,EAAQ,OAAO,KAAK,QAAQ,IAE1BC,EAAU,OAAO,KAAK,UAAU,IAClC,KAAK,OAAO,KAAK,KAAK,cAAcC,CAAM,CAAC,IAAIsF,CAAI,IAGnD,KAAK,OAAO;AAAA,MACA,KAAK,iBAAiB,KAAK,aAAavF,CAAS,CAAC,IAClD,KAAK,cAAcC,CAAM,CAAC,IAAIsF,CAAI,IAIhD,KAAK,OAAO,IAAI,KAAK,aAAa,OAAO,KAAK;AAAA,KAClC,KAAK,eAAe,KAAK,WAAWxF,CAAO,CAAC,IAC5C,KAAK,iBAAiB,KAAK,aAAaC,CAAS,CAAC,IAClD,KAAK,cAAcC,CAAM,CAAC,IAAIsF,CAAI;AAAA,IAClD,SACOpH,GAAO;AAAE,MAAAoH,KAAQA,EAAKpH,CAAK;AAAA,IAAG;AAAA,EACvC;AAAA;AAAA,EAGA,eAAe4B,GAASC,GAAWC,GAAQC,GAAOqF,GAAM;AAEtD,WAAO,KAAK,cACZ,KAAK,OAAO,KAAK,aAAaxF,GAASC,GAAWC,GAAQC,CAAK,GAAGqF,CAAI;AAAA,EACxE;AAAA;AAAA,EAGA,aAAaxF,GAASC,GAAWC,GAAQC,GAAO;AAC9C,WAAQ,GAAG,KAAK,eAAeH,CAAO,CAAC,IAC/B,KAAK,kBAAkBC,CAAS,CAAC,IACjC,KAAK,cAAcC,CAAM,CACrC,GAAeC,KAASA,EAAM,QAAQ,IAAI,KAAK,kBAAkBA,CAAK,CAAC;AAAA,IAAS;AAAA,CAAM;AAAA,EACpF;AAAA;AAAA,EAGA,cAAc0C,GAAO;AACnB,QAAI4C,IAAc;AAClB,eAAW1G,KAAQ8D;AACjB,MAAA4C,KAAe,KAAK,aAAa1G,EAAK,SAASA,EAAK,WAAWA,EAAK,QAAQA,EAAK,KAAK;AACxF,WAAO0G;AAAA,EACT;AAAA;AAAA,EAGA,eAAexD,GAAQ;AACrB,WAAOA,EAAO,aAAa,SACzB,KAAK,YAAYA,CAAM,IAAI,KAAK,kBAAkBA,CAAM;AAAA,EAC5D;AAAA;AAAA,EAGA,kBAAkBA,GAAQ;AAExB,QAAIA,EAAO,aAAa;AAEtB,aAAI,KAAK,UAAWA,EAAO,SAAS,KAAK,WACvCA,IAAS,KAAK,KAAK,KAAK,OAAOA,EAAO,KAAK,CAAC,IACvC,QAAQA,IAASA,EAAO,KAAK,KAAKA,EAAO,KAAK;AAEvD,QAAI7B,IAAM6B,EAAO;AAEjB,IAAI,KAAK,aACP7B,IAAM,KAAK,SAAS,WAAWA,CAAG,IAGhC6E,GAAO,KAAK7E,CAAG,MACjBA,IAAMA,EAAI,QAAQ8E,IAAWQ,EAAiB;AAEhD,UAAMC,IAAc,KAAK,aAAa,KAAKvF,CAAG;AAC9C,WAAQuF,IACCA,EAAY,CAAC,IAAU,KAAK,YAAYA,EAAY,CAAC,CAAC,IAAIA,EAAY,CAAC,IAAtDvF,IADJ,IAAIA,CAAG;AAAA,EAE/B;AAAA;AAAA,EAGA,eAAevB,GAAS;AAEtB,QAAI59B,IAAQ49B,EAAQ;AAKpB,QAJIoG,GAAO,KAAKhkC,CAAK,MACnBA,IAAQA,EAAM,QAAQikC,IAAWQ,EAAiB,IAGhD7G,EAAQ;AACV,aAAO,IAAI59B,CAAK,KAAK49B,EAAQ,QAAQ;AAGvC,QAAI,KAAK;AAEP,UAAIA,EAAQ,SAAS,UAAU9C,GAAI;AACjC,eAAO,IAAI96B,CAAK;AAAA;AAIlB,cAAQ49B,EAAQ,SAAS,OAAK;AAAA,QAC9B,KAAK9C,GAAI;AACP,iBAAO,IAAI96B,CAAK;AAAA,QAClB,KAAK86B,GAAI;AACP,cAAI96B,MAAU,UAAUA,MAAU;AAChC,mBAAOA;AACT;AAAA,QACF,KAAK86B,GAAI;AACP,cAAI,aAAa,KAAK96B,CAAK;AACzB,mBAAOA;AACT;AAAA,QACF,KAAK86B,GAAI;AACP,cAAI,kBAAkB,KAAK96B,CAAK;AAC9B,mBAAOA;AACT;AAAA,QACF,KAAK86B,GAAI;AACP,cAAI,yCAAyC,KAAK96B,CAAK;AACrD,mBAAOA;AACT;AAAA,MACR;AAII,WAAO,IAAIA,CAAK,MAAM,KAAK,kBAAkB49B,EAAQ,QAAQ,CAAC;AAAA,EAChE;AAAA;AAAA,EAGA,iBAAiBoB,GAAW;AAC1B,WAAOA,EAAU,UAAU3B,GAAI,OAAO,MAAM,KAAK,kBAAkB2B,CAAS;AAAA,EAC9E;AAAA;AAAA,EAGA,cAAcC,GAAQ;AACpB,YAAQA,EAAO,UAAQ;AAAA,MACvB,KAAK;AACH,eAAO,KAAK,YAAYA,CAAM;AAAA,MAChC,KAAK;AACH,eAAO,KAAK,eAAeA,CAAM;AAAA,MACnC;AACE,eAAO,KAAK,kBAAkBA,CAAM;AAAA,IAC1C;AAAA,EACE;AAAA;AAAA,EAGA,YAAY,EAAE,SAAAF,GAAS,WAAAC,GAAW,QAAAC,GAAQ,OAAAC,EAAK,GAAI;AACjD,WAAO,KACL,KAAK,eAAeH,CAAO,CAAC,IAC5B,KAAK,iBAAiBC,CAAS,CAAC,IAChC,KAAK,cAAcC,CAAM,CAAC,GAC1BoD,GAAenD,CAAK,IAAI,KAAK,IAAI,KAAK,kBAAkBA,CAAK,CAAC,EAAE;AAAA,EACpE;AAAA;AAAA,EAGA,gBAAgB;AACd,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAAA;AAAA,EAGA,QAAQH,GAASC,GAAWC,GAAQC,GAAOqF,GAAM;AAE/C,IAAItF,MAAW,SACb,KAAK,WAAWF,EAAQ,SAASA,EAAQ,WAAWA,EAAQ,QAAQA,EAAQ,OAAOC,CAAS,IAErF,OAAOE,KAAU,aACxB,KAAK,WAAWH,GAASC,GAAWC,GAAQ3B,IAAc4B,CAAK,IAG/D,KAAK,WAAWH,GAASC,GAAWC,GAAQC,KAAS5B,IAAciH,CAAI;AAAA,EAC3E;AAAA;AAAA,EAGA,SAAS3C,GAAO;AACd,aAAS7vB,IAAI,GAAGA,IAAI6vB,EAAM,QAAQ7vB;AAChC,WAAK,QAAQ6vB,EAAM7vB,CAAC,CAAC;AAAA,EACzB;AAAA;AAAA,EAGA,UAAU6pB,GAAQuD,GAAKoF,GAAM;AAC3B,UAAMhC,IAAW,CAAA;AACjB,IAAAA,EAAS3G,CAAM,IAAIuD,GACnB,KAAK,YAAYoD,GAAUgC,CAAI;AAAA,EACjC;AAAA;AAAA,EAGA,YAAYhC,GAAUgC,GAAM;AAE1B,QAAI,CAAC,KAAK;AACR,aAAOA,KAAQA,EAAI;AAGrB,QAAII,IAAc;AAClB,aAAS/I,KAAU2G,GAAU;AAC3B,UAAIpD,IAAMoD,EAAS3G,CAAM;AACzB,MAAI,OAAOuD,KAAQ,aACjBA,IAAMA,EAAI,QACZwF,IAAc,IAEV,KAAK,aAAa,SACpB,KAAK,OAAO,KAAK,kBAAkB;AAAA,IAAQ;AAAA;AAAA,CAAO,GAClD,KAAK,WAAW,MAAM,KAAK,SAAS,KAGtC,KAAK,YAAYxF,CAAG,IAAKvD,KAAU,KACnC,KAAK,OAAO,WAAWA,CAAM,KAAKuD,CAAG;AAAA,CAAM;AAAA,IAC7C;AAEA,QAAIwF,GAAa;AACf,UAAIC,IAAU,IAAIC,IAAa;AAC/B,iBAAWC,KAAa,KAAK;AAC3B,QAAAF,KAAWA,IAAU,IAAIE,CAAS,KAAKA,GACvCD,MAAeA,IAAa,MAAM,MAAM,KAAK,YAAYC,CAAS;AAEpE,MAAAF,IAAUhC,GAAYgC,CAA0C,GAChE,KAAK,eAAe,IAAI,OAAO,OAAOC,CAAU,aACZD,CAAO,kCAAkC;AAAA,IAC/E;AAEA,SAAK,OAAOD,IAAc;AAAA,IAAO,IAAIJ,CAAI;AAAA,EAC3C;AAAA;AAAA,EAGA,MAAMvF,GAAWC,GAAQ;AACvB,QAAI8F,IAAW/F,GAAW74B,GAAO8sB;AAWjC,YATI+L,MAAc,SAChB+F,IAAW,CAAA,IAEJ/F,EAAU,WACjB+F,IAAW,CAAC,EAAE,WAAW/F,GAAW,QAAQC,EAAM,CAAE,IAE3C,YAAYD,MACrB+F,IAAW,CAAC/F,CAAS,IAEf/L,IAAS8R,EAAS,QAAM;AAAA;AAAA,MAEhC,KAAK;AACH,eAAO,IAAIZ,GAAe,IAAI;AAAA;AAAA,MAEhC,KAAK;AAEH,YADAh+B,IAAQ4+B,EAAS,CAAC,GACd,EAAE5+B,EAAM,kBAAkBg+B;AAC5B,iBAAO,IAAIA,GAAe,KAAK,KAAK,iBAAiBh+B,EAAM,SAAS,CAAC,IAC3C,KAAK,cAAcA,EAAM,MAAM,CAAC,IAAI;AAAA;AAAA,MAElE;AACE,YAAI6+B,IAAW;AAEf,iBAASjzB,IAAI,GAAGA,IAAIkhB,GAAQlhB;AAC1B,UAAA5L,IAAQ4+B,EAAShzB,CAAC,GAEd5L,EAAM,UAAU,OAAO64B,CAAS,IAClCgG,KAAY,KAAK,KAAK,cAAc7+B,EAAM,MAAM,CAAC,MAGjD6+B,KAAY,IAAIjzB,IAAI;AAAA,MAAU;AAAA,OAClB,KAAK,iBAAiB5L,EAAM,SAAS,CAAC,IACtC,KAAK,cAAcA,EAAM,MAAM,CAAC,IAC5C64B,IAAY74B,EAAM;AAGtB,eAAO,IAAIg+B,GAAe,GAAGa,CAAQ;AAAA,EAAK;AAAA,IAChD;AAAA,EACE;AAAA;AAAA,EAGA,KAAK1d,GAAU;AACb,UAAM2L,IAAS3L,KAAYA,EAAS,UAAU,GAAG0d,IAAW,IAAI,MAAM/R,CAAM;AAC5E,aAAS,IAAI,GAAG,IAAIA,GAAQ;AAC1B,MAAA+R,EAAS,CAAC,IAAI,KAAK,cAAc1d,EAAS,CAAC,CAAC;AAC9C,WAAO,IAAI6c,GAAe,IAAIa,EAAS,KAAK,GAAG,CAAC,GAAG;AAAA,EACrD;AAAA;AAAA,EAGA,IAAIT,GAAM;AAER,IAAI,KAAK,aAAa,SACpB,KAAK,OAAO,KAAK,kBAAkB;AAAA,IAAQ;AAAA;AAAA,CAAO,GAClD,KAAK,WAAW,OAGlB,KAAK,SAAS,KAAK;AAGnB,QAAIU,IAAaV,MAAS,CAACpH,GAAO7lB,MAAW;AAAE,MAAA2tB,IAAa,MAAMV,EAAKpH,GAAO7lB,CAAM;AAAA,IAAG;AACvF,QAAI,KAAK;AACP,UAAI;AAAE,eAAO,KAAK,cAAc,IAAI2tB,CAAU;AAAA,MAAG,QACnC;AAAA,MAA6B;AAE7C,IAAAA,KAAcA,EAAU;AAAA,EAC1B;AACF;AAGA,SAASR,GAAkBS,GAAW;AAEpC,MAAI5tB,IAAS4sB,GAAkBgB,CAAS;AACxC,SAAI5tB,MAAW,WAET4tB,EAAU,WAAW,KACvB5tB,IAAS4tB,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAC5C5tB,IAAS,UAAU,OAAO,GAAG,IAAIA,EAAO,MAAM,IAAIA,MAIlDA,MAAW4tB,EAAU,WAAW,CAAC,IAAI,SAAU,OACpCA,EAAU,WAAW,CAAC,IAAI,MAAQ,SAAS,EAAE,GACxD5tB,IAAS,cAAc,OAAO,GAAG,KAAKA,EAAO,MAAM,IAAIA,KAGpDA;AACT;;;;;ECjYA,MAAM6tB,UAAuB,MAAM;AAAA,IACjC,YAAY/L,GAAQ;AAClB,UAAI,CAAC,MAAM,QAAQA,CAAM;AACvB,cAAM,IAAI,UAAU,sCAAsC,OAAOA,CAAM,EAAE;AAE3E,UAAI+H,IAAU;AACd,eAAS,IAAI,GAAG,IAAI/H,EAAO,QAAQ;AACjC,QAAA+H,KAAW,OAAO/H,EAAO,CAAC,EAAE,KAAK;AAAA;AAEnC,YAAM+H,CAAO,GACb,KAAK,OAAO,kBACZ,KAAK,SAAS/H;AAAA,IAClB;AAAA,EACA;AACA,SAAAgM,KAAiB;AAAA,IACf,gBAAAD;AAAA,IACA,aAAajJ,GAAM;AACjB,aAAO,MAAM,QAAQA,CAAI;AAAA,IAC7B;AAAA,IACE,uBAAuBA,GAAMn7B,GAAI;AAC/B,aAAOm7B,EAAK,SAASn7B,CAAE;AAAA,IAC3B;AAAA,IACE,sBAAsBm7B,GAAMn7B,GAAI;AAC9B,aAAOm7B,EAAK,QAAQn7B,CAAE;AAAA,IAC1B;AAAA,IACE,mBAAmBm7B,GAAMmJ,GAAK;AAC5B,aAAOnJ,EAAK,KAAKmJ,CAAG;AAAA,IACxB;AAAA,IACE,kBAAkBnJ,GAAMj6B,GAAI;AAC1B,aAAOi6B,EAAK,IAAIj6B,CAAE;AAAA,IACtB;AAAA,IACE,kBAAkBi6B,GAAMn7B,GAAI;AAC1B,aAAOm7B,EAAK,IAAIn7B,CAAE;AAAA,IACtB;AAAA,IACE,mBAAmBm7B,GAAMn7B,GAAI;AAC3B,aAAOm7B,EAAK,KAAKn7B,CAAE;AAAA,IACvB;AAAA,IACE,oBAAoBm7B,GAAM15B,GAAOC,GAAK;AACpC,aAAOy5B,EAAK,MAAM15B,GAAOC,CAAG;AAAA,IAChC;AAAA,IACE;AAAA,IACA,sBAAsBR,GAAIqjC,MAAazkC,GAAM;AAC3C,aAAOoB,EAAG,KAAKqjC,GAAU,GAAGzkC,CAAI;AAAA,IACpC;AAAA,IACE,mCAAmCq7B,GAAMnwB,GAAU;AACjD,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAKmwB,GAAMnwB,CAAQ;AAAA,IACrE;AAAA,IACE,WAAW,KAAK;AAAA,IAChB;AAAA,IACA,iBAAiB,OAAO;AAAA,IACxB,aAAa,OAAO;AAAA,IACpB,wBAAwB,OAAO;AAAA,IAC/B,wBAAwB,OAAO;AAAA,IAC/B,gBAAgB,OAAO;AAAA,IACvB,uBAAuBmwB,GAAMtf,GAAO;AAClC,aAAO,OAAO,iBAAiBsf,GAAMtf,CAAK;AAAA,IAC9C;AAAA,IACE,qBAAqBsf,GAAM13B,GAAMmkB,GAAM;AACrC,aAAO,OAAO,eAAeuT,GAAM13B,GAAMmkB,CAAI;AAAA,IACjD;AAAA,IACE,+BAA+BuT,GAAM13B,GAAM;AACzC,aAAO,OAAO,yBAAyB03B,GAAM13B,CAAI;AAAA,IACrD;AAAA,IACE,WAAWwW,GAAK;AACd,aAAO,OAAO,KAAKA,CAAG;AAAA,IAC1B;AAAA,IACE,qBAAqBhN,GAAQ+kB,GAAO;AAClC,aAAO,OAAO,eAAe/kB,GAAQ+kB,CAAK;AAAA,IAC9C;AAAA,IACE;AAAA,IACA,sBAAsBmJ,GAAMj6B,GAAI;AAC9B,aAAOi6B,EAAK,MAAMj6B,CAAE;AAAA,IACxB;AAAA,IACE,qBAAqBi6B,GAAMqJ,GAAQC,GAAS;AAC1C,aAAOtJ,EAAK,KAAKqJ,GAAQC,CAAO;AAAA,IACpC;AAAA,IACE,cAAcvI,GAAK;AACjB,aAAO,QAAQ,OAAOA,CAAG;AAAA,IAC7B;AAAA,IACE,eAAen9B,GAAK;AAClB,aAAO,QAAQ,QAAQA,CAAG;AAAA,IAC9B;AAAA,IACE,cAAc,QAAQ;AAAA,IACtB,oBAAoBo8B,GAAMl8B,GAAO;AAC/B,aAAOk8B,EAAK,KAAKl8B,CAAK;AAAA,IAC1B;AAAA,IACE,SAAS;AAAA,IACT;AAAA,IACA,qBAAqBk8B,GAAM15B,GAAOC,GAAK;AACrC,aAAOy5B,EAAK,MAAM15B,GAAOC,CAAG;AAAA,IAChC;AAAA,IACE,2BAA2By5B,GAAM;AAC/B,aAAOA,EAAK,YAAW;AAAA,IAC3B;AAAA,IACE,2BAA2BA,GAAM;AAC/B,aAAOA,EAAK,YAAW;AAAA,IAC3B;AAAA,IACE,oBAAoBA,GAAM;AACxB,aAAOA,EAAK,KAAI;AAAA,IACpB;AAAA,IACE;AAAA,IACA,WAAW,OAAO;AAAA,IAClB,qBAAqB,OAAO;AAAA,IAC5B,mBAAmB,OAAO;AAAA,IAC1B,gBAAgB,OAAO;AAAA,IACvB,eAAe,OAAO,WAAW,uBAAO,gBAAgB;AAAA,IACxD,oBAAoB,OAAO,gBAAgB,uBAAO,qBAAqB;AAAA,IACvE,uBAAuBA,GAAMhJ,GAAKxqB,GAAK;AACrC,aAAOwzB,EAAK,IAAIhJ,GAAKxqB,CAAG;AAAA,IAC5B;AAAA,IACE;AAAA,IACA;AAAA,EACF;;;;wBClHA+8B,KAAiB;AAAA,IACf,OAAO5F,MAAWh/B,GAAM;AAEtB,aAAOg/B,EAAO,QAAQ,eAAe,YAAa,CAAC6F,GAASlrB,CAAI,GAAG;AACjE,cAAMmrB,IAAc9kC,EAAK,MAAK;AAC9B,eAAI2Z,MAAS,MACJmrB,EAAY,QAAQ,CAAC,IACnBnrB,MAAS,MACX,KAAK,UAAUmrB,CAAW,IACxBnrB,MAAS,OAAO,OAAOmrB,KAAgB,WAEzC,GADMA,EAAY,gBAAgB,SAASA,EAAY,YAAY,OAAO,EACnE,MAAM,KAAI,IAEjBA,EAAY,SAAQ;AAAA,MAEnC,CAAK;AAAA,IACL;AAAA,IACE,QAAQ3lC,GAAO;AAEb,cAAQ,OAAOA,GAAK;AAAA,QAClB,KAAK;AACH,cAAIA,EAAM,SAAS,GAAG;AACpB,gBAAKA,EAAM,SAAS,GAAG;AAEhB,kBAAI,CAACA,EAAM,SAAS,GAAG,KAAK,CAACA,EAAM,SAAS,IAAI;AACrD,uBAAO,KAAKA,CAAK;AAAA,kBAFjB,QAAO,IAAIA,CAAK;AAKpB,iBAAO,IAAIA,CAAK;AAAA,QAClB,KAAK;AACH,iBAAI,MAAMA,CAAK,IACN,QACE,OAAO,GAAGA,GAAO,EAAE,IACrB,OAAOA,CAAK,IAEdA;AAAA,QACT,KAAK;AACH,iBAAO,GAAG,OAAOA,CAAK,CAAC;AAAA,QACzB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,OAAOA,CAAK;AAAA,QACrB,KAAK;AACH,iBAAO;AAAA,MACf;AAAA,IACA;AAAA,EACA;;;;;;ACpDA,QAAM,EAAE,QAAA6/B,GAAQ,SAAA4F,EAAO,IAAKlT,GAAA,GACtB,EAAE,gBAAgBqT,EAAoB,IAAKpT,GAAA,GAW3C2S,IAAiB,WAAW,kBAAkBS,GAC9CC,IAAe,uBAAO,cAAc,GACpCC,IAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GACMC,IAAc,uBACdC,IAAqB,oBACrBC,IAAQ,CAAA;AACd,WAASC,EAAOlmC,GAAOmhC,GAAS;AAC9B,QAAI,CAACnhC;AACH,YAAM,IAAIimC,EAAM,uBAAuB9E,CAAO;AAAA,EAElD;AAGA,WAAStH,EAAsB/5B,GAAK;AAClC,QAAIk3B,IAAM,IACNjlB,IAAIjS,EAAI;AACZ,UAAM0C,IAAQ1C,EAAI,CAAC,MAAM,MAAM,IAAI;AACnC,WAAOiS,KAAKvP,IAAQ,GAAGuP,KAAK;AAC1B,MAAAilB,IAAM,IAAIl3B,EAAI,MAAMiS,IAAI,GAAGA,CAAC,CAAC,GAAGilB,CAAG;AAErC,WAAO,GAAGl3B,EAAI,MAAM,GAAGiS,CAAC,CAAC,GAAGilB,CAAG;AAAA,EACjC;AACA,WAASuC,EAAWvxB,GAAK2xB,GAAK94B,GAAM;AAClC,QAAI,OAAO84B,KAAQ;AACjB,aAAAuM;AAAA,QACEvM,EAAI,UAAU94B,EAAK;AAAA;AAAA,QAEnB,SAASmH,CAAG,oCAAoCnH,EAAK,MAAM,uCAAuC84B,EAAI,MAAM;AAAA,MAClH,GACWA,EAAI,GAAG94B,CAAI;AAEpB,UAAMslC,KAAkBxM,EAAI,MAAM,aAAa,KAAK,CAAA,GAAI;AAKxD,WAJAuM;AAAA,MACEC,MAAmBtlC,EAAK;AAAA,MACxB,SAASmH,CAAG,oCAAoCnH,EAAK,MAAM,uCAAuCslC,CAAc;AAAA,IACpH,GACMtlC,EAAK,WAAW,IACX84B,IAEFkG,EAAOlG,GAAK,GAAG94B,CAAI;AAAA,EAC5B;AACA,WAASw4B,EAAE9I,GAAM4Q,GAAS3H,GAAM;AAC9B,IAAKA,MACHA,IAAO;AAAA,IAET,MAAM4M,UAAkB5M,EAAK;AAAA,MAC3B,eAAe34B,GAAM;AACnB,cAAM04B,EAAWhJ,GAAM4Q,GAAStgC,CAAI,CAAC;AAAA,MAC3C;AAAA,MACI,WAAW;AACT,eAAO,GAAG,KAAK,IAAI,KAAK0vB,CAAI,MAAM,KAAK,OAAO;AAAA,MACpD;AAAA,IACA;AACE,WAAO,iBAAiB6V,EAAU,WAAW;AAAA,MAC3C,MAAM;AAAA,QACJ,OAAO5M,EAAK;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA;MAEhB,UAAU;AAAA,QACR,QAAQ;AACN,iBAAO,GAAG,KAAK,IAAI,KAAKjJ,CAAI,MAAM,KAAK,OAAO;AAAA,QACtD;AAAA,QACM,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MACpB;AAAA,KACG,GACD6V,EAAU,UAAU,OAAO7V,GAC3B6V,EAAU,UAAUP,CAAY,IAAI,IACpCI,EAAM1V,CAAI,IAAI6V;AAAA,EAChB;AACA,WAASC,EAAgBpkC,GAAI;AAG3B,UAAMqkC,IAASN,IAAqB/jC,EAAG;AACvC,kBAAO,eAAeA,GAAI,QAAQ;AAAA,MAChC,OAAOqkC;AAAA,KACR,GACMrkC;AAAA,EACT;AACA,WAASskC,EAAmBC,GAAYC,GAAY;AAClD,QAAID,KAAcC,KAAcD,MAAeC,GAAY;AACzD,UAAI,MAAM,QAAQA,EAAW,MAAM;AAEjC,eAAAA,EAAW,OAAO,KAAKD,CAAU,GAC1BC;AAET,YAAMxJ,IAAM,IAAIkI,EAAe,CAACsB,GAAYD,CAAU,GAAGC,EAAW,OAAO;AAC3E,aAAAxJ,EAAI,OAAOwJ,EAAW,MACfxJ;AAAA,IACX;AACE,WAAOuJ,KAAcC;AAAA,EACvB;AAAA,EACA,MAAMC,UAAmB,MAAM;AAAA,IAC7B,YAAYvF,IAAU,6BAA6B/gC,IAAU,QAAW;AACtE,UAAIA,MAAY,UAAa,OAAOA,KAAY;AAC9C,cAAM,IAAI6lC,EAAM,qBAAqB,WAAW,UAAU7lC,CAAO;AAEnE,YAAM+gC,GAAS/gC,CAAO,GACtB,KAAK,OAAO,aACZ,KAAK,OAAO;AAAA,IAChB;AAAA,EACA;AACA,SAAAi5B,EAAE,iBAAiB,MAAM,KAAK,GAC9BA;AAAA,IACE;AAAA,IACA,CAAC70B,GAAMmiC,GAAUxS,MAAW;AAC1B,MAAA+R,EAAO,OAAO1hC,KAAS,UAAU,yBAAyB,GACrD,MAAM,QAAQmiC,CAAQ,MACzBA,IAAW,CAACA,CAAQ;AAEtB,UAAIhN,IAAM;AACV,MAAIn1B,EAAK,SAAS,WAAW,IAE3Bm1B,KAAO,GAAGn1B,CAAI,MAEdm1B,KAAO,IAAIn1B,CAAI,KAAKA,EAAK,SAAS,GAAG,IAAI,aAAa,UAAU,KAElEm1B,KAAO;AACP,YAAMiN,IAAQ,CAAA,GACRrf,IAAY,CAAA,GACZ2W,IAAQ,CAAA;AACd,iBAAWl+B,KAAS2mC;AAClB,QAAAT,EAAO,OAAOlmC,KAAU,UAAU,gDAAgD,GAC9E8lC,EAAO,SAAS9lC,CAAK,IACvB4mC,EAAM,KAAK5mC,EAAM,YAAW,CAAE,IACrB+lC,EAAY,KAAK/lC,CAAK,IAC/BunB,EAAU,KAAKvnB,CAAK,KAEpBkmC,EAAOlmC,MAAU,UAAU,kDAAkD,GAC7Ek+B,EAAM,KAAKl+B,CAAK;AAMpB,UAAIunB,EAAU,SAAS,GAAG;AACxB,cAAMmN,IAAMkS,EAAM,QAAQ,QAAQ;AAClC,QAAIlS,MAAQ,OACVkS,EAAM,OAAOA,GAAOlS,GAAK,CAAC,GAC1BnN,EAAU,KAAK,QAAQ;AAAA,MAE/B;AACI,UAAIqf,EAAM,SAAS,GAAG;AACpB,gBAAQA,EAAM,QAAM;AAAA,UAClB,KAAK;AACH,YAAAjN,KAAO,WAAWiN,EAAM,CAAC,CAAC;AAC1B;AAAA,UACF,KAAK;AACH,YAAAjN,KAAO,eAAeiN,EAAM,CAAC,CAAC,OAAOA,EAAM,CAAC,CAAC;AAC7C;AAAA,UACF,SAAS;AACP,kBAAM5d,IAAO4d,EAAM,IAAG;AACtB,YAAAjN,KAAO,eAAeiN,EAAM,KAAK,IAAI,CAAC,QAAQ5d,CAAI;AAAA,UAC5D;AAAA,QACA;AACM,SAAIzB,EAAU,SAAS,KAAK2W,EAAM,SAAS,OACzCvE,KAAO;AAAA,MAEf;AACI,UAAIpS,EAAU,SAAS,GAAG;AACxB,gBAAQA,EAAU,QAAM;AAAA,UACtB,KAAK;AACH,YAAAoS,KAAO,kBAAkBpS,EAAU,CAAC,CAAC;AACrC;AAAA,UACF,KAAK;AACH,YAAAoS,KAAO,kBAAkBpS,EAAU,CAAC,CAAC,OAAOA,EAAU,CAAC,CAAC;AACxD;AAAA,UACF,SAAS;AACP,kBAAMyB,IAAOzB,EAAU,IAAG;AAC1B,YAAAoS,KAAO,kBAAkBpS,EAAU,KAAK,IAAI,CAAC,QAAQyB,CAAI;AAAA,UACnE;AAAA,QACA;AACM,QAAIkV,EAAM,SAAS,MACjBvE,KAAO;AAAA,MAEf;AACI,cAAQuE,EAAM,QAAM;AAAA,QAClB,KAAK;AACH;AAAA,QACF,KAAK;AACH,UAAIA,EAAM,CAAC,EAAE,YAAW,MAAOA,EAAM,CAAC,MACpCvE,KAAO,QAETA,KAAO,GAAGuE,EAAM,CAAC,CAAC;AAClB;AAAA,QACF,KAAK;AACH,UAAAvE,KAAO,UAAUuE,EAAM,CAAC,CAAC,OAAOA,EAAM,CAAC,CAAC;AACxC;AAAA,QACF,SAAS;AACP,gBAAMlV,IAAOkV,EAAM,IAAG;AACtB,UAAAvE,KAAO,UAAUuE,EAAM,KAAK,IAAI,CAAC,QAAQlV,CAAI;AAAA,QACrD;AAAA,MACA;AACI,UAAImL,KAAU;AACZ,QAAAwF,KAAO,cAAcxF,CAAM;AAAA,eAClB,OAAOA,KAAW,cAAcA,EAAO;AAChD,QAAAwF,KAAO,uBAAuBxF,EAAO,IAAI;AAAA,eAChC,OAAOA,KAAW,UAAU;AACrC,YAAI0S;AACJ,aACGA,IAAsB1S,EAAO,iBAAiB,QAC/C0S,MAAwB,UACxBA,EAAoB;AAEpB,UAAAlN,KAAO,6BAA6BxF,EAAO,YAAY,IAAI;AAAA,aACtD;AACL,gBAAM2S,IAAYrB,EAAQtR,GAAQ;AAAA,YAChC,OAAO;AAAA,WACR;AACD,UAAAwF,KAAO,cAAcmN,CAAS;AAAA,QACtC;AAAA,MACA,OAAW;AACL,YAAIA,IAAYrB,EAAQtR,GAAQ;AAAA,UAC9B,QAAQ;AAAA,SACT;AACD,QAAI2S,EAAU,SAAS,OACrBA,IAAY,GAAGA,EAAU,MAAM,GAAG,EAAE,CAAC,QAEvCnN,KAAO,mBAAmB,OAAOxF,CAAM,KAAK2S,CAAS;AAAA,MAC3D;AACI,aAAOnN;AAAA,IACX;AAAA,IACE;AAAA,EACF,GACAN;AAAA,IACE;AAAA,IACA,CAAC70B,GAAMxE,GAAO+mC,IAAS,iBAAiB;AACtC,UAAID,IAAYrB,EAAQzlC,CAAK;AAC7B,aAAI8mC,EAAU,SAAS,QACrBA,IAAYA,EAAU,MAAM,GAAG,GAAG,IAAI,QAGjC,OADMtiC,EAAK,SAAS,GAAG,IAAI,aAAa,UAC7B,KAAKA,CAAI,KAAKuiC,CAAM,cAAcD,CAAS;AAAA,IACjE;AAAA,IACE;AAAA,EACF,GACAzN;AAAA,IACE;AAAA,IACA,CAACK,GAAOl1B,GAAMxE,MAAU;AACtB,UAAIgnC;AACJ,YAAMxsB,IACJxa,KAAU,SAETgnC,IAAqBhnC,EAAM,iBAAiB,QAC7CgnC,MAAuB,UACvBA,EAAmB,OACf,eAAehnC,EAAM,YAAY,IAAI,KACrC,QAAQ,OAAOA,CAAK;AAC1B,aAAO,YAAY05B,CAAK,6BAA6Bl1B,CAAI,sBAA2BgW,CAAI;AAAA,IAC5F;AAAA,IACE;AAAA,EACF,GACA6e;AAAA,IACE;AAAA,IACA,IAAIx4B,MAAS;AACX,MAAAqlC,EAAOrlC,EAAK,SAAS,GAAG,wCAAwC;AAChE,UAAI84B;AACJ,YAAMjxB,IAAM7H,EAAK;AAEjB,cADAA,KAAQ,MAAM,QAAQA,CAAI,IAAIA,IAAO,CAACA,CAAI,GAAG,IAAI,CAACgQ,MAAM,IAAIA,CAAC,GAAG,EAAE,KAAK,MAAM,GACrEnI,GAAG;AAAA,QACT,KAAK;AACH,UAAAixB,KAAO,OAAO94B,EAAK,CAAC,CAAC;AACrB;AAAA,QACF,KAAK;AACH,UAAA84B,KAAO,OAAO94B,EAAK,CAAC,CAAC,QAAQA,EAAK,CAAC,CAAC;AACpC;AAAA,QACF;AACE;AACE,kBAAMmoB,IAAOnoB,EAAK,IAAG;AACrB,YAAA84B,KAAO,OAAO94B,EAAK,KAAK,IAAI,CAAC,SAASmoB,CAAI;AAAA,UACpD;AACQ;AAAA,MACR;AACI,aAAO,GAAG2Q,CAAG;AAAA,IACjB;AAAA,IACE;AAAA,EACF,GACAN;AAAA,IACE;AAAA,IACA,CAAC5e,GAAKgf,GAAOC,MAAU;AACrB,MAAAwM,EAAOzM,GAAO,0BAA0B;AACxC,UAAIG;AACJ,UAAI,OAAO,UAAUF,CAAK,KAAK,KAAK,IAAIA,CAAK,IAAI,KAAK;AACpD,QAAAE,IAAWC,EAAsB,OAAOH,CAAK,CAAC;AAAA,eACrC,OAAOA,KAAU,UAAU;AACpC,QAAAE,IAAW,OAAOF,CAAK;AACvB,cAAMb,IAAQ,OAAO,CAAC,KAAK,OAAO,EAAE;AACpC,SAAIa,IAAQb,KAASa,IAAQ,CAACb,OAC5Be,IAAWC,EAAsBD,CAAQ,IAE3CA,KAAY;AAAA,MAClB;AACM,QAAAA,IAAW6L,EAAQ/L,CAAK;AAE1B,aAAO,iBAAiBjf,CAAG,iCAAiCgf,CAAK,cAAcG,CAAQ;AAAA,IAC3F;AAAA,IACE;AAAA,EACF,GACAP,EAAE,yBAAyB,kCAAkC,KAAK,GAClEA,EAAE,8BAA8B,oCAAoC,KAAK,GACzEA,EAAE,+BAA+B,8CAA8C,KAAK,GACpFA,EAAE,0BAA0B,6BAA6B,KAAK,GAC9DA,EAAE,wBAAwB,+CAA+C,KAAK,GAC9EA,EAAE,0BAA0B,uCAAuC,SAAS,GAC5EA,EAAE,8BAA8B,mBAAmB,KAAK,GACxDA,EAAE,6BAA6B,2BAA2B,KAAK,GAC/DA,EAAE,sCAAsC,oCAAoC,KAAK,GACjFA,EAAE,8BAA8B,mBAAmB,KAAK,GACxDA,EAAE,wBAAwB,wBAAwB,SAAS,GAC3DD,KAAiB;AAAA,IACf,YAAAsN;AAAA,IACA,oBAAoBL,EAAgBE,CAAkB;AAAA,IACtD,iBAAAF;AAAA,IACA,OAAAJ;AAAA,EACF;;;;;;AClVA,QAAM,EAAE,iBAAAgB,GAAiB,aAAAC,EAAW,IAChC,OAAO,OAAS,MAAc,OAC9B,OAAO,SAAW,MAAc;AAAA;AAAA,IAChB;AAAA;AAGpBC,SAAAA,GAAA,UAAiBF,GACjBE,GAAA,QAAA,cAA6BD,GAC7BC,GAAA,QAAA,UAAyBF;;;;;;ACWzB,MAAIG,IAAI,OAAO,WAAY,WAAW,UAAU,MAC5CC,IAAeD,KAAK,OAAOA,EAAE,SAAU,aACvCA,EAAE,QACF,SAAsBp5B,GAAQs5B,GAAUzmC,GAAM;AAC9C,WAAO,SAAS,UAAU,MAAM,KAAKmN,GAAQs5B,GAAUzmC,CAAI;AAAA,EAC/D,GAEI0mC;AACJ,EAAIH,KAAK,OAAOA,EAAE,WAAY,aAC5BG,IAAiBH,EAAE,UACV,OAAO,wBAChBG,IAAiB,SAAwBv5B,GAAQ;AAC/C,WAAO,OAAO,oBAAoBA,CAAM,EACrC,OAAO,OAAO,sBAAsBA,CAAM,CAAC;AAAA,EAClD,IAEEu5B,IAAiB,SAAwBv5B,GAAQ;AAC/C,WAAO,OAAO,oBAAoBA,CAAM;AAAA,EAC5C;AAGA,WAASw5B,EAAmBC,GAAS;AACnC,IAAI,WAAW,QAAQ,QAAM,QAAQ,KAAKA,CAAO;AAAA,EACnD;AAEA,MAAIC,IAAc,OAAO,SAAS,SAAqB1nC,GAAO;AAC5D,WAAOA,MAAUA;AAAA,EACnB;AAEA,WAAS2nC,IAAe;AACtB,IAAAA,EAAa,KAAK,KAAK,IAAI;AAAA,EAC7B;AACAC,EAAAA,GAAA,UAAiBD,GACjBC,GAAA,QAAA,OAAsBC,GAGtBF,EAAa,eAAeA,GAE5BA,EAAa,UAAU,UAAU,QACjCA,EAAa,UAAU,eAAe,GACtCA,EAAa,UAAU,gBAAgB;AAIvC,MAAIG,IAAsB;AAE1B,WAASC,EAAc9mC,GAAU;AAC/B,QAAI,OAAOA,KAAa;AACtB,YAAM,IAAI,UAAU,qEAAqE,OAAOA,CAAQ;AAAA,EAE5G;AAEA,SAAO,eAAe0mC,GAAc,uBAAuB;AAAA,IACzD,YAAY;AAAA,IACZ,KAAK,WAAW;AACd,aAAOG;AAAA,IACX;AAAA,IACE,KAAK,SAAShtB,GAAK;AACjB,UAAI,OAAOA,KAAQ,YAAYA,IAAM,KAAK4sB,EAAY5sB,CAAG;AACvD,cAAM,IAAI,WAAW,oGAAoGA,IAAM,GAAG;AAEpI,MAAAgtB,IAAsBhtB;AAAA,IAC1B;AAAA,EACA,CAAC,GAED6sB,EAAa,OAAO,WAAW;AAE7B,KAAI,KAAK,YAAY,UACjB,KAAK,YAAY,OAAO,eAAe,IAAI,EAAE,aAC/C,KAAK,UAAU,uBAAO,OAAO,IAAI,GACjC,KAAK,eAAe,IAGtB,KAAK,gBAAgB,KAAK,iBAAiB;AAAA,EAC7C,GAIAA,EAAa,UAAU,kBAAkB,SAAyBpS,GAAG;AACnE,QAAI,OAAOA,KAAM,YAAYA,IAAI,KAAKmS,EAAYnS,CAAC;AACjD,YAAM,IAAI,WAAW,kFAAkFA,IAAI,GAAG;AAEhH,gBAAK,gBAAgBA,GACd;AAAA,EACT;AAEA,WAASyS,EAAiBC,GAAM;AAC9B,WAAIA,EAAK,kBAAkB,SAClBN,EAAa,sBACfM,EAAK;AAAA,EACd;AAEA,EAAAN,EAAa,UAAU,kBAAkB,WAA2B;AAClE,WAAOK,EAAiB,IAAI;AAAA,EAC9B,GAEAL,EAAa,UAAU,OAAO,SAAcntB,GAAM;AAEhD,aADI3Z,IAAO,CAAA,GACFkR,IAAI,GAAGA,IAAI,UAAU,QAAQA,IAAK,CAAAlR,EAAK,KAAK,UAAUkR,CAAC,CAAC;AACjE,QAAIm2B,IAAW1tB,MAAS,SAEpB2tB,KAAS,KAAK;AAClB,QAAIA,OAAW;AACb,MAAAD,IAAWA,KAAWC,GAAO,UAAU;AAAA,aAChC,CAACD;AACR,aAAO;AAGT,QAAIA,GAAS;AACX,UAAIE;AAGJ,UAFIvnC,EAAK,SAAS,MAChBunC,IAAKvnC,EAAK,CAAC,IACTunC,aAAc;AAGhB,cAAMA;AAGR,UAAInL,IAAM,IAAI,MAAM,sBAAsBmL,IAAK,OAAOA,EAAG,UAAU,MAAM,GAAG;AAC5E,YAAAnL,EAAI,UAAUmL,GACRnL;AAAA,IACV;AAEE,QAAIvY,IAAUyjB,GAAO3tB,CAAI;AAEzB,QAAIkK,MAAY;AACd,aAAO;AAET,QAAI,OAAOA,KAAY;AACrB,MAAA2iB,EAAa3iB,GAAS,MAAM7jB,CAAI;AAAA;AAIhC,eAFI6H,IAAMgc,EAAQ,QACd1D,KAAYqnB,EAAW3jB,GAAShc,CAAG,GAC9BqJ,IAAI,GAAGA,IAAIrJ,GAAK,EAAEqJ;AACzB,QAAAs1B,EAAarmB,GAAUjP,CAAC,GAAG,MAAMlR,CAAI;AAGzC,WAAO;AAAA,EACT;AAEA,WAASynC,EAAat6B,GAAQwM,GAAMvZ,GAAUsnC,GAAS;AACrD,QAAInvB,GACA+uB,IACA9vB;AAsBJ,QApBA0vB,EAAc9mC,CAAQ,GAEtBknC,KAASn6B,EAAO,SACZm6B,OAAW,UACbA,KAASn6B,EAAO,UAAU,uBAAO,OAAO,IAAI,GAC5CA,EAAO,eAAe,MAIlBm6B,GAAO,gBAAgB,WACzBn6B,EAAO;AAAA,MAAK;AAAA,MAAewM;AAAA,MACfvZ,EAAS,WAAWA,EAAS,WAAWA;AAAA,IAAQ,GAI5DknC,KAASn6B,EAAO,UAElBqK,IAAW8vB,GAAO3tB,CAAI,IAGpBnC,MAAa;AAEf,MAAAA,IAAW8vB,GAAO3tB,CAAI,IAAIvZ,GAC1B,EAAE+M,EAAO;AAAA,aAEL,OAAOqK,KAAa,aAEtBA,IAAW8vB,GAAO3tB,CAAI,IACpB+tB,IAAU,CAACtnC,GAAUoX,CAAQ,IAAI,CAACA,GAAUpX,CAAQ,IAE7CsnC,IACTlwB,EAAS,QAAQpX,CAAQ,IAEzBoX,EAAS,KAAKpX,CAAQ,GAIxBmY,IAAI4uB,EAAiBh6B,CAAM,GACvBoL,IAAI,KAAKf,EAAS,SAASe,KAAK,CAACf,EAAS,QAAQ;AACpD,MAAAA,EAAS,SAAS;AAGlB,UAAImwB,IAAI,IAAI,MAAM,iDACEnwB,EAAS,SAAS,MAAM,OAAOmC,CAAI,IAAI,mEAEvB;AACpC,MAAAguB,EAAE,OAAO,+BACTA,EAAE,UAAUx6B,GACZw6B,EAAE,OAAOhuB,GACTguB,EAAE,QAAQnwB,EAAS,QACnBmvB,EAAmBgB,CAAC;AAAA,IAC1B;AAGE,WAAOx6B;AAAA,EACT;AAEA,EAAA25B,EAAa,UAAU,cAAc,SAAqBntB,GAAMvZ,GAAU;AACxE,WAAOqnC,EAAa,MAAM9tB,GAAMvZ,GAAU,EAAK;AAAA,EACjD,GAEA0mC,EAAa,UAAU,KAAKA,EAAa,UAAU,aAEnDA,EAAa,UAAU,kBACnB,SAAyBntB,GAAMvZ,GAAU;AACvC,WAAOqnC,EAAa,MAAM9tB,GAAMvZ,GAAU,EAAI;AAAA,EACpD;AAEA,WAASwnC,IAAc;AACrB,QAAI,CAAC,KAAK;AAGR,aAFA,KAAK,OAAO,eAAe,KAAK,MAAM,KAAK,MAAM,GACjD,KAAK,QAAQ,IACT,UAAU,WAAW,IAChB,KAAK,SAAS,KAAK,KAAK,MAAM,IAChC,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,EAErD;AAEA,WAASC,EAAU16B,GAAQwM,GAAMvZ,GAAU;AACzC,QAAIsD,IAAQ,EAAE,OAAO,IAAO,QAAQ,QAAW,QAAQyJ,GAAQ,MAAMwM,GAAM,UAAUvZ,EAAQ,GACzF0nC,IAAUF,EAAY,KAAKlkC,CAAK;AACpC,WAAAokC,EAAQ,WAAW1nC,GACnBsD,EAAM,SAASokC,GACRA;AAAA,EACT;AAEA,EAAAhB,EAAa,UAAU,OAAO,SAAcntB,GAAMvZ,GAAU;AAC1D,WAAA8mC,EAAc9mC,CAAQ,GACtB,KAAK,GAAGuZ,GAAMkuB,EAAU,MAAMluB,GAAMvZ,CAAQ,CAAC,GACtC;AAAA,EACT,GAEA0mC,EAAa,UAAU,sBACnB,SAA6BntB,GAAMvZ,GAAU;AAC3C,WAAA8mC,EAAc9mC,CAAQ,GACtB,KAAK,gBAAgBuZ,GAAMkuB,EAAU,MAAMluB,GAAMvZ,CAAQ,CAAC,GACnD;AAAA,EACb,GAGA0mC,EAAa,UAAU,iBACnB,SAAwBntB,GAAMvZ,GAAU;AACtC,QAAI6M,GAAMq6B,GAAQ99B,IAAU0H,GAAG62B;AAK/B,QAHAb,EAAc9mC,CAAQ,GAEtBknC,IAAS,KAAK,SACVA,MAAW;AACb,aAAO;AAGT,QADAr6B,IAAOq6B,EAAO3tB,CAAI,GACd1M,MAAS;AACX,aAAO;AAET,QAAIA,MAAS7M,KAAY6M,EAAK,aAAa7M;AACzC,MAAI,EAAE,KAAK,iBAAiB,IAC1B,KAAK,UAAU,uBAAO,OAAO,IAAI,KAEjC,OAAOknC,EAAO3tB,CAAI,GACd2tB,EAAO,kBACT,KAAK,KAAK,kBAAkB3tB,GAAM1M,EAAK,YAAY7M,CAAQ;AAAA,aAEtD,OAAO6M,KAAS,YAAY;AAGrC,WAFAzD,KAAW,IAEN0H,IAAIjE,EAAK,SAAS,GAAGiE,KAAK,GAAGA;AAChC,YAAIjE,EAAKiE,CAAC,MAAM9Q,KAAY6M,EAAKiE,CAAC,EAAE,aAAa9Q,GAAU;AACzD,UAAA2nC,IAAmB96B,EAAKiE,CAAC,EAAE,UAC3B1H,KAAW0H;AACX;AAAA,QACZ;AAGQ,UAAI1H,KAAW;AACb,eAAO;AAET,MAAIA,OAAa,IACfyD,EAAK,MAAK,IAEV+6B,EAAU/6B,GAAMzD,EAAQ,GAGtByD,EAAK,WAAW,MAClBq6B,EAAO3tB,CAAI,IAAI1M,EAAK,CAAC,IAEnBq6B,EAAO,mBAAmB,UAC5B,KAAK,KAAK,kBAAkB3tB,GAAMouB,KAAoB3nC,CAAQ;AAAA,IACxE;AAEM,WAAO;AAAA,EACb,GAEA0mC,EAAa,UAAU,MAAMA,EAAa,UAAU,gBAEpDA,EAAa,UAAU,qBACnB,SAA4BntB,GAAM;AAChC,QAAIwG,GAAWmnB,GAAQp2B;AAGvB,QADAo2B,IAAS,KAAK,SACVA,MAAW;AACb,aAAO;AAGT,QAAIA,EAAO,mBAAmB;AAC5B,aAAI,UAAU,WAAW,KACvB,KAAK,UAAU,uBAAO,OAAO,IAAI,GACjC,KAAK,eAAe,KACXA,EAAO3tB,CAAI,MAAM,WACtB,EAAE,KAAK,iBAAiB,IAC1B,KAAK,UAAU,uBAAO,OAAO,IAAI,IAEjC,OAAO2tB,EAAO3tB,CAAI,IAEf;AAIT,QAAI,UAAU,WAAW,GAAG;AAC1B,UAAI1S,KAAO,OAAO,KAAKqgC,CAAM,GACzBngC;AACJ,WAAK+J,IAAI,GAAGA,IAAIjK,GAAK,QAAQ,EAAEiK;AAE7B,QADA/J,IAAMF,GAAKiK,CAAC,GACR/J,MAAQ,oBACZ,KAAK,mBAAmBA,CAAG;AAE7B,kBAAK,mBAAmB,gBAAgB,GACxC,KAAK,UAAU,uBAAO,OAAO,IAAI,GACjC,KAAK,eAAe,GACb;AAAA,IACf;AAIM,QAFAgZ,IAAYmnB,EAAO3tB,CAAI,GAEnB,OAAOwG,KAAc;AACvB,WAAK,eAAexG,GAAMwG,CAAS;AAAA,aAC1BA,MAAc;AAEvB,WAAKjP,IAAIiP,EAAU,SAAS,GAAGjP,KAAK,GAAGA;AACrC,aAAK,eAAeyI,GAAMwG,EAAUjP,CAAC,CAAC;AAI1C,WAAO;AAAA,EACb;AAEA,WAAS+2B,EAAW96B,GAAQwM,GAAMuuB,GAAQ;AACxC,QAAIZ,IAASn6B,EAAO;AAEpB,QAAIm6B,MAAW;AACb,aAAO,CAAA;AAET,QAAIa,IAAab,EAAO3tB,CAAI;AAC5B,WAAIwuB,MAAe,SACV,CAAA,IAEL,OAAOA,KAAe,aACjBD,IAAS,CAACC,EAAW,YAAYA,CAAU,IAAI,CAACA,CAAU,IAE5DD,IACLE,EAAgBD,CAAU,IAAIX,EAAWW,GAAYA,EAAW,MAAM;AAAA,EAC1E;AAEA,EAAArB,EAAa,UAAU,YAAY,SAAmBntB,GAAM;AAC1D,WAAOsuB,EAAW,MAAMtuB,GAAM,EAAI;AAAA,EACpC,GAEAmtB,EAAa,UAAU,eAAe,SAAsBntB,GAAM;AAChE,WAAOsuB,EAAW,MAAMtuB,GAAM,EAAK;AAAA,EACrC,GAEAmtB,EAAa,gBAAgB,SAASuB,GAAS1uB,GAAM;AACnD,WAAI,OAAO0uB,EAAQ,iBAAkB,aAC5BA,EAAQ,cAAc1uB,CAAI,IAE1B2uB,EAAc,KAAKD,GAAS1uB,CAAI;AAAA,EAE3C,GAEAmtB,EAAa,UAAU,gBAAgBwB;AACvC,WAASA,EAAc3uB,GAAM;AAC3B,QAAI2tB,IAAS,KAAK;AAElB,QAAIA,MAAW,QAAW;AACxB,UAAIa,IAAab,EAAO3tB,CAAI;AAE5B,UAAI,OAAOwuB,KAAe;AACxB,eAAO;AACF,UAAIA,MAAe;AACxB,eAAOA,EAAW;AAAA,IAExB;AAEE,WAAO;AAAA,EACT;AAEA,EAAArB,EAAa,UAAU,aAAa,WAAsB;AACxD,WAAO,KAAK,eAAe,IAAIJ,EAAe,KAAK,OAAO,IAAI,CAAA;AAAA,EAChE;AAEA,WAASc,EAAWhtB,GAAKka,GAAG;AAE1B,aADIhB,IAAO,IAAI,MAAMgB,CAAC,GACbxjB,IAAI,GAAGA,IAAIwjB,GAAG,EAAExjB;AACvB,MAAAwiB,EAAKxiB,CAAC,IAAIsJ,EAAItJ,CAAC;AACjB,WAAOwiB;AAAA,EACT;AAEA,WAASsU,EAAU/6B,GAAMyL,GAAO;AAC9B,WAAOA,IAAQ,IAAIzL,EAAK,QAAQyL;AAC9B,MAAAzL,EAAKyL,CAAK,IAAIzL,EAAKyL,IAAQ,CAAC;AAC9B,IAAAzL,EAAK,IAAG;AAAA,EACV;AAEA,WAASm7B,EAAgB5tB,GAAK;AAE5B,aADIsc,IAAM,IAAI,MAAMtc,EAAI,MAAM,GACrBtJ,IAAI,GAAGA,IAAI4lB,EAAI,QAAQ,EAAE5lB;AAChC,MAAA4lB,EAAI5lB,CAAC,IAAIsJ,EAAItJ,CAAC,EAAE,YAAYsJ,EAAItJ,CAAC;AAEnC,WAAO4lB;AAAA,EACT;AAEA,WAASkQ,EAAKqB,GAAS1kC,GAAM;AAC3B,WAAO,IAAI,QAAQ,SAAUyT,GAASmxB,GAAQ;AAC5C,eAASC,EAAcpM,GAAK;AAC1B,QAAAiM,EAAQ,eAAe1kC,GAAM8kC,EAAQ,GACrCF,EAAOnM,CAAG;AAAA,MAChB;AAEI,eAASqM,KAAW;AAClB,QAAI,OAAOJ,EAAQ,kBAAmB,cACpCA,EAAQ,eAAe,SAASG,CAAa,GAE/CpxB,EAAQ,CAAA,EAAG,MAAM,KAAK,SAAS,CAAC;AAAA,MACtC;AAEI,MAAAsxB,EAA+BL,GAAS1kC,GAAM8kC,IAAU,EAAE,MAAM,IAAM,GAClE9kC,MAAS,WACXglC,EAA8BN,GAASG,GAAe,EAAE,MAAM,GAAI,CAAE;AAAA,IAE1E,CAAG;AAAA,EACH;AAEA,WAASG,EAA8BN,GAASxkB,GAAS+kB,GAAO;AAC9D,IAAI,OAAOP,EAAQ,MAAO,cACxBK,EAA+BL,GAAS,SAASxkB,GAAS+kB,CAAK;AAAA,EAEnE;AAEA,WAASF,EAA+BL,GAAS1kC,GAAMvD,GAAUwoC,GAAO;AACtE,QAAI,OAAOP,EAAQ,MAAO;AACxB,MAAIO,EAAM,OACRP,EAAQ,KAAK1kC,GAAMvD,CAAQ,IAE3BioC,EAAQ,GAAG1kC,GAAMvD,CAAQ;AAAA,aAElB,OAAOioC,EAAQ,oBAAqB;AAG7C,MAAAA,EAAQ,iBAAiB1kC,GAAM,SAASklC,EAAa5uB,IAAK;AAGxD,QAAI2uB,EAAM,QACRP,EAAQ,oBAAoB1kC,GAAMklC,CAAY,GAEhDzoC,EAAS6Z,EAAG;AAAA,MAClB,CAAK;AAAA;AAED,YAAM,IAAI,UAAU,wEAAwE,OAAOouB,CAAO;AAAA,EAE9G;;;;;;AC9eA,UAAMS,IAAepX,GAAA,GACf,EAAE,QAAAsN,GAAQ,SAAA4F,EAAO,IAAKjT,GAAA,GACtB;AAAA,MACJ,OAAO,EAAE,sBAAAoX,EAAoB;AAAA,IAC/B,IAAIC,GAAA,GACE,EAAE,wBAAAC,GAAwB,gBAAA3E,GAAgB,eAAA4E,EAAa,IAAKC,GAAA,GAC5D9C,IAAc,WAAW,eAAe+C,KAA4B,aACpEhD,IAAkB,WAAW,mBAAmBgD,KAA4B,iBAC5EC,IAAgB,OAAO,eAAe,iBAAkB;AAAA,IAAA,CAAE,EAAE,aAC5DC,IAAO,WAAW,QAAQR,EAAa,MAEvCS,IACJ,OAAOD,IAAS,MACZ,SAAgBr5B,GAAG;AAEjB,aAAOA,aAAaq5B;AAAA,IAC5B,IACM,SAAgBr5B,GAAG;AACjB,aAAO;AAAA,IACf,GAGMu5B,IAAsB,CAACC,GAAQ9lC,MAAS;AAC5C,UAAI8lC,MAAW,WAAcA,MAAW,QAAQ,OAAOA,KAAW,YAAY,EAAE,aAAaA;AAC3F,cAAM,IAAIV,EAAqBplC,GAAM,eAAe8lC,CAAM;AAAA,IAE9D,GACMC,IAAmB,CAACvqC,GAAOwE,MAAS;AACxC,UAAI,OAAOxE,KAAU;AACnB,cAAM,IAAI4pC,EAAqBplC,GAAM,YAAYxE,CAAK;AAAA,IAE1D;AACA,IAAAwqC,EAAA,UAAiB;AAAA,MACf,gBAAArF;AAAA,MACA,cAAc,OAAO,OAAO,EAAE;AAAA,MAC9B,KAAK9gB,GAAU;AACb,YAAIomB,IAAS;AACb,eAAO,YAAa5pC,GAAM;AACxB,UAAI4pC,MAGJA,IAAS,IACTpmB,EAAS,MAAM,MAAMxjB,CAAI;AAAA,QAC/B;AAAA,MACA;AAAA,MACE,uBAAuB,WAAY;AACjC,YAAIoX,GACAmxB;AAOJ,eAAO;AAAA,UACL,SALc,IAAI,QAAQ,CAACpS,GAAK0T,MAAQ;AACxC,YAAAzyB,IAAU+e,GACVoS,IAASsB;AAAA,UACf,CAAK;AAAA,UAGC,SAAAzyB;AAAA,UACA,QAAAmxB;AAAA,QACN;AAAA,MACA;AAAA,MACE,UAAUnnC,GAAI;AACZ,eAAO,IAAI,QAAQ,CAACgW,GAASmxB,MAAW;AACtC,UAAAnnC,EAAG,CAACg7B,MAAQp8B,MACNo8B,IACKmM,EAAOnM,CAAG,IAEZhlB,EAAQ,GAAGpX,CAAI,CACvB;AAAA,QACP,CAAK;AAAA,MACL;AAAA,MACE,WAAW;AACT,eAAO,WAAY;AAAA,QAAA;AAAA,MACvB;AAAA,MACE,QAAAg/B;AAAA,MACA,SAAA4F;AAAA,MACA,OAAO;AAAA,QACL,gBAAgBxjC,GAAI;AAClB,iBAAOA,aAAcioC;AAAA,QAC3B;AAAA,QACI,kBAAkB7uB,GAAK;AACrB,iBAAO,YAAY,OAAOA,CAAG;AAAA,QACnC;AAAA;MAEE,QAAA+uB;AAAA,MACA,UAAUnoC,GAAIk/B,GAAS;AACrB,eAAOl/B;AAAA,MACX;AAAA,MACE,kBACE0oC,GAAA,EAAkB,oBAClB,SAA0BL,GAAQrpC,GAAU;AAC1C,YAAIqpC,MAAW;AACb,gBAAM,IAAIV,EAAqB,UAAU,eAAeU,CAAM;AAEhE,QAAAD,EAAoBC,GAAQ,QAAQ,GACpCC,EAAiBtpC,GAAU,UAAU;AACrC,YAAI2pC;AACJ,eAAIN,EAAO,UACT,eAAe,MAAMrpC,EAAQ,CAAE,KAE/BqpC,EAAO,iBAAiB,SAASrpC,GAAU;AAAA,UACzC,WAAW;AAAA,UACX,MAAM;AAAA,UACN,CAAC6oC,CAAsB,GAAG;AAAA,SAC3B,GACDc,IAAsB,MAAM;AAC1B,UAAAN,EAAO,oBAAoB,SAASrpC,CAAQ;AAAA,QACtD,IAEa;AAAA,UACL,WAAW;AAAA,UACX,CAAC8oC,CAAa,IAAI;AAChB,gBAAIc;AACH,aAACA,IAAuBD,OAAyB,QAAQC,MAAyB,UAE/EA,EAAoB;AAAA,UAClC;AAAA,QACA;AAAA,MACA;AAAA,MACE,gBACE3D,EAAY,OACZ,SAAwB4D,GAAS;AAE/B,YAAIA,EAAQ,WAAW;AACrB,iBAAOA,EAAQ,CAAC;AAElB,cAAMC,IAAK,IAAI9D,EAAe,GACxB+D,IAAQ,MAAMD,EAAG,MAAK;AAC5B,eAAAD,EAAQ,QAAQ,CAACR,MAAW;AAC1B,UAAAD,EAAoBC,GAAQ,SAAS,GACrCA,EAAO,iBAAiB,SAASU,GAAO;AAAA,YACtC,MAAM;AAAA,WACP;AAAA,QACT,CAAO,GACDD,EAAG,OAAO;AAAA,UACR;AAAA,UACA,MAAM;AACJ,YAAAD,EAAQ,QAAQ,CAACR,MAAWA,EAAO,oBAAoB,SAASU,CAAK,CAAC;AAAA,UAChF;AAAA,UACQ;AAAA,YACE,MAAM;AAAA,UAChB;AAAA,QACA,GACaD,EAAG;AAAA,MAChB;AAAA,IACA,GACAP,EAAO,QAAQ,UAAU,SAAS,uBAAO,IAAI,8BAA8B;AAAA;;;;;;AC/I3E,QAAM;AAAA,IACJ,cAAAS;AAAA,IACA,wBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAA3D;AAAA,IACA,wBAAA4D;AAAA,IACA,wBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,+BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,QAAAC;AAAA,IACA,4BAAAC;AAAA,IACA,qBAAAC;AAAA,EACF,IAAItZ,GAAA,GACE;AAAA,IACJ,iBAAA8T;AAAA,IACA,OAAO,EAAE,qBAAAyF,GAAqB,sBAAAlC,GAAsB,uBAAAmC,GAAuB,kBAAAC,GAAkB,oBAAAC,EAAkB;AAAA,EACjH,IAAIzZ,GAAA,GACE,EAAE,mBAAA0Z,EAAiB,IAAKrC,GAAA,GACxB,EAAE,iBAAAsC,GAAiB,mBAAAC,EAAiB,IAAKvC,KAAwB,OACjEiB,IAAU,CAAA;AAMhB,WAASuB,EAAQrsC,GAAO;AACtB,WAAOA,OAAWA,IAAQ;AAAA,EAC5B;AAMA,WAASssC,GAAStsC,GAAO;AACvB,WAAOA,MAAUA,MAAU;AAAA,EAC7B;AACA,QAAMusC,IAAW,YACXC,IAAW;AAajB,WAASC,EAAczsC,GAAOwE,GAAMkoC,GAAK;AAIvC,QAHI,OAAO1sC,IAAU,QACnBA,IAAQ0sC,IAEN,OAAO1sC,KAAU,UAAU;AAC7B,UAAI0rC,EAAoBa,GAAUvsC,CAAK,MAAM;AAC3C,cAAM,IAAI+rC,EAAsBvnC,GAAMxE,GAAOwsC,CAAQ;AAEvD,MAAAxsC,IAAQwrC,EAAexrC,GAAO,CAAC;AAAA,IACnC;AACE,WAAA2sC,GAAe3sC,GAAOwE,CAAI,GACnBxE;AAAA,EACT;AAYA,QAAM4sC,IAAkBvG,EAAgB,CAACrmC,GAAOwE,GAAMY,IAAMmmC,GAAwBpmC,IAAMmmC,MAA2B;AACnH,QAAI,OAAOtrC,KAAU,SAAU,OAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AACnF,QAAI,CAACqrC,EAAgBrrC,CAAK,EAAG,OAAM,IAAIgsC,EAAiBxnC,GAAM,cAAcxE,CAAK;AACjF,QAAIA,IAAQoF,KAAOpF,IAAQmF,EAAK,OAAM,IAAI6mC,EAAiBxnC,GAAM,MAAMY,CAAG,UAAUD,CAAG,IAAInF,CAAK;AAAA,EAClG,CAAC,GAYK6sC,KAAgBxG,EAAgB,CAACrmC,GAAOwE,GAAMY,IAAM,aAAaD,IAAM,eAAe;AAE1F,QAAI,OAAOnF,KAAU;AACnB,YAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AAEtD,QAAI,CAACqrC,EAAgBrrC,CAAK;AACxB,YAAM,IAAIgsC,EAAiBxnC,GAAM,cAAcxE,CAAK;AAEtD,QAAIA,IAAQoF,KAAOpF,IAAQmF;AACzB,YAAM,IAAI6mC,EAAiBxnC,GAAM,MAAMY,CAAG,UAAUD,CAAG,IAAInF,CAAK;AAAA,EAEpE,CAAC,GAWK2sC,KAAiBtG,EAAgB,CAACrmC,GAAOwE,GAAMsoC,IAAW,OAAU;AACxE,QAAI,OAAO9sC,KAAU;AACnB,YAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AAEtD,QAAI,CAACqrC,EAAgBrrC,CAAK;AACxB,YAAM,IAAIgsC,EAAiBxnC,GAAM,cAAcxE,CAAK;AAEtD,UAAMoF,IAAM0nC,IAAW,IAAI,GAErB3nC,KAAM;AACZ,QAAInF,IAAQoF,KAAOpF,IAAQmF;AACzB,YAAM,IAAI6mC,EAAiBxnC,GAAM,MAAMY,CAAG,UAAUD,EAAG,IAAInF,CAAK;AAAA,EAEpE,CAAC;AAUD,WAAS+sC,GAAe/sC,GAAOwE,GAAM;AACnC,QAAI,OAAOxE,KAAU,SAAU,OAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AAAA,EACrF;AAYA,WAASo4B,GAAep4B,GAAOwE,GAAMY,IAAM,QAAWD,GAAK;AACzD,QAAI,OAAOnF,KAAU,SAAU,OAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AACnF,QACGoF,KAAO,QAAQpF,IAAQoF,KACvBD,KAAO,QAAQnF,IAAQmF,MACtBC,KAAO,QAAQD,KAAO,SAASuiC,EAAY1nC,CAAK;AAElD,YAAM,IAAIgsC;AAAA,QACRxnC;AAAA,QACA,GAAGY,KAAO,OAAO,MAAMA,CAAG,KAAK,EAAE,GAAGA,KAAO,QAAQD,KAAO,OAAO,SAAS,EAAE,GAAGA,KAAO,OAAO,MAAMA,CAAG,KAAK,EAAE;AAAA,QAC7GnF;AAAA,MACN;AAAA,EAEA;AAWA,QAAMgtC,IAAgB3G,EAAgB,CAACrmC,GAAOwE,GAAMyoC,MAAU;AAC5D,QAAI,CAAC/B,EAAuB+B,GAAOjtC,CAAK,GAAG;AAKzC,YAAM+mC,KAAS,qBAJCoE;AAAA,QACdC,EAAkB6B,GAAO,CAACxlC,OAAO,OAAOA,MAAM,WAAW,IAAIA,EAAC,MAAMkkC,EAAOlkC,EAAC,CAAE;AAAA,QAC9E;AAAA,MACN;AAEI,YAAM,IAAIskC,EAAsBvnC,GAAMxE,GAAO+mC,EAAM;AAAA,IACvD;AAAA,EACA,CAAC;AAUD,WAASmG,GAAgBltC,GAAOwE,GAAM;AACpC,QAAI,OAAOxE,KAAU,UAAW,OAAM,IAAI4pC,EAAqBplC,GAAM,WAAWxE,CAAK;AAAA,EACvF;AAQA,WAASmtC,EAA6B/sC,GAAS4H,GAAKsS,GAAc;AAChE,WAAOla,KAAW,QAAQ,CAACqrC,EAA8BrrC,GAAS4H,CAAG,IAAIsS,IAAela,EAAQ4H,CAAG;AAAA,EACrG;AAcA,QAAMolC,IAAiB/G,EAAgB,CAACrmC,GAAOwE,GAAMpE,IAAU,SAAS;AACtE,UAAMitC,IAAaF,EAA6B/sC,GAAS,cAAc,EAAK,GACtEktC,KAAgBH,EAA6B/sC,GAAS,iBAAiB,EAAK;AAElF,QACG,CAFc+sC,EAA6B/sC,GAAS,YAAY,EAAK,KAExDJ,MAAU,QACvB,CAACqtC,KAAcpC,EAAajrC,CAAK,KACjC,OAAOA,KAAU,aAAa,CAACstC,MAAiB,OAAOttC,KAAU;AAElE,YAAM,IAAI4pC,EAAqBplC,GAAM,UAAUxE,CAAK;AAAA,EAExD,CAAC,GAcKutC,IAAqBlH,EAAgB,CAACrmC,GAAOwE,MAAS;AAC1D,QAAIxE,KAAS,QAAQ,OAAOA,KAAU,YAAY,OAAOA,KAAU;AACjE,YAAM,IAAI4pC,EAAqBplC,GAAM,gBAAgBxE,CAAK;AAAA,EAE9D,CAAC,GAWKwtC,IAAgBnH,EAAgB,CAACrmC,GAAOwE,GAAMipC,IAAY,MAAM;AACpE,QAAI,CAACxC,EAAajrC,CAAK;AACrB,YAAM,IAAI4pC,EAAqBplC,GAAM,SAASxE,CAAK;AAErD,QAAIA,EAAM,SAASytC,GAAW;AAC5B,YAAM1G,IAAS,uBAAuB0G,CAAS;AAC/C,YAAM,IAAI1B,EAAsBvnC,GAAMxE,GAAO+mC,CAAM;AAAA,IACvD;AAAA,EACA,CAAC;AAUD,WAAS2G,GAAoB1tC,GAAOwE,GAAM;AACxC,IAAAgpC,EAAcxtC,GAAOwE,CAAI;AACzB,aAASuN,IAAI,GAAGA,IAAI/R,EAAM,QAAQ+R;AAChC,MAAAg7B,GAAe/sC,EAAM+R,CAAC,GAAG,GAAGvN,CAAI,IAAIuN,CAAC,GAAG;AAAA,EAE5C;AAUA,WAAS47B,GAAqB3tC,GAAOwE,GAAM;AACzC,IAAAgpC,EAAcxtC,GAAOwE,CAAI;AACzB,aAASuN,IAAI,GAAGA,IAAI/R,EAAM,QAAQ+R;AAChC,MAAAm7B,GAAgBltC,EAAM+R,CAAC,GAAG,GAAGvN,CAAI,IAAIuN,CAAC,GAAG;AAAA,EAE7C;AAUA,WAAS67B,GAAyB5tC,GAAOwE,GAAM;AAC7C,IAAAgpC,EAAcxtC,GAAOwE,CAAI;AACzB,aAASuN,IAAI,GAAGA,IAAI/R,EAAM,QAAQ+R,KAAK;AACrC,YAAMu4B,IAAStqC,EAAM+R,CAAC,GAChB87B,KAAc,GAAGrpC,CAAI,IAAIuN,CAAC;AAChC,UAAIu4B,KAAU;AACZ,cAAM,IAAIV,EAAqBiE,IAAa,eAAevD,CAAM;AAEnE,MAAAD,GAAoBC,GAAQuD,EAAW;AAAA,IAC3C;AAAA,EACA;AAOA,WAASC,GAAmBxD,GAAQ9lC,IAAO,UAAU;AAEnD,QADAuoC,GAAezC,GAAQ9lC,CAAI,GACvBsmC,EAAQR,CAAM,MAAM;AACtB,YAAIQ,EAAQc,EAA2BtB,CAAM,CAAC,MAAM,SAC5C,IAAI2B,EAAmB3B,IAAS,yCAAyC,IAE3E,IAAI2B,EAAmB3B,CAAM;AAAA,EAEvC;AAUA,QAAMyD,IAAiB1H,EAAgB,CAAC3U,GAAQltB,IAAO,aAAa;AAClE,QAAI,CAAC4nC,EAAkB1a,CAAM;AAC3B,YAAM,IAAIkY,EAAqBplC,GAAM,CAAC,UAAU,cAAc,UAAU,GAAGktB,CAAM;AAAA,EAErF,CAAC;AAMD,WAASsc,EAAiBl6B,GAAMkgB,GAAU;AACxC,UAAMia,IAAqB/B,EAAkBlY,CAAQ,GAC/Cf,IAASnf,EAAK;AACpB,QAAIm6B,MAAuB,SAAShb,IAAS,MAAM;AACjD,YAAM,IAAI8Y,EAAsB,YAAY/X,GAAU,iCAAiCf,CAAM,EAAE;AAAA,EAEnG;AAUA,WAASib,GAAaC,GAAM3pC,IAAO,QAAQ4pC,IAAY,IAAM;AAC3D,QACG,OAAOD,KAAS,YAAY,OAAOA,KAAS,YAC5C,OAAOA,KAAS,YAAYtC,EAAoBsC,CAAI,EAAE,WAAW,KAClE,CAACA,MAAS,CAACA,MAAS,KACpBA,IAAO,SACNA,MAAS,KAAK,CAACC;AAEhB,YAAM,IAAItC,EAAoBtnC,GAAM2pC,GAAMC,CAAS;AAErD,WAAOD,IAAO;AAAA,EAChB;AASA,QAAM9D,KAAsBhE,EAAgB,CAACiE,GAAQ9lC,MAAS;AAC5D,QAAI8lC,MAAW,WAAcA,MAAW,QAAQ,OAAOA,KAAW,YAAY,EAAE,aAAaA;AAC3F,YAAM,IAAIV,EAAqBplC,GAAM,eAAe8lC,CAAM;AAAA,EAE9D,CAAC,GAUKC,KAAmBlE,EAAgB,CAACrmC,GAAOwE,MAAS;AACxD,QAAI,OAAOxE,KAAU,WAAY,OAAM,IAAI4pC,EAAqBplC,GAAM,YAAYxE,CAAK;AAAA,EACzF,CAAC,GAUKquC,IAAwBhI,EAAgB,CAACrmC,GAAOwE,MAAS;AAC7D,QAAI,OAAOxE,KAAU,cAAcmsC,EAAgBnsC,CAAK,EAAG,OAAM,IAAI4pC,EAAqBplC,GAAM,YAAYxE,CAAK;AAAA,EACnH,CAAC,GAUKsuC,IAAoBjI,EAAgB,CAACrmC,GAAOwE,MAAS;AACzD,QAAIxE,MAAU,OAAW,OAAM,IAAI4pC,EAAqBplC,GAAM,aAAaxE,CAAK;AAAA,EAClF,CAAC;AAQD,WAASuuC,EAAcvuC,GAAOwE,GAAMgqC,GAAO;AACzC,QAAI,CAACtD,EAAuBsD,GAAOxuC,CAAK;AACtC,YAAM,IAAI4pC,EAAqBplC,GAAM,KAAK2mC,EAAmBqD,GAAO,GAAG,CAAC,MAAMxuC,CAAK;AAAA,EAEvF;AAUA,QAAMyuC,KAAkB;AAMxB,WAASC,EAAyB1uC,GAAOwE,GAAM;AAC7C,QAAI,OAAOxE,IAAU,OAAe,CAAC0rC,EAAoB+C,IAAiBzuC,CAAK;AAC7E,YAAM,IAAI+rC;AAAA,QACRvnC;AAAA,QACAxE;AAAA,QACA;AAAA,MACN;AAAA,EAEA;AAMA,WAAS2uC,GAAwBC,GAAO;AACtC,QAAI,OAAOA,KAAU;AACnB,aAAAF,EAAyBE,GAAO,OAAO,GAChCA;AACF,QAAI3D,EAAa2D,CAAK,GAAG;AAC9B,YAAMC,IAAcD,EAAM;AAC1B,UAAIt3B,IAAS;AACb,UAAIu3B,MAAgB;AAClB,eAAOv3B;AAET,eAASvF,IAAI,GAAGA,IAAI88B,GAAa98B,KAAK;AACpC,cAAM+8B,KAAOF,EAAM78B,CAAC;AACpB,QAAA28B,EAAyBI,IAAM,OAAO,GACtCx3B,KAAUw3B,IACN/8B,MAAM88B,IAAc,MACtBv3B,KAAU;AAAA,MAElB;AACI,aAAOA;AAAA,IACX;AACE,UAAM,IAAIy0B;AAAA,MACR;AAAA,MACA6C;AAAA,MACA;AAAA,IACJ;AAAA,EACA;AACA,SAAAG,KAAiB;AAAA,IACf,SAAA1C;AAAA,IACA,UAAAC;AAAA,IACA,eAAAG;AAAA,IACA,eAAAe;AAAA,IACA,qBAAAE;AAAA,IACA,sBAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,iBAAAV;AAAA,IACA,gBAAAa;AAAA,IACA,oBAAAR;AAAA,IACA,kBAAAS;AAAA,IACA,kBAAAzD;AAAA,IACA,eAAAsC;AAAA,IACA,iBAAAD;AAAA,IACA,gBAAAxU;AAAA,IACA,gBAAAgV;AAAA,IACA,eAAAJ;AAAA,IACA,uBAAAqB;AAAA,IACA,cAAAH;AAAA,IACA,oBAAAJ;AAAA,IACA,gBAAAf;AAAA,IACA,gBAAAJ;AAAA,IACA,mBAAA2B;AAAA,IACA,eAAAC;AAAA,IACA,qBAAAlE;AAAA,IACA,yBAAAsE;AAAA,EACF;;;;;;AChhBA,MAAIK,IAAU7H,GAAA,UAAiB,CAAA,GAO3B8H,GACAC;AAEJ,WAASC,IAAmB;AACxB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACrD;AACA,WAASC,IAAuB;AAC5B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AACA,GAAC,WAAY;AACT,QAAI;AACA,MAAI,OAAO,cAAe,aACtBH,IAAmB,aAEnBA,IAAmBE;AAAA,IAE/B,QAAgB;AACR,MAAAF,IAAmBE;AAAA,IAC3B;AACI,QAAI;AACA,MAAI,OAAO,gBAAiB,aACxBD,IAAqB,eAErBA,IAAqBE;AAAA,IAEjC,QAAgB;AACR,MAAAF,IAAqBE;AAAA,IAC7B;AAAA,EACA,GAAC;AACD,WAASC,EAAWC,GAAK;AACrB,QAAIL,MAAqB;AAErB,aAAO,WAAWK,GAAK,CAAC;AAG5B,SAAKL,MAAqBE,KAAoB,CAACF,MAAqB;AAChE,aAAAA,IAAmB,YACZ,WAAWK,GAAK,CAAC;AAE5B,QAAI;AAEA,aAAOL,EAAiBK,GAAK,CAAC;AAAA,IACtC,QAAc;AACN,UAAI;AAEA,eAAOL,EAAiB,KAAK,MAAMK,GAAK,CAAC;AAAA,MACrD,QAAkB;AAEN,eAAOL,EAAiB,KAAK,MAAMK,GAAK,CAAC;AAAA,MACrD;AAAA,IACA;AAAA,EAGA;AACA,WAASC,EAAgBC,GAAQ;AAC7B,QAAIN,MAAuB;AAEvB,aAAO,aAAaM,CAAM;AAG9B,SAAKN,MAAuBE,KAAuB,CAACF,MAAuB;AACvE,aAAAA,IAAqB,cACd,aAAaM,CAAM;AAE9B,QAAI;AAEA,aAAON,EAAmBM,CAAM;AAAA,IACxC,QAAe;AACP,UAAI;AAEA,eAAON,EAAmB,KAAK,MAAMM,CAAM;AAAA,MACvD,QAAmB;AAGP,eAAON,EAAmB,KAAK,MAAMM,CAAM;AAAA,MACvD;AAAA,IACA;AAAA,EAIA;AACA,MAAIC,IAAQ,CAAA,GACRC,IAAW,IACXC,GACAC,IAAa;AAEjB,WAASC,IAAkB;AACvB,IAAI,CAACH,KAAY,CAACC,MAGlBD,IAAW,IACPC,EAAa,SACbF,IAAQE,EAAa,OAAOF,CAAK,IAEjCG,IAAa,IAEbH,EAAM,UACNK,EAAU;AAAA,EAElB;AAEA,WAASA,IAAa;AAClB,QAAI,CAAAJ,GAGJ;AAAA,UAAI70B,IAAUw0B,EAAWQ,CAAe;AACxC,MAAAH,IAAW;AAGX,eADIhnC,IAAM+mC,EAAM,QACV/mC,KAAK;AAGP,aAFAinC,IAAeF,GACfA,IAAQ,CAAA,GACD,EAAEG,IAAalnC;AAClB,UAAIinC,KACAA,EAAaC,CAAU,EAAE,IAAG;AAGpC,QAAAA,IAAa,IACblnC,IAAM+mC,EAAM;AAAA,MACpB;AACI,MAAAE,IAAe,MACfD,IAAW,IACXH,EAAgB10B,CAAO;AAAA;AAAA,EAC3B;AAEA,EAAAm0B,EAAQ,WAAW,SAAUM,GAAK;AAC9B,QAAIzuC,IAAO,IAAI,MAAM,UAAU,SAAS,CAAC;AACzC,QAAI,UAAU,SAAS;AACnB,eAASkR,IAAI,GAAGA,IAAI,UAAU,QAAQA;AAClC,QAAAlR,EAAKkR,IAAI,CAAC,IAAI,UAAUA,CAAC;AAGjC,IAAA09B,EAAM,KAAK,IAAIM,EAAKT,GAAKzuC,CAAI,CAAC,GAC1B4uC,EAAM,WAAW,KAAK,CAACC,KACvBL,EAAWS,CAAU;AAAA,EAE7B;AAGA,WAASC,EAAKT,GAAKjb,GAAO;AACtB,SAAK,MAAMib,GACX,KAAK,QAAQjb;AAAA,EACjB;AACA,EAAA0b,EAAK,UAAU,MAAM,WAAY;AAC7B,SAAK,IAAI,MAAM,MAAM,KAAK,KAAK;AAAA,EACnC,GACAf,EAAQ,QAAQ,WAChBA,EAAQ,UAAU,IAClBA,EAAQ,MAAM,CAAA,GACdA,EAAQ,OAAO,CAAA,GACfA,EAAQ,UAAU,IAClBA,EAAQ,WAAW,CAAA;AAEnB,WAAS5N,IAAO;AAAA,EAAA;AAEhB,SAAA4N,EAAQ,KAAK5N,GACb4N,EAAQ,cAAc5N,GACtB4N,EAAQ,OAAO5N,GACf4N,EAAQ,MAAM5N,GACd4N,EAAQ,iBAAiB5N,GACzB4N,EAAQ,qBAAqB5N,GAC7B4N,EAAQ,OAAO5N,GACf4N,EAAQ,kBAAkB5N,GAC1B4N,EAAQ,sBAAsB5N,GAE9B4N,EAAQ,YAAY,SAAUxqC,GAAM;AAAE,WAAO,CAAA;AAAA,EAAE,GAE/CwqC,EAAQ,UAAU,SAAUxqC,GAAM;AAC9B,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACtD,GAEAwqC,EAAQ,MAAM,WAAY;AAAE,WAAO;AAAA,EAAG,GACtCA,EAAQ,QAAQ,SAAUnZ,GAAK;AAC3B,UAAM,IAAI,MAAM,gCAAgC;AAAA,EACpD,GACAmZ,EAAQ,QAAQ,WAAW;AAAE,WAAO;AAAA,EAAE;;;;;;ACrLtC,QAAM,EAAE,qBAAAgB,GAAqB,gBAAAC,GAAgB,WAAAC,EAAS,IAAK3d,GAAA,GAMrD4d,IAAeD,EAAU,yBAAyB,GAClDE,IAAaF,EAAU,uBAAuB,GAC9CG,IAAcH,EAAU,wBAAwB,GAChDI,IAAcJ,EAAU,wBAAwB,GAChDK,IAAeL,EAAU,yBAAyB,GAClDM,IAAmBN,EAAU,kCAAkC,GAC/DO,IAA2BP,EAAU,0CAA0C;AACrF,WAASQ,EAAqB11B,GAAK21B,IAAS,IAAO;AACjD,QAAIC;AACJ,WAAO,CAAC,EAEJ51B,KACA,OAAOA,EAAI,QAAS,cACpB,OAAOA,EAAI,MAAO,eACjB,CAAC21B,KAAW,OAAO31B,EAAI,SAAU,cAAc,OAAOA,EAAI,UAAW,gBACrE,CAACA,EAAI,oBACF41B,IAAsB51B,EAAI,oBAAoB,QAAQ41B,MAAwB,SAC5E,SACAA,EAAoB,cAAc;AAAA,KAEvC,CAAC51B,EAAI,kBAAkBA,EAAI;AAAA,EAGlC;AACA,WAAS61B,EAAqB71B,GAAK;AACjC,QAAI81B;AACJ,WAAO,CAAC,EAEJ91B,KACA,OAAOA,EAAI,SAAU,cACrB,OAAOA,EAAI,MAAO,eACjB,CAACA,EAAI,oBACF81B,IAAsB91B,EAAI,oBAAoB,QAAQ81B,MAAwB,SAC5E,SACAA,EAAoB,cAAc;AAAA,EAG9C;AACA,WAASC,EAAmB/1B,GAAK;AAC/B,WAAO,CAAC,EACNA,KACA,OAAOA,EAAI,QAAS,cACpBA,EAAI,kBACJ,OAAOA,EAAI,MAAO,cAClB,OAAOA,EAAI,SAAU;AAAA,EAEzB;AACA,WAASg2B,EAAah2B,GAAK;AACzB,WACEA,MACCA,EAAI,kBACHA,EAAI,kBACH,OAAOA,EAAI,SAAU,cAAc,OAAOA,EAAI,MAAO,cACrD,OAAOA,EAAI,QAAS,cAAc,OAAOA,EAAI,MAAO;AAAA,EAE3D;AACA,WAASi2B,EAAiBj2B,GAAK;AAC7B,WAAO,CAAC,EACNA,KACA,CAACg2B,EAAah2B,CAAG,KACjB,OAAOA,EAAI,eAAgB,cAC3B,OAAOA,EAAI,aAAc,cACzB,OAAOA,EAAI,UAAW;AAAA,EAE1B;AACA,WAASk2B,EAAiBl2B,GAAK;AAC7B,WAAO,CAAC,EAAEA,KAAO,CAACg2B,EAAah2B,CAAG,KAAK,OAAOA,EAAI,aAAc,cAAc,OAAOA,EAAI,SAAU;AAAA,EACrG;AACA,WAASm2B,EAAkBn2B,GAAK;AAC9B,WAAO,CAAC,EAAEA,KAAO,CAACg2B,EAAah2B,CAAG,KAAK,OAAOA,EAAI,YAAa,YAAY,OAAOA,EAAI,YAAa;AAAA,EACrG;AACA,WAASo2B,EAAYp2B,GAAK;AACxB,WAAOi2B,EAAiBj2B,CAAG,KAAKk2B,EAAiBl2B,CAAG,KAAKm2B,EAAkBn2B,CAAG;AAAA,EAChF;AACA,WAASq2B,EAAWr2B,GAAKs2B,GAAS;AAChC,WAAIt2B,KAAO,OAAa,KACpBs2B,MAAY,KAAa,OAAOt2B,EAAIg1B,CAAmB,KAAM,aAC7DsB,MAAY,KAAc,OAAOt2B,EAAIi1B,CAAc,KAAM,aACtD,OAAOj1B,EAAIg1B,CAAmB,KAAM,cAAc,OAAOh1B,EAAIi1B,CAAc,KAAM;AAAA,EAC1F;AACA,WAASh3B,EAAYs4B,GAAQ;AAC3B,QAAI,CAACP,EAAaO,CAAM,EAAG,QAAO;AAClC,UAAMC,IAASD,EAAO,gBAChBE,IAASF,EAAO,gBAChBhtC,IAAQitC,KAAUC;AACxB,WAAO,CAAC,EAAEF,EAAO,aAAaA,EAAOpB,CAAY,KAAM5rC,KAAU,QAA+BA,EAAM;AAAA,EACxG;AAGA,WAASmtC,EAAgBH,GAAQ;AAC/B,QAAI,CAACV,EAAqBU,CAAM,EAAG,QAAO;AAC1C,QAAIA,EAAO,kBAAkB,GAAM,QAAO;AAC1C,UAAMC,IAASD,EAAO;AACtB,WAAIC,KAAW,QAAgCA,EAAO,UAAgB,KAClE,OAA8DA,GAAO,SAAW,YAAkB,OAC/FA,EAAO;AAAA,EAChB;AAGA,WAASG,EAAmBJ,GAAQZ,GAAQ;AAC1C,QAAI,CAACE,EAAqBU,CAAM,EAAG,QAAO;AAC1C,QAAIA,EAAO,qBAAqB,GAAM,QAAO;AAC7C,UAAMC,IAASD,EAAO;AACtB,WAAIC,KAAW,QAAgCA,EAAO,UAAgB,KAClE,OAA8DA,GAAO,YAAc,YAAkB,OAClG,CAAC,EAAEA,EAAO,YAAab,MAAW,MAASa,EAAO,UAAU,MAAQA,EAAO,WAAW;AAAA,EAC/F;AAGA,WAASI,EAAgBL,GAAQ;AAC/B,QAAI,CAACb,EAAqBa,CAAM,EAAG,QAAO;AAC1C,QAAIA,EAAO,kBAAkB,GAAM,QAAO;AAC1C,UAAME,IAASF,EAAO;AACtB,WAAI,CAACE,KAAUA,EAAO,UAAgB,KAClC,OAA8DA,GAAO,SAAW,YAAkB,OAC/FA,EAAO;AAAA,EAChB;AAGA,WAASI,EAAmBN,GAAQZ,GAAQ;AAC1C,QAAI,CAACD,EAAqBa,CAAM,EAAG,QAAO;AAC1C,UAAME,IAASF,EAAO;AACtB,WAAIE,KAAW,QAAgCA,EAAO,UAAgB,KAClE,OAA8DA,GAAO,cAAgB,YAAkB,OACpG,CAAC,EAAEA,EAAO,cAAed,MAAW,MAASc,EAAO,UAAU,MAAQA,EAAO,WAAW;AAAA,EACjG;AACA,WAASK,EAAWP,GAAQ;AAC1B,WAAIA,KAAUA,EAAOlB,CAAW,KAAK,OAAakB,EAAOlB,CAAW,IAChE,OAA8DkB,GAAO,YAAc,YAAkB,OACrGt4B,EAAYs4B,CAAM,IAAU,KACzBb,EAAqBa,CAAM,KAAKA,EAAO,YAAY,CAACM,EAAmBN,CAAM;AAAA,EACtF;AACA,WAASQ,GAAWR,GAAQ;AAC1B,WAAIA,KAAUA,EAAOjB,CAAW,KAAK,OAAaiB,EAAOjB,CAAW,IAChE,OAA8DiB,GAAO,YAAc,YAAkB,OACrGt4B,EAAYs4B,CAAM,IAAU,KACzBV,EAAqBU,CAAM,KAAKA,EAAO,YAAY,CAACG,EAAgBH,CAAM;AAAA,EACnF;AACA,WAASS,EAAWT,GAAQ1kB,GAAM;AAChC,WAAKmkB,EAAaO,CAAM,IAGpBt4B,EAAYs4B,CAAM,IACb,KAEJ,EAAkD1kB,GAAK,aAAc,MAASilB,EAAWP,CAAM,KAG7C1kB,GAAK,aAAc,MAASklB,GAAWR,CAAM,KAR3F;AAAA,EAYX;AACA,WAASU,EAAkBV,GAAQ;AACjC,QAAIW,GAAuBC;AAC3B,WAAKnB,EAAaO,CAAM,IAGpBA,EAAO,kBACFA,EAAO,mBAERW,KACLC,IAAyBZ,EAAO,oBAAoB,QAAQY,MAA2B,SACpF,SACAA,EAAuB,aAAa,QAAQD,MAA0B,SACxEA,IACA,OAVK;AAAA,EAWX;AACA,WAASE,EAAkBb,GAAQ;AACjC,QAAIc,GAAuBC;AAC3B,WAAKtB,EAAaO,CAAM,IAGpBA,EAAO,kBACFA,EAAO,mBAERc,KACLC,IAAyBf,EAAO,oBAAoB,QAAQe,MAA2B,SACpF,SACAA,EAAuB,aAAa,QAAQD,MAA0B,SACxEA,IACA,OAVK;AAAA,EAWX;AACA,WAASE,EAAShB,GAAQ;AACxB,QAAI,CAACP,EAAaO,CAAM;AACtB,aAAO;AAET,QAAI,OAAOA,EAAO,UAAW;AAC3B,aAAOA,EAAO;AAEhB,UAAMC,IAASD,EAAO,gBAChBE,IAASF,EAAO;AACtB,WACE,OAA8DC,GAAO,UAAY,aACjF,OAA8DC,GAAO,UAAY,YAGxBD,GAAO,UACPC,GAAO,SAG9D,OAAOF,EAAO,WAAY,aAAaiB,GAAkBjB,CAAM,IAC1DA,EAAO,UAET;AAAA,EACT;AACA,WAASiB,GAAkBjB,GAAQ;AACjC,WACE,OAAOA,EAAO,WAAY,aAC1B,OAAOA,EAAO,qBAAsB,aACpC,OAAOA,EAAO,sBAAuB,aACrC,OAAOA,EAAO,mBAAoB;AAAA,EAEtC;AACA,WAASkB,GAAiBlB,GAAQ;AAChC,WAAO,OAAOA,EAAO,YAAa,aAAaiB,GAAkBjB,CAAM;AAAA,EACzE;AACA,WAASmB,GAAgBnB,GAAQ;AAC/B,QAAIoB;AACJ,WACE,OAAOpB,EAAO,cAAe,aAC7B,OAAOA,EAAO,WAAY,eACxBoB,IAAcpB,EAAO,SAAS,QAAQoB,MAAgB,SAAY,SAAYA,EAAY,sBAC1F;AAAA,EAEN;AACA,WAASC,GAAcrB,GAAQ;AAC7B,QAAI,CAACP,EAAaO,CAAM,EAAG,QAAO;AAClC,UAAMC,IAASD,EAAO,gBAChBE,IAASF,EAAO,gBAChBhtC,IAAQitC,KAAUC;AACxB,WACG,CAACltC,KAASkuC,GAAiBlB,CAAM,KAAM,CAAC,EAAEhtC,KAASA,EAAM,eAAeA,EAAM,aAAaA,EAAM,WAAW;AAAA,EAEjH;AACA,WAASsuC,EAAYtB,GAAQ;AAC3B,QAAIuB;AACJ,WAAO,CAAC,EACNvB,OACEuB,IAAuBvB,EAAOhB,CAAY,OAAO,QAAQuC,MAAyB,SAChFA,IACAvB,EAAO,mBAAmBA,EAAO;AAAA,EAEzC;AACA,WAASwB,GAAUxB,GAAQ;AACzB,QAAIjtC,GACFM,GACA8F,GACAc,IACAwnC,IACAC,IACAC,IACAC,GACAC,GACAC;AACF,WAAO,CAAC,EACN9B,OACEjtC,KACCM,KACE8F,KACEc,MACEwnC,MACEC,KAAqB1B,EAAOnB,CAAU,OAAO,QAAQ6C,OAAuB,SACzEA,KACA1B,EAAO,qBAAqB,QAAQyB,OAAU,SAChDA,KACAzB,EAAO,qBAAqB,QAAQ/lC,OAAU,SAChDA,MACC0nC,KAAyB3B,EAAO,oBAAoB,QAAQ2B,OAA2B,SACxF,SACAA,GAAuB,kBAAkB,QAAQxoC,MAAU,SAC7DA,KACCyoC,IAAyB5B,EAAO,oBAAoB,QAAQ4B,MAA2B,SACxF,SACAA,EAAuB,kBAAkB,QAAQvuC,MAAU,SAC7DA,KACCwuC,IAAyB7B,EAAO,oBAAoB,QAAQ6B,MAA2B,SACxF,SACAA,EAAuB,aAAa,QAAQ9uC,MAAS,SACvDA,IACC,GAAA+uC,KAAyB9B,EAAO,oBAAoB,QAAQ8B,OAA2B,WAExFA,GAAuB;AAAA,EAE/B;AACA,SAAAC,KAAiB;AAAA,IACf,aAAAr6B;AAAA,IACA,cAAAk3B;AAAA,IACA,aAAA0C;AAAA,IACA,cAAAtC;AAAA,IACA,WAAAwC;AAAA,IACA,YAAA3C;AAAA,IACA,YAAA0B;AAAA,IACA,aAAAzB;AAAA,IACA,kBAAAG;AAAA,IACA,0BAAAC;AAAA,IACA,aAAAH;AAAA,IACA,UAAAiC;AAAA,IACA,oBAAAxB;AAAA,IACA,YAAAiB;AAAA,IACA,YAAAX;AAAA,IACA,sBAAAX;AAAA,IACA,kBAAAO;AAAA,IACA,iBAAAW;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAO;AAAA,IACA,cAAApB;AAAA,IACA,aAAAI;AAAA,IACA,YAAAW;AAAA,IACA,sBAAAlB;AAAA,IACA,kBAAAK;AAAA,IACA,iBAAAQ;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAM;AAAA,IACA,iBAAAS;AAAA,IACA,kBAAAD;AAAA,IACA,eAAAG;AAAA,IACA,mBAAAzB;AAAA,EACF;;;;;;AC/TA,QAAMnC,IAAUzc,GAAA,GAIV,EAAE,YAAAmU,GAAY,OAAAT,EAAK,IAAKzT,GAAA,GACxB,EAAE,sBAAAoX,GAAsB,4BAAA2J,MAA+BtN,GACvD,EAAE,cAAAuN,GAAc,MAAA3L,EAAI,IAAKgC,GAAA,GACzB,EAAE,qBAAAQ,GAAqB,kBAAAE,GAAkB,gBAAA6C,GAAgB,iBAAAF,EAAe,IAAKlD,GAAA,GAC7E,EAAE,SAAAyJ,GAAS,sBAAAC,GAAsB,eAAA3J,EAAa,IAAKE,GAAA,GACnD;AAAA,IACJ,UAAAsI;AAAA,IACA,YAAAT;AAAA,IACA,sBAAApB;AAAA,IACA,kBAAAO;AAAA,IACA,oBAAAY;AAAA,IACA,mBAAAO;AAAA,IACA,YAAAL;AAAA,IACA,sBAAAlB;AAAA,IACA,kBAAAK;AAAA,IACA,oBAAAS;AAAA,IACA,mBAAAM;AAAA,IACA,cAAAjB;AAAA,IACA,eAAe2C;AAAA,IACf,kBAAAnD;AAAA,EACF,IAAI7F,GAAA;AACJ,MAAIiJ;AACJ,WAASC,EAAUtC,GAAQ;AACzB,WAAOA,EAAO,aAAa,OAAOA,EAAO,SAAU;AAAA,EACrD;AACA,QAAMuC,KAAM,MAAM;AAAA,EAAA;AAClB,WAASC,GAAIxC,GAAQnxC,IAASikB,GAAU;AACtC,QAAI2vB,GAAmBC;AAYvB,QAXI,UAAU,WAAW,KACvB5vB,IAAWjkB,IACXA,KAAUozC,KACDpzC,MAAW,OACpBA,KAAUozC,IAEVpG,EAAehtC,IAAS,SAAS,GAEnCmqC,EAAiBlmB,GAAU,UAAU,GACrCgmB,EAAoBjqC,GAAQ,QAAQ,gBAAgB,GACpDikB,IAAWwjB,EAAKxjB,CAAQ,GACpB4sB,EAAiBM,CAAM,KAAKL,EAAiBK,CAAM;AACrD,aAAO2C,GAAO3C,GAAQnxC,IAASikB,CAAQ;AAEzC,QAAI,CAAC2sB,GAAaO,CAAM;AACtB,YAAM,IAAI3H,EAAqB,UAAU,CAAC,kBAAkB,kBAAkB,QAAQ,GAAG2H,CAAM;AAEjG,UAAM4C,KACHH,IAAoB5zC,GAAQ,cAAc,QAAQ4zC,MAAsB,SACrEA,IACAtD,EAAqBa,CAAM,GAC3B6C,MACHH,IAAoB7zC,GAAQ,cAAc,QAAQ6zC,MAAsB,SACrEA,IACApD,EAAqBU,CAAM,GAC3BC,KAASD,EAAO,gBAChBE,KAASF,EAAO,gBAChB8C,KAAiB,MAAM;AAC3B,MAAK9C,EAAO,YACV+C,GAAQ;AAAA,IAEd;AAKE,QAAI1B,IACFe,EAAepC,CAAM,KAAKb,EAAqBa,CAAM,MAAM4C,KAAYtD,EAAqBU,CAAM,MAAM6C,IACtGG,IAAmB5C,EAAmBJ,GAAQ,EAAK;AACvD,UAAM+C,KAAW,MAAM;AAQrB,MAPAC,IAAmB,IAIfhD,EAAO,cACTqB,IAAgB,KAEd,EAAAA,MAAkB,CAACrB,EAAO,YAAY4C,QAGtC,CAACA,KAAYK,OACfnwB,EAAS,KAAKktB,CAAM;AAAA,IAE1B;AACE,QAAIiD,KAAmB3C,EAAmBN,GAAQ,EAAK;AACvD,UAAMkD,KAAQ,MAAM;AAQlB,MAPAD,KAAmB,IAIfjD,EAAO,cACTqB,IAAgB,KAEd,EAAAA,MAAkB,CAACrB,EAAO,YAAY6C,SAGtC,CAACA,MAAYG,MACflwB,EAAS,KAAKktB,CAAM;AAAA,IAE1B,GACQmD,IAAU,CAACzX,MAAQ;AACvB,MAAA5Y,EAAS,KAAKktB,GAAQtU,CAAG;AAAA,IAC7B;AACE,QAAI0X,IAASpC,EAAShB,CAAM;AAC5B,UAAMqD,IAAU,MAAM;AACpB,MAAAD,IAAS;AACT,YAAME,IAAU5C,EAAkBV,CAAM,KAAKa,EAAkBb,CAAM;AACrE,UAAIsD,KAAW,OAAOA,KAAY;AAChC,eAAOxwB,EAAS,KAAKktB,GAAQsD,CAAO;AAEtC,UAAIV,KAAY,CAACK,MAAoB9D,EAAqBa,GAAQ,EAAI,KAChE,CAACM,EAAmBN,GAAQ,EAAK;AAAG,eAAOltB,EAAS,KAAKktB,GAAQ,IAAIgC,EAA0B,CAAE;AAEvG,UAAIa,MAAY,CAACG,KACX,CAAC5C,EAAmBJ,GAAQ,EAAK;AAAG,eAAOltB,EAAS,KAAKktB,GAAQ,IAAIgC,EAA0B,CAAE;AAEvG,MAAAlvB,EAAS,KAAKktB,CAAM;AAAA,IACxB,GACQuD,KAAW,MAAM;AACrB,MAAAH,IAAS;AACT,YAAME,IAAU5C,EAAkBV,CAAM,KAAKa,EAAkBb,CAAM;AACrE,UAAIsD,KAAW,OAAOA,KAAY;AAChC,eAAOxwB,EAAS,KAAKktB,GAAQsD,CAAO;AAEtC,MAAAxwB,EAAS,KAAKktB,CAAM;AAAA,IACxB,GACQwD,IAAY,MAAM;AACtB,MAAAxD,EAAO,IAAI,GAAG,UAAU+C,EAAQ;AAAA,IACpC;AACE,IAAIT,EAAUtC,CAAM,KAClBA,EAAO,GAAG,YAAY+C,EAAQ,GACzB1B,KACHrB,EAAO,GAAG,SAASqD,CAAO,GAExBrD,EAAO,MACTwD,EAAS,IAETxD,EAAO,GAAG,WAAWwD,CAAS,KAEvBX,MAAY,CAAC5C,OAEtBD,EAAO,GAAG,OAAO8C,EAAc,GAC/B9C,EAAO,GAAG,SAAS8C,EAAc,IAI/B,CAACzB,KAAiB,OAAOrB,EAAO,WAAY,aAC9CA,EAAO,GAAG,WAAWqD,CAAO,GAE9BrD,EAAO,GAAG,OAAOkD,EAAK,GACtBlD,EAAO,GAAG,UAAU+C,EAAQ,GACxBl0C,GAAQ,UAAU,MACpBmxC,EAAO,GAAG,SAASmD,CAAO,GAE5BnD,EAAO,GAAG,SAASqD,CAAO,GACtBD,IACF3F,EAAQ,SAAS4F,CAAO,IAEvBpD,MAAW,QAAgCA,GAAO,gBAClDC,MAAW,QAAgCA,GAAO,eAE9CmB,KACH5D,EAAQ,SAAS8F,EAAQ,KAG3B,CAACX,MACA,CAACvB,KAAiBd,EAAWP,CAAM,OACnCgD,KAAoBxC,EAAWR,CAAM,MAAM,OAI5C,CAAC6C,OACA,CAACxB,KAAiBb,EAAWR,CAAM,OACnCiD,MAAoB1C,EAAWP,CAAM,MAAM,OAGnCE,MAAUF,EAAO,OAAOA,EAAO,YACxCvC,EAAQ,SAAS8F,EAAQ;AAE3B,UAAME,KAAU,MAAM;AACpB,MAAA3wB,IAAWyvB,IACXvC,EAAO,eAAe,WAAWqD,CAAO,GACxCrD,EAAO,eAAe,YAAY+C,EAAQ,GAC1C/C,EAAO,eAAe,SAASqD,CAAO,GACtCrD,EAAO,eAAe,WAAWwD,CAAS,GACtCxD,EAAO,OAAKA,EAAO,IAAI,eAAe,UAAU+C,EAAQ,GAC5D/C,EAAO,eAAe,OAAO8C,EAAc,GAC3C9C,EAAO,eAAe,SAAS8C,EAAc,GAC7C9C,EAAO,eAAe,UAAU+C,EAAQ,GACxC/C,EAAO,eAAe,OAAOkD,EAAK,GAClClD,EAAO,eAAe,SAASmD,CAAO,GACtCnD,EAAO,eAAe,SAASqD,CAAO;AAAA,IAC1C;AACE,QAAIx0C,GAAQ,UAAU,CAACu0C,GAAQ;AAC7B,YAAM3J,IAAQ,MAAM;AAElB,cAAMiK,IAAc5wB;AACpB,QAAA2wB,GAAO,GACPC,EAAY;AAAA,UACV1D;AAAA,UACA,IAAI7K,EAAW,QAAW;AAAA,YACxB,OAAOtmC,GAAQ,OAAO;AAAA,WACvB;AAAA,QACT;AAAA,MACA;AACI,UAAIA,GAAQ,OAAO;AACjB,QAAA4uC,EAAQ,SAAShE,CAAK;AAAA,WACjB;AACL,QAAA4I,IAAmBA,KAAoB/J,KAA2B;AAClE,cAAMqL,IAAatB,EAAiBxzC,GAAQ,QAAQ4qC,CAAK,GACnDmK,IAAmB9wB;AACzB,QAAAA,IAAWwjB,EAAK,IAAIhnC,MAAS;AAC3B,UAAAq0C,EAAWnL,CAAa,EAAC,GACzBoL,EAAiB,MAAM5D,GAAQ1wC,CAAI;AAAA,QAC3C,CAAO;AAAA,MACP;AAAA,IACA;AACE,WAAOm0C;AAAA,EACT;AACA,WAASd,GAAO3C,GAAQnxC,IAASikB,GAAU;AACzC,QAAI+wB,IAAY,IACZpK,IAAQ8I;AACZ,QAAI1zC,GAAQ;AAUV,UATA4qC,IAAQ,MAAM;AACZ,QAAAoK,IAAY,IACZ/wB,EAAS;AAAA,UACPktB;AAAA,UACA,IAAI7K,EAAW,QAAW;AAAA,YACxB,OAAOtmC,GAAQ,OAAO;AAAA,WACvB;AAAA,QACT;AAAA,MACA,GACQA,GAAQ,OAAO;AACjB,QAAA4uC,EAAQ,SAAShE,CAAK;AAAA,WACjB;AACL,QAAA4I,IAAmBA,KAAoB/J,KAA2B;AAClE,cAAMqL,KAAatB,EAAiBxzC,GAAQ,QAAQ4qC,CAAK,GACnDmK,KAAmB9wB;AACzB,QAAAA,IAAWwjB,EAAK,IAAIhnC,OAAS;AAC3B,UAAAq0C,GAAWnL,CAAa,EAAC,GACzBoL,GAAiB,MAAM5D,GAAQ1wC,EAAI;AAAA,QAC3C,CAAO;AAAA,MACP;AAEE,UAAMw0C,IAAa,IAAIx0C,OAAS;AAC9B,MAAKu0C,KACHpG,EAAQ,SAAS,MAAM3qB,EAAS,MAAMktB,GAAQ1wC,EAAI,CAAC;AAAA,IAEzD;AACE,WAAA6yC,EAAqBnC,EAAOf,CAAgB,EAAE,SAAS6E,GAAYA,CAAU,GACtEvB;AAAA,EACT;AACA,WAASwB,GAAS/D,GAAQ1kB,IAAM;AAC9B,QAAI0oB;AACJ,QAAIC,IAAc;AAClB,WAAI3oB,OAAS,SACXA,KAAO2mB,KAEJ+B,IAAQ1oB,QAAU,QAAQ0oB,MAAU,UAAaA,EAAM,YAC1DrI,EAAgBrgB,GAAK,SAAS,SAAS,GACvC2oB,IAAc3oB,GAAK,UAEd,IAAI4mB,EAAQ,CAACx7B,GAASmxB,MAAW;AACtC,YAAM4L,KAAUjB,GAAIxC,GAAQ1kB,IAAM,CAACoQ,OAAQ;AACzC,QAAIuY,KACFR,GAAO,GAEL/X,KACFmM,EAAOnM,EAAG,IAEVhlB,EAAO;AAAA,MAEf,CAAK;AAAA,IACL,CAAG;AAAA,EACH;AACAw9B,SAAAA,GAAA,UAAiB1B,IACjB0B,GAAA,QAAA,WAA0BH;;;;;;ACzR1B,QAAMtG,IAAUzc,GAAA,GAIV;AAAA,IACJ,oBAAAgU;AAAA,IACA,OAAO,EAAE,uBAAAmP,EAAqB;AAAA,IAC9B,YAAAhP;AAAA,EACF,IAAIlU,GAAA,GACE,EAAE,QAAAmjB,EAAM,IAAK9L,GAAA,GACb,EAAE,cAAAsG,GAAc,aAAAl3B,GAAa,YAAA+4B,GAAY,iBAAAU,EAAe,IAAK1I,GAAA,GAC7D4L,IAAWD,EAAO,UAAU,GAC5BE,IAAaF,EAAO,YAAY;AACtC,WAASG,EAAW7Y,GAAKuL,GAAGuN,GAAG;AAC7B,IAAI9Y,MAEFA,EAAI,OAEAuL,KAAK,CAACA,EAAE,YACVA,EAAE,UAAUvL,IAEV8Y,KAAK,CAACA,EAAE,YACVA,EAAE,UAAU9Y;AAAA,EAGlB;AAIA,WAASpb,EAAQob,GAAK98B,GAAI;AACxB,UAAM41C,IAAI,KAAK,gBACTvN,IAAI,KAAK,gBAETrW,KAAIqW,KAAKuN;AACf,WAAKvN,KAAM,QAA2BA,EAAE,aAAeuN,KAAM,QAA2BA,EAAE,aACpF,OAAO51C,KAAO,cAChBA,EAAE,GAEG,SAKT21C,EAAW7Y,GAAKuL,GAAGuN,CAAC,GAChBvN,MACFA,EAAE,YAAY,KAEZuN,MACFA,EAAE,YAAY,KAIX5jB,GAAE,cAKL6jB,EAAS,MAAM/Y,GAAK98B,CAAE,IAJtB,KAAK,KAAKy1C,GAAU,SAAUxN,IAAI;AAChC,MAAA4N,EAAS,MAAMzP,EAAmB6B,IAAInL,CAAG,GAAG98B,CAAE;AAAA,IACpD,CAAK,GAII;AAAA,EACT;AACA,WAAS61C,EAAS9Z,GAAMe,GAAK98B,GAAI;AAC/B,QAAIsqC,IAAS;AACb,aAASwL,GAAUhZ,IAAK;AACtB,UAAIwN;AACF;AAEF,MAAAA,IAAS;AACT,YAAMsL,KAAI7Z,EAAK,gBACTsM,KAAItM,EAAK;AACf,MAAA4Z,EAAW7Y,IAAKuL,IAAGuN,EAAC,GAChBvN,OACFA,GAAE,SAAS,KAETuN,OACFA,GAAE,SAAS,KAET,OAAO51C,KAAO,cAChBA,EAAG88B,EAAG,GAEJA,KACF+R,EAAQ,SAASkH,GAAkBha,GAAMe,EAAG,IAE5C+R,EAAQ,SAASmH,GAAaja,CAAI;AAAA,IAExC;AACE,QAAI;AACF,MAAAA,EAAK,SAASe,KAAO,MAAMgZ,EAAS;AAAA,IACxC,SAAWhZ,IAAK;AACZ,MAAAgZ,GAAUhZ,EAAG;AAAA,IACjB;AAAA,EACA;AACA,WAASiZ,EAAiBha,GAAMe,GAAK;AACnC,IAAAmZ,EAAYla,GAAMe,CAAG,GACrBkZ,EAAYja,CAAI;AAAA,EAClB;AACA,WAASia,EAAYja,GAAM;AACzB,UAAM6Z,IAAI7Z,EAAK,gBACTsM,IAAItM,EAAK;AACf,IAAIsM,MACFA,EAAE,eAAe,KAEfuN,MACFA,EAAE,eAAe,MAEdvN,KAAM,QAA2BA,EAAE,aAAeuN,KAAM,QAA2BA,EAAE,cACxF7Z,EAAK,KAAK,OAAO;AAAA,EAErB;AACA,WAASka,EAAYla,GAAMe,GAAK;AAC9B,UAAM8Y,IAAI7Z,EAAK,gBACTsM,IAAItM,EAAK;AACf,IAAKsM,KAAM,QAA2BA,EAAE,gBAAkBuN,KAAM,QAA2BA,EAAE,iBAGzFvN,MACFA,EAAE,eAAe,KAEfuN,MACFA,EAAE,eAAe,KAEnB7Z,EAAK,KAAK,SAASe,CAAG;AAAA,EACxB;AACA,WAASoZ,IAAY;AACnB,UAAMN,IAAI,KAAK,gBACTvN,IAAI,KAAK;AACf,IAAIuN,MACFA,EAAE,cAAc,IAChBA,EAAE,SAAS,IACXA,EAAE,eAAe,IACjBA,EAAE,YAAY,IACdA,EAAE,UAAU,MACZA,EAAE,eAAe,IACjBA,EAAE,UAAU,IACZA,EAAE,QAAQA,EAAE,aAAa,IACzBA,EAAE,aAAaA,EAAE,aAAa,KAE5BvN,MACFA,EAAE,cAAc,IAChBA,EAAE,YAAY,IACdA,EAAE,SAAS,IACXA,EAAE,eAAe,IACjBA,EAAE,UAAU,MACZA,EAAE,eAAe,IACjBA,EAAE,cAAc,IAChBA,EAAE,cAAc,IAChBA,EAAE,QAAQA,EAAE,aAAa,IACzBA,EAAE,SAASA,EAAE,aAAa,IAC1BA,EAAE,WAAWA,EAAE,aAAa;AAAA,EAEhC;AACA,WAAS8N,EAAe/E,GAAQtU,GAAKsZ,GAAM;AAOzC,UAAMR,IAAIxE,EAAO,gBACX/I,KAAI+I,EAAO;AACjB,QAAK/I,MAAM,QAA2BA,GAAE,aAAeuN,KAAM,QAA2BA,EAAE;AACxF,aAAO;AAET,IAAKA,KAAM,QAA2BA,EAAE,eAAiBvN,MAAM,QAA2BA,GAAE,cAC1F+I,EAAO,QAAQtU,CAAG,IACXA,MAEPA,EAAI,OAEAuL,MAAK,CAACA,GAAE,YACVA,GAAE,UAAUvL,IAEV8Y,KAAK,CAACA,EAAE,YACVA,EAAE,UAAU9Y,IAEVsZ,IACFvH,EAAQ,SAASoH,GAAa7E,GAAQtU,CAAG,IAEzCmZ,EAAY7E,GAAQtU,CAAG;AAAA,EAG7B;AACA,WAASuZ,EAAUjF,GAAQpxC,GAAI;AAC7B,QAAI,OAAOoxC,EAAO,cAAe;AAC/B;AAEF,UAAMwE,IAAIxE,EAAO,gBACX/I,IAAI+I,EAAO;AAQjB,IAPIwE,MACFA,EAAE,cAAc,KAEdvN,MACFA,EAAE,cAAc,KAElB+I,EAAO,KAAKsE,GAAY11C,CAAE,GACtB,EAAAoxC,EAAO,cAAcsE,CAAU,IAAI,MAIvC7G,EAAQ,SAASyH,GAAalF,CAAM;AAAA,EACtC;AACA,WAASkF,EAAYlF,GAAQ;AAC3B,QAAI9G,IAAS;AACb,aAASiM,EAAYzZ,GAAK;AACxB,UAAIwN,GAAQ;AACV,QAAA6L,EAAe/E,GAAQtU,KAA0C,IAAIyY,EAAqB,CAAE;AAC5F;AAAA,MACN;AACI,MAAAjL,IAAS;AACT,YAAMsL,KAAIxE,EAAO,gBACX/I,KAAI+I,EAAO,gBACXpf,KAAIqW,MAAKuN;AACf,MAAIA,OACFA,GAAE,cAAc,KAEdvN,OACFA,GAAE,cAAc,KAEdrW,GAAE,YACJof,EAAO,KAAKqE,GAAU3Y,CAAG,IAChBA,IACTqZ,EAAe/E,GAAQtU,GAAK,EAAI,IAEhC+R,EAAQ,SAAS2H,GAAiBpF,CAAM;AAAA,IAE9C;AACE,QAAI;AACF,MAAAA,EAAO,WAAW,CAACtU,MAAQ;AACzB,QAAA+R,EAAQ,SAAS0H,GAAazZ,CAAG;AAAA,MACvC,CAAK;AAAA,IACL,SAAWA,GAAK;AACZ,MAAA+R,EAAQ,SAAS0H,GAAazZ,CAAG;AAAA,IACrC;AAAA,EACA;AACA,WAAS0Z,EAAgBpF,GAAQ;AAC/B,IAAAA,EAAO,KAAKsE,CAAU;AAAA,EACxB;AACA,WAAShC,EAAUtC,GAAQ;AACzB,WAA8DA,GAAO,aAAc,OAAOA,EAAO,SAAU;AAAA,EAC7G;AACA,WAASqF,EAAgBrF,GAAQ;AAC/B,IAAAA,EAAO,KAAK,OAAO;AAAA,EACrB;AACA,WAASsF,EAAqBtF,GAAQtU,GAAK;AACzC,IAAAsU,EAAO,KAAK,SAAStU,CAAG,GACxB+R,EAAQ,SAAS4H,GAAiBrF,CAAM;AAAA,EAC1C;AAGA,WAASuF,GAAUvF,GAAQtU,GAAK;AAC9B,IAAI,CAACsU,KAAUt4B,EAAYs4B,CAAM,MAG7B,CAACtU,KAAO,CAAC+U,EAAWT,CAAM,MAC5BtU,IAAM,IAAIyJ,EAAU,IAIlBgM,EAAgBnB,CAAM,KACxBA,EAAO,SAAS,MAChBA,EAAO,QAAQtU,CAAG,KACT4W,EAAUtC,CAAM,IACzBA,EAAO,MAAK,IACHsC,EAAUtC,EAAO,GAAG,IAC7BA,EAAO,IAAI,MAAK,IACP,OAAOA,EAAO,WAAY,aACnCA,EAAO,QAAQtU,CAAG,IACT,OAAOsU,EAAO,SAAU,aAEjCA,EAAO,MAAK,IACHtU,IACT+R,EAAQ,SAAS6H,GAAsBtF,GAAQtU,CAAG,IAElD+R,EAAQ,SAAS4H,GAAiBrF,CAAM,GAErCA,EAAO,cACVA,EAAOpB,CAAY,IAAI;AAAA,EAE3B;AACA,SAAA4G,KAAiB;AAAA,IACf,WAAAP;AAAA,IACA,WAAAM;AAAA,IACA,SAAAj1B;AAAA,IACA,WAAAw0B;AAAA,IACA,gBAAAC;AAAA,EACF;;;;;;AC/RA,QAAM,EAAE,cAAArL,GAAc,sBAAA+L,EAAoB,IAAKzkB,GAAA,GACzC,EAAE,cAAc0kB,EAAE,IAAKzkB,GAAA;AAC7B,WAAS0kB,EAAOrqB,GAAM;AACpB,IAAAoqB,EAAG,KAAK,MAAMpqB,CAAI;AAAA,EACpB;AACA,EAAAmqB,EAAqBE,EAAO,WAAWD,EAAG,SAAS,GACnDD,EAAqBE,GAAQD,CAAE,GAC/BC,EAAO,UAAU,OAAO,SAAUC,GAAM/2C,GAAS;AAC/C,UAAMF,IAAS;AACf,aAASk3C,EAAO9S,GAAO;AACrB,MAAI6S,EAAK,YAAYA,EAAK,MAAM7S,CAAK,MAAM,MAASpkC,EAAO,SACzDA,EAAO,MAAK;AAAA,IAElB;AACE,IAAAA,EAAO,GAAG,QAAQk3C,CAAM;AACxB,aAASC,IAAU;AACjB,MAAIn3C,EAAO,YAAYA,EAAO,UAC5BA,EAAO,OAAM;AAAA,IAEnB;AACE,IAAAi3C,EAAK,GAAG,SAASE,CAAO,GAIpB,CAACF,EAAK,aAAa,CAAC/2C,KAAWA,EAAQ,QAAQ,QACjDF,EAAO,GAAG,OAAOu0C,CAAK,GACtBv0C,EAAO,GAAG,SAAS00C,CAAO;AAE5B,QAAI0C,IAAW;AACf,aAAS7C,IAAQ;AACf,MAAI6C,MACJA,IAAW,IACXH,EAAK,IAAG;AAAA,IACZ;AACE,aAASvC,IAAU;AACjB,MAAI0C,MACJA,IAAW,IACP,OAAOH,EAAK,WAAY,cAAYA,EAAK,QAAO;AAAA,IACxD;AAGE,aAASzC,EAAQtM,GAAI;AACnB,MAAA4M,EAAO,GACHiC,EAAG,cAAc,MAAM,OAAO,MAAM,KACtC,KAAK,KAAK,SAAS7O,CAAE;AAAA,IAE3B;AACE,IAAAmP,EAAgBr3C,GAAQ,SAASw0C,CAAO,GACxC6C,EAAgBJ,GAAM,SAASzC,CAAO;AAGtC,aAASM,IAAU;AACjB,MAAA90C,EAAO,eAAe,QAAQk3C,CAAM,GACpCD,EAAK,eAAe,SAASE,CAAO,GACpCn3C,EAAO,eAAe,OAAOu0C,CAAK,GAClCv0C,EAAO,eAAe,SAAS00C,CAAO,GACtC10C,EAAO,eAAe,SAASw0C,CAAO,GACtCyC,EAAK,eAAe,SAASzC,CAAO,GACpCx0C,EAAO,eAAe,OAAO80C,CAAO,GACpC90C,EAAO,eAAe,SAAS80C,CAAO,GACtCmC,EAAK,eAAe,SAASnC,CAAO;AAAA,IACxC;AACE,WAAA90C,EAAO,GAAG,OAAO80C,CAAO,GACxB90C,EAAO,GAAG,SAAS80C,CAAO,GAC1BmC,EAAK,GAAG,SAASnC,CAAO,GACxBmC,EAAK,KAAK,QAAQj3C,CAAM,GAGjBi3C;AAAA,EACT;AACA,WAASI,EAAgBrO,GAASloC,GAAOiB,GAAI;AAG3C,QAAI,OAAOinC,EAAQ,mBAAoB,WAAY,QAAOA,EAAQ,gBAAgBloC,GAAOiB,CAAE;AAM3F,IAAI,CAACinC,EAAQ,WAAW,CAACA,EAAQ,QAAQloC,CAAK,IAAGkoC,EAAQ,GAAGloC,GAAOiB,CAAE,IAC5DgpC,EAAa/B,EAAQ,QAAQloC,CAAK,CAAC,IAAGkoC,EAAQ,QAAQloC,CAAK,EAAE,QAAQiB,CAAE,IAC3EinC,EAAQ,QAAQloC,CAAK,IAAI,CAACiB,GAAIinC,EAAQ,QAAQloC,CAAK,CAAC;AAAA,EAC3D;AACA,SAAAw2C,KAAiB;AAAA,IACf,QAAAN;AAAA,IACA,iBAAAK;AAAA,EACF;;;;;ACtFA,UAAM,EAAE,eAAAxN,EAAa,IAAKxX,GAAA,GACpB,EAAE,YAAAmU,GAAY,OAAAT,EAAK,IAAKzT,GAAA,GACxB,EAAE,cAAAwe,GAAc,aAAAI,GAAa,0BAAAX,EAAwB,IAAK5G,GAAA,GAC1DkK,IAAM/J,GAAA,GACN,EAAE,sBAAAJ,EAAoB,IAAK3D;AACjC,QAAI2N;AAKJ,UAAMvJ,IAAsB,CAACC,GAAQ9lC,MAAS;AAC5C,UAAI,OAAO8lC,KAAW,YAAY,EAAE,aAAaA;AAC/C,cAAM,IAAIV,EAAqBplC,GAAM,eAAe8lC,CAAM;AAAA,IAE9D;AACA,IAAAE,EAAA,QAAA,iBAAgC,SAAwBF,GAAQiH,GAAQ;AAEtE,UADAlH,EAAoBC,GAAQ,QAAQ,GAChC,CAAC0G,EAAaO,CAAM,KAAK,CAACH,EAAYG,CAAM;AAC9C,cAAM,IAAI3H,EAAqB,UAAU,CAAC,kBAAkB,kBAAkB,QAAQ,GAAG2H,CAAM;AAEjG,aAAO/G,EAAO,QAAQ,yBAAyBF,GAAQiH,CAAM;AAAA,IAC/D,GACA/G,EAAA,QAAA,2BAA0C,SAAUF,GAAQiH,GAAQ;AAClE,UAAI,OAAOjH,KAAW,YAAY,EAAE,aAAaA;AAC/C,eAAOiH;AAET,YAAMkG,IAAUzG,EAAaO,CAAM,IAC/B,MAAM;AACJ,QAAAA,EAAO;AAAA,UACL,IAAI7K,EAAW,QAAW;AAAA,YACxB,OAAO4D,EAAO;AAAA,WACf;AAAA,QACX;AAAA,MACA,IACM,MAAM;AACJ,QAAAiH,EAAOd,CAAwB;AAAA,UAC7B,IAAI/J,EAAW,QAAW;AAAA,YACxB,OAAO4D,EAAO;AAAA,WACf;AAAA,QACX;AAAA,MACA;AACE,UAAIA,EAAO;AACT,QAAAmN,EAAO;AAAA,WACF;AACL,QAAA7D,IAAmBA,KAAoB3J,KAA2B;AAClE,cAAMiL,IAAatB,EAAiBtJ,GAAQmN,CAAO;AACnD,QAAA1D,EAAIxC,GAAQ2D,EAAWnL,CAAa,CAAC;AAAA,MACzC;AACE,aAAOwH;AAAA,IACT;AAAA;;;;;;ACjDA,QAAM,EAAE,sBAAAmG,GAAsB,gBAAAzH,GAAgB,wBAAA0H,GAAwB,YAAAC,EAAU,IAAKrlB,GAAA,GAC/E,EAAE,QAAAI,EAAM,IAAKH,GAAA,GACb,EAAE,SAAAiT,EAAO,IAAKoE,GAAA;AACpB,SAAAgO,KAAiB,MAAiB;AAAA,IAChC,cAAc;AACZ,WAAK,OAAO,MACZ,KAAK,OAAO,MACZ,KAAK,SAAS;AAAA,IAClB;AAAA,IACE,KAAKpwC,GAAG;AACN,YAAMqwC,IAAQ;AAAA,QACZ,MAAMrwC;AAAA,QACN,MAAM;AAAA,MACZ;AACI,MAAI,KAAK,SAAS,IAAG,KAAK,KAAK,OAAOqwC,IACjC,KAAK,OAAOA,GACjB,KAAK,OAAOA,GACZ,EAAE,KAAK;AAAA,IACX;AAAA,IACE,QAAQrwC,GAAG;AACT,YAAMqwC,IAAQ;AAAA,QACZ,MAAMrwC;AAAA,QACN,MAAM,KAAK;AAAA,MACjB;AACI,MAAI,KAAK,WAAW,MAAG,KAAK,OAAOqwC,IACnC,KAAK,OAAOA,GACZ,EAAE,KAAK;AAAA,IACX;AAAA,IACE,QAAQ;AACN,UAAI,KAAK,WAAW,EAAG;AACvB,YAAMngB,IAAM,KAAK,KAAK;AACtB,aAAI,KAAK,WAAW,IAAG,KAAK,OAAO,KAAK,OAAO,OAC1C,KAAK,OAAO,KAAK,KAAK,MAC3B,EAAE,KAAK,QACAA;AAAA,IACX;AAAA,IACE,QAAQ;AACN,WAAK,OAAO,KAAK,OAAO,MACxB,KAAK,SAAS;AAAA,IAClB;AAAA,IACE,KAAKxF,GAAG;AACN,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,UAAI4lB,IAAI,KAAK,MACTpgB,IAAM,KAAKogB,EAAE;AACjB,cAAQA,IAAIA,EAAE,UAAU,OAAM,CAAApgB,KAAOxF,IAAI4lB,EAAE;AAC3C,aAAOpgB;AAAA,IACX;AAAA,IACE,OAAOpC,GAAG;AACR,UAAI,KAAK,WAAW,EAAG,QAAO5C,EAAO,MAAM,CAAC;AAC5C,YAAMgF,IAAMhF,EAAO,YAAY4C,MAAM,CAAC;AACtC,UAAIwiB,IAAI,KAAK,MACThmC,IAAI;AACR,aAAOgmC;AACL,QAAAJ,EAAuBhgB,GAAKogB,EAAE,MAAMhmC,CAAC,GACrCA,KAAKgmC,EAAE,KAAK,QACZA,IAAIA,EAAE;AAER,aAAOpgB;AAAA,IACX;AAAA;AAAA,IAGE,QAAQpC,GAAGyiB,GAAY;AACrB,YAAMlkC,IAAO,KAAK,KAAK;AACvB,UAAIyhB,IAAIzhB,EAAK,QAAQ;AAEnB,cAAMmkC,IAAQnkC,EAAK,MAAM,GAAGyhB,CAAC;AAC7B,oBAAK,KAAK,OAAOzhB,EAAK,MAAMyhB,CAAC,GACtB0iB;AAAA,MACb;AACI,aAAI1iB,MAAMzhB,EAAK,SAEN,KAAK,MAAK,IAGZkkC,IAAa,KAAK,WAAWziB,CAAC,IAAI,KAAK,WAAWA,CAAC;AAAA,IAC9D;AAAA,IACE,QAAQ;AACN,aAAO,KAAK,KAAK;AAAA,IACrB;AAAA,IACE,EAAE0a,CAAc,IAAI;AAClB,eAAS8H,IAAI,KAAK,MAAMA,GAAGA,IAAIA,EAAE;AAC/B,cAAMA,EAAE;AAAA,IAEd;AAAA;AAAA,IAGE,WAAWxiB,GAAG;AACZ,UAAIoC,IAAM,IACNogB,IAAI,KAAK,MACT,IAAI;AACR,SAAG;AACD,cAAMt9B,IAAMs9B,EAAE;AACd,YAAIxiB,IAAI9a,EAAI;AACV,UAAAkd,KAAOld,GACP8a,KAAK9a,EAAI;AAAA,aACJ;AACL,UAAI8a,MAAM9a,EAAI,UACZkd,KAAOld,GACP,EAAE,GACEs9B,EAAE,OAAM,KAAK,OAAOA,EAAE,OACrB,KAAK,OAAO,KAAK,OAAO,SAE7BpgB,KAAO+f,EAAqBj9B,GAAK,GAAG8a,CAAC,GACrC,KAAK,OAAOwiB,GACZA,EAAE,OAAOL,EAAqBj9B,GAAK8a,CAAC;AAEtC;AAAA,QACR;AACM,UAAE;AAAA,MACR,UAAcwiB,IAAIA,EAAE,UAAU;AAC1B,kBAAK,UAAU,GACRpgB;AAAA,IACX;AAAA;AAAA,IAGE,WAAWpC,GAAG;AACZ,YAAMoC,IAAMhF,EAAO,YAAY4C,CAAC,GAC1B2iB,IAAS3iB;AACf,UAAIwiB,IAAI,KAAK,MACT3lB,IAAI;AACR,SAAG;AACD,cAAMc,IAAM6kB,EAAE;AACd,YAAIxiB,IAAIrC,EAAI;AACV,UAAAykB,EAAuBhgB,GAAKzE,GAAKglB,IAAS3iB,CAAC,GAC3CA,KAAKrC,EAAI;AAAA,aACJ;AACL,UAAIqC,MAAMrC,EAAI,UACZykB,EAAuBhgB,GAAKzE,GAAKglB,IAAS3iB,CAAC,GAC3C,EAAEnD,GACE2lB,EAAE,OAAM,KAAK,OAAOA,EAAE,OACrB,KAAK,OAAO,KAAK,OAAO,SAE7BJ,EAAuBhgB,GAAK,IAAIigB,EAAW1kB,EAAI,QAAQA,EAAI,YAAYqC,CAAC,GAAG2iB,IAAS3iB,CAAC,GACrF,KAAK,OAAOwiB,GACZA,EAAE,OAAO7kB,EAAI,MAAMqC,CAAC;AAEtB;AAAA,QACR;AACM,UAAEnD;AAAA,MACR,UAAc2lB,IAAIA,EAAE,UAAU;AAC1B,kBAAK,UAAU3lB,GACRuF;AAAA,IACX;AAAA;AAAA,IAGE,CAAC,uBAAO,IAAI,4BAA4B,CAAC,EAAE91B,GAAGzB,GAAS;AACrD,aAAOqlC,EAAQ,MAAM;AAAA,QACnB,GAAGrlC;AAAA;AAAA,QAEH,OAAO;AAAA;AAAA,QAEP,eAAe;AAAA,OAChB;AAAA,IACL;AAAA,EACA;;;;;;AC1JA,QAAM,EAAE,WAAA+3C,GAAW,iBAAA9M,EAAe,IAAK9Y,GAAA,GACjC,EAAE,iBAAAqa,EAAe,IAAKpa,GAAA,GACtB,EAAE,uBAAAuZ,MAA0BlC,KAA6B;AAC/D,MAAIuO,IAA4B,KAAK,MACjCC,IAAiC;AACrC,WAASC,EAAkBl4C,GAASm4C,GAAUC,GAAW;AACvD,WAAOp4C,EAAQ,iBAAiB,OAAOA,EAAQ,gBAAgBm4C,IAAWn4C,EAAQo4C,CAAS,IAAI;AAAA,EACjG;AACA,WAASC,EAAwBC,GAAY;AAC3C,WAAOA,IAAaL,IAAiCD;AAAA,EACvD;AACA,WAASO,EAAwBD,GAAY14C,GAAO;AAClD,IAAA4sC,EAAgB5sC,GAAO,SAAS,CAAC,GAC7B04C,IACFL,IAAiCr4C,IAEjCo4C,IAA4Bp4C;AAAA,EAEhC;AACA,WAAS44C,EAAiBr0C,GAAOnE,GAASo4C,GAAWD,GAAU;AAC7D,UAAMM,IAAMP,EAAkBl4C,GAASm4C,GAAUC,CAAS;AAC1D,QAAIK,KAAO,MAAM;AACf,UAAI,CAACxN,EAAgBwN,CAAG,KAAKA,IAAM,GAAG;AACpC,cAAMr0C,IAAO+zC,IAAW,WAAWC,CAAS,KAAK;AACjD,cAAM,IAAIzM,EAAsBvnC,GAAMq0C,CAAG;AAAA,MAC/C;AACI,aAAOV,EAAUU,CAAG;AAAA,IACxB;AAGE,WAAOJ,EAAwBl0C,EAAM,UAAU;AAAA,EACjD;AACA,SAAAA,KAAiB;AAAA,IACf,kBAAAq0C;AAAA,IACA,yBAAAH;AAAA,IACA,yBAAAE;AAAA,EACF;;;;;;ACpCA,QAAIjnB,IAASa,GAAA,GACTI,IAASjB,EAAO;AAGpB,aAASonB,EAAW1e,GAAKC,GAAK;AAC5B,eAASryB,KAAOoyB;AACd,QAAAC,EAAIryB,CAAG,IAAIoyB,EAAIpyB,CAAG;AAAA,IAEtB;AACA,IAAI2qB,EAAO,QAAQA,EAAO,SAASA,EAAO,eAAeA,EAAO,kBAC9D6X,EAAA,UAAiB9Y,KAGjBonB,EAAUpnB,GAAQgB,CAAO,GACzBA,EAAA,SAAiBqmB;AAGnB,aAASA,EAAYj+B,GAAKqY,GAAkBF,GAAQ;AAClD,aAAON,EAAO7X,GAAKqY,GAAkBF,CAAM;AAAA,IAC7C;AAEA,IAAA8lB,EAAW,YAAY,OAAO,OAAOpmB,EAAO,SAAS,GAGrDmmB,EAAUnmB,GAAQomB,CAAU,GAE5BA,EAAW,OAAO,SAAUj+B,GAAKqY,GAAkBF,GAAQ;AACzD,UAAI,OAAOnY,KAAQ;AACjB,cAAM,IAAI,UAAU,+BAA+B;AAErD,aAAO6X,EAAO7X,GAAKqY,GAAkBF,CAAM;AAAA,IAC7C,GAEA8lB,EAAW,QAAQ,SAAUllB,GAAME,GAAMC,GAAU;AACjD,UAAI,OAAOH,KAAS;AAClB,cAAM,IAAI,UAAU,2BAA2B;AAEjD,UAAIX,IAAMP,EAAOkB,CAAI;AACrB,aAAIE,MAAS,SACP,OAAOC,KAAa,WACtBd,EAAI,KAAKa,GAAMC,CAAQ,IAEvBd,EAAI,KAAKa,CAAI,IAGfb,EAAI,KAAK,CAAC,GAELA;AAAA,IACT,GAEA6lB,EAAW,cAAc,SAAUllB,GAAM;AACvC,UAAI,OAAOA,KAAS;AAClB,cAAM,IAAI,UAAU,2BAA2B;AAEjD,aAAOlB,EAAOkB,CAAI;AAAA,IACpB,GAEAklB,EAAW,kBAAkB,SAAUllB,GAAM;AAC3C,UAAI,OAAOA,KAAS;AAClB,cAAM,IAAI,UAAU,2BAA2B;AAEjD,aAAOnC,EAAO,WAAWmC,CAAI;AAAA,IAC/B;AAAA;;;;;;ACvCA,MAAIlB,IAASJ,GAAA,EAAuB,QAGhCymB,IAAarmB,EAAO,cAAc,SAAUqB,GAAU;AAExD,YADAA,IAAW,KAAKA,GACRA,KAAYA,EAAS,YAAW,GAAE;AAAA,MACxC,KAAK;AAAA,MAAM,KAAK;AAAA,MAAO,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAO,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAU,KAAK;AAAA,MAAW,KAAK;AACxI,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACb;AAAA,EACA;AAEA,WAASilB,EAAmBC,GAAK;AAC/B,QAAI,CAACA,EAAK,QAAO;AAEjB,aADIC;AAEF,cAAQD,GAAG;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAOA;AAAA,QACT;AACE,cAAIC,EAAS;AACb,UAAAD,KAAO,KAAKA,GAAK,YAAW,GAC5BC,IAAU;AAAA,MAClB;AAAA,EAEA;AAIA,WAASjN,EAAkBgN,GAAK;AAC9B,QAAIE,IAAOH,EAAmBC,CAAG;AACjC,QAAI,OAAOE,KAAS,aAAazmB,EAAO,eAAeqmB,KAAc,CAACA,EAAWE,CAAG,GAAI,OAAM,IAAI,MAAM,uBAAuBA,CAAG;AAClI,WAAOE,KAAQF;AAAA,EACjB;AAKA,EAAAG,GAAA,gBAAwBC;AACxB,WAASA,EAActlB,GAAU;AAC/B,SAAK,WAAWkY,EAAkBlY,CAAQ;AAC1C,QAAIulB;AACJ,YAAQ,KAAK,UAAQ;AAAA,MACnB,KAAK;AACH,aAAK,OAAOC,GACZ,KAAK,MAAMC,GACXF,IAAK;AACL;AAAA,MACF,KAAK;AACH,aAAK,WAAWG,GAChBH,IAAK;AACL;AAAA,MACF,KAAK;AACH,aAAK,OAAOI,GACZ,KAAK,MAAMC,GACXL,IAAK;AACL;AAAA,MACF;AACE,aAAK,QAAQM,GACb,KAAK,MAAMC;AACX;AAAA,IACN;AACE,SAAK,WAAW,GAChB,KAAK,YAAY,GACjB,KAAK,WAAWnnB,EAAO,YAAY4mB,CAAE;AAAA,EACvC;AAEA,EAAAD,EAAc,UAAU,QAAQ,SAAUpmB,GAAK;AAC7C,QAAIA,EAAI,WAAW,EAAG,QAAO;AAC7B,QAAI6iB,GACAhkC;AACJ,QAAI,KAAK,UAAU;AAEjB,UADAgkC,IAAI,KAAK,SAAS7iB,CAAG,GACjB6iB,MAAM,OAAW,QAAO;AAC5B,MAAAhkC,IAAI,KAAK,UACT,KAAK,WAAW;AAAA,IACpB;AACI,MAAAA,IAAI;AAEN,WAAIA,IAAImhB,EAAI,SAAe6iB,IAAIA,IAAI,KAAK,KAAK7iB,GAAKnhB,CAAC,IAAI,KAAK,KAAKmhB,GAAKnhB,CAAC,IAChEgkC,KAAK;AAAA,EACd,GAEAuD,EAAc,UAAU,MAAMS,GAG9BT,EAAc,UAAU,OAAOU,GAG/BV,EAAc,UAAU,WAAW,SAAUpmB,GAAK;AAChD,QAAI,KAAK,YAAYA,EAAI;AACvB,aAAAA,EAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAG,KAAK,QAAQ,GACjE,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAEhE,IAAAA,EAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAGA,EAAI,MAAM,GACrE,KAAK,YAAYA,EAAI;AAAA,EACvB;AAIA,WAAS+mB,EAAcC,GAAM;AAC3B,WAAIA,KAAQ,MAAa,IAAWA,KAAQ,MAAM,IAAa,IAAWA,KAAQ,MAAM,KAAa,IAAWA,KAAQ,MAAM,KAAa,IACpIA,KAAQ,MAAM,IAAO,KAAK;AAAA,EACnC;AAKA,WAASC,EAAoBje,GAAMhJ,GAAKnhB,GAAG;AACzC,QAAIqkB,IAAIlD,EAAI,SAAS;AACrB,QAAIkD,IAAIrkB,EAAG,QAAO;AAClB,QAAIwnC,IAAKU,EAAc/mB,EAAIkD,CAAC,CAAC;AAC7B,WAAImjB,KAAM,KACJA,IAAK,MAAGrd,EAAK,WAAWqd,IAAK,IAC1BA,KAEL,EAAEnjB,IAAIrkB,KAAKwnC,MAAO,KAAW,KACjCA,IAAKU,EAAc/mB,EAAIkD,CAAC,CAAC,GACrBmjB,KAAM,KACJA,IAAK,MAAGrd,EAAK,WAAWqd,IAAK,IAC1BA,KAEL,EAAEnjB,IAAIrkB,KAAKwnC,MAAO,KAAW,KACjCA,IAAKU,EAAc/mB,EAAIkD,CAAC,CAAC,GACrBmjB,KAAM,KACJA,IAAK,MACHA,MAAO,IAAGA,IAAK,IAAOrd,EAAK,WAAWqd,IAAK,IAE1CA,KAEF;AAAA,EACT;AAUA,WAASa,EAAoBle,GAAMhJ,GAAK6kB,GAAG;AACzC,SAAK7kB,EAAI,CAAC,IAAI,SAAU;AACtB,aAAAgJ,EAAK,WAAW,GACT;AAET,QAAIA,EAAK,WAAW,KAAKhJ,EAAI,SAAS,GAAG;AACvC,WAAKA,EAAI,CAAC,IAAI,SAAU;AACtB,eAAAgJ,EAAK,WAAW,GACT;AAET,UAAIA,EAAK,WAAW,KAAKhJ,EAAI,SAAS,MAC/BA,EAAI,CAAC,IAAI,SAAU;AACtB,eAAAgJ,EAAK,WAAW,GACT;AAAA,IAGf;AAAA,EACA;AAGA,WAASwd,EAAaxmB,GAAK;AACzB,QAAI6kB,IAAI,KAAK,YAAY,KAAK,UAC1BhC,IAAIqE,EAAoB,MAAMlnB,CAAM;AACxC,QAAI6iB,MAAM,OAAW,QAAOA;AAC5B,QAAI,KAAK,YAAY7iB,EAAI;AACvB,aAAAA,EAAI,KAAK,KAAK,UAAU6kB,GAAG,GAAG,KAAK,QAAQ,GACpC,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAEhE,IAAA7kB,EAAI,KAAK,KAAK,UAAU6kB,GAAG,GAAG7kB,EAAI,MAAM,GACxC,KAAK,YAAYA,EAAI;AAAA,EACvB;AAKA,WAAS8mB,EAAS9mB,GAAKnhB,GAAG;AACxB,QAAIsoC,IAAQF,EAAoB,MAAMjnB,GAAKnhB,CAAC;AAC5C,QAAI,CAAC,KAAK,SAAU,QAAOmhB,EAAI,SAAS,QAAQnhB,CAAC;AACjD,SAAK,YAAYsoC;AACjB,QAAI53C,IAAMywB,EAAI,UAAUmnB,IAAQ,KAAK;AACrC,WAAAnnB,EAAI,KAAK,KAAK,UAAU,GAAGzwB,CAAG,GACvBywB,EAAI,SAAS,QAAQnhB,GAAGtP,CAAG;AAAA,EACpC;AAIA,WAASs3C,EAAQ7mB,GAAK;AACpB,QAAI6iB,IAAI7iB,KAAOA,EAAI,SAAS,KAAK,MAAMA,CAAG,IAAI;AAC9C,WAAI,KAAK,WAAiB6iB,IAAI,MACvBA;AAAA,EACT;AAMA,WAASyD,EAAUtmB,GAAKnhB,GAAG;AACzB,SAAKmhB,EAAI,SAASnhB,KAAK,MAAM,GAAG;AAC9B,UAAIgkC,IAAI7iB,EAAI,SAAS,WAAWnhB,CAAC;AACjC,UAAIgkC,GAAG;AACL,YAAI3jB,IAAI2jB,EAAE,WAAWA,EAAE,SAAS,CAAC;AACjC,YAAI3jB,KAAK,SAAUA,KAAK;AACtB,sBAAK,WAAW,GAChB,KAAK,YAAY,GACjB,KAAK,SAAS,CAAC,IAAIc,EAAIA,EAAI,SAAS,CAAC,GACrC,KAAK,SAAS,CAAC,IAAIA,EAAIA,EAAI,SAAS,CAAC,GAC9B6iB,EAAE,MAAM,GAAG,EAAE;AAAA,MAE5B;AACI,aAAOA;AAAA,IACX;AACE,gBAAK,WAAW,GAChB,KAAK,YAAY,GACjB,KAAK,SAAS,CAAC,IAAI7iB,EAAIA,EAAI,SAAS,CAAC,GAC9BA,EAAI,SAAS,WAAWnhB,GAAGmhB,EAAI,SAAS,CAAC;AAAA,EAClD;AAIA,WAASumB,EAASvmB,GAAK;AACrB,QAAI6iB,IAAI7iB,KAAOA,EAAI,SAAS,KAAK,MAAMA,CAAG,IAAI;AAC9C,QAAI,KAAK,UAAU;AACjB,UAAIzwB,IAAM,KAAK,YAAY,KAAK;AAChC,aAAOszC,IAAI,KAAK,SAAS,SAAS,WAAW,GAAGtzC,CAAG;AAAA,IACvD;AACE,WAAOszC;AAAA,EACT;AAEA,WAAS4D,EAAWzmB,GAAKnhB,GAAG;AAC1B,QAAIwjB,KAAKrC,EAAI,SAASnhB,KAAK;AAC3B,WAAIwjB,MAAM,IAAUrC,EAAI,SAAS,UAAUnhB,CAAC,KAC5C,KAAK,WAAW,IAAIwjB,GACpB,KAAK,YAAY,GACbA,MAAM,IACR,KAAK,SAAS,CAAC,IAAIrC,EAAIA,EAAI,SAAS,CAAC,KAErC,KAAK,SAAS,CAAC,IAAIA,EAAIA,EAAI,SAAS,CAAC,GACrC,KAAK,SAAS,CAAC,IAAIA,EAAIA,EAAI,SAAS,CAAC,IAEhCA,EAAI,SAAS,UAAUnhB,GAAGmhB,EAAI,SAASqC,CAAC;AAAA,EACjD;AAEA,WAASqkB,EAAU1mB,GAAK;AACtB,QAAI6iB,IAAI7iB,KAAOA,EAAI,SAAS,KAAK,MAAMA,CAAG,IAAI;AAC9C,WAAI,KAAK,WAAiB6iB,IAAI,KAAK,SAAS,SAAS,UAAU,GAAG,IAAI,KAAK,QAAQ,IAC5EA;AAAA,EACT;AAGA,WAAS8D,EAAY3mB,GAAK;AACxB,WAAOA,EAAI,SAAS,KAAK,QAAQ;AAAA,EACnC;AAEA,WAAS4mB,EAAU5mB,GAAK;AACtB,WAAOA,KAAOA,EAAI,SAAS,KAAK,MAAMA,CAAG,IAAI;AAAA,EAC/C;;;;;;;ACnSA,QAAM8b,IAAUzc,GAAA,GAIV,EAAE,sBAAAmhB,GAAsB,qBAAA1D,GAAqB,gBAAAC,EAAc,IAAKzd,GAAA,GAChE,EAAE,QAAAG,EAAM,IAAKkX,GAAA,GACb,EAAE,sBAAAD,GAAsB,wBAAA0Q,EAAsB,IAAKtQ,KAA6B;AACtF,WAAS3W,EAAKknB,GAAUC,GAAU3tB,GAAM;AACtC,QAAI4tB;AACJ,QAAI,OAAOD,KAAa,YAAYA,aAAoB7nB;AACtD,aAAO,IAAI4nB,EAAS;AAAA,QAClB,YAAY;AAAA,QACZ,GAAG1tB;AAAA,QACH,OAAO;AACL,eAAK,KAAK2tB,CAAQ,GAClB,KAAK,KAAK,IAAI;AAAA,QACtB;AAAA,OACK;AAEH,QAAIlJ;AACJ,QAAIkJ,KAAYA,EAASxK,CAAmB;AAC1C,MAAAsB,IAAU,IACVmJ,IAAWD,EAASxK,CAAmB,EAAC;AAAA,aAC/BwK,KAAYA,EAASvK,CAAc;AAC5C,MAAAqB,IAAU,IACVmJ,IAAWD,EAASvK,CAAc,EAAC;AAAA;AAEnC,YAAM,IAAIrG,EAAqB,YAAY,CAAC,UAAU,GAAG4Q,CAAQ;AAEnE,UAAMrG,IAAW,IAAIoG,EAAS;AAAA,MAC5B,YAAY;AAAA,MACZ,eAAe;AAAA;AAAA,MAEf,GAAG1tB;AAAA,KACJ;AAID,QAAI6tB,IAAU;AACd,IAAAvG,EAAS,QAAQ,WAAY;AAC3B,MAAKuG,MACHA,IAAU,IACVr0C,EAAI;AAAA,IAEV,GACE8tC,EAAS,WAAW,SAAUhX,GAAOh9B,GAAI;AACvC,MAAAuzC;AAAA,QACEiH,EAAMxd,CAAK;AAAA,QACX,MAAM6R,EAAQ,SAAS7uC,GAAIg9B,CAAK;AAAA;AAAA,QAEhC,CAAC97B,MAAM2tC,EAAQ,SAAS7uC,GAAIkB,KAAK87B,CAAK;AAAA,MAC5C;AAAA,IACA;AACE,mBAAewd,EAAMxd,GAAO;AAC1B,YAAMyd,IAAkCzd,KAAU,MAC5C0d,IAAW,OAAOJ,EAAS,SAAU;AAC3C,UAAIG,KAAYC,GAAU;AACxB,cAAM,EAAE,OAAA76C,GAAO,MAAAukC,EAAI,IAAK,MAAMkW,EAAS,MAAMtd,CAAK;AAElD,YADA,MAAMn9B,GACFukC;AACF;AAAA,MAER;AACI,UAAI,OAAOkW,EAAS,UAAW,YAAY;AACzC,cAAM,EAAE,OAAAz6C,EAAK,IAAK,MAAMy6C,EAAS,OAAM;AACvC,cAAMz6C;AAAA,MACZ;AAAA,IACA;AACE,mBAAeqG,IAAO;AACpB,iBAAS;AACP,YAAI;AACF,gBAAM,EAAE,OAAArG,GAAO,MAAAukC,MAAS+M,IAAU,MAAMmJ,EAAS,SAASA,EAAS,KAAI;AACvE,cAAIlW;AACF,YAAA4P,EAAS,KAAK,IAAI;AAAA,eACb;AACL,kBAAMnd,IAAMh3B,KAAS,OAAOA,EAAM,QAAS,aAAa,MAAMA,IAAQA;AACtE,gBAAIg3B,MAAQ;AACV,oBAAA0jB,IAAU,IACJ,IAAIJ,EAAsB;AAC3B,gBAAInG,EAAS,KAAKnd,CAAG;AAC1B;AAEA,YAAA0jB,IAAU;AAAA,UAEtB;AAAA,QACA,SAAezd,GAAK;AACZ,UAAAkX,EAAS,QAAQlX,CAAG;AAAA,QAC5B;AACM;AAAA,MACN;AAAA,IACA;AACE,WAAOkX;AAAA,EACT;AACA,SAAA2G,KAAiBznB;;;;;;ACxEjB,QAAM2b,IAAUzc,GAAA,GAIV;AAAA,IACJ,uBAAAwoB;AAAA,IACA,iBAAA1P;AAAA,IACA,aAAA3D;AAAA,IACA,gBAAA8D;AAAA,IACA,wBAAAwP;AAAA,IACA,YAAAC;AAAA,IACA,sBAAAjE;AAAA,IACA,SAAAvD;AAAA,IACA,SAAAyH;AAAA,IACA,oBAAAC;AAAA,IACA,qBAAAnL;AAAA,IACA,QAAA2F;AAAA,EACF,IAAInjB,GAAA;AACJ,EAAA2hB,KAAiBoG,GACjBA,EAAS,gBAAgBa;AACzB,QAAM,EAAE,cAAcnE,EAAE,IAAKpN,GAAA,GACvB,EAAE,QAAAqN,GAAQ,iBAAAK,EAAe,IAAKvN,GAAA,GAC9B,EAAE,QAAArX,EAAM,IAAKsX,GAAA,GACb,EAAE,gBAAAoR,EAAc,IAAK1Q,GAAA,GACrBoJ,IAAMuH,GAAA;AACZ,MAAIC,IAAQC,GAAA,EAA2B,SAAS,UAAU,CAACv5C,MAAO;AAChE,IAAAs5C,IAAQt5C;AAAA,EACV,CAAC;AACD,QAAMw5C,IAAaC,GAAA,GACbC,IAAcC,GAAA,GACd,EAAE,kBAAAhD,GAAkB,yBAAAH,EAAuB,IAAKoD,GAAA,GAChD;AAAA,IACJ,oBAAAtV;AAAA,IACA,OAAO;AAAA,MACL,sBAAAqD;AAAA,MACA,4BAAAkS;AAAA,MACA,kBAAA9P;AAAA,MACA,2BAAA+P;AAAA,MACA,oCAAAC;AAAA;IAEF,YAAAtV;AAAA,EACF,IAAIuV,GAAA,GACE,EAAE,gBAAA7O,GAAc,IAAK8O,GAAA,GACrBC,KAAUxG,EAAO,SAAS,GAC1B,EAAE,eAAA2D,GAAa,IAAK8C,GAAA,GACpB/oB,IAAOgpB,GAAA;AACb,EAAArF,EAAqBuD,EAAS,WAAWrD,EAAO,SAAS,GACzDF,EAAqBuD,GAAUrD,CAAM;AACrC,QAAMpD,KAAM,MAAM;AAAA,EAAA,GACZ,EAAE,gBAAAwC,EAAc,IAAKqF,GACrBW,IAAc,GACdC,IAAS,GACTC,IAAc,GACdC,KAAW,GACXC,KAAe,IACfC,KAAQ,IACRC,KAAgB,IAChBC,IAAmB,KACnBC,IAAqB,KACrBC,KAAmB,KACnBC,KAAgB,MAChBC,KAAa,MACbC,IAAe,MACfC,IAAa,MACbC,IAAU,OACVC,KAAgB,OAChBC,IAAmB,OACnBC,KAAe,KAAK,IACpBC,IAAe,KAAK;AAG1B,WAASC,EAAqBC,GAAK;AACjC,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,MAAM;AACJ,gBAAQ,KAAK,QAAQA,OAAS;AAAA,MACpC;AAAA,MACI,IAAI19C,GAAO;AACT,QAAIA,IAAO,KAAK,SAAS09C,IACpB,KAAK,SAAS,CAACA;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AACA,EAAA1C,EAAuBI,EAAc,WAAW;AAAA,IAC9C,YAAYqC,EAAqBnB,CAAW;AAAA,IAC5C,OAAOmB,EAAqBlB,CAAM;AAAA,IAClC,YAAYkB,EAAqBjB,CAAW;AAAA,IAC5C,SAASiB,EAAqBhB,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtC,aAAagB,EAAqBf,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAK9C,MAAMe,EAAqBd,EAAK;AAAA;AAAA;AAAA,IAGhC,cAAcc,EAAqBb,EAAa;AAAA,IAChD,iBAAiBa,EAAqBZ,CAAgB;AAAA,IACtD,mBAAmBY,EAAqBX,CAAkB;AAAA,IAC1D,iBAAiBW,EAAqBV,EAAgB;AAAA;AAAA,IAEtD,cAAcU,EAAqBT,EAAa;AAAA,IAChD,WAAWS,EAAqBR,EAAU;AAAA,IAC1C,aAAaQ,EAAqBP,CAAY;AAAA;AAAA,IAE9C,WAAWO,EAAqBN,CAAU;AAAA;AAAA,IAE1C,QAAQM,EAAqBL,CAAO;AAAA;AAAA;AAAA,IAGpC,cAAcK,EAAqBJ,EAAa;AAAA,IAChD,iBAAiBI,EAAqBH,CAAgB;AAAA;AAAA,IAEtD,aAAaG,EAAqBF,EAAY;AAAA,IAC9C,aAAaE,EAAqBD,CAAY;AAAA,GAC/C;AACD,WAASpC,EAAch7C,GAASmxC,GAAQgH,IAAU;AAMhD,IAAI,OAAOA,MAAa,cAAWA,KAAWhH,aAAkBoM,GAAA,IAIhE,KAAK,QAAQV,KAAaC,IAAeR,KAAeC,IAGpDv8C,KAAWA,EAAQ,eAAY,KAAK,SAASk8C,IAC7C/D,MAAYn4C,KAAWA,EAAQ,uBAAoB,KAAK,SAASk8C,IAIrE,KAAK,gBAAgBl8C,IACjBw4C,EAAiB,MAAMx4C,GAAS,yBAAyBm4C,EAAQ,IACjEE,EAAwB,EAAK,GAKjC,KAAK,SAAS,IAAIgD,EAAU,GAC5B,KAAK,SAAS,GACd,KAAK,QAAQ,CAAA,GACb,KAAK,UAAU,MACf,KAAKU,EAAO,IAAI,MAGZ/7C,KAAWA,EAAQ,cAAc,OAAO,KAAK,SAAS,CAAC68C,KAGvD78C,KAAWA,EAAQ,gBAAgB,OAAO,KAAK,SAAS,CAAC88C,IAM7D,KAAK,UAAU,MAKf,KAAK,kBAAmB98C,KAAWA,EAAQ,mBAAoB,QAI/D,KAAK,oBAAoB,MACzB,KAAK,UAAU,MACf,KAAK,WAAW,MACZA,KAAWA,EAAQ,aACrB,KAAK,UAAU,IAAIk5C,GAAcl5C,EAAQ,QAAQ,GACjD,KAAK,WAAWA,EAAQ;AAAA,EAE5B;AACA,WAASm6C,EAASn6C,GAAS;AACzB,QAAI,EAAE,gBAAgBm6C,GAAW,QAAO,IAAIA,EAASn6C,CAAO;AAI5D,UAAMm4C,IAAW,gBAAgBoF,GAAA;AACjC,SAAK,iBAAiB,IAAIvC,EAAch7C,GAAS,MAAMm4C,CAAQ,GAC3Dn4C,MACE,OAAOA,EAAQ,QAAS,eAAY,KAAK,QAAQA,EAAQ,OACzD,OAAOA,EAAQ,WAAY,eAAY,KAAK,WAAWA,EAAQ,UAC/D,OAAOA,EAAQ,aAAc,eAAY,KAAK,aAAaA,EAAQ,YACnEA,EAAQ,UAAU,CAACm4C,KAAU8C,EAAej7C,EAAQ,QAAQ,IAAI,IAEtE82C,EAAO,KAAK,MAAM92C,CAAO,GACzBu7C,EAAY,UAAU,MAAM,MAAM;AAChC,MAAI,KAAK,eAAe,gBACtBiC,EAAc,MAAM,KAAK,cAAc;AAAA,IAE7C,CAAG;AAAA,EACH;AACA,EAAArD,EAAS,UAAU,UAAUoB,EAAY,SACzCpB,EAAS,UAAU,aAAaoB,EAAY,WAC5CpB,EAAS,UAAU,WAAW,SAAUtd,GAAK98B,GAAI;AAC/C,IAAAA,EAAG88B,CAAG;AAAA,EACR,GACAsd,EAAS,UAAUtD,EAAG,sBAAsB,IAAI,SAAUha,GAAK;AAC7D,SAAK,QAAQA,CAAG;AAAA,EAClB,GACAsd,EAAS,UAAUY,CAAkB,IAAI,WAAY;AACnD,QAAIhe;AACJ,WAAK,KAAK,cACRA,IAAQ,KAAK,gBAAgB,OAAO,IAAIuJ,GAAU,GAClD,KAAK,QAAQvJ,CAAK,IAEb,IAAIsW,EAAQ,CAACx7B,GAASmxB,OAAW2K,EAAI,MAAM,CAAC9W,OAASA,MAAOA,OAAQE,IAAQiM,GAAOnM,EAAG,IAAIhlB,EAAQ,IAAI,CAAE,CAAC;AAAA,EAClH,GAMAsiC,EAAS,UAAU,OAAO,SAAUjW,GAAOtQ,GAAU;AACnD,WAAO6pB,GAAiB,MAAMvZ,GAAOtQ,GAAU,EAAK;AAAA,EACtD,GAGAumB,EAAS,UAAU,UAAU,SAAUjW,GAAOtQ,GAAU;AACtD,WAAO6pB,GAAiB,MAAMvZ,GAAOtQ,GAAU,EAAI;AAAA,EACrD;AACA,WAAS6pB,GAAiBtM,GAAQjN,GAAOtQ,IAAU8pB,IAAY;AAC7D,IAAAvC,EAAM,oBAAoBjX,CAAK;AAC/B,UAAM//B,KAAQgtC,EAAO;AACrB,QAAItU;AAuBJ,SAtBK14B,GAAM,QAAQ+3C,OAAiB,MAC9B,OAAOhY,KAAU,YACnBtQ,KAAWA,MAAYzvB,GAAM,iBACzBA,GAAM,aAAayvB,OACjB8pB,MAAcv5C,GAAM,WAGtB+/B,IAAQ3R,EAAO,KAAK2R,GAAOtQ,EAAQ,EAAE,SAASzvB,GAAM,QAAQ,KAE5D+/B,IAAQ3R,EAAO,KAAK2R,GAAOtQ,EAAQ,GACnCA,KAAW,QAGNsQ,aAAiB3R,IAC1BqB,KAAW,KACFkjB,EAAO,cAAc5S,CAAK,KACnCA,IAAQ4S,EAAO,oBAAoB5S,CAAK,GACxCtQ,KAAW,MACFsQ,KAAS,SAClBrH,KAAM,IAAI2M,GAAqB,SAAS,CAAC,UAAU,UAAU,YAAY,GAAGtF,CAAK,KAGjFrH;AACF,MAAAqZ,EAAe/E,GAAQtU,EAAG;AAAA,aACjBqH,MAAU;AACnB,MAAA//B,GAAM,SAAS,CAACk4C,IAChBsB,EAAWxM,GAAQhtC,EAAK;AAAA,cACdA,GAAM,QAAQ+3C,OAAiB,KAAMhY,KAASA,EAAM,SAAS;AACvE,UAAIwZ;AACF,aAAKv5C,GAAM,QAAQi4C,OAAiB,EAAG,CAAAlG,EAAe/E,GAAQ,IAAIyK,EAAkC,CAAE;AAAA,aACjG;AAAA,cAAIz3C,GAAM,aAAaA,GAAM,QAAS,QAAO;AAC7C,UAAAy5C,GAASzM,GAAQhtC,IAAO+/B,GAAO,EAAI;AAAA;AAAA,eAC/B//B,GAAM;AACf,QAAA+xC,EAAe/E,GAAQ,IAAIwK,EAAyB,CAAE;AAAA,WACjD;AAAA,YAAIx3C,GAAM,aAAaA,GAAM;AAClC,iBAAO;AAEP,QAAAA,GAAM,SAAS,CAACk4C,IACZl4C,GAAM,WAAW,CAACyvB,MACpBsQ,IAAQ//B,GAAM,QAAQ,MAAM+/B,CAAK,GAC7B//B,GAAM,cAAc+/B,EAAM,WAAW,IAAG0Z,GAASzM,GAAQhtC,IAAO+/B,GAAO,EAAK,IAC3EsZ,EAAcrM,GAAQhtC,EAAK,KAEhCy5C,GAASzM,GAAQhtC,IAAO+/B,GAAO,EAAK;AAAA;AAAA,QAGnC,CAAKwZ,OACVv5C,GAAM,SAAS,CAACk4C,IAChBmB,EAAcrM,GAAQhtC,EAAK;AAM7B,WAAO,CAACA,GAAM,UAAUA,GAAM,SAASA,GAAM,iBAAiBA,GAAM,WAAW;AAAA,EACjF;AACA,WAASy5C,GAASzM,GAAQhtC,GAAO+/B,IAAOwZ,IAAY;AAClD,IAAIv5C,EAAM,WAAWA,EAAM,WAAW,KAAK,CAACA,EAAM,QAAQgtC,EAAO,cAAc,MAAM,IAAI,MAGlFhtC,EAAM,QAAQ+4C,OAAsB,IACvC/4C,EAAM,kBAAkB,MAAK,IAE7BA,EAAM,oBAAoB,MAE5BA,EAAM,cAAc,IACpBgtC,EAAO,KAAK,QAAQjN,EAAK,MAGzB//B,EAAM,UAAUA,EAAM,aAAa,IAAI+/B,GAAM,QACzCwZ,KAAYv5C,EAAM,OAAO,QAAQ+/B,EAAK,IACrC//B,EAAM,OAAO,KAAK+/B,EAAK,IACvB//B,EAAM,QAAQq4C,QAAmB,KAAGqB,EAAa1M,CAAM,IAE9DqM,EAAcrM,GAAQhtC,CAAK;AAAA,EAC7B;AACA,EAAAg2C,EAAS,UAAU,WAAW,WAAY;AACxC,UAAMh2C,IAAQ,KAAK;AACnB,WAAOA,EAAM43C,EAAO,MAAM,MAAQ53C,EAAM,YAAY;AAAA,EACtD,GAGAg2C,EAAS,UAAU,cAAc,SAAUrB,GAAK;AAC9C,UAAMgF,IAAU,IAAI5E,GAAcJ,CAAG;AACrC,SAAK,eAAe,UAAUgF,GAE9B,KAAK,eAAe,WAAW,KAAK,eAAe,QAAQ;AAC3D,UAAMxsB,KAAS,KAAK,eAAe;AAEnC,QAAIhS,KAAU;AACd,eAAW5L,MAAQ4d;AACjB,MAAAhS,MAAWw+B,EAAQ,MAAMpqC,EAAI;AAE/B,WAAA4d,GAAO,MAAK,GACRhS,OAAY,MAAIgS,GAAO,KAAKhS,EAAO,GACvC,KAAK,eAAe,SAASA,GAAQ,QAC9B;AAAA,EACT;AAGA,QAAMy+B,KAAU;AAChB,WAASC,GAAwB7oB,GAAG;AAClC,QAAIA,IAAI4oB;AACN,YAAM,IAAInS,EAAiB,QAAQ,WAAWzW,CAAC;AAI/C,WAAAA,KACAA,KAAKA,MAAM,GACXA,KAAKA,MAAM,GACXA,KAAKA,MAAM,GACXA,KAAKA,MAAM,GACXA,KAAKA,MAAM,IACXA,KAEKA;AAAA,EACT;AAIA,WAAS8oB,EAAc9oB,GAAGhxB,GAAO;AAC/B,WAAIgxB,KAAK,KAAMhxB,EAAM,WAAW,KAAKA,EAAM,QAAe,KACrDA,EAAM,QAAQ+3C,OAAiB,IAAU,IAC1C5U,EAAYnS,CAAC,IAEXhxB,EAAM,WAAWA,EAAM,SAAeA,EAAM,OAAO,QAAQ,SACxDA,EAAM,SAEXgxB,KAAKhxB,EAAM,SAAegxB,IACvBhxB,EAAM,QAAQA,EAAM,SAAS;AAAA,EACtC;AAGA,EAAAg2C,EAAS,UAAU,OAAO,SAAUhlB,GAAG;AACrC,IAAAgmB,EAAM,QAAQhmB,CAAC,GAGXA,MAAM,SACRA,IAAI,MACM8V,EAAgB9V,CAAC,MAC3BA,IAAIiW,EAAejW,GAAG,EAAE;AAE1B,UAAMhxB,IAAQ,KAAK,gBACb+5C,KAAQ/oB;AASd,QANIA,IAAIhxB,EAAM,kBAAeA,EAAM,gBAAgB65C,GAAwB7oB,CAAC,IACxEA,MAAM,MAAGhxB,EAAM,SAAS,CAACs4C,IAM3BtnB,MAAM,KACNhxB,EAAM,kBACJA,EAAM,kBAAkB,IAAIA,EAAM,UAAUA,EAAM,gBAAgBA,EAAM,SAAS,MAAMA,EAAM;AAE/F,aAAAg3C,EAAM,sBAAsBh3C,EAAM,QAAQA,EAAM,KAAK,GACjDA,EAAM,WAAW,KAAKA,EAAM,QAAOg6C,GAAY,IAAI,IAClDN,EAAa,IAAI,GACf;AAKT,QAHA1oB,IAAI8oB,EAAc9oB,GAAGhxB,CAAK,GAGtBgxB,MAAM,KAAKhxB,EAAM;AACnB,aAAIA,EAAM,WAAW,KAAGg6C,GAAY,IAAI,GACjC;AA0BT,QAAIC,MAAUj6C,EAAM,QAAQq4C,QAAmB;AAY/C,QAXArB,EAAM,iBAAiBiD,EAAM,IAGzBj6C,EAAM,WAAW,KAAKA,EAAM,SAASgxB,IAAIhxB,EAAM,mBACjDi6C,KAAS,IACTjD,EAAM,8BAA8BiD,EAAM,IAMxCj6C,EAAM,SAASA,EAAM,WAAWA,EAAM,aAAaA,EAAM,WAAW,CAACA,EAAM;AAC7E,MAAAi6C,KAAS,IACTjD,EAAM,kCAAkCiD,EAAM;AAAA,aACrCA,IAAQ;AACjB,MAAAjD,EAAM,SAAS,GACfh3C,EAAM,SAASk4C,KAAWE,IAEtBp4C,EAAM,WAAW,MAAGA,EAAM,SAASq4C;AAGvC,UAAI;AACF,aAAK,MAAMr4C,EAAM,aAAa;AAAA,MACpC,SAAa04B,IAAK;AACZ,QAAAqZ,EAAe,MAAMrZ,EAAG;AAAA,MAC9B;AACI,MAAA14B,EAAM,SAAS,CAACo4C,IAIXp4C,EAAM,YAASgxB,IAAI8oB,EAAcC,IAAO/5C,CAAK;AAAA,IACtD;AACE,QAAIozB;AACJ,WAAIpC,IAAI,IAAGoC,KAAM8mB,GAASlpB,GAAGhxB,CAAK,IAC7BozB,KAAM,MACPA,OAAQ,QACVpzB,EAAM,eAAeA,EAAM,UAAUA,EAAM,eAC3CgxB,IAAI,MAEJhxB,EAAM,UAAUgxB,GACZhxB,EAAM,kBACRA,EAAM,kBAAkB,MAAK,IAE7BA,EAAM,oBAAoB,OAG1BA,EAAM,WAAW,MAGdA,EAAM,UAAOA,EAAM,eAAe,KAGnC+5C,OAAU/oB,KAAKhxB,EAAM,SAAOg6C,GAAY,IAAI,IAE9C5mB,OAAQ,QAAQ,CAACpzB,EAAM,gBAAgB,CAACA,EAAM,iBAChDA,EAAM,cAAc,IACpB,KAAK,KAAK,QAAQozB,EAAG,IAEhBA;AAAA,EACT;AACA,WAASomB,EAAWxM,GAAQhtC,GAAO;AAEjC,QADAg3C,EAAM,YAAY,GACd,CAAAh3C,EAAM,OACV;AAAA,UAAIA,EAAM,SAAS;AACjB,cAAM+/B,KAAQ//B,EAAM,QAAQ,IAAG;AAC/B,QAAI+/B,MAASA,GAAM,WACjB//B,EAAM,OAAO,KAAK+/B,EAAK,GACvB//B,EAAM,UAAUA,EAAM,aAAa,IAAI+/B,GAAM;AAAA,MAEnD;AACE,MAAA//B,EAAM,QAAQ,IACVA,EAAM,OAIR05C,EAAa1M,CAAM,KAGnBhtC,EAAM,eAAe,IACrBA,EAAM,kBAAkB,IAGxBm6C,EAAcnN,CAAM;AAAA;AAAA,EAExB;AAKA,WAAS0M,EAAa1M,GAAQ;AAC5B,UAAMhtC,IAAQgtC,EAAO;AACrB,IAAAgK,EAAM,gBAAgBh3C,EAAM,cAAcA,EAAM,eAAe,GAC/DA,EAAM,eAAe,IAChBA,EAAM,oBACTg3C,EAAM,gBAAgBh3C,EAAM,OAAO,GACnCA,EAAM,kBAAkB,IACxByqC,EAAQ,SAAS0P,GAAenN,CAAM;AAAA,EAE1C;AACA,WAASmN,EAAcnN,GAAQ;AAC7B,UAAMhtC,IAAQgtC,EAAO;AACrB,IAAAgK,EAAM,iBAAiBh3C,EAAM,WAAWA,EAAM,QAAQA,EAAM,KAAK,GAC7D,CAACA,EAAM,aAAa,CAACA,EAAM,YAAYA,EAAM,UAAUA,EAAM,WAC/DgtC,EAAO,KAAK,UAAU,GACtBhtC,EAAM,kBAAkB,KAS1BA,EAAM,eAAe,CAACA,EAAM,WAAW,CAACA,EAAM,SAASA,EAAM,UAAUA,EAAM,eAC7Eo6C,GAAKpN,CAAM;AAAA,EACb;AAQA,WAASqM,EAAcrM,GAAQhtC,GAAO;AACpC,IAAI,CAACA,EAAM,eAAeA,EAAM,gBAC9BA,EAAM,cAAc,IACpByqC,EAAQ,SAAS4P,GAAgBrN,GAAQhtC,CAAK;AAAA,EAElD;AACA,WAASq6C,EAAerN,GAAQhtC,GAAO;AAwBrC,WACE,CAACA,EAAM,WACP,CAACA,EAAM,UACNA,EAAM,SAASA,EAAM,iBAAkBA,EAAM,WAAWA,EAAM,WAAW,MAC1E;AACA,YAAMmE,KAAMnE,EAAM;AAGlB,UAFAg3C,EAAM,sBAAsB,GAC5BhK,EAAO,KAAK,CAAC,GACT7oC,OAAQnE,EAAM;AAEhB;AAAA,IACN;AACE,IAAAA,EAAM,cAAc;AAAA,EACtB;AAMA,EAAAg2C,EAAS,UAAU,QAAQ,SAAUhlB,GAAG;AACtC,UAAM,IAAIumB,EAA2B,SAAS;AAAA,EAChD,GACAvB,EAAS,UAAU,OAAO,SAAUpD,GAAM0H,GAAU;AAClD,UAAMzkB,KAAM,MACN71B,KAAQ,KAAK;AACnB,IAAIA,GAAM,MAAM,WAAW,MACpBA,GAAM,oBACTA,GAAM,kBAAkB,IACxBA,GAAM,oBAAoB,IAAI22C,EAAQ32C,GAAM,oBAAoB,CAACA,GAAM,iBAAiB,IAAI,CAAA,CAAE,KAGlGA,GAAM,MAAM,KAAK4yC,CAAI,GACrBoE,EAAM,yBAAyBh3C,GAAM,MAAM,QAAQs6C,CAAQ;AAE3D,UAAMC,MADS,CAACD,KAAYA,EAAS,QAAQ,OAAU1H,MAASnI,EAAQ,UAAUmI,MAASnI,EAAQ,SAC7EyF,KAAQsK;AAC9B,IAAIx6C,GAAM,aAAYyqC,EAAQ,SAAS8P,EAAK,IACvC1kB,GAAI,KAAK,OAAO0kB,EAAK,GAC1B3H,EAAK,GAAG,UAAU6H,EAAQ;AAC1B,aAASA,GAAS7K,IAAU8K,IAAY;AACtC,MAAA1D,EAAM,UAAU,GACZpH,OAAa/Z,MACX6kB,MAAcA,GAAW,eAAe,OAC1CA,GAAW,aAAa,IACxBjK,GAAO;AAAA,IAGf;AACE,aAASP,KAAQ;AACf,MAAA8G,EAAM,OAAO,GACbpE,EAAK,IAAG;AAAA,IACZ;AACE,QAAIE,IACA6H,KAAY;AAChB,aAASlK,KAAU;AACjB,MAAAuG,EAAM,SAAS,GAEfpE,EAAK,eAAe,SAASvC,EAAO,GACpCuC,EAAK,eAAe,UAAU7C,EAAQ,GAClC+C,MACFF,EAAK,eAAe,SAASE,EAAO,GAEtCF,EAAK,eAAe,SAASzC,EAAO,GACpCyC,EAAK,eAAe,UAAU6H,EAAQ,GACtC5kB,GAAI,eAAe,OAAOqa,EAAK,GAC/Bra,GAAI,eAAe,OAAO2kB,EAAM,GAChC3kB,GAAI,eAAe,QAAQgd,EAAM,GACjC8H,KAAY,IAOR7H,MAAW9yC,GAAM,sBAAsB,CAAC4yC,EAAK,kBAAkBA,EAAK,eAAe,cAAYE,GAAO;AAAA,IAC9G;AACE,aAAS8H,KAAQ;AAKf,MAAKD,OACC36C,GAAM,MAAM,WAAW,KAAKA,GAAM,MAAM,CAAC,MAAM4yC,KACjDoE,EAAM,+BAA+B,CAAC,GACtCh3C,GAAM,oBAAoB4yC,GAC1B5yC,GAAM,kBAAkB,MACfA,GAAM,MAAM,SAAS,KAAKA,GAAM,MAAM,SAAS4yC,CAAI,MAC5DoE,EAAM,+BAA+Bh3C,GAAM,kBAAkB,IAAI,GACjEA,GAAM,kBAAkB,IAAI4yC,CAAI,IAElC/c,GAAI,MAAK,IAENid,OAKHA,KAAU+H,EAAYhlB,IAAK+c,CAAI,GAC/BA,EAAK,GAAG,SAASE,EAAO;AAAA,IAE9B;AACE,IAAAjd,GAAI,GAAG,QAAQgd,EAAM;AACrB,aAASA,GAAO9S,IAAO;AACrB,MAAAiX,EAAM,QAAQ;AACd,YAAM5jB,KAAMwf,EAAK,MAAM7S,EAAK;AAC5B,MAAAiX,EAAM,cAAc5jB,EAAG,GACnBA,OAAQ,MACVwnB,GAAK;AAAA,IAEX;AAIE,aAASzK,GAAQtM,IAAI;AAInB,UAHAmT,EAAM,WAAWnT,EAAE,GACnB2W,GAAM,GACN5H,EAAK,eAAe,SAASzC,EAAO,GAChCyC,EAAK,cAAc,OAAO,MAAM,GAAG;AACrC,cAAMhlB,KAAIglB,EAAK,kBAAkBA,EAAK;AACtC,QAAIhlB,MAAK,CAACA,GAAE,eAEVmkB,EAAea,GAAM/O,EAAE,IAEvB+O,EAAK,KAAK,SAAS/O,EAAE;AAAA,MAE7B;AAAA,IACA;AAGE,IAAAmP,EAAgBJ,GAAM,SAASzC,EAAO;AAGtC,aAASE,KAAU;AACjB,MAAAuC,EAAK,eAAe,UAAU7C,EAAQ,GACtCyK,GAAM;AAAA,IACV;AACE,IAAA5H,EAAK,KAAK,SAASvC,EAAO;AAC1B,aAASN,KAAW;AAClB,MAAAiH,EAAM,UAAU,GAChBpE,EAAK,eAAe,SAASvC,EAAO,GACpCmK,GAAM;AAAA,IACV;AACE,IAAA5H,EAAK,KAAK,UAAU7C,EAAQ;AAC5B,aAASyK,KAAS;AAChB,MAAAxD,EAAM,QAAQ,GACdnhB,GAAI,OAAO+c,CAAI;AAAA,IACnB;AAGE,WAAAA,EAAK,KAAK,QAAQ/c,EAAG,GAIjB+c,EAAK,sBAAsB,KAC7BgI,GAAK,IACK56C,GAAM,YAChBg3C,EAAM,aAAa,GACnBnhB,GAAI,OAAM,IAEL+c;AAAA,EACT;AACA,WAASiI,EAAYhlB,GAAK+c,GAAM;AAC9B,WAAO,WAAqC;AAC1C,YAAM5yC,KAAQ61B,EAAI;AAKlB,MAAI71B,GAAM,sBAAsB4yC,KAC9BoE,EAAM,eAAe,CAAC,GACtBh3C,GAAM,oBAAoB,QACjBA,GAAM,oBACfg3C,EAAM,eAAeh3C,GAAM,kBAAkB,IAAI,GACjDA,GAAM,kBAAkB,OAAO4yC,CAAI,KAEhC,CAAC5yC,GAAM,qBAAqBA,GAAM,kBAAkB,SAAS,MAAM61B,EAAI,cAAc,MAAM,KAC9FA,EAAI,OAAM;AAAA,IAEhB;AAAA,EACA;AACA,EAAAmgB,EAAS,UAAU,SAAS,SAAUpD,GAAM;AAC1C,UAAM5yC,IAAQ,KAAK,gBACb06C,KAAa;AAAA,MACjB,YAAY;AAAA,IAChB;AAGE,QAAI16C,EAAM,MAAM,WAAW,EAAG,QAAO;AACrC,QAAI,CAAC4yC,GAAM;AAET,YAAMkI,KAAQ96C,EAAM;AACpB,MAAAA,EAAM,QAAQ,CAAA,GACd,KAAK,MAAK;AACV,eAASwN,KAAI,GAAGA,KAAIstC,GAAM,QAAQttC;AAChC,QAAAstC,GAAMttC,EAAC,EAAE,KAAK,UAAU,MAAM;AAAA,UAC5B,YAAY;AAAA,SACb;AACH,aAAO;AAAA,IACX;AAGE,UAAMwH,KAAQwhC,EAAsBx2C,EAAM,OAAO4yC,CAAI;AACrD,WAAI59B,OAAU,KAAW,QACzBhV,EAAM,MAAM,OAAOgV,IAAO,CAAC,GACvBhV,EAAM,MAAM,WAAW,KAAG,KAAK,MAAK,GACxC4yC,EAAK,KAAK,UAAU,MAAM8H,EAAU,GAC7B;AAAA,EACT,GAIA1E,EAAS,UAAU,KAAK,SAAU+E,GAAIr9C,GAAI;AACxC,UAAM+0B,KAAMkgB,EAAO,UAAU,GAAG,KAAK,MAAMoI,GAAIr9C,CAAE,GAC3CsC,KAAQ,KAAK;AACnB,WAAI+6C,MAAO,UAGT/6C,GAAM,oBAAoB,KAAK,cAAc,UAAU,IAAI,GAGvDA,GAAM,YAAY,MAAO,KAAK,OAAM,KAC/B+6C,MAAO,cACZ,CAAC/6C,GAAM,cAAc,CAACA,GAAM,sBAC9BA,GAAM,oBAAoBA,GAAM,eAAe,IAC/CA,GAAM,UAAU,IAChBA,GAAM,kBAAkB,IACxBg3C,EAAM,eAAeh3C,GAAM,QAAQA,GAAM,OAAO,GAC5CA,GAAM,SACR05C,EAAa,IAAI,IACP15C,GAAM,WAChByqC,EAAQ,SAASuQ,IAAkB,IAAI,IAItCvoB;AAAA,EACT,GACAujB,EAAS,UAAU,cAAcA,EAAS,UAAU,IACpDA,EAAS,UAAU,iBAAiB,SAAU+E,GAAIr9C,GAAI;AACpD,UAAM+0B,KAAMkgB,EAAO,UAAU,eAAe,KAAK,MAAMoI,GAAIr9C,CAAE;AAC7D,WAAIq9C,MAAO,cAOTtQ,EAAQ,SAASwQ,GAAyB,IAAI,GAEzCxoB;AAAA,EACT,GACAujB,EAAS,UAAU,MAAMA,EAAS,UAAU,gBAC5CA,EAAS,UAAU,qBAAqB,SAAU+E,GAAI;AACpD,UAAMtoB,IAAMkgB,EAAO,UAAU,mBAAmB,MAAM,MAAM,SAAS;AACrE,YAAIoI,MAAO,cAAcA,MAAO,WAO9BtQ,EAAQ,SAASwQ,GAAyB,IAAI,GAEzCxoB;AAAA,EACT;AACA,WAASwoB,EAAwBtjB,GAAM;AACrC,UAAM33B,IAAQ23B,EAAK;AACnB,IAAA33B,EAAM,oBAAoB23B,EAAK,cAAc,UAAU,IAAI,GACvD33B,EAAM,mBAAmBA,EAAM43C,EAAO,MAAM,KAG9C53C,EAAM,UAAU,KAGP23B,EAAK,cAAc,MAAM,IAAI,IACtCA,EAAK,OAAM,IACD33B,EAAM,sBAChBA,EAAM,UAAU;AAAA,EAEpB;AACA,WAASg7C,GAAiBrjB,GAAM;AAC9B,IAAAqf,EAAM,0BAA0B,GAChCrf,EAAK,KAAK,CAAC;AAAA,EACb;AAIA,EAAAqe,EAAS,UAAU,SAAS,WAAY;AACtC,UAAMh2C,IAAQ,KAAK;AACnB,WAAKA,EAAM,YACTg3C,EAAM,QAAQ,GAIdh3C,EAAM,UAAU,CAACA,EAAM,mBACvBk7C,GAAO,MAAMl7C,CAAK,IAEpBA,EAAM43C,EAAO,IAAI,IACV;AAAA,EACT;AACA,WAASsD,GAAOlO,GAAQhtC,GAAO;AAC7B,IAAKA,EAAM,oBACTA,EAAM,kBAAkB,IACxByqC,EAAQ,SAAS0Q,IAASnO,GAAQhtC,CAAK;AAAA,EAE3C;AACA,WAASm7C,GAAQnO,GAAQhtC,GAAO;AAC9B,IAAAg3C,EAAM,UAAUh3C,EAAM,OAAO,GACxBA,EAAM,WACTgtC,EAAO,KAAK,CAAC,GAEfhtC,EAAM,kBAAkB,IACxBgtC,EAAO,KAAK,QAAQ,GACpBoN,GAAKpN,CAAM,GACPhtC,EAAM,WAAW,CAACA,EAAM,WAASgtC,EAAO,KAAK,CAAC;AAAA,EACpD;AACA,EAAAgJ,EAAS,UAAU,QAAQ,WAAY;AACrC,WAAAgB,EAAM,yBAAyB,KAAK,eAAe,OAAO,GACtD,KAAK,eAAe,YAAY,OAClCA,EAAM,OAAO,GACb,KAAK,eAAe,UAAU,IAC9B,KAAK,KAAK,OAAO,IAEnB,KAAK,eAAeY,EAAO,IAAI,IACxB;AAAA,EACT;AACA,WAASwC,GAAKpN,GAAQ;AACpB,UAAMhtC,IAAQgtC,EAAO;AAErB,SADAgK,EAAM,QAAQh3C,EAAM,OAAO,GACpBA,EAAM,WAAWgtC,EAAO,KAAI,MAAO,OAAK;AAAA,EACjD;AAKA,EAAAgJ,EAAS,UAAU,OAAO,SAAUhJ,GAAQ;AAC1C,QAAIoO,IAAS;AAMb,IAAApO,EAAO,GAAG,QAAQ,CAACjN,OAAU;AAC3B,MAAI,CAAC,KAAK,KAAKA,EAAK,KAAKiN,EAAO,UAC9BoO,IAAS,IACTpO,EAAO,MAAK;AAAA,IAElB,CAAG,GACDA,EAAO,GAAG,OAAO,MAAM;AACrB,WAAK,KAAK,IAAI;AAAA,IAClB,CAAG,GACDA,EAAO,GAAG,SAAS,CAACtU,OAAQ;AAC1B,MAAAqZ,EAAe,MAAMrZ,EAAG;AAAA,IAC5B,CAAG,GACDsU,EAAO,GAAG,SAAS,MAAM;AACvB,WAAK,QAAO;AAAA,IAChB,CAAG,GACDA,EAAO,GAAG,WAAW,MAAM;AACzB,WAAK,QAAO;AAAA,IAChB,CAAG,GACD,KAAK,QAAQ,MAAM;AACjB,MAAIoO,KAAUpO,EAAO,WACnBoO,IAAS,IACTpO,EAAO,OAAM;AAAA,IAEnB;AAGE,UAAMqO,KAAa3E,EAAW1J,CAAM;AACpC,aAASnb,KAAI,GAAGA,KAAIwpB,GAAW,QAAQxpB,MAAK;AAC1C,YAAMrkB,KAAI6tC,GAAWxpB,EAAC;AACtB,MAAI,KAAKrkB,EAAC,MAAM,UAAa,OAAOw/B,EAAOx/B,EAAC,KAAM,eAChD,KAAKA,EAAC,IAAIw/B,EAAOx/B,EAAC,EAAE,KAAKw/B,CAAM;AAAA,IAErC;AACE,WAAO;AAAA,EACT,GACAgJ,EAAS,UAAUvK,CAAmB,IAAI,WAAY;AACpD,WAAO6P,GAAsB,IAAI;AAAA,EACnC,GACAtF,EAAS,UAAU,WAAW,SAAUn6C,GAAS;AAC/C,WAAIA,MAAY,UACdgtC,GAAehtC,GAAS,SAAS,GAE5By/C,GAAsB,MAAMz/C,CAAO;AAAA,EAC5C;AACA,WAASy/C,GAAsBtO,GAAQnxC,GAAS;AAC9C,IAAI,OAAOmxC,EAAO,QAAS,eACzBA,IAASgJ,EAAS,KAAKhJ,GAAQ;AAAA,MAC7B,YAAY;AAAA,KACb;AAEH,UAAMuO,KAAOC,GAAoBxO,GAAQnxC,CAAO;AAChD,WAAA0/C,GAAK,SAASvO,GACPuO;AAAA,EACT;AACA,kBAAgBC,GAAoBxO,GAAQnxC,GAAS;AACnD,QAAIikB,KAAWyvB;AACf,aAASztC,GAAK4R,IAAS;AACrB,MAAI,SAASs5B,KACXltB,GAAQ,GACRA,KAAWyvB,MAEXzvB,KAAWpM;AAAA,IAEjB;AACE,IAAAs5B,EAAO,GAAG,YAAYlrC,EAAI;AAC1B,QAAI82B;AACJ,UAAM6X,KAAUjB;AAAA,MACdxC;AAAA,MACA;AAAA,QACE,UAAU;AAAA;MAEZ,CAACtU,OAAQ;AACP,QAAAE,KAAQF,KAAMsJ,EAAmBpJ,IAAOF,EAAG,IAAI,MAC/C5Y,GAAQ,GACRA,KAAWyvB;AAAA,MACjB;AAAA,IACA;AACE,QAAI;AACF,iBAAa;AACX,cAAMxP,KAAQiN,EAAO,YAAY,OAAOA,EAAO,KAAI;AACnD,YAAIjN,OAAU;AACZ,gBAAMA;AAAA,aACD;AAAA,cAAInH;AACT,kBAAMA;AACD,cAAIA,OAAU;AACnB;AAEA,gBAAM,IAAIsW,EAAQptC,EAAI;AAAA;AAAA,MAE9B;AAAA,IACA,SAAW42B,IAAK;AACZ,YAAAE,KAAQoJ,EAAmBpJ,IAAOF,EAAG,GAC/BE;AAAA,IACV,UAAG;AACC,OACGA,MAAkE/8B,GAAQ,oBAAqB,QAC/F+8B,OAAU,UAAaoU,EAAO,eAAe,eAE9CoK,EAAY,UAAUpK,GAAQ,IAAI,KAElCA,EAAO,IAAI,YAAYlrC,EAAI,GAC3B2uC,GAAO;AAAA,IAEb;AAAA,EACA;AAKA,EAAAgG,EAAuBT,EAAS,WAAW;AAAA,IACzC,UAAU;AAAA,MACR,WAAW;AAAA,MACX,MAAM;AACJ,cAAMxE,IAAI,KAAK;AAKf,eAAO,CAAC,CAACA,KAAKA,EAAE,aAAa,MAAS,CAACA,EAAE,aAAa,CAACA,EAAE,gBAAgB,CAACA,EAAE;AAAA,MAClF;AAAA,MACI,IAAIj2C,GAAK;AAEP,QAAI,KAAK,mBACP,KAAK,eAAe,WAAW,CAAC,CAACA;AAAA,MAEzC;AAAA;IAEE,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MACjC;AAAA;IAEE,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,CAAC,EACN,KAAK,eAAe,aAAa,OAChC,KAAK,eAAe,aAAa,KAAK,eAAe,YACtD,CAAC,KAAK,eAAe;AAAA,MAE7B;AAAA;IAEE,uBAAuB;AAAA,MACrB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MACjC;AAAA;IAEE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,MACxD;AAAA;IAEE,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MACjC;AAAA,MACI,KAAK,SAAUyE,GAAO;AACpB,QAAI,KAAK,mBACP,KAAK,eAAe,UAAUA;AAAA,MAEtC;AAAA;IAEE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,eAAe;AAAA,MACjC;AAAA;IAEE,oBAAoB;AAAA,MAClB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,MACpE;AAAA;IAEE,kBAAkB;AAAA,MAChB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,WAAW;AAAA,MAClE;AAAA;IAEE,SAAS;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,UAAU;AAAA,MACjE;AAAA;IAEE,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,MAChE;AAAA;IAEE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,MACnE;AAAA,MACI,IAAIvE,GAAO;AAGT,QAAK,KAAK,mBAMV,KAAK,eAAe,YAAYA;AAAA,MACtC;AAAA;IAEE,eAAe;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,MACpE;AAAA,IACA;AAAA,GACC,GACDg7C,EAAuBI,EAAc,WAAW;AAAA;AAAA,IAE9C,YAAY;AAAA,MACV,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,MAAM;AAAA,MACxB;AAAA;;IAGE,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAKe,EAAO,MAAM;AAAA,MAC/B;AAAA,MACI,IAAIn8C,GAAO;AACT,aAAKm8C,EAAO,IAAI,CAAC,CAACn8C;AAAA,MACxB;AAAA,IACA;AAAA,GACC,GAGDu6C,EAAS,YAAYkE;AAMrB,WAASA,GAASlpB,GAAGhxB,GAAO;AAE1B,QAAIA,EAAM,WAAW,EAAG,QAAO;AAC/B,QAAIozB;AACJ,WAAIpzB,EAAM,aAAYozB,KAAMpzB,EAAM,OAAO,MAAK,IACrC,CAACgxB,KAAKA,KAAKhxB,EAAM,UAEpBA,EAAM,UAASozB,KAAMpzB,EAAM,OAAO,KAAK,EAAE,IACpCA,EAAM,OAAO,WAAW,IAAGozB,KAAMpzB,EAAM,OAAO,MAAK,IACvDozB,KAAMpzB,EAAM,OAAO,OAAOA,EAAM,MAAM,GAC3CA,EAAM,OAAO,MAAK,KAGlBozB,KAAMpzB,EAAM,OAAO,QAAQgxB,GAAGhxB,EAAM,OAAO,GAEtCozB;AAAA,EACT;AACA,WAAS4mB,GAAYhN,GAAQ;AAC3B,UAAMhtC,IAAQgtC,EAAO;AACrB,IAAAgK,EAAM,eAAeh3C,EAAM,UAAU,GAChCA,EAAM,eACTA,EAAM,QAAQ,IACdyqC,EAAQ,SAASgR,IAAez7C,GAAOgtC,CAAM;AAAA,EAEjD;AACA,WAASyO,GAAcz7C,GAAOgtC,GAAQ;AAIpC,QAHAgK,EAAM,iBAAiBh3C,EAAM,YAAYA,EAAM,MAAM,GAGjD,CAACA,EAAM,WAAW,CAACA,EAAM,gBAAgB,CAACA,EAAM,cAAcA,EAAM,WAAW;AAGjF,UAFAA,EAAM,aAAa,IACnBgtC,EAAO,KAAK,KAAK,GACbA,EAAO,YAAYA,EAAO,kBAAkB;AAC9C,QAAAvC,EAAQ,SAASiR,IAAe1O,CAAM;AAAA,eAC7BhtC,EAAM,aAAa;AAG5B,cAAMitC,KAASD,EAAO;AAOtB,SALE,CAACC,MACAA,GAAO;AAAA;AAAA,SAGLA,GAAO,YAAYA,GAAO,aAAa,QAE1CD,EAAO,QAAO;AAAA,MAEtB;AAAA;AAAA,EAEA;AACA,WAAS0O,GAAc1O,GAAQ;AAE7B,IADiBA,EAAO,YAAY,CAACA,EAAO,iBAAiB,CAACA,EAAO,aAEnEA,EAAO,IAAG;AAAA,EAEd;AACA,EAAAgJ,EAAS,OAAO,SAAUC,GAAU3tB,GAAM;AACxC,WAAOwG,EAAKknB,GAAUC,GAAU3tB,CAAI;AAAA,EACtC;AACA,MAAIqzB;AAGJ,WAASC,KAAiB;AACxB,WAAID,OAAuB,WAAWA,KAAqB,CAAA,IACpDA;AAAA,EACT;AACA,SAAA3F,EAAS,UAAU,SAAU6F,GAAgBhgD,GAAS;AACpD,WAAO+/C,GAAc,EAAG,oCAAoCC,GAAgBhgD,CAAO;AAAA,EACrF,GACAm6C,EAAS,QAAQ,SAAU8F,GAAgBjgD,GAAS;AAClD,WAAO+/C,GAAc,EAAG,oCAAoCE,GAAgBjgD,CAAO;AAAA,EACrF,GACAm6C,EAAS,OAAO,SAAUngB,GAAKh6B,GAAS;AACtC,QAAIkE,IAAMg8C;AACV,WAAO,IAAI/F,EAAS;AAAA,MAClB,aACGj2C,MACEg8C,KAAwBlmB,EAAI,wBAAwB,QAAQkmB,OAA0B,SACnFA,KACAlmB,EAAI,gBAAgB,QAAQ91B,OAAS,SACvCA,KACA;AAAA,MACN,GAAGlE;AAAA,MACH,QAAQ68B,IAAK5Y,IAAU;AACrB,QAAAs3B,EAAY,UAAUvhB,GAAK6C,EAAG,GAC9B5Y,GAAS4Y,EAAG;AAAA,MAClB;AAAA,IACA,CAAG,EAAE,KAAK7C,CAAG;AAAA,EACb;;;;;;AC5uCA,QAAM4U,IAAUzc,GAAA,GAIV;AAAA,IACJ,qBAAAguB;AAAA,IACA,OAAAC;AAAA,IACA,oCAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,wBAAA1F;AAAA,IACA,sBAAAhE;AAAA,IACA,4BAAA2J;AAAA,IACA,QAAAhL;AAAA,IACA,mBAAAiL;AAAA,EACF,IAAIpuB,GAAA;AACJ,EAAA4hB,KAAiByM,IACjBA,GAAS,gBAAgBC;AACzB,QAAM,EAAE,cAAc7J,EAAE,IAAKpN,GAAA,GACvBqN,IAASlN,KAAoB,QAC7B,EAAE,QAAArX,EAAM,IAAKsX,GAAA,GACb0R,IAAchR,GAAA,GACd,EAAE,gBAAA0Q,EAAc,IAAKC,GAAA,GACrB,EAAE,kBAAA1C,GAAkB,yBAAAH,EAAuB,IAAK+C,GAAA,GAChD;AAAA,IACJ,sBAAA5R;AAAA,IACA,4BAAAkS;AAAA,IACA,uBAAApG;AAAA,IACA,wBAAAqL;AAAA,IACA,sBAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,wBAAA3G;AAAA,IACA,4BAAA4G;AAAA,IACA,sBAAAC;AAAA,MACEzF,KAA6B,OAC3B,EAAE,gBAAApF,EAAc,IAAKqF;AAC3B,EAAA3E,EAAqB6J,GAAS,WAAW3J,EAAO,SAAS,GACzDF,EAAqB6J,IAAU3J,CAAM;AACrC,WAASpD,IAAM;AAAA,EAAA;AACf,QAAMsN,IAAczL,EAAO,aAAa;AACxC,WAASmL,EAAc1gD,GAASmxC,GAAQgH,GAAU;AAMhD,IAAI,OAAOA,KAAa,cAAWA,IAAWhH,aAAkBqK,GAAA,IAIhE,KAAK,aAAa,CAAC,EAAEx7C,KAAWA,EAAQ,aACpCm4C,MAAU,KAAK,aAAa,KAAK,cAAc,CAAC,EAAEn4C,KAAWA,EAAQ,sBAKzE,KAAK,gBAAgBA,IACjBw4C,EAAiB,MAAMx4C,GAAS,yBAAyBm4C,CAAQ,IACjEE,EAAwB,EAAK,GAGjC,KAAK,cAAc,IAGnB,KAAK,YAAY,IAEjB,KAAK,SAAS,IAEd,KAAK,QAAQ,IAEb,KAAK,WAAW,IAGhB,KAAK,YAAY;AAKjB,UAAM4I,KAAW,CAAC,EAAEjhD,KAAWA,EAAQ,kBAAkB;AACzD,SAAK,gBAAgB,CAACihD,IAKtB,KAAK,kBAAmBjhD,KAAWA,EAAQ,mBAAoB,QAK/D,KAAK,SAAS,GAGd,KAAK,UAAU,IAGf,KAAK,SAAS,GAMd,KAAK,OAAO,IAKZ,KAAK,mBAAmB,IAGxB,KAAK,UAAUkhD,EAAQ,KAAK,QAAW/P,CAAM,GAG7C,KAAK,UAAU,MAGf,KAAK,WAAW,GAIhB,KAAK,qBAAqB,MAC1BgQ,GAAY,IAAI,GAIhB,KAAK,YAAY,GAMjB,KAAK,cAAc,IAInB,KAAK,cAAc,IAGnB,KAAK,eAAe,IAGpB,KAAK,YAAY,CAACnhD,KAAWA,EAAQ,cAAc,IAGnD,KAAK,cAAc,CAACA,KAAWA,EAAQ,gBAAgB,IAKvD,KAAK,UAAU,MAGf,KAAK,SAAS,IAId,KAAK,eAAe,IACpB,KAAKghD,CAAW,IAAI,CAAA;AAAA,EACtB;AACA,WAASG,GAAYh9C,GAAO;AAC1B,IAAAA,EAAM,WAAW,CAAA,GACjBA,EAAM,gBAAgB,GACtBA,EAAM,aAAa,IACnBA,EAAM,UAAU;AAAA,EAClB;AACA,EAAAu8C,EAAc,UAAU,YAAY,WAAqB;AACvD,WAAOP,EAAoB,KAAK,UAAU,KAAK,aAAa;AAAA,EAC9D,GACAG,EAAqBI,EAAc,WAAW,wBAAwB;AAAA,IACpE,WAAW;AAAA,IACX,MAAM;AACJ,aAAO,KAAK,SAAS,SAAS,KAAK;AAAA,IACvC;AAAA,GACC;AACD,WAASD,GAASzgD,GAAS;AAWzB,UAAMm4C,IAAW,gBAAgBqD,GAAA;AACjC,QAAI,CAACrD,KAAY,CAACkI,EAAmCI,IAAU,IAAI,EAAG,QAAO,IAAIA,GAASzgD,CAAO;AACjG,SAAK,iBAAiB,IAAI0gD,EAAc1gD,GAAS,MAAMm4C,CAAQ,GAC3Dn4C,MACE,OAAOA,EAAQ,SAAU,eAAY,KAAK,SAASA,EAAQ,QAC3D,OAAOA,EAAQ,UAAW,eAAY,KAAK,UAAUA,EAAQ,SAC7D,OAAOA,EAAQ,WAAY,eAAY,KAAK,WAAWA,EAAQ,UAC/D,OAAOA,EAAQ,SAAU,eAAY,KAAK,SAASA,EAAQ,QAC3D,OAAOA,EAAQ,aAAc,eAAY,KAAK,aAAaA,EAAQ,YACnEA,EAAQ,UAAQi7C,EAAej7C,EAAQ,QAAQ,IAAI,IAEzD82C,EAAO,KAAK,MAAM92C,CAAO,GACzBu7C,EAAY,UAAU,MAAM,MAAM;AAChC,YAAMp3C,IAAQ,KAAK;AACnB,MAAKA,EAAM,WACTi9C,GAAY,MAAMj9C,CAAK,GAEzBk9C,EAAY,MAAMl9C,CAAK;AAAA,IAC3B,CAAG;AAAA,EACH;AACA,EAAAm8C,EAAqBG,IAAUD,GAAmB;AAAA,IAChD,WAAW;AAAA,IACX,OAAO,SAAU3hB,GAAQ;AACvB,aAAIwhB,EAAmC,MAAMxhB,CAAM,IAAU,KACzD,SAAS4hB,KAAiB,KACvB5hB,KAAUA,EAAO,0BAA0B6hB;AAAA,IACtD;AAAA,GACC,GAGDD,GAAS,UAAU,OAAO,WAAY;AACpC,IAAAvK,EAAe,MAAM,IAAIyK,EAAsB,CAAE;AAAA,EACnD;AACA,WAASW,GAAOnQ,GAAQjN,GAAOtQ,GAAU7zB,IAAI;AAC3C,UAAMoE,IAAQgtC,EAAO;AACrB,QAAI,OAAOvd,KAAa;AACtB,MAAA7zB,KAAK6zB,GACLA,IAAWzvB,EAAM;AAAA,SACZ;AACL,UAAI,CAACyvB,EAAU,CAAAA,IAAWzvB,EAAM;AAAA,eACvByvB,MAAa,YAAY,CAACrB,EAAO,WAAWqB,CAAQ,EAAG,OAAM,IAAImtB,GAAqBntB,CAAQ;AACvG,MAAI,OAAO7zB,MAAO,eAAYA,KAAK2zC;AAAA,IACvC;AACE,QAAIxP,MAAU;AACZ,YAAM,IAAIgW,EAAsB;AAC3B,QAAI,CAAC/1C,EAAM;AAChB,UAAI,OAAO+/B,KAAU;AACnB,QAAI//B,EAAM,kBAAkB,OAC1B+/B,IAAQ3R,EAAO,KAAK2R,GAAOtQ,CAAQ,GACnCA,IAAW;AAAA,eAEJsQ,aAAiB3R;AAC1B,QAAAqB,IAAW;AAAA,eACFkjB,EAAO,cAAc5S,CAAK;AACnC,QAAAA,IAAQ4S,EAAO,oBAAoB5S,CAAK,GACxCtQ,IAAW;AAAA;AAEX,cAAM,IAAI4V,EAAqB,SAAS,CAAC,UAAU,UAAU,YAAY,GAAGtF,CAAK;AAGrF,QAAIrH;AAMJ,WALI14B,EAAM,SACR04B,KAAM,IAAIikB,EAA0B,IAC3B38C,EAAM,cACf04B,KAAM,IAAI+jB,EAAqB,OAAO,IAEpC/jB,MACF+R,EAAQ,SAAS7uC,IAAI88B,EAAG,GACxBqZ,EAAe/E,GAAQtU,IAAK,EAAI,GACzBA,OAET14B,EAAM,aACCo9C,GAAcpQ,GAAQhtC,GAAO+/B,GAAOtQ,GAAU7zB,EAAE;AAAA,EACzD;AACA,EAAA0gD,GAAS,UAAU,QAAQ,SAAUvc,GAAOtQ,GAAU7zB,GAAI;AACxD,WAAOuhD,GAAO,MAAMpd,GAAOtQ,GAAU7zB,CAAE,MAAM;AAAA,EAC/C,GACA0gD,GAAS,UAAU,OAAO,WAAY;AACpC,SAAK,eAAe;AAAA,EACtB,GACAA,GAAS,UAAU,SAAS,WAAY;AACtC,UAAMt8C,IAAQ,KAAK;AACnB,IAAIA,EAAM,WACRA,EAAM,UACDA,EAAM,WAASi9C,GAAY,MAAMj9C,CAAK;AAAA,EAE/C,GACAs8C,GAAS,UAAU,qBAAqB,SAA4B7sB,GAAU;AAG5E,QADI,OAAOA,KAAa,aAAUA,IAAW2sB,EAA2B3sB,CAAQ,IAC5E,CAACrB,EAAO,WAAWqB,CAAQ,EAAG,OAAM,IAAImtB,GAAqBntB,CAAQ;AACzE,gBAAK,eAAe,kBAAkBA,GAC/B;AAAA,EACT;AAKA,WAAS2tB,GAAcpQ,GAAQhtC,GAAO+/B,GAAOtQ,IAAU3P,GAAU;AAC/D,UAAM3b,KAAMnE,EAAM,aAAa,IAAI+/B,EAAM;AACzC,IAAA//B,EAAM,UAAUmE;AAGhB,UAAMivB,IAAMpzB,EAAM,SAASA,EAAM;AAEjC,WAAKozB,MAAKpzB,EAAM,YAAY,KACxBA,EAAM,WAAWA,EAAM,UAAUA,EAAM,WAAW,CAACA,EAAM,eAC3DA,EAAM,SAAS,KAAK;AAAA,MAClB,OAAA+/B;AAAA,MACA,UAAAtQ;AAAA,MACA,UAAA3P;AAAA,KACD,GACG9f,EAAM,cAAcyvB,OAAa,aACnCzvB,EAAM,aAAa,KAEjBA,EAAM,WAAW8f,MAAayvB,MAChCvvC,EAAM,UAAU,QAGlBA,EAAM,WAAWmE,IACjBnE,EAAM,UAAU8f,GAChB9f,EAAM,UAAU,IAChBA,EAAM,OAAO,IACbgtC,EAAO,OAAOjN,GAAOtQ,IAAUzvB,EAAM,OAAO,GAC5CA,EAAM,OAAO,KAKRozB,KAAO,CAACpzB,EAAM,WAAW,CAACA,EAAM;AAAA,EACzC;AACA,WAASq9C,EAAQrQ,GAAQhtC,GAAOs9C,GAAQn5C,IAAK47B,GAAOtQ,IAAU7zB,GAAI;AAChE,IAAAoE,EAAM,WAAWmE,IACjBnE,EAAM,UAAUpE,GAChBoE,EAAM,UAAU,IAChBA,EAAM,OAAO,IACTA,EAAM,YAAWA,EAAM,QAAQ,IAAIy8C,EAAqB,OAAO,CAAC,IAC3Da,IAAQtQ,EAAO,QAAQjN,GAAO//B,EAAM,OAAO,IAC/CgtC,EAAO,OAAOjN,GAAOtQ,IAAUzvB,EAAM,OAAO,GACjDA,EAAM,OAAO;AAAA,EACf;AACA,WAASu9C,GAAavQ,GAAQhtC,GAAO6jC,GAAIjoC,IAAI;AAC3C,MAAEoE,EAAM,WACRpE,GAAGioC,CAAE,GAKL2Z,EAAYx9C,CAAK,GAEjB+xC,EAAe/E,GAAQnJ,CAAE;AAAA,EAC3B;AACA,WAASkZ,EAAQ/P,GAAQnJ,GAAI;AAC3B,UAAM7jC,IAAQgtC,EAAO,gBACfgF,KAAOhyC,EAAM,MACbpE,IAAKoE,EAAM;AACjB,QAAI,OAAOpE,KAAO,YAAY;AAC5B,MAAAm2C,EAAe/E,GAAQ,IAAImE,EAAqB,CAAE;AAClD;AAAA,IACJ;AACE,IAAAnxC,EAAM,UAAU,IAChBA,EAAM,UAAU,MAChBA,EAAM,UAAUA,EAAM,UACtBA,EAAM,WAAW,GACb6jC,KAEFA,EAAG,OAEE7jC,EAAM,YACTA,EAAM,UAAU6jC,IAKdmJ,EAAO,kBAAkB,CAACA,EAAO,eAAe,YAClDA,EAAO,eAAe,UAAUnJ,IAE9BmO,KACFvH,EAAQ,SAAS8S,IAAcvQ,GAAQhtC,GAAO6jC,GAAIjoC,CAAE,IAEpD2hD,GAAavQ,GAAQhtC,GAAO6jC,GAAIjoC,CAAE,MAGhCoE,EAAM,SAAS,SAASA,EAAM,iBAChCi9C,GAAYjQ,GAAQhtC,CAAK,GAEvBgyC,KAKEhyC,EAAM,uBAAuB,QAAQA,EAAM,mBAAmB,OAAOpE,IACvEoE,EAAM,mBAAmB,WAEzBA,EAAM,qBAAqB;AAAA,MACzB,OAAO;AAAA,MACP,IAAApE;AAAA,MACA,QAAAoxC;AAAA,MACA,OAAAhtC;AAAA,IACV,GACQyqC,EAAQ,SAASgT,GAAgBz9C,EAAM,kBAAkB,KAG3Db,EAAW6tC,GAAQhtC,GAAO,GAAGpE,CAAE;AAAA,EAGrC;AACA,WAAS6hD,EAAe,EAAE,QAAAzQ,GAAQ,OAAAhtC,GAAO,OAAA09C,GAAO,IAAA9hD,GAAE,GAAI;AACpD,WAAAoE,EAAM,qBAAqB,MACpBb,EAAW6tC,GAAQhtC,GAAO09C,GAAO9hD,EAAE;AAAA,EAC5C;AACA,WAASuD,EAAW6tC,GAAQhtC,GAAO09C,GAAO9hD,IAAI;AAM5C,SALkB,CAACoE,EAAM,UAAU,CAACgtC,EAAO,aAAahtC,EAAM,WAAW,KAAKA,EAAM,cAElFA,EAAM,YAAY,IAClBgtC,EAAO,KAAK,OAAO,IAEd0Q,MAAU;AACf,MAAA19C,EAAM,aACNpE,GAAE;AAEJ,IAAIoE,EAAM,aACRw9C,EAAYx9C,CAAK,GAEnBk9C,EAAYlQ,GAAQhtC,CAAK;AAAA,EAC3B;AAGA,WAASw9C,EAAYx9C,GAAO;AAC1B,QAAIA,EAAM;AACR;AAEF,aAASgxB,IAAIhxB,EAAM,eAAegxB,IAAIhxB,EAAM,SAAS,QAAQ,EAAEgxB,GAAG;AAChE,UAAI2sB;AACJ,YAAM,EAAE,OAAA5d,IAAO,UAAAjgB,EAAQ,IAAK9f,EAAM,SAASgxB,CAAC,GACtC7sB,IAAMnE,EAAM,aAAa,IAAI+/B,GAAM;AACzC,MAAA//B,EAAM,UAAUmE,GAChB2b;AAAA,SACG69B,IAAiB39C,EAAM,aAAa,QAAQ29C,MAAmB,SAC5DA,IACA,IAAIlB,EAAqB,OAAO;AAAA,MAC1C;AAAA,IACA;AACE,UAAMmB,IAAoB59C,EAAM68C,CAAW,EAAE,OAAO,CAAC;AACrD,aAASrvC,IAAI,GAAGA,IAAIowC,EAAkB,QAAQpwC,KAAK;AACjD,UAAIqwC;AACJ,MAAAD,EAAkBpwC,CAAC;AAAA,SAChBqwC,KAAkB79C,EAAM,aAAa,QAAQ69C,OAAoB,SAC9DA,KACA,IAAIpB,EAAqB,KAAK;AAAA,MACxC;AAAA,IACA;AACE,IAAAO,GAAYh9C,CAAK;AAAA,EACnB;AAGA,WAASi9C,GAAYjQ,GAAQhtC,GAAO;AAClC,QAAIA,EAAM,UAAUA,EAAM,oBAAoBA,EAAM,aAAa,CAACA,EAAM;AACtE;AAEF,UAAM,EAAE,UAAA89C,GAAU,eAAAC,IAAe,YAAA5J,MAAen0C,GAC1Cg+C,KAAiBF,EAAS,SAASC;AACzC,QAAI,CAACC;AACH;AAEF,QAAIxwC,IAAIuwC;AAER,QADA/9C,EAAM,mBAAmB,IACrBg+C,KAAiB,KAAKhR,EAAO,SAAS;AACxC,MAAAhtC,EAAM,aAAag+C,KAAiB;AACpC,YAAMl+B,IAAW9f,EAAM,UACnBuvC,IACA,CAAC7W,MAAQ;AACP,iBAAS1H,KAAIxjB,GAAGwjB,KAAI8sB,EAAS,QAAQ,EAAE9sB;AACrC,UAAA8sB,EAAS9sB,EAAC,EAAE,SAAS0H,CAAG;AAAA,MAEpC,GAGUulB,IAASj+C,EAAM,WAAWwN,MAAM,IAAIswC,IAAW9B,EAAoB8B,GAAUtwC,CAAC;AACpF,MAAAywC,EAAO,aAAaj+C,EAAM,YAC1Bq9C,EAAQrQ,GAAQhtC,GAAO,IAAMA,EAAM,QAAQi+C,GAAQ,IAAIn+B,CAAQ,GAC/Dk9B,GAAYh9C,CAAK;AAAA,IACrB,OAAS;AACL,SAAG;AACD,cAAM,EAAE,OAAA+/B,GAAO,UAAAtQ,GAAU,UAAA3P,EAAQ,IAAKg+B,EAAStwC,CAAC;AAChD,QAAAswC,EAAStwC,GAAG,IAAI;AAChB,cAAMrJ,KAAMgwC,IAAa,IAAIpU,EAAM;AACnC,QAAAsd,EAAQrQ,GAAQhtC,GAAO,IAAOmE,IAAK47B,GAAOtQ,GAAU3P,CAAQ;AAAA,MAClE,SAAatS,IAAIswC,EAAS,UAAU,CAAC99C,EAAM;AACvC,MAAIwN,MAAMswC,EAAS,SACjBd,GAAYh9C,CAAK,IACRwN,IAAI,OACbswC,EAAS,OAAO,GAAGtwC,CAAC,GACpBxN,EAAM,gBAAgB,KAEtBA,EAAM,gBAAgBwN;AAAA,IAE5B;AACE,IAAAxN,EAAM,mBAAmB;AAAA,EAC3B;AACA,EAAAs8C,GAAS,UAAU,SAAS,SAAUvc,GAAOtQ,GAAU7zB,GAAI;AACzD,QAAI,KAAK;AACP,WAAK;AAAA,QACH;AAAA,UACE;AAAA,YACE,OAAAmkC;AAAA,YACA,UAAAtQ;AAAA,UACV;AAAA;QAEM7zB;AAAA,MACN;AAAA;AAEI,YAAM,IAAI27C,EAA2B,UAAU;AAAA,EAEnD,GACA+E,GAAS,UAAU,UAAU,MAC7BA,GAAS,UAAU,MAAM,SAAUvc,GAAOtQ,GAAU7zB,GAAI;AACtD,UAAMoE,KAAQ,KAAK;AACnB,IAAI,OAAO+/B,KAAU,cACnBnkC,IAAKmkC,GACLA,IAAQ,MACRtQ,IAAW,QACF,OAAOA,KAAa,eAC7B7zB,IAAK6zB,GACLA,IAAW;AAEb,QAAIiJ;AACJ,QAAIqH,KAAU,MAA6B;AACzC,YAAM3M,KAAM+pB,GAAO,MAAMpd,GAAOtQ,CAAQ;AACxC,MAAI2D,cAAe6oB,MACjBvjB,IAAMtF;AAAA,IAEZ;AAGE,WAAIpzB,GAAM,WACRA,GAAM,SAAS,GACf,KAAK,OAAM,IAET04B,MAEO,CAAC14B,GAAM,WAAW,CAACA,GAAM,UAOlCA,GAAM,SAAS,IACfk9C,EAAY,MAAMl9C,IAAO,EAAI,GAC7BA,GAAM,QAAQ,MACLA,GAAM,WACf04B,IAAM,IAAIgkB,EAA4B,KAAK,IAClC18C,GAAM,cACf04B,IAAM,IAAI+jB,EAAqB,KAAK,KAElC,OAAO7gD,KAAO,eACZ88B,KAAO14B,GAAM,WACfyqC,EAAQ,SAAS7uC,GAAI88B,CAAG,IAExB14B,GAAM68C,CAAW,EAAE,KAAKjhD,CAAE,IAGvB;AAAA,EACT;AACA,WAASsiD,GAAWl+C,GAAO;AACzB,WACEA,EAAM,UACN,CAACA,EAAM,aACPA,EAAM,eACNA,EAAM,WAAW,KACjB,CAACA,EAAM,WACPA,EAAM,SAAS,WAAW,KAC1B,CAACA,EAAM,YACP,CAACA,EAAM,WACP,CAACA,EAAM,gBACP,CAACA,EAAM;AAAA,EAEX;AACA,WAASm+C,GAAUnR,GAAQhtC,GAAO;AAChC,QAAIkmC,IAAS;AACb,aAASkY,GAAS1lB,GAAK;AACrB,UAAIwN,GAAQ;AACV,QAAA6L,EAAe/E,GAAQtU,KAA0CyY,EAAqB,CAAE;AACxF;AAAA,MACN;AAGI,UAFAjL,IAAS,IACTlmC,EAAM,aACF04B,GAAK;AACP,cAAMklB,KAAoB59C,EAAM68C,CAAW,EAAE,OAAO,CAAC;AACrD,iBAASrvC,IAAI,GAAGA,IAAIowC,GAAkB,QAAQpwC;AAC5C,UAAAowC,GAAkBpwC,CAAC,EAAEkrB,CAAG;AAE1B,QAAAqZ,EAAe/E,GAAQtU,GAAK14B,EAAM,IAAI;AAAA,MAC5C,MAAW,CAAIk+C,GAAWl+C,CAAK,MACzBA,EAAM,cAAc,IACpBgtC,EAAO,KAAK,WAAW,GAIvBhtC,EAAM,aACNyqC,EAAQ,SAAS4T,GAAQrR,GAAQhtC,CAAK;AAAA,IAE5C;AACE,IAAAA,EAAM,OAAO,IACbA,EAAM;AACN,QAAI;AACF,MAAAgtC,EAAO,OAAOoR,EAAQ;AAAA,IAC1B,SAAW1lB,GAAK;AACZ,MAAA0lB,GAAS1lB,CAAG;AAAA,IAChB;AACE,IAAA14B,EAAM,OAAO;AAAA,EACf;AACA,WAASs+C,GAAUtR,GAAQhtC,GAAO;AAChC,IAAI,CAACA,EAAM,eAAe,CAACA,EAAM,gBAC3B,OAAOgtC,EAAO,UAAW,cAAc,CAAChtC,EAAM,aAChDA,EAAM,cAAc,IACpBm+C,GAAUnR,GAAQhtC,CAAK,MAEvBA,EAAM,cAAc,IACpBgtC,EAAO,KAAK,WAAW;AAAA,EAG7B;AACA,WAASkQ,EAAYlQ,GAAQhtC,GAAOgyC,GAAM;AACxC,IAAIkM,GAAWl+C,CAAK,MAClBs+C,GAAUtR,GAAQhtC,CAAK,GACnBA,EAAM,cAAc,MAClBgyC,KACFhyC,EAAM,aACNyqC,EAAQ;AAAA,MACN,CAACuC,IAAQhtC,MAAU;AACjB,QAAIk+C,GAAWl+C,CAAK,IAClBq+C,EAAOrR,IAAQhtC,CAAK,IAEpBA,EAAM;AAAA,MAEpB;AAAA,MACUgtC;AAAA,MACAhtC;AAAA,IACV,KACiBk+C,GAAWl+C,CAAK,MACzBA,EAAM,aACNq+C,EAAOrR,GAAQhtC,CAAK;AAAA,EAI5B;AACA,WAASq+C,EAAOrR,GAAQhtC,GAAO;AAC7B,IAAAA,EAAM,aACNA,EAAM,WAAW;AACjB,UAAM49C,IAAoB59C,EAAM68C,CAAW,EAAE,OAAO,CAAC;AACrD,aAASrvC,KAAI,GAAGA,KAAIowC,EAAkB,QAAQpwC;AAC5C,MAAAowC,EAAkBpwC,EAAC,EAAC;AAGtB,QADAw/B,EAAO,KAAK,QAAQ,GAChBhtC,EAAM,aAAa;AAGrB,YAAMktC,KAASF,EAAO;AAOtB,OALE,CAACE,MACAA,GAAO;AAAA;AAAA,OAGLA,GAAO,cAAcA,GAAO,aAAa,QAE5CF,EAAO,QAAO;AAAA,IAEpB;AAAA,EACA;AACA,EAAAyJ,EAAuB6F,GAAS,WAAW;AAAA,IACzC,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,MAChE;AAAA;IAEE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,MACnE;AAAA,MACI,IAAI7gD,GAAO;AAET,QAAI,KAAK,mBACP,KAAK,eAAe,YAAYA;AAAA,MAExC;AAAA;IAEE,UAAU;AAAA,MACR,WAAW;AAAA,MACX,MAAM;AACJ,cAAMwoC,IAAI,KAAK;AAKf,eAAO,CAAC,CAACA,KAAKA,EAAE,aAAa,MAAS,CAACA,EAAE,aAAa,CAACA,EAAE,WAAW,CAACA,EAAE,UAAU,CAACA,EAAE;AAAA,MAC1F;AAAA,MACI,IAAI1oC,GAAK;AAEP,QAAI,KAAK,mBACP,KAAK,eAAe,WAAW,CAAC,CAACA;AAAA,MAEzC;AAAA;IAEE,kBAAkB;AAAA,MAChB,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,WAAW;AAAA,MAClE;AAAA;IAEE,oBAAoB;AAAA,MAClB,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,MACpE;AAAA;IAEE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,kBAAkB,KAAK,eAAe,UAAS;AAAA,MACjE;AAAA;IAEE,eAAe;AAAA,MACb,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,MAChE;AAAA;IAEE,mBAAmB;AAAA,MACjB,WAAW;AAAA,MACX,MAAM;AACJ,cAAM0xC,IAAS,KAAK;AACpB,eAAKA,IACE,CAACA,EAAO,aAAa,CAACA,EAAO,UAAUA,EAAO,YADjC;AAAA,MAE1B;AAAA;IAEE,uBAAuB;AAAA,MACrB,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,MACxD;AAAA;IAEE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,MAChE;AAAA;IAEE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,MACxD;AAAA;IAEE,SAAS;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,KAAK,iBAAiB,KAAK,eAAe,UAAU;AAAA,MACjE;AAAA;IAEE,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,CAAC,EACN,KAAK,eAAe,aAAa,OAChC,KAAK,eAAe,aAAa,KAAK,eAAe,YACtD,CAAC,KAAK,eAAe;AAAA,MAE7B;AAAA,IACA;AAAA,GACC;AACD,QAAM3vB,KAAU85B,EAAY;AAC5B,EAAAkF,GAAS,UAAU,UAAU,SAAU5jB,GAAK98B,GAAI;AAC9C,UAAMoE,IAAQ,KAAK;AAGnB,WAAI,CAACA,EAAM,cAAcA,EAAM,gBAAgBA,EAAM,SAAS,UAAUA,EAAM68C,CAAW,EAAE,WACzFpS,EAAQ,SAAS+S,GAAax9C,CAAK,GAErCsd,GAAQ,KAAK,MAAMob,GAAK98B,CAAE,GACnB;AAAA,EACT,GACA0gD,GAAS,UAAU,aAAalF,EAAY,WAC5CkF,GAAS,UAAU,WAAW,SAAU5jB,GAAK98B,GAAI;AAC/C,IAAAA,EAAG88B,CAAG;AAAA,EACR,GACA4jB,GAAS,UAAU5J,EAAG,sBAAsB,IAAI,SAAUha,GAAK;AAC7D,SAAK,QAAQA,CAAG;AAAA,EAClB;AACA,MAAIijB;AAGJ,WAASC,KAAiB;AACxB,WAAID,OAAuB,WAAWA,KAAqB,CAAA,IACpDA;AAAA,EACT;AACA,SAAAW,GAAS,UAAU,SAAUiC,GAAgB1iD,GAAS;AACpD,WAAO+/C,GAAc,EAAG,oCAAoC2C,GAAgB1iD,CAAO;AAAA,EACrF,GACAygD,GAAS,QAAQ,SAAUkC,GAAgB;AACzC,WAAO5C,GAAc,EAAG,oCAAoC4C,CAAc;AAAA,EAC5E;;;;;;AChzBA,QAAM/T,IAAUzc,GAAA,GAKVoX,IAAenX,GAAA,GACf;AAAA,IACJ,YAAAsf;AAAA,IACA,YAAAC;AAAA,IACA,YAAAV;AAAA,IACA,cAAAL;AAAA,IACA,sBAAAN;AAAA,IACA,sBAAAG;AAAA,IACA,oBAAAE;AAAA,IACA,kBAAAE;AAAA,IACA,kBAAAC;AAAA,EACF,IAAIrH,GAAA,GACEkK,IAAM/J,GAAA,GACN;AAAA,IACJ,YAAAtD;AAAA,IACA,OAAO,EAAE,sBAAAkD,GAAsB,0BAAAoZ,EAAwB;AAAA,EACzD,IAAI/Y,GAAA,GACE,EAAE,WAAA6M,EAAS,IAAKnM,GAAA,GAChBsY,IAAS3H,GAAA,GACTf,IAAWiB,GAAA,GACXqF,IAAWnF,GAAA,GACX,EAAE,uBAAAwH,EAAqB,IAAKtH,GAAA,GAC5BvoB,IAAOwoB,GAAA,GACP1R,IAAO,WAAW,QAAQR,EAAa,MACvCS,IACJ,OAAOD,IAAS,MACZ,SAAgBr5B,GAAG;AACjB,WAAOA,aAAaq5B;AAAA,EAC5B,IACM,SAAgBr5B,GAAG;AACjB,WAAO;AAAA,EACf,GACMm2B,IAAkB,WAAW,mBAAmBgV,KAA4B,iBAC5E,EAAE,uBAAAkH,EAAqB,IAAKjH,GAAA;AAAA,EAGlC,MAAMkH,WAAkBH,EAAO;AAAA,IAC7B,YAAY7iD,GAAS;AACnB,YAAMA,CAAO,GAIgDA,GAAQ,aAAc,OACjF,KAAK,eAAe,WAAW,IAC/B,KAAK,eAAe,QAAQ,IAC5B,KAAK,eAAe,aAAa,KAE0BA,GAAQ,aAAc,OACjF,KAAK,eAAe,WAAW,IAC/B,KAAK,eAAe,SAAS,IAC7B,KAAK,eAAe,QAAQ,IAC5B,KAAK,eAAe,WAAW;AAAA,IAErC;AAAA,EACA;AACA,EAAAijD,KAAiB,SAASA,EAAU/1C,GAAM9I,IAAM;AAC9C,QAAIusC,EAAmBzjC,CAAI;AACzB,aAAOA;AAET,QAAIojC,EAAqBpjC,CAAI;AAC3B,aAAOg2C,EAAW;AAAA,QAChB,UAAUh2C;AAAA,OACX;AAEH,QAAIujC,EAAqBvjC,CAAI;AAC3B,aAAOg2C,EAAW;AAAA,QAChB,UAAUh2C;AAAA,OACX;AAEH,QAAI0jC,EAAa1jC,CAAI;AACnB,aAAOg2C,EAAW;AAAA,QAChB,UAAU;AAAA,QACV,UAAU;AAAA,OACX;AAEH,QAAIrS,EAAiB3jC,CAAI;AACvB,aAAOg2C,EAAW;AAAA,QAChB,UAAU/I,EAAS,QAAQjtC,CAAI;AAAA,OAChC;AAEH,QAAI4jC,EAAiB5jC,CAAI;AACvB,aAAOg2C,EAAW;AAAA,QAChB,UAAUzC,EAAS,QAAQvzC,CAAI;AAAA,OAChC;AAEH,QAAI,OAAOA,KAAS,YAAY;AAC9B,YAAM,EAAE,OAAAtN,IAAO,OAAAyD,IAAO,OAAA8/C,GAAO,SAAA1hC,GAAO,IAAK2hC,EAAal2C,CAAI;AAC1D,UAAI+jC,EAAWrxC,EAAK;AAClB,eAAOqzB,EAAK+vB,IAAWpjD,IAAO;AAAA;AAAA,UAE5B,YAAY;AAAA,UACZ,OAAAyD;AAAA,UACA,OAAA8/C;AAAA,UACA,SAAA1hC;AAAA,SACD;AAEH,YAAM4hC,IAA2DzjD,IAAM;AACvE,UAAI,OAAOyjD,KAAS,YAAY;AAC9B,YAAIvxB;AACJ,cAAMwxB,IAAUP;AAAA,UACdM;AAAA,UACAzjD;AAAA,UACA,CAACF,MAAQ;AACP,gBAAIA,KAAO;AACT,oBAAM,IAAIkjD,EAAyB,SAAS,QAAQljD,CAAG;AAAA,UAEnE;AAAA,UACQ,CAACm9B,MAAQ;AACP,YAAA6Z,EAAU5kB,GAAG+K,CAAG;AAAA,UAC1B;AAAA,QACA;AACM,eAAQ/K,IAAI,IAAIkxB,GAAU;AAAA;AAAA,UAExB,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAA3/C;AAAA,UACA,MAAMtD,GAAI;AACR,YAAAojD,EAAM,YAAY;AAChB,kBAAI;AACF,sBAAMG,GACN1U,EAAQ,SAAS7uC,GAAI,IAAI;AAAA,cACvC,SAAqB88B,IAAK;AACZ,gBAAA+R,EAAQ,SAAS7uC,GAAI88B,EAAG;AAAA,cACtC;AAAA,YACA,CAAW;AAAA,UACX;AAAA,UACQ,SAAApb;AAAA,QACR,CAAO;AAAA,MACP;AACI,YAAM,IAAImhC,EAAyB,4CAA4Cx+C,IAAMxE,EAAK;AAAA,IAC9F;AACE,QAAIoqC,EAAO98B,CAAI;AACb,aAAO+1C,EAAU/1C,EAAK,YAAW,CAAE;AAErC,QAAI+jC,EAAW/jC,CAAI;AACjB,aAAO+lB,EAAK+vB,IAAW91C,GAAM;AAAA;AAAA,QAE3B,YAAY;AAAA,QACZ,UAAU;AAAA,OACX;AAEH,QACE2jC,EAAmE3jC,GAAK,QAAQ,KAChF4jC,EAAmE5jC,GAAK,QAAQ;AAEhF,aAAO81C,GAAU,QAAQ91C,CAAI;AAE/B,QACE,OAA0DA,GAAK,YAAc,YAC7E,OAA0DA,GAAK,YAAc,UAC7E;AACA,YAAM6mC,KACJ7mC,KAAS,QAA8BA,EAAK,WACxCojC,EAAuEpjC,GAAK,QAAQ,IAGhFA,GAAK,WACP+1C,EAAU/1C,EAAK,QAAQ,IACzB,QACA8mC,KACJ9mC,KAAS,QAA8BA,EAAK,WACxCujC,EAAuEvjC,GAAK,QAAQ,IAGhFA,GAAK,WACP+1C,EAAU/1C,EAAK,QAAQ,IACzB;AACN,aAAOg2C,EAAW;AAAA,QAChB,UAAAnP;AAAA,QACA,UAAAC;AAAA,OACD;AAAA,IACL;AACE,UAAMqP,KAAyDn2C,GAAK;AACpE,QAAI,OAAOm2C,MAAS,YAAY;AAC9B,UAAIvxB;AACJ,aAAAixB;AAAA,QACEM;AAAA,QACAn2C;AAAA,QACA,CAACxN,OAAQ;AACP,UAAIA,MAAO,QACToyB,GAAE,KAAKpyB,EAAG,GAEZoyB,GAAE,KAAK,IAAI;AAAA,QACnB;AAAA,QACM,CAAC+K,OAAQ;AACP,UAAA6Z,EAAU5kB,IAAG+K,EAAG;AAAA,QACxB;AAAA,MACA,GACY/K,KAAI,IAAIkxB,GAAU;AAAA,QACxB,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,QAAA;AAAA,MACb,CAAK;AAAA,IACL;AACE,UAAM,IAAIxZ;AAAA,MACRplC;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;MAEF8I;AAAA,IACJ;AAAA,EACA;AACA,WAASk2C,EAAavhD,GAAI;AACxB,QAAI,EAAE,SAAAyhD,GAAS,SAAAzrC,GAAO,IAAKirC,EAAqB;AAChD,UAAMnY,KAAK,IAAI9D,EAAe,GACxBqD,KAASS,GAAG;AAqBlB,WAAO;AAAA,MACL,OArBY9oC;AAAA,SACX,mBAAmB;AAClB,qBAAa;AACX,kBAAM0hD,IAAWD;AACjB,YAAAA,IAAU;AACV,kBAAM,EAAE,OAAApf,IAAO,MAAAC,GAAM,IAAApkC,EAAE,IAAK,MAAMwjD;AAElC,gBADA3U,EAAQ,SAAS7uC,CAAE,GACfokC,EAAM;AACV,gBAAI+F,GAAO;AACT,oBAAM,IAAI5D,EAAW,QAAW;AAAA,gBAC9B,OAAO4D,GAAO;AAAA,eACf;AACF,aAAC,EAAE,SAAAoZ,GAAS,SAAAzrC,GAAO,IAAKirC,EAAqB,IAC9C,MAAM5e;AAAA,UACd;AAAA,QACA,GAAK;AAAA,QACD;AAAA,UACE,QAAAgG;AAAA,QACN;AAAA,MACA;AAAA,MAGI,MAAMhG,GAAOtQ,IAAU7zB,GAAI;AACzB,cAAMyjD,IAAW3rC;AACjB,QAAAA,KAAU,MACV2rC,EAAS;AAAA,UACP,OAAAtf;AAAA,UACA,MAAM;AAAA,UACN,IAAAnkC;AAAA,SACD;AAAA,MACP;AAAA,MACI,MAAMA,GAAI;AACR,cAAMyjD,KAAW3rC;AACjB,QAAAA,KAAU,MACV2rC,GAAS;AAAA,UACP,MAAM;AAAA,UACN,IAAAzjD;AAAA,SACD;AAAA,MACP;AAAA,MACI,QAAQ88B,GAAK98B,IAAI;AACf,QAAA4qC,GAAG,MAAK,GACR5qC,GAAG88B,CAAG;AAAA,MACZ;AAAA,IACA;AAAA,EACA;AACA,WAASqmB,EAAWO,GAAM;AACxB,UAAM9N,IAAI8N,EAAK,YAAY,OAAOA,EAAK,SAAS,QAAS,aAAatJ,EAAS,KAAKsJ,EAAK,QAAQ,IAAIA,EAAK,UACpGrb,KAAIqb,EAAK;AACf,QAAI1P,KAAW,CAAC,CAACrC,EAAWiE,CAAC,GACzB3B,KAAW,CAAC,CAACrC,EAAWvJ,EAAC,GACzB6O,IACA/C,GACAwP,IACAlP,GACA1iB;AACJ,aAAS6xB,EAAW9mB,GAAK;AACvB,YAAM98B,KAAKy0C;AACX,MAAAA,IAAU,MACNz0C,KACFA,GAAG88B,CAAG,IACGA,KACT/K,EAAE,QAAQ+K,CAAG;AAAA,IAEnB;AAKE,WAAA/K,IAAI,IAAIkxB,GAAU;AAAA;AAAA,MAEhB,oBAAoB,CAAC,EAAErN,KAAM,QAA2BA,EAAE;AAAA,MAC1D,oBAAoB,CAAC,EAAEvN,MAAM,QAA2BA,GAAE;AAAA,MAC1D,UAAA2L;AAAA,MACA,UAAAC;AAAA,KACD,GACGA,OACFL,EAAIvL,IAAG,CAACvL,MAAQ;AACd,MAAAmX,KAAW,IACPnX,KACF6Z,EAAUf,GAAG9Y,CAAG,GAElB8mB,EAAW9mB,CAAG;AAAA,IACpB,CAAK,GACD/K,EAAE,SAAS,SAAUoS,GAAOtQ,IAAU3P,IAAU;AAC9C,MAAImkB,GAAE,MAAMlE,GAAOtQ,EAAQ,IACzB3P,GAAQ,IAERgzB,KAAUhzB;AAAA,IAElB,GACI6N,EAAE,SAAS,SAAU7N,GAAU;AAC7B,MAAAmkB,GAAE,IAAG,GACL8L,IAAWjwB;AAAA,IACjB,GACImkB,GAAE,GAAG,SAAS,WAAY;AACxB,UAAI6O,IAAS;AACX,cAAMl3C,IAAKk3C;AACX,QAAAA,KAAU,MACVl3C,EAAE;AAAA,MACV;AAAA,IACA,CAAK,GACDqoC,GAAE,GAAG,UAAU,WAAY;AACzB,UAAI8L,GAAU;AACZ,cAAMn0C,IAAKm0C;AACX,QAAAA,IAAW,MACXn0C,EAAE;AAAA,MACV;AAAA,IACA,CAAK,IAECg0C,OACFJ,EAAIgC,GAAG,CAAC9Y,MAAQ;AACd,MAAAkX,KAAW,IACPlX,KACF6Z,EAAUf,GAAG9Y,CAAG,GAElB8mB,EAAW9mB,CAAG;AAAA,IACpB,CAAK,GACD8Y,EAAE,GAAG,YAAY,WAAY;AAC3B,UAAI+N,IAAY;AACd,cAAM3jD,IAAK2jD;AACX,QAAAA,KAAa,MACb3jD,EAAE;AAAA,MACV;AAAA,IACA,CAAK,GACD41C,EAAE,GAAG,OAAO,WAAY;AACtB,MAAA7jB,EAAE,KAAK,IAAI;AAAA,IACjB,CAAK,GACDA,EAAE,QAAQ,WAAY;AACpB,iBAAa;AACX,cAAMgB,IAAM6iB,EAAE,KAAI;AAClB,YAAI7iB,MAAQ,MAAM;AAChB,UAAA4wB,KAAa5xB,EAAE;AACf;AAAA,QACV;AACQ,YAAI,CAACA,EAAE,KAAKgB,CAAG;AACb;AAAA,MAEV;AAAA,IACA,IAEEhB,EAAE,WAAW,SAAU+K,GAAK5Y,IAAU;AACpC,MAAI,CAAC4Y,KAAO2X,MAAY,SACtB3X,IAAM,IAAIyJ,EAAU,IAEtBod,KAAa,MACbzM,KAAU,MACV/C,IAAW,MACPM,MAAY,OACdvwB,GAAS4Y,CAAG,KAEZ2X,IAAUvwB,IACVyyB,EAAUtO,IAAGvL,CAAG,GAChB6Z,EAAUf,GAAG9Y,CAAG;AAAA,IAEtB,GACS/K;AAAA,EACT;;;;;;;AC7VA,QAAM;AAAA,IACJ,wBAAA8oB;AAAA,IACA,gCAAAgJ;AAAA,IACA,YAAA/I;AAAA,IACA,sBAAAjE;AAAA,EACF,IAAIzkB,GAAA;AACJ,EAAA0xB,KAAiBhB;AACjB,QAAM1I,IAAW/nB,GAAA,GACXquB,IAAWhX,GAAA;AACjB,EAAAmN,EAAqBiM,EAAO,WAAW1I,EAAS,SAAS,GACzDvD,EAAqBiM,GAAQ1I,CAAQ;AACrC;AACE,UAAMzyC,IAAOmzC,EAAW4F,EAAS,SAAS;AAE1C,aAAS9uC,IAAI,GAAGA,IAAIjK,EAAK,QAAQiK,KAAK;AACpC,YAAM0L,IAAS3V,EAAKiK,CAAC;AACrB,MAAKkxC,EAAO,UAAUxlC,CAAM,MAAGwlC,EAAO,UAAUxlC,CAAM,IAAIojC,EAAS,UAAUpjC,CAAM;AAAA,IACvF;AAAA,EACA;AACA,WAASwlC,EAAO7iD,GAAS;AACvB,QAAI,EAAE,gBAAgB6iD,GAAS,QAAO,IAAIA,EAAO7iD,CAAO;AACxD,IAAAm6C,EAAS,KAAK,MAAMn6C,CAAO,GAC3BygD,EAAS,KAAK,MAAMzgD,CAAO,GACvBA,KACF,KAAK,gBAAgBA,EAAQ,kBAAkB,IAC3CA,EAAQ,aAAa,OACvB,KAAK,eAAe,WAAW,IAC/B,KAAK,eAAe,QAAQ,IAC5B,KAAK,eAAe,aAAa,KAE/BA,EAAQ,aAAa,OACvB,KAAK,eAAe,WAAW,IAC/B,KAAK,eAAe,SAAS,IAC7B,KAAK,eAAe,QAAQ,IAC5B,KAAK,eAAe,WAAW,OAGjC,KAAK,gBAAgB;AAAA,EAEzB;AACA,EAAA46C,EAAuBiI,EAAO,WAAW;AAAA,IACvC,UAAU;AAAA,MACR,WAAW;AAAA,MACX,GAAGe,EAA+BnD,EAAS,WAAW,UAAU;AAAA;IAElE,uBAAuB;AAAA,MACrB,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,uBAAuB;AAAA;IAE/E,oBAAoB;AAAA,MAClB,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,oBAAoB;AAAA;IAE5E,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,gBAAgB;AAAA;IAExE,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,gBAAgB;AAAA;IAExE,kBAAkB;AAAA,MAChB,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,kBAAkB;AAAA;IAE1E,gBAAgB;AAAA,MACd,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,gBAAgB;AAAA;IAExE,eAAe;AAAA,MACb,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,eAAe;AAAA;IAEvE,mBAAmB;AAAA,MACjB,WAAW;AAAA,MACX,GAAGmD,EAA+BnD,EAAS,WAAW,mBAAmB;AAAA;IAE3E,WAAW;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AACJ,eAAI,KAAK,mBAAmB,UAAa,KAAK,mBAAmB,SACxD,KAEF,KAAK,eAAe,aAAa,KAAK,eAAe;AAAA,MAClE;AAAA,MACI,IAAI7gD,GAAO;AAGT,QAAI,KAAK,kBAAkB,KAAK,mBAC9B,KAAK,eAAe,YAAYA,GAChC,KAAK,eAAe,YAAYA;AAAA,MAExC;AAAA,IACA;AAAA,GACC;AACD,MAAIkgD;AAGJ,WAASC,IAAiB;AACxB,WAAID,MAAuB,WAAWA,IAAqB,CAAA,IACpDA;AAAA,EACT;AACA,EAAA+C,EAAO,UAAU,SAAUY,GAAMzjD,GAAS;AACxC,WAAO+/C,EAAc,EAAG,wCAAwC0D,GAAMzjD,CAAO;AAAA,EAC/E,GACA6iD,EAAO,QAAQ,SAAUgB,GAAQ;AAC/B,WAAO9D,EAAc,EAAG,kCAAkC8D,CAAM;AAAA,EAClE;AACA,MAAIZ;AACJ,SAAAJ,EAAO,OAAO,SAAU31C,GAAM;AAC5B,WAAK+1C,MACHA,IAAYrZ,GAAA,IAEPqZ,EAAU/1C,GAAM,MAAM;AAAA,EAC/B;;;;;;AC7EA,QAAM,EAAE,sBAAA0pC,GAAsB,QAAArB,EAAM,IAAKpjB,GAAA;AACzC2xB,EAAAA,KAAiBC;AACjB,QAAM,EAAE,4BAAArI,MAA+BtpB,KAA6B,OAC9DywB,IAASpZ,GAAA,GACT,EAAE,kBAAA+O,EAAgB,IAAK5O,GAAA;AAC7B,EAAAgN,EAAqBmN,EAAU,WAAWlB,EAAO,SAAS,GAC1DjM,EAAqBmN,GAAWlB,CAAM;AACtC,QAAMmB,IAAYzO,EAAO,WAAW;AACpC,WAASwO,EAAU/jD,GAAS;AAC1B,QAAI,EAAE,gBAAgB+jD,GAAY,QAAO,IAAIA,EAAU/jD,CAAO;AAK9D,UAAMikD,IAAwBjkD,IAAUw4C,EAAiB,MAAMx4C,GAAS,yBAAyB,EAAI,IAAI;AACzG,IAAIikD,MAA0B,MAI5BjkD,IAAU;AAAA,MACR,GAAGA;AAAA,MACH,eAAe;AAAA,MACf,uBAAAikD;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,uBAAuBjkD,EAAQ,yBAAyB;AAAA,IAC9D,IAEE6iD,EAAO,KAAK,MAAM7iD,CAAO,GAKzB,KAAK,eAAe,OAAO,IAC3B,KAAKgkD,CAAS,IAAI,MACdhkD,MACE,OAAOA,EAAQ,aAAc,eAAY,KAAK,aAAaA,EAAQ,YACnE,OAAOA,EAAQ,SAAU,eAAY,KAAK,SAASA,EAAQ,SAOjE,KAAK,GAAG,aAAayiD,CAAS;AAAA,EAChC;AACA,WAASU,EAAMpjD,GAAI;AACjB,IAAI,OAAO,KAAK,UAAW,cAAc,CAAC,KAAK,YAC7C,KAAK,OAAO,CAACioC,GAAIt0B,MAAS;AACxB,UAAIs0B,GAAI;AACN,QAAIjoC,IACFA,EAAGioC,CAAE,IAEL,KAAK,QAAQA,CAAE;AAEjB;AAAA,MACR;AACM,MAAIt0B,KAAQ,QACV,KAAK,KAAKA,CAAI,GAEhB,KAAK,KAAK,IAAI,GACV3T,KACFA,EAAE;AAAA,IAEV,CAAK,KAED,KAAK,KAAK,IAAI,GACVA,KACFA,EAAE;AAAA,EAGR;AACA,WAAS0iD,IAAY;AACnB,IAAI,KAAK,WAAWU,KAClBA,EAAM,KAAK,IAAI;AAAA,EAEnB;AACA,SAAAY,EAAU,UAAU,SAASZ,GAC7BY,EAAU,UAAU,aAAa,SAAU7f,GAAOtQ,GAAU3P,GAAU;AACpE,UAAM,IAAIy3B,EAA2B,cAAc;AAAA,EACrD,GACAqI,EAAU,UAAU,SAAS,SAAU7f,GAAOtQ,GAAU3P,GAAU;AAChE,UAAMotB,IAAS,KAAK,gBACdD,IAAS,KAAK,gBACdve,IAASwe,EAAO;AACtB,SAAK,WAAWnN,GAAOtQ,GAAU,CAACiJ,GAAKn9B,MAAQ;AAC7C,UAAIm9B,GAAK;AACP,QAAA5Y,EAAS4Y,CAAG;AACZ;AAAA,MACN;AACI,MAAIn9B,KAAO,QACT,KAAK,KAAKA,CAAG,GAGb0xC,EAAO;AAAA,MAEPve,MAAWwe,EAAO;AAAA,MAElBA,EAAO,SAASA,EAAO,gBAEvBptB,EAAQ,IAER,KAAK+/B,CAAS,IAAI//B;AAAA,IAExB,CAAG;AAAA,EACH,GACA8/B,EAAU,UAAU,QAAQ,WAAY;AACtC,QAAI,KAAKC,CAAS,GAAG;AACnB,YAAM//B,IAAW,KAAK+/B,CAAS;AAC/B,WAAKA,CAAS,IAAI,MAClB//B,EAAQ;AAAA,IACZ;AAAA,EACA;;;;;;ACxJA,QAAM,EAAE,sBAAA2yB,EAAoB,IAAKzkB,GAAA;AACjC,EAAA+xB,KAAiBC;AACjB,QAAMJ,IAAY3xB,GAAA;AAClB,EAAAwkB,EAAqBuN,EAAY,WAAWJ,EAAU,SAAS,GAC/DnN,EAAqBuN,GAAaJ,CAAS;AAC3C,WAASI,EAAYnkD,GAAS;AAC5B,QAAI,EAAE,gBAAgBmkD,GAAc,QAAO,IAAIA,EAAYnkD,CAAO;AAClE,IAAA+jD,EAAU,KAAK,MAAM/jD,CAAO;AAAA,EAC9B;AACA,SAAAmkD,EAAY,UAAU,aAAa,SAAUjgB,GAAOtQ,GAAU7zB,GAAI;AAChE,IAAAA,EAAG,MAAMmkC,CAAK;AAAA,EAChB;;;;;;ACpCA,QAAM0K,IAAUzc,GAAA,GAOV,EAAE,cAAA0Y,GAAc,SAAAwI,GAAS,qBAAAzD,GAAqB,eAAAjG,EAAa,IAAKvX,GAAA,GAChEuhB,IAAMlK,GAAA,GACN,EAAE,MAAAhC,EAAI,IAAKmC,GAAA,GACX2R,IAAc1R,GAAA,GACdgZ,IAAStY,GAAA,GACT;AAAA,IACJ,oBAAApE;AAAA,IACA,OAAO;AAAA,MACL,sBAAAqD;AAAA,MACA,0BAAAoZ;AAAA,MACA,kBAAAwB;AAAA,MACA,sBAAAxD;AAAA,MACA,4BAAAzN;AAAA;IAEF,YAAA7M;AAAA,EACF,IAAI4U,GAAA,GACE,EAAE,kBAAA/Q,GAAkB,qBAAAF,EAAmB,IAAKmR,GAAA,GAC5C;AAAA,IACJ,YAAAnK;AAAA,IACA,YAAAS;AAAA,IACA,sBAAApB;AAAA,IACA,cAAAM;AAAA,IACA,mBAAAG;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAH;AAAA,IACA,oBAAAY;AAAA,EACF,IAAI6J,GAAA,GACEzU,IAAkB,WAAW,mBAAmB2U,KAA4B;AAClF,MAAI2I,GACAhK,GACA3G;AACJ,WAASkD,GAAUvF,GAAQmJ,IAAS+J,IAAS;AAC3C,QAAInP,KAAW;AACf,IAAA/D,EAAO,GAAG,SAAS,MAAM;AACvB,MAAA+D,KAAW;AAAA,IACf,CAAG;AACD,UAAMN,KAAUjB;AAAA,MACdxC;AAAA,MACA;AAAA,QACE,UAAUmJ;AAAA,QACV,UAAU+J;AAAA;MAEZ,CAACxnB,MAAQ;AACP,QAAAqY,KAAW,CAACrY;AAAA,MAClB;AAAA,IACA;AACE,WAAO;AAAA,MACL,SAAS,CAACA,MAAQ;AAChB,QAAIqY,OACJA,KAAW,IACXqG,EAAY,UAAUpK,GAAQtU,KAAO,IAAI+jB,EAAqB,MAAM,CAAC;AAAA,MAC3E;AAAA,MACI,SAAAhM;AAAA,IACJ;AAAA,EACA;AACA,WAAS0P,GAAYC,GAAS;AAI5B,WAAApa,EAAiBoa,EAAQA,EAAQ,SAAS,CAAC,GAAG,4BAA4B,GACnEA,EAAQ,IAAG;AAAA,EACpB;AACA,WAASC,GAAkB9kD,GAAK;AAC9B,QAAIuxC,EAAWvxC,CAAG;AAChB,aAAOA;AACF,QAAI4wC,EAAqB5wC,CAAG;AAEjC,aAAO+kD,GAAa/kD,CAAG;AAEzB,UAAM,IAAI8pC,EAAqB,OAAO,CAAC,YAAY,YAAY,eAAe,GAAG9pC,CAAG;AAAA,EACtF;AACA,kBAAgB+kD,GAAa/kD,GAAK;AAChC,IAAKy6C,MACHA,IAAWsB,GAAA,IAEb,OAAOtB,EAAS,UAAUvK,CAAmB,EAAE,KAAKlwC,CAAG;AAAA,EACzD;AACA,iBAAeglD,EAAWtK,GAAUpG,IAAUwO,IAAQ,EAAE,KAAAngD,GAAG,GAAI;AAC7D,QAAI06B,IACA4nB,IAAY;AAChB,UAAMtF,IAAS,CAACxiB,OAAQ;AAItB,UAHIA,OACFE,KAAQF,KAEN8nB,GAAW;AACb,cAAM1gC,IAAW0gC;AACjB,QAAAA,IAAY,MACZ1gC,EAAQ;AAAA,MACd;AAAA,IACA,GACQ2gC,KAAO,MACX,IAAIvR,EAAQ,CAACx7B,IAASmxB,MAAW;AAC/B,MAAIjM,KACFiM,EAAOjM,EAAK,IAEZ4nB,IAAY,MAAM;AAChB,QAAI5nB,KACFiM,EAAOjM,EAAK,IAEZllB,GAAO;AAAA,MAEnB;AAAA,IAEA,CAAK;AACH,IAAAm8B,GAAS,GAAG,SAASqL,CAAM;AAC3B,UAAMzK,KAAUjB;AAAA,MACdK;AAAA,MACA;AAAA,QACE,UAAU;AAAA;MAEZqL;AAAA,IACJ;AACE,QAAI;AACF,MAAIrL,GAAS,qBACX,MAAM4Q,GAAI;AAEZ,uBAAiB1gB,MAASkW;AACxB,QAAKpG,GAAS,MAAM9P,EAAK,KACvB,MAAM0gB,GAAI;AAGd,MAAIviD,OACF2xC,GAAS,IAAG,GACZ,MAAM4Q,GAAI,IAEZpC,GAAM;AAAA,IACV,SAAW3lB,IAAK;AACZ,MAAA2lB,GAAOzlB,OAAUF,KAAMsJ,EAAmBpJ,IAAOF,EAAG,IAAIA,EAAG;AAAA,IAC/D,UAAG;AACC,MAAA+X,GAAO,GACPZ,GAAS,IAAI,SAASqL,CAAM;AAAA,IAChC;AAAA,EACA;AACA,iBAAewF,GAAU9Q,GAAUC,IAAUwO,IAAQ,EAAE,KAAAngD,GAAG,GAAI;AAC5D,IAAI0uC,EAAkBiD,EAAQ,MAC5BA,KAAWA,GAAS;AAGtB,UAAM8Q,KAAS9Q,GAAS,UAAS;AACjC,QAAI;AACF,uBAAiB9P,KAAS6P;AACxB,cAAM+Q,GAAO,OACbA,GAAO,MAAM5gB,CAAK,EAAE,MAAM,MAAM;AAAA,QAAA,CAAE;AAEpC,YAAM4gB,GAAO,OACTziD,MACF,MAAMyiD,GAAO,MAAK,GAEpBtC,GAAM;AAAA,IACV,SAAW3lB,GAAK;AACZ,UAAI;AACF,cAAMioB,GAAO,MAAMjoB,CAAG,GACtB2lB,GAAO3lB,CAAG;AAAA,MAChB,SAAaA,GAAK;AACZ,QAAA2lB,GAAO3lB,CAAG;AAAA,MAChB;AAAA,IACA;AAAA,EACA;AACA,WAASkoB,KAAYR,GAAS;AAC5B,WAAOS,EAAaT,GAAS9c,EAAK6c,GAAYC,CAAO,CAAC,CAAC;AAAA,EACzD;AACA,WAASS,EAAaT,GAAStgC,IAAUwI,IAAM;AAI7C,QAHI83B,EAAQ,WAAW,KAAK1Z,EAAa0Z,EAAQ,CAAC,CAAC,MACjDA,IAAUA,EAAQ,CAAC,IAEjBA,EAAQ,SAAS;AACnB,YAAM,IAAIH,EAAiB,SAAS;AAEtC,UAAMzZ,KAAK,IAAI9D,EAAe,GACxBqD,KAASS,GAAG,QACZsa,IAAgEx4B,IAAK,QAIrEy4B,IAAoB,CAAA;AAC1B,IAAAjb,EAAoBgb,GAAa,gBAAgB;AACjD,aAASra,KAAQ;AACf,MAAAua,EAAW,IAAI7e,EAAU,CAAE;AAAA,IAC/B;AACE,IAAAkN,IAAmBA,KAAoB5J,KAA2B;AAClE,QAAIkL;AACJ,IAAImQ,MACFnQ,KAAatB,EAAiByR,GAAara,EAAK;AAElD,QAAI7N,IACAn9B;AACJ,UAAMwlD,IAAW,CAAA;AACjB,QAAIC,IAAc;AAClB,aAAS7C,GAAO3lB,GAAK;AACnB,MAAAsoB,EAAWtoB,GAAK,EAAEwoB,MAAgB,CAAC;AAAA,IACvC;AACE,aAASF,EAAWtoB,GAAKsmB,GAAO;AAC9B,UAAImC;AAIJ,UAHIzoB,MAAQ,CAACE,MAASA,GAAM,SAAS,kCACnCA,KAAQF,IAEN,GAACE,MAAS,CAAComB,IAGf;AAAA,eAAOiC,EAAS;AACd,UAAAA,EAAS,MAAK,EAAGroB,EAAK;AAEvB,SAACuoB,KAAcxQ,QAAgB,QAAQwQ,OAAgB,UAAwBA,GAAY3b,CAAa,EAAC,GAC1GgB,GAAG,MAAK,GACJwY,MACGpmB,MACHmoB,EAAkB,QAAQ,CAACrjD,OAAOA,GAAE,CAAE,GAExC+sC,EAAQ,SAAS3qB,IAAU8Y,IAAOn9B,CAAK;AAAA;AAAA,IAE7C;AACE,QAAI23B;AACJ,aAAS5lB,IAAI,GAAGA,IAAI4yC,EAAQ,QAAQ5yC,KAAK;AACvC,YAAMw/B,IAASoT,EAAQ5yC,CAAC,GAClB2oC,KAAU3oC,IAAI4yC,EAAQ,SAAS,GAC/BF,KAAU1yC,IAAI,GACdtP,KAAMi4C,MAA8D7tB,IAAK,QAAS,IAClF84B,KAAe5zC,MAAM4yC,EAAQ,SAAS;AAC5C,UAAI3T,EAAaO,CAAM,GAAG;AAUxB,YAASqU,IAAT,SAAiB3oB,GAAK;AACpB,UAAIA,KAAOA,EAAI,SAAS,gBAAgBA,EAAI,SAAS,gCACnD2lB,GAAO3lB,CAAG;AAAA,QAEpB;AAbM,YAAIx6B,IAAK;AACP,gBAAM,EAAE,SAAAof,GAAS,SAAAmzB,EAAO,IAAK8B,GAAUvF,GAAQmJ,IAAS+J,EAAO;AAC/D,UAAAe,EAAS,KAAK3jC,CAAO,GACjBiwB,EAAWP,CAAM,KAAKoU,MACxBL,EAAkB,KAAKtQ,CAAO;AAAA,QAExC;AAQM,QAAAzD,EAAO,GAAG,SAASqU,CAAO,GACtB9T,EAAWP,CAAM,KAAKoU,MACxBL,EAAkB,KAAK,MAAM;AAC3B,UAAA/T,EAAO,eAAe,SAASqU,CAAO;AAAA,QAChD,CAAS;AAAA,MAET;AACI,UAAI7zC,MAAM;AACR,YAAI,OAAOw/B,KAAW;AAIpB,cAHA5Z,KAAM4Z,EAAO;AAAA,YACX,QAAAjH;AAAA,WACD,GACG,CAAC+G,EAAW1Z,EAAG;AACjB,kBAAM,IAAIqrB,EAAyB,qCAAqC,UAAUrrB,EAAG;AAAA,cAElF,CAAI0Z,EAAWE,CAAM,KAAKb,EAAqBa,CAAM,KAAKJ,EAAkBI,CAAM,IACvF5Z,KAAM4Z,IAEN5Z,KAAMsrB,EAAO,KAAK1R,CAAM;AAAA,eAEjB,OAAOA,KAAW,YAAY;AACvC,YAAIJ,EAAkBxZ,EAAG,GAAG;AAC1B,cAAIjlB;AACJ,UAAAilB,KAAMitB,IAAmBlyC,IAAOilB,QAAS,QAAQjlB,MAAS,SAAY,SAAYA,EAAK,QAAQ;AAAA,QACvG;AACQ,UAAAilB,KAAMitB,GAAkBjtB,EAAG;AAK7B,YAHAA,KAAM4Z,EAAO5Z,IAAK;AAAA,UAChB,QAAA2S;AAAA,SACD,GACGoQ;AACF,cAAI,CAACrJ,EAAW1Z,IAAK,EAAI;AACvB,kBAAM,IAAIqrB,EAAyB,iBAAiB,aAAajxC,IAAI,CAAC,KAAK4lB,EAAG;AAAA,eAE3E;AACL,cAAIkuB;AACJ,UAAKtB,MACHA,IAActI,GAAA;AAQhB,gBAAM6J,IAAK,IAAIvB,EAAY;AAAA,YACzB,YAAY;AAAA,WACb,GAIKd,KAAQoC,IAAQluB,QAAS,QAAQkuB,MAAU,SAAY,SAAYA,EAAM;AAC/E,cAAI,OAAOpC,KAAS;AAClB,YAAAgC,KACAhC,EAAK;AAAA,cACH9rB;AAAA,cACA,CAAC73B,MAAQ;AACP,gBAAAE,IAAQF,GACJA,KAAO,QACTgmD,EAAG,MAAMhmD,CAAG,GAEV2C,MACFqjD,EAAG,IAAG,GAER9W,EAAQ,SAAS4T,EAAM;AAAA,cACrC;AAAA,cACY,CAAC3lB,MAAQ;AACP,gBAAA6oB,EAAG,QAAQ7oB,CAAG,GACd+R,EAAQ,SAAS4T,IAAQ3lB,CAAG;AAAA,cAC1C;AAAA,YACA;AAAA,mBACmBoU,EAAW1Z,IAAK,EAAI;AAC7B,YAAA8tB,KACAX,EAAWntB,IAAKmuB,GAAIlD,IAAQ;AAAA,cAC1B,KAAAngD;AAAA,aACD;AAAA,mBACQwuC,EAAiBtZ,EAAG,KAAKwZ,EAAkBxZ,EAAG,GAAG;AAC1D,kBAAMouB,IAASpuB,GAAI,YAAYA;AAC/B,YAAA8tB,KACAX,EAAWiB,GAAQD,GAAIlD,IAAQ;AAAA,cAC7B,KAAAngD;AAAA,aACD;AAAA,UACX;AACU,kBAAM,IAAIugD,EAAyB,4BAA4B,eAAerrB,EAAG;AAEnF,UAAAA,KAAMmuB;AACN,gBAAM,EAAE,SAAAjkC,GAAS,SAAAmzB,EAAO,IAAK8B,GAAUnf,IAAK,IAAO,EAAI;AACvD,UAAA6tB,EAAS,KAAK3jC,CAAO,GACjB8jC,MACFL,EAAkB,KAAKtQ,CAAO;AAAA,QAExC;AAAA,MACA,WAAehE,EAAaO,CAAM,GAAG;AAC/B,YAAIb,EAAqB/Y,EAAG,GAAG;AAC7B,UAAA8tB,KAAe;AACf,gBAAMzQ,IAAUgR,EAAKruB,IAAK4Z,GAAQqR,IAAQ;AAAA,YACxC,KAAAngD;AAAA,WACD;AACD,UAAIqvC,EAAWP,CAAM,KAAKoU,MACxBL,EAAkB,KAAKtQ,CAAO;AAAA,QAExC,WAAiB7D,EAAkBxZ,EAAG,KAAKsZ,EAAiBtZ,EAAG,GAAG;AAC1D,gBAAMouB,IAASpuB,GAAI,YAAYA;AAC/B,UAAA8tB,KACAX,EAAWiB,GAAQxU,GAAQqR,IAAQ;AAAA,YACjC,KAAAngD;AAAA,WACD;AAAA,QACT,WAAiB4uC,EAAW1Z,EAAG;AACvB,UAAA8tB,KACAX,EAAWntB,IAAK4Z,GAAQqR,IAAQ;AAAA,YAC9B,KAAAngD;AAAA,WACD;AAAA;AAED,gBAAM,IAAImnC;AAAA,YACR;AAAA,YACA,CAAC,YAAY,YAAY,iBAAiB,kBAAkB,iBAAiB;AAAA,YAC7EjS;AAAA,UACV;AAEM,QAAAA,KAAM4Z;AAAA,MACZ,WAAeH,EAAYG,CAAM,GAAG;AAC9B,YAAIb,EAAqB/Y,EAAG;AAC1B,UAAA8tB,KACAR,GAAUL,GAAkBjtB,EAAG,GAAG4Z,GAAQqR,IAAQ;AAAA,YAChD,KAAAngD;AAAA,WACD;AAAA,iBACQwuC,EAAiBtZ,EAAG,KAAK0Z,EAAW1Z,EAAG;AAChD,UAAA8tB,KACAR,GAAUttB,IAAK4Z,GAAQqR,IAAQ;AAAA,YAC7B,KAAAngD;AAAA,WACD;AAAA,iBACQ0uC,EAAkBxZ,EAAG;AAC9B,UAAA8tB,KACAR,GAAUttB,GAAI,UAAU4Z,GAAQqR,IAAQ;AAAA,YACtC,KAAAngD;AAAA,WACD;AAAA;AAED,gBAAM,IAAImnC;AAAA,YACR;AAAA,YACA,CAAC,YAAY,YAAY,iBAAiB,kBAAkB,iBAAiB;AAAA,YAC7EjS;AAAA,UACV;AAEM,QAAAA,KAAM4Z;AAAA,MACZ;AACM,QAAA5Z,KAAMsrB,EAAO,KAAK1R,CAAM;AAAA,IAE9B;AACE,YACGjH,MAAW,QAAgCA,GAAO,WAClD+a,KAAgB,QAAqCA,EAAY,YAElErW,EAAQ,SAAShE,EAAK,GAEjBrT;AAAA,EACT;AACA,WAASquB,EAAK5rB,GAAKC,IAAKuoB,IAAQ,EAAE,KAAAngD,GAAG,GAAI;AACvC,QAAIwjD,KAAQ;AAWZ,QAVA5rB,GAAI,GAAG,SAAS,MAAM;AACpB,MAAK4rB,MAEHrD,GAAO,IAAIrP,EAA0B,CAAE;AAAA,IAE7C,CAAG,GACDnZ,EAAI,KAAKC,IAAK;AAAA,MACZ,KAAK;AAAA,IACT,CAAG,GAEG53B,IAAK;AAKP,UAASq8C,IAAT,WAAiB;AACf,QAAAmH,KAAQ,IACR5rB,GAAI,IAAG;AAAA,MACb;AACI,MAAIwX,GAAmBzX,CAAG,IAExB4U,EAAQ,SAAS8P,CAAK,IAEtB1kB,EAAI,KAAK,OAAO0kB,CAAK;AAAA,IAE3B;AACI,MAAA8D,GAAM;AAER,WAAA7O;AAAA,MACE3Z;AAAA,MACA;AAAA,QACE,UAAU;AAAA,QACV,UAAU;AAAA;MAEZ,CAAC6C,MAAQ;AACP,cAAMwU,IAASrX,EAAI;AACnB,QACE6C,KACAA,EAAI,SAAS,gCACbwU,KACAA,EAAO,SACP,CAACA,EAAO,WACR,CAACA,EAAO,eAURrX,EAAI,KAAK,OAAOwoB,EAAM,EAAE,KAAK,SAASA,EAAM,IAE5CA,GAAO3lB,CAAG;AAAA,MAElB;AAAA,IACA,GACS8W;AAAA,MACL1Z;AAAA,MACA;AAAA,QACE,UAAU;AAAA,QACV,UAAU;AAAA;MAEZuoB;AAAA,IACJ;AAAA,EACA;AACA,SAAAsD,KAAiB;AAAA,IACf,cAAAd;AAAA,IACA,UAAAD;AAAA,EACF;;;;;;ACpdA,QAAM,EAAE,UAAAA,EAAQ,IAAK5yB,GAAA,GACf0wB,IAASzwB,GAAA,GACT,EAAE,WAAAskB,EAAS,IAAKjN,GAAA,GAChB;AAAA,IACJ,cAAAmH;AAAA,IACA,YAAAc;AAAA,IACA,YAAAC;AAAA,IACA,aAAAX;AAAA,IACA,mBAAAD;AAAA,IACA,kBAAAD;AAAA,IACA,kBAAAD;AAAA,EACF,IAAIjH,GAAA,GACE;AAAA,IACJ,YAAAtD;AAAA,IACA,OAAO,EAAE,uBAAAqF,GAAuB,kBAAAyY,EAAgB;AAAA,EAClD,IAAIva,GAAA,GACE8J,IAAMpJ,GAAA;AACZwb,SAAAA,KAAiB,YAAoBxB,GAAS;AAC5C,QAAIA,EAAQ,WAAW;AACrB,YAAM,IAAIH,EAAiB,SAAS;AAEtC,QAAIG,EAAQ,WAAW;AACrB,aAAO1B,EAAO,KAAK0B,EAAQ,CAAC,CAAC;AAE/B,UAAMyB,IAAa,CAAC,GAAGzB,CAAO;AAI9B,QAHI,OAAOA,EAAQ,CAAC,KAAM,eACxBA,EAAQ,CAAC,IAAI1B,EAAO,KAAK0B,EAAQ,CAAC,CAAC,IAEjC,OAAOA,EAAQA,EAAQ,SAAS,CAAC,KAAM,YAAY;AACrD,YAAM0B,IAAM1B,EAAQ,SAAS;AAC7B,MAAAA,EAAQ0B,CAAG,IAAIpD,EAAO,KAAK0B,EAAQ0B,CAAG,CAAC;AAAA,IAC3C;AACE,aAAS9wB,IAAI,GAAGA,IAAIovB,EAAQ,QAAQ,EAAEpvB;AACpC,UAAI,GAACyb,EAAa2T,EAAQpvB,CAAC,CAAC,KAAK,CAAC6b,EAAYuT,EAAQpvB,CAAC,CAAC,IAIxD;AAAA,YACEA,IAAIovB,EAAQ,SAAS,KACrB,EAAE7S,EAAW6S,EAAQpvB,CAAC,CAAC,KAAK0b,EAAiB0T,EAAQpvB,CAAC,CAAC,KAAK4b,EAAkBwT,EAAQpvB,CAAC,CAAC;AAExF,gBAAM,IAAIwW,EAAsB,WAAWxW,CAAC,KAAK6wB,EAAW7wB,CAAC,GAAG,kBAAkB;AAEpF,YAAIA,IAAI,KAAK,EAAEwc,EAAW4S,EAAQpvB,CAAC,CAAC,KAAK2b,EAAiByT,EAAQpvB,CAAC,CAAC,KAAK4b,EAAkBwT,EAAQpvB,CAAC,CAAC;AACnG,gBAAM,IAAIwW,EAAsB,WAAWxW,CAAC,KAAK6wB,EAAW7wB,CAAC,GAAG,kBAAkB;AAAA;AAGtF,QAAI8hB,GACA/C,GACAwP,GACAlP,GACA1iB;AACJ,aAAS6xB,EAAW9mB,GAAK;AACvB,YAAM98B,IAAKy0C;AACX,MAAAA,IAAU,MACNz0C,IACFA,EAAG88B,CAAG,IACGA,IACT/K,EAAE,QAAQ+K,CAAG,IACJ,CAACkX,KAAY,CAACC,MACvBliB,EAAE,QAAO;AAAA,IAEf;AACE,UAAMo0B,IAAO3B,EAAQ,CAAC,GAChB4B,IAAOpB,EAASR,GAASZ,CAAU,GACnC3P,KAAW,CAAC,EAAErC,EAAWuU,CAAI,KAAKpV,EAAiBoV,CAAI,KAAKnV,EAAkBmV,CAAI,IAClFnS,IAAW,CAAC,EAAErC,EAAWyU,CAAI,KAAKtV,EAAiBsV,CAAI,KAAKpV,EAAkBoV,CAAI;AAYxF,QAPAr0B,IAAI,IAAI+wB,EAAO;AAAA;AAAA,MAEb,oBAAoB,CAAC,EAAEqD,KAAS,QAA8BA,EAAK;AAAA,MACnE,oBAAoB,CAAC,EAAEC,KAAS,QAA8BA,EAAK;AAAA,MACnE,UAAAnS;AAAA,MACA,UAAAD;AAAA,KACD,GACGC,IAAU;AACZ,UAAIpD,EAAasV,CAAI;AACnB,QAAAp0B,EAAE,SAAS,SAAUoS,GAAOtQ,GAAU3P,IAAU;AAC9C,UAAIiiC,EAAK,MAAMhiB,GAAOtQ,CAAQ,IAC5B3P,GAAQ,IAERgzB,IAAUhzB;AAAA,QAEpB,GACM6N,EAAE,SAAS,SAAU7N,GAAU;AAC7B,UAAAiiC,EAAK,IAAG,GACRhS,IAAWjwB;AAAA,QACnB,GACMiiC,EAAK,GAAG,SAAS,WAAY;AAC3B,cAAIjP,GAAS;AACX,kBAAMl3C,IAAKk3C;AACX,YAAAA,IAAU,MACVl3C,EAAE;AAAA,UACZ;AAAA,QACA,CAAO;AAAA,eACQixC,EAAYkV,CAAI,GAAG;AAE5B,cAAMpB,KADW/T,EAAkBmV,CAAI,IAAIA,EAAK,WAAWA,GACnC,UAAS;AACjC,QAAAp0B,EAAE,SAAS,eAAgBoS,IAAOtQ,IAAU3P,IAAU;AACpD,cAAI;AACF,kBAAM6gC,EAAO,OACbA,EAAO,MAAM5gB,EAAK,EAAE,MAAM,MAAM;AAAA,YAAA,CAAE,GAClCjgB,GAAQ;AAAA,UAClB,SAAiB4Y,IAAK;AACZ,YAAA5Y,GAAS4Y,EAAG;AAAA,UACtB;AAAA,QACA,GACM/K,EAAE,SAAS,eAAgB7N,IAAU;AACnC,cAAI;AACF,kBAAM6gC,EAAO,OACbA,EAAO,MAAK,EAAG,MAAM,MAAM;AAAA,YAAA,CAAE,GAC7B5Q,IAAWjwB;AAAA,UACrB,SAAiB4Y,IAAK;AACZ,YAAA5Y,GAAS4Y,EAAG;AAAA,UACtB;AAAA,QACA;AAAA,MACA;AACI,YAAM8oB,IAAS5U,EAAkBoV,CAAI,IAAIA,EAAK,WAAWA;AACzD,MAAAxS,EAAIgS,GAAQ,MAAM;AAChB,YAAIzR,GAAU;AACZ,gBAAMn0C,IAAKm0C;AACX,UAAAA,IAAW,MACXn0C,EAAE;AAAA,QACV;AAAA,MACA,CAAK;AAAA,IACL;AACE,QAAIg0C;AACF,UAAInD,EAAauV,CAAI;AACnB,QAAAA,EAAK,GAAG,YAAY,WAAY;AAC9B,cAAIzC,GAAY;AACd,kBAAM3jD,IAAK2jD;AACX,YAAAA,IAAa,MACb3jD,EAAE;AAAA,UACZ;AAAA,QACA,CAAO,GACDomD,EAAK,GAAG,OAAO,WAAY;AACzB,UAAAr0B,EAAE,KAAK,IAAI;AAAA,QACnB,CAAO,GACDA,EAAE,QAAQ,WAAY;AACpB,qBAAa;AACX,kBAAMgB,IAAMqzB,EAAK,KAAI;AACrB,gBAAIrzB,MAAQ,MAAM;AAChB,cAAA4wB,IAAa5xB,EAAE;AACf;AAAA,YACZ;AACU,gBAAI,CAACA,EAAE,KAAKgB,CAAG;AACb;AAAA,UAEZ;AAAA,QACA;AAAA,eACeke,EAAYmV,CAAI,GAAG;AAE5B,cAAMC,KADWrV,EAAkBoV,CAAI,IAAIA,EAAK,WAAWA,GACnC,UAAS;AACjC,QAAAr0B,EAAE,QAAQ,iBAAkB;AAC1B;AACE,gBAAI;AACF,oBAAM,EAAE,OAAAlyB,GAAO,MAAAukC,OAAS,MAAMiiB,EAAO,KAAI;AACzC,kBAAI,CAACt0B,EAAE,KAAKlyB,CAAK;AACf;AAEF,kBAAIukC,IAAM;AACR,gBAAArS,EAAE,KAAK,IAAI;AACX;AAAA,cACd;AAAA,YACA,QAAkB;AACN;AAAA,YACZ;AAAA,QAEA;AAAA,MACA;AAAA;AAEE,WAAAA,EAAE,WAAW,SAAU+K,GAAK5Y,GAAU;AACpC,MAAI,CAAC4Y,KAAO2X,MAAY,SACtB3X,IAAM,IAAIyJ,EAAU,IAEtBod,IAAa,MACbzM,IAAU,MACV/C,IAAW,MACPM,MAAY,OACdvwB,EAAS4Y,CAAG,KAEZ2X,IAAUvwB,GACN2sB,EAAauV,CAAI,KACnBzP,EAAUyP,GAAMtpB,CAAG;AAAA,IAG3B,GACS/K;AAAA,EACT;;;;;;AC/LA,QAAM+U,IAAkB,WAAW,mBAAmB1U,KAA4B,iBAC5E;AAAA,IACJ,OAAO,EAAE,uBAAAwZ,GAAuB,sBAAAnC,GAAsB,kBAAA4a,GAAkB,kBAAAxY,EAAgB;AAAA,IACxF,YAAAtF;AAAA,EACF,IAAIlU,GAAA,GACE,EAAE,qBAAA6X,GAAqB,iBAAAuC,GAAiB,gBAAAQ,EAAc,IAAKvD,GAAA,GAC3D4c,IAAezc,KAAkC,OAAO,OAAO,GAC/DF,IAAyBE,KAAkC,OAAO,wBAAwB,GAC1F,EAAE,UAAAsL,EAAQ,IAAKrL,GAAA,GACfyc,IAAgB/b,GAAA,GAChB,EAAE,0BAAAgc,EAAwB,IAAKrL,GAAA,GAC/B,EAAE,YAAAvJ,GAAY,cAAAf,EAAY,IAAKwK,GAAA,GAC/B,EAAE,WAAAoL,EAAS,IAAKlL,GAAA,GAChB;AAAA,IACJ,oBAAAmL;AAAA,IACA,SAAAC;AAAA,IACA,WAAA3O;AAAA,IACA,QAAA4O;AAAA,IACA,aAAArf;AAAA,IACA,SAAA+L;AAAA,IACA,eAAAuT;AAAA,IACA,gBAAAC;AAAA,IACA,sBAAAvT;AAAA,IACA,QAAAiC;AAAA,EACF,IAAI3L,GAAA,GACEkd,IAASvR,EAAO,QAAQ,GACxBwR,IAAOxR,EAAO,MAAM;AAC1B,WAASwQ,EAAQ5U,GAAQnxC,GAAS;AAOhC,QANIA,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB,GAElD4wC,EAAaO,CAAM,KAAK,CAACQ,EAAWR,CAAM;AAC5C,YAAM,IAAIxF,EAAsB,UAAUwF,GAAQ,kBAAkB;AAEtE,UAAM6V,KAAiBV,EAAc,MAAMnV,CAAM;AACjD,WAAInxC,KAAY,QAAiCA,EAAQ,UAEvDumD,EAAyBvmD,EAAQ,QAAQgnD,EAAc,GAElDA;AAAA,EACT;AACA,WAAShwC,GAAInV,GAAI7B,GAAS;AACxB,QAAI,OAAO6B,KAAO;AAChB,YAAM,IAAI2nC,EAAqB,MAAM,CAAC,YAAY,eAAe,GAAG3nC,CAAE;AAExE,IAAI7B,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB;AAEtD,QAAIinD,KAAc;AAClB,IAA6DjnD,GAAQ,eAAgB,SACnFinD,KAAclP,EAAU/3C,EAAQ,WAAW;AAE7C,QAAIknD,KAAgBD,KAAc;AAClC,WAA6DjnD,GAAQ,iBAAkB,SACrFknD,KAAgBnP,EAAU/3C,EAAQ,aAAa,IAEjDwsC,EAAgBya,IAAa,uBAAuB,CAAC,GACrDza,EAAgB0a,IAAe,yBAAyB,CAAC,GACzDA,MAAiBD,IACV,mBAAsB;AAC3B,YAAM/c,IAASoR,GAAA,EAA2B;AAAA,QACxC,CAAyDt7C,GAAQ,MAAM,EAAE,OAAO0mD,CAAO;AAAA,MAC7F,GACUvV,IAAS,MACT9B,IAAQ,CAAA,GACR8X,KAAY;AAAA,QAChB,QAAAjd;AAAA,MACN;AACI,UAAIjkC,GACAo5C,IACAlb,IAAO,IACPijB,IAAM;AACV,eAASC,IAAU;AACjB,QAAAljB,IAAO,IACPmjB,EAAkB;AAAA,MACxB;AACI,eAASA,IAAqB;AAC5B,QAAAF,KAAO,GACPG,GAAW;AAAA,MACjB;AACI,eAASA,KAAc;AACrB,QAAIlI,MAAU,CAAClb,KAAQijB,IAAMH,MAAe5X,EAAM,SAAS6X,OACzD7H,GAAM,GACNA,KAAS;AAAA,MAEjB;AACI,qBAAemI,KAAO;AACpB,YAAI;AACF,yBAAe9nD,MAAOyxC,GAAQ;AAC5B,gBAAIhN;AACF;AAEF,gBAAI+F,EAAO;AACT,oBAAM,IAAI5D,EAAU;AAEtB,gBAAI;AAEF,kBADA5mC,KAAMmC,EAAGnC,IAAKynD,EAAS,GACnBznD,OAAQonD;AACV;AAEF,cAAApnD,KAAMmnD,EAAennD,EAAG;AAAA,YACpC,SAAmBm9B,IAAK;AACZ,cAAAn9B,KAAMknD,EAAc/pB,EAAG;AAAA,YACnC;AACU,YAAAuqB,KAAO,GACP9T,GAAqB5zC,IAAK4nD,GAAoBD,CAAO,GACrDhY,EAAM,KAAK3vC,EAAG,GACVuG,MACFA,EAAI,GACJA,IAAO,OAEL,CAACk+B,MAASkL,EAAM,UAAU6X,MAAiBE,KAAOH,OACpD,MAAM,IAAI5T,EAAQ,CAACx7B,OAAY;AAC7B,cAAAwnC,KAASxnC;AAAA,YACvB,CAAa;AAAA,UAEb;AACQ,UAAAw3B,EAAM,KAAK0X,CAAI;AAAA,QACvB,SAAelqB,IAAK;AACZ,gBAAMn9B,KAAMknD,EAAc/pB,EAAG;AAC7B,UAAAyW,GAAqB5zC,IAAK4nD,GAAoBD,CAAO,GACrDhY,EAAM,KAAK3vC,EAAG;AAAA,QACtB,UAAO;AACC,UAAAykC,IAAO,IACHl+B,MACFA,EAAI,GACJA,IAAO;AAAA,QAEjB;AAAA,MACA;AACI,MAAAuhD,GAAI;AACJ,UAAI;AACF,mBAAa;AACX,iBAAOnY,EAAM,SAAS,KAAG;AACvB,kBAAM3vC,KAAM,MAAM2vC,EAAM,CAAC;AACzB,gBAAI3vC,OAAQqnD;AACV;AAEF,gBAAI7c,EAAO;AACT,oBAAM,IAAI5D,EAAU;AAEtB,YAAI5mC,OAAQonD,MACV,MAAMpnD,KAER2vC,EAAM,MAAK,GACXkY,GAAW;AAAA,UACrB;AACQ,gBAAM,IAAIlU,EAAQ,CAACx7B,OAAY;AAC7B,YAAA5R,IAAO4R;AAAA,UACjB,CAAS;AAAA,QACT;AAAA,MACA,UAAK;AACC,QAAAssB,IAAO,IACHkb,OACFA,GAAM,GACNA,KAAS;AAAA,MAEjB;AAAA,IACA,EAAI,KAAK,IAAI;AAAA,EACb;AACA,WAASoI,GAAeznD,IAAU,QAAW;AAC3C,WAAIA,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB,GAE/C,mBAAiC;AACtC,UAAImZ,KAAQ;AACZ,uBAAiBzZ,MAAO,MAAM;AAC5B,YAAIgoD;AACJ,YACE1nD,KAAY,SAEX0nD,KAAkB1nD,EAAQ,YAAY,QACvC0nD,OAAoB,UACpBA,GAAgB;AAEhB,gBAAM,IAAIphB,EAAW;AAAA,YACnB,OAAOtmC,EAAQ,OAAO;AAAA,WACvB;AAEH,cAAM,CAACmZ,MAASzZ,EAAG;AAAA,MACzB;AAAA,IACA,EAAI,KAAK,IAAI;AAAA,EACb;AACA,iBAAeioD,GAAK9lD,GAAI7B,IAAU,QAAW;AAC3C,qBAAiB4nD,MAAUC,EAAO,KAAK,MAAMhmD,GAAI7B,CAAO;AACtD,aAAO;AAET,WAAO;AAAA,EACT;AACA,iBAAe8nD,GAAMjmD,GAAI7B,IAAU,QAAW;AAC5C,QAAI,OAAO6B,KAAO;AAChB,YAAM,IAAI2nC,EAAqB,MAAM,CAAC,YAAY,eAAe,GAAG3nC,CAAE;AAGxE,WAAO,CAAE,MAAM8lD,GAAK;AAAA,MAClB;AAAA,MACA,UAAUlnD,OACD,CAAE,MAAMoB,EAAG,GAAGpB,EAAI;AAAA,MAE3BT;AAAA;EAEJ;AACA,iBAAe+nD,EAAKlmD,GAAI7B,GAAS;AAC/B,qBAAiBkX,MAAU2wC,EAAO,KAAK,MAAMhmD,GAAI7B,CAAO;AACtD,aAAOkX;AAAA,EAGX;AACA,iBAAe8wC,GAAQnmD,GAAI7B,GAAS;AAClC,QAAI,OAAO6B,KAAO;AAChB,YAAM,IAAI2nC,EAAqB,MAAM,CAAC,YAAY,eAAe,GAAG3nC,CAAE;AAExE,mBAAeomD,GAAUroD,IAAOI,IAAS;AACvC,mBAAM6B,EAAGjC,IAAOI,EAAO,GAChB8mD;AAAA,IACX;AAEE,qBAAiBc,MAAU5wC,GAAI,KAAK,MAAMixC,IAAWjoD,CAAO,EAAE;AAAA,EAChE;AACA,WAAS6nD,EAAOhmD,GAAI7B,GAAS;AAC3B,QAAI,OAAO6B,KAAO;AAChB,YAAM,IAAI2nC,EAAqB,MAAM,CAAC,YAAY,eAAe,GAAG3nC,CAAE;AAExE,mBAAeqmD,GAAStoD,IAAOI,IAAS;AACtC,aAAI,MAAM6B,EAAGjC,IAAOI,EAAO,IAClBJ,KAEFknD;AAAA,IACX;AACE,WAAO9vC,GAAI,KAAK,MAAMkxC,IAAUloD,CAAO;AAAA,EACzC;AAAA,EAIA,MAAMmoD,UAAkC/D,EAAiB;AAAA,IACvD,cAAc;AACZ,YAAM,QAAQ,GACd,KAAK,UAAU;AAAA,IACnB;AAAA,EACA;AACA,iBAAegE,EAAOC,GAASC,GAActoD,IAAS;AACpD,QAAIuoD;AACJ,QAAI,OAAOF,KAAY;AACrB,YAAM,IAAI7e,EAAqB,WAAW,CAAC,YAAY,eAAe,GAAG6e,CAAO;AAElF,IAAIroD,MAAW,QACbgtC,EAAehtC,IAAS,SAAS,GAE0BA,IAAQ,UAAW,QAC9EiqC,EAAoBjqC,GAAQ,QAAQ,gBAAgB;AAEtD,QAAIwoD,KAAkB,UAAU,SAAS;AACzC,QACExoD,MAAY,SAEXuoD,KAAmBvoD,GAAQ,YAAY,QACxCuoD,OAAqB,UACrBA,GAAiB,SACjB;AACA,YAAM1rB,IAAM,IAAIyJ,EAAW,QAAW;AAAA,QACpC,OAAOtmC,GAAQ,OAAO;AAAA,OACvB;AACD,iBAAK,KAAK,SAAS,MAAM;AAAA,OAAE,GAC3B,MAAMk1C,EAAS,KAAK,QAAQrY,CAAG,CAAC,GAC1BA;AAAA,IACV;AACE,UAAM8N,IAAK,IAAI9D,EAAe,GACxBqD,IAASS,EAAG;AAClB,QAAI3qC,MAAY,QAAiCA,GAAQ,QAAQ;AAC/D,YAAMysB,IAAO;AAAA,QACX,MAAM;AAAA,QACN,CAAC45B,CAAY,GAAG;AAAA,QAChB,CAAC3c,CAAsB,GAAG;AAAA,MAChC;AACI,MAAA1pC,GAAQ,OAAO,iBAAiB,SAAS,MAAM2qC,EAAG,MAAK,GAAIle,CAAI;AAAA,IACnE;AACE,QAAIg8B,IAAuB;AAC3B,QAAI;AACF,uBAAiB7oD,KAAS,MAAM;AAC9B,YAAI8oD;AAEJ,YADAD,IAAuB,IAErBzoD,MAAY,SAEX0oD,KAAmB1oD,GAAQ,YAAY,QACxC0oD,OAAqB,UACrBA,GAAiB;AAEjB,gBAAM,IAAIpiB,EAAU;AAEtB,QAAKkiB,KAIHF,IAAe,MAAMD,EAAQC,GAAc1oD,GAAO;AAAA,UAChD,QAAAsqC;AAAA,SACD,KALDoe,IAAe1oD,GACf4oD,KAAkB;AAAA,MAM1B;AACI,UAAI,CAACC,KAAwB,CAACD;AAC5B,cAAM,IAAIL,EAAyB;AAAA,IAEzC,UAAG;AACC,MAAAxd,EAAG,MAAK;AAAA,IACZ;AACE,WAAO2d;AAAA,EACT;AACA,iBAAe3oD,EAAQK,GAAS;AAC9B,IAAIA,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB;AAEtD,UAAMkX,IAAS,CAAA;AACf,qBAAiBxX,MAAO,MAAM;AAC5B,UAAIipD;AACJ,UACE3oD,KAAY,SAEX2oD,KAAmB3oD,EAAQ,YAAY,QACxC2oD,OAAqB,UACrBA,GAAiB;AAEjB,cAAM,IAAIriB,EAAW,QAAW;AAAA,UAC9B,OAAOtmC,EAAQ,OAAO;AAAA,SACvB;AAEH,MAAAymD,EAAmBvvC,GAAQxX,EAAG;AAAA,IAClC;AACE,WAAOwX;AAAA,EACT;AACA,WAAS0xC,GAAQ/mD,GAAI7B,GAAS;AAC5B,UAAM6oD,KAAS7xC,GAAI,KAAK,MAAMnV,GAAI7B,CAAO;AACzC,WAAO,mBAA0B;AAC/B,uBAAiBN,MAAOmpD;AACtB,eAAOnpD;AAAA,IAEb,EAAI,KAAK,IAAI;AAAA,EACb;AACA,WAASopD,GAAoBC,GAAQ;AAInC,QADAA,IAASpC,EAAOoC,CAAM,GAClBzhB,EAAYyhB,CAAM;AACpB,aAAO;AAET,QAAIA,IAAS;AACX,YAAM,IAAInd,EAAiB,UAAU,QAAQmd,CAAM;AAErD,WAAOA;AAAA,EACT;AACA,WAASC,GAAKD,GAAQ/oD,IAAU,QAAW;AACzC,WAAIA,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB,GAEtD+oD,IAASD,GAAoBC,CAAM,GAC5B,mBAAuB;AAC5B,UAAIE;AACJ,UACEjpD,KAAY,SAEXipD,KAAmBjpD,EAAQ,YAAY,QACxCipD,OAAqB,UACrBA,GAAiB;AAEjB,cAAM,IAAI3iB,EAAU;AAEtB,uBAAiB5mC,KAAO,MAAM;AAC5B,YAAIwpD;AACJ,YACElpD,KAAY,SAEXkpD,KAAmBlpD,EAAQ,YAAY,QACxCkpD,OAAqB,UACrBA,GAAiB;AAEjB,gBAAM,IAAI5iB,EAAU;AAEtB,QAAIyiB,OAAY,MACd,MAAMrpD;AAAA,MAEd;AAAA,IACA,EAAI,KAAK,IAAI;AAAA,EACb;AACA,WAASypD,GAAKJ,GAAQ/oD,IAAU,QAAW;AACzC,WAAIA,KAAW,QACbgtC,EAAehtC,GAAS,SAAS,GAE0BA,GAAQ,UAAW,QAC9EiqC,EAAoBjqC,EAAQ,QAAQ,gBAAgB,GAEtD+oD,IAASD,GAAoBC,CAAM,GAC5B,mBAAuB;AAC5B,UAAIK;AACJ,UACEppD,KAAY,SAEXopD,KAAmBppD,EAAQ,YAAY,QACxCopD,OAAqB,UACrBA,GAAiB;AAEjB,cAAM,IAAI9iB,EAAU;AAEtB,uBAAiB5mC,KAAO,MAAM;AAC5B,YAAI2pD;AACJ,YACErpD,KAAY,SAEXqpD,KAAmBrpD,EAAQ,YAAY,QACxCqpD,OAAqB,UACrBA,GAAiB;AAEjB,gBAAM,IAAI/iB,EAAU;AAOtB,YALIyiB,MAAW,MACb,MAAMrpD,IAIJqpD,KAAU;AACZ;AAAA,MAER;AAAA,IACA,EAAI,KAAK,IAAI;AAAA,EACb;AACA,SAAAO,GAAA,2BAA0C;AAAA,IACxC,gBAAgB9C,EAAUiB,IAAgB,8DAA8D;AAAA,IACxG,MAAAuB;AAAA,IACA,QAAAnB;AAAA,IACA,SAAAe;AAAA,IACA,KAAA5xC;AAAA,IACA,MAAAmyC;AAAA,IACA,SAAApD;AAAA,EACF,GACAuD,GAAA,4BAA2C;AAAA,IACzC,OAAAxB;AAAA,IACA,SAAAE;AAAA,IACA,QAAAI;AAAA,IACA,SAAAzoD;AAAA,IACA,MAAAgoD;AAAA,IACA,MAAAI;AAAA,EACF;;;;;;ACtcA,QAAM,EAAE,mBAAAwB,GAAmB,SAAAlW,EAAO,IAAKlhB,GAAA,GACjC,EAAE,YAAA8e,GAAY,cAAAL,GAAc,aAAAI,EAAW,IAAK5e,GAAA,GAC5C,EAAE,cAAco3B,EAAE,IAAK/f,GAAA,GACvB,EAAE,UAAAyL,EAAQ,IAAKtL,GAAA;AACrBC,EAAAA,GAAA;AACA,WAASkb,KAAYR,GAAS;AAC5B,WAAO,IAAIlR,EAAQ,CAACx7B,GAASmxB,MAAW;AACtC,UAAIkB,GACA7nC;AACJ,YAAMonD,IAAUlF,EAAQA,EAAQ,SAAS,CAAC;AAC1C,UACEkF,KACA,OAAOA,KAAY,YACnB,CAAC7Y,EAAa6Y,CAAO,KACrB,CAACxY,EAAWwY,CAAO,KACnB,CAACzY,EAAYyY,CAAO,GACpB;AACA,cAAMzpD,IAAUupD,EAAkBhF,CAAO;AACzC,QAAAra,IAASlqC,EAAQ,QACjBqC,IAAMrC,EAAQ;AAAA,MACpB;AACI,MAAAwpD;AAAA,QACEjF;AAAA,QACA,CAAC1nB,GAAKj9B,MAAU;AACd,UAAIi9B,IACFmM,EAAOnM,CAAG,IAEVhlB,EAAQjY,CAAK;AAAA,QAEvB;AAAA,QACM;AAAA,UACE,QAAAsqC;AAAA,UACA,KAAA7nC;AAAA,QACR;AAAA,MACA;AAAA,IACA,CAAG;AAAA,EACH;AACA,SAAAqnD,KAAiB;AAAA,IACf,UAAAxU;AAAA,IACA,UAAA6P;AAAA,EACF;;;;;;ACjBA,QAAM,EAAE,QAAAxyB,EAAM,IAAKJ,GAAA,GAIb,EAAE,sBAAAmuB,GAAsB,YAAAzF,GAAY,cAAA5T,EAAY,IAAK7U,GAAA,GACrD;AAAA,IACJ,WAAW,EAAE,QAAQu3B,EAAe;AAAA,EACtC,IAAIlgB,GAAA,GACE,EAAE,0BAAAmgB,GAA0B,2BAAAC,EAAyB,IAAKjgB,GAAA,GAC1D;AAAA,IACJ,OAAO,EAAE,yBAAAkgB,EAAuB;AAAA,EAClC,IAAIjgB,GAAA,GACEkc,IAAUxb,GAAA,GACV,EAAE,yBAAAgO,GAAyB,yBAAAF,EAAuB,IAAK6C,GAAA,GACvD,EAAE,UAAA6J,EAAQ,IAAK3J,GAAA,GACf,EAAE,WAAA1E,EAAS,IAAK4E,GAAA,GAChB3H,IAAM6H,GAAA,GAENkO,IAAWjO,GAAA,GACXvI,IAAQ2I,GAAA,GACR/E,IAAUiT,GAAA,UAAiBjO,GAAA,EAAqC;AACtE,EAAAhF,EAAO,cAAc5D,EAAM,aAC3B4D,EAAO,cAAc5D,EAAM,aAC3B4D,EAAO,YAAY5D,EAAM,WACzB4D,EAAO,aAAa5D,EAAM,YAC1B4D,EAAO,aAAa5D,EAAM,YAC1B4D,EAAO,WAAWkF,GAAA;AAClB,aAAWp0C,KAAOizC,EAAW+O,CAAwB,GAAG;AAEtD,QAAS/nD,IAAT,YAAepB,GAAM;AACnB,UAAI;AACF,cAAMqpD,EAAuB;AAE/B,aAAOhT,EAAO,SAAS,KAAK7P,EAAa+iB,GAAI,MAAMvpD,CAAI,CAAC;AAAA,IAC5D;AANE,UAAMupD,IAAKJ,EAAyBhiD,CAAG;AAOvC,IAAA04C,EAAqBz+C,GAAI,QAAQ;AAAA,MAC/B,WAAW;AAAA,MACX,OAAOmoD,EAAG;AAAA,KACX,GACD1J,EAAqBz+C,GAAI,UAAU;AAAA,MACjC,WAAW;AAAA,MACX,OAAOmoD,EAAG;AAAA,KACX,GACD1J,EAAqBxJ,EAAO,SAAS,WAAWlvC,GAAK;AAAA,MACnD,WAAW;AAAA,MACX,OAAO/F;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,KACX;AAAA,EACH;AACA,aAAW+F,KAAOizC,EAAWgP,CAAyB,GAAG;AAEvD,QAAShoD,IAAT,YAAepB,GAAM;AACnB,UAAI;AACF,cAAMqpD,EAAuB;AAE/B,aAAO7iB,EAAa+iB,GAAI,MAAMvpD,CAAI;AAAA,IACtC;AANE,UAAMupD,IAAKH,EAA0BjiD,CAAG;AAOxC,IAAA04C,EAAqBz+C,GAAI,QAAQ;AAAA,MAC/B,WAAW;AAAA,MACX,OAAOmoD,EAAG;AAAA,KACX,GACD1J,EAAqBz+C,GAAI,UAAU;AAAA,MACjC,WAAW;AAAA,MACX,OAAOmoD,EAAG;AAAA,KACX,GACD1J,EAAqBxJ,EAAO,SAAS,WAAWlvC,GAAK;AAAA,MACnD,WAAW;AAAA,MACX,OAAO/F;AAAA,MACP,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,KACX;AAAA,EACH;AACA,EAAAi1C,EAAO,WAAWmF,GAAA,GAClBnF,EAAO,SAASyG,GAAA,GAChBzG,EAAO,YAAYmT,GAAA,GACnBnT,EAAO,cAAcoT,GAAA,GACrBpT,EAAO,WAAWiO;AAClB,QAAM,EAAE,gBAAA9J,EAAc,IAAKkP,GAAA;AAC3B,SAAArT,EAAO,iBAAiBmE,GACxBnE,EAAO,WAAWnD,GAClBmD,EAAO,UAAUJ,GACjBI,EAAO,UAAUiP,GACjBjP,EAAO,0BAA0ByB,GACjCzB,EAAO,0BAA0BuB,GACjCiI,EAAqBxJ,GAAQ,YAAY;AAAA,IACvC,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,MAAM;AACJ,aAAO4S;AAAA,IACX;AAAA,GACC,GACDpJ,EAAqByE,GAAU4E,GAAiB;AAAA,IAC9C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,MAAM;AACJ,aAAOD,EAAS;AAAA,IACpB;AAAA,GACC,GACDpJ,EAAqB3M,GAAKgW,GAAiB;AAAA,IACzC,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,MAAM;AACJ,aAAOD,EAAS;AAAA,IACpB;AAAA,GACC,GAGD5S,EAAO,SAASA,GAChBA,EAAO,gBAAgB,SAAsBl3C,GAAO;AAClD,WAAOA,aAAiB;AAAA,EAC1B,GACAk3C,EAAO,sBAAsB,SAA6B5S,GAAO;AAC/D,WAAO3R,EAAO,KAAK2R,EAAM,QAAQA,EAAM,YAAYA,EAAM,UAAU;AAAA,EACrE;;;;;AC5IA,UAAMkmB,IAAej4B,GAAA,GACfu3B,IAAWt3B,GAAA,GACXi4B,IAAkBD,EAAa,SAAS;AAC9C,IAAAhgB,EAAA,UAAiBggB,EAAa,UAG9BhgB,EAAA,QAAA,sBAAqCggB,EAAa,qBAClDhgB,EAAA,QAAA,gBAA+BggB,EAAa,eAC5ChgB,EAAA,QAAA,cAA6BggB,EAAa,aAC1ChgB,EAAA,QAAA,YAA2BggB,EAAa,WACxChgB,EAAA,QAAA,aAA4BggB,EAAa,YACzChgB,EAAA,QAAA,WAA0BggB,EAAa,UACvChgB,EAAA,QAAA,WAA0BggB,EAAa,UACvChgB,EAAA,QAAA,SAAwBggB,EAAa,QACrChgB,EAAA,QAAA,YAA2BggB,EAAa,WACxChgB,EAAA,QAAA,cAA6BggB,EAAa,aAC1ChgB,EAAA,QAAA,iBAAgCggB,EAAa,gBAC7ChgB,EAAA,QAAA,WAA0BggB,EAAa,UACvChgB,EAAA,QAAA,UAAyBggB,EAAa,SACtChgB,EAAA,QAAA,UAAyBigB,GACzBjgB,EAAA,QAAA,WAA0BggB,EAAa,UACvChgB,EAAA,QAAA,UAAyBggB,EAAa,SACtC,OAAO,eAAeA,GAAc,YAAY;AAAA,MAC9C,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,MAAM;AACJ,eAAOV;AAAA,MACX;AAAA,KACC,GACDtf,EAAA,QAAA,SAAwBggB,EAAa,QAGrChgB,EAAA,QAAA,UAAyBA,EAAO;AAAA;;;AC3BhC,MAAMkgB,KAAW,uBAAO,MAAM;AAE9B,SAASC,GAAM38C,GAAQ9N,GAAQ0qD,IAAQ,GAAG;AACxC,MAAIA,MAAU;AACZ,WAAO,OAAO,OAAO58C,GAAQ9N,CAAM;AAErC,aAAW8H,KAAO9H;AAChB,IAAA8N,EAAOhG,CAAG,IAAI2iD,GAAM38C,EAAOhG,CAAG,KAAK,uBAAO,OAAO,IAAI,GAAG9H,EAAO8H,CAAG,GAAG4iD,IAAQ,CAAC;AAEhF,SAAO58C;AACT;AASA,SAAS68C,GAAUC,GAAIC,GAAIH,IAAQ,GAAG;AACpC,MAAI58C,IAAS;AAEb,aAAWhG,KAAO8iD;AAChB,QAAI9iD,KAAO+iD,GAAI;AACb,YAAMC,IAAeJ,MAAU,IAAI,OAAOC,GAAUC,EAAG9iD,CAAG,GAAG+iD,EAAG/iD,CAAG,GAAG4iD,IAAQ,CAAC;AAC/E,UAAII,MAAiB;AACnB,QAAAh9C,IAASA,KAAU,uBAAO,OAAO,IAAI,GACrCA,EAAOhG,CAAG,IAAIgjD;AAAA,eAIPJ,MAAU;AACjB,eAAO;AAAA,IAEX;AAGF,SAAO58C;AACT;AASA,SAASi9C,GAAWH,GAAIC,GAAIH,IAAQ,GAAG;AACrC,MAAI58C,IAAS;AAEb,aAAWhG,KAAO8iD;AAGhB,QAAI,EAAE9iD,KAAO+iD;AACX,MAAA/8C,IAASA,KAAU,uBAAO,OAAO,IAAI,GACrCA,EAAOhG,CAAG,IAAI4iD,MAAU,IAAI,OAAOD,GAAM,CAAA,GAAIG,EAAG9iD,CAAG,GAAG4iD,IAAQ,CAAC;AAAA,aAExDA,MAAU,GAAG;AACpB,YAAMM,IAAOD,GAAWH,EAAG9iD,CAAG,GAAG+iD,EAAG/iD,CAAG,GAAG4iD,IAAQ,CAAC;AACnD,UAAIM,MAAS;AACX,QAAAl9C,IAASA,KAAU,uBAAO,OAAO,IAAI,GACrCA,EAAOhG,CAAG,IAAIkjD;AAAA,eAIPN,MAAU;AACjB,eAAO;AAAA,IAEX;AAGF,SAAO58C;AACT;AAGO,MAAMm9C,GAAc;AAAA,EACzB,YAAY/qD,IAAU,IAAI;AACxB,SAAK,MAAM,GAGX,KAAK,OAAO,uBAAO,OAAO,IAAI,GAC9B,KAAK,KAAK,EAAE,IAAI,GAEhB,KAAK,YAAY,uBAAO,OAAO,IAAI,GACnC,KAAK,UAAU,CAAC,IAAI,IAEpB,KAAK,kBAAkB,GACvB,KAAK,WAAWA,EAAQ,WAAW2hC;AAAAA,EACrC;AAAA,EAEA,YAAY3gB,GAAI;AACd,QAAIA,EAAG,CAAC,MAAM,KAAK;AACjB,YAAMgqC,IAAW,KAAK,WAChBC,IAAQjqC,EAAG,MAAM,GAAG;AAO1B,aANU,KAAK,SAAS;AAAA,QACtB,KAAK,YAAYgqC,EAASC,EAAM,CAAC,CAAC,CAAC;AAAA,QACnC,KAAK,YAAYD,EAASC,EAAM,CAAC,CAAC,CAAC;AAAA,QACnC,KAAK,YAAYD,EAASC,EAAM,CAAC,CAAC,CAAC;AAAA,QACnCA,EAAM,CAAC,KAAK,KAAK,YAAYD,EAASC,EAAM,CAAC,CAAC,CAAC;AAAA,MACvD;AAAA,IAEI;AACA,WAAO5sB,GAAWrd,GAAI,KAAK,QAAQ;AAAA,EACrC;AAAA,EAEA,iBAAiB0d,GAAM;AACrB,QAAIA,EAAK,aAAa,QAAQ;AAC5B,YAAM3M,IAAI,KAAK,iBAAiB2M,EAAK,OAAO,GACxCiZ,IAAI,KAAK,iBAAiBjZ,EAAK,SAAS,GACxCwsB,IAAI,KAAK,iBAAiBxsB,EAAK,MAAM;AACzC,UAAIysB;AAEJ,aAAOp5B,KAAK4lB,KAAKuT,MAAMjpB,GAAevD,EAAK,KAAK,MAAMysB,IAAI,KAAK,iBAAiBzsB,EAAK,KAAK,OACxF,KAAK,KAAKysB,IAAI,IAAIp5B,CAAC,IAAI4lB,CAAC,IAAIuT,CAAC,IAAIC,CAAC,KAAK,IAAIp5B,CAAC,IAAI4lB,CAAC,IAAIuT,CAAC,EAAE;AAAA,IAC5D;AACA,WAAO,KAAK,KAAKzsB,GAASC,CAAI,CAAC;AAAA,EACjC;AAAA,EAEA,oBAAoBA,GAAM;AAExB,UAAMrkB,IAAMqkB,KAAQA,EAAK,aAAa,SACpC,IAAI,KAAK,oBAAoBA,EAAK,OAAO,CAAC,IAAI,KAAK,oBAAoBA,EAAK,SAAS,CAAC,IAAI,KAAK,oBAAoBA,EAAK,MAAM,CAAC,GAC7HuD,GAAevD,EAAK,KAAK,IAAI,KAAK,IAAI,KAAK,oBAAoBA,EAAK,KAAK,CAAC,EAClF,KACQD,GAASC,CAAI;AAEjB,WAAO,KAAK,KAAKrkB,CAAG,MAAM,KAAK,KAAK,KAAK,UAAU,EAAE,KAAK,GAAG,IAAIA,CAAG,IAAI,KAAK;AAAA,EAC/E;AAAA,EAEA,gBAAgB+wC,GAAe;AAC7B,QAAIhnD,GAAM+U;AAEV,QAAIiyC;AAEF,WADAhnD,IAAOgnD,IAAgB,KAAKA,CAAa,IAAIjyC,IAAQ,GAC9C,KAAK,KAAK/U,CAAI;AACnB,QAAAA,IAAOgnD,IAAgBjyC;AAAA;AAIzB;AAAK,QAAA/U,IAAO,MAAM,KAAK,iBAAiB;AAAA,aACjC,KAAK,KAAKA,CAAI;AAGvB,gBAAK,KAAKA,CAAI,IAAI,EAAE,KAAK,KACzB,KAAK,UAAU,KAAK,GAAG,IAAIA,GACpB,KAAK,SAAS,UAAUA,EAAK,OAAO,CAAC,CAAC;AAAA,EAC/C;AACF;AAGe,MAAMinD,GAAQ;AAAA,EAC3B,YAAY7pB,GAAOxhC,GAAS;AAE1B,SAAK,QAAQ,GAEb,KAAK,UAAU,uBAAO,OAAO,IAAI,GAG7B,CAACA,KAAWwhC,KAAS,CAACA,EAAM,CAAC,KAAO,OAAOA,EAAM,SAAU,eAC7DxhC,IAAUwhC,GAAOA,IAAQ,OAC3BxhC,IAAUA,KAAW,CAAA,GACrB,KAAK,WAAWA,EAAQ,WAAW2hC,IACnC,KAAK,eAAe3hC,EAAQ,eAAe,IAAI+qD,GAAc,EAAE,SAAS,KAAK,UAAU,GACvF,KAAK,YAAY,KAAK,aAAa,WACnC,KAAK,cAAc,KAAK,aAAa,YAAY,KAAK,KAAK,YAAY,GACvE,KAAK,mBAAmB,KAAK,aAAa,iBAAiB,KAAK,KAAK,YAAY,GACjF,KAAK,sBAAsB,KAAK,aAAa,oBAAoB,KAAK,KAAK,YAAY,GAGnFvpB,KACF,KAAK,OAAOA,CAAK;AAAA,EACrB;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AAET,QAAI/N,IAAO,KAAK;AAChB,QAAIA,MAAS;AACX,aAAOA;AAGT,IAAAA,IAAO;AACP,UAAM63B,IAAS,KAAK;AACpB,QAAIC,GAAU5sB;AACd,eAAW6sB,KAAYF;AACrB,iBAAWG,KAAeF,IAAWD,EAAOE,CAAQ,EAAE;AACpD,mBAAWE,KAAiB/sB,IAAU4sB,EAASE,CAAU;AACvD,UAAAh4B,KAAQ,OAAO,KAAKkL,EAAQ+sB,CAAY,CAAC,EAAE;AACjD,WAAO,KAAK,QAAQj4B;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAMA,YAAYk4B,GAAQC,GAAMC,GAAMC,GAAM;AAEpC,UAAMC,IAASJ,EAAOC,CAAI,MAAMD,EAAOC,CAAI,IAAI,KACzCI,IAASD,EAAOF,CAAI,MAAME,EAAOF,CAAI,IAAI,KAEzCI,IAAUH,KAAQE;AACxB,WAAKC,MACHD,EAAOF,CAAI,IAAI,OACV,CAACG;AAAA,EACV;AAAA;AAAA,EAGA,iBAAiBN,GAAQC,GAAMC,GAAMC,GAAM;AAEzC,UAAMC,IAASJ,EAAOC,CAAI,GAAGI,IAASD,EAAOF,CAAI;AACjD,WAAOG,EAAOF,CAAI;AAGlB,eAAWlkD,KAAOokD,EAAQ;AAC1B,WAAOD,EAAOF,CAAI;AAClB,eAAWjkD,KAAOmkD,EAAQ;AAC1B,WAAOJ,EAAOC,CAAI;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,CAAC,aAAaD,GAAQC,GAAMC,GAAMC,GAAMI,GAAOC,GAAOC,GAAOC,GAAS;AACpE,QAAI37B,GAAKq7B,GAAQC;AACjB,UAAMM,IAAa,KAAK,WAClBxtB,IAAQ,KAAK,YAAYwtB,EAAWD,CAAO,CAAC,GAC5Cn7B,IAAQ,EAAE,SAAS,MAAM,WAAW,MAAM,QAAQ,KAAI;AAG5D,IAAI06B,OAAOl7B,IAAMi7B,GAAQA,IAAS,CAAA,GAAIC,CAAI,IAAIl7B,EAAIk7B,CAAI;AACtD,eAAWW,KAAUZ;AACnB,UAAII,IAASJ,EAAOY,CAAM,GAAG;AAC3B,QAAAr7B,EAAMg7B,CAAK,IAAI,KAAK,YAAYI,EAAWC,CAAM,CAAC,GAE9CV,OAAOn7B,IAAMq7B,GAAQA,IAAS,CAAA,GAAIF,CAAI,IAAIn7B,EAAIm7B,CAAI;AACtD,mBAAWW,KAAUT;AACnB,cAAIC,IAASD,EAAOS,CAAM,GAAG;AAC3B,YAAAt7B,EAAMi7B,CAAK,IAAI,KAAK,YAAYG,EAAWE,CAAM,CAAC;AAElD,kBAAM3D,IAASiD,IAAQA,KAAQE,IAAS,CAACF,CAAI,IAAI,KAAM,OAAO,KAAKE,CAAM;AAEzE,qBAASS,IAAI,GAAGA,IAAI5D,EAAO,QAAQ4D;AACjC,cAAAv7B,EAAMk7B,CAAK,IAAI,KAAK,YAAYE,EAAWzD,EAAO4D,CAAC,CAAC,CAAC,GACrD,MAAM,KAAK,SAAS,KAAKv7B,EAAM,SAASA,EAAM,WAAWA,EAAM,QAAQ4N,CAAK;AAAA,UAEhF;AAAA,MAEJ;AAAA,EAEJ;AAAA;AAAA,EAGA,MAAM6sB,GAAQ1nC,GAAU;AACtB,eAAW2nC,KAAQD;AACjB,MAAA1nC,EAAS2nC,CAAI;AAAA,EACjB;AAAA;AAAA,EAGA,YAAYD,GAAQC,GAAM3nC,GAAU;AAClC,QAAI8nC,GAAQF;AACZ,QAAIE,IAASJ,EAAOC,CAAI;AACtB,WAAKC,KAAQE;AACX,QAAA9nC,EAAS4nC,CAAI;AAAA,EAEnB;AAAA;AAAA,EAGA,YAAYF,GAAQE,GAAM5nC,GAAU;AAClC,QAAI2nC,GAAMG;AACV,SAAKH,KAAQD;AACX,MAAAI,IAASJ,EAAOC,CAAI,GAChBG,EAAOF,CAAI,KACb5nC,EAAS2nC,CAAI;AAAA,EAEnB;AAAA;AAAA,EAGA,aAAaD,GAAQC,GAAMC,GAAM5nC,GAAU;AACzC,QAAI8nC,GAAQC,GAAQF;AACpB,SAAKC,IAASJ,EAAOC,CAAI,OAAOI,IAASD,EAAOF,CAAI;AAClD,WAAKC,KAAQE;AACX,QAAA/nC,EAAS6nC,CAAI;AAAA,EAEnB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcH,GAAQC,GAAMC,GAAMC,GAAM;AACtC,QAAIjK,IAAQ,GAAGnxB,GAAKq7B,GAAQC;AAG5B,IAAIJ,OAAOl7B,IAAMi7B,GAAQA,IAAS,CAAA,GAAIC,CAAI,IAAIl7B,EAAIk7B,CAAI;AACtD,eAAWW,KAAUZ;AACnB,UAAII,IAASJ,EAAOY,CAAM,GAAG;AAE3B,QAAIV,OAAOn7B,IAAMq7B,GAAQA,IAAS,CAAA,GAAIF,CAAI,IAAIn7B,EAAIm7B,CAAI;AACtD,mBAAWW,KAAUT;AACnB,WAAIC,IAASD,EAAOS,CAAM,OAEpBV,IAAOA,KAAQE,KAAWnK,MAEzBA,KAAS,OAAO,KAAKmK,CAAM,EAAE;AAAA,MAGxC;AAEF,WAAOnK;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,WAAW/iB,GAAO;AAChB,WAAAA,IAAQA,MAAU,KAAK,IAAKA,MAAU,KAAK,iBAAiBA,CAAK,KAAK,KAC/D,OAAOA,KAAU,WAAW,KAAK,UAAU,EAAE,CAACA,CAAK,GAAG,KAAK,QAAQA,CAAK,EAAC;AAAA,EAClF;AAAA;AAAA;AAAA,EAIA,gBAAgB7a,GAAU;AACxB,UAAMyoC,IAAY,uBAAO,OAAO,IAAI;AACpC,WAAO,CAAA1rC,MAAM;AACX,MAAMA,KAAM0rC,MACVA,EAAU1rC,CAAE,IAAI,IAChBiD,EAAS,KAAK,YAAY,KAAK,UAAUjD,CAAE,GAAG,KAAK,QAAQ,CAAC;AAAA,IAEhE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI0c,GAAM;AACR,gBAAK,QAAQA,CAAI,GACV;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,QAAQiB,GAASC,GAAWC,GAAQC,GAAO;AAEzC,IAAKF,MACHE,IAAQH,EAAQ,OAAOE,IAASF,EAAQ,QACtCC,IAAYD,EAAQ,WAAWA,IAAUA,EAAQ,UAGrDG,IAAQA,IAAQ,KAAK,oBAAoBA,CAAK,IAAI;AAGlD,QAAI6tB,IAAY,KAAK,QAAQ7tB,CAAK;AAgBlC,WAdK6tB,MACHA,IAAY,KAAK,QAAQ7tB,CAAK,IAAI,EAAE,UAAU,CAAA,GAAI,YAAY,IAAI,SAAS,CAAA,EAAE,GAG7E,OAAO,OAAO6tB,CAAS,IAMzBhuB,IAAY,KAAK,oBAAoBA,CAAO,GAC5CC,IAAY,KAAK,oBAAoBA,CAAS,GAC9CC,IAAY,KAAK,oBAAoBA,CAAM,GAEtC,KAAK,YAAY8tB,EAAU,UAAYhuB,GAAWC,GAAWC,CAAM,KAExE,KAAK,YAAY8tB,EAAU,YAAY/tB,GAAWC,GAAWF,CAAO,GACpE,KAAK,YAAYguB,EAAU,SAAY9tB,GAAWF,GAAWC,CAAS,GAGtE,KAAK,QAAQ,MACN,MANE;AAAA,EAOX;AAAA;AAAA,EAGA,SAAS4C,GAAO;AACd,aAAS7vB,IAAI,GAAGA,IAAI6vB,EAAM,QAAQ7vB;AAChC,WAAK,QAAQ6vB,EAAM7vB,CAAC,CAAC;AAAA,EACzB;AAAA;AAAA;AAAA,EAIA,OAAO+rB,GAAM;AACX,gBAAK,WAAWA,CAAI,GACb;AAAA,EACT;AAAA;AAAA,EAGA,IAAIkvB,GAAehuB,GAAWC,GAAQC,GAAO;AAC3C,WAAI8tB,KAAiBA,EAAc,YAChC,EAAE,SAASA,GAAe,WAAAhuB,GAAW,QAAAC,GAAQ,OAAAC,EAAK,IAAK8tB,IACnD,CAAC,KAAK,UAAUA,GAAehuB,GAAWC,GAAQC,CAAK,EAAE,KAAI,EAAG;AAAA,EACzE;AAAA;AAAA,EAGA,OAAOqS,GAAQ;AACb,WAAAA,EAAO,GAAG,QAAQ,CAAAzT,MAAQ;AAAE,WAAK,QAAQA,CAAI;AAAA,IAAG,CAAC,GAC1CyT;AAAA,EACT;AAAA;AAAA,EAGA,WAAWxS,GAASC,GAAWC,GAAQC,GAAO;AAE5C,IAAKF,MACF,EAAE,SAAAD,GAAS,WAAAC,GAAW,QAAAC,GAAQ,OAAAC,EAAK,IAAKH,IAE3CG,IAAQA,IAAQ,KAAK,iBAAiBA,CAAK,IAAI;AAI/C,UAAMwsB,IAAS,KAAK;AACpB,QAAIqB,GAAWpB,GAAUsB;AACzB,QAAI,EAAEluB,IAAaA,KAAW,KAAK,iBAAiBA,CAAO,MAAM,EAAEC,IAAYA,KAAa,KAAK,iBAAiBA,CAAS,MACvH,EAAEC,IAAaA,KAAU,KAAK,iBAAiBA,CAAM,MAAO,EAAE8tB,IAAYrB,EAAOxsB,CAAK,MACtF,EAAEysB,IAAaoB,EAAU,SAAShuB,CAAO,MACzC,EAAEkuB,IAAatB,EAAS3sB,CAAS,MACjC,EAAEC,KAAUguB;AACd,aAAO;AAGT,SAAK,iBAAiBF,EAAU,UAAYhuB,GAAWC,GAAWC,CAAM,GACxE,KAAK,iBAAiB8tB,EAAU,YAAY/tB,GAAWC,GAAWF,CAAO,GACzE,KAAK,iBAAiBguB,EAAU,SAAY9tB,GAAWF,GAAWC,CAAS,GACvE,KAAK,UAAU,QAAM,KAAK;AAG9B,SAAKD,KAAWguB,EAAU,SAAU,QAAO;AAC3C,kBAAOrB,EAAOxsB,CAAK,GACZ;AAAA,EACT;AAAA;AAAA,EAGA,YAAY0C,GAAO;AACjB,aAAS7vB,IAAI,GAAGA,IAAI6vB,EAAM,QAAQ7vB;AAChC,WAAK,WAAW6vB,EAAM7vB,CAAC,CAAC;AAAA,EAC5B;AAAA;AAAA,EAGA,OAAOw/B,GAAQ;AACb,WAAAA,EAAO,GAAG,QAAQ,CAAAzT,MAAQ;AAAE,WAAK,WAAWA,CAAI;AAAA,IAAG,CAAC,GAC7CyT;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,cAAcxS,GAASC,GAAWC,GAAQC,GAAO;AAC/C,UAAMqS,IAAS,IAAIgJ,GAAAA,SAAS,EAAE,YAAY,GAAI,CAAE,GAE1CC,IAAW,KAAK,UAAUzb,GAASC,GAAWC,GAAQC,CAAK;AACjE,WAAAqS,EAAO,QAAQ,CAAA1d,MAAQ;AACrB,aAAO,EAAEA,KAAQ,KAAG;AAClB,cAAM,EAAE,MAAA0Q,GAAM,OAAAvkC,MAAUw6C,EAAS,KAAI;AACrC,YAAIjW,GAAM;AACR,UAAAgN,EAAO,KAAK,IAAI;AAChB;AAAA,QACF;AACA,QAAAA,EAAO,KAAKvxC,CAAK;AAAA,MACnB;AAAA,IACF,GAEO,KAAK,OAAOuxC,CAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,YAAYrS,GAAO;AACjB,WAAO,KAAK,cAAc,MAAM,MAAM,MAAMA,CAAK;AAAA,EACnD;AAAA;AAAA;AAAA,EAIA,SAASH,GAASC,GAAWC,GAAQC,GAAO;AAC1C,WAAO,CAAC,GAAG,KAAK,UAAUH,GAASC,GAAWC,GAAQC,CAAK,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,UAAUH,GAASC,GAAWC,GAAQC,GAAO;AAC5C,UAAMwsB,IAAS,KAAK,WAAWxsB,CAAK;AACpC,QAAIxf,GAASwtC,GAAWC,GAAaC;AAGrC,QAAI,EAAAruB,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAO,MAC1DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAS,MAC5DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAM;AAG7D,iBAAWwtB,KAAWf;AAEpB,SAAIhsC,IAAUgsC,EAAOe,CAAO,OAEtBS,IACEE,IAEF,OAAO,KAAK;AAAA,UAAa1tC,EAAQ;AAAA,UAAS0tC;AAAA,UAAUF;AAAA,UAAWC;AAAA,UAC7C;AAAA,UAAU;AAAA,UAAW;AAAA,UAAaV;AAAA,QAAO,IAG3D,OAAO,KAAK;AAAA,UAAa/sC,EAAQ;AAAA,UAAUwtC;AAAA,UAAWC;AAAA,UAAa;AAAA,UACjD;AAAA,UAAW;AAAA,UAAa;AAAA,UAAUV;AAAA,QAAO,IAEtDU,IAEP,OAAO,KAAK;AAAA,UAAaztC,EAAQ;AAAA,UAAYytC;AAAA,UAAaC;AAAA,UAAU;AAAA,UAClD;AAAA,UAAa;AAAA,UAAU;AAAA,UAAWX;AAAA,QAAO,IACpDW,IAEP,OAAO,KAAK;AAAA,UAAa1tC,EAAQ;AAAA,UAAS0tC;AAAA,UAAU;AAAA,UAAM;AAAA,UACxC;AAAA,UAAU;AAAA,UAAW;AAAA,UAAaX;AAAA,QAAO,IAG3D,OAAO,KAAK;AAAA,UAAa/sC,EAAQ;AAAA,UAAU;AAAA,UAAM;AAAA,UAAM;AAAA,UACrC;AAAA,UAAW;AAAA,UAAa;AAAA,UAAU+sC;AAAA,QAAO;AAAA,EAGnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM1tB,GAASC,GAAWC,GAAQC,GAAO;AACvC,WAAO,IAAImuB,GAA6B,MAAMtuB,GAASC,GAAWC,GAAQC,GAAO,EAAE,aAAa,KAAK,aAAY,CAAE;AAAA,EACrH;AAAA;AAAA;AAAA,EAIA,WAAWH,GAASC,GAAWC,GAAQC,GAAO;AAC5C,UAAMwsB,IAAS,KAAK,WAAWxsB,CAAK;AACpC,QAAI+iB,IAAQ,GAAGviC,GAASwtC,GAAWC,GAAaC;AAGhD,QAAIruB,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAO,MAC1DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAS,MAC5DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAM;AAC3D,aAAO;AAET,eAAWwtB,KAAWf;AAEpB,OAAIhsC,IAAUgsC,EAAOe,CAAO,OAEtB1tB,IACEE,IAEFgjB,KAAS,KAAK,cAAcviC,EAAQ,SAAS0tC,GAAUF,GAAWC,CAAW,IAG7ElL,KAAS,KAAK,cAAcviC,EAAQ,UAAUwtC,GAAWC,GAAaC,CAAQ,IAEzEpuB,IAEPijB,KAAS,KAAK,cAAcviC,EAAQ,YAAYytC,GAAaC,GAAUF,CAAS,IAIhFjL,KAAS,KAAK,cAAcviC,EAAQ,SAAS0tC,GAAUF,GAAWC,CAAW;AAInF,WAAOlL;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,QAAQ59B,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AACnD,SAAK,KAAK,CAAApB,OACRzZ,EAASyZ,GAAM,IAAI,GACZ,KACNiB,GAASC,GAAWC,GAAQC,CAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM7a,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AACjD,WAAO,CAAC,KAAK,KAAK,CAAApB,MAAQ,CAACzZ,EAASyZ,GAAM,IAAI,GAAGiB,GAASC,GAAWC,GAAQC,CAAK;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK7a,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AAChD,eAAWpB,KAAQ,KAAK,UAAUiB,GAASC,GAAWC,GAAQC,CAAK;AACjE,UAAI7a,EAASyZ,GAAM,IAAI;AACrB,eAAO;AACX,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,YAAYkB,GAAWC,GAAQC,GAAO;AACpC,UAAMouB,IAAU,CAAA;AAChB,gBAAK,YAAY,OAAK;AAAE,MAAAA,EAAQ,KAAK,CAAC;AAAA,IAAG,GAAGtuB,GAAWC,GAAQC,CAAK,GAC7DouB;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,YAAYjpC,GAAU2a,GAAWC,GAAQC,GAAO;AAC9C,UAAMwsB,IAAS,KAAK,WAAWxsB,CAAK;AACpC,QAAIxf,GAASytC,GAAaC;AAI1B,QAHA/oC,IAAW,KAAK,gBAAgBA,CAAQ,GAGpC,EAAA2a,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAS,MAC5DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAM;AAG7D,WAAKC,KAASwsB;AAEZ,SAAIhsC,IAAUgsC,EAAOxsB,CAAK,OAEpBiuB,IACEC,IAEF,KAAK,aAAa1tC,EAAQ,YAAYytC,GAAaC,GAAU/oC,CAAQ,IAGrE,KAAK,YAAY3E,EAAQ,UAAUytC,GAAa9oC,CAAQ,IAEnD+oC,IAEP,KAAK,YAAY1tC,EAAQ,SAAS0tC,GAAU/oC,CAAQ,IAGpD,KAAK,MAAM3E,EAAQ,UAAU2E,CAAQ;AAAA,EAG7C;AAAA;AAAA;AAAA,EAIA,cAAc0a,GAASE,GAAQC,GAAO;AACpC,UAAMouB,IAAU,CAAA;AAChB,gBAAK,cAAc,CAAAvV,MAAK;AAAE,MAAAuV,EAAQ,KAAKvV,CAAC;AAAA,IAAG,GAAGhZ,GAASE,GAAQC,CAAK,GAC7DouB;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,cAAcjpC,GAAU0a,GAASE,GAAQC,GAAO;AAC9C,UAAMwsB,IAAS,KAAK,WAAWxsB,CAAK;AACpC,QAAIxf,GAASwtC,GAAWE;AAIxB,QAHA/oC,IAAW,KAAK,gBAAgBA,CAAQ,GAGpC,EAAA0a,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAO,MAC1DE,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAM;AAG7D,WAAKC,KAASwsB;AAEZ,SAAIhsC,IAAUgsC,EAAOxsB,CAAK,OAEpBguB,IACEE,IAEF,KAAK,aAAa1tC,EAAQ,SAAS0tC,GAAUF,GAAW7oC,CAAQ,IAGhE,KAAK,YAAY3E,EAAQ,UAAUwtC,GAAW7oC,CAAQ,IAEjD+oC,IAEP,KAAK,YAAY1tC,EAAQ,YAAY0tC,GAAU/oC,CAAQ,IAGvD,KAAK,MAAM3E,EAAQ,YAAY2E,CAAQ;AAAA,EAG/C;AAAA;AAAA;AAAA,EAIA,WAAW0a,GAASC,GAAWE,GAAO;AACpC,UAAMouB,IAAU,CAAA;AAChB,gBAAK,WAAW,CAAAhC,MAAK;AAAE,MAAAgC,EAAQ,KAAKhC,CAAC;AAAA,IAAG,GAAGvsB,GAASC,GAAWE,CAAK,GAC7DouB;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,WAAWjpC,GAAU0a,GAASC,GAAWE,GAAO;AAC9C,UAAMwsB,IAAS,KAAK,WAAWxsB,CAAK;AACpC,QAAIxf,GAASwtC,GAAWC;AAIxB,QAHA9oC,IAAW,KAAK,gBAAgBA,CAAQ,GAGpC,EAAA0a,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAO,MAC1DC,KAAa,EAAEmuB,IAAc,KAAK,iBAAiBnuB,CAAS;AAGhE,WAAKE,KAASwsB;AAEZ,SAAIhsC,IAAUgsC,EAAOxsB,CAAK,OAEpBguB,IACEC,IAEF,KAAK,aAAaztC,EAAQ,UAAUwtC,GAAWC,GAAa9oC,CAAQ,IAGpE,KAAK,YAAY3E,EAAQ,SAASwtC,GAAW7oC,CAAQ,IAEhD8oC,IAEP,KAAK,YAAYztC,EAAQ,YAAYytC,GAAa9oC,CAAQ,IAG1D,KAAK,MAAM3E,EAAQ,SAAS2E,CAAQ;AAAA,EAG5C;AAAA;AAAA;AAAA,EAIA,UAAU0a,GAASC,GAAWC,GAAQ;AACpC,UAAMquB,IAAU,CAAA;AAChB,gBAAK,UAAU,CAAA/B,MAAK;AAAE,MAAA+B,EAAQ,KAAK/B,CAAC;AAAA,IAAG,GAAGxsB,GAASC,GAAWC,CAAM,GAC7DquB;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,UAAUjpC,GAAU0a,GAASC,GAAWC,GAAQ;AAC9C,eAAWC,KAAS,KAAK;AACvB,WAAK,KAAK,CAAApB,OACRzZ,EAASyZ,EAAK,KAAK,GACZ,KACNiB,GAASC,GAAWC,GAAQ,KAAK,YAAY,KAAK,UAAUC,CAAK,CAAC,CAAC;AAAA,EAE1E;AAAA;AAAA,EAGA,gBAAgBssB,GAAe;AAC7B,WAAO,KAAK,aAAa,gBAAgBA,CAAa;AAAA,EACxD;AAAA;AAAA;AAAA,EAIA,aAAa,EAAE,QAAA+B,IAAS,IAAO,cAAAC,IAAe,GAAK,IAAK,IAAI;AAC1D,UAAMC,IAAQ,CAAA,GACR7H,IAAU4H,KAAgB,MAAM,OACvB,CAACzpD,GAAMo9B,MAAY;AAAE,YAAM,IAAI,MAAM,GAAGp9B,EAAK,KAAK,IAAIo9B,CAAO,EAAE;AAAA,IAAG,IAG3EusB,IAAQ,KAAK,SAAS,MAAM7yB,GAAW,IAAI,MAAMA,GAAW,IAAI,KAAK,IAAI,GACzE8yB,IAAWJ,IAAS,CAAC,GAAGG,CAAK,IAAI,CAAA;AACvC,WAAAA,EAAM,QAAQ,CAAAE,MAAY;AACxB,YAAMC,IAAQ,CAAA;AACd,UAAIC,IAAY,IACZxH,GACAyH;AACJ,YAAM7uB,IAAQ0uB,EAAS;AAGvB,UAAIx1C,IAAUw1C,EAAS;AACvB,aAAOx1C,KAAW,CAAC01C,KAAW;AAC5B,cAAME,IAAc,KAAK,SAAS,MAAM,MAAM51C,GAAS,IAAI,GACrD61C,IAAe,KAAK,SAAS71C,GAAS,MAAM,MAAM,IAAI;AAC5D,YAAI0lB,GAAM/U,IAAQ,MAAMmlC,IAAO,MAAMhoD,IAAS;AAG9C,iBAAS6L,IAAI,GAAGA,IAAIk8C,EAAa,UAAU,CAACH,GAAW/7C;AACrD,UAAA+rB,IAAOmwB,EAAal8C,CAAC,GAChB+rB,EAAK,MAAM,OAAOoB,CAAK,IAEnBonB,IACPwH,IAAYlI,EAAQxtC,GAAS,uBAAuB,IAG7C0lB,EAAK,UAAU,UAAUjD,GAAW,IAAI,QAC3C9R,IACF+kC,IAAYlI,EAAQxtC,GAAS,6BAA6B,IAE1Du1C,EAAS,KAAK5kC,IAAQ+U,CAAI,IAIrBA,EAAK,UAAU,UAAUjD,GAAW,IAAI,OAC3CqzB,IACFJ,IAAYlI,EAAQxtC,GAAS,4BAA4B,IAEzDu1C,EAAS,KAAKO,IAAOpwB,CAAI,IAIpBkwB,EAAY,SACnBF,IAAYlI,EAAQxtC,GAAS,6BAA8B,KAE3DkuC,IAAOxoB,GACPiwB,IAAU,aAzBVD,IAAYlI,EAAQxtC,GAAS,8BAA8B;AA+B/D,iBAASrG,IAAI,GAAGA,IAAIi8C,EAAY,UAAU,CAACF,GAAW,EAAE/7C;AACtD,UAAA+rB,IAAOkwB,EAAYj8C,CAAC,GAChBu0C,IACFwH,IAAYlI,EAAQxtC,GAAS,yBAA0B,IAEhD0lB,EAAK,UAAU,UAAUjD,GAAW,IAAI,OAC3C30B,IACF4nD,IAAYlI,EAAQxtC,GAAS,4BAA4B,IAEzDlS,IAAS43B,KAGXwoB,IAAOxoB,GACPiwB,IAAU;AAKd,QAAKhlC,IAGH8kC,EAAM,QAAQ9kC,EAAM,MAAM,IAF1B+kC,IAAYlI,EAAQxtC,GAAS,kBAAkB,GAGjDA,IAAUlS,KAAUA,EAAO;AAAA,MAC7B;AAGA,MAAI4nD,IACFP,IAAS,KAEFjH,MACPmH,EAAMnH,EAAKyH,CAAO,EAAE,KAAK,IAAIF;AAAA,IACjC,CAAC,GAGGN,KACF,KAAK,YAAYI,CAAQ,GACpBF;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO7rB,GAAO;AAIZ,QAHIA,aAAiByrB,OACnBzrB,IAAQA,EAAM,WAEZ,MAAM,QAAQA,CAAK;AACrB,WAAK,SAASA,CAAK;AAAA,aACZA,aAAiB6pB,MAAW7pB,EAAM,iBAAiB,KAAK;AAC/D,MAAIA,EAAM,UAAU,MAClB,KAAK,UAAU+oB,GAAM,KAAK,SAAS/oB,EAAM,OAAO,GAChD,KAAK,QAAQ;AAAA;AAIf,iBAAW9D,KAAQ8D;AACjB,aAAK,IAAI9D,CAAI;AAEjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAASI,GAAO;AAId,QAHIA,aAAiBmvB,OACnBnvB,IAAQA,EAAM,WAEZA,MAAU;AACZ,aAAO;AAET,QAAI,EAAEA,aAAiButB,OAAY,KAAK,iBAAiBvtB,EAAM;AAC7D,aAAOA,EAAM,MAAM,CAAAJ,MAAQ,KAAK,IAAIA,CAAI,CAAC;AAE3C,UAAMqwB,IAAK,KAAK,SAASC,IAAKlwB,EAAM;AACpC,QAAI4sB,GAAIC,GAAIsD,GAAIC,GAAIC;AACpB,eAAWrvB,KAASkvB,GAAI;AACtB,UAAI,EAAEtD,IAAKqD,EAAGjvB,CAAK,GAAI,QAAO;AAC9B,MAAA4rB,IAAKA,EAAG;AACR,iBAAW/rB,KAAYgsB,IAAKqD,EAAGlvB,CAAK,EAAE,UAAW;AAC/C,YAAI,EAAEmvB,IAAKvD,EAAG/rB,CAAO,GAAI,QAAO;AAChC,mBAAWC,KAAcsvB,IAAKvD,EAAGhsB,CAAO,GAAI;AAC1C,cAAI,EAAEwvB,IAAKF,EAAGrvB,CAAS,GAAI,QAAO;AAClC,qBAAWC,KAAUqvB,EAAGtvB,CAAS;AAC/B,gBAAI,EAAEC,KAAUsvB,GAAK,QAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,cAAcxvB,GAASC,GAAWC,GAAQC,GAAO;AAC/C,eAAWpB,KAAQ,KAAK,MAAMiB,GAASC,GAAWC,GAAQC,CAAK;AAC7D,WAAK,WAAWpB,CAAI;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAWI,GAAO;AAIhB,QAHIA,KAASA,aAAiBmvB,OAC5BnvB,IAAQA,EAAM,WAEZA,MAAU;AACZ,aAAO,IAAIutB,GAAQ,EAAE,aAAa,KAAK,aAAY,CAAE;AAEvD,QAAKvtB,aAAiButB,MAAYvtB,EAAM,iBAAiB,KAAK,cAAc;AAC1E,YAAMswB,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc,GACtDC,IAAST,GAAW,KAAK,SAAS/sB,EAAM,OAAO;AACrD,aAAIwtB,MACF8C,EAAM,UAAU9C,GAChB8C,EAAM,QAAQ,OAETA;AAAA,IACT;AAEA,WAAO,KAAK,OAAO,CAAA1wB,MAAQ,CAACI,EAAM,IAAIJ,CAAI,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAOI,GAAO;AACZ,WAAIA,aAAiBmvB,OACnBnvB,IAAQA,EAAM,WAETA,MAAU,QAAS,KAAK,SAASA,EAAM,QAAQ,KAAK,SAASA,CAAK;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAOuwB,GAAU;AACf,UAAMD,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc;AAC5D,eAAW3tB,KAAQ;AACjB,MAAI2wB,EAAS3wB,GAAM,IAAI,KACrB0wB,EAAM,IAAI1wB,CAAI;AAClB,WAAO0wB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAatwB,GAAO;AAIlB,QAHIA,aAAiBmvB,OACnBnvB,IAAQA,EAAM,WAEZA,MAAU,MAAM;AAClB,YAAMswB,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc;AAC5D,aAAA+C,EAAM,UAAU7D,GAAM,uBAAO,OAAO,IAAI,GAAG,KAAK,OAAO,GACvD6D,EAAM,QAAQ,KAAK,OACZA;AAAA,IACT,WACUtwB,aAAiButB,MAAY,KAAK,iBAAiBvtB,EAAM,cAAc;AAC/E,YAAMswB,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc,GACtDC,IAASb,GAAU3sB,EAAM,SAAS,KAAK,OAAO;AACpD,aAAIwtB,MACF8C,EAAM,UAAU9C,GAChB8C,EAAM,QAAQ,OAETA;AAAA,IACT;AAEA,WAAO,KAAK,OAAO,CAAA1wB,MAAQI,EAAM,IAAIJ,CAAI,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI2wB,GAAU;AACZ,UAAMD,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc;AAC5D,eAAW3tB,KAAQ;AACjB,MAAA0wB,EAAM,IAAIC,EAAS3wB,GAAM,IAAI,CAAC;AAChC,WAAO0wB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAOnqC,GAAUqkC,GAAc;AAC7B,UAAM5I,IAAO,KAAK,UAAS;AAC3B,QAAI4O,IAAchG,MAAiB,SAAY5I,EAAK,KAAI,EAAG,QAAQ4I;AACnE,eAAW5qB,KAAQgiB;AACjB,MAAA4O,IAAcrqC,EAASqqC,GAAa5wB,GAAM,IAAI;AAChD,WAAO4wB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AACR,WAAO,KAAK,SAAQ;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc;AACZ,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,WAAO,KAAK,MAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW;AACT,WAAQ,IAAItqB,KAAY,cAAc,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAMxC,GAAO;AACX,UAAM4sB,IAAQ,IAAI/C,GAAQ,EAAE,aAAa,KAAK,cAAc;AAC5D,WAAA+C,EAAM,UAAU7D,GAAM,uBAAO,OAAO,IAAI,GAAG,KAAK,OAAO,GACvD6D,EAAM,QAAQ,KAAK,OAEnBA,EAAM,OAAO5sB,CAAK,GACX4sB;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,EAAE,OAAO,QAAQ,IAAI;AACnB,WAAO,KAAK,UAAS;AAAA,EACvB;AACF;AAUA,SAASG,GAAWp1C,GAAOq1C,GAAKhE,IAAQ,GAAG;AACzC,QAAMiE,IAAMD,EAAIhE,CAAK;AACrB,MAAIiE,KAAO,EAAEA,KAAOt1C;AAClB,WAAO;AAET,MAAIvL,IAAS;AACb,aAAWhG,KAAQ6mD,IAAM,EAAE,CAACA,CAAG,GAAGt1C,EAAMs1C,CAAG,EAAC,IAAKt1C,GAAQ;AACvD,UAAMjC,IAASszC,MAAU,IAAI,OAAO+D,GAAWp1C,EAAMvR,CAAG,GAAG4mD,GAAKhE,IAAQ,CAAC;AAEzE,IAAItzC,MAAW,OACbtJ,IAASA,KAAU,uBAAO,OAAO,IAAI,GACrCA,EAAOhG,CAAG,IAAIsP;AAAA,EAElB;AACA,SAAOtJ;AACT;AAKA,MAAMq/C,WAAqC9S,GAAAA,SAAS;AAAA,EAClD,YAAYuU,GAAS/vB,GAASC,GAAWC,GAAQC,GAAO9+B,GAAS;AAC/D,UAAM,EAAE,YAAY,IAAM,GAC1B,OAAO,OAAO,MAAM,EAAE,SAAA0uD,GAAS,SAAA/vB,GAAS,WAAAC,GAAW,QAAAC,GAAQ,OAAAC,GAAO,SAAA9+B,GAAS;AAAA,EAC7E;AAAA,EAEA,IAAI,WAAW;AACb,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,EAAE,SAAA0uD,GAAS,OAAA5vB,GAAO,QAAAD,GAAQ,WAAAD,GAAW,SAAAD,EAAO,IAAK,MACjDgwB,IAAW,KAAK,YAAY,IAAItD,GAAQ,EAAE,SAASqD,EAAQ,UAAU,aAAa,KAAK,QAAQ,YAAW,CAAE;AAElH,UAAI5B,GAAWC,GAAaC;AAG5B,UAAIruB,KAAa,EAAEmuB,IAAc6B,EAAS,iBAAiBhwB,CAAO,MAC9DC,KAAa,EAAEmuB,IAAc4B,EAAS,iBAAiB/vB,CAAS,MAChEC,KAAa,EAAEmuB,IAAc2B,EAAS,iBAAiB9vB,CAAM;AAC/D,eAAO8vB;AAET,YAAMrD,IAASoD,EAAQ,WAAW5vB,CAAK;AACvC,iBAAW0sB,KAAYF,GAAQ;AAC7B,YAAIC,GAAUsB,GAAY+B,GAAStvC;AACnC,SAAIA,IAAUgsC,EAAOE,CAAQ,OACvB,CAACsB,KAAaC,KACZF,IAAa0B,GAAWjvC,EAAQ,YAAY,CAACytC,GAAaC,GAAUF,CAAS,CAAC,OAChFvB,IAAWgD,GAAWjvC,EAAQ,UAAU,CAACwtC,GAAWC,GAAaC,CAAQ,CAAC,GAC1E4B,IAAUL,GAAWjvC,EAAQ,SAAS,CAAC0tC,GAAUF,GAAWC,CAAW,CAAC,KAGnEC,KACH4B,IAAUL,GAAWjvC,EAAQ,SAAS,CAAC0tC,GAAUF,GAAWC,CAAW,CAAC,OAC1ExB,IAAWgD,GAAWjvC,EAAQ,UAAU,CAACwtC,GAAWC,GAAaC,CAAQ,CAAC,GAC1EH,IAAa0B,GAAWjvC,EAAQ,YAAY,CAACytC,GAAaC,GAAUF,CAAS,CAAC,MAGzEvB,IAAWgD,GAAWjvC,EAAQ,UAAU,CAACwtC,GAAWC,GAAaC,CAAQ,CAAC,OACjFH,IAAa0B,GAAWjvC,EAAQ,YAAY,CAACytC,GAAaC,GAAUF,CAAS,CAAC,GAC9E8B,IAAUL,GAAWjvC,EAAQ,SAAS,CAAC0tC,GAAUF,GAAWC,CAAW,CAAC,IAGtExB,MACFoD,EAAS,QAAQnD,CAAQ,IAAI,EAAE,UAAAD,GAAU,YAAAsB,GAAY,SAAA+B,EAAO;AAAA,MAElE;AACA,MAAAD,EAAS,QAAQ;AAAA,IACnB;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAMl7B,GAAM;AACV,IAAIA,IAAO,KAAK,CAAC,KAAK62B,EAAQ,MAC5B,KAAKA,EAAQ,IAAI,KAAK,OAAO,QAAQ,EAAC;AACxC,UAAMlQ,IAAW,KAAKkQ,EAAQ;AAC9B,WAAO,EAAE72B,KAAQ,KAAG;AAClB,YAAM,EAAE,MAAA0Q,GAAM,OAAAvkC,MAAUw6C,EAAS,KAAI;AACrC,UAAIjW,GAAM;AACR,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AACA,WAAK,KAAKvkC,CAAK;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,OAAO4hC,GAAO;AACZ,WAAO,KAAK,SAAS,OAAOA,CAAK;AAAA,EACnC;AAAA,EAEA,SAAS1D,GAAO;AACd,WAAO,KAAK,SAAS,SAASA,CAAK;AAAA,EACrC;AAAA,EAEA,cAAca,GAASC,GAAWC,GAAQC,GAAO;AAC/C,WAAO,KAAK,SAAS,cAAcH,GAASC,GAAWC,GAAQC,CAAK;AAAA,EACtE;AAAA,EAEA,WAAWhB,GAAO;AAChB,WAAO,KAAK,SAAS,WAAWA,CAAK;AAAA,EACvC;AAAA,EAEA,OAAOA,GAAO;AACZ,WAAO,KAAK,SAAS,OAAOA,CAAK;AAAA,EACnC;AAAA,EAEA,MAAM7Z,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AACjD,WAAO,KAAK,SAAS,MAAM7a,GAAU0a,GAASC,GAAWC,GAAQC,CAAK;AAAA,EACxE;AAAA,EAEA,OAAOuvB,GAAU;AACf,WAAO,KAAK,SAAS,OAAOA,CAAQ;AAAA,EACtC;AAAA,EAEA,QAAQpqC,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AACnD,WAAO,KAAK,SAAS,QAAQ7a,GAAU0a,GAASC,GAAWC,GAAQC,CAAK;AAAA,EAC1E;AAAA,EAEA,OAAOqS,GAAQ;AACb,WAAO,KAAK,SAAS,OAAOA,CAAM;AAAA,EACpC;AAAA,EAEA,aAAarT,GAAO;AAClB,WAAO,KAAK,SAAS,aAAaA,CAAK;AAAA,EACzC;AAAA,EAEA,IAAIuwB,GAAU;AACZ,WAAO,KAAK,SAAS,IAAIA,CAAQ;AAAA,EACnC;AAAA,EAEA,KAAKpqC,GAAU0a,GAASC,GAAWC,GAAQC,GAAO;AAChD,WAAO,KAAK,SAAS,KAAK7a,GAAU0a,GAASC,GAAWC,GAAQC,CAAK;AAAA,EACvE;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK,SAAS,YAAW;AAAA,EAClC;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,YACV,KAAK,UAAU,SAAQ,IACrB,KAAK,QAAQ,MAAM,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,KAAK;AAAA,EAC9E;AAAA,EAEA,MAAM0C,GAAO;AACX,WAAO,KAAK,YACV,KAAK,UAAU,MAAMA,CAAK,IACxB,KAAK,QAAQ,MAAM,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,KAAK,EAAE,OAAOA,CAAK;AAAA,EAC5F;AAAA,EAEA,UAAU;AACR,WAAO,KAAK,YAAY,KAAK,UAAU,QAAO,IAAK,KAAK,QAAQ,SAAS,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,KAAK;AAAA,EAChI;AAAA,EAEA,OAAOvd,GAAUqkC,GAAc;AAC7B,WAAO,KAAK,SAAS,OAAOrkC,GAAUqkC,CAAY;AAAA,EACpD;AAAA,EAEA,WAAW;AACT,WAAQ,IAAItkB,KAAY,cAAc,IAAI;AAAA,EAC5C;AAAA,EAEA,IAAItG,GAAM;AACR,WAAO,KAAK,SAAS,IAAIA,CAAI;AAAA,EAC/B;AAAA,EAEA,OAAOA,GAAM;AACX,WAAO,KAAK,SAAS,OAAOA,CAAI;AAAA,EAClC;AAAA,EAEA,IAAIA,GAAM;AACR,WAAO,KAAK,SAAS,IAAIA,CAAI;AAAA,EAC/B;AAAA,EAEA,MAAMiB,GAASC,GAAWC,GAAQC,GAAO;AACvC,WAAO,IAAImuB,GAA6B,KAAK,UAAUtuB,GAASC,GAAWC,GAAQC,GAAO,KAAK,OAAO;AAAA,EACxG;AAAA,EAEA,EAAE,OAAO,QAAQ,IAAI;AACnB,WAAO,KAAK,aAAa,KAAK,QAAQ,UAAU,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,KAAK;AAAA,EACvG;AACF;AC3vCe,MAAM+vB,GAAqB;AAAA,EACxC,QAAQrtB,GAAO;AACb,WAAO,IAAI6pB,GAAQ7pB,CAAK;AAAA,EAC1B;AACF;ACDO,SAASstB,GAAoBC,GAAS;AAC3C,QAAMC,IAAQ,CAAA;AACd,aAAW,EAAE,SAAArwB,GAAS,QAAAE,EAAM,KAAMkwB,EAAQ,MAAM,MAAME,GAAG,UAAU,4CAA4C,GAAG,MAAMA,GAAG,aAAY,CAAE,GAAG;AAC1I,UAAMC,IAAU,CAAC,GAAGH,EAAQ,MAAM,MAAM,MAAM,MAAMpwB,CAAO,CAAC,GACtDwwB,IAAa,CAAC,GAAGJ,EAAQ,MAAM,MAAM,MAAM,MAAMlwB,CAAM,CAAC;AAC9D,IAAAmwB,EAAM,KAAK,EAAE,SAAAE,GAAS,YAAAC,EAAU,CAAE;AAAA,EACpC;AACA,SAAOH;AACT;AAEe,MAAMI,GAAW;AAAA,EAC9B,YAAYhB,GAAO;AACjB,SAAK,SAASA;AAAA,EAChB;AAAA,EAEA,KAAKzvB,GAASC,GAAWC,GAAQ8tB,GAAW5sD,GAAI;AAE9C,IAAK,KAAK,OAAO,YAAY4sD,EAAU,UAAYhuB,GAAWC,GAAWC,CAAM,MAC/E,KAAK,OAAO,YAAY8tB,EAAU,YAAY/tB,GAAWC,GAAWF,CAAO,GAC3E,KAAK,OAAO,YAAYguB,EAAU,SAAY9tB,GAAWF,GAAWC,CAAS,GAC7E7+B,EAAE;AAAA,EACJ;AAAA;AAAA,EAGA,iBAAiBsvD,GAAM/vC,GAASvf,GAAI,IAAI,GAAG;AACzC,QAAIuvD,GAAIC,GAAI3vD,GAAOmsD,GAAQC;AAC3B,UAAM,CAACwD,GAAMC,GAAMC,CAAI,IAAIL,EAAK,QAAQ,CAAC,EAAE,OAAOl2C,IAAQmG,EAAQ+vC,EAAK,QAAQ,CAAC,EAAE,OAAO,GACnFM,IAAK,EAAE/vD,IAAQ4vD,EAAK;AAC1B,SAAK5vD,KAAS+vD,IAAKx2C,IAAQ,EAAE,CAACvZ,CAAK,GAAGuZ,EAAMvZ,CAAK;AAC/C,UAAImsD,IAAS5yC,EAAMvZ,CAAK,GAAG;AACzB,QAAI+vD,MAAIH,EAAK,QAAQ,OAAO5vD,CAAK,IACjC0vD,IAAK,EAAE1vD,IAAQ6vD,EAAK;AACpB,aAAK7vD,KAAS0vD,IAAKvD,IAAS,EAAE,CAACnsD,CAAK,GAAGmsD,EAAOnsD,CAAK;AACjD,cAAIosD,IAASD,EAAOnsD,CAAK,GAAG;AAC1B,YAAI0vD,MAAIG,EAAK,QAAQ,OAAO7vD,CAAK,IACjC2vD,IAAK,EAAE3vD,IAAQ8vD,EAAK;AACpB,iBAAK9vD,KAAS2vD,IAAKvD,IAAS,EAAE,CAACpsD,CAAK,GAAGosD,EAAOpsD,CAAK;AACjD,cAAI2vD,MAAIG,EAAK,QAAQ,OAAO9vD,CAAK,IAE7B,MAAMyvD,EAAK,QAAQ,SAAS,IAC9BA,EAAK,WAAW,QAAQ,CAAAr9B,MAAK;AAE3B,qBAAK,KAAKA,EAAE,QAAQ,OAAOA,EAAE,UAAU,OAAOA,EAAE,OAAO,OAAO1S,GAAS,MAAM;AAAE,kBAAAvf,EAAGiyB,CAAC;AAAA,gBAAG,CAAC;AAAA,cACzF,CAAC,IAED,KAAK,iBAAiBq9B,GAAM/vC,GAASvf,GAAI,IAAI,CAAC;AAElD,YAAIwvD,MAAIG,EAAK,QAAQ;AAAA,UACvB;AAEF,QAAIJ,MAAIG,EAAK,QAAQ;AAAA,MACvB;AAEF,IAAIE,MAAIH,EAAK,QAAQ;AAAA,EACvB;AAAA,EAEA,eAAeR,GAAO1vC,GAASvf,GAAI;AACjC,aAAS,IAAI,GAAG,IAAIivD,EAAM,QAAQ;AAChC,WAAK,iBAAiBA,EAAM,CAAC,GAAG1vC,GAASvf,CAAE;AAAA,EAE/C;AAAA;AAAA;AAAA,EAIA,kBAAkBivD,GAAO1vC,GAAS;AAChC,UAAMswC,IAAW,CAAA;AAEjB,aAASC,EAAQV,GAAY;AAC3B,MAAIA,EAAW,QACbA,EAAW,KAAK,QAAQ,CAAAE,MAAQ;AAC9B,QAAAO,EAAS,KAAK,CAACT,EAAW,QAAQ,OAAOA,EAAW,UAAU,OAAOA,EAAW,OAAO,OAAOE,CAAI,CAAC;AAAA,MACrG,CAAC;AAAA,IACL;AAGA,UAAMS,IAAiB,CAAAX,MAAc;AACnC,MAAAA,EAAW,QAAQ,CAAAn9B,MAAK;AAEtB,aAAK,KAAKA,EAAE,QAAQ,OAAOA,EAAE,UAAU,OAAOA,EAAE,OAAO,OAAO1S,GAAS,MAAM;AAAE,UAAAuwC,EAAQ79B,CAAC;AAAA,QAAG,CAAC;AAAA,MAC9F,CAAC;AAAA,IACH;AAEA,SAAK,eAAeg9B,GAAO1vC,GAASuwC,CAAO;AAE3C,QAAIla;AACJ,YAAQA,IAAIia,EAAS,IAAG,OAAQ,UAAW;AACzC,YAAM,CAACjxB,GAASC,GAAWC,GAAQwwB,CAAI,IAAI1Z,GACrC2Z,IAAKD,EAAK,YAAY,QAAQ;AACpC,MAAKC,MAAID,EAAK,YAAY,QAAQ,QAAQ1wB;AAC1C,YAAM4wB,IAAKF,EAAK,YAAY,UAAU;AACtC,MAAKE,MAAIF,EAAK,YAAY,UAAU,QAAQzwB;AAC5C,YAAMmxB,IAAKV,EAAK,YAAY,OAAO;AACnC,MAAKU,MAAIV,EAAK,YAAY,OAAO,QAAQxwB,IAErCwwB,EAAK,QAAQ,WAAW,IAC1BS,EAAeT,EAAK,UAAU,IAG9B,KAAK,iBAAiBA,GAAM/vC,GAASuwC,CAAO,GAGzCP,MAAID,EAAK,YAAY,QAAQ,QAAQ,OACrCE,MAAIF,EAAK,YAAY,UAAU,QAAQ,OACvCU,MAAIV,EAAK,YAAY,OAAO,QAAQ;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,YAAY,EAAE,SAAAH,GAAS,YAAAC,KAAc;AACnC,UAAMa,IAAa,CAAA,GAEbC,IAAO,CAAArwD,MAASA,EAAM,aAAa;AAAA;AAAA,MAEtCowD,EAAWpwD,EAAM,KAAK,IAAIowD,EAAWpwD,EAAM,KAAK,KAAK,CAAA;AAAA;AAAA;AAAA,MAEtD,EAAE,OAAO,KAAK,OAAO,oBAAoBA,CAAK,EAAC;AAAA,OAG3Co9B,IAAI,CAAA0B,OAAS,EAAE,SAASuxB,EAAKvxB,EAAK,OAAO,GAAG,WAAWuxB,EAAKvxB,EAAK,SAAS,GAAG,QAAQuxB,EAAKvxB,EAAK,MAAM;AAE3G,WAAO;AAAA,MACL,SAASwwB,EAAQ,IAAI,CAAAvX,MAAK3a,EAAE2a,CAAC,CAAC;AAAA,MAC9B,YAAYwX,EAAW,IAAI,CAAAxX,MAAK3a,EAAE2a,CAAC,CAAC;AAAA,MACpC,WAAW,OAAO,OAAOqY,CAAU;AAAA,IACzC;AAAA,EACE;AAAA,EAEA,OAAOhB,GAAO;AACZ,IAAK,MAAM,QAAQA,CAAK,MACtBA,IAAQF,GAAoBE,CAAK,IAEnCA,IAAQA,EAAM,IAAI,CAAAK,MAAQ,KAAK,YAAYA,CAAI,CAAC;AAEhD,eAAWa,KAAMlB;AACf,iBAAWmB,KAAMnB;AACf,iBAASr9C,IAAI,GAAGA,IAAIw+C,EAAG,QAAQ,QAAQx+C,KAAK;AAC1C,gBAAMgmC,IAAIwY,EAAG,QAAQx+C,CAAC;AACtB,qBAAWqgB,KAAKk+B,EAAG,YAAY;AAC7B,gBAAIE,GAAOzY,EAAE,SAAS3lB,EAAE,OAAO,KAAKo+B,GAAOzY,EAAE,WAAW3lB,EAAE,SAAS,KAAKo+B,GAAOzY,EAAE,QAAQ3lB,EAAE,MAAM,GAAG;AAClG,oBAAMq+B,IAAM,oBAAI,IAAG,GAEbnB,IAAU,CAAA;AAIhB,cAAAvX,EAAE,QAAQ,QAAQA,EAAE,QAAQ,SAAS,GACrCA,EAAE,OAAO,QAAQA,EAAE,OAAO,SAAS,GACnCA,EAAE,UAAU,QAAQA,EAAE,UAAU,SAAS;AAEzC,uBAAS3hB,IAAI,GAAGA,IAAIm6B,EAAG,QAAQ,QAAQn6B;AACrC,gBAAIA,MAAMrkB,KACRu9C,EAAQ,KAAKoB,GAASH,EAAG,QAAQn6B,CAAC,GAAGq6B,CAAG,CAAC;AAO7C,eAACr+B,EAAE,OAAOA,EAAE,QAAQ,CAAA,GAAI,KAAK;AAAA,gBAC3B,SAAAk9B;AAAA,gBACA,YAAYiB,EAAG;AAAA;AAAA;AAAA,gBAGf,aAAaxY;AAAA,cAC7B,CAAe;AAAA,YACH;AACA,YAAAwY,EAAG,UAAU,QAAQ,CAAA9oD,MAAK;AAAE,cAAAA,EAAE,QAAQ;AAAA,YAAM,CAAC;AAAA,UAC/C;AAAA,QACF;AAIJ,eAAWgoD,KAAQL,GAAO;AACxB,YAAMqB,IAAM,oBAAI,IAAG;AACnB,MAAAhB,EAAK,UAAUA,EAAK,QAAQ,IAAI,CAAA1X,MAAK2Y,GAAS3Y,GAAG0Y,CAAG,CAAC;AAAA,IACvD;AAEA,UAAM/E,IAAS,KAAK,OAAO,WAAU;AACrC,eAAWe,KAAWf;AACpB,WAAK,kBAAkB0D,GAAO1D,EAAOe,CAAO,CAAC;AAG/C,SAAK,OAAO,QAAQ;AAAA,EACtB;AACF;AAEA,SAASiE,GAAS,EAAE,SAAA3xB,GAAS,WAAAC,GAAW,QAAAC,EAAM,GAAIwxB,GAAK;AACrD,QAAMt+B,IAAI4M,EAAQ,SAAW0xB,EAAI,IAAI1xB,CAAO,MAAQ0xB,EAAI,IAAI1xB,CAAO,GAAG,KAChEgZ,IAAI/Y,EAAU,SAASyxB,EAAI,IAAIzxB,CAAS,MAAMyxB,EAAI,IAAIzxB,CAAS,GAAG,KAClEssB,IAAIrsB,EAAO,SAAYwxB,EAAI,IAAIxxB,CAAM,MAASwxB,EAAI,IAAIxxB,CAAM,GAAG;AAErE,SAAQ,CAAC9M,KAAK4lB,IAAK,EAAE,SAAS,cAAc,OAAO,CAAC/Y,GAAWC,GAAQF,CAAO,EAAC,IAC7EusB,IAAI,EAAE,SAAS,WAAW,OAAO,CAACrsB,GAAQF,GAASC,CAAS,EAAC,IACzD,EAAE,SAAS,YAAY,OAAO,CAACD,GAASC,GAAWC,CAAM,EAAC;AAClE;AAEA,SAASuxB,GAAOG,GAAIC,GAAI;AACtB,SAAID,EAAG,UAAU,SACfA,EAAG,QAAQC,EAAG,QAETD,EAAG,UAAUC,EAAG;AACzB;ACxMe,MAAMC,WAAuB1M,GAAAA,UAAU;AAAA,EACpD,YAAY/jD,GAAS;AACnB,UAAM,EAAE,eAAe,IAAM,GAC7B,KAAK,eAAe,aAAa;AAGjC,UAAM0hC,IAAS,IAAInC,GAASv/B,CAAO;AACnC,QAAI0wD,GAAQC;AAEZ,UAAMC,IAAY;AAAA;AAAA,MAEhB,QAAQ,CAAC7zB,GAAOW,MAAS;AAAE,QAAAX,KAAS,KAAK,KAAK,SAASA,CAAK,KAAKW,KAAQ,KAAK,KAAKA,CAAI;AAAA,MAAG;AAAA;AAAA,MAE1F,UAAU,CAAClC,GAAQq1B,MAAQ;AAAE,aAAK,KAAK,UAAUr1B,GAAQq1B,CAAG;AAAA,MAAG;AAAA,IACrE;AAEI,IAAI7wD,KAAWA,EAAQ,aACrB4wD,EAAU,YAAY,CAAAx1B,MAAW;AAAE,WAAK,KAAK,WAAWA,CAAO;AAAA,IAAG,IAEpEsG,EAAO,MAAM;AAAA,MACX,IAAI,CAAC9gC,GAAOqjB,MAAa;AACvB,gBAAQrjB,GAAK;AAAA,UACb,KAAK;AAAQ,YAAA8vD,IAASzsC;AAAU;AAAA,UAChC,KAAK;AAAS,YAAA0sC,IAAQ1sC;AAAU;AAAA,QACxC;AAAA,MACM;AAAA,IACN,GAAO2sC,CAAS,GAGZ,KAAK,aAAa,CAAC1sB,GAAOtQ,GAAUuQ,MAAS;AAAE,MAAAusB,EAAOxsB,CAAK,GAAGC,EAAI;AAAA,IAAI,GACtE,KAAK,SAAS,CAAAA,MAAQ;AAAE,MAAAwsB,EAAK,GAAIxsB,EAAI;AAAA,IAAI;AAAA,EAC3C;AAAA;AAAA,EAGA,OAAOgN,GAAQ;AACb,WAAAA,EAAO,GAAG,QAAS,CAAAjN,MAAS;AAAE,WAAK,MAAMA,CAAK;AAAA,IAAG,CAAC,GAClDiN,EAAO,GAAG,OAAS,MAAW;AAAE,WAAK,IAAG;AAAA,IAAI,CAAC,GAC7CA,EAAO,GAAG,SAAS,CAAApU,MAAS;AAAE,WAAK,KAAK,SAASA,CAAK;AAAA,IAAG,CAAC,GACnD;AAAA,EACT;AACF;ACxCe,MAAM+zB,WAAuB/M,GAAAA,UAAU;AAAA,EACpD,YAAY/jD,GAAS;AACnB,UAAM,EAAE,UAAU,QAAQ,oBAAoB,GAAI,CAAE;AAGpD,UAAM8kD,IAAS,KAAK,UAAU,IAAI9gB,GAAS;AAAA,MACzC,OAAO,CAACtG,GAAM9J,GAAU3P,MAAa;AAAE,aAAK,KAAKyZ,CAAI,GAAGzZ,KAAYA,EAAQ;AAAA,MAAI;AAAA,MAChF,KAAK,CAAAA,MAAY;AAAE,aAAK,KAAK,IAAI,GAAGA,KAAYA,EAAQ;AAAA,MAAI;AAAA,IAClE,GAAOjkB,CAAO;AAGV,SAAK,aAAa,CAAC09B,GAAM9J,GAAUuQ,MAAS;AAAE,MAAA2gB,EAAO,QAAQpnB,GAAMyG,CAAI;AAAA,IAAG,GAC1E,KAAK,SAAS,CAAAA,MAAQ;AAAE,MAAA2gB,EAAO,IAAI3gB,CAAI;AAAA,IAAG;AAAA,EAC5C;AAAA;AAAA,EAGA,OAAOgN,GAAQ;AACb,WAAAA,EAAO,GAAG,QAAU,CAAAzT,MAAQ;AAAE,WAAK,MAAMA,CAAI;AAAA,IAAG,CAAC,GACjDyT,EAAO,GAAG,OAAU,MAAM;AAAE,WAAK,IAAG;AAAA,IAAI,CAAC,GACzCA,EAAO,GAAG,SAAU,CAAApU,MAAS;AAAE,WAAK,KAAK,SAASA,CAAK;AAAA,IAAG,CAAC,GAC3DoU,EAAO,GAAG,UAAU,CAAC3V,GAAQuD,MAAQ;AAAE,WAAK,QAAQ,UAAUvD,GAAQuD,CAAG;AAAA,IAAG,CAAC,GACtE;AAAA,EACT;AACF;AC8BA,MAAA5lB,KAAe;AAAA,EACf,OAAE43C;AAAAA,EACF,QAAEC;AAAAA,EACF,QAAEC;AAAAA,EACF,OAAEC;AAAAA,EACF,cAAEC;AAAAA,EACF,aAAEC;AAAAA,EACF,cAAEC;AAAAA,EACF,cAAEC;AAAAA,EACA,MAAAC;AAAA,EACF,UAAEC;AAAAA,EACA,SAAAxuB;AAAA,EAEF,aAAE5F;AAAAA,EAEA,MAAAS;AAAA,EACF,WAAEI;AAAAA,EACF,SAAEF;AAAAA,EACF,WAAEiB;AAAAA,EACF,UAAEG;AAAAA,EACF,cAAEf;AAAAA,EACF,MAAEgB;AAAAA,EACF,QAAEqyB;AAAAA,EAEA,YAAApzB;AAAA,EACA,UAAAI;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCnFA,OAAO,eAAeizB,IAAS,cAAc,EAAE,OAAO,IAAM;AAM5D,QAAMC,IAAOx/B;AAAA,EACb,MAAMy/B,UAAsBD,EAAK,MAAM;AAAA,IACnC,aAAa5/B,GAAG4lB,GAAGuT,GAAGC,GAAG;AACrB,YAAM3pB,IAAQ,KAAK,SAASzP,GAAG4lB,GAAGuT,GAAGC,CAAC;AACtC,kBAAK,YAAY3pB,CAAK,GACfA;AAAA,IACf;AAAA,IACI,eAAezP,GAAG4lB,GAAGwT,GAAG;AACpB,aAAO,KAAK,aAAap5B,GAAG4lB,GAAG,MAAMwT,CAAC,EAAE,IAAI,CAACzsB,MAASA,EAAK,MAAM;AAAA,IACzE;AAAA,EACA;AACA,SAAAgzB,GAAA,UAAkBE;;;;;UCjBlB,OAAO,eAAeC,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,YAAoB;AAIpB,MAAAC,IAAA,MAAgB;AAAA,IACZ,YAAYlyD,GAAO;AACf,WAAK,WAAW,aAChB,KAAK,QAAQA;AAAA,IACrB;AAAA,IACI,OAAOk+B,GAAO;AACV,aAAO,CAAC,CAACA,KAASA,EAAM,aAAa,eAAeA,EAAM,UAAU,KAAK;AAAA,IACjF;AAAA,EACA;AACA+zB,SAAAA,GAAA,YAAoB7yB;;;;;UCdpB,OAAO,eAAe+yB,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,eAAuB;AAKvB,MAAAC,IAAA,MAAmB;AAAA,IACf,cAAc;AACV,WAAK,WAAW,gBAChB,KAAK,QAAQ;AAAA,IAErB;AAAA,IACI,OAAOl0B,GAAO;AACV,aAAO,CAAC,CAACA,KAASA,EAAM,aAAa;AAAA,IAC7C;AAAA,EACA;AACAi0B,SAAAA,GAAA,eAAuB3zB,GACvBA,EAAa,WAAW,IAAIA,EAAY;;;;;UCjBxC,OAAO,eAAe6zB,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,YAAoB;AAIpB,MAAAC,IAAA,MAAgB;AAAA,IACZ,YAAYtyD,GAAO;AACf,WAAK,WAAW,aAChB,KAAK,QAAQA;AAAA,IACrB;AAAA,IACI,OAAOk+B,GAAO;AACV,aAAO,CAAC,CAACA,KAASA,EAAM,aAAa,eAAeA,EAAM,UAAU,KAAK;AAAA,IACjF;AAAA,EACA;AACAm0B,SAAAA,GAAA,YAAoBh0B;;;;;UCdpB,OAAO,eAAek0B,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,UAAkB;AAClB,QAAMF,IAAc9/B,GAAA;AAIpB,MAAAigC,IAAA,MAAMr0B,GAAQ;AAAA,IACV,YAAYn+B,GAAOyyD,GAAoB;AACnC,WAAK,WAAW,WAChB,KAAK,QAAQzyD,GACT,OAAOyyD,KAAuB,YAC9B,KAAK,WAAWA,GAChB,KAAK,WAAWt0B,GAAQ,uBAEnBs0B,KACL,KAAK,WAAW,IAChB,KAAK,WAAWA,MAGhB,KAAK,WAAW,IAChB,KAAK,WAAWt0B,GAAQ;AAAA,IAEpC;AAAA,IACI,OAAOD,GAAO;AACV,aAAO,CAAC,CAACA,KAASA,EAAM,aAAa,aAAaA,EAAM,UAAU,KAAK,SACnEA,EAAM,aAAa,KAAK,YAAY,KAAK,SAAS,OAAOA,EAAM,QAAQ;AAAA,IACnF;AAAA,EACA;AACAq0B,SAAAA,GAAA,UAAkBp0B,GAClBA,EAAQ,sBAAsB,IAAIk0B,EAAY,UAAU,uDAAuD,GAC/Gl0B,EAAQ,aAAa,IAAIk0B,EAAY,UAAU,yCAAyC;;;;;UC9BxF,OAAO,eAAeK,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,OAAe;AAKf,MAAAC,IAAA,MAAW;AAAA,IACP,YAAY5zB,GAASC,GAAWC,GAAQC,GAAO;AAC3C,WAAK,WAAW,QAChB,KAAK,QAAQ,IACb,KAAK,UAAUH,GACf,KAAK,YAAYC,GACjB,KAAK,SAASC,GACd,KAAK,QAAQC;AAAA,IACrB;AAAA,IACI,OAAOhB,GAAO;AAEV,aAAO,CAAC,CAACA,MAAUA,EAAM,aAAa,UAAU,CAACA,EAAM,aACnD,KAAK,QAAQ,OAAOA,EAAM,OAAO,KACjC,KAAK,UAAU,OAAOA,EAAM,SAAS,KACrC,KAAK,OAAO,OAAOA,EAAM,MAAM,KAC/B,KAAK,MAAM,OAAOA,EAAM,KAAK;AAAA,IACzC;AAAA,EACA;AACAw0B,SAAAA,GAAA,OAAelzB;;;;;UCxBf,OAAO,eAAeozB,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,WAAmB;AAInB,MAAAC,IAAA,MAAe;AAAA,IACX,YAAY7yD,GAAO;AACf,WAAK,WAAW,YAChB,KAAK,QAAQA;AAAA,IACrB;AAAA,IACI,OAAOk+B,GAAO;AACV,aAAO,CAAC,CAACA,KAASA,EAAM,aAAa,cAAcA,EAAM,UAAU,KAAK;AAAA,IAChF;AAAA,EACA;AACA00B,SAAAA,GAAA,WAAmBrzB;;;;;UCdnB,OAAO,eAAeuzB,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,cAAsB;AACtB,QAAMb,IAAc1/B,GAAA,GACd4/B,IAAiB3/B,GAAA,GACjB+/B,IAAY1oB,GAAA,GACZwoB,IAAcroB,GAAA,GACd0oB,IAASzoB,GAAA,GACT2oB,IAAajoB,GAAA;AACnB,MAAIooB,IAAqB,GAIzBC,IAAA,MAAkB;AAAA,IACd,YAAY5yD,GAAS;AACjB,WAAK,mBAAmB,GACxBA,IAAUA,KAAW,CAAA,GACrB,KAAK,kBAAkBA,EAAQ,mBAAmB,MAAM2yD,GAAoB;AAAA,IACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMI,UAAU/yD,GAAO;AACb,aAAO,IAAIqyD,EAAY,UAAUryD,CAAK;AAAA,IAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQI,UAAUA,GAAO;AACb,aAAO,IAAIiyD,EAAY,UAAUjyD,KAAS,GAAG,KAAK,eAAe,GAAG,KAAK,kBAAkB,EAAE;AAAA,IACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWI,QAAQA,GAAOyyD,GAAoB;AAC/B,aAAO,IAAIF,EAAU,QAAQvyD,GAAOyyD,CAAkB;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOI,SAASzyD,GAAO;AACZ,aAAO,IAAI4yD,EAAW,SAAS5yD,CAAK;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA,IAII,eAAe;AACX,aAAOmyD,EAAe,aAAa;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASI,KAAKpzB,GAASC,GAAWC,GAAQC,GAAO;AACpC,aAAO,IAAIwzB,EAAO,KAAK3zB,GAASC,GAAWC,GAAQC,KAAS,KAAK,cAAc;AAAA,IACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMI,SAAS+zB,GAAU;AAGf,cAAQA,EAAS,UAAQ;AAAA,QACrB,KAAK;AACD,iBAAO,KAAK,UAAUA,EAAS,KAAK;AAAA,QACxC,KAAK;AACD,iBAAO,KAAK,UAAUA,EAAS,KAAK;AAAA,QACxC,KAAK;AACD,iBAAIA,EAAS,WACF,KAAK,QAAQA,EAAS,OAAOA,EAAS,QAAQ,IAEpDA,EAAS,SAAS,OAAOV,EAAU,QAAQ,UAAU,IAGnD,KAAK,QAAQU,EAAS,KAAK,IAFvB,KAAK,QAAQA,EAAS,OAAO,KAAK,SAASA,EAAS,QAAQ,CAAC;AAAA,QAG5E,KAAK;AACD,iBAAO,KAAK,SAASA,EAAS,KAAK;AAAA,QACvC,KAAK;AACD,iBAAO,KAAK,aAAY;AAAA,QAC5B,KAAK;AACD,iBAAO,KAAK,KAAK,KAAK,SAASA,EAAS,OAAO,GAAG,KAAK,SAASA,EAAS,SAAS,GAAG,KAAK,SAASA,EAAS,MAAM,GAAG,KAAK,SAASA,EAAS,KAAK,CAAC;AAAA,MAClK;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMI,SAASA,GAAU;AACf,aAAO,KAAK,SAASA,CAAQ;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA,IAII,wBAAwB;AACpB,WAAK,mBAAmB;AAAA,IAChC;AAAA,EACA;AACAH,SAAAA,GAAA,cAAsBt1B;;;;;ACvHtB,QAAI01B,IAAmBC,MAAQA,GAAK,oBAAqB,OAAO,UAAU,SAAS7H,GAAGlyC,GAAGg6C,GAAGC,GAAI;AAC5F,MAAIA,MAAO,WAAWA,IAAKD;AAC3B,UAAIE,IAAO,OAAO,yBAAyBl6C,GAAGg6C,CAAC;AAC/C,OAAI,CAACE,MAAS,SAASA,IAAO,CAACl6C,EAAE,aAAak6C,EAAK,YAAYA,EAAK,mBAClEA,IAAO,EAAE,YAAY,IAAM,KAAK,WAAW;AAAE,eAAOl6C,EAAEg6C,CAAC;AAAA,QAAI,IAE7D,OAAO,eAAe9H,GAAG+H,GAAIC,CAAI;AAAA,IACrC,MAAM,SAAShI,GAAGlyC,GAAGg6C,GAAGC,GAAI;AACxB,MAAIA,MAAO,WAAWA,IAAKD,IAC3B9H,EAAE+H,CAAE,IAAIj6C,EAAEg6C,CAAC;AAAA,IACf,KACIG,IAAgBJ,MAAQA,GAAK,gBAAiB,SAAS/5C,GAAGsZ,GAAS;AACnE,eAASqlB,KAAK3+B,EAAG,CAAI2+B,MAAM,aAAa,CAAC,OAAO,UAAU,eAAe,KAAKrlB,GAASqlB,CAAC,KAAGmb,EAAgBxgC,GAAStZ,GAAG2+B,CAAC;AAAA,IAC5H;AACA,WAAO,eAAcrlB,GAAU,cAAc,EAAE,OAAO,IAAM,GAC5D6gC,EAAahhC,GAAA,GAA4BG,CAAO,GAChD6gC,EAAa/gC,GAAA,GAA8BE,CAAO,GAClD6gC,EAAa1pB,GAAA,GAA+BnX,CAAO,GACnD6gC,EAAavpB,GAAA,GAA0BtX,CAAO,GAC9C6gC,EAAatpB,GAAA,GAA4BvX,CAAO,GAChD6gC,EAAa5oB,GAAA,GAAuBjY,CAAO,GAC3C6gC,EAAajY,GAAA,GAA2B5oB,CAAO;AAAA;;;;;UCrB/C,OAAO,eAAe8gC,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,mBAA2BA,GAAA,mBAA2BA,GAAA,eAAuBA,GAAA,qBAA6BA,GAAA,iBAAyBA,GAAA,kBAA0BA,GAAA,eAAuB;AACpL,QAAMC,IAAqBlhC,GAAA,GACrBmhC,IAAU,IAAID,EAAmB,YAAW;AAkBlD,WAASE,EAAa70B,GAAM;AAExB,QAAKA;AAGL,cAAQA,EAAK,UAAQ;AAAA,QACjB,KAAK;AAAa,iBAAQ,IAAI80B,EAAU90B,EAAK,KAAK,CAAC;AAAA,QACnD,KAAK;AAAa,iBAAQ,KAAKA,EAAK,KAAK;AAAA,QACzC,KAAK,WAAW;AACZ,gBAAM+0B,IAAe/0B;AACrB,iBAAQ,IAAIg1B,EAAgBD,EAAa,KAAK,CAAC,IAAIA,EAAa,YAC5DA,EAAa,SAAS,UAAU,6CAChCA,EAAa,SAAS,UAAU,0DAChC,MAAMA,EAAa,SAAS,KAAK,MACjC,EAAE,GAAGA,EAAa,WAAW,IAAIA,EAAa,QAAQ,KAAK,EAAE;AAAA,QAC7E;AAAA,QACQ,KAAK;AAAQ,iBAAQ,KAAKF,EAAa70B,EAAK,OAAO,CAAC,IAAI60B,EAAa70B,EAAK,SAAS,CAAC,IAAI60B,EAAa70B,EAAK,MAAM,CAAC,GAAGA,EAAK,MAAM,aAAa,iBAAiB,KAAK,IAAI60B,EAAa70B,EAAK,KAAK,CAAC,EAAE;AAAA,QAChM,KAAK;AAAY,iBAAQ,IAAIA,EAAK,KAAK;AAAA,QACvC,KAAK;AAAgB,iBAAOA,EAAK;AAAA,MACzC;AAAA,EACA;AACA,EAAA00B,GAAA,eAAuBG;AAMvB,WAASI,EAAgBF,GAAc;AACnC,UAAMh4B,IAAQ,+BAA+B,KAAKg4B,CAAY;AAC9D,QAAI,CAACh4B;AACD,YAAM,IAAI,MAAM,GAAGg4B,CAAY,mBAAmB;AAEtD,WAAOh4B,EAAM,CAAC,EAAE,QAAQ,SAAS,GAAG;AAAA,EACxC;AACA,EAAA23B,GAAA,kBAA0BO;AAM1B,WAASC,EAAeH,GAAc;AAClC,UAAMh4B,IAAQ,wCAAwC,KAAKg4B,CAAY;AACvE,QAAI,CAACh4B;AACD,YAAM,IAAI,MAAM,GAAGg4B,CAAY,mBAAmB;AAEtD,WAAOh4B,EAAM,CAAC,MAAMA,EAAM,CAAC,IACvB,0DACA;AAAA,EACR;AACA,EAAA23B,GAAA,iBAAyBQ;AAMzB,WAASC,EAAmBJ,GAAc;AACtC,UAAMh4B,IAAQ,oCAAoC,KAAKg4B,CAAY;AACnE,QAAI,CAACh4B;AACD,YAAM,IAAI,MAAM,GAAGg4B,CAAY,mBAAmB;AAEtD,WAAOh4B,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,YAAW,IAAK;AAAA,EAC/C;AACA,EAAA23B,GAAA,qBAA6BS;AAO7B,WAASC,EAAal0D,GAAOm0D,GAAa;AAEtC,QADAA,IAAcA,KAAeT,GACzB,CAAC1zD,KAAUA,EAAM,WAAW;AAC5B,aAAOm0D,EAAY,aAAY;AAEnC,YAAQn0D,EAAM,CAAC,GAAC;AAAA,MACZ,KAAK;AAAK,eAAOm0D,EAAY,UAAUn0D,EAAM,MAAM,CAAC,CAAC;AAAA,MACrD,KAAK;AACD,YAAI,CAACm0D,EAAY;AACb,gBAAM,IAAI,MAAM,sDAAsD;AAE1E,eAAOA,EAAY,SAASn0D,EAAM,MAAM,CAAC,CAAC;AAAA,MAC9C,KAAK,KAAK;AACN,cAAMo0D,IAAWH,EAAmBj0D,CAAK,GACnCwa,IAAO25C,EAAY,UAAUH,EAAeh0D,CAAK,CAAC;AACxD,eAAOm0D,EAAY,QAAQJ,EAAgB/zD,CAAK,GAAGo0D,KAAY55C,CAAI;AAAA,MAC/E;AAAA,MAEQ;AACI,YAAIxa,EAAM,WAAW,IAAI,KAAKA,EAAM,SAAS,IAAI,GAAG;AAEhD,gBAAMqrD,IAAQrrD,EAAM,MAAM,GAAG,EAAE,GACzBq0D,IAAc,CAAA;AACpB,cAAIC,IAAa,GACbC,IAAY;AAChB,mBAASxiD,IAAI,GAAGA,IAAIs5C,EAAM,QAAQt5C,KAAK;AACnC,kBAAMwsB,IAAO8sB,EAAMt5C,CAAC;AAIpB,gBAHIwsB,MAAS,OACT+1B,KAEA/1B,MAAS,KAAK;AACd,kBAAI+1B,MAAe;AACf,sBAAM,IAAI,MAAM,4CAA4Ct0D,CAAK,EAAE;AAGnE,cAAAs0D;AAAA,YAE5B;AACoB,YAAI/1B,MAAS,OAAO+1B,MAAe,MAC/BD,EAAY,KAAKhJ,EAAM,MAAMkJ,GAAWxiD,CAAC,CAAC,GAC1CwiD,IAAYxiD,IAAI;AAAA,UAExC;AACgB,cAAIuiD,MAAe;AACf,kBAAM,IAAI,MAAM,4CAA4Ct0D,CAAK,EAAE;AAIvE,cAFAq0D,EAAY,KAAKhJ,EAAM,MAAMkJ,GAAWlJ,EAAM,MAAM,CAAC,GAEjDgJ,EAAY,WAAW,KAAKA,EAAY,WAAW;AACnD,kBAAM,IAAI,MAAM,4BAA4Br0D,CAAK,EAAE;AAEvD,iBAAOm0D,EAAY,KAAKD,EAAaG,EAAY,CAAC,CAAC,GAAGH,EAAaG,EAAY,CAAC,CAAC,GAAGH,EAAaG,EAAY,CAAC,CAAC,GAAGA,EAAY,CAAC,IAAIH,EAAaG,EAAY,CAAC,CAAC,IAAI,MAAS;AAAA,QAC3L;AACY,YAAI,CAACr0D,EAAM,WAAW,GAAG,KAAK,CAACA,EAAM,SAAS,GAAG;AAC7C,gBAAM,IAAI,MAAM,gEAAgEA,CAAK,EAAE;AAE3F,eAAOm0D,EAAY,UAAUn0D,EAAM,MAAM,GAAG,EAAE,CAAC;AAAA,IAC3D;AAAA,EACA;AACA,EAAAwzD,GAAA,eAAuBU;AAOvB,WAASM,EAAiB12B,GAAM;AAC5B,WAAO;AAAA,MACH,SAAS61B,EAAa71B,EAAK,OAAO;AAAA,MAClC,WAAW61B,EAAa71B,EAAK,SAAS;AAAA,MACtC,QAAQ61B,EAAa71B,EAAK,MAAM;AAAA,MAChC,OAAO61B,EAAa71B,EAAK,KAAK;AAAA;EAEtC;AACA,EAAA01B,GAAA,mBAA2BgB;AAQ3B,WAASC,EAAiBC,GAAYP,GAAa;AAC/C,WAAAA,IAAcA,KAAeT,GACtBS,EAAY,KAAKD,EAAaQ,EAAW,SAASP,CAAW,GAAGD,EAAaQ,EAAW,WAAWP,CAAW,GAAGD,EAAaQ,EAAW,QAAQP,CAAW,GAAGD,EAAaQ,EAAW,OAAOP,CAAW,CAAC;AAAA,EACrN;AACA,EAAAX,GAAA,mBAA2BiB;AAC3B,WAASb,EAAUe,GAAU;AACzB,WAAOA,EAAS,QAAQC,GAAeC,CAAuB;AAAA,EAClE;AACA,WAASf,EAAgBgB,GAAa;AAClC,WAAIF,EAAc,KAAKE,CAAW,MAC9BA,IAAcA,EAAY,QAAQF,GAAeC,CAAuB,IAErEC;AAAA,EACX;AAIA,QAAMF,IAAgB,gEAEhBG,IAAU,oBAAI,IAAI;AAAA,IACpB,CAAC,MAAM,MAAM;AAAA,IACb,CAAC,KAAK,KAAK;AAAA,IACX,CAAC,KAAM,KAAK;AAAA,IACZ,CAAC;AAAA,GAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,EAChB,CAAC;AACD,WAASF,EAAwB3vB,GAAW;AAExC,UAAM5tB,IAASy9C,EAAQ,IAAI7vB,CAAS;AACpC,QAAI,CAAC5tB,GAAQ;AACT,UAAI4tB,EAAU,WAAW,GAAG;AAExB,cAAM3U,IAAO2U,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE;AAChD,eAAO,GAAG,UAAU,MAAM,GAAG,CAAC3U,EAAK,MAAM,CAAC,GAAGA,CAAI;AAAA,MAC7D;AAEQ,YAAMA,MAAS2U,EAAU,WAAW,CAAC,IAAI,SAAS,OAAOA,EAAU,WAAW,CAAC,IAAI,MAAM,SAAS,EAAE;AACpG,aAAO,GAAG,cAAc,MAAM,GAAG,CAAC3U,EAAK,MAAM,CAAC,GAAGA,CAAI;AAAA,IAC7D;AACI,WAAOjZ;AAAA,EACX;;;;;;ACtNA,WAAO,eAAcob,GAAU,cAAc,EAAE,OAAO,IAAM,GAC5DA,EAAA,eAAuBA,iBAAuBA,EAAA,mBAA2BA,EAAA,mBAA2BA,oBAA0BA,EAAA,iBAAyBA,EAAA,qBAA6B;AACpL,UAAMsiC,IAAaziC,GAAA;AACnB,WAAO,eAAeG,GAAS,sBAAsB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAmB,EAAE,CAAE,GACrI,OAAO,eAAetiC,GAAS,kBAAkB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAe,EAAE,CAAE,GAC7H,OAAO,eAAetiC,GAAS,mBAAmB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAgB,EAAE,CAAE,GAC/H,OAAO,eAAetiC,GAAS,oBAAoB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAiB,EAAE,CAAE,GACjI,OAAO,eAAetiC,GAAS,oBAAoB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAiB,EAAE,CAAE,GACjI,OAAO,eAAetiC,GAAS,gBAAgB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAa,EAAE,CAAE,GACzH,OAAO,eAAetiC,GAAS,gBAAgB,EAAE,YAAY,IAAM,KAAK,WAAY;AAAE,aAAOsiC,EAAW;AAAA,IAAa,EAAE,CAAE;AAAA;;;;;UCRzH,OAAO,eAAeC,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,kBAA0BnB,GAC1BmB,GAAA,YAAoBrB;AACpB,QAAMmB,IAAU,oBAAI,IAAI;AAAA,IACpB,CAAC,MAAM,MAAM;AAAA,IACb,CAAC,KAAK,KAAK;AAAA,IACX,CAAC,KAAM,KAAK;AAAA,IACZ,CAAC;AAAA,GAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,IACZ,CAAC,MAAM,KAAK;AAAA,EAChB,CAAC;AACD,WAASF,EAAwB3vB,GAAW;AAExC,UAAM5tB,IAASy9C,EAAQ,IAAI7vB,CAAS;AACpC,QAAI,CAAC5tB,GAAQ;AACT,UAAI4tB,EAAU,WAAW,GAAG;AAExB,cAAM3U,IAAO2U,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE;AAChD,eAAO,GAAG,UAAU,MAAM,GAAG,CAAC3U,EAAK,MAAM,CAAC,GAAGA,CAAI;AAAA,MAC7D;AAEQ,YAAMA,MAAS2U,EAAU,WAAW,CAAC,IAAI,SAAS,OAAOA,EAAU,WAAW,CAAC,IAAI,MAC9E,SAAS,EAAE;AAChB,aAAO,GAAG,cAAc,MAAM,GAAG,CAAC3U,EAAK,MAAM,CAAC,GAAGA,CAAI;AAAA,IAC7D;AACI,WAAOjZ;AAAA,EACX;AAEA,QAAMs9C,IAAgB;AACtB,WAASd,EAAgBgB,GAAa;AAClC,WAAIF,EAAc,KAAKE,CAAW,IACvBA,EAAY,QAAQF,GAAeC,CAAuB,IAE9DC;AAAA,EACX;AACA,WAASlB,EAAUe,GAAU;AACzB,WAAOA,EAAS,QAAQC,GAAeC,CAAuB;AAAA,EAClE;;;;;;;ACvCA,MAAIK,IAAa/B,MAAQA,GAAK,aAAc,SAAUgC,GAASC,GAAYC,GAAGC,GAAW;AACrF,aAASC,EAAMv1D,GAAO;AAAE,aAAOA,aAAiBq1D,IAAIr1D,IAAQ,IAAIq1D,EAAE,SAAUp9C,GAAS;AAAE,QAAAA,EAAQjY,CAAK;AAAA,MAAE,CAAE;AAAA,IAAE;AAC1G,WAAO,KAAKq1D,MAAMA,IAAI,UAAU,SAAUp9C,GAASmxB,GAAQ;AACvD,eAASosB,EAAUx1D,GAAO;AAAE,YAAI;AAAE,UAAAy1D,EAAKH,EAAU,KAAKt1D,CAAK,CAAC;AAAA,QAAE,SAAUqB,GAAG;AAAE,UAAA+nC,EAAO/nC,CAAC;AAAA,QAAE;AAAA,MAAE;AACzF,eAASq0D,EAAS11D,GAAO;AAAE,YAAI;AAAE,UAAAy1D,EAAKH,EAAU,MAASt1D,CAAK,CAAC;AAAA,QAAE,SAAUqB,GAAG;AAAE,UAAA+nC,EAAO/nC,CAAC;AAAA,QAAE;AAAA,MAAE;AAC5F,eAASo0D,EAAKn+C,GAAQ;AAAE,QAAAA,EAAO,OAAOW,EAAQX,EAAO,KAAK,IAAIi+C,EAAMj+C,EAAO,KAAK,EAAE,KAAKk+C,GAAWE,CAAQ;AAAA,MAAE;AAC5G,MAAAD,GAAMH,IAAYA,EAAU,MAAMH,GAASC,KAAc,CAAA,CAAE,GAAG,MAAM;AAAA,IAC5E,CAAK;AAAA,EACL;AACA,SAAO,eAAeO,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,YAAoB;AACpB,QAAM5D,IAAOx/B,IACPqjC,IAAmBpjC,GAAA,GACnBqjC,IAAWhsB,GAAA,GACXisB,IAAe,CAACjlD,GAAGC,MAAM;AAC3B,eAAW9I,KAAO,CAAC,YAAY,OAAO,GAAG;AACrC,YAAM+tD,IAAallD,EAAE7I,CAAG,EAAE,cAAc8I,EAAE9I,CAAG,CAAC;AAC9C,UAAI+tD,MAAe;AACf,eAAOA;AAAA,IAEnB;AACI,QAAIllD,EAAE,aAAa,aAAaC,EAAE,aAAa,WAAW;AACtD,UAAID,EAAE,SAAS,UAAUC,EAAE,SAAS;AAChC,eAAOD,EAAE,SAAS,MAAM,cAAcC,EAAE,SAAS,KAAK;AAE1D,UAAID,EAAE,aAAaC,EAAE;AACjB,eAAOD,EAAE,SAAS,cAAcC,EAAE,QAAQ;AAAA,IAEtD;AACI,WAAO;AAAA,EACX;AACA,WAASklD,EAAav7C,GAAK;AACvB,QAAIsT;AACJ,YAAQA,IAAK,YAAY,KAAKtT,CAAG,OAAO,QAAQsT,MAAO,SAAS,SAASA,EAAG,CAAC;AAAA,EACjF;AACA,QAAMyU,IAAkB;AAAA,IACpB,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,KAEFyzB,IAAyB,CAAC,yDAAyD,2CAA2C,0DAA0D;AAAA,EAC9L,MAAMC,EAAU;AAAA,IACZ,YAEA1H,GAEAtJ,GAAQ3iB,IAAW,IAAIniC,IAAU,CAAA,GAAI;AAYjC,cAXA,KAAK,QAAQouD,GACb,KAAK,OAAO,IACZ,KAAK,cAAc,IACnB,KAAK,WAAW,CAAA,GAChB,KAAK,YAAY,CAAA,GACjB,KAAK,iBAAiB,oBAAI,IAAG,GAC7B,KAAK,eAAeuD,EAAK,YAAY,aAAY,GACjD,KAAK,UAAU,MACf,KAAK,gBAAgB,QACrB,KAAK,kBAAkB,IACvB,KAAK,UAAU,IAC2C3xD,GAAQ,QAAM;AAAA,QACpE,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD;AAAA,QACJ;AACI,gBAAM,IAAI,MAAM,uBAAyEA,GAAQ,MAAM,EAAE;AAAA,MACzH;AAOQ,UANA,KAAK,cAAiEA,GAAQ,eAAgB,IAC9F,KAAK,kBAAqEA,GAAQ,mBAAoB,IAClG2xD,EAAK,QAAQ,SAAS3xD,EAAQ,OAAO,MACrC,KAAK,UAAU,IAAI2xD,EAAK,QAAQ3xD,EAAQ,OAAO,GAC/C,KAAK,gBAAgBA,EAAQ,UAE7B,CAAC,KAAK,MAAM;AACZ,cAAMsrD,IAAS8C,EAAM,UAAU,MAAM,MAAM,IAAI;AAC/C,YAAI9C,EAAO,SAAS;AAChB,gBAAM,IAAI,MAAM,gEAAgE;AAEpF,YAAIA,EAAO,WAAW,KAAK,CAACA,EAAO,CAAC,EAAE,OAAOqG,EAAK,YAAY,aAAY,CAAE;AACxE,gBAAM,IAAI,MAAM,4EAA4ErG,EAAO,CAAC,EAAE,KAAK,EAAE;AAAA,MAE7H;AACQ,WAAK,UAA6DtrD,GAAQ,WAAY;AACtF,YAAMirD,IAAQ,oBAAI,IAAG;AACrB,eAAS8K,EAAQr3B,GAAM;AACnB,QAAIA,EAAK,aAAa,cAClBusB,EAAM,IAAIvsB,EAAK,KAAK,IAEfA,EAAK,aAAa,UACvBq3B,EAAQr3B,EAAK,OAAO,IAChBA,EAAK,UAAU,aAAa,eAAeA,EAAK,UAAU,UAAU,sDACpEq3B,EAAQr3B,EAAK,SAAS,GAE1Bq3B,EAAQr3B,EAAK,MAAM,GACnBq3B,EAAQr3B,EAAK,KAAK,KAEbA,EAAK,aAAa,aAAaA,EAAK,SAAS,aAAa,eAAe,CAACm3B,EAAuB,SAASn3B,EAAK,SAAS,KAAK,KAClIq3B,EAAQr3B,EAAK,QAAQ;AAAA,MAErC;AACQ,iBAAWhxB,KAAQ;AAAA,QACf,KAAK,MAAM,YAAY,MAAM,MAAM,IAAI;AAAA,QACvC,KAAK,MAAM,cAAc,MAAM,MAAM,IAAI,EAAE,OAAO,CAACiqC,MAAMA,EAAE,aAAa,eAAeA,EAAE,UAAU,iDAAiD;AAAA,QACpJ,KAAK,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,MAClD;AACY,mBAAWh0C,KAAQ+J;AACf,UAAAqoD,EAAQpyD,CAAI;AAGpB,YAAMqyD,IAAW,CAAC,GAAG/K,CAAK;AAC1B,MAAA+K,EAAS,KAAI;AACb,YAAMC,IAAgB,CAAC,GAAG,OAAO,KAAK9zB,CAAQ,GAAG,GAAG,OAAO,KAAKC,CAAe,CAAC;AAChF,MAAI,KAAK,WAEL6zB,EAAc,KAAI;AAEtB,iBAAWruD,KAAOquD,GAAe;AAC7B,cAAMl3B,IAAMoD,EAASv6B,CAAG,KAAKw6B,EAAgBx6B,CAAG;AAChD,QAAI,EAAEm3B,KAAO,KAAK,cAAci3B,EAAS,KAAK,CAACt3B,MAASA,EAAK,WAAWK,CAAG,CAAC,MACxE,KAAK,UAAUA,CAAG,IAAIn3B,GACtB,KAAK,SAASA,CAAG,IAAIm3B;AAAA,MAErC;AACQ,WAAK,SAAS+lB;AAAA,IACtB;AAAA,IACI,QAAQ;AACJ,aAAOgQ,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAEhD,QAAI,KAAK,mBAAmB,OAAO,KAAK,iBAAkB,aACtD,KAAK,OAAO,IAAI,cAAcW,EAAS,WAAW,KAAK,aAAa,CAAC,KAAK,GAC1E,KAAK,OAAO,QAAQ,CAAC;AAGzB,cAAMtzB,IAAW,OAAO,KAAK,KAAK,QAAQ;AAC1C,QAAI,KAAK,WAELA,EAAS,KAAI;AAEjB,mBAAW3G,KAAU2G;AACjB,UAAI,OAAO3G,KAAW,aAClB,KAAK,OAAO,IAAI,WAAWA,CAAM,MAAM,KAAK,SAASA,CAAM,CAAC,KAAK,GACjE,KAAK,OAAO,QAAQ,CAAC;AAG7B,aAAK,OAAO,QAAQ,CAAC,GAYrB,MAAM,KAAK,WAAU,GACrB,KAAK,OAAO,IAAG;AAAA,MAC3B,CAAS;AAAA,IACT;AAAA,IACI,aAAa;AACT,aAAOs5B,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAEhD,cAAMvJ,IAAW,KAAK,MAAM,YAAY,MAAM,MAAM,KAAK,YAAY;AACrE,QAAI,KAAK,WAELA,EAAS,KAAK,CAAC96C,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC;AAE9C,mBAAWiuB,KAAW4sB;AAClB,UAAI5sB,EAAQ,aAAa,gBACrB,MAAM,KAAK,mBAAmBA,CAAO;AAI7C,cAAMu3B,IAAS,KAAK,MAAM,YAAY,MAAM,MAAM,KAAK,YAAY,EAAE,OAAO,CAACnkC,MAAMA,EAAE,aAAa,WAAW;AAC7G,QAAI,KAAK,WAELmkC,EAAO,KAAK,CAACzlD,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC;AAE5C,mBAAWiuB,KAAWu3B;AAClB,UAAIv3B,EAAQ,aAAa,eAClB,CAAC,KAAK,eAAe,IAAIA,EAAQ,KAAK,KAEtC,KAAK,MAAM,SAASA,GAAS,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,KACrE,KAAK,MAAM,SAAS,MAAMA,GAAS,MAAM,KAAK,YAAY,EAAE,WAAW,KACvE,KAAK,MAAM,SAAS,MAAM,MAAMA,GAAS,KAAK,YAAY,EAAE,WAAW,MAC1E,MAAM,KAAK,mBAAmBA,GAAS,EAAI;AAOnD,cAAMw3B,IAAU,KAAK,MAAM,YAAY,MAAM,MAAM,KAAK,YAAY,EAAE,OAAO,CAACpkC,MAAMA,EAAE,aAAa,WAAW;AAC9G,QAAI,KAAK,WAELokC,EAAQ,KAAK,CAAC1lD,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC;AAE7C,mBAAWiuB,KAAWw3B;AAElB,UAAIx3B,EAAQ,aAAa,eAAe,EAAE,KAAK,MAAM,SAAS,MAAM,MAAMA,GAAS,KAAK,YAAY,EAAE,WAAW,KAC1G,CAAC,KAAK,MAAM,SAAS,MAAM,MAAMA,GAAS,KAAK,YAAY,EAAE,CAAC,EAAE,QAAQ,OAAOA,CAAO,OACzF,KAAK,eAAe,IAAIA,EAAQ,KAAK,GACrC,MAAM,KAAK,mBAAmBA,CAAO;AAG7C,cAAMy3B,IAAY,KAAK,MAAM,YAAY,MAAM,MAAM,KAAK,YAAY;AACtE,QAAI,KAAK,WAELA,EAAU,KAAK,CAAC3lD,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC;AAE/C,mBAAWiuB,KAAWy3B;AAElB,UAAI,KAAK,MAAM,SAASz3B,GAAS,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,MACjEA,EAAQ,aAAa,eACrB,KAAK,eAAe,IAAIA,EAAQ,KAAK,GAEzC,MAAM,KAAK,mBAAmBA,CAAO;AAAA,MAGzD,CAAS;AAAA,IACT;AAAA,IACI,iBAAiBD,GAAM;AACnB,aAAOo2B,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,YAAI,KAAK,QAAQ,KAAK,MAAM,SAAS,MAAM,MAAM,MAAMp2B,CAAI,EAAE,WAAW,GAAG;AACvE,gBAAM,EAAE,cAAA23B,EAAY,IAAK;AACzB,sBAAK,eAAe33B,GACpB,KAAK,OAAO,IAAI,GAAG,GACnB,KAAK,OAAO,OAAM,GAClB,KAAK,OAAO,QAAQ,CAAC,GACrB,MAAM,KAAK,WAAU,GACrB,KAAK,OAAO,SAAQ,GACpB,KAAK,OAAO,QAAQ,CAAC,GACrB,KAAK,OAAO,IAAI,GAAG,GACnB,KAAK,eAAe23B,GACb;AAAA,QACvB;AACY,eAAO;AAAA,MACnB,CAAS;AAAA,IACT;AAAA,IACI,mBAAmBC,GAAQ;AACvB,aAAOxB,EAAU,MAAM,WAAW,QAAQ,WAAWp2B,GAAM63B,IAAmB,IAAO;AACjF,SAAI,MAAM,KAAK,iBAAiB73B,CAAI,MAG3B,KAAK,SAAS,MAAM,KAAK,UAAUA,GAAM,EAAI,OAG7C63B,IACL,KAAK,OAAO,IAAI,IAAI,IAGpB,KAAK,OAAO,IAAI,MAAM,KAAK,aAAa73B,CAAI,CAAC,IAEjD,KAAK,OAAO,IAAI,GAAG,GACnB,KAAK,OAAO,OAAM,GAClB,MAAM,KAAK,sBAAsBA,CAAI,GACrC,KAAK,OAAO,SAAQ,GACpB,KAAK,OAAO,IAAI,IAAI,GACpB,KAAK,OAAO,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC;AAAA,MAC7D,CAAS;AAAA,IACT;AAAA,IACI,aAAaA,GAAM;AACf,aAAOo2B,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,YAAIp2B,EAAK,aAAa,aAAa;AAC/B,cAAI,KAAK,QAAQA,EAAK,UAAU;AAC5B,mBAAO;AAEX,cAAI,KAAK,QAAQ,KAAK,eAAeA,EAAK,UAAU;AAChD,mBAAO;AAEX,gBAAM83B,IAAYZ,EAAal3B,EAAK,KAAK;AACzC,cAAI83B,KAAaA,KAAa,KAAK,aAC3BA,KAAa,KAAK;AAClB,mBAAO,GAAG,KAAK,UAAUA,CAAS,CAAC,IAAI93B,EAAK,MAAM,MAAM83B,EAAU,MAAM,CAAC;AAAA,QAGjG;AACY,YAAI93B,EAAK,aAAa,eAAe,KAAK,YAAY;AAClD,iBAAO,QAAQ+2B,EAAS,WAAW,KAAK,QAAQ,WAAW/2B,EAAK,KAAK,CAAC,CAAC;AAE3E,YAAIA,EAAK,aAAa,cAAcA,EAAK,mBAAmB,8CACrDA,EAAK,mBAAmB;AAC3B,iBAAOA,EAAK;AAEhB,YAAIA,EAAK,aAAa,QAAQ;AAC1B,cAAI,CAACA,EAAK,MAAM,OAAOizB,EAAK,YAAY,aAAY,CAAE;AAClD,kBAAM,IAAI,MAAM,wCAAwC;AAE5D,iBAAO,KAAK,MAAM,KAAK,aAAajzB,EAAK,OAAO,CAAC,IAAIA,EAAK,UAAU,aAAa,eAC1EA,EAAK,UAAU,UAAU,oDAC1B,MACA,MAAM,KAAK,aAAaA,EAAK,SAAS,CAAC,IAAI,MAAM,KAAK,aAAaA,EAAK,MAAM,CAAC;AAAA,QACrG;AACY,eAAIA,EAAK,aAAa,aAAa,CAACm3B,EAAuB,SAASn3B,EAAK,SAAS,KAAK,IAC5E,QAAQ+2B,EAAS,iBAAiB/2B,EAAK,KAAK,CAAC,MAAM,MAAM,KAAK,aAAaA,EAAK,QAAQ,CAAC,SAEzF82B,EAAiB,cAAc92B,CAAI;AAAA,MAC1D,CAAS;AAAA,IACT;AAAA,IACI,sBAAsBA,GAAM;AACxB,aAAOo2B,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAMjI,IAAa,KAAK,MAAM,cAAcnuB,GAAM,MAAM,KAAK,YAAY;AACzE,eAAI,KAAK,WAELmuB,EAAW,KAAK,CAACp8C,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC,GAEzC,KAAK,2BAA2BguB,GAAMmuB,CAAU;AAAA,MACnE,CAAS;AAAA,IACT;AAAA,IACI,2BAA2BnuB,GAAMmuB,GAAY;AACzC,aAAOiI,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,YAAI2B,IAAO;AACX,YAAI5J,EAAW,KAAK,CAACjuB,MAAcA,EAAU,OAAO+yB,EAAK,YAAY,UAAU,iDAAiD,CAAC,CAAC,GAAG;AACjI,gBAAMnrB,IAAQ,KAAK,MAAM,eAAe9H,GAAMizB,EAAK,YAAY,UAAU,iDAAiD,GAAG,KAAK,YAAY;AAC9I,UAAI,KAAK,WAELnrB,EAAM,KAAK,CAAC/1B,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC,GAEvC81B,EAAM,SAAS,MACfiwB,IAAO,IACP,KAAK,OAAO,IAAI,IAAI,GACpB,MAAM,KAAK,mBAAmBjwB,CAAK;AAAA,QAEvD;AACY,mBAAW5H,KAAaiuB;AACpB,cAAI,CAACjuB,EAAU,OAAO+yB,EAAK,YAAY,UAAU,iDAAiD,CAAC,GAAG;AAClG,YAAI8E,KACA,KAAK,OAAO,IAAI,IAAI,GACpB,KAAK,OAAO,QAAQ,CAAC,KAGrBA,IAAO,IAEX,KAAK,OAAO,IAAI,MAAM,KAAK,aAAa73B,CAAS,CAAC,GAClD,KAAK,OAAO,IAAI,GAAG;AACnB,kBAAMgwB,IAAU,KAAK,MAAM,eAAelwB,GAAME,GAAW,KAAK,YAAY;AAC5E,YAAI,KAAK,WAELgwB,EAAQ,KAAK,CAACn+C,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC,GAE7C,MAAM,KAAK,mBAAmBk+C,GAASlwB,GAAME,CAAS;AAAA,UAC1E;AAAA,MAEA,CAAS;AAAA,IACT;AAAA,IACI,mBAAmBgwB,GAASjwB,GAASC,GAAW;AAC5C,aAAOk2B,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAM4B,IAAe,CAAA,GACfC,IAAkB,CAAA;AACxB,mBAAW93B,KAAU+vB;AACjB,UAAI/vB,EAAO,aAAa,eACjB;AAAA,YACC,GAAG,KAAK,MAAM,MAAM,MAAM,MAAMA,GAAQ,KAAK,YAAY;AAAA,YACzD,GAAG,KAAK,MAAM,MAAM,MAAMA,GAAQ,MAAM,KAAK,YAAY;AAAA,YAC3D,WAAW,KACV,CAAC,KAAK,eAAe,IAAIA,EAAO,KAAK,IACxC63B,EAAa,KAAK73B,CAAM,KAGpBA,EAAO,aAAa,eACpB,KAAK,eAAe,IAAIA,EAAO,KAAK,GAExC83B,EAAgB,KAAK93B,CAAM;AAGnC,QAAI,KAAK,YAEL63B,EAAa,KAAK,CAACjmD,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC,GAC9CimD,EAAgB,KAAK,CAAClmD,GAAGC,MAAMglD,EAAajlD,GAAGC,CAAC,CAAC;AAErD,YAAIkmD,IAAQ,IACRC,IAAW;AACf,aAAK,OAAO,OAAM;AAClB,mBAAWh4B,KAAU83B,GAAiB;AAWlC,cAVIC,MACA,KAAK,OAAO,IAAI,IAAI,GAChBC,KAEA,KAAK,OAAO,QAAQ,CAAC,IAG7B,KAAK,OAAO,IAAI,MAAM,KAAK,aAAah4B,CAAM,CAAC,GAE/Cg4B,IAAWh4B,EAAO,aAAa,QAC3BF,KAAWC,GAAW;AACtB,kBAAMlB,IAAOi0B,EAAK,YAAY,KAAKhzB,GAASC,GAAWC,CAAM;AAC7D,YAAI,KAAK,MAAM,SAASnB,GAAM,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,MAClE,KAAK,OAAO,IAAI,MAAM,GACtB,MAAM,KAAK,sBAAsBA,CAAI,GACrC,KAAK,OAAO,IAAI,KAAK;AAAA,UAE7C;AACgB,UAAAk5B,IAAQ;AAAA,QACxB;AAMY,YALA,KAAK,OAAO,SAAQ,GAKhBF,EAAa,SAAS;AACtB,qBAAWI,KAASJ;AAsBhB,gBArBIE,IACA,KAAK,OAAO,IAAI,IAAI,IAGpBA,IAAQ,KAER,MAAM,KAAK,iBAAiBE,CAAK,OAG1B,MAAM,KAAK,UAAUA,CAAK,OACjC,KAAK,OAAO,IAAI,GAAG,GACf,KAAK,MAAM,SAASA,GAAO,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,MACnE,KAAK,OAAO,OAAM,GAClB,KAAK,OAAO,QAAQ,CAAC,GACrB,MAAM,KAAK,sBAAsBA,CAAK,GACtC,KAAK,OAAO,SAAQ,GACpB,KAAK,OAAO,QAAQ,CAAC,IAEzB,KAAK,OAAO,IAAI,GAAG,IAGnBn4B,KAAWC,GAAW;AACtB,oBAAMlB,IAAOi0B,EAAK,YAAY,KAAKhzB,GAASC,GAAWk4B,CAAK;AAC5D,cAAI,KAAK,MAAM,SAASp5B,GAAM,MAAM,MAAM,KAAK,YAAY,EAAE,SAAS,MAClE,KAAK,OAAO,IAAI,MAAM,GACtB,MAAM,KAAK,sBAAsBA,CAAI,GACrC,KAAK,OAAO,IAAI,KAAK;AAAA,YAEjD;AAAA;AAAA,MAGA,CAAS;AAAA,IACT;AAAA,IACI,UAAUq5B,GAAU;AAChB,aAAOjC,EAAU,MAAM,WAAW,QAAQ,WAAWj2B,GAAQm4B,IAAY,IAAO;AAC5E,YAAIrzD,IAAOk7B;AACX,cAAMo4B,IAAQ,CAAA,GACRz1B,IAAQ,CAAA;AACd,eAAO,CAAC79B,EAAK,OAAOguD,EAAK,YAAY,UAAU,gDAAgD,CAAC,KAAG;AAC/F,gBAAMhpC,IAAQ,KAAK,MAAM,aAAahlB,GAAMguD,EAAK,YAAY,UAAU,kDAAkD,GAAG,MAAM,KAAK,YAAY,GAC7I7D,IAAO,KAAK,MAAM,aAAanqD,GAAMguD,EAAK,YAAY,UAAU,iDAAiD,GAAG,MAAM,KAAK,YAAY;AAEjJ,cADAnwB,EAAM,KAAK,GAAG7Y,GAAO,GAAGmlC,CAAI,GACxBnlC,EAAM,WAAW,KACdmlC,EAAK,WAAW,KACf,KAAK,MAAM,SAASnqD,GAAM,MAAM,MAAM,KAAK,YAAY,EAAE,WAAW,KAAK,CAACqzD;AAC9E,wBAAK,MAAM,SAASx1B,CAAK,GAClB;AAEX,UAAAy1B,EAAM,KAAKtuC,EAAM,CAAC,EAAE,MAAM,GAC1BhlB,IAAOmqD,EAAK,CAAC,EAAE,QAEfkJ,IAAY;AAAA,QAC5B;AACY,YAAIE,IAAQ;AACZ,aAAK,OAAO,IAAI,GAAG;AACnB,mBAAW5oC,KAAQ2oC;AACf,UAAIC,IACA,KAAK,OAAO,IAAI,GAAG,IAGnBA,IAAQ,IAEZ,MAAM,KAAK,mBAAmB,CAAC5oC,CAAI,CAAC;AAExC,oBAAK,OAAO,IAAI,GAAG,GACZ;AAAA,MACnB,CAAS;AAAA,IACT;AAAA,EACA;AACA,SAAAinC,GAAA,YAAoBO;;;;;UC3dpB,OAAO,eAAehR,IAAS,cAAc,EAAE,OAAO,IAAM;AAAA,EAI5D,MAAMmM,EAAO;AAAA,IACT,YAAYjxD,GAAS;AACjB,WAAK,UAAU,GACf,KAAK,UAAU,IACf,KAAK,QAAQA,EAAQ,OACrB,KAAK,MAAMA,EAAQ,KACnB,KAAK,UAAUA,EAAQ,WAAW;AAAA,IAC1C;AAAA,IACI,SAAS;AACL,kBAAK,WAAW,GACT;AAAA,IACf;AAAA,IACI,WAAW;AACP,kBAAK,WAAW,GACT;AAAA,IACf;AAAA,IACI,IAAI+xB,GAAG;AACH,kBAAK,MAAMA,GAAG,OAAO,GACd;AAAA,IACf;AAAA,IACI,QAAQolC,GAAI;AACR,aAAK,KAAK,WACN,KAAK,MAAM;AAAA,EAAK,OAAOA,CAAE,IAAI,KAAK,OAAO,KAAK,OAAO,GAAG,OAAO,GAE5D;AAAA,IACf;AAAA,EACA;AACA,SAAArS,GAAA,UAAkBmM;;;;;;AC/BlB,MAAI6D,IAAa/B,MAAQA,GAAK,aAAc,SAAUgC,GAASC,GAAYC,GAAGC,GAAW;AACrF,aAASC,EAAMv1D,GAAO;AAAE,aAAOA,aAAiBq1D,IAAIr1D,IAAQ,IAAIq1D,EAAE,SAAUp9C,GAAS;AAAE,QAAAA,EAAQjY,CAAK;AAAA,MAAE,CAAE;AAAA,IAAE;AAC1G,WAAO,KAAKq1D,MAAMA,IAAI,UAAU,SAAUp9C,GAASmxB,GAAQ;AACvD,eAASosB,EAAUx1D,GAAO;AAAE,YAAI;AAAE,UAAAy1D,EAAKH,EAAU,KAAKt1D,CAAK,CAAC;AAAA,QAAE,SAAUqB,GAAG;AAAE,UAAA+nC,EAAO/nC,CAAC;AAAA,QAAE;AAAA,MAAE;AACzF,eAASq0D,EAAS11D,GAAO;AAAE,YAAI;AAAE,UAAAy1D,EAAKH,EAAU,MAASt1D,CAAK,CAAC;AAAA,QAAE,SAAUqB,GAAG;AAAE,UAAA+nC,EAAO/nC,CAAC;AAAA,QAAE;AAAA,MAAE;AAC5F,eAASo0D,EAAKn+C,GAAQ;AAAE,QAAAA,EAAO,OAAOW,EAAQX,EAAO,KAAK,IAAIi+C,EAAMj+C,EAAO,KAAK,EAAE,KAAKk+C,GAAWE,CAAQ;AAAA,MAAE;AAC5G,MAAAD,GAAMH,IAAYA,EAAU,MAAMH,GAASC,KAAc,CAAA,CAAE,GAAG,MAAM;AAAA,IAC5E,CAAK;AAAA,EACL,GACIoC,IAAmBrE,MAAQA,GAAK,mBAAoB,SAAUsE,GAAK;AACnE,WAAQA,KAAOA,EAAI,aAAcA,IAAM,EAAE,SAAWA,EAAG;AAAA,EAC3D;AACA,SAAO,eAAeC,IAAS,cAAc,EAAE,OAAO,IAAM,GAC5DA,GAAA,QAAgBj0D;AAChB,QAAMk0D,IAAmBH,EAAgBjlC,IAA2B,GAC9DqlC,IAAcplC,GAAA,GACdqlC,IAAWL,EAAgB3tB,IAAmB;AACpD,WAASpmC,EAAMm+B,GAAOxhC,GAAS;AAC3B,WAAO80D,EAAU,MAAM,QAAQ,QAAQ,aAAa;AAEhD,aAAO,IAAI,QAAQ,CAACj9C,GAASmxB,MAAW8rB,EAAU,MAAM,QAAQ,QAAQ,aAAa;AACjF,YAAI;AACA,cAAI/iC,IAAI;AACR,gBAAM2/B,IAAgB,IAAI6F,EAAiB,QAAQ/1B,CAAK,GAClD4G,IAAI,IAAIqvB,EAAS,QAAQ;AAAA,YAC3B,OAAO,CAACvzB,MAAU;AACd,cAAAnS,KAAKmS;AAAA,YAC7B;AAAA,YACoB,KAAK,MAAM;AACP,cAAArsB,EAAQka,CAAC;AAAA,YACjC;AAAA,YACoB,SAA2D/xB,GAAQ;AAAA,UACvF,CAAiB;AAED,gBADe,IAAIw3D,EAAY,UAAU9F,GAAetpB,GAAqDpoC,GAAQ,UAAUA,CAAO,EACzH,MAAK;AAAA,QAClC,SACmBiB,GAAG;AACN,UAAA+nC,EAAO/nC,CAAC;AAAA,QACxB;AAAA,MACA,CAAS,CAAC;AAAA,IACV,CAAK;AAAA,EACL;;;;ACtBO,MAAMy2D,KAAU,IACVC,KAAUD,KAAU,GAE3BE,KAAc,MACdC,KAAc,KAAKD,IAEnBE,KAAkB,IAClBC,KAAiB,GACjBC,KAAkB,IAIlBC,yBAAiD,IAAI;AAAA,EACvD,CAAC,MAAM,CAAC;AAAA,EACR,CAAC,MAAMD,EAAe;AAAA,EACtB,CAAC,MAAMA,KAAkBJ,EAAW;AAAA,EACpC,CAAC,MAAMI,KAAkBH,EAAW;AAAA,EACpC,CAAC,MAAMG,KAAkBF,EAAe;AAAA,EACxC,CAAC,MAAME,KAAkBD,EAAc;AAAA,EACvC,CAAC,KAAK,IAAI;AAAA;AAAA,EACV,CAAC,MAAML,EAAO;AAAA;AAAA,EACd,CAAC,MAAMC,EAAO;AAAA;AACjB,CAAA,GAEKO,KAAmB;AAEnB,SAAUC,GAAetlC,GAA8B;AACzD,MAAI,OAAOA,KAAW;AAClB,WAAOA;AAEX,QAAM4I,IAAQ5I,EAAO,MAAMqlC,EAAgB;AAC3C,MAAIz8B,MAAU,QAAQA,EAAM,SAAS;AACjC,WAAO,CAAC5I;AACL;AAEH,UAAMulC,IAAUH,GAAe,IAAIx8B,EAAM,CAAC,CAAC;AAC3C,QAAI28B,KAAY;AAEZ,aAAOA,IAAU,CAAC38B,EAAM,CAAC;AAAA,EAEjC;AACA,SAAO;AACX;ACnCO,MAAM48B,KAAU;AA8CjB,SAAUC,GAAWC,GAA8B;AACrD,SAAOA,EACF,aAAa,SAAS,GACrB,MAAM,GAAG,EACV,IAAI,CAACpjC,MAAM,CAACA,CAAC;AACtB;AAcA,SAASqjC,GAAel0D,GAAsB;AAC1C,QAAMk0D,IAA2B,CAAA;AACjC,aAAW,CAAC5wD,GAAKhI,CAAK,KAAK,OAAO,QAAQ0E,CAAU;AAChDk0D,IAAAA,EAAe,KAAK,IAAI5wD,CAAG,KAAKhI,CAAK,GAAG;AAE5C,SAAO44D,EAAe,KAAK,EAAE;AACjC;AAIA,SAASC,GAAoBzmC,GAAc2jB,GAAWrxC,GAAsB;AACxE,SAAO,OAAO,OAAO,CAAA,GAAIA,GAAY;AAAA,IACjC,IAAI,GAAG0tB,EAAE,CAAC;AAAA,IACV,IAAI,GAAGA,EAAE,CAAC;AAAA,IACV,GAAG,GAAG2jB,CAAC;AAAA,EAAA,CACV;AACL;AAEM,SAAU+iB,GAAUC,GAAmBC,GAAgBt0D,IAAyB,CAAA,GAAE;AACpF,SAAO,UAAUk0D,GAAeC,GAAoBE,GAAQC,GAAQt0D,CAAU,CAAC,CAAC;AACpF;AAyBA,SAASu0D,GAAkBC,GAAeC,GAAez0D,GAAsB;AAC3E,SAAO,OAAO,OAAO,CAAA,GAAIA,GAAY;AAAA,IACjC,GAAG,GAAG,KAAK,IAAIw0D,EAAG,GAAGC,EAAG,CAAC,CAAC;AAAA,IAC1B,GAAG,GAAG,KAAK,IAAID,EAAG,GAAGC,EAAG,CAAC,CAAC;AAAA,IAC1B,OAAO,GAAG,KAAK,IAAIA,EAAG,IAAID,EAAG,CAAC,CAAC;AAAA,IAC/B,QAAQ,GAAG,KAAK,IAAIC,EAAG,IAAID,EAAG,CAAC,CAAC;AAAA,EAAA,CACnC;AACL;AAEM,SAAUE,GAAQC,GAAoBC,GAAwB50D,IAAyB,CAAA,GAAE;AAC3F,SAAO,QAAQk0D,GAAeK,GAAkBI,GAASC,GAAa50D,CAAU,CAAC,CAAC;AACtF;AC1HO,MAAM60D,KAAa,wCAEbC,KAAS,4CACTC,KAAU,sDACVC,KAAU,yBAEVC,KAAU,iCAEVC,KAAU,6BACVC,KAAU,kCACVC,KAAU,+CACVC,KAAW,yCACXC,KAAU,qCAIVC,KAAsB;AAAA,EAC/B,QAAQV;AAAA;AAAA,EAGR,IAAIC;AAAA,EACJ,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,KAAKC;GAGIO,KAAmB;AAAA,EAC5B,SAASN;AAAA,EACT,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,KAAK,GAAGtB,EAAO;AAAA,EACf,KAAKuB;GAGHG,KAAqB,OAAO,OAAO,CAAA,GAAIF,IAAqBC,EAAgB;AAEnD,OAAO,QAAQC,EAAkB,EAAE,IAC9B,CAACC,MAAc,UAAUA,EAAU,CAAC,CAAC,MAAMA,EAAU,CAAC,CAAC,GAAG,EAAE,KAAK;AAAA,CAAI;MAM5FC,GAAS;AAAA,EAClBC;AAAA,EAEA,YAAYC,GAAa;AACrB,SAAKD,KAASC;AAAA,EAClB;AAAA,EAEA,IAAIC,GAAU;AACV,WAAO/8B,GAAU,KAAK68B,MAAUE,KAAM,GAAG;AAAA,EAC7C;AACH;AAIM,MAAMC,KAAS,IAAIJ,GAAUd,EAAU,GASjC7+B,KAAM,IAAI2/B,GAAUP,EAAO;AA8BV,IAAI,IAAI,OAAO,QAAQK,EAAkB,CAAC;MC5ElDO,GAAS;AAAA,EA0C3B,gCAAgC37B,GAAsB47B,GAAiC;AACnF,UAAMC,IAA0B,CAAA;AAChC,eAAW,CAAC57B,GAAWh/B,CAAK,KAAK26D,EAAW;AACxC,MAAAC,EAAW,KAAK,GAAG,KAAKC,GAAuB97B,GAASC,GAAWh/B,CAAK,CAAC;AAE7E,WAAO46D;AAAA,EACX;AAAA,EAEAC,GAAuB97B,GAAsBC,GAA0Bh/B,GAA4B;AAC/F,UAAM46D,IAA0B,CAAA;AAChC,QAAI14B,GAAUliC,CAAK,KAAKgiC,GAAYhiC,CAAK;AAErC,MAAA46D,EAAW,KAAK,KAAK,IAAI77B,GAASC,GAAWh/B,CAAK,CAAC;AAAA,aAC5CA,aAAiB86D,IAAuB;AAC/C,YAAM/2D,IAAO25B,GAAA;AACb,MAAAk9B,EAAW,KAAK,KAAK,IAAI77B,GAASC,GAAWj7B,GAAM,IAAI,CAAC,GACxD62D,EAAW,KAAK,GAAG,KAAK,gCAAgC72D,GAAM/D,CAAK,CAAC;AAAA,IACxE,WAAW,MAAM,QAAQA,CAAK,KAAKA,EAAM,SAAS,GAAG;AACjD,YAAM+D,IAAO25B,GAAA;AACb,MAAAk9B,EAAW,KAAK,KAAK,IAAI77B,GAASC,GAAWj7B,GAAM,IAAI,CAAC,GACxD,KAAKg3D,GAAqBh3D,GAAM/D,CAAK;AAAA,IACzC,WAAWA,aAAiB;AACxB,iBAAWyH,KAAKzH,EAAM;AAClB,QAAA46D,EAAW,KAAK,GAAG,KAAKC,GAAuB97B,GAASC,GAAWv3B,CAAC,CAAC;AAG7E,WAAOmzD;AAAA,EACX;AAAA,EAEA,iBAAiBA,GAAuB;AACpC,IAAAA,EAAW,QAAQ,CAACzoC,MAAK;AACrB,WAAK,IAAIA,EAAE,SAASA,EAAE,WAAWA,EAAE,QAAQ,IAAI;AAAA,IACnD,CAAC;AAAA,EACL;AAAA,EAEA,uBAAuB6oC,GAAiC;AACpD,UAAMC,IAAW,IAAIH,GAAA;AACrB,eAAWI,KAAkBF,GAAiB;AAC1C,YAAMh7D,IAAQ,KAAKm7D,GAAeD,EAAe,MAAM;AACvD,MAAIl7D,KACAi7D,EAAS,YAAYC,EAAe,WAAWl7D,GAAO,EAAI;AAAA,IAElE;AACA,WAAOi7D;AAAA,EACX;AAAA,EAEA,6BAA6Bl8B,GAAoB;AAC7C,UAAMi8B,IAAkB,KAAK,mBAAmBj8B,GAAS,MAAM,MAAM,IAAI;AACzE,WAAO,KAAK,uBAAuBi8B,CAAe;AAAA,EACtD;AAAA,EAEA,oBAAoBJ,GAAuB;AACvC,IAAAA,EAAW,QAAQ,CAACzoC,MAAK;AACrB,WAAK,iBAAiBA,EAAE,SAASA,EAAE,WAAWA,EAAE,QAAQ,IAAI;AAAA,IAChE,CAAC;AAAA,EACL;AAAA,EAEAgpC,GAAen7D,GAAiB;AAC5B,WAAIkiC,GAAUliC,CAAK,KAAKgiC,GAAYhiC,CAAK,IAE9BA,IACAiiC,GAAYjiC,CAAK,IAEpB,KAAK,SAASA,GAAO06B,GAAI,IAAI,MAAM,GAAG,IAAI,IAEnC,KAAK0gC,GAAoBp7D,CAAK,IAG9B,KAAK,6BAA6BA,CAAK,IAG/C;AAAA,EACX;AAAA,EAEAo7D,GAAoBr8B,GAAoB;AAEpC,UAAMznB,IAAkC,CAAA,GAClCkM,IAAQ,CAACub,EAAQ,KAAK;AAC5B,QAAI14B,IAAO04B;AACX,WAAO14B,KAAQ,CAACA,EAAK,OAAOq0B,GAAI,IAAI,KAAK,CAAC,KAAG;AACzC,YAAM2gC,IAAW,KAAK,mBAAmBh1D,GAAMq0B,GAAI,IAAI,OAAO,GAAG,MAAM,IAAI;AAC3E,UAAI2gC,EAAS,WAAW,KAAKA,EAAS,CAAC,MAAM;AAAW;AACxD,YAAMr7D,IAAQ,KAAKm7D,GAAeE,EAAS,CAAC,EAAE,MAAM;AACpD,UAAI,CAACr7D;AAAO;AACZ,MAAAsX,EAAO,KAAKtX,CAAK;AACjB,YAAMs7D,IAAW,KAAK,mBAAmBj1D,GAAMq0B,GAAI,IAAI,MAAM,GAAG,MAAM,IAAI;AAG1E,UAFI4gC,EAAS,WAAW,KAAKA,EAAS,CAAC,MAAM,WAC7Cj1D,IAAOi1D,EAAS,CAAC,EAAE,QACf93C,EAAM,SAASnd,EAAK,KAAK;AACzB;AAEJ,MAAAmd,EAAM,KAAKnd,EAAK,KAAK;AAAA,IACzB;AACA,WAAOiR;AAAA,EACX;AAAA,EAEAyjD,GAAqBh8B,GAAsBkqB,GAA+B;AACtE,UAAM2R,IAA0B,CAAA;AAChC,QAAIxiD,IAAU2mB;AACd,WAAAkqB,EAAO,QAAQ,CAACjpD,GAAOuZ,MAAS;AAE5B,UADAqhD,EAAW,KAAK,GAAG,KAAKC,GAAuBziD,GAASsiB,GAAI,IAAI,OAAO,GAAG16B,CAAK,CAAC,GAC5EuZ,IAAQ0vC,EAAO,SAAS,GAAG;AAC3B,cAAM5iD,IAAOq3B,GAAA;AACb,QAAAk9B,EAAW,KAAK,KAAK,IAAIxiD,GAASsiB,GAAI,IAAI,MAAM,GAAGr0B,GAAM,IAAI,CAAC,GAC9D+R,IAAU/R;AAAA,MACd;AAAA,IACJ,CAAC,GACDu0D,EAAW,KAAK,KAAK,IAAIxiD,GAASsiB,GAAI,IAAI,MAAM,GAAGA,GAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GACjEkgC;AAAA,EACX;AACH;AC7JK,SAAUl9B,GAAU19B,IAAwB,QAAS;AACvD,SAAO,WAAW,SAAS,UAAUA,CAAK;AAC9C;AAEM,SAAUiiC,GAAYnD,GAAa;AAErC,SAAO,CAAC,CAACA,EAAK,YAAYA,EAAK,aAAa;AAChD;AAUM,SAAUoD,GAAUpD,GAAa;AAEnC,SAAO,CAAC,CAACA,EAAK,YAAYA,EAAK,aAAa;AAChD;AASA,SAASy8B,GAAcz8B,GAAU;AAC7B,SAAIkD,GAAYlD,CAAI,MACfA,EAAmB,MAAMA,EAAK,OAC9BA,EAAmB,KAAK,MAAK;AAC1B,QAAIxN,IAAQwN,EAAK,MAAM,MAAM,GAAG;AAChC,WAAIxN,EAAM,SAAS,MACfA,IAAQwN,EAAK,MAAM,MAAM,GAAG,IAGzBxN,EAAM,SAAS,IAAIA,EAAM,GAAG,EAAE,IAAK;AAAA,EAC9C,IACOwN;AAGf;AAEM,SAAUrB,GAAUz9B,GAAa;AACnC,SAAOu7D,GAAc,WAAW,SAAS,UAAUv7D,CAAK,CAAC;AAC7D;AAEM,SAAUgiC,GAAYlD,GAAa;AAErC,SAAO,CAAC,CAACA,EAAK,YAAYA,EAAK,aAAa;AAChD;AAcA,SAAS08B,GAAc19B,GAAU;AAC7B,SAAO;AAAA,IACH,OAAOy9B,GAAcz9B,EAAK,KAAK;AAAA,IAC/B,QAAQy9B,GAAcz9B,EAAK,MAAM;AAAA,IACjC,WAAWy9B,GAAcz9B,EAAK,SAAS;AAAA,IACvC,SAASy9B,GAAcz9B,EAAK,OAAO;AAAA,IACnC,UAAUA,EAAK;AAAA,IACf,OAAOA,EAAK;AAAA,EAAA;AAEpB;AAMO,MAAM29B,KAAiC;AASxC,MAAOC,WAAiBhB,GAAS;AAAA,EACnCiB;AAAA,EAEA,cAAA;AACI,UAAA,GACA,KAAKA,KAAY,IAAI,WAAW,SAAS,MAAA;AAAA,EAC7C;AAAA,EAEA,WAAWz8B,IAA0B,MAAI;AACrC,WAAO,KAAK,mBAAmB,MAAM,MAAM,MAAMA,CAAK;AAAA,EAC1D;AAAA,EAEA,IAAI/M,GAAgB4lB,GAAkBuT,GAAeC,IAAsB,MAAI;AAC3E,UAAMqQ,IAAY,WAAW,SAAS,KAAKzpC,GAAG4lB,GAAGuT,GAAGC,KAAK,WAAW,SAAS,aAAA,CAAc;AAC3F,gBAAKoQ,GAAU,IAAIC,CAAS,GACrBJ,GAAcI,CAAS;AAAA,EAClC;AAAA,EAEA,SACIzpC,IAAwB,MACxB4lB,IAA0B,MAC1BuT,IAAuB,MACvBC,IAAsB,MAAI;AAE1B,WAAO,KAAKoQ,GAAU,MAAMxpC,GAAG4lB,GAAGuT,GAAGC,KAAK,WAAW,SAAS,aAAA,CAAc,EAAE,SAAS;AAAA,EAC3F;AAAA,EAEA,KAAKsQ,IAAqB,MAAMx+B,GAAay+B,IAAyBL,IAAmBv8B,IAAsB,MAAI;AAC/G,QAAI;AACA,WAAKy8B,GAAU,KAAKt+B,GAAK;AAAA,QACrB,QAAQy+B;AAAA,QACR,UAAUD,KAAW;AAAA,QACrB,eAAe38B,KAAS,WAAW,SAAS,aAAA;AAAA,MAAY,CAC3D;AAAA,IACL,SAAS/B,GAAO;AACZ,YAAM,IAAI,MAAM,sBAA8BA,EAAO,OAAO,EAAE;AAAA,IAClE;AAAA,EACJ;AAAA,EAEA,iBACIhL,IAAwB,MACxB4lB,IAA0B,MAC1BuT,IAAuB,MACvBC,IAAsB,MAAI;AAE1B,UAAMqP,IAAa,KAAKe,GAAU,MAAMxpC,GAAG4lB,GAAGuT,GAAGC,KAAK,WAAW,SAAS,aAAA,CAAc;AACxF,eAAWqQ,KAAahB;AACpB,WAAKe,GAAU,OAAOC,CAAS;AAAA,EAEvC;AAAA,EAEA,MAAM,UACFC,GACAC,IAA2BL,IAC3B5gC,IAAqC,CAAA,GACrCqE,IAA0B,MAAI;AAE9B,QAAI48B,MAAgBL,IAAmB;AACnC,YAAM75B,IAAQ,KAAK+5B,GAAU,MAAM,MAAM,MAAM,MAAMz8B,KAAS,WAAW,SAAS,aAAA,CAAc;AAShG,cARe,MAAM68B,GAAAA,MAAan6B,GAAO;AAAA,QACrC,QAAQ;AAAA,QACR,UAAU,OAAO,OAAO,EAAE,IAAI,GAAGi6B,CAAO,IAAA,GAAO3B,IAAkBr/B,CAAU;AAAA,QAC3E,SAAAghC;AAAA,QACA,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACZ,GACa,WAAWA,GAAS,EAAE;AAAA,IACxC;AACI,aAAO,KAAKF,GAAU,KAAK;AAAA,QACvB,QAAQG;AAAA,QACR,iBAAiB58B,KAAS,WAAW,SAAS,aAAA;AAAA,MAAY,CAC7D;AAAA,EAET;AAAA,EAEA,MAAM88B,GAAgBC,IAAsB,IAAK;AAC7C,QAAI;AACA,YAAM3O,IAAU,KAAKqO,GAAU,MAAMK,GAAQ;AAAA,QACzC,4BAA4BC;AAAA,MAAA,CAC/B;AACD,iBAAW3kD,KAAUg2C;AACjB,mBAAWxuB,KAAQxnB,EAAO;AACtB,UAAAikD,GAAcz8B,CAAI;AAG1B,aAAOwuB;AAAA,IACX,SAASnwB,GAAO;AACZ,cAAQ,IAAI,+BAAuCA,EAAO,OAAO,IAAI6+B,CAAM,EAAE;AAC7E,UAAIE,IAAQ;AACZ,iBAAWC,KAAoBh/B,EAAO,MAAO,MAAM;AAAA,CAAI;AACnD,QAAI++B,IACAA,IAAQC,EAAS,QAAQ,gBAAgB,IAAI,IAE7C,QAAQ,IAAIA,CAAQ;AAAA,IAGhC;AACA,WAAO,CAAA;AAAA,EACX;AAAA,EAEA,mBACIhqC,IAAwB,MACxB4lB,IAA0B,MAC1BuT,IAAuB,MACvBC,IAAsB,MAAI;AAG1B,WAD2B,KAAKoQ,GAAU,MAAMxpC,GAAG4lB,GAAGuT,GAAGC,KAAK,WAAW,SAAS,aAAA,CAAc,EAC9E,IAAI,CAACp5B,MAAMqpC,GAAcrpC,CAAC,CAAC;AAAA,EACjD;AAAA,EAEA,eAAeiqC,GAAqB;AAChC,WAAO,KAAK,MACR;AAAA;AAAA;AAAA;AAAA,oCAIwBA,EAAW,GAAG;AAAA;AAAA,kBAGtC,EAAI,EACN,IAAI,CAACrmB,MAAM;AAAA,MAACA,EAAE,IAAI,GAAG;AAAA,MACTA,EAAE,IAAI,GAAG;AAAA,IAAA,CAAe;AAAA,EAC1C;AAAA,EAEA,OAAOimB,GAAc;AACjB,QAAI;AACA,WAAKL,GAAU,OAAOK,CAAM;AAAA,IAChC,SAAS7+B,GAAO;AACZ,cAAQ,IAAI,gCAAwCA,EAAO,OAAO,IAAI6+B,CAAM,EAAE;AAC9E,UAAIE,IAAQ;AACZ,iBAAWC,KAAoBh/B,EAAO,MAAO,MAAM;AAAA,CAAI;AACnD,QAAI++B,IACAA,IAAQC,EAAS,QAAQ,iBAAiB,IAAI,IAE9C,QAAQ,IAAIA,CAAQ;AAAA,IAGhC;AAAA,EACJ;AACH;AC5LK,MAAOrB,WAA8B,IAAkC;AAAA,EACzEuB,yBAA6B,IAAA;AAAA,EAE7B,OAAO,eAAe1B,GAA8B;AAChD,WAAOA,EAAW,OAAO,CAACM,GAAUtyC,OAChCsyC,EAAS,YAAYtyC,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAC,GAC9BsyC,IACR,IAAIH,IAAuB;AAAA,EAClC;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKuB;AAAA,EAChB;AAAA,EAEA,OAAI;AACA,UAAMpB,IAAW,IAAIH,GAAA;AACrB,eAAW,CAAC9yD,GAAKhI,CAAK,KAAK,KAAK;AAC5B,MAAAi7D,EAAS,IAAIjzD,GAAK,KAAKs0D,GAAWt8D,CAAK,CAAC;AAE5C,WAAAi7D,EAASoB,KAAY,IAAI,IAAI,KAAKA,GAAU,QAAQ,GAC7CpB;AAAA,EACX;AAAA,EAEAqB,GAAWt8D,GAA4B;AACnC,WAAIkiC,GAAUliC,CAAK,KAAKgiC,GAAYhiC,CAAK,IAC9BA,IACAA,aAAiB86D,KACjB96D,EAAM,KAAA,IACN,MAAM,QAAQA,CAAK,IACnBA,EAAM,IAAI,CAACyH,MAAM,KAAK60D,GAAW70D,CAAC,CAAC,IAGnC,IAAI,IAAI,CAAC,GAAGzH,EAAM,OAAA,CAAQ,EAAE,IAAI,CAACyH,MAAM,KAAK60D,GAAW70D,CAAC,CAAC,CAAC;AAAA,EAEzE;AAAA,EAEA,YAAYu3B,GAAwB;AAChC,WAAO,KAAK,IAAIA,EAAU,KAAK,KAAK;AAAA,EACxC;AAAA,EAEA,mBAAmBA,GAAwB;AACvC,UAAMh/B,IAAQ,KAAK,YAAYg/B,CAAS;AACxC,WAAKh/B,IACDkiC,GAAUliC,CAAK,KAAKgiC,GAAYhiC,CAAK,KAAKA,aAAiB86D,KACpD,CAAC96D,CAAK,IACN,MAAM,QAAQA,CAAK,IACnBA,IAGA,CAAC,GAAGA,EAAM,QAAQ,IAPV,CAAA;AAAA,EASvB;AAAA,EAEA,IAAIwa,GAAe;AACf,WAAO,KAAK6hD,GAAU,IAAI7hD,EAAK,GAAG;AAAA,EACtC;AAAA,EAEA,CAAC,kBAAe;AACZ,eAAW,CAACu9B,GAAG/3C,CAAK,KAAK,MAAM;AAC3B,YAAM,CAACy9B,GAAUsa,CAAC,GAAG/3C,CAAK;AAAA,EAElC;AAAA,EAEA,YAAYg/B,GAA0Bh/B,GAA8Bu8D,IAAc,IAAK;AACnF,IAAIv9B,EAAU,OAAOtE,GAAI,IAAI,MAAM,CAAC,KAAKsH,GAAYhiC,CAAK,KAEtD,KAAKq8D,GAAU,IAAIr8D,EAAM,GAAG;AAGhC,UAAM+E,IAAWi6B,EAAU;AAC3B,QAAIu9B,KAAe,KAAK,IAAIx3D,CAAQ,GAAG;AACnC,YAAMkkD,IAAS,KAAK,IAAIlkD,CAAQ;AAChC,UAAIkkD,aAAkB,KAAK;AACvB,YAAIuT,IAAQ;AACZ,YAAIt6B,GAAUliC,CAAK,KAAKgiC,GAAYhiC,CAAK;AACrC,qBAAWyH,KAAKwhD;AAEZ,gBAAIjpD,EAAM,OAAOyH,CAAC,GAAG;AACjB,cAAA+0D,IAAQ;AACR;AAAA,YACJ;AAAA;AAGR,QAAKA,KACDvT,EAAO,IAAIjpD,CAAK;AAAA,MAExB,OAAWipD,KAEH,EAAE/mB,GAAU+mB,CAAM,KAAKjnB,GAAYinB,CAAM,MAAM,CAACA,EAAO,OAAOjpD,CAAK,MACnE,KAAK,IAAI+E,GAAU,oBAAI,IAA2B,CAACkkD,GAAQjpD,CAAK,CAAC,CAAC,IAGtE,KAAK,IAAI+E,GAAU,oBAAI,IAA2B,CAAC/E,CAAK,CAAC,CAAC;AAAA,IAElE;AACI,WAAK,IAAI+E,GAAU/E,CAAK;AAAA,EAEhC;AACH;ACtJM,MAAMy8D,KAAgB,MAChBC,KAAwBD,KAAgBA;MAIxCE,GAAK;AAAA,EAED;AAAA,EACA;AAAA,EAFb,YACa/yD,IAAY,GACZC,IAAY,GAAC;AADb,SAAA,IAAAD,GACA,KAAA,IAAAC;AAAA,EACV;AAAA,EAEH,OAAO,UAAU+yD,GAAgB;AAC7B,WAAO,IAAID,GAAMC,EAAM,GAAGA,EAAM,CAAC;AAAA,EACrC;AAAA,EAEA,OAAO,UAAUC,GAAkB;AAC/B,WAAO,IAAIF,GAAME,EAAO,CAAC,GAAGA,EAAO,CAAC,CAAC;AAAA,EACzC;AAAA,EAEA,UAAO;AACH,WAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAAA,EAC1B;AAAA,EAEA,IAAID,GAAgB;AAChB,WAAOD,GAAM,UAAUG,GAAU,IAAI,MAAMF,CAAK,CAAC;AAAA,EACrD;AAAA,EAEA,SAASvO,GAAeC,GAAeyO,IAAmB,IAAK;AAC3D,WAAOD,GAAU,SAAS,MAAMzO,GAAIC,GAAIyO,CAAO;AAAA,EACnD;AAAA,EAEA,OAAI;AACA,WAAO,IAAIJ,GAAM,KAAK,GAAG,KAAK,CAAC;AAAA,EACnC;AAAA,EAEA,SAASC,GAAgB;AACrB,WAAOE,GAAU,SAAS,MAAMF,CAAK;AAAA,EACzC;AAAA,EAEA,OAAOA,GAAgB;AACnB,WAAOE,GAAU,OAAO,MAAMF,CAAK;AAAA,EACvC;AAAA,EAEA,SAAM;AACF,WAAOE,GAAU,OAAO,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM76D,GAAyB;AAC3B,WAAO06D,GAAM,UAAUG,GAAU,MAAM,MAAM76D,CAAE,CAAC;AAAA,EACpD;AAAA,EAEA,YAAY+6D,GAAa;AACrB,WAAOL,GAAM,UAAUG,GAAU,YAAY,MAAME,CAAK,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAMA,GAAgB;AAClB,WAAOL,GAAM,UAAUG,GAAU,MAAM,MAAME,CAAK,CAAC;AAAA,EACvD;AAAA,EAEA,SAASJ,GAAgB;AACrB,WAAOD,GAAM,UAAUG,GAAU,SAAS,MAAMF,CAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,WAAQ;AACJ,WAAO,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,EAChC;AACH;MAKYE,GAAS;AAAA,EAClB,OAAO,IAAIzO,GAAeC,GAAa;AACnC,WAAO,IAAIqO,GAAMtO,EAAG,IAAIC,EAAG,GAAGD,EAAG,IAAIC,EAAG,CAAC;AAAA,EAC7C;AAAA,EAEA,OAAO,MAAMD,GAAepsD,GAA8B;AACtD,WAAO,IAAI06D,GAAM16D,EAAGosD,EAAG,CAAC,GAAGpsD,EAAGosD,EAAG,CAAC,CAAC;AAAA,EACvC;AAAA,EAEA,OAAO,SAAS4O,GAAe5O,GAAeC,GAAeyO,IAAmB,IAAK;AACjF,UAAMG,IAAKJ,GAAU,SAASG,GAAI5O,CAAE,GAC9B8O,IAAKL,GAAU,SAASzO,GAAIC,CAAE,GAC9B8O,IAAKN,GAAU,SAASG,GAAI3O,CAAE;AACpC,WAAI8O,IAAKF,KAAME,IAAKD,IACTD,IAAKC,IAAKC,KAAM,IAAIX,MACpBM,IACA,KACAI,IAAKD,KAAMC,IAAKC,IAChBF,IAAKE,IAAKD,KAAM,IAAIV,MAEpBU,IAAKC,IAAKF,KAAM,IAAIT;AAAA,EAEnC;AAAA,EAEA,OAAO,SAASpO,GAAeC,GAAa;AACxC,WAAO,KAAK,MAAMD,EAAG,IAAIC,EAAG,MAAM,KAAKD,EAAG,IAAIC,EAAG,MAAM,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAO,OAAOD,GAAeC,GAAa;AACtC,YAAQD,EAAG,IAAIC,EAAG,MAAM,KAAKD,EAAG,IAAIC,EAAG,MAAM,KAAKoO;AAAA,EACtD;AAAA,EAEA,OAAO,OAAO5W,GAAa;AACvB,WAAOA,EAAG,KAAK,IAAIA,EAAG,KAAK,KAAK4W;AAAA,EACpC;AAAA,EAEA,OAAO,YAAYrO,GAAe2O,GAAa;AAC3C,WAAO,IAAIL,GAAMK,IAAQ3O,EAAG,GAAG2O,IAAQ3O,EAAG,CAAC;AAAA,EAC/C;AAAA,EAEA,OAAO,MAAMA,GAAe2O,GAAgB;AACxC,WAAO,IAAIL,GAAMK,EAAM,IAAI3O,EAAG,GAAG2O,EAAM,IAAI3O,EAAG,CAAC;AAAA,EACnD;AAAA,EAEA,OAAO,SAASA,GAAeC,GAAa;AACxC,WAAO,IAAIqO,GAAMtO,EAAG,IAAIC,EAAG,GAAGD,EAAG,IAAIC,EAAG,CAAC;AAAA,EAC7C;AACH;SCxHejpD,GAAM4tB,GAAgBoqC,IAAwB,GAAC;AAC3D,QAAMC,IAAW,MAAMD;AACvB,SAAO,KAAK,MAAMC,IAAWrqC,CAAM,IAAIqqC;AAC3C;MCAaC,GAAM;AAAA,EACfC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EAEA,YAAYt7D,GAAcH,GAAaE,GAAeD,GAAc;AAE/D,KAAC,KAAKq7D,IAAO,KAAKC,EAAM,IAAIp7D,KAAQD,IAAQ,CAACC,GAAMD,CAAK,IAAI,CAACA,GAAOC,CAAI,GACxE,CAAC,KAAKq7D,IAAM,KAAKC,EAAO,IAAIz7D,KAAOC,IAAS,CAACD,GAAKC,CAAM,IAAI,CAACA,GAAQD,CAAG;AAAA,EAC7E;AAAA,EAEA,IAAI,OAAI;AACJ,WAAO,KAAKs7D;AAAA,EAChB;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,IAAI,MAAG;AACH,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,OAAO,WAAWC,GAAgBC,GAAc;AAC5C,WAAO,IAAIN,GAAOK,EAAI,GAAGA,EAAI,GAAGC,EAAI,GAAGA,EAAI,CAAC;AAAA,EAChD;AAAA,EAEA,OAAO,QAAQlF,GAAgCmF,IAAoC,MAAI;AACnF,UAAMC,IAAOpF,EAAW,QAAA;AACxB,QAAIU,IAAU,IAAIsD,GAAMoB,EAAK,GAAGA,EAAK,CAAC,GAClCzE,IAAc,IAAIqD,GAAMoB,EAAK,IAAIA,EAAK,OAAOA,EAAK,IAAIA,EAAK,MAAM;AACrE,WAAID,MACAzE,IAAUyE,EAAgB,eAAezE,CAAO,GAChDC,IAAcwE,EAAgB,eAAexE,CAAW,IAE7C,IAAIiE,GAAOlE,EAAQ,GAAGA,EAAQ,GAAGC,EAAY,GAAGA,EAAY,CAAC;AAAA,EAEhF;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAKqE,KAAU,KAAKD;AAAA,EAC/B;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,IAAIf,GAAM,KAAKa,IAAO,KAAKE,EAAI;AAAA,EAC1C;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKD,KAAS,KAAKD;AAAA,EAC9B;AAAA,EAEA,UAAO;AACH,WAAO,CAAC,KAAKA,IAAO,KAAKE,IAAM,KAAKD,IAAQ,KAAKE,EAAO;AAAA,EAC5D;AAAA,EAEA,WAAQ;AACJ,WAAO,CAAC,IAAIhB,GAAM,KAAKa,IAAO,KAAKE,EAAI,GAAG,IAAIf,GAAM,KAAKc,IAAQ,KAAKE,EAAO,CAAC;AAAA,EAClF;AAAA,EAEA,MAAMK,GAAgBC,IAAU,MAAM;AAElC,WACI,KAAK,IAAI,KAAKT,KAAQQ,EAAOR,EAAK,IAAIS,KACtC,KAAK,IAAI,KAAKP,KAAOM,EAAON,EAAI,IAAIO,KACpC,KAAK,IAAI,KAAKR,KAASO,EAAOP,EAAM,IAAIQ,KACxC,KAAK,IAAI,KAAKN,KAAUK,EAAOL,EAAO,IAAIM;AAAA,EAElD;AAAA,EAEA,OAAOC,GAAc;AACjB,WAAO,IAAIX,GAAO,KAAKC,KAAQU,GAAQ,KAAKR,KAAOQ,GAAQ,KAAKT,KAASS,GAAQ,KAAKP,KAAUO,CAAM;AAAA,EAC1G;AAAA,EAEA,YAAY/wC,GAAiB;AACzB,WACI,KAAKqwC,MAASrwC,EAAUqwC,MACxB,KAAKE,MAAQvwC,EAAUuwC,MACvB,KAAKA,MAAQvwC,EAAUuwC,MACvB,KAAKC,MAAWxwC,EAAUwwC;AAAA,EAElC;AACH;AAWD,MAAMQ,GAAW;AAAA,EACb,OAAOC,KAAgC;AAAA,EACvCC,KAAkB;AAAA,EAElB,cAAA;AACI,QAAIF,GAAYC;AACZ,YAAM,IAAI,MAAM,6CAA6C;AAEjE,IAAAD,GAAYC,KAAY;AAAA,EAC5B;AAAA,EAEA,WAAW,WAAQ;AACf,WAAKD,GAAYC,OACbD,GAAYC,KAAY,IAAID,GAAA,IAEzBA,GAAYC;AAAA,EACvB;AAAA,EAEA,IAAI,SAAM;AACN,gBAAKC,MAAW,GACT,KAAKA;AAAA,EAChB;;AAGJ,MAAMC,KAAcH,GAAY;AAEhC,SAASI,GAAO3iC,IAAiB,IAAE;AAC/B,SAAO,GAAGA,CAAM,IAAI0iC,GAAY,MAAM;AAC1C;MAIaE,GAAe;AAAA,EACxBC,KAAkB;AAAA,EAClBC,KAAiB;AAAA,EACjBC,KAAqC;AAAA,EACrCC,KAAqC;AAAA,EAC5B;AAAA,EAET,YACI5+D,IAAgB,GAChB6+D,IAAuC,QACvCC,IAAqC,OAAQ;AAE7C,SAAKJ,KAAS1+D,GACV,KAAK++D,GAAUF,CAAU,KAAK,KAAKE,GAAUD,CAAQ,KACrD,KAAKH,KAAWE,GAChB,KAAKD,KAAWE,MAEhB,KAAKH,KAAWG,GAChB,KAAKF,KAAWC,IAEpB,KAAK,KAAKN,GAAO,GAAG;AAAA,EACxB;AAAA,EAEA,QAAK;AACD,SAAKE,KAAS;AAAA,EAClB;AAAA,EACA,IAAI,QAAK;AACL,WAAO,KAAKA;AAAA,EAChB;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAK,YAAY,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,KAAKM,GAAU,KAAKJ,EAAQ;AAAA,EACvC;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,KAAKI,GAAU,KAAKH,EAAQ;AAAA,EACvC;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKF;AAAA,EAChB;AAAA,EACA,IAAI,MAAM1+D,GAAa;AACnB,IAAI,KAAK0+D,OAAW1+D,MACZA,IAAQ,KAAK,UACbA,IAAQ,KAAK,UACNA,IAAQ,KAAK,YACpBA,IAAQ,KAAK,UAEb,KAAK0+D,OAAW1+D,MAChB,KAAK0+D,KAAS1+D,GACd,KAAKy+D,KAAS;AAAA,EAG1B;AAAA,EAEAM,GAAU/+D,GAA+B;AACrC,WAAO,OAAOA,KAAU,WAAWA,IAAQA,EAAM;AAAA,EACrD;AAAA,EAEA,OAAI;AACA,WAAO,IAAIw+D,GAAgB,KAAKE,IAAQ,KAAKC,IAAU,KAAKC,EAAQ;AAAA,EACxE;AAAA,EAEA,YAAYI,GAAa;AACrB,SAAKL,KAAW,KAAK,UAAUK,GAC/B,KAAKJ,KAAW,KAAK,UAAUI,GAC/B,KAAKN,MAAUM;AAAA,EACnB;AAAA,EAEA,YAAYC,GAAmCC,GAAiC;AAC5E,QAAIC,IAAWF,GACXG,IAAWF;AACf,IAAI,KAAKH,GAAUI,CAAQ,IAAI,KAAKJ,GAAUK,CAAQ,MAClDD,IAAWD,GACXE,IAAWH,IAEX,KAAKF,GAAUI,CAAQ,IAAI,KAAK,YAChC,KAAKR,KAAWQ,IAEhB,KAAKJ,GAAUK,CAAQ,IAAI,KAAK,YAChC,KAAKR,KAAWQ;AAAA,EAExB;AAAA,EAEA,gBAAgBF,GAAiC;AAC7C,SAAKN,KAAWM;AAAA,EACpB;AAAA,EAEA,gBAAgBD,GAAiC;AAC7C,SAAKN,KAAWM;AAAA,EACpB;AAAA,EAEA,cAAcj/D,GAAa;AACvB,SAAK0+D,KAAS1+D;AAAA,EAClB;AAAA,EAEA,WAAQ;AACJ,WAAO,GAAG,KAAK,EAAE,MAAMqF,GAAM,KAAK,OAAO,CAAC,KAAKA,GAAM,KAAKq5D,EAAM,CAAC,KAAKr5D,GAAM,KAAK,OAAO,CAAC;AAAA,EAC7F;AACH;AAIK,MAAOg6D,WAAmBb,GAAe;AAAA,EAC3C,YAAYx+D,GAAa;AACrB,UAAMA,GAAOA,GAAOA,CAAK;AAAA,EAC7B;AAAA,EAEA,IAAI,QAAK;AACL,WAAO;AAAA,EACX;AAAA,EAEA,OAAI;AACA,WAAO,IAAIq/D,GAAW,KAAK,KAAK;AAAA,EACpC;AAAA,EAEA,YAAYC,GAAkBC;EAAmB;AAAA,EAEjD,cAAcv/D,GAAa;AACvB,UAAM,cAAcA,CAAK,GACzB,MAAM,gBAAgBA,CAAK,GAC3B,MAAM,gBAAgBA,CAAK;AAAA,EAC/B;AACH;MA6BYw/D,GAAe;AAAA,EACxBC;AAAA,EACAC;AAAA,EAEA,YAAYC,GAAyBC,GAAuB;AACxD,SAAKH,KAAUE,GACf,KAAKD,KAAUE;AAAA,EACnB;AAAA,EAEA,OAAO,UAAUhD,GAAgB;AAC7B,WAAO,IAAI4C,GAAgB,IAAIhB,GAAgB5B,EAAM,CAAC,GAAG,IAAI4B,GAAgB5B,EAAM,CAAC,CAAC;AAAA,EACzF;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAK6C,GAAQ,SAAS,KAAKC,GAAQ;AAAA,EAC9C;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKD,GAAQ,SAAS,KAAKC,GAAQ;AAAA,EAC9C;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,IAAI/C,GAAM,KAAK8C,GAAQ,OAAO,KAAKC,GAAQ,KAAK;AAAA,EAC3D;AAAA,EACA,IAAI,MAAM9C,GAAgB;AACtB,SAAK6C,GAAQ,QAAQ7C,EAAM,GAC3B,KAAK8C,GAAQ,QAAQ9C,EAAM;AAAA,EAC/B;AAAA,EAEA,IAAI,IAAC;AACD,WAAO,KAAK6C,GAAQ;AAAA,EACxB;AAAA,EACA,IAAI,IAAC;AACD,WAAO,KAAKC,GAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAKD;AAAA,EAChB;AAAA,EACA,IAAI,OAAOz/D,GAAsB;AAC7B,SAAKy/D,KAAUz/D;AAAA,EACnB;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAK0/D;AAAA,EAChB;AAAA,EACA,IAAI,OAAO1/D,GAAsB;AAC7B,SAAK0/D,KAAU1/D;AAAA,EACnB;AAAA,EAEA,QAAK;AACD,SAAKy/D,GAAQ,MAAA,GACb,KAAKC,GAAQ,MAAA;AAAA,EACjB;AAAA,EAEA,YAAYV,GAAgB;AACxB,SAAK,OAAO,YAAYA,EAAM,CAAC,GAC/B,KAAK,OAAO,YAAYA,EAAM,CAAC;AAAA,EACnC;AAAA,EAEA,OAAI;AACA,WAAO,IAAIQ,GAAgB,KAAKC,IAAS,KAAKC,EAAO;AAAA,EACzD;AAAA,EAEA,cAAc9C,GAAgB;AAC1B,SAAK,OAAO,cAAcA,EAAM,CAAC,GACjC,KAAK,OAAO,cAAcA,EAAM,CAAC;AAAA,EACrC;AAAA,EAEA,WAAQ;AACJ,WAAO,QAAQv3D,GAAM,KAAK,CAAC,CAAC,KAAKA,GAAM,KAAK,CAAC,CAAC;AAAA,EAClD;AACH;AAIK,MAAOw6D,WAAmBL,GAAe;AAAA,EAC3C,YAAYG,GAAoBC,GAAkB;AAC9C,UAAMD,GAAQC,CAAM;AAAA,EACxB;AACH;MCjXYE,GAAW;AAAA,EACpBC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC,KAAqC;AAAA,EAErC,YAAYC,GAA2BC,GAA2BC,IAA+B,MAAI;AACjG,SAAK,mBAAmBF,GAAUC,CAAQ,GAC1C,KAAK,kBAAkBC,KAAkB,IAAI5D,GAAM,KAAK,GAAG,CAAC;AAAA,EAChE;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKuD;AAAA,EAChB;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKH,GAAS,SAAS,KAAKC,GAAa;AAAA,EACpD;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKD,GAAS,SAAS,KAAKC,GAAa;AAAA,EACpD;AAAA,EAEA,IAAI,aAAU;AACV,WAAO,KAAKI;AAAA,EAChB;AAAA,EAEA,IAAI,eAAY;AACZ,WAAO,KAAKL,GAAS;AAAA,EACzB;AAAA,EAEA,QAAK;AACD,SAAKA,GAAS,MAAA,GACd,KAAKC,GAAa,MAAA;AAAA,EACtB;AAAA,EAEA,OAAI;AACA,WAAO,IAAIF,GAAY,KAAKC,IAAU,KAAKC,IAAc,KAAKG,EAAe;AAAA,EACjF;AAAA,EAEA,mBAAmBE,GAA2BC,GAAyB;AACnE,QAAIE,IAAKH,EAAS,QACdI,IAAKJ,EAAS,QACdK,IAAKJ,EAAS,QACdK,IAAKL,EAAS;AAClB,IAAIE,EAAG,QAAQE,EAAG,UACdF,IAAKF,EAAS,QACdI,IAAKL,EAAS,SAEdI,EAAG,QAAQE,EAAG,UACdF,IAAKH,EAAS,QACdK,IAAKN,EAAS,SAElB,KAAKN,KAAW,IAAIP,GAAgBgB,GAAIC,CAAE,GAC1C,KAAKT,KAAe,IAAIR,GAAgBkB,GAAIC,CAAE,GAC9C,KAAKV,KAAQnD,GAAU,SAAS,KAAKkD,GAAa,OAAO,KAAKD,GAAS,KAAK;AAAA,EAChF;AAAA,EAEA,kBAAkBQ,GAAqB;AACnC,SAAKJ,KAAkBI,GACvB,KAAKL,KAAYV,GAAgB,UAAU,KAAKS,GAAM,MAAM,KAAKE,EAAe,EAAE,IAAI,KAAKJ,GAAS,KAAK,CAAC;AAAA,EAC9G;AAAA,EAEA,IAAIr7D,IAA+B,IAAE;AACjC,WAAO00D,GAAQ,KAAK2G,GAAS,OAAO,KAAKC,GAAa,OAAOt7D,CAAU;AAAA,EAC3E;AACH;AAIK,MAAOk8D,WAAyBd,GAAW;AAAA,EAC7C,YAAY9B,GAAwC;AAChD,UACI,IAAI6B,GAAW,IAAIR,GAAWrB,EAAO,CAAC,CAAC,GAAG,IAAIqB,GAAWrB,EAAO,CAAC,CAAC,CAAC,GACnE,IAAI6B,GAAW,IAAIR,GAAWrB,EAAO,CAAC,CAAC,GAAG,IAAIqB,GAAWrB,EAAO,CAAC,CAAC,CAAC,CAAC;AAAA,EAE5E;AACH;AChFM,MAAM6C,KAAoB,QACpBC,KAAwB,WAExBC,KAAmB,GAInBC,KAAyB;AC7B/B,SAASC,GAAcC,GAAQtE,GAAO;AAC3C,SAAO,MAAM,QAAQA,CAAK,IACtB;AAAA,IACEsE,EAAO,IAAItE,EAAM,CAAC,IAAIsE,EAAO,IAAItE,EAAM,CAAC,IAAIsE,EAAO;AAAA,IACnDA,EAAO,IAAItE,EAAM,CAAC,IAAIsE,EAAO,IAAItE,EAAM,CAAC,IAAIsE,EAAO;AAAA,EAC3D,IACM;AAAA,IACE,GAAGA,EAAO,IAAItE,EAAM,IAAIsE,EAAO,IAAItE,EAAM,IAAIsE,EAAO;AAAA,IACpD,GAAGA,EAAO,IAAItE,EAAM,IAAIsE,EAAO,IAAItE,EAAM,IAAIsE,EAAO;AAAA,EAC5D;AACA;AAQO,SAASC,GAAeD,GAAQE,GAAQ;AAC7C,SAAOA,EAAO,IAAI,CAAAxE,MAASqE,GAAaC,GAAQtE,CAAK,CAAC;AACxD;ACXO,SAAStpC,GAAYY,GAAQ;AAClC,QAAMmtC,IAAoB,CAAAlY,MAAU;AAClC,UAAM5zB,IAAI,WAAW4zB,CAAM;AAC3B,QAAI,OAAO,SAAS5zB,CAAC,EAAG,QAAOA;AAC/B,UAAM,IAAI,MAAM,IAAIrB,CAAM,mBAAmB;AAAA,EAC/C,GAEM0H,IAAS1H,EAAO,UAAU,GAAG,CAAC,EAAE,YAAW,GAC3C6P,IAAS7P,EAAO,UAAUA,EAAO,SAAS,CAAC,GAE3C5M,IADO4M,EAAO,UAAU,GAAGA,EAAO,SAAS,CAAC,EAC5B,MAAM,GAAG;AAE/B,MACE0H,MAAW,aACXmI,MAAW,OACXzc,EAAS,WAAW;AAEpB,WAAO;AAAA,MACL,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,MAChC,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,MAChC,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,MAChC,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,MAChC,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,MAChC,GAAG+5C,EAAkB/5C,EAAS,CAAC,CAAC;AAAA,IACtC;AAGE,QAAM,IAAI,MAAM,IAAI4M,CAAM,mBAAmB;AAC/C;ACvCO,SAASotC,KAAY;AAC1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AACA;ACRO,SAASC,GAASL,GAAQ;AAG/B,QAAM,EAAE,GAAArwD,GAAG,GAAAC,GAAG,GAAAshB,GAAG,GAAAF,GAAG,GAAA7wB,GAAG,GAAAmgE,MAAMN,GAEvBO,IAAQ5wD,IAAIqhB,IAAIphB,IAAIshB;AAE1B,SAAO;AAAA,IACL,GAAGF,IAAIuvC;AAAA,IACP,GAAG3wD,IAAI,CAAC2wD;AAAA,IACR,GAAGrvC,IAAI,CAACqvC;AAAA,IACR,GAAG5wD,IAAI4wD;AAAA,IACP,IAAIvvC,IAAI7wB,IAAI+wB,IAAIovC,KAAK,CAACC;AAAA,IACtB,IAAI3wD,IAAIzP,IAAIwP,IAAI2wD,KAAKC;AAAA,EACzB;AACA;ACdO,SAASC,GAAWC,GAAIC,IAAK,GAAG;AACrC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAGD;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAGC;AAAA,EACP;AACA;ACVO,SAAS1d,MAAc2d,GAAU;AACtC,EAAAA,IAAW,MAAM,QAAQA,EAAS,CAAC,CAAC,IAAIA,EAAS,CAAC,IAAIA;AAEtD,QAAMxxD,IAAW,CAACyxD,GAAIC,OACb;AAAA,IACL,GAAGD,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG;AAAA,IAC3B,GAAGD,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG;AAAA,IAC3B,GAAGD,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG,IAAID,EAAG;AAAA,IAClC,GAAGA,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG;AAAA,IAC3B,GAAGD,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG;AAAA,IAC3B,GAAGD,EAAG,IAAIC,EAAG,IAAID,EAAG,IAAIC,EAAG,IAAID,EAAG;AAAA,EACxC;AAGE,UAAQD,EAAS,QAAM;AAAA,IACrB,KAAK;AACH,YAAM,IAAI,MAAM,sBAAsB;AAAA,IAExC,KAAK;AACH,aAAOA,EAAS,CAAC;AAAA,IAEnB,KAAK;AACH,aAAOxxD,EAASwxD,EAAS,CAAC,GAAGA,EAAS,CAAC,CAAC;AAAA,IAE1C,SAAS;AACP,YAAM,CAACC,GAAIC,GAAI,GAAG7T,CAAI,IAAI2T,GACpBzoD,IAAI/I,EAASyxD,GAAIC,CAAE;AACzB,aAAO7d,GAAU9qC,GAAG,GAAG80C,CAAI;AAAA,IAC7B;AAAA,EACJ;AACA;AAOO,SAAS/H,MAAY0b,GAAU;AACpC,SAAO3d,GAAU,GAAG2d,CAAQ;AAC9B;ACrBO,SAASjiE,GAAUshE,GAAQ;AAChC,SAAO,UAAUA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC;AACvF;MCaa/c,GAAS;AAAA,EAClB6d;AAAA,EAEA,YAAYd,GAAc;AACtB,SAAKc,KAAUd;AAAA,EACnB;AAAA,EAEA,OAAO,WAAWA,GAAc;AAC5B,WAAIA,MAAW,MAAMA,MAAW,SACrB,IAAI/c,GAAUmd,IAAU,IAExB,IAAInd,GAAU7wB,GAAW4tC,CAAM,CAAC;AAAA,EAE/C;AAAA,EAEA,OAAO,WAAQ;AACX,WAAO,IAAI/c,GAAUmd,IAAU;AAAA,EACnC;AAAA,EAEA,IAAI,aAAU;AACV,WAAOW,GAAkB,KAAKD,EAAO,MAAMC,GAAkBX,IAAU;AAAA,EAC3E;AAAA,EAEA,UAAO;AACH,WAAO,IAAInd,GAAUod,GAAQ,KAAKS,EAAO,CAAC;AAAA,EAC9C;AAAA,EAEA,aAAa9d,GAAoB;AAC7B,WAAO,IAAIC,GAAUgC,GAAQ,CAACjC,EAAU8d,IAAS,KAAKA,EAAO,CAAC,CAAC;AAAA,EACnE;AAAA,EAEA,WAAQ;AACJ,WAAOC,GAAkB,KAAKD,EAAO;AAAA,EACzC;AAAA,EAEA,eAAepF,GAAgB;AAC3B,WAAOD,GAAM,UAAUsE,GAAa,KAAKe,IAASpF,CAAK,CAAC;AAAA,EAC5D;AAAA,EAEA,gBAAgBwE,GAAmB;AAC/B,WAAOD,GAAc,KAAKa,IAASZ,CAAM,EAAE,IAAI,CAACtb,MAAO6W,GAAM,UAAU7W,CAAE,CAAC;AAAA,EAC9E;AAAA,EAEA,OAAO,UAAU6b,GAAYC,GAAU;AACnC,WAAO,IAAIzd,GAAUud,GAAUC,GAAIC,CAAE,CAAC;AAAA,EAC1C;AACH;ACtDD,MAAMM,KAA2B;MAIpBC,GAAgB;AAAA,EAcZ;AAAA,EAbbC;AAAA,EACAlC;AAAA,EACAC,KAAyB,IAAIxD,GAAM,KAAK,GAAG;AAAA,EAC3C0F;AAAA;AAAA,EACAC,KAAqB;AAAA,EACrBC,yBAAqC,IAAA;AAAA,EACrCC;AAAA,EACAvC,KAAe,IAAItD,GAAA;AAAA,EACnByD;AAAA,EACAL;AAAA,EACA0C,KAAqC;AAAA,EAErC,YACaC,GACT/J,GAAqC;AAErC,QAHS,KAAA,eAAA+J,GAGL/J,MAAe;AACf,YAAM,IAAI,MAAM,kBAAkB+J,EAAa,EAAE,+BAA+B;AAEpF,UAAMC,IAAoBD,EAAa,aAAa;AAEpD,SAAKD,KAAmBte,GAAU,SAAA;AAClC,QAAItgD,IAAU80D;AACd,WAAO90D,MAAY8+D,KAAmB;AAClC,YAAMze,IAAY,iBAAiBrgD,CAAO,EAAE;AAC5C,MAAIqgD,MAAc,WACd,KAAKue,KAAmB,KAAKA,GAAiB,aAAate,GAAU,WAAWD,CAAS,CAAC,IAE9FrgD,IAAUA,EAAQ;AAAA,IACtB;AACA,IAAI,KAAK4+D,GAAiB,eACtB,KAAKA,KAAmB,OAE5BC,EAAa,oBAAoB,IAAI,GACrC,KAAKtC,KAAczH,GACnB,KAAK6J,KAAoB7J,GACzB,KAAKiK,GAAA;AAAA,EACT;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAKR;AAAA,EAChB;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKlC;AAAA,EAChB;AAAA,EAEA,IAAI,iBAAc;AACd,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,CAAC,KAAKkC,GAAe,CAAC,GAAG,KAAKA,GAAe,CAAC,CAAC;AAAA,EAC1D;AAAA,EAEA,IAAI,kBAAe;AACf,WAAO,KAAKI;AAAA,EAChB;AAAA,EAEA,IAAI,SAAM;AACN,WAAO,KAAKxC,GAAM;AAAA,EACtB;AAAA,EAEA,IAAI,KAAE;AACF,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKqC;AAAA,EAChB;AAAA,EAEA,IAAI,OAAI;AACJ,WAAO,KAAKrC;AAAA,EAChB;AAAA,EAEA,IAAI,aAAU;AACV,WAAO,KAAKG;AAAA,EAChB;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,KAAKL;AAAA,EAChB;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKE,GAAM;AAAA,EACtB;AAAA,EAEA,YAAY4C,GAAe;AACvB,SAAK3C,KAAY2C;AAAA,EACrB;AAAA,EAEA,UAAUC,IAAuB,IAAK;AAElC,WAAOA,KAAe,KAAKV,OAAY,SACjC7E,GAAO,QAAQ,KAAK6C,IAAa,KAAKqC,EAAgB,IACtD,KAAKL;AAAA,EACf;AAAA,EAEAW,KAAwB;AACpB,UAAMC,IAAgC,CAAA;AACtC,QAAI,KAAKR,GAAkB,YAAY,OACnC,KAAKA,GAAkB,UAAU,SAASS,GAAa,UAAU,GAAG;AACpE,YAAMl+B,IAAW,KAAKy9B,GAAkB;AACxC,eAASjpD,IAAQ,GAAGA,IAAQwrB,EAAS,QAAQ,EAAExrB;AAE3C,QAAAypD,EAAQ,KAAKj+B,EAASxrB,CAAK,CAAwB;AAAA,IAE3D;AACI,MAAAypD,EAAQ,KAAK,KAAKR,EAAiB;AAEvC,WAAOQ;AAAA,EACX;AAAA,EAEAE,GAAmBC,GAAazhD,GAAe;AAC3C,QAAIA,GAAQ;AACR,iBAAW7d,KAAW,KAAKk/D;AACvB,QAAAl/D,EAAQ,UAAU,IAAIs/D,CAAG;AAE7B,WAAKZ,GAAkB,IAAIY,CAAG;AAAA,IAClC,OAAO;AACH,iBAAWt/D,KAAW,KAAKk/D;AACvB,QAAAl/D,EAAQ,UAAU,OAAOs/D,CAAG;AAEhC,WAAKZ,GAAkB,OAAOY,CAAG;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,SAASC,IAAS,IAAI;AAClB,SAAKF,GAAmB,UAAUE,CAAM;AAAA,EAC5C;AAAA,EAEA,UAAUC,IAAY,IAAI;AACtB,SAAKH,GAAmB,aAAaG,CAAS;AAAA,EAClD;AAAA,EAEA,aAAaC,GAAoBC,GAAiCC,GAAqB;AACnF,WAAO;AAAA,EACX;AAAA,EAEA,OAAOC,IAAW,IAAI;AAClB,SAAKP,GAAmB,YAAYO,CAAQ,GAC5C,KAAKnB,KAAYmB;AAAA,EACrB;AAAA,EAEAC,KAAa;AACT,UAAM1F,IAAS,KAAK,UAAU,EAAI;AAClC,SAAKiC,KAAQ,IAAItD,GAAMqB,EAAO,QAAQA,EAAO,MAAMA,EAAO,SAASA,EAAO,GAAG,GACzE,KAAKkC,MACL,KAAKH,KAAW,KAAKG,GAAU,SAAS,KAAKD,GAAM,MAAM,KAAKE,EAAe,CAAC,GAE9E,KAAKiC,KAAU,IAAI7E,GACf,KAAKwC,GAAS,GACd,KAAKA,GAAS,GACd,KAAKA,GAAS,IAAI,KAAKE,GAAM,GAC7B,KAAKF,GAAS,IAAI,KAAKE,GAAM,CAAC,MAGlC,KAAKF,KAAW,IAAIpD,GAAMqB,EAAO,MAAMA,EAAO,GAAG,GACjD,KAAKoE,KAAUpE,GACf,KAAKkC,KAAY,KAAKD,GAAM,MAAM,KAAKE,EAAe,EAAE,IAAI,KAAKJ,EAAQ;AAE7E,UAAM4D,IAAgB,KAAK1D,GAAM,MAAM,KAAKE,EAAe,EAAE,YAAY,EAAE,GAErEyD,IAAiC7C,KAAmB,IAAIC,KAAyB;AAEnF,SAAKqB,KAAiB;AAAA,MAClBsB,EAAc,IAAI,KAAK1D,EAAK,EAAE,IAAI,EAAE,GAAG2D,GAAwB,GAAGA,GAAwB;AAAA,MAC1FD,EACK,IAAI,EAAE,GAAG,KAAK1D,GAAM,GAAG,GAAG,EAAA,CAAG,EAC7B,IAAI,EAAE,GAAG2D,GAAwB,GAAG,CAACA,GAAwB;AAAA,MAClED,EAAc,IAAI,EAAE,GAAG,CAACC,GAAwB,GAAG,CAACA,GAAwB;AAAA,MAC5ED,EACK,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK1D,GAAM,EAAA,CAAG,EAC7B,IAAI,EAAE,GAAG,CAAC2D,GAAwB,GAAGA,GAAwB;AAAA,IAAA;AAAA,EAU9E;AAAA,EAEAhB,KAAkB;AAGd,QADA,KAAKzC,KAAkB,IAAIxD,GAAM,KAAK,GAAG,GACrC,KAAKyD,GAAY,YAAY,KAAK;AAClC,YAAMyD,IAAa,KAAKzD,GAAY,SAAS,KAAK,CAAC;AACnD,MAAIyD,EAAW,QAAQ,YACnB,KAAK1D,KAAkB,IAAIxD,GAAM,CAACkH,EAAW,QAAQ,SAAS,CAACA,EAAW,QAAQ,OAAQ;AAAA,IAElG;AAIA,QAFA,KAAKH,GAAA,GAGD,KAAKtD,GAAY,YAAY,OAC7B,CAAC,KAAKA,GAAY,UAAU,SAAS6C,GAAa,UAAU,KAC5D,KAAK7C,GAAY,sBAAsB,MACzC;AACE,YAAMpC,KACF,KAAKoC,GAAY,UAAU,SAAS6C,GAAa,WAAW,IACtD1F,GAAO,QAAQ,KAAK6C,GAAY,UAAgC,IAChE7C,GAAO,QAAQ,KAAK6C,EAAW,GACvC,OAAOY,KAAyB,CAAC;AAEnC,UAAI,KAAKZ,GAAY,kBAAkB,YAAY,OAAO;AACtD,cAAM0D,IAAW,KAAK1D,GAAY;AAClC,QAAA0D,EAAS,aAAa,KAAK,GAAG9F,EAAO,QAAQ,CAAC,IAAI,GAClD8F,EAAS,aAAa,KAAK,GAAG9F,EAAO,QAAQ,CAAC,IAAI,GAClD8F,EAAS,aAAa,SAAS,GAAG9F,EAAO,KAAK,IAAI,GAClD8F,EAAS,aAAa,UAAU,GAAG9F,EAAO,MAAM,IAAI;AAAA,MACxD;AAEA,YAAM+F,IADgB,IAAInD,GAAiB5C,EAAO,SAAS,EACjC,IAAI;AAAA,QAC1B,OAAO,+CAA+C,CAAC,GAAG,KAAKuE,GAAkB,QAAQ,EAAE,KAAK,GAAG,CAAC;AAAA,MAAA,CACvG;AAID,UAHA,KAAKnC,GAAY,mBAAmB,aAAa2D,CAAG,GACpD,KAAKvB,KAAoB,KAAKpC,GAAY,WAEtC,KAAK,aAAa,WAAW;AAC7B,cAAMrH,IAAS,IAAI4D,GAAMqB,EAAO,QAAQA,EAAO,MAAMA,EAAO,SAASA,EAAO,GAAG,EAC1E,MAAM,KAAKmC,EAAe,EAC1B,IAAI,IAAIxD,GAAMqB,EAAO,MAAMA,EAAO,GAAG,CAAC,GACrC+F,IAAMjL,GAAUC,GAAQmJ,IAA0B;AAAA,UACpD,OAAO;AAAA,QAAA,CACV;AACD,aAAK9B,GAAY,mBAAmB,aAAa2D,CAAG;AAAA,MACxD;AAAA,IACJ;AAAA,EACJ;AACH;AChPK,MAAOC,WAAuB7B,GAAgB;AAAA,EAChD8B;AAAA,EAEA,YAAYhlC,GAAsB05B,GAA8B;AAC5D,UAAM15B,GAAQ05B,CAAU,GAExB,KAAKsL,KAAe,IAAInE,GACpBN,GAAgB,UAAU,KAAK,OAAO,GACtCA,GAAgB,UAAU,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,GACrD,KAAK,cAAc,GAEvB,KAAK,YAAY,KAAKyE,GAAa,SAAS,KAAK;AAAA,EACrD;AACH;ACbD,IAAYhB;AAAA,CAAZ,SAAYA,GAAY;AACpBA,EAAAA,EAAA,aAAA,qBACAA,EAAA,YAAA,oBACAA,EAAA,YAAA,oBACAA,EAAA,aAAA,qBACAA,EAAA,UAAA,kBACAA,EAAA,cAAA,sBACAA,EAAA,YAAA,wBACAA,EAAA,QAAA,gBACAA,EAAA,kBAAA,sBACAA,EAAA,UAAA;AACJ,GAXYA,OAAAA,KAAY,CAAA,EAAA;MAeXiB,GAAY;AAAA,EAYD;AAAA,EACP;AAAA,EAZb,OAAO,kBAAgCjB,GAAa;AAAA,EACpD,OAAO,aAAqB;AAAA,EAE5BkB;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EAEAC;AAAA,EAEA,YACoBtT,GACP7wD,IAA0B,CAAA,GACnCokE,GAAwB;AAFR,SAAA,MAAAvT,GACP,KAAA,UAAA7wD,GAGT,KAAKgkE,KAAeI,GAEpB,KAAKL,KAAmB,KAAK,YAAY,iBAEzC,KAAKG,KAAc7J,GAAO,IAAI,KAAK,YAAY,UAAU;AAAA,EAC7D;AAAA,EAEA,WAAQ;AACJ,WAAO,GAAG,KAAK0J,EAAgB,IAAI,KAAK,EAAE;AAAA,EAC9C;AAAA,EAEA,IAAI,kBAAe;AACf,WAAO,KAAKA;AAAA,EAChB;AAAA,EAEA,IAAI,cAAW;AACX,WAAO,KAAKC;AAAA,EAChB;AAAA,EAEA,IAAI,mBAAgB;AAChB,WAAO,KAAKC;AAAA,EAChB;AAAA,EACA,oBAAoBI,GAAkC;AAClD,SAAKJ,KAAoBI;AAAA,EAC7B;AAAA,EAEA,IAAI,gBAAa;AACb,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,KAAE;AACF,WAAO,KAAK,IAAI,GAAA;AAAA,EACpB;AAAA,EAEA,IAAIC,GAAkB;AAClB,WAAO,KAAKJ,GAAY,OAAOI,CAAO;AAAA,EAC1C;AAAA,EAEA,IAAI,cAAW;AACX,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,eAAY;AACZ,WAAO,KAAK,oBAAoBzB,GAAa;AAAA,EACjD;AAAA,EAEA,IAAI,cAAW;AAEX,WAAO,KAAK,oBAAoBA,GAAa,aAAa,KAAK,oBAAoBA,GAAa;AAAA,EACpG;AAAA,EAEA,IAAI,YAAS;AACT,WAAO,KAAK,oBAAoBA,GAAa;AAAA,EACjD;AAAA,EAEA,IAAI,gBAAa;AACb,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,eAAY;AACZ,WAAO,KAAK,oBAAoBA,GAAa;AAAA,EACjD;AAAA,EAEA,IAAI,gBAAa;AACb,WAAO,KAAK,oBAAoBA,GAAa;AAAA,EACjD;AAAA,EAEA,IAAI,cAAW;AACX,WAAO,KAAK,oBAAoBA,GAAa;AAAA,EACjD;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKoB,IAAmB;AAAA,EACnC;AAAA,EAEA,IAAI,aAAU;AACV,WAAO,KAAKA,IAAmB,cAAc;AAAA,EACjD;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,KAAKE;AAAA,EAChB;AAAA,EACA,IAAI,QAAQI,GAAe;AACvB,SAAKJ,KAAWI;AAAA,EACpB;AAAA,EAEA,SAASvB,IAAS,IAAI;AAClB,SAAKiB,IAAmB,SAASjB,CAAM;AAAA,EAC3C;AAAA,EAEA,UAAUC,IAAY,IAAI;AACtB,SAAKgB,IAAmB,UAAUhB,CAAS;AAAA,EAC/C;AAAA,EAEA,OAAOI,IAAW,IAAI;AAClB,SAAKY,IAAmB,OAAOZ,CAAQ;AAAA,EAC3C;AAAA,EAEA,iBAAiBF,GAA+B;AAAA,EAChD;;AAKE,MAAOqB,WAA6BV,GAAY;AAAA,EAClD,iBAAiBvL,GAA8B;AAC3C,QAAIqL,GAAe,MAAMrL,CAAU;AAAA,EACvC;AACH;AAIK,MAAOkM,WAAyBD,GAAoB;AAAA,EACtD,OAAO,kBAAkB3B,GAAa;AAAA,EACtC,OAAO,aAAa;;AAKlB,MAAO6B,WAA8BF,GAAoB;AAAA,EAC3D,OAAO,aAAa;AAAA,EAEpB,IAAI,gBAAa;AACb,WAAO;AAAA,EACX;;AAKE,MAAOG,WAAwBD,GAAqB;AAAA,EACtD,OAAO,kBAAkB7B,GAAa;AAAA,EACtC,OAAO,aAAa;;AAKlB,MAAO+B,WAAsBD,GAAe;AAAA,EAC9C,OAAgB,kBAAkB9B,GAAa;AAAA,EAC/C,OAAO,aAAa;;AAKlB,MAAOgC,WAA0BH,GAAqB;AAAA,EACxD,OAAgB,kBAAkB7B,GAAa;AAAA,EAC/C,OAAO,aAAa;;AAKlB,MAAOiC,WAAyBhB,GAAY;AAAA,EAC9C,OAAgB,kBAAkBjB,GAAa;AAAA,EAC/C,OAAO,aAAa;;AAKlB,MAAOkC,WAAwBL,GAAqB;AAAA,EACtD,OAAgB,kBAAkB7B,GAAa;AAAA,EAC/C,OAAO,aAAa;AAAA,EAEpBmC,KAA2C,CAAA;AAAA,EAE3C,WAAQ;AACJ,WAAO,GAAG,MAAM,SAAA,CAAU,eAAe,KAAKA,GAAqB,IAAI,CAAChzC,MAAMA,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EAClG;;AAKE,MAAOizC,WAA8BP,GAAqB;AAAA,EAC5D,OAAgB,kBAAkB7B,GAAa;AAAA,EAC/C,OAAO,aAAa;;AChLxB,MAAMqC,KAAqB,uBAErBC,KAAqB;MAIdC,GAAW;AAAA,EACpBC,KAAkC;AAAA,EAElCC,KAAM,IAAIC,GAAK;AAAA,EACfC;AAAA,EAEAC;AAAA,EACAC;AAAA,EAEAC,yBAA4C,IAAA;AAAA,EAC5CC,yBAA0C,IAAA;AAAA,EAE1C,YAAYC,GAA4BC,IAAmB,IAAIC,IAAyB,CAAA,GAC5E/lE,IAAsC,QAAS;AAIvD,QAHA,KAAKwlE,KAAgBK,GACrB,KAAKJ,KAAgBO,GAAeb,EAAkB,GACtD,KAAKO,KAAc,IAAIO,GAAe,GAAGd,EAAkB,GAAG,GAC1DW,MAAe,IAAI;AACnB,WAAKI,GAAgBJ,CAAU,GAC/B,KAAKK,GAAA;AACL,YAAMC,IAAepmE,IAAUA,EAAQ,UAAU;AACjD,iBAAW6+B,KAAU,KAAK+mC,GAAS,OAAA;AAC/B,YAAI/mC,EAAO,MAAMknC,GAAa;AAE1B,gBAAMM,IAAyBN,EAAYlnC,EAAO,EAAE;AACpD,eAAK8mC,GAAa,IAAI9mC,EAAO,IAAIwnC,CAAU,GACvCD,KAAgBA,KAAgBC,MAChCxnC,EAAO,UAAU,OAAOwnC,EAAWD,CAAY,CAAC;AAAA,QAExD;AAAA,IAER;AAAA,EACJ;AAAA,EAEA,cAAW;AAEP,SAAKE,GAAA,GACL,KAAKC,GAAA,GACL,KAAKC,GAAA,GACL,KAAKC,GAAA,GACL,KAAKC,GAAA,GACL,KAAKC,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAS;AACX,IAAI,KAAKtB,KACL,MAAM,KAAKG,GAAc,YAAY,IAAI,IAEzC,KAAKA,GAAc,aAAA;AAAA,EAE3B;AAAA,EAEA,YAAYprD,GAAcykB,IAA+B,QAAS;AAC9D,UAAM+nC,IAA2B;AAAA,MAC7B,MAAAxsD;AAAA,IAAA;AAEJ,IAAIykB,MACA+nC,EAAY,YAAY;AAAA,MACpB,IAAI/nC,EAAO;AAAA,IAAA,GAEX,KAAK8mC,GAAa,IAAI9mC,EAAO,EAAE,MAC/B+nC,EAAY,UAAU,aAAa,KAAKjB,GAAa,IAAI9mC,EAAO,EAAE,KAG1E,SAAS,cACL,IAAI,YAAY,gBAAgB;AAAA,MAC5B,QAAQ+nC;AAAA,IAAA,CACX,CAAC;AAAA,EAEV;AAAA,EAEA,IAAI,WAAQ;AACR,WAAO,KAAKtB;AAAA,EAChB;AAAA,EAEA,IAAI,aAAU;AACV,WAAO,KAAKD;AAAA,EAChB;AAAA,EAEA,IAAI,MAAG;AACH,WAAO,KAAKI,GAAc;AAAA,EAC9B;AAAA,EAEA,QAAQzkD,GAAU;AACd,WAAO,KAAK0kD,GAAY,IAAI1kD,CAAE;AAAA,EAClC;AAAA,EAEA,WAAWA,GAAU;AACjB,WAAO,KAAK4kD,GAAS,IAAI5kD,CAAE,KAAK;AAAA,EACpC;AAAA,EAEAklD,GAAgBW,GAAe;AAG3B,UAAMC,IAFS,IAAI,UAAA,EACQ,gBAAgBD,GAAS,eAAe,EACrB;AAC9C,QAAIC,EAAW,aAAa,OAAO,KAAKA,EAAW,aAAa,QAAQ,GAAG;AACvE,YAAMnhE,IAAQwyD,GAAuB2O,EAAW,aAAa,OAAO,CAAC,GAC/DlhE,IAASuyD,GAAuB2O,EAAW,aAAa,QAAQ,CAAC;AACvE,MAAInhE,MAAU,QAAQC,MAAW,SAC7BkhE,EAAW,WAAW,gBAAgB,OAAO,GAC7CA,EAAW,WAAW,gBAAgB,QAAQ,GACzCA,EAAW,aAAa,SAAS,KAClCA,EAAW,aAAa,WAAW,OAAOnhE,CAAK,IAAIC,CAAM,EAAE;AAAA,IAGvE;AAGA,UAAMmhE,IAAeD,EAAW,iBAAiB,gBAAgBpG,EAAqB,IAAI;AAC1F,aAASvnD,IAAQ,GAAGA,IAAQ4tD,EAAa,QAAQ,EAAE5tD;AAG/C,MAD0B4tD,EAAa5tD,CAAK,EACvC,aAAa,UAAUsnD,EAAiB;AAEjD,SAAK4E,KAAcyB;AAAA,EACvB;AAAA,EAEAX,KAAa;AACT,UAAMa,IAAkB,KAAK3B,IAAa,eAAeH,EAAkB;AAC3E,QACI8B,MACC,EAAE,iBAAiBA,EAAgB,YAAYA,EAAgB,QAAQ,gBAAgBC,KAC1F;AACE,YAAMC,IAAaF,EAAgB;AACnC,eAAS7tD,IAAQ,GAAGA,IAAQ+tD,EAAW,QAAQ,EAAE/tD,GAAO;AAEpD,cAAMguD,IAAYD,EAAW/tD,CAAK;AAClC,YAAIguD,EAAU,aAAa,kBAAkB;AACzC,eAAK7B,GAAI,KAAK,KAAKG,GAAc,KAAoB0B,EAAW,MAAMF,EAAsB;AAC5F;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEAG,GAAqB9E,GAA0B;AAC3C,UAAM/J,IAAiC,KAAK8M,IAAa,eAAe/C,EAAa,EAAE;AACvF,WAAI/J,KACA+J,EAAa,iBAAiB/J,CAAU,GACjC,OAEX,QAAQ,MAAM,2BAA2B+J,EAAa,EAAE,EAAE,GACnD;AAAA,EACX;AAAA,EAEA+E,GAA6CC,GAA6B3oC,GAAyB;AAC/F,UAAMk8B,IAAW,KAAKyK,GAAI,6BAA6B3mC,CAAO;AAE9D,WADqB,IAAI2oC,EAAY3oC,GAASk8B,GAAU,IAAI;AAAA,EAEhE;AAAA,EAEA0M,GAAgBvL,GAAqB;AACjC,WAAO,KAAKsJ,GAAI,eAAetJ,CAAU,EAAE,OAAO,CAACwL,MAAOA,EAAG,CAAC,EAAE,MAAM,WAAW,KAAK/B,GAAc,KAAK,CAAC;AAAA,EAC9G;AAAA,EAEAgC,GAAmB5oC,GAAoB;AACnC,SAAK+mC,GAAS,IAAI/mC,EAAO,IAAIA,CAAM;AAAA,EACvC;AAAA,EAEA6oC,GAAoCttD,GAAiBktD,GAA2B;AAC5E,eAAWK,KAAe,KAAKJ,GAAgBntD,CAAI;AAC/C,UAAIutD,EAAY,CAAC,EAAE,OAAOvtD,CAAI,GAAG;AAC7B,cAAMykB,IAAS,KAAKwoC,GAAqBC,GAAaK,EAAY,CAAC,CAAC;AACpE,QAAI,KAAKP,GAAqBvoC,CAAM,KAChC,KAAK4oC,GAAmB5oC,CAAM;AAAA,MAEtC;AAAA,EAER;AAAA,EAEA6nC,KAAgB;AACZ,SAAKgB,GAAYrN,GAAO,IAAI,YAAY,GAAGoK,EAAgB;AAAA,EAC/D;AAAA,EAEA6B,KAAe;AACX,SAAKoB,GAAYrN,GAAO,IAAI,WAAW,GAAGsK,EAAe,GACzD,KAAK+C,GAAYrN,GAAO,IAAI,iBAAiB,GAAG4K,EAAqB;AAAA,EACzE;AAAA,EAEAsB,KAAe;AACX,SAAKmB,GAAYrN,GAAO,IAAI,WAAW,GAAG0K,EAAe;AAAA,EAC7D;AAAA,EAEAyB,KAAa;AACT,SAAKkB,GAAYrN,GAAO,IAAI,SAAS,GAAGuK,EAAa;AAAA,EACzD;AAAA,EAEA,aAAagD,GAA2C;AAEpD,QAAIA,KAAiBC,GAAiBD,CAAa,KAAKA,EAAc,MAAM,WAAW,KAAKnC,GAAc,KAAK,GAAG;AAC9G,YAAMqC,IAA0BF,EAAe,GAAA,GACzCG,IAAY,KAAKnC,GAAS,IAAIkC,CAAW;AAC/C,aAAOC,GAAW,gBAAgBA,IAAY;AAAA,IAClD;AACA,WAAO;AAAA,EACX;AAAA,EAEAtB,KAAgB;AACZ,SAAKiB,GAAYrN,GAAO,IAAI,YAAY,GAAGyK,EAAgB;AAAA,EAC/D;AAAA,EAEA6B,KAAyB;AAErB,UAAMqB,IAAiB,KAAK3C,GAAY,iBAAiB,OAAO;AAChE,aAASlsD,IAAQ,GAAGA,IAAQ6uD,EAAe,QAAQ,EAAE7uD,GAAO;AAExD,YAAM8uD,IAA8BD,EAAe7uD,CAAK;AACxD,UAAI,CAAC,KAAKysD,GAAS,IAAIqC,EAAQ,EAAE,GAAG;AAEhC,cAAMX,IAAcW,EAAQ,UAAU,SAAS,mBAAmB,IAAIxD,KAClDwD,EAAQ,UAAU,SAAS,oBAAoB,IAAIpD,KACnDoD,EAAQ,UAAU,SAAS,kBAAkB,IAAItD,KACjDsD,EAAQ,UAAU,SAAS,mBAAmB,IAAInD,KAClDmD,EAAQ,UAAU,SAAS,sBAAsB,IAAIlD,KACrDkD,EAAQ,UAAU,SAAS,oBAAoB,IAAIhD,KACnD;AACpB,YAAIqC,MAAgB,MAAM;AACtB,gBAAMzoC,IAAS,IAAIyoC,EAAY,KAAK,QAAQW,EAAQ,EAAE,GAAG,CAAA,GAAI,IAAI;AACjE,UAAAppC,EAAO,iBAAiBopC,CAAO,GAC/B,KAAKR,GAAmB5oC,CAAM;AAAA,QAClC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACH;AClQD,MAAqBqpC,GAAO;AAAA,EACxBC,KAAoB;AAAA,EACpBC,KAA8B,IAAI7L,GAAA;AAAA,EAElC8I,KAAoC;AAAA,EACpCgD;AAAA,EACAC,KAA0B,IAAI/L,GAAA;AAAA,EAC9BgM,KAAwB,IAAIhM,GAAA;AAAA,EAC5BiM;AAAA,EACAC,KAA2B;AAAA,EAE3BC,KAAoB;AAAA,EACpBC,KAAiB;AAAA,EACjBC,KAAoB;AAAA,EACpBC,KAAgB;AAAA,EAEhB,YAAY97C,GAAsB;AAE9B,IAAAA,EAAU,iBAAiB,SAAS,KAAK+7C,GAAY,KAAK,IAAI,GAAG,EAAE,SAAS,IAAM,GAClF,KAAKT,KAAet7C,EAAU,IAC9B,KAAKu7C,KAAmB,IAAI/L,GACxBxvC,EAAU,aAAaA,EAAU,YACjCA,EAAU,YAAYA,EAAU,SAAS,IAEzCA,EAAU,gBAAgB,KAAKA,EAAU,iBAAiB,OAC1D,QAAQ,MAAM,qCAAqC,GACnD,KAAK07C,KAAkB,KAE3B,KAAKF,KAAiB,IAAIhM,GAAMxvC,EAAU,aAAaA,EAAU,YAAY,GAC7E,KAAKy7C,KAAkB,IAAI,eAAe,KAAKO,GAAmB,KAAK,IAAI,CAAC,GAC5E,KAAKP,GAAgB,QAAQz7C,CAAS;AAAA,EAC1C;AAAA,EAEA,IAAI,UAAO;AACP,WAAO,KAAKo7C;AAAA,EAChB;AAAA,EAEA,IAAI,QAAK;AACL,WAAO,KAAKQ;AAAA,EAChB;AAAA,EAEAK,KAAe;AAEX,WAAO1Q,GAAW,KAAK+M,EAAW;AAAA,EACtC;AAAA,EAEA4D,GAAYC,GAAe;AAEvB,SAAK7D,GAAY,aAAa,WAAW6D,EAAQ,IAAI,CAAC/zC,MAAM,OAAOA,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACpF;AAAA,EAEA,OAAO2xC,GAAyB;AAC5B,QAAI,CAAC,KAAK2B;AACN;AAGJ,QAAIS,IAAU5Q,GAAWwO,CAAU;AAiBnC,QAhBIoC,EAAQ,CAAC,IAAI,KAAKX,GAAe,KAAKW,EAAQ,CAAC,IAAI,KAAKX,GAAe,KAEvE,KAAKI,KAAS,KAAKJ,GAAe,IAAIW,EAAQ,CAAC,GAC/CA,EAAQ,CAAC,MAAM,KAAKX,GAAe,IAAI,KAAKI,KAASO,EAAQ,CAAC,KAAK,GACnEA,EAAQ,CAAC,IAAI,KAAKX,GAAe,IAAI,KAAKI,OAG1C,KAAKA,KAAS,KAAKJ,GAAe,IAAIW,EAAQ,CAAC,GAC/CA,EAAQ,CAAC,MAAM,KAAKX,GAAe,IAAI,KAAKI,KAASO,EAAQ,CAAC,KAAK,GACnEA,EAAQ,CAAC,IAAI,KAAKX,GAAe,IAAI,KAAKI,KAE1C,KAAKD,KAAY,KAAKC,OACtB,KAAKD,KAAY,KAAKC,KAItB,KAAKA,MAAU,GAAG;AAClB,WAAKA,KAAS,GACdO,IAAU5Q,GAAWwO,CAAU;AAC/B,YAAMlI,IAAQ,KAAK2J,GAAe,SAAS,EAAE,GAAGW,EAAQ,CAAC,GAAG,GAAGA,EAAQ,CAAC,GAAG;AAC3E,MAAAA,EAAQ,CAAC,KAAKtK,EAAM,IAAI,GACxBsK,EAAQ,CAAC,KAAKtK,EAAM,IAAI,GACxBsK,EAAQ,CAAC,IAAI,KAAKX,GAAe,GACjCW,EAAQ,CAAC,IAAI,KAAKX,GAAe;AAAA,IACrC;AAEA,SAAKlD,KAAcyB,GACnB,KAAKmC,GAAYC,CAAO,GACxB,KAAKf,KAAW;AAAA,EACpB;AAAA,EAEA,UAAO;AACH,SAAK9C,KAAc,MACnB,KAAK8C,KAAW,IAChB,KAAKQ,KAAS;AAAA,EAClB;AAAA,EAEA,YAAY/nE,GAAmB;AAC3B,SAAKunE,KAAW,IAChB,KAAKC,KAAuB7L,GAAM,UAAU37D,CAAK;AAAA,EACrD;AAAA,EAEA,YAAYA,GAAmB;AAC3B,QAAI,KAAKykE,MAAe,KAAK8C,IAAU;AACnC,YAAMvJ,IAAQ,KAAKwJ,GAAqB,SAASxnE,CAAK,EAAE,YAAY,IAAM,KAAK+nE,EAAM;AACrF,UAAI,CAAC/J,EAAM,UAAU;AACjB,cAAMsK,IAAU,KAAKF,GAAA;AACrB,eAAAE,EAAQ,CAAC,KAAKtK,EAAM,GACpBsK,EAAQ,CAAC,KAAKtK,EAAM,GACpB,KAAKqK,GAAYC,CAAO,GACxB,KAAKd,KAAuB7L,GAAM,UAAU37D,CAAK,GAC1C;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAUuoE,GAAoB;AAC1B,SAAKhB,KAAW;AAAA,EACpB;AAAA,EAEAY,GAAmBK,GAA8B;AAC7C,QAAI,KAAK/D;AACL,iBAAW3tB,KAAS0xB;AAChB,YAAI1xB,EAAM,OAAO,OAAO,KAAK2wB,IAAc;AACvC,gBAAMgB,IAAgB,IAAI9M,GAAM7kB,EAAM,YAAY,OAAOA,EAAM,YAAY,MAAM,GAC3EwxB,IAAU,KAAKF,GAAA,GACfpK,IAAQyK,EAAc,SAAS,KAAKd,EAAc;AACxD,UAAI,KAAK,IAAI3J,EAAM,IAAIsK,EAAQ,CAAC,CAAC,KAAK,KAAK,IAAItK,EAAM,IAAIsK,EAAQ,CAAC,CAAC,KAC/D,KAAKP,KAASU,EAAc,IAAIH,EAAQ,CAAC,GACzCA,EAAQ,CAAC,MAAM,KAAKX,GAAe,IAAI,KAAKI,KAASO,EAAQ,CAAC,KAAK,GACnEA,EAAQ,CAAC,IAAIG,EAAc,IAAI,KAAKV,OAEpC,KAAKA,KAASU,EAAc,IAAIH,EAAQ,CAAC,GACzCA,EAAQ,CAAC,MAAM,KAAKX,GAAe,IAAI,KAAKI,KAASO,EAAQ,CAAC,KAAK,GACnEA,EAAQ,CAAC,IAAIG,EAAc,IAAI,KAAKV,KAExC,KAAKJ,KAAiBc,GACtB,KAAKJ,GAAYC,CAAO;AAAA,QAC5B;AAAA;AAAA,EAGZ;AAAA,EAEAJ,GAAYloE,GAAiB;AACzB,QAAI,KAAKykE,IAAa;AAGlB,YAAMiE,KADQ1oE,EAAM,WAAW,KAAKA,EAAM,SAASA,EAAM,SAASA,EAAM,UAClD,IAAI,IAAI,IACxB2oE,IAAU,KAAKZ,KAAS,KAAK,IAAKW,IAAQ,KAAKT,KAAS,CAAC;AAC/D,WAAKF,KAAS,KAAK,IAAI,KAAK,IAAIY,GAAS,KAAKb,EAAS,GAAG,KAAKE,EAAS;AACxE,YAAMY,IAAW,KAAKjB,GAAe,YAAY,IAAM,KAAKI,EAAM,GAC5DO,IAAU,KAAKF,GAAA;AACrB,MAAAE,EAAQ,CAAC,MACHA,EAAQ,CAAC,IAAIM,EAAS,MAAM5oE,EAAM,UAAU,KAAK0nE,GAAiB,KAAM,KAAKC,GAAe,GAClGW,EAAQ,CAAC,MACHA,EAAQ,CAAC,IAAIM,EAAS,MAAM5oE,EAAM,UAAU,KAAK0nE,GAAiB,KAAM,KAAKC,GAAe,GAClGW,EAAQ,CAAC,IAAIM,EAAS,GACtBN,EAAQ,CAAC,IAAIM,EAAS,GACtB,KAAKP,GAAYC,CAAO;AAAA,IAC5B;AAAA,EACJ;AACH;ACrJD,MAAMO,KAAyB;AAUzB,SAAUC,GAAajmE,GAA2B;AACpD,MAAIA,EAAQ,QAAQ;AAChB,WAAOA,EAAQ,QAAQ;AAC3B,MAAWA,EAAQ,UAAU,SAAS,WAAW;AAC7C,WAAOA,EAAQ,eAAe,MAAM;AAExC,SAAOA,EAAQ,YAAY,UAAQ;AAC/B,UAAMkmE,IAAclmE,EAAQ;AAC5B,QAAIkmE;AACA,MAAAlmE,IAAUkmE;AAAA;AAEV;AAAA,EAER;AACA,SAAOlmE,EAAQ;AACnB;AAIA,MAAMmmE,KAAe;MAERC,GAAY;AAAA,EACrB,OAAO,WAAgC;AAAA,EAEvCC,KAAiC;AAAA,EACjC9F,KAAmC;AAAA,EACnCqB,KAAoC;AAAA,EAEpC8C,KAAoB;AAAA,EACpB4B,KAA2B;AAAA,EAC3BC,KAAyB;AAAA,EAEzBC,KAAqC;AAAA,EACrCC,KAAuC;AAAA,EAEvCC,KAA2B;AAAA,EAE3BhG;AAAA,EACAiG;AAAA,EACAC,KAAwB;AAAA,EAExB,cAAA;AACI,IAAAR,GAAa,WAAW;AAAA,EAC5B;AAAA,EAEA,MAAMS,GAAyB;AAC3B,SAAKR,KAAaQ,GAGlB,KAAKP,KAAW,IAAI7B,GAAQ,KAAK4B,EAAU;AAI3C,UAAM,EAAE,OAAA/iD,EAAA,IAAUyF,GAAS,KAAKs9C,IAAY;AAAA,MACxC,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU,CAAC,GAAG,CAAC;AAAA,MACf,cAAc;AAAA,MACd,aAAa;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,MACP,cAAc;AAAA,IAAA,CACjB;AACD,IAAI/iD,EAAM,UACN,KAAKo9C,KAAWp9C,GAChB,KAAKqjD,KAAkB,KAAKjG,GAAS,MAAM;AAAA,EAEnD;AAAA,EAEAoG,KAAwB;AACpB,IAAI,KAAKT,OACL,KAAKA,GAAW,iBAAiB,SAAS,KAAKU,GAAmB,KAAK,IAAI,CAAC,GAE5E,KAAKV,GAAW,iBAAiB,eAAe,KAAKW,GAAkB,KAAK,IAAI,CAAC,GACjF,KAAKX,GAAW,iBAAiB,cAAc,KAAKY,GAAiB,KAAK,IAAI,CAAC,GAE/E,KAAKZ,GAAW,iBAAiB,eAAe,KAAKa,GAAkB,KAAK,IAAI,CAAC,GACjF,KAAKb,GAAW,iBAAiB,eAAe,KAAKc,GAAkB,KAAK,IAAI,CAAC,GACjF,KAAKd,GAAW,iBAAiB,aAAa,KAAKe,GAAgB,KAAK,IAAI,CAAC;AAAA,EAErF;AAAA,EAEAC,KAA2B;AACvB,IAAI,KAAKhB,OACL,KAAKA,GAAW,oBAAoB,SAAS,KAAKU,GAAmB,KAAK,IAAI,CAAC,GAE/E,KAAKV,GAAW,oBAAoB,eAAe,KAAKW,GAAkB,KAAK,IAAI,CAAC,GACpF,KAAKX,GAAW,oBAAoB,cAAc,KAAKY,GAAiB,KAAK,IAAI,CAAC,GAElF,KAAKZ,GAAW,oBAAoB,eAAe,KAAKa,GAAkB,KAAK,IAAI,CAAC,GACpF,KAAKb,GAAW,oBAAoB,eAAe,KAAKc,GAAkB,KAAK,IAAI,CAAC,GACpF,KAAKd,GAAW,oBAAoB,aAAa,KAAKe,GAAgB,KAAK,IAAI,CAAC;AAAA,EAExF;AAAA,EAEA,IAAI,cAAW;AACX,WAAO,KAAK7G;AAAA,EAChB;AAAA,EAEA,IAAI,aAAU;AACV,WAAI,KAAK8F,KACE,CAAC,KAAKA,GAAW,aAAa,KAAKA,GAAW,YAAY,IAE9D,CAAC,GAAG,CAAC;AAAA,EAChB;AAAA,EAEA,MAAM,YAAY1F,GAAwB;AACtC,IAAI,KAAKJ,OAAiB,OACtB,KAAK,aAAa,EAAI,IAEtB,KAAKuG,GAAA,GAET,KAAKvG,KAAeI,GACpB,KAAKiB,KAAcjB,EAAY,YAG3B,KAAK0F,MAEL,KAAKA,GAAW,YAAY,KAAKzE,EAAW,GAIhD,MAAM0F,GAAI,SAAA,GAGV3G,EAAY,YAAA,GAIZ,KAAK2F,IAAU,OAAO,KAAK1E,EAAW,GAGtC,KAAK4E,KAAgB,MACrB,KAAKD,KAAgB,IACrB,KAAKE,KAAkB;AAAA,EAC3B;AAAA,EAEA,aAAac,IAAoB,IAAK;AAClC,IAAI,KAAKhH,OAAiB,SACjBgH,KACD,KAAKF,GAAA,GAET,KAAKf,IAAU,QAAA,GACX,KAAKD,MACL,KAAKA,GAAW,YAAY,KAAKzE,EAAmB,GAExD,KAAKA,KAAc,MACnB,KAAKrB,KAAe;AAAA,EAE5B;AAAA,EAEA,oBAAiB;AACb,SAAKiH,GAAA,GACL,KAAKC,GAAA;AAAA,EACT;AAAA,EAEAC,KAAiB;AACb,SAAK9F,IAAa,MAAM,eAAe,QAAQ,GAC3C,KAAKyE,MACL,KAAKA,GAAW,MAAM,YAAY,UAAU,SAAS;AAAA,EAE7D;AAAA,EAEAsB,KAAY;AACR,IAAI,KAAKjH,MACL,KAAKA,GAAS,MAAM,KAAA;AAAA,EAE5B;AAAA,EAEAkH,GAAa9xC,GAAal1B,IAAgB,IAAE;AACxC,QAAIk1B,MAAQ;AACR,WAAK6xC,GAAA;AAAA,aACE,KAAKjH,OACZ,KAAKA,GAAS,MAAM,WAAW5qC,CAAG,GAClC,KAAK4qC,GAAS,MAAM,KAAA,GAChB,KAAKiG,OACD,KAAKC,OAAkB,OACvB,KAAKD,GAAgB,UAAU,OAAO,KAAKC,EAAa,GACxD,KAAKA,KAAgB,KAErBhmE,MAAU,MAAI;AACd,YAAMinE,IAAe,WAAWjnE,CAAK;AACrC,WAAK+lE,GAAgB,UAAU,IAAIkB,CAAY,GAC/C,KAAKjB,KAAgBiB;AAAA,IACzB;AAAA,EAGZ;AAAA,EAEAC,GAAgBnxD,GAAcykB,IAA+B,QAAS;AAClE,IAAI,KAAKmlC,MACL,KAAKA,GAAa,YAAY5pD,GAAMykB,CAAM;AAAA,EAElD;AAAA,EAEA2sC,GAAgB3sC,GAAsBmkC,GAAe;AACjD,IAAAnkC,EAAO,SAASmkC,CAAM;AAAA,EAC1B;AAAA,EAEAyI,GAAiBC,GAAiC;AAC9C,IAAIA,KAAgB,KAAKzB,OAAkByB,MACvC,KAAKF,GAAgBE,GAAc,EAAI,GACvC,KAAKzB,KAAgByB,GACjBA,EAAa,WACb,KAAKL,GAAaK,EAAa,SAAS,MAAM,GAElD,KAAKH,GAAgB,UAAUG,CAAY;AAAA,EAEnD;AAAA,EAEAR,KAAkB;AACd,IAAI,KAAKjB,OACL,KAAKuB,GAAgB,KAAKvB,IAAe,EAAK,GAC9C,KAAKA,KAAgB,MACrB,KAAKsB,GAAgB,UAAU;AAAA,EAEvC;AAAA,EAEAI,GAAmBC,GAA4B;AAC3C,SAAKX,GAAA,GACDW,MAAmB,SACnBA,EAAe,OAAO,EAAI,GAC1B,KAAK1B,KAAkB0B,GACvB,KAAKL,GAAgB,UAAUK,CAAc;AAAA,EAErD;AAAA,EAEAX,KAAoB;AAChB,IAAI,KAAKf,OACL,KAAKqB,GAAgB,YAAY,KAAKrB,EAAe,GACrD,KAAKA,GAAgB,OAAO,EAAK,GACjC,KAAKA,KAAkB;AAAA,EAE/B;AAAA,EAEAM,GAAmB5pE,GAAiB;AAChC,UAAM6C,IAAU7C,EAAM;AACtB,QACI,KAAKojE,OAAiB,QACtB,CAAC,KAAKqB,IAAa,SAAS5hE,CAAO;AAAA,IAElC,KAAKumE,MAAiB,KAAK,QAAQ,KAAKG,KAAmBV;AAE5D;AAEJ,UAAMoC,IAAgB,KAAK7H,GAAa,WAAW0F,GAAajmE,CAAO,CAAC;AACxE,SAAKqoE,GAAqBlrE,GAAO6C,GAASooE,CAAa;AAAA,EAC3D;AAAA,EAEAC,GAAqB3C,GAAoB4C,GAA8BF,GAAgC;AACnG,QAAIG,IAAa;AACjB,IAAI,KAAK9B,OAAoB,SAEzB8B,IAAaH,MAAkB,KAAK3B,IACpC,KAAKe,GAAA,IAEL,CAACe,KAAcH,KAAiBA,MAAkB,KAAK5B,MAEvD,KAAK0B,GAAmBE,CAAa;AAAA,EAE7C;AAAA,EAEAI,GAAmBxoE,GAA2B;AAC1C,WACIA,MAAY,KAAK4hE,MACjB5hE,EAAQ,OAAOmmE,MACf,CAAC,KAAKvE,IAAa,SAAS5hE,CAAO;AAAA,EAE3C;AAAA,EAEAgnE,GAAkB7pE,GAAmB;AACjC,QAAI,KAAKojE,OAAiB;AACtB;AAEJ,UAAMvgE,IAAU7C,EAAM,QAChBsrE,IAAgB,KAAKlI,GAAa,WAAW0F,GAAajmE,CAAO,CAAC;AAExE,QAAI,KAAKwoE,GAAmBxoE,CAAO,GAAG;AAClC,WAAK2nE,GAAA,GACD,KAAKnB,MAAiBiC,MAAkB,KAAKjC,MAC7C,KAAKiB,GAAA;AAET;AAAA,IACJ;AAEA,IAAI,KAAKjB,MAAiBiC,MAAkB,KAAKjC,MAC7C,KAAKiB,GAAA,GAELgB,KACA,KAAKT,GAAiBS,CAAa;AAAA,EAE3C;AAAA,EAEAxB,GAAiB9pE,GAAmB;AAChC,UAAM6C,IAAU7C,EAAM;AACtB,KAAI6C,MAAY,KAAK4hE,MAAe,CAAC,KAAKA,IAAa,SAAS5hE,CAAO,MAC/D,KAAKwmE,MACL,KAAKiB,GAAA;AAAA,EAGjB;AAAA,EAEAP,GAAkB/pE,GAAmB;AACjC,SAAKopE,KAAgB,IACrB,KAAKG,KAAmB,KAAK,IAAA,GAC7B,KAAK9E,IAAa,MAAM,eAAe,QAAQ,GAC/C,KAAKyE,IAAY,MAAM,YAAY,UAAU,MAAM,GAEnD,KAAKC,GAAS,YAAYnpE,CAAK,GAC/B,KAAKunE,KAAW;AAAA,EACpB;AAAA,EAEAyC,GAAkBhqE,GAAmB;AACjC,QAAI,KAAKunE,IAAU;AAEf,WAAK6B,KAAgB,KAAKD,GAAS,YAAYnpE,CAAK,KAAK,KAAKopE;AAC9D;AAAA,IACJ;AACA,SAAKA,KAAgB;AAAA,EACzB;AAAA,EAEAa,GAAgBjqE,GAAmB;AAC/B,QAAI,KAAKojE,OAAiB,QAGtB,KAAKmE,IAAU;AAEf,WAAK4B,GAAS,UAAUnpE,CAAK,GAC7B,KAAKunE,KAAW,IAChB,KAAKgD,GAAA;AACL;AAAA,IACJ;AAAA,EACJ;;;;;;;;;;;;ACvWJ,UAAM3uD,IAAQ2vD,GAORC,IAAcrB,GAAI,mBAAA;AAExB,IAAIqB,KACYA,EAAY,WAAW,IAE/B,IAAIC,EAAQ;AAMpB,UAAMC,IAAavB,GAAI,IAAI,IAAI;AAE/B,QAAI3G;AAEJ,UAAMyB,IAA6B,IAAIgE,GAAA,GAIjCz7C,IAAOm+C,GAOPC,IAAc,YAAY;AAC5B,UAAIhwD,EAAM,eAAe;AACrB,QAAA4nD,IAAc,IAAIgB,GAAYS,CAAY,GAC1C,MAAMzB,EAAY,UAAA;AAAA;AAElB,YAAI;AACA,UAAAA,IAAc,IAAIgB,GAAYS,GAAcrpD,EAAM,YAAYA,EAAM,aAAaA,EAAM,OAAO,GAC9F,MAAM4nD,EAAY,UAAA;AAAA,QACtB,SAAQvnC,GAAK;AACT,UAAAzO,EAAK,SAAS,2BAA2ByO,CAAG,GAAG;AAAA,QACnD;AAAA,IAER;AAIA,WAAAkuC,GAAI;AAAA,MACA,MAAMvuD,EAAM;AAAA,MACZ,YAAY;AACR,cAAMgwD,EAAA;AAAA,MACV;AAAA,IAAA,GAKJzB,GAAI,UAAU,YAAY;AACtB,MAAIuB,EAAW,UACXzG,EAAa,MAAMyG,EAAW,KAAK,GACnC,MAAME,EAAA;AAAA,IAEd,CAAC,GAIDC,GAA4B,UAAU,gBAAgB,CAAC7rE,MAAuB;AAC1E,MAAAwtB,EAAK,SAASxtB,EAAM,MAAM;AAAA,IAC9B,CAAC;;;;;;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,76,77,78,79,80,81,82]}