@tspro/ts-utils-lib 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/assert/index.ts","../src/utils/str/index.ts","../src/utils/obj/index.ts","../src/guard/index.ts","../src/utils/enum/index.ts","../src/web/cookies.ts","../src/web/device.ts","../src/utils/index.ts","../src/utils/arr/index.ts","../src/utils/dom/index.ts","../src/utils/math/index.ts","../src/core/base.ts","../src/core/stack.ts","../src/core/vec.ts","../src/core/rect.ts","../src/core/anchor-rect.ts","../src/core/LRU-cache.ts","../src/core/index-array.ts","../src/core/signed-index-array.ts","../src/core/default-array.ts","../src/core/uni-map.ts","../src/core/bi-map.ts","../src/core/tri-map.ts","../src/core/set.ts","../src/core/multi-container.ts","../src/core/linked-list.ts","../src/core/call-tracker.ts","../src/index.ts"],"names":["doesNotThrow","doesThrow","isArray","isArrayOrUndefined","isBigInt","isBoolean","isBooleanOrUndefined","isDeepEqual","isDefined","isEmptyArray","isEmptyArrayOrUndefined","isEmptyObject","isEmptyString","isEmptyStringOrUndefined","isEnumValue","isEnumValueOrUndefined","isEven","isFalse","isFalseOrUndefined","isFinite","isFloat","isFunction","isFunctionOrUndefined","isIncluded","isIndex","isInfinity","isInteger","isIntegerBetween","isIntegerBetweenExclusive","isIntegerEq","isIntegerGt","isIntegerGte","isIntegerLt","isIntegerLte","isIntegerOrUndefined","isMultipleOf","isNaNValue","isNeg","isNegInfinity","isNegZero","isNonEmptyArray","isNonEmptyArrayOrUndefined","isNonEmptyString","isNonEmptyStringOrUndefined","isNonNeg","isNonNull","isNonPos","isNull","isNullish","isNumber","isNumberBetween","isNumberBetweenExclusive","isNumberEq","isNumberGt","isNumberGte","isNumberLt","isNumberLte","isNumberOrUndefined","isNumericString","isObject","isObjectOrUndefined","isOdd","isPlainObject","isPos","isPosInfinity","isPosZero","isPowerOfTwo","isSafeInteger","isSafeNumber","isStrictEqual","isString","isStringOrUndefined","isTrue","isTrueOrUndefined","isTypedObject","isUndefined","isZero","require","str","repeatString","query","canvas","sum"],"mappings":"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","file":"index.js","sourcesContent":["import { Guard } from \"..\";\r\nimport { EnumObject } from \"../utils/enum\";\r\nimport { stringify } from \"../utils/str\";\r\n\r\nconst fmt = stringify;\r\n\r\nexport type ErrorConstructor = new (msg: string) => Error;\r\n\r\nlet errorConstructor: ErrorConstructor = Error;\r\n\r\nexport function setErrorClass(errorClass?: ErrorConstructor) {\r\n errorConstructor = errorClass ?? Error;\r\n}\r\n\r\nfunction _fail(...msgs: (string | undefined)[]): never {\r\n let msg = msgs.join(\", \");\r\n throw new errorConstructor(\"Assertion Failed!\" + (msg === \"\" ? \"\" : (\" \" + msg)));\r\n}\r\n\r\nexport function assert<T>(condition: T, msg?: string) {\r\n if (!condition) {\r\n _fail(msg);\r\n }\r\n}\r\n\r\nexport function require<T>(val: T | null | undefined, msg?: string): T {\r\n if (val == null) { // catches both null and undefined\r\n _fail(`Expected ${fmt(val)} not to be nullish`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function requireDefined<T>(val: T | undefined, msg?: string): T {\r\n if (val === undefined) {\r\n _fail(`Expected ${fmt(val)} not to be undefined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function requireElement<E>(index: unknown, array: ReadonlyArray<E>, msg?: string): E {\r\n if (!Guard.isIndex(index, array))\r\n _fail(`Expected ${index} to be index for array ${fmt(array)}`, msg);\r\n return array[index];\r\n}\r\n\r\nexport function fail(msg?: string): never {\r\n _fail(msg);\r\n}\r\n\r\nexport function isStrictEqual<T = any>(val1: T, val2: unknown, msg?: string): T {\r\n if (!Guard.isStrictEqual(val1, val2))\r\n _fail(`Expected ${fmt(val1)} to ne strict equal to ${val2}`, msg);\r\n return val1;\r\n}\r\n\r\nexport function isDeepEqual<T = any>(val1: T, val2: unknown, msg?: string): T {\r\n if (!Guard.isDeepEqual(val1, val2))\r\n _fail(`Expected ${fmt(val1)} to deep equal with ${fmt(val2)}`, msg);\r\n return val1;\r\n}\r\n\r\nexport function isUndefined(val: unknown, msg?: string): undefined {\r\n if (!Guard.isUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNull(val: unknown, msg?: string): null {\r\n if (!Guard.isNull(val))\r\n _fail(`Expected ${fmt(val)} to be null`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNullish(val: unknown, msg?: string): null | undefined {\r\n if (!Guard.isNullish(val))\r\n _fail(`Expected ${fmt(val)} to be null or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isDefined<T>(val: T, msg?: string): Exclude<T, undefined> {\r\n if (!Guard.isDefined(val)) {\r\n _fail(`Expected ${fmt(val)} to be defined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function isNonNull<T>(val: T, msg?: string): Exclude<T, null> {\r\n if (!Guard.isNonNull(val)) {\r\n _fail(`Expected ${fmt(val)} to be defined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function isObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isObject(val))\r\n _fail(`Expected ${fmt(val)} to be object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isEmptyObject(val))\r\n _fail(`Expected ${fmt(val)} to be empty object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPlainObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isPlainObject(val))\r\n _fail(`Expected ${fmt(val)} to be plain object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isObjectOrUndefined(val: unknown, msg?: string): Record<string, unknown> | undefined {\r\n if (!Guard.isObjectOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be object or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTypedObject<T extends object>(val: unknown, keys: (keyof T)[], msg?: string): Guard.HasProps<T> {\r\n if (!Guard.isTypedObject(val, keys))\r\n _fail(`Expected ${fmt(val)} to have keys ${fmt(keys)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isArray<T>(val: unknown, msg?: string): T[] {\r\n if (!Guard.isArray(val))\r\n _fail(`Expected ${fmt(val)} to be array`, msg);\r\n return val as T[];\r\n}\r\n\r\nexport function isArrayOrUndefined(val: unknown, msg?: string): val is unknown[] | undefined {\r\n if (!Guard.isArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be array or undefined`, msg);\r\n return true;\r\n}\r\n\r\nexport function isEmptyArray<T = any>(val: T[], msg?: string): asserts val is T[] {\r\n if (!Guard.isEmptyArray(val))\r\n _fail(`Expected ${fmt(val)} to be empty array`, msg);\r\n}\r\n\r\nexport function isNonEmptyArray<T = any>(val: T[], msg?: string): asserts val is T[] {\r\n if (!Guard.isNonEmptyArray(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty array`, msg);\r\n}\r\n\r\nexport function isEmptyArrayOrUndefined<T = any>(val: unknown, msg?: string): asserts val is T[] | undefined {\r\n if (!Guard.isEmptyArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be empty array or undefined`, msg);\r\n}\r\n\r\nexport function isNonEmptyArrayOrUndefined<T = any>(val: unknown, msg?: string): asserts val is T[] | undefined {\r\n if (!Guard.isNonEmptyArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty array or undefined`, msg);\r\n}\r\n\r\nexport function isString(val: unknown, msg?: string): string {\r\n if (!Guard.isString(val))\r\n _fail(`Expected ${fmt(val)} to be string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyString(val: unknown, msg?: string): \"\" {\r\n if (!Guard.isEmptyString(val))\r\n _fail(`Expected ${fmt(val)} to be empty string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonEmptyString(val: unknown, msg?: string): string {\r\n if (!Guard.isNonEmptyString(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isStringOrUndefined(val: unknown, msg?: string): string | undefined {\r\n if (!Guard.isStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyStringOrUndefined(val: unknown, msg?: string): \"\" | undefined {\r\n if (!Guard.isEmptyStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be empty string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonEmptyStringOrUndefined(val: unknown, msg?: string): string | undefined {\r\n if (!Guard.isNonEmptyStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBoolean(val: unknown, msg?: string): boolean {\r\n if (!Guard.isBoolean(val))\r\n _fail(`Expected ${fmt(val)} to be boolean`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBooleanOrUndefined(val: unknown, msg?: string): boolean | undefined {\r\n if (!Guard.isBooleanOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be boolean or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTrue(val: unknown, msg?: string): true {\r\n if (!Guard.isTrue(val))\r\n _fail(`Expected ${fmt(val)} to be true`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTrueOrUndefined(val: unknown, msg?: string): true | undefined {\r\n if (!Guard.isTrueOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be true or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFalse(val: unknown, msg?: string): false {\r\n if (!Guard.isFalse(val))\r\n _fail(`Expected ${fmt(val)} to be false`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFalseOrUndefined(val: unknown, msg?: string): false | undefined {\r\n if (!Guard.isFalseOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be false or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFunction<T extends (...args: any[]) => any>(val: unknown, msg?: string): T {\r\n if (!Guard.isFunction(val))\r\n _fail(`Expected ${fmt(val)} to be function`, msg);\r\n return val as T;\r\n}\r\n\r\nexport function isFunctionOrUndefined<T extends (...args: any[]) => any>(val: unknown, msg?: string): T | undefined {\r\n if (!Guard.isFunctionOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be function or undefined`, msg);\r\n return val as T | undefined;\r\n}\r\n\r\nexport function isEnumValue<E extends EnumObject>(val: unknown, enumObject: E, msg?: string): E[keyof E] {\r\n if (!Guard.isEnumValue(val, enumObject))\r\n _fail(`Expected ${fmt(val)} to be enum val`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEnumValueOrUndefined<E extends EnumObject>(val: unknown, enumObject: E, msg?: string): E[keyof E] | undefined {\r\n if (!Guard.isEnumValueOrUndefined(val, enumObject))\r\n _fail(`Expected ${fmt(val)} to be enum val or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumericString(val: unknown, msg?: string): string {\r\n if (!Guard.isNumericString(val))\r\n _fail(`Expected ${fmt(val)} to be numeric string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBigInt(val: unknown, msg?: string): BigInt {\r\n if (!Guard.isBigInt(val))\r\n _fail(`Expected ${fmt(val)} to be BigInt`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumber(val: unknown, msg?: string): number {\r\n if (!Guard.isNumber(val))\r\n _fail(`Expected ${fmt(val)} to be number`, msg);\r\n return val;\r\n}\r\n\r\nexport function isSafeNumber(val: unknown, msg?: string): number {\r\n if (!Guard.isSafeNumber(val))\r\n _fail(`Expected ${fmt(val)} to be safe number`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberOrUndefined(val: unknown, msg?: string): number | undefined {\r\n if (!Guard.isNumberOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be number or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberEq(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberEq(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number equal to ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberGt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberGt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number > ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberGte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberGte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number >= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberLt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberLt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number < ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberLte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberLte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number <= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberBetween(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isNumberBetween(val, min, max))\r\n _fail(`Expected number ${fmt(min)} <= ${fmt(val)} <= ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberBetweenExclusive(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isNumberBetweenExclusive(val, min, max))\r\n _fail(`Expected number ${fmt(min)} < ${fmt(val)} < ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFinite(val: unknown, msg?: string): number {\r\n if (!Guard.isFinite(val))\r\n _fail(`Expected ${fmt(val)} to be finite`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFloat(val: unknown, msg?: string): number {\r\n if (!Guard.isFloat(val))\r\n _fail(`Expected ${fmt(val)} to be float`, msg);\r\n return val;\r\n}\r\n\r\nexport function isInteger(val: unknown, msg?: string): number {\r\n if (!Guard.isInteger(val))\r\n _fail(`Expected ${fmt(val)} to be integer`, msg);\r\n return val;\r\n}\r\n\r\nexport function isSafeInteger(val: unknown, msg?: string): number {\r\n if (!Guard.isSafeInteger(val))\r\n _fail(`Expected ${fmt(val)} to be safe integer`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerOrUndefined(val: unknown, msg?: string): number | undefined {\r\n if (!Guard.isIntegerOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be integer or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerEq(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerEq(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer equal to ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerGt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerGt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer > ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerGte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerGte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer >= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerLt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerLt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer < ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerLte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerLte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer <= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerBetween(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isIntegerBetween(val, min, max))\r\n _fail(`Expected integer ${fmt(min)} <= ${fmt(val)} <= ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerBetweenExclusive(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isIntegerBetweenExclusive(val, min, max))\r\n _fail(`Expected integer ${fmt(min)} < ${fmt(val)} < ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNaNValue(val: unknown, msg?: string): number {\r\n if (!Guard.isNaNValue(val))\r\n _fail(`Expected ${fmt(val)} to be NaN`, msg);\r\n return NaN;\r\n}\r\n\r\nexport function isInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be +-Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPosInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isPosInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be +Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNegInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isNegInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be -Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPos(val: unknown, msg?: string): number {\r\n if (!Guard.isPos(val))\r\n _fail(`Expected ${fmt(val)} to be positive (> 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNeg(val: unknown, msg?: string): number {\r\n if (!Guard.isNeg(val))\r\n _fail(`Expected ${fmt(val)} to be negative (< 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonPos(val: unknown, msg?: string): number {\r\n if (!Guard.isNonPos(val))\r\n _fail(`Expected ${fmt(val)} to be non-positive (<= 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonNeg(val: unknown, msg?: string): number {\r\n if (!Guard.isNonNeg(val))\r\n _fail(`Expected ${fmt(val)} to be non-negative (>= 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isZero(val: unknown, msg?: string): number {\r\n if (!Guard.isZero(val))\r\n _fail(`Expected ${fmt(val)} to be 0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPosZero(val: unknown, msg?: string): number {\r\n if (!Guard.isPosZero(val))\r\n _fail(`Expected ${fmt(val)} to be +0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNegZero(val: unknown, msg?: string): number {\r\n if (!Guard.isNegZero(val))\r\n _fail(`Expected ${fmt(val)} to be -0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isOdd(val: unknown, msg?: string): number {\r\n if (!Guard.isOdd(val))\r\n _fail(`Expected ${fmt(val)} to odd`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEven(val: unknown, msg?: string): number {\r\n if (!Guard.isEven(val))\r\n _fail(`Expected ${fmt(val)} to even`, msg);\r\n return val;\r\n}\r\n\r\nexport function isMultipleOf(val: unknown, base: unknown, msg?: string): number {\r\n if (!Guard.isMultipleOf(val, base))\r\n _fail(`Expected ${fmt(val)} to be divisble bu ${fmt(base)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPowerOfTwo(val: unknown, msg?: string): number {\r\n if (!Guard.isPowerOfTwo(val))\r\n _fail(`Expected ${fmt(val)} to be power of two`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIncluded<T>(val: unknown, arr: ReadonlyArray<T> | Set<T>, msg?: string): T {\r\n if (!Guard.isIncluded(val, arr))\r\n _fail(`Expected ${fmt(val)} to be included in ${fmt(arr)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIndex<T>(index: unknown, msg?: string): number;\r\nexport function isIndex<T>(index: unknown, arr: ReadonlyArray<T>, msg?: string): number;\r\nexport function isIndex<T>(...args: unknown[]): number {\r\n const index = args.shift() as unknown;\r\n const msg = Guard.isString(args[args.length - 1]) ? (args.pop() as string) : undefined;\r\n const arr = (Guard.isArray(args[0]) ? args.shift() : undefined) as ReadonlyArray<T> | undefined;\r\n if (!Guard.isIndex(index, arr)) {\r\n if (arr === undefined)\r\n _fail(`Expected ${index} to be index`, msg);\r\n else\r\n _fail(`Expected ${index} to be index for ${fmt(arr)}`, msg);\r\n }\r\n return index;\r\n}\r\n\r\nexport function doesThrow(throwTestFn: () => void, msg?: string): true {\r\n if (!Guard.doesThrow(throwTestFn))\r\n _fail(`Expected to throw`, msg);\r\n return true;\r\n}\r\n\r\nexport function doesNotThrow(throwTestFn: () => void, msg?: string): true {\r\n if (!Guard.doesNotThrow(throwTestFn))\r\n _fail(`Expected to throw`, msg);\r\n return true;\r\n}\r\n","import { getCtorName } from \"../obj\";\r\nimport { isString, isArray, isInteger, isNaNValue, isFinite } from \"../../guard\";\r\nexport { isString }\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * Count number of char in string.\r\n * @param str\r\n * @param ch - must be single char.\r\n * @returns number of chars in string.\r\n */\r\nexport function charCount(str: string, ch: string): number {\r\n if (ch.length !== 1 || str.length === 0) return 0;\r\n\r\n let count = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n if (str[i] === ch) count++;\r\n }\r\n\r\n return count;\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n\r\nexport function stringify(value: any, maxDepth = 5, seen = new WeakSet()): string {\r\n // --- Primitive & simple values ---\r\n if (value === null) return \"null\";\r\n if (value === undefined) return \"undefined\";\r\n\r\n const t = typeof value;\r\n switch (t) {\r\n case \"boolean\": return value ? \"true\" : \"false\";\r\n case \"number\":\r\n if (isNaNValue(value)) return \"NaN\";\r\n if (!isFinite(value))\r\n return value < 0 ? \"-Infinity\" : \"Infinity\";\r\n return value.toString();\r\n case \"bigint\": return `${value}n`;\r\n case \"string\": return `\"${value}\"`;\r\n case \"symbol\": return value.description\r\n ? `Symbol(${value.description})`\r\n : \"Symbol()\";\r\n case \"function\":\r\n return `[Function${value.name ? ` ${value.name}` : \"\"}]`;\r\n }\r\n\r\n // Prevent infinite recursion\r\n if (seen.has(value))\r\n return \"[Circular]\";\r\n if (maxDepth <= 0)\r\n return \"[Depth limit]\";\r\n\r\n maxDepth--;\r\n\r\n // Mark as seen before descending\r\n seen.add(value);\r\n\r\n const strfy = (v: any): string => stringify(v, maxDepth, seen);\r\n\r\n // --- Containers ---\r\n if (isArray(value)) {\r\n const inner = value.map(v => strfy(v)).join(\", \");\r\n return inner.length === 0 ? \"[ ]\" : `[ ${inner} ]`;\r\n }\r\n\r\n // --- Typed arrays ---\r\n if (ArrayBuffer.isView(value)) {\r\n // covers all TypedArrays + DataView\r\n if (value instanceof DataView)\r\n return `DataView(${value.byteLength})`;\r\n const inner = Array.from(value as any).map(v => strfy(v)).join(\", \");\r\n return `${value.constructor.name}[ ${inner} ]`;\r\n }\r\n\r\n // --- ArrayBuffer ---\r\n if (value instanceof ArrayBuffer)\r\n return `ArrayBuffer(${value.byteLength})`;\r\n\r\n // --- Map / Set ---\r\n if (value instanceof Map) {\r\n const entries = Array.from(value.entries())\r\n .map(([k, v]) => `${strfy(k)} => ${strfy(v)}`)\r\n .join(\", \");\r\n return entries.length === 0\r\n ? `Map(${value.size}){ }`\r\n : `Map(${value.size}){ ${entries} }`;\r\n }\r\n\r\n if (value instanceof Set) {\r\n const entries = Array.from(value.values())\r\n .map(v => strfy(v))\r\n .join(\", \");\r\n return entries.length === 0\r\n ? `Set(${value.size}){ }`\r\n : `Set(${value.size}){ ${entries} }`;\r\n }\r\n\r\n if (value instanceof WeakMap)\r\n return \"WeakMap{ ? }\";\r\n\r\n if (value instanceof WeakSet)\r\n return \"WeakSet{ ? }\";\r\n\r\n // --- Built-ins ---\r\n if (value instanceof Date)\r\n return `Date(\"${value.toISOString()}\")`;\r\n\r\n if (value instanceof RegExp)\r\n return value.toString();\r\n\r\n if (value instanceof Error)\r\n return `${value.name}(\"${value.message}\")`;\r\n\r\n if (value instanceof Promise)\r\n return \"Promise{ ? }\";\r\n\r\n if (value instanceof URL)\r\n return `URL(\"${value.href}\")`;\r\n\r\n if (value instanceof URLSearchParams)\r\n return `URLSearchParams(\"${value.toString()}\")`;\r\n\r\n // --- Common singletons ---\r\n if (value === Math) return \"Math\";\r\n if (value === JSON) return \"JSON\";\r\n if (value === Reflect) return \"Reflect\";\r\n if (value === Intl) return \"Intl\";\r\n\r\n // --- Custom toString method ---\r\n const hasCustomToString =\r\n typeof value?.toString === \"function\" &&\r\n value.toString !== Object.prototype.toString;\r\n\r\n if (hasCustomToString) {\r\n try {\r\n const str = value.toString();\r\n // Optional: skip if it’s just \"[object Object]\"\r\n if (!/^\\[object .+\\]$/.test(str)) return str;\r\n }\r\n catch { /* ignore broken toString() */ }\r\n }\r\n\r\n // --- Plain object or class instance ---\r\n if (t === \"object\") {\r\n const ctorName = getCtorName(value);\r\n const entries = Object.entries(value).map(\r\n ([key, val]) => `${strfy(key)}: ${strfy(val)}`\r\n );\r\n if (entries.length === 0) return `${ctorName}{ }`;\r\n return `${ctorName}{ ${entries.join(\", \")} }`;\r\n }\r\n\r\n // --- Fallback ---\r\n return String(value);\r\n}\r\n\r\n/**\r\n * Splits a string into words by capital letters (A–Z).\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByCaps(\"HelloWorld\"); // [\"Hello\", \"World\"]\r\n * splitByCaps(\"XMLHttpRequest\"); // [\"XML\", \"Http\", \"Request\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @returns An array of string segments split at capital letters.\r\n */\r\nexport function splitByCaps(str: string): string[] {\r\n return str.split(/(?=[A-Z])/).filter(x => !!x);\r\n}\r\n\r\n/**\r\n * Splits a string by any of the given substrings.\r\n * Each splitter is treated literally (special regex characters are escaped).\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByStrings(\"one--two__three\", \"--\", \"__\");\r\n * // [\"one\", \"two\", \"three\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @param splitters - One or more substrings to split by.\r\n * @returns An array of string segments split at any of the given substrings.\r\n */\r\nexport function splitByStrings(str: string, ...splitters: string[]): string[] {\r\n if (splitters.length === 0) return [str];\r\n\r\n // Escape regex special characters in splitters\r\n const escaped = splitters.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\r\n\r\n // Build a regex that matches any of them\r\n const regex = new RegExp(escaped.join('|'), 'g');\r\n\r\n // Split and filter out empty strings if desired\r\n return str.split(regex);\r\n}\r\n\r\n/**\r\n * Splits a string by any of the given characters.\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByChars(\"a,b;c\", \",;\"); \r\n * // [\"a\", \"b\", \"c\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @param splitters - A string containing one or more characters to split by.\r\n * @returns An array of string segments split at any of the given characters.\r\n */\r\nexport function splitByChars(str: string, splitters: string): string[] {\r\n return splitByStrings(str, ...splitters.split(\"\"));\r\n}\r\n","import { isArray, isObject } from \"../../guard\";\r\n\r\nexport { isObject }\r\n\r\n/**\r\n * ```ts\r\n * // Gives type Record<string, unknown>\r\n * hasProperties(obj, [\"a\", \"b\"]);\r\n * \r\n * // Gives type Record<\"a\" | \"b\", unknown>\r\n * hasProperties(obj, [\"a\", \"b\"] as const);\r\n * ```\r\n */\r\nexport function hasProperties<T extends readonly string[]>(obj: unknown, props: T | string[]): obj is Record<T[number], unknown> {\r\n return isObject(obj) && props.every(p => p in obj);\r\n}\r\n\r\nexport function deepEqual<T>(a: T, b: T): boolean {\r\n if (a === b) return true;\r\n\r\n // Handle null (typeof null === 'object')\r\n if (a === null || b === null) return false;\r\n\r\n // Handle non-objects (primitives, functions, etc.)\r\n if (typeof a !== 'object' || typeof b !== 'object') return false;\r\n\r\n // Arrays\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((val, i) => deepEqual(val, b[i]));\r\n }\r\n\r\n // If one is array and the other isn’t\r\n if (Array.isArray(a) !== Array.isArray(b)) return false;\r\n\r\n // Objects\r\n const keysA = Object.keys(a) as (keyof T)[];\r\n const keysB = Object.keys(b) as (keyof T)[];\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n for (const key of keysA) {\r\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\r\n if (!deepEqual(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function getCtorName(obj: any): string {\r\n if (obj === null) return \"null\";\r\n if (isArray(obj)) return \"Array\";\r\n if (typeof obj !== \"object\") return typeof obj;\r\n\r\n const tag = Object.prototype.toString.call(obj).slice(8, -1);\r\n return tag || \"Object\";\r\n}\r\n","import { deepEqual } from \"../utils/obj\";\r\nimport { EnumObject, getEnumValues } from \"../utils/enum\";\r\n\r\nexport type HasProps<T extends object> = T extends Record<string, unknown> ? T : never;\r\n\r\nexport function isStrictEqual(val1: unknown, val2: unknown): boolean {\r\n return val1 === val2;\r\n}\r\n\r\nexport function isDeepEqual(val1: unknown, val2: unknown): boolean {\r\n return deepEqual(val1, val2);\r\n}\r\n\r\nexport function isUndefined(val: unknown): val is undefined {\r\n return val === undefined;\r\n}\r\n\r\nexport function isNull(val: unknown): val is null {\r\n return val === null;\r\n}\r\n\r\nexport function isNullish(val: unknown): val is null | undefined {\r\n return val === undefined || val === null;\r\n}\r\n\r\nexport function isDefined<T>(val: T): val is Exclude<T, undefined> {\r\n return val !== undefined;\r\n}\r\n\r\nexport function isNonNull<T>(val: T): val is Exclude<T, null> {\r\n return val !== null;\r\n}\r\n\r\nexport function isObject(val: unknown): val is Record<string, unknown> {\r\n return typeof val === \"object\" && val !== null && !isArray(val);\r\n}\r\n\r\nexport function isEmptyObject(val: unknown): val is Record<string, never> {\r\n return isObject(val) && Object.keys(val).length === 0;\r\n}\r\nexport function isObjectOrUndefined(val: unknown): val is Record<string, unknown> | undefined {\r\n return val === undefined || isObject(val);\r\n}\r\n\r\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\r\n if (!isObject(val)) return false;\r\n const proto = Object.getPrototypeOf(val);\r\n return proto === Object.prototype || proto === null;\r\n}\r\n\r\nexport function isTypedObject<T extends object>(val: unknown, keys: (keyof T)[]): val is HasProps<T> {\r\n return isObject(val) && keys.every(k => k in val);\r\n}\r\n\r\nfunction isSet<T>(val: unknown): val is Set<T> {\r\n return val instanceof Set;\r\n}\r\n\r\nexport function isArray<T>(arr: T[] | unknown): arr is T[] {\r\n return !!arr && Object.prototype.toString.call(arr) === \"[object Array]\";\r\n}\r\n\r\nexport function isArrayOrUndefined(arr: unknown): arr is unknown[] | undefined {\r\n return arr === undefined || isArray(arr);\r\n}\r\n\r\nexport function isEmptyArray<T>(arr: T[] | unknown): arr is T[] & { length: 0 } { // Or just [] (without T)\r\n return isArray(arr) && arr.length === 0;\r\n}\r\n\r\nexport function isNonEmptyArray<T>(arr: T[] | unknown): arr is T[] {\r\n return isArray(arr) && arr.length > 0;\r\n}\r\n\r\nexport function isEmptyArrayOrUndefined<T>(arr: T[] | unknown): arr is T[] | undefined {\r\n return (isArray(arr) && arr.length === 0) || arr === undefined;\r\n}\r\n\r\nexport function isNonEmptyArrayOrUndefined<T>(arr: T[] | unknown): arr is T[] | undefined {\r\n return (isArray(arr) && arr.length > 0) || arr === undefined;\r\n}\r\n\r\nexport function isString(val: unknown): val is string {\r\n return typeof val === \"string\";\r\n}\r\n\r\nexport function isEmptyString(val: unknown): val is \"\" {\r\n return typeof val === \"string\" && val.length === 0;\r\n}\r\n\r\nexport function isNonEmptyString(val: unknown): val is string {\r\n return typeof val === \"string\" && val.length > 0;\r\n}\r\n\r\nexport function isStringOrUndefined(val: unknown): val is string | undefined {\r\n return val === undefined || typeof val === \"string\";\r\n}\r\n\r\nexport function isEmptyStringOrUndefined(val: unknown): val is \"\" | undefined {\r\n return (typeof val === \"string\" && val.length === 0) || val === undefined;\r\n}\r\n\r\nexport function isNonEmptyStringOrUndefined(val: unknown): val is string | undefined {\r\n return (typeof val === \"string\" && val.length > 0) || val === undefined;\r\n}\r\n\r\nexport function isBoolean(val: unknown): val is boolean {\r\n return typeof val === \"boolean\";\r\n}\r\n\r\nexport function isBooleanOrUndefined(val: unknown): val is boolean | undefined {\r\n return val === undefined || typeof val === \"boolean\";\r\n}\r\n\r\nexport function isTrue(val: unknown): val is true {\r\n return val === true;\r\n}\r\n\r\nexport function isTrueOrUndefined(val: unknown): val is true | undefined {\r\n return val === true || val === undefined;\r\n}\r\n\r\nexport function isFalse(val: unknown): val is false {\r\n return val === false;\r\n}\r\n\r\nexport function isFalseOrUndefined(val: unknown): val is false | undefined {\r\n return val === false || val === undefined;\r\n}\r\n\r\nexport function isFunction<T extends (...args: any[]) => any>(val: unknown): val is T {\r\n return typeof val === \"function\";\r\n}\r\n\r\nexport function isFunctionOrUndefined(val: unknown): val is ((...args: any[]) => any) | undefined {\r\n return val === undefined || typeof val === \"function\";\r\n}\r\n\r\nexport function isEnumValue<E extends EnumObject>(val: unknown, enumObj: E): val is E[keyof E] {\r\n return getEnumValues(enumObj).some(v => v === val);\r\n}\r\n\r\nexport function isEnumValueOrUndefined<E extends EnumObject>(val: unknown, enumObj: E): val is E[keyof E] | undefined {\r\n return val === undefined || getEnumValues(enumObj).some(v => v === val);\r\n}\r\n\r\nexport function isNumericString(val: unknown): val is string {\r\n if (typeof val !== \"string\" || val.trim() === \"\") return false;\r\n const n = +val;\r\n return Number.isFinite(n);\r\n}\r\n\r\nexport function isBigInt(val: unknown): val is BigInt {\r\n return typeof val === \"bigint\";\r\n}\r\n\r\nexport function isNumber(val: unknown): val is number {\r\n return typeof val === \"number\";\r\n}\r\n\r\nexport function isSafeNumber(val: unknown): val is number {\r\n return isNumber(val) && Number.isSafeInteger(val);\r\n}\r\n\r\nexport function isNumberOrUndefined(val: unknown): val is number | undefined {\r\n return typeof val === \"number\" || val === undefined;\r\n}\r\n\r\nexport function isNumberEq(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && val === ref;\r\n}\r\n\r\nexport function isNumberGt(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val > ref;\r\n}\r\n\r\nexport function isNumberGte(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val >= ref;\r\n}\r\n\r\nexport function isNumberLt(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val < ref;\r\n}\r\n\r\nexport function isNumberLte(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val <= ref;\r\n}\r\n\r\nexport function isNumberBetween(val: unknown, min: unknown, max: unknown): val is number {\r\n return isNumber(val) && isNumber(min) && isNumber(max) && val >= min && val <= max;\r\n}\r\n\r\nexport function isNumberBetweenExclusive(val: unknown, min: unknown, max: unknown): val is number {\r\n return isNumber(val) && isNumber(min) && isNumber(max) && val > min && val < max;\r\n}\r\n\r\nexport function isFinite(val: unknown): val is number {\r\n return typeof val === \"number\" && Number.isFinite(val);\r\n}\r\n\r\nexport function isFloat(val: unknown): val is number {\r\n return isFinite(val) && !isInteger(val);\r\n}\r\n\r\nexport function isInteger(val: unknown): val is number {\r\n return typeof val === \"number\" && isFinite(val) && val === Math.trunc(val);\r\n}\r\n\r\nexport function isSafeInteger(val: unknown): val is number {\r\n return isInteger(val) && Number.isSafeInteger(val);\r\n}\r\n\r\nexport function isIntegerOrUndefined(val: unknown): val is number | undefined {\r\n return (typeof val === \"number\" && isFinite(val) && val === Math.trunc(val)) || val === undefined;\r\n}\r\n\r\nexport function isIntegerEq(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && val === ref;\r\n}\r\n\r\nexport function isIntegerGt(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val > ref;\r\n}\r\n\r\nexport function isIntegerGte(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val >= ref;\r\n}\r\n\r\nexport function isIntegerLt(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val < ref;\r\n}\r\n\r\nexport function isIntegerLte(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val <= ref;\r\n}\r\n\r\nexport function isIntegerBetween(val: unknown, min: unknown, max: unknown): val is number {\r\n return isInteger(val) && isNumber(min) && isNumber(max) && val >= min && val <= max;\r\n}\r\n\r\nexport function isIntegerBetweenExclusive(val: unknown, min: unknown, max: unknown): val is number {\r\n return isInteger(val) && isNumber(min) && isNumber(max) && val > min && val < max;\r\n}\r\n\r\nexport function isNaNValue(val: unknown): val is number {\r\n return typeof val === \"number\" && Number.isNaN(val);\r\n}\r\n\r\nexport function isInfinity(val: unknown): val is number {\r\n return val === Infinity || val === -Infinity;\r\n}\r\n\r\nexport function isPosInfinity(val: unknown): val is number {\r\n return val === Infinity;\r\n}\r\n\r\nexport function isNegInfinity(val: unknown): val is number {\r\n return val === -Infinity;\r\n}\r\n\r\nexport function isPos(val: unknown): val is number {\r\n return typeof val === \"number\" && val > 0;\r\n}\r\n\r\nexport function isNeg(val: unknown): val is number {\r\n return typeof val === \"number\" && val < 0;\r\n}\r\n\r\nexport function isNonPos(val: unknown): val is number {\r\n return typeof val === \"number\" && val <= 0;\r\n}\r\n\r\nexport function isNonNeg(val: unknown): val is number {\r\n return typeof val === \"number\" && val >= 0;\r\n}\r\n\r\nexport function isZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0;\r\n}\r\n\r\nexport function isPosZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0 && (1 / val === Infinity);\r\n}\r\n\r\nexport function isNegZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0 && (1 / val === -Infinity);\r\n}\r\n\r\nexport function isOdd(val: unknown): val is number {\r\n return isInteger(val) && Math.abs(val) % 2 === 1;\r\n}\r\n\r\nexport function isEven(val: unknown): val is number {\r\n return isInteger(val) && val % 2 === 0;\r\n}\r\n\r\nexport function isMultipleOf(val: unknown, base: unknown): val is number {\r\n return typeof val === \"number\" && typeof base === \"number\" && (val % base === 0);\r\n}\r\n\r\nexport function isPowerOfTwo(val: unknown): val is number {\r\n return isInteger(val) && val > 0 && (val & (val - 1)) === 0;\r\n}\r\n\r\nexport function isIncluded<T>(val: unknown, container: ReadonlyArray<T> | Set<T>): val is T {\r\n if (isArray(container)) {\r\n return container.includes(val as T);\r\n }\r\n if (isSet(container)) {\r\n return container.has(val as T);\r\n }\r\n return false;\r\n}\r\n\r\nexport function isIndex<T>(index: unknown, array?: ReadonlyArray<T>): index is number {\r\n return isArray(array)\r\n ? isIntegerBetween(index, 0, array.length - 1)\r\n : isIntegerGte(index, 0);\r\n}\r\n\r\nexport function doesThrow(throwTestFn: () => void): boolean {\r\n try { throwTestFn(); return false; }\r\n catch (err) { return true; }\r\n}\r\n\r\nexport function doesNotThrow(throwTestFn: () => void): boolean {\r\n try { throwTestFn(); return true; }\r\n catch (err) { return false; }\r\n}\r\n\r\nexport function tryOr<TRY_RVAL, OR_RVAL>(tryFn: () => TRY_RVAL, orVal: OR_RVAL | (() => OR_RVAL)): TRY_RVAL | OR_RVAL {\r\n try {\r\n return tryFn();\r\n }\r\n catch (err) {\r\n return isFunction(orVal) ? orVal() : orVal;\r\n }\r\n}\r\n","\r\nexport type EnumObject = Record<string, string | number>;\r\nexport type EnumKey<E extends EnumObject> = keyof E;\r\nexport type EnumValue<E extends EnumObject> = E[EnumKey<E>];\r\n\r\nexport function getEnumKeys<E extends EnumObject>(e: E): EnumKey<E>[] {\r\n return Object.keys(e).filter(k => isNaN(Number(k))) as EnumKey<E>[];\r\n}\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): EnumValue<E>[] {\r\n return getEnumKeys(e).map(k => e[k]);\r\n}\r\n\r\nexport function getEnumEntries<E extends EnumObject>(e: E): [keyof E, EnumValue<E>][] {\r\n return getEnumKeys(e).map(k => [k, e[k]] as [keyof E, EnumValue<E>]);\r\n}\r\n\r\nexport function getEnumKey<E extends EnumObject>(e: E, value: EnumValue<E>): keyof E | undefined {\r\n return getEnumKeys(e).find(k => e[k] === value);\r\n}\r\n\r\nexport function forEachEnum<E extends EnumObject>(\r\n e: E,\r\n callback: (key: keyof E, value: E[keyof E]) => void\r\n): void {\r\n for (const [k, v] of getEnumEntries(e)) callback(k, v);\r\n}\r\n","const ConsentCookieName = \"ConsentCookie\";\r\n\r\nenum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n}\r\n\r\nlet _consent: ConsentState | undefined;\r\nlet _expires: Date | undefined;\r\n\r\nlet str = _read(ConsentCookieName);\r\n_consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\nfunction _getCookieList(): string[] {\r\n if (typeof document === \"undefined\")\r\n return [];\r\n\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n}\r\n\r\nfunction _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n if (typeof document !== \"undefined\")\r\n document.cookie = cookie;\r\n\r\n return value;\r\n}\r\n\r\nfunction _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getCookieList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n}\r\n\r\nfunction _erase(name: string) {\r\n if (typeof document !== \"undefined\")\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n}\r\n\r\n/**\r\n * Set expiration time for cookies.\r\n * @param days - Number of days until cookies expire.\r\n */\r\nexport function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n}\r\n\r\n/**\r\n * Is consent pending (cookies not yet accepted)?\r\n * @returns \r\n */\r\nexport function isConsentPending() {\r\n return _consent === undefined;\r\n}\r\n\r\n/**\r\n * Consent cookies.\r\n */\r\nexport function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n}\r\n\r\n/**\r\n * Decline cookies. This will reject all cookies than a single flags that cookies have been declined.\r\n */\r\nexport function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n}\r\n\r\n/**\r\n * Save a cookie.\r\n * @param name - Cookie name.\r\n * @param value - Cookie value, can be string, number or boolean.\r\n * @returns - Returns given value.\r\n */\r\nexport function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept)\r\n _save(name, value);\r\n return value;\r\n}\r\n\r\n/**\r\n * Read a string cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found.\r\n * @returns - String cookie value.\r\n */\r\nexport function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept)\r\n return _read(name, defaultValue) ?? defaultValue;\r\n else\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Read an integer cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found.\r\n * @returns - Integer cookie valus.\r\n */\r\nexport function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\n/**\r\n * Read a boolean cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found. \r\n * @returns - Boolean cookie value.\r\n */\r\nexport function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\n/**\r\n * Erase cookie.\r\n * @param name - Name of cookie to be erased.\r\n */\r\nexport function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName)\r\n _erase(name);\r\n}\r\n\r\n/**\r\n * Erase all cookies.\r\n */\r\nexport function eraseAll() {\r\n if (typeof document !== \"undefined\")\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n}\r\n\r\n","import { Assert, Guard } from \"..\";\r\n\r\nconst CSS_UNIT_RE = /^\\s*([+-]?\\d*\\.?\\d+)\\s*(px|cm|mm|in|pt|pc|em|rem|vw|vh|vmin|vmax|%)?\\s*$/;\r\n\r\nexport type CssUnit =\r\n | \"px\" | \"cm\" | \"mm\" | \"in\"\r\n | \"pt\" | \"pc\"\r\n | \"em\" | \"rem\"\r\n | \"vw\" | \"vh\" | \"vmin\" | \"vmax\"\r\n | \"%\";\r\n\r\ninterface ParsedCssUnit {\r\n value: number;\r\n unit: CssUnit | undefined;\r\n}\r\n\r\nfunction parseCssUnit(input: string): ParsedCssUnit | undefined {\r\n const m = CSS_UNIT_RE.exec(input);\r\n if (!m) return undefined;\r\n return {\r\n value: Number(m[1]),\r\n unit: (m[2] as CssUnit) ?? undefined,\r\n };\r\n}\r\n\r\nfunction getDevicePixelRatio() {\r\n return typeof window === \"undefined\" ? 1 : window.devicePixelRatio;\r\n}\r\n\r\nfunction getPxPerUnit(unit: CssUnit, _default: number): number {\r\n try {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1\" + unit;\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || _default;\r\n }\r\n catch (e) {\r\n return _default;\r\n }\r\n}\r\n\r\nfunction getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction getSystemFontSize(): number {\r\n try {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n catch (e) {\r\n return 16;\r\n }\r\n}\r\n\r\nfunction getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n if (typeof window === \"undefined\")\r\n return false;\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document)\r\n return true;\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n}\r\n\r\nfunction getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n}\r\n\r\nfunction getHostAddress(): string {\r\n if (typeof location === \"undefined\" || !location.host) {\r\n return \"localhost\";\r\n }\r\n return `${location.protocol}//${location.host}`;\r\n}\r\n\r\n/** Browsers scroll bar width. */\r\nexport const ScrollbarWidth = getScrollBarWidth();\r\n\r\n/** Browsers system font size. */\r\nexport const FontSize = getSystemFontSize();\r\n\r\n/** Is touch device? */\r\nexport const IsTouchDevice = getIsTouchDevice();\r\n\r\n/** Is mobile device? */\r\nexport const IsMobileDevice = getIsMobileDevice();\r\n\r\n/** Host address. */\r\nexport const HostAddress = getHostAddress();\r\n\r\n/** Device pixel ratio. */\r\nexport const DevicePixelRatio = getDevicePixelRatio();\r\n\r\n/** Devices dots per inch. */\r\nexport const DPI = getPxPerUnit(\"in\", 96);\r\n\r\nconst PxPerIn = getPxPerUnit(\"in\", 96);\r\nconst PxPerMm = getPxPerUnit(\"mm\", 96 / 25.4);\r\nconst PxPerCm = getPxPerUnit(\"cm\", 96 / 25.4 * 10);\r\nconst PxPerEm = getPxPerUnit(\"em\", FontSize);\r\n\r\n/**\r\n * Convert input to pixels on a device. Input value is in html style form containing number\r\n * followed by unit (e.g. \"10px\"). Supported units are \"mm\", \"cm\", \"in\", \"inch\", \"em\" and \"px\".\r\n * \r\n * @param valueUnit - Input value.\r\n * @returns - Pixels.\r\n */\r\nexport function unitToPx(valueUnit: string | number): number {\r\n if (typeof valueUnit === \"number\")\r\n return valueUnit;\r\n\r\n const p = parseCssUnit(valueUnit);\r\n\r\n const value = p?.value;\r\n const unit = p?.unit;\r\n\r\n if (!Guard.isFinite(value))\r\n Assert.fail(`Invalid value: ${value}`);\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return value * PxPerMm;\r\n case \"cm\":\r\n return value * PxPerCm;\r\n case \"in\":\r\n return value * PxPerIn;\r\n case \"em\":\r\n return value * PxPerEm;\r\n case \"px\":\r\n case undefined:\r\n return value;\r\n default:\r\n Assert.fail(`Unsupported CssUnit: ${unit}`);\r\n }\r\n}\r\n\r\nexport function pxToUnit(px: number, unit: CssUnit): number {\r\n switch (unit) {\r\n case \"mm\":\r\n return px / PxPerMm;\r\n case \"cm\":\r\n return px / PxPerCm;\r\n case \"em\":\r\n return px / PxPerEm;\r\n case \"in\":\r\n return px / PxPerIn;\r\n case \"px\":\r\n return px;\r\n default:\r\n Assert.fail(`Unsupported CssUnit: ${unit}`);\r\n }\r\n}\r\n\r\nexport function pxToUnitStr(px: number, unit: CssUnit): string {\r\n return `${pxToUnit(px, unit)}${unit}`;\r\n}\r\n","export * as Arr from \"./arr\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./obj\";\r\nexport * as Str from \"./str\";","import { isInteger, isArray } from \"../../guard\";\r\n\r\nexport { isArray }\r\n\r\nexport function toArray<T>(a: T | T[]): T[] {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: ReadonlyArray<T> | undefined): T[] {\r\n return a?.slice() ?? [];\r\n}\r\n\r\nexport function removeDuplicates<T>(arr: ReadonlyArray<T>, compareFn?: (a: T, b: T) => boolean): Array<T> {\r\n return compareFn !== undefined\r\n ? arr.filter((a, id, self) => id === self.findIndex(b => compareFn(a, b)))\r\n : arr.filter((a, id, self) => id === self.indexOf(a));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","import { Device } from \"../..\";\r\n\r\nfunction _getElemById(id: string): HTMLElement | undefined {\r\n return typeof document === \"undefined\" ? undefined : (document.getElementById(id) ?? undefined);\r\n}\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.unitToPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let { left, top } = el.getBoundingClientRect();\r\n\r\n if (typeof window !== \"undefined\") {\r\n left += window.pageXOffset;\r\n top += window.pageYOffset;\r\n }\r\n\r\n if (typeof document !== \"undefined\") {\r\n let de = document.documentElement;\r\n left -= de.clientLeft;\r\n top -= de.clientTop;\r\n }\r\n\r\n return { left, top }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? _getElemById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? _getElemById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n if (!canvas && typeof document !== \"undefined\")\r\n canvas = document.createElement(\"canvas\");\r\n\r\n let ctx = canvas?.getContext(\"2d\");\r\n\r\n if (!ctx)\r\n return 0;\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n\r\n/**\r\n * Add style element to document head.\r\n * @param styleId - Id of style element.\r\n * @param styleCss - Style CSS string.\r\n */\r\nexport function injectCss(styleId: string, styleCss: string) {\r\n if (styleId === \"\" || styleCss === \"\") return; // Nothing to inject\r\n if (typeof document === \"undefined\") return; // SSR safe\r\n if (document.getElementById(styleId)) return; // Already injected\r\n const style = document.createElement(\"style\");\r\n style.id = styleId;\r\n style.textContent = styleCss;\r\n document.head.appendChild(style);\r\n}\r\n\r\n","import { isInteger, isNumber } from \"../../guard\";\r\n\r\nexport { isInteger, isNumber }\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\nexport function avg(...values: number[]): number {\r\n return sum(values) / values.length;\r\n}\r\n\r\nexport function cmp(a: number, b: number): -1 | 0 | 1 {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n}\r\n","export type EqualityFn<V> = (a: V, b: V) => boolean;\r\nexport const DefaultEqualityFn: EqualityFn<any> = (a: any, b: any) => a === b;\r\n\r\nexport interface KVComponent<K extends any[], VALUE> {\r\n get size(): number;\r\n isEmpty(): boolean;\r\n has(...keys: K): boolean;\r\n get(...keys: K): VALUE | undefined;\r\n getOrDefault(...keysAndDefault: [...K, VALUE]): VALUE;\r\n getOrCreate(...keysAndCreator: [...K, VALUE]): VALUE;\r\n set(...keysAndValue: [...K, VALUE]): void;\r\n delete(...keys: K): boolean;\r\n clear?(): void;\r\n toString(): string;\r\n\r\n // Iterators for KVComponent.\r\n kvValues(): IterableIterator<VALUE>;\r\n kvKeys(): IterableIterator<K>;\r\n kvEntries(): IterableIterator<[K, VALUE]>;\r\n}\r\n\r\nexport abstract class BaseContainer {\r\n abstract toString(): string;\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { Assert } from \"..\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * This is a stack data structure.\r\n */\r\nexport class Stack<T> extends BaseContainer {\r\n private readonly data: T[] = [];\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n private assertId(id: number): number {\r\n Assert.isIntegerBetween(id, 0, this.length - 1, `Stack index ${id} out of range.`);\r\n return id;\r\n }\r\n\r\n get length() {\r\n return this.data.length;\r\n }\r\n\r\n push(el: T) {\r\n this.data.push(el);\r\n return el;\r\n }\r\n\r\n pop(): T {\r\n this.assertId(this.length - 1);\r\n return this.data.pop()!;\r\n }\r\n\r\n popOrUndef(): T | undefined {\r\n return this.data.pop();\r\n }\r\n\r\n popOr(defaultValueOrCreator: T | (() => T)): T {\r\n return this.isEmpty()\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : this.data.pop()!;\r\n }\r\n\r\n top() {\r\n return this.data[this.assertId(this.length - 1)];\r\n }\r\n\r\n topOrUndef(): T | undefined {\r\n return this.data[this.length - 1];\r\n }\r\n\r\n topOr(defaultValueOrCreator: T | (() => T)): T {\r\n return this.isEmpty()\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : this.data[this.length - 1];\r\n }\r\n\r\n peek(depth = 0): T {\r\n return this.data[this.assertId(this.data.length - 1 - depth)];\r\n }\r\n\r\n peekOrUndef(depth = 0): T | undefined {\r\n return this.data[this.data.length - 1 - depth];\r\n\r\n }\r\n\r\n peekOr(depth = 0, defaultValueOrCreator: T | (() => T)): T {\r\n const id = this.data.length - 1 - depth;\r\n const value = id < 0 ? undefined : this.data[id];\r\n return value === undefined\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : value;\r\n }\r\n\r\n *values(): IterableIterator<T> {\r\n for (let id = this.data.length - 1; id >= 0; id--)\r\n yield this.data[id];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<T> {\r\n yield* this.values();\r\n }\r\n\r\n toArray(): T[] {\r\n return [...this.data];\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.length === 0;\r\n }\r\n\r\n clear() {\r\n this.data.length = 0;\r\n }\r\n\r\n toString(): string {\r\n return `Stack(${this.length})${stringify(this.data)}`;\r\n }\r\n}\r\n","import { isFinite } from \"../guard\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * `Vec` is a generic vector class with two or more coordinates.\r\n * \r\n * ```ts\r\n * // Example usage:\r\n * const a = new Vec(1, 2);\r\n * const b = new Vec(3, 4);\r\n *\r\n * console.log(a.add(b).toString()); // Vec(4, 6)\r\n * console.log(a.add(3, 3).toString()); // Vec(4, 5)\r\n * console.log(a.mul(2).toString()); // Vec(2, 4)\r\n * console.log(a.equals(b)); // false\r\n * console.log(a.clone().equals(a)); // true\r\n * ```\r\n */\r\nexport class Vec extends BaseContainer {\r\n readonly coords: number[];\r\n\r\n constructor(...coords: number[]) {\r\n super();\r\n\r\n if (coords.length < 2) {\r\n throw new TypeError(\"Vec needs minumum two coords!\")\r\n }\r\n this.coords = coords;\r\n }\r\n\r\n static vec2(x: number, y: number): Vec {\r\n return new Vec(x, y);\r\n }\r\n\r\n static vec3(x: number, y: number, z: number): Vec {\r\n return new Vec(x, y, z);\r\n }\r\n\r\n static zero(dim: number): Vec {\r\n if (dim < 2) {\r\n throw new TypeError(\"Vec.zero requires dimension >= 2\");\r\n }\r\n return new Vec(...Array(dim).fill(0));\r\n }\r\n\r\n get dim(): number {\r\n return this.coords.length;\r\n }\r\n\r\n get length(): number {\r\n return Math.hypot(...this.coords);\r\n }\r\n\r\n magnitude(): number {\r\n return this.length;\r\n }\r\n\r\n get x(): number {\r\n return this.coords[0];\r\n }\r\n\r\n get y(): number {\r\n return this.coords[1];\r\n }\r\n\r\n get z(): number {\r\n if (this.coords[2] === undefined) {\r\n throw new TypeError(\"Vec z-coord not available!\")\r\n }\r\n return this.coords[2];\r\n }\r\n\r\n add(other: Vec): Vec;\r\n add(...coords: number[]): Vec;\r\n add(...args: [Vec] | number[]): Vec {\r\n const otherCoords = args[0] instanceof Vec\r\n ? args[0].coords\r\n : args as number[];\r\n\r\n if (this.coords.length !== otherCoords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n\r\n return new Vec(...this.coords.map((coord, i) => coord + otherCoords[i]));\r\n }\r\n\r\n sub(other: Vec): Vec;\r\n sub(...coords: number[]): Vec;\r\n sub(...args: [Vec] | number[]): Vec {\r\n const otherCoords = args[0] instanceof Vec\r\n ? args[0].coords\r\n : args as number[];\r\n\r\n if (this.coords.length !== otherCoords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n\r\n return new Vec(...this.coords.map((coord, i) => coord - otherCoords[i]));\r\n }\r\n\r\n mul(scalar: number): Vec {\r\n return new Vec(...this.coords.map(coord => coord * scalar));\r\n }\r\n\r\n div(scalar: number): Vec {\r\n return new Vec(...this.coords.map(coord => coord / scalar));\r\n }\r\n\r\n dot(other: Vec): number {\r\n if (this.coords.length !== other.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n return this.coords.reduce((sum, c, i) => sum + c * other.coords[i], 0);\r\n }\r\n\r\n distance(other: Vec): number {\r\n if (this.coords.length !== other.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n return Math.hypot(...this.coords.map((c, i) => c - other.coords[i]));\r\n }\r\n\r\n normalize(): Vec {\r\n const len = this.length;\r\n if (len === 0) {\r\n throw new TypeError(\"Cannot normalize zero-length vector!\");\r\n }\r\n return this.div(len);\r\n }\r\n\r\n static lerp(a: Vec, b: Vec, t: number): Vec {\r\n if (a.coords.length !== b.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n if (!isFinite(t)) {\r\n throw new TypeError(\"Lerp t is not finite!\");\r\n }\r\n return a.add(b.sub(a).mul(t));\r\n }\r\n\r\n toLength(len: number): Vec {\r\n const mag = this.length;\r\n return mag === 0 ? this : this.mul(len / mag);\r\n }\r\n\r\n clamp(minLength?: number, maxLength?: number, defaultDir?: Vec): Vec {\r\n const mag = this.length;\r\n\r\n if (mag === 0) {\r\n if (minLength !== undefined) {\r\n if (defaultDir && defaultDir.coords.length !== this.coords.length)\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n const dir = defaultDir && defaultDir.length !== 0 ? defaultDir.normalize() : new Vec(1, ...Array(this.coords.length - 1).fill(0));\r\n return dir.mul(minLength);\r\n }\r\n return this; // zero vector stays zero\r\n }\r\n\r\n // If maxLength is defined and vector is too long\r\n if (maxLength !== undefined && mag > maxLength) {\r\n return this.normalize().mul(maxLength);\r\n }\r\n\r\n // If minLength is defined and vector is too short\r\n if (minLength !== undefined && mag < minLength) {\r\n return this.normalize().mul(minLength);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n equals(other: Vec): boolean {\r\n return this.coords.length === other.coords.length &&\r\n this.coords.every((v, i) => v === other.coords[i]);\r\n }\r\n\r\n clone(): Vec {\r\n return new Vec(...this.coords);\r\n }\r\n\r\n toObject() {\r\n return { x: this.x, y: this.y, z: this.z }\r\n }\r\n\r\n [Symbol.iterator]() {\r\n return this.coords[Symbol.iterator]();\r\n }\r\n\r\n toString(): string {\r\n return `Vec(${this.coords.join(\", \")})`;\r\n }\r\n}\r\n","import { AnchoredRect } from \"./anchor-rect\";\r\n\r\n/**\r\n * An immutable 2D rectangle defined by its top-left corner (x, y) and size (width, height).\r\n * Provides geometric utilities like intersection, containment, scaling, etc.\r\n */\r\nexport class Rect {\r\n public x: number;\r\n public y: number;\r\n public width: number;\r\n public height: number;\r\n\r\n constructor();\r\n constructor(width: number, height: number);\r\n constructor(x: number, y: number, width: number, height: number);\r\n constructor(...args: number[]) {\r\n if (args.length === 0) {\r\n this.x = this.y = this.width = this.height = 0;\r\n }\r\n else if (args.length === 2) {\r\n this.x = this.y = 0;\r\n this.width = args[0];\r\n this.height = args[1];\r\n }\r\n else {\r\n this.x = args[0];\r\n this.y = args[1];\r\n this.width = args[2];\r\n this.height = args[3];\r\n }\r\n\r\n if (this.width < 0 || this.height < 0)\r\n throw new Error(\"Rect width and height must be non-negative.\");\r\n }\r\n\r\n set(): Rect;\r\n set(width: number, height: number): Rect;\r\n set(x: number, y: number, width: number, height: number): Rect;\r\n set(...args: number[]): Rect {\r\n if (args.length === 0) {\r\n this.x = this.y = this.width = this.height = 0;\r\n }\r\n else if (args.length === 2) {\r\n this.x = this.y = 0;\r\n this.width = args[0];\r\n this.height = args[1];\r\n }\r\n else {\r\n this.x = args[0];\r\n this.y = args[1];\r\n this.width = args[2];\r\n this.height = args[3];\r\n }\r\n\r\n if (this.width < 0 || this.height < 0)\r\n throw new Error(\"Rect width and height must be non-negative.\");\r\n\r\n return this;\r\n }\r\n\r\n // --- Static Constructors ---\r\n\r\n static fromPoints(p1: { x: number; y: number }, p2: { x: number; y: number }): Rect {\r\n const x = Math.min(p1.x, p2.x);\r\n const y = Math.min(p1.y, p2.y);\r\n const w = Math.abs(p1.x - p2.x);\r\n const h = Math.abs(p1.y - p2.y);\r\n return new Rect(x, y, w, h);\r\n }\r\n\r\n static fromCenter(cx: number, cy: number, width: number, height: number): Rect {\r\n return new Rect(cx - width / 2, cy - height / 2, width, height);\r\n }\r\n\r\n // --- Derived Properties ---\r\n\r\n get left(): number { return this.x; }\r\n get top(): number { return this.y; }\r\n get right(): number { return this.x + this.width; }\r\n get bottom(): number { return this.y + this.height; }\r\n\r\n get centerX(): number { return this.x + this.width / 2; }\r\n get centerY(): number { return this.y + this.height / 2; }\r\n get center(): { x: number; y: number } { return { x: this.centerX, y: this.centerY }; }\r\n\r\n get area(): number { return this.width * this.height; }\r\n get isEmpty(): boolean { return this.width <= 0 || this.height <= 0; }\r\n\r\n // --- Geometric Tests ---\r\n\r\n containsPoint(px: number, py: number): boolean {\r\n return px >= this.left && px <= this.right && py >= this.top && py <= this.bottom;\r\n }\r\n\r\n containsRect(other: Rect): boolean {\r\n return (\r\n other.left >= this.left &&\r\n other.right <= this.right &&\r\n other.top >= this.top &&\r\n other.bottom <= this.bottom\r\n );\r\n }\r\n\r\n intersects(other: Rect): boolean {\r\n return !(\r\n other.right < this.left ||\r\n other.left > this.right ||\r\n other.bottom < this.top ||\r\n other.top > this.bottom\r\n );\r\n }\r\n\r\n // --- Operations ---\r\n\r\n intersectionCopy(other: Rect): Rect {\r\n const x1 = Math.max(this.left, other.left);\r\n const y1 = Math.max(this.top, other.top);\r\n const x2 = Math.min(this.right, other.right);\r\n const y2 = Math.min(this.bottom, other.bottom);\r\n if (x2 <= x1 || y2 <= y1) return new Rect();\r\n return new Rect(x1, y1, x2 - x1, y2 - y1);\r\n }\r\n\r\n unionCopy(other: Rect): Rect {\r\n const x1 = Math.min(this.left, other.left);\r\n const y1 = Math.min(this.top, other.top);\r\n const x2 = Math.max(this.right, other.right);\r\n const y2 = Math.max(this.bottom, other.bottom);\r\n return new Rect(x1, y1, x2 - x1, y2 - y1);\r\n }\r\n\r\n insetCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x + dx, this.y + dy, this.width - 2 * dx, this.height - 2 * dy);\r\n }\r\n\r\n inflateCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x - dx, this.y - dy, this.width + 2 * dx, this.height + 2 * dy);\r\n }\r\n\r\n offsetInPlace(dx: number, dy: number): Rect {\r\n this.x += dx;\r\n this.y += dy;\r\n return this;\r\n }\r\n\r\n offsetCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x + dx, this.y + dy, this.width, this.height);\r\n }\r\n\r\n scaleInPlace(scaleX: number, scaleY: number = scaleX): Rect {\r\n this.x = this.centerX - this.width * scaleX / 2;\r\n this.width *= scaleX;\r\n this.y = this.centerY - this.height * scaleY / 2;\r\n this.height *= scaleY;\r\n return this;\r\n }\r\n\r\n scaleCopy(scaleX: number, scaleY: number = scaleX): Rect {\r\n return this.clone().scaleInPlace(scaleX, scaleY);\r\n }\r\n\r\n roundCopy(): Rect {\r\n const left = Math.round(this.left);\r\n const top = Math.round(this.top);\r\n const right = Math.round(this.right);\r\n const bottom = Math.round(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n floorCopy(): Rect {\r\n const left = Math.floor(this.left);\r\n const top = Math.floor(this.top);\r\n const right = Math.floor(this.right);\r\n const bottom = Math.floor(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n ceilCopy(): Rect {\r\n const left = Math.ceil(this.left);\r\n const top = Math.ceil(this.top);\r\n const right = Math.ceil(this.right);\r\n const bottom = Math.ceil(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n expandCopy(px: number, py: number): Rect {\r\n const left = Math.min(this.left, px);\r\n const top = Math.min(this.top, py);\r\n const right = Math.max(this.right, px);\r\n const bottom = Math.max(this.bottom, py);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n // --- Utilities ---\r\n\r\n equals(other: Rect): boolean {\r\n return (\r\n this.x === other.x &&\r\n this.y === other.y &&\r\n this.width === other.width &&\r\n this.height === other.height\r\n );\r\n }\r\n\r\n clone(): Rect {\r\n return new Rect(this.x, this.y, this.width, this.height);\r\n }\r\n\r\n toString(): string {\r\n return `Rect(x=${this.x}, y=${this.y}, w=${this.width}, h=${this.height})`;\r\n }\r\n\r\n toAnchoredRect(): AnchoredRect {\r\n return new AnchoredRect(this.left, this.right, this.top, this.bottom);\r\n }\r\n}\r\n","import { clamp } from \"../utils/math\";\r\nimport { Rect } from \"./rect\";\r\n\r\n/**\r\n * A mutable AnchoredRect class is a rectangle (left, top, right, bottom) with an anchor point (anchorX, anchorY).\r\n */\r\nexport class AnchoredRect {\r\n left: number;\r\n anchorX: number;\r\n right: number;\r\n top: number;\r\n anchorY: number;\r\n bottom: number;\r\n\r\n /**\r\n * Create rectangle with all zero values.\r\n */\r\n constructor();\r\n\r\n /**\r\n * Create rectangle with left, right, top, bottom.\r\n * Properties anchorX and anchorY will be centered in the middle.\r\n * \r\n * @param left - Left coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n constructor(left: number, right: number, top: number, bottom: number);\r\n\r\n /**\r\n * Create rectangle with full arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param anchorX - Center x-coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param anchorY - Center y-coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n constructor(left: number, anchorX: number, right: number, top: number, anchorY: number, bottom: number);\r\n\r\n constructor(...args: unknown[]) {\r\n if (args.length === 6) {\r\n this.left = args[0] as number;\r\n this.anchorX = args[1] as number;\r\n this.right = args[2] as number;\r\n this.top = args[3] as number;\r\n this.anchorY = args[4] as number;\r\n this.bottom = args[5] as number;\r\n }\r\n else if (args.length === 4) {\r\n this.left = args[0] as number;\r\n this.right = args[1] as number;\r\n this.anchorX = (this.left + this.right) / 2;\r\n this.top = args[2] as number;\r\n this.bottom = args[3] as number;\r\n this.anchorY = (this.top + this.bottom) / 2;\r\n }\r\n else if (args.length === 0) {\r\n this.left = this.anchorX = this.right = 0;\r\n this.top = this.anchorY = this.bottom = 0;\r\n }\r\n else {\r\n throw new TypeError(`Invalid AnchoredRect args: ${args}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set rectangle with all zero values.\r\n */\r\n set(): AnchoredRect;\r\n\r\n /**\r\n * Set rectangle with left, right, top, bottom.\r\n * Properties anchorX and anchorY will be centered in the middle.\r\n * \r\n * @param left - Left coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n set(left: number, right: number, top: number, bottom: number): AnchoredRect;\r\n\r\n /**\r\n * Set rectangle with full arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param anchorX - Center x-coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param anchorY - Center y-coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n set(left: number, anchorX: number, right: number, top: number, anchorY: number, bottom: number): AnchoredRect;\r\n\r\n set(...args: unknown[]): AnchoredRect {\r\n if (args.length === 6) {\r\n this.left = args[0] as number;\r\n this.anchorX = args[1] as number;\r\n this.right = args[2] as number;\r\n this.top = args[3] as number;\r\n this.anchorY = args[4] as number;\r\n this.bottom = args[5] as number;\r\n }\r\n else if (args.length === 4) {\r\n this.left = args[0] as number;\r\n this.right = args[1] as number;\r\n this.anchorX = (this.left + this.right) / 2;\r\n this.top = args[2] as number;\r\n this.bottom = args[3] as number;\r\n this.anchorY = (this.top + this.bottom) / 2;\r\n }\r\n else if (args.length === 0) {\r\n this.left = this.anchorX = this.right = 0;\r\n this.top = this.anchorY = this.bottom = 0;\r\n }\r\n else {\r\n throw new TypeError(`Invalid AnchoredRect args: ${args}`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Create rect from basic left, top, width and height arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param top - Top coordinate.\r\n * @param width - Width.\r\n * @param height - Height.\r\n * @returns - AnchoredRect.\r\n */\r\n static create(left: number, top: number, width: number, height: number): AnchoredRect {\r\n return new AnchoredRect(left, left + width, top, top + height);\r\n }\r\n\r\n /**\r\n * Create rect from anchorX, anchorY, width, height arguments.\r\n * \r\n * @param centerX - Center x-coordinate.\r\n * @param centerY - Center y-coordinate.\r\n * @param width - Width.\r\n * @param height - Height.\r\n * @returns - AnchoredRect.\r\n */\r\n static createCentered(centerX: number, centerY: number, width: number, height: number): AnchoredRect {\r\n return new AnchoredRect(\r\n centerX - width / 2,\r\n centerX,\r\n centerX + width / 2,\r\n centerY - height / 2,\r\n centerY,\r\n centerY + height / 2\r\n );\r\n }\r\n\r\n /**\r\n * Create rect from sections.\r\n * \r\n * @param leftw - Left section width.\r\n * @param rightw - Right section width.\r\n * @param toph - Top section height.\r\n * @param bottomh - Bottomsection height.\r\n * @returns - AnchoredRect.\r\n */\r\n static createSections(leftw: number, rightw: number, toph: number, bottomh: number): AnchoredRect {\r\n return new AnchoredRect(-leftw, 0, rightw, -toph, 0, bottomh);\r\n }\r\n\r\n /**\r\n * Get center x-coordinate.\r\n */\r\n get centerX() {\r\n return this.left + this.width / 2;\r\n }\r\n\r\n /**\r\n * Get center ycoordinate.\r\n */\r\n get centerY() {\r\n return this.top + this.height / 2;\r\n }\r\n\r\n /**\r\n * Width getter.\r\n */\r\n get width() {\r\n return this.right - this.left;\r\n }\r\n\r\n /**\r\n * Height getter.\r\n */\r\n get height() {\r\n return this.bottom - this.top;\r\n }\r\n\r\n /**\r\n * Left section width getter.\r\n */\r\n get leftw() {\r\n return this.anchorX - this.left;\r\n }\r\n\r\n /**\r\n * Right section width getter.\r\n */\r\n get rightw() {\r\n return this.right - this.anchorX;\r\n }\r\n\r\n /**\r\n * Top section height getter.\r\n */\r\n get toph() {\r\n return this.anchorY - this.top;\r\n }\r\n\r\n /**\r\n * Bottom section height getter.\r\n */\r\n get bottomh() {\r\n return this.bottom - this.anchorY;\r\n }\r\n\r\n /**\r\n * Does this Rect contain given (x, y)-point?\r\n * \r\n * @param x - X-coordinate.\r\n * @param y - Y-coordinate.\r\n * @returns - True/false.\r\n */\r\n contains(x: number, y: number): boolean {\r\n return x >= this.left && x <= this.right && y >= this.top && y <= this.bottom;\r\n }\r\n\r\n /**\r\n * Do a and b rects overlap?\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static overlap(a: AnchoredRect, b: AnchoredRect): boolean {\r\n return a.right > b.left && a.left < b.right && a.bottom > b.top && a.top < b.bottom;\r\n }\r\n\r\n /**\r\n * Do horizontal measures of a and b rects overlap?\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static overlapX(a: AnchoredRect, b: AnchoredRect): boolean {\r\n return a.right > b.left && a.left < b.right;\r\n }\r\n\r\n /**\r\n * Check if given rects are equal.\r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static equals(a: AnchoredRect | null | undefined, b: AnchoredRect | null | undefined): boolean {\r\n if (a == null && b == null) {\r\n // handles null and undefined\r\n return true;\r\n }\r\n else if (a == null || b == null) {\r\n return false;\r\n }\r\n else {\r\n return a === b || a.left === b.left && a.anchorX === b.anchorX && a.right === b.right && a.top === b.top && a.anchorY === b.anchorY && a.bottom === b.bottom;\r\n }\r\n }\r\n\r\n /**\r\n * Check if this rect equals with another rect.\r\n * @param other - The other rect.\r\n * @returns - True/false.\r\n */\r\n equals(other: AnchoredRect): boolean {\r\n return AnchoredRect.equals(this, other);\r\n }\r\n\r\n /**\r\n * Check if edges of given rects are equal, ignoring anchorX and anchorY.\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static equalsEdges(a: AnchoredRect | null | undefined, b: AnchoredRect | null | undefined): boolean {\r\n if (a == null && b == null) {\r\n // handles null and undefined\r\n return true;\r\n }\r\n else if (a == null || b == null) {\r\n return false;\r\n }\r\n else {\r\n return a === b || a.left === b.left && a.right === b.right && a.top === b.top && a.bottom === b.bottom;\r\n }\r\n }\r\n\r\n /**\r\n * Check if edges of this Rect equals with given Rect, ignoring anchorX and anchorY.\r\n * \r\n * @param other - The other AnchoredRect.\r\n * @returns - True/false.\r\n */\r\n equalsEdges(other: AnchoredRect): boolean {\r\n return AnchoredRect.equalsEdges(this, other);\r\n }\r\n\r\n /**\r\n * Created duplicate of this Rect.\r\n * @returns - Duplicate.\r\n */\r\n clone(): AnchoredRect {\r\n return new AnchoredRect(this.left, this.anchorX, this.right, this.top, this.anchorY, this.bottom);\r\n }\r\n\r\n /**\r\n * Move this rect by (dx, dy). Modifies this Rect.\r\n * \r\n * @param dx - Offset amount in x-direction.\r\n * @param dy - Offset amount in y-direction.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n offsetInPlace(dx: number, dy: number): AnchoredRect {\r\n this.left += dx;\r\n this.anchorX += dx;\r\n this.right += dx;\r\n this.top += dy;\r\n this.anchorY += dy;\r\n this.bottom += dy;\r\n return this;\r\n }\r\n\r\n /**\r\n * Move this rect by (dx, dy). Immutable, returns modified copy.\r\n * \r\n * @param dx - Offset amount in x-direction.\r\n * @param dy - Offset amount in y-direction.\r\n * @returns - AnchoredRect copy with applied offset.\r\n */\r\n offsetCopy(dx: number, dy: number): AnchoredRect {\r\n return this.clone().offsetInPlace(dx, dy);\r\n }\r\n\r\n /**\r\n * Expand this Rect by given Rect. Modifies this Rect.\r\n * \r\n * @param rect - AnchoredRect to expand this instance with.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n expandInPlace(rect: AnchoredRect): AnchoredRect {\r\n this.left = Math.min(this.left, rect.left);\r\n this.right = Math.max(this.right, rect.right);\r\n this.top = Math.min(this.top, rect.top);\r\n this.bottom = Math.max(this.bottom, rect.bottom);\r\n return this;\r\n }\r\n\r\n /**\r\n * Expand this Rect by given Rect. Immutable, returns modified copy.\r\n * \r\n * @param rect - AnchoredRect to expand this instance with.\r\n * @returns - Expanded copy of this AnchoredRect.\r\n */\r\n expandCopy(rect: AnchoredRect): AnchoredRect {\r\n return this.clone().expandInPlace(rect);\r\n }\r\n\r\n /**\r\n * Clip this Rect by given Rect. Mmodifies this Rect.\r\n * \r\n * @param clipRect - AnchoredRect to clip this instance with.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n clipInPlace(clipRect: AnchoredRect): AnchoredRect {\r\n this.left = Math.max(this.left, clipRect.left);\r\n this.right = Math.min(this.right, clipRect.right);\r\n this.anchorX = clamp(this.anchorX, this.left, this.right);\r\n this.top = Math.max(this.top, clipRect.top);\r\n this.bottom = Math.min(this.bottom, clipRect.bottom);\r\n this.anchorY = clamp(this.anchorY, this.top, this.bottom);\r\n return this;\r\n }\r\n\r\n /**\r\n * Clip this Rect by given Rect. Immutable, return modified copy.\r\n * \r\n * @param clipRect - AnchoredRecto to clip this instance with.\r\n * @returns - Clipped AnchoredRect copy.\r\n */\r\n clipCopy(clipRect: AnchoredRect): AnchoredRect {\r\n return this.clone().clipInPlace(clipRect);\r\n }\r\n\r\n /**\r\n * Scale Rect. Anchor pos is (anchorX, anchorY). Modifies this Rect.\r\n * \r\n * @param scaleX - Scale x-amount.\r\n * @param scaleY - Scale y-amount. If undefined then scale x-amount is used.\r\n * @returns This AnchoredRect instance.\r\n */\r\n scaleInPlace(scaleX: number, scaleY: number = scaleX): AnchoredRect {\r\n this.left = this.anchorX - this.leftw * scaleX;\r\n this.right = this.anchorX + this.rightw * scaleX;\r\n this.top = this.anchorY - this.toph * scaleY;\r\n this.bottom = this.anchorY + this.bottomh * scaleY;\r\n return this;\r\n }\r\n\r\n /**\r\n * Scale Rect. Anchor pos is (anchorX, anchorY). Immutable, returns modified copy.\r\n * \r\n * @param scaleX - Scale x-amount.\r\n * @param scaleY - Scale y-amount. If undefined then scale x-amount is used.\r\n * @returns Scaled copy of this AnchoredRect.\r\n */\r\n scaleCopy(scaleX: number, scaleY: number = scaleX): AnchoredRect {\r\n return this.clone().scaleInPlace(scaleX, scaleY);\r\n }\r\n\r\n /**\r\n * Get this AnchoredRect instance.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n getRect(): AnchoredRect {\r\n return this;\r\n }\r\n\r\n toRect(): Rect {\r\n return new Rect(this.left, this.right, this.width, this.height);\r\n }\r\n\r\n toString(): string {\r\n return `Rect(left=${this.left}, anchorX=${this.anchorX}, right=${this.right}, top=${this.top}, anchorY=${this.anchorY}, bottom=${this.bottom})`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * LRUCache is an implementation of least recently used cache with a fixed capacity.\r\n */\r\nexport class LRUCache<K extends string, V> extends BaseContainer {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n super();\r\n\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n\r\n *keys(): IterableIterator<K> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield key;\r\n }\r\n\r\n *values(): IterableIterator<V> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield this.cache[key];\r\n }\r\n\r\n *entries(): IterableIterator<[K, V]> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield [key, this.cache[key]];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[K, V]> {\r\n yield* this.entries();\r\n }\r\n\r\n toString(): string {\r\n const entries = [...this.entries()];\r\n return entries.length === 0\r\n ? `LRUCache(0){ }`\r\n : `LRUCache(${entries.length}){ ${entries.map(e => `${stringify(e[0])}: ${stringify(e[1])}`).join(\", \")} }`;\r\n }\r\n}\r\n","import { isFunction, isIntegerGte } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\nimport { stringify } from \"../utils/str\";\r\n\r\n/**\r\n * `IndexArray` is a sparse array with non-negative indexes. It stores values\r\n * to indexes, and each index also has flag telling it has a value.\r\n */\r\nexport class IndexArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private static validateIndex(id: number): number {\r\n if (!isIntegerGte(id, 0)) throw new Error(`Invalid index ${id} - must be an integer >= 0!`);\r\n return id;\r\n }\r\n\r\n private posVal: VALUE[];\r\n private hasPos: boolean[];\r\n\r\n // Number of values\r\n private valCount: number;\r\n\r\n constructor();\r\n constructor(arr: IndexArray<VALUE>)\r\n constructor(entries: Iterable<[number, VALUE]>)\r\n constructor(entries?: IndexArray<VALUE> | Iterable<[number, VALUE]>) {\r\n super();\r\n\r\n if (entries instanceof IndexArray) {\r\n this.posVal = entries.posVal.slice();\r\n this.hasPos = entries.hasPos.slice();\r\n this.valCount = entries.valCount;\r\n }\r\n else {\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n\r\n if (entries) {\r\n for (const [id, value] of entries) {\r\n this.set(id, value);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n this.indices = this.indices.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n private get posLen(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n get size(): number {\r\n return this.valCount;\r\n }\r\n\r\n get length(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n private trimRight() {\r\n let newLength = this.length;\r\n while (newLength > 0 && this.hasPos[newLength - 1] !== true) newLength--;\r\n if (newLength < this.length) this.posVal.length = this.hasPos.length = newLength;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n has(id: number): boolean {\r\n IndexArray.validateIndex(id);\r\n\r\n return this.hasPos[id] === true;\r\n }\r\n\r\n set(id: number, value: VALUE): void {\r\n IndexArray.validateIndex(id);\r\n\r\n if (this.hasPos[id] !== true) this.valCount++;\r\n this.posVal[id] = value;\r\n this.hasPos[id] = true;\r\n }\r\n\r\n get(id: number): VALUE | undefined {\r\n IndexArray.validateIndex(id);\r\n\r\n return this.hasPos[id] ? this.posVal[id] : undefined;\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n return this.get(id) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id)!;\r\n }\r\n\r\n delete(id: number): boolean {\r\n IndexArray.validateIndex(id);\r\n\r\n if (!this.hasPos[id]) return false;\r\n this.posVal[id] = undefined!;\r\n this.hasPos[id] = false;\r\n this.valCount--;\r\n this.trimRight();\r\n return true;\r\n }\r\n\r\n clear(): void {\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: IndexArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield id;\r\n }\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield this.posVal[id];\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield [id, this.posVal[id]];\r\n }\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): IndexArray<VALUE> {\r\n return new IndexArray(this);\r\n }\r\n\r\n merge(other: IndexArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n for (const [id, value] of other.entries()) {\r\n if (this.has(id) && conflictResolver) {\r\n this.set(id, conflictResolver(this.get(id)!, value, id));\r\n }\r\n else {\r\n this.set(id, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => value is S): IndexArray<S>;\r\n filter(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => unknown): IndexArray<VALUE>;\r\n filter(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): IndexArray<VALUE> })();\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty IndexArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R): IndexArray<R> {\r\n let result = new IndexArray<R>();\r\n for (const [id, value] of this.entries()) {\r\n result.set(id, fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: IndexArray<VALUE>): boolean;\r\n equals(other: IndexArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: IndexArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n\r\n eq ??= (a, b) => a === b;\r\n\r\n const posLen = Math.max(this.posLen, other.posLen);\r\n for (let i = 0; i < posLen; ++i) {\r\n const hasA = this.hasPos[i];\r\n const hasB = other.hasPos[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.posVal[i], other.posVal[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n // Format full array as regular array.\r\n let isRegularArray = true;\r\n for (let i = 0; i < this.hasPos.length && isRegularArray; i++)\r\n if (!this.hasPos[i]) isRegularArray = false;\r\n if (isRegularArray)\r\n return stringify(this.posVal.slice(0, this.hasPos.length));\r\n\r\n const entries = this.entriesArray().map(([id, v]) => `${stringify(id)}: ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `[ ]` : `[ ${entries} ]`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction, isInteger } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * `IndexArray` is a sparse array with positive and negative indexes. It stores\r\n * values to indexes, and each index also has flag telling it has a value.\r\n */\r\nexport class SignedIndexArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private static toNegIndex(id: number): number {\r\n return -id - 1;\r\n }\r\n\r\n private static validateIndex(id: number): number {\r\n if (!isInteger(id)) throw new Error(`Invalid index ${id} - must be an integer!`);\r\n return id;\r\n }\r\n\r\n // For indexes >= 0\r\n private posVal: VALUE[];\r\n private hasPos: boolean[];\r\n\r\n // For indexes < 0\r\n private negVal: VALUE[];\r\n private hasNeg: boolean[];\r\n\r\n // Number of values\r\n private valCount: number;\r\n\r\n constructor();\r\n constructor(arr: SignedIndexArray<VALUE>)\r\n constructor(entries: Iterable<[number, VALUE]>)\r\n constructor(entries?: SignedIndexArray<VALUE> | Iterable<[number, VALUE]>) {\r\n super();\r\n\r\n if (entries instanceof SignedIndexArray) {\r\n this.negVal = entries.negVal.slice();\r\n this.hasNeg = entries.hasNeg.slice();\r\n this.posVal = entries.posVal.slice();\r\n this.hasPos = entries.hasPos.slice();\r\n this.valCount = entries.valCount;\r\n }\r\n else {\r\n this.negVal = [];\r\n this.hasNeg = [];\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n\r\n if (entries) {\r\n for (const [id, value] of entries) {\r\n this.set(id, value);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n this.indices = this.indices.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n get size(): number {\r\n return this.valCount;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n private get posLen(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n private get negLen(): number {\r\n return this.hasNeg.length;\r\n }\r\n\r\n has(id: number): boolean {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n return this.hasPos[id] === true;\r\n }\r\n else {\r\n return this.hasNeg[SignedIndexArray.toNegIndex(id)] === true;\r\n }\r\n }\r\n\r\n set(id: number, value: VALUE): void {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n if (this.hasPos[id] !== true) this.valCount++;\r\n this.posVal[id] = value;\r\n this.hasPos[id] = true;\r\n }\r\n else {\r\n let negId = SignedIndexArray.toNegIndex(id);\r\n if (this.hasNeg[negId] !== true) this.valCount++;\r\n this.negVal[negId] = value;\r\n this.hasNeg[negId] = true;\r\n }\r\n }\r\n\r\n get(id: number): VALUE | undefined {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n return this.hasPos[id] ? this.posVal[id] : undefined;\r\n }\r\n else {\r\n let negId = SignedIndexArray.toNegIndex(id);\r\n return this.hasNeg[negId] ? this.negVal[negId] : undefined;\r\n }\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n return this.get(id) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id)!;\r\n }\r\n\r\n delete(id: number): boolean {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n const isPos = id >= 0;\r\n const arr = isPos ? this.posVal : this.negVal;\r\n const has = isPos ? this.hasPos : this.hasNeg;\r\n const idx = isPos ? id : SignedIndexArray.toNegIndex(id);\r\n\r\n if (!has[idx]) return false;\r\n\r\n arr[idx] = undefined!;\r\n has[idx] = false;\r\n this.valCount--;\r\n return true;\r\n }\r\n\r\n clear(): void {\r\n this.negVal = [];\r\n this.hasNeg = [];\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: SignedIndexArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield SignedIndexArray.toNegIndex(id);\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield id;\r\n }\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield this.negVal[id];\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield this.posVal[id];\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield [SignedIndexArray.toNegIndex(id), this.negVal[id]];\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield [id, this.posVal[id]];\r\n }\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): SignedIndexArray<VALUE> {\r\n return new SignedIndexArray(this);\r\n }\r\n\r\n merge(other: SignedIndexArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n for (const [id, value] of other.entries()) {\r\n if (this.has(id) && conflictResolver) {\r\n this.set(id, conflictResolver(this.get(id)!, value, id));\r\n }\r\n else {\r\n this.set(id, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => value is S): SignedIndexArray<S>;\r\n filter(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => unknown): SignedIndexArray<VALUE>;\r\n filter(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): SignedIndexArray<VALUE> })();\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty SignedIndexArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R): SignedIndexArray<R> {\r\n let result = new SignedIndexArray<R>();\r\n for (const [id, value] of this.entries()) {\r\n result.set(id, fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: SignedIndexArray<VALUE>): boolean;\r\n equals(other: SignedIndexArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: SignedIndexArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n\r\n eq ??= (a, b) => a === b;\r\n\r\n const posLen = Math.max(this.posLen, other.posLen);\r\n for (let i = 0; i < posLen; ++i) {\r\n const hasA = this.hasPos[i];\r\n const hasB = other.hasPos[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.posVal[i], other.posVal[i])) return false;\r\n }\r\n\r\n const negLen = Math.max(this.negLen, other.negLen);\r\n for (let i = 0; i < negLen; ++i) {\r\n const hasA = this.hasNeg[i];\r\n const hasB = other.hasNeg[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.negVal[i], other.negVal[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n // Format full pos only array as regular array.\r\n let isRegularArray = this.hasNeg.length === 0;\r\n for (let i = 0; i < this.hasPos.length && isRegularArray; i++)\r\n if (!this.hasPos[i]) isRegularArray = false;\r\n if (isRegularArray)\r\n return stringify(this.posVal.slice(0, this.hasPos.length));\r\n\r\n const entries = this.entriesArray().map(([id, v]) => `${stringify(id)}: ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `[ ]` : `[ ${entries} ]`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * `DefaultArray` is an array list where every index is guaranteed to have a value.\r\n * There are no undefineds unless that is part of the value type.\r\n * When you create `DefaultArray` you give a default value. For example if you\r\n * delete an index then that index is set to the default value.\r\n */\r\nexport class DefaultArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private readonly defaultValue: VALUE;\r\n private data: VALUE[];\r\n\r\n constructor(defaultValue: VALUE);\r\n constructor(length: number, defaultValue: VALUE);\r\n constructor(values: Iterable<VALUE>, defaultValue: VALUE);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n this.defaultValue = args.pop()! as VALUE;\r\n\r\n if (typeof args[0] === \"number\") {\r\n this.data = Array(args[0]).fill(this.defaultValue);\r\n }\r\n else {\r\n this.data = Array.from(args[0] as Iterable<VALUE>).map(v =>\r\n v === undefined ? this.defaultValue : v\r\n );\r\n }\r\n }\r\n\r\n get size(): number {\r\n return this.data.length;\r\n }\r\n\r\n get length(): number {\r\n return this.data.length;\r\n }\r\n\r\n private assertId(id: number): number {\r\n if (id < 0 || id >= this.data.length)\r\n throw new RangeError(`DefaultArray: Index ${id} out of range`);\r\n return id;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n isDefault(id: number): boolean {\r\n return this.data[this.assertId(id)] === this.defaultValue;\r\n }\r\n\r\n isSet(id: number): boolean {\r\n return this.data[this.assertId(id)] !== this.defaultValue;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n has(id: number): boolean {\r\n return this.isSet(id);\r\n }\r\n\r\n set(id: number, value: VALUE): VALUE {\r\n return this.data[this.assertId(id)] = value;\r\n }\r\n\r\n get(id: number): VALUE {\r\n return this.data[this.assertId(id)];\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n let value = this.get(id);\r\n return value === this.defaultValue ? defaultValue : value;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id);\r\n }\r\n\r\n delete(id: number): boolean {\r\n this.assertId(id);\r\n if (this.data[id] === this.defaultValue) return false;\r\n this.data[id] = this.defaultValue;\r\n return true;\r\n }\r\n\r\n clear(empty = false): void {\r\n if (empty)\r\n this.data = [];\r\n else\r\n this.data.fill(this.defaultValue);\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: DefaultArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n yield* this.data.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.data.values();\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n yield* this.data.entries();\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): DefaultArray<VALUE> {\r\n const ctor = this.constructor as new (entries: Iterable<VALUE>, def: VALUE) => DefaultArray<VALUE>;\r\n return new ctor(this.values(), this.defaultValue);\r\n }\r\n\r\n merge(other: DefaultArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n if (this.constructor !== other.constructor)\r\n throw new Error(`Cannot merge DefaultArray: different classes (${this.constructor.name} vs ${other.constructor.name})`);\r\n\r\n if (this.defaultValue !== other.defaultValue)\r\n throw new Error(`Cannot merge DefaultArray: different defaultValue (${this.defaultValue} vs ${other.defaultValue})`);\r\n\r\n for (const [id, value] of other.entries()) {\r\n if (this.isDefault(id))\r\n this.set(id, value);\r\n else if (conflictResolver)\r\n this.set(id, conflictResolver(this.get(id), value, id));\r\n else\r\n this.set(id, value);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => value is S): DefaultArray<S>;\r\n filter(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => unknown): DefaultArray<VALUE>;\r\n filter(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(length: number, def: VALUE): DefaultArray<VALUE> })(this.length, this.defaultValue);\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty DefaultArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R, defaultValue: R): DefaultArray<R> {\r\n let result = new DefaultArray<R>(this.data.length, defaultValue);\r\n for (let id = 0; id < this.data.length; id++) {\r\n result.data[id] = fn(this.data[id], id);\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: DefaultArray<VALUE>): boolean;\r\n equals(other: DefaultArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: DefaultArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n eq ??= (a, b) => a === b;\r\n for (let id = 0; id < this.data.length; ++id) {\r\n if (!eq(this.data[id], other.data[id])) return false;\r\n }\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n return stringify(this.data);\r\n }\r\n}","import { stringify } from \"../utils/str\";\r\nimport { isFunction, isDeepEqual } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\n\r\n/**\r\n * A Map implementation mapping a single key to a value.\r\n */\r\nexport class UniMap<KEY, VALUE> extends BaseContainer implements KVComponent<[KEY], VALUE> {\r\n private map: Map<KEY, VALUE>;\r\n private keyEquals: EqualityFn<KEY>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<KEY>);\r\n constructor(list: UniMap<KEY, VALUE> | Iterable<[KEY, VALUE]>, equals?: EqualityFn<KEY>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.keyEquals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<KEY>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as Iterable<[KEY, VALUE]> | UniMap<KEY, VALUE> | undefined;\r\n\r\n this.map = new Map(entries);\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n static createDeep<KEY1, VALUE>(): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(set: UniMap<KEY1, VALUE>): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(entries: Iterable<[KEY1, VALUE]>): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(arg?: UniMap<KEY1, VALUE> | Iterable<[KEY1, VALUE]>) {\r\n return arg ? new UniMap<KEY1, VALUE>(arg, isDeepEqual) : new UniMap<KEY1, VALUE>(isDeepEqual);\r\n }\r\n\r\n has(key: KEY): boolean {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.has(key);\r\n for (const [k, v] of this.map)\r\n if (this.keyEquals(k, key))\r\n return true;\r\n return false;\r\n }\r\n\r\n set(key: KEY, value: VALUE): VALUE {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key)) {\r\n this.map.set(key, value);\r\n return value;\r\n }\r\n for (const key2 of this.map.keys())\r\n if (this.keyEquals(key2, key)) {\r\n this.map.set(key2, value);\r\n return value;\r\n }\r\n this.map.set(key, value);\r\n return value;\r\n }\r\n\r\n get(key: KEY): VALUE | undefined {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.get(key);\r\n\r\n for (const [k, v] of this.map)\r\n if (this.keyEquals(k, key))\r\n return v;\r\n\r\n return undefined;\r\n }\r\n\r\n delete(key: KEY): boolean {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.delete(key);\r\n for (const k of this.map.keys())\r\n if (this.keyEquals(k, key))\r\n return this.map.delete(k);\r\n return this.map.delete(key);\r\n }\r\n\r\n getOrDefault(key: KEY, defaultValue: VALUE): VALUE {\r\n return this.get(key) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key: KEY, value: VALUE): VALUE;\r\n getOrCreate(key: KEY, creator: () => VALUE): VALUE;\r\n getOrCreate(key: KEY, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n return this.set(key, value)\r\n }\r\n return this.get(key)!;\r\n }\r\n\r\n clear(): void {\r\n this.map.clear();\r\n }\r\n\r\n get size(): number {\r\n return this.map.size;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key: KEY, map1: UniMap<KEY, VALUE>) => void, thisArg?: any): void {\r\n this.map.forEach((value, key) => callbackfn.call(thisArg, value, key, this));\r\n }\r\n\r\n *keys(): IterableIterator<KEY> {\r\n yield* this.map.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.map.values();\r\n }\r\n\r\n *entries(): IterableIterator<[KEY, VALUE]> {\r\n for (const [key, value] of this.map)\r\n yield [key, value];\r\n }\r\n\r\n keysArray(): KEY[] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY]> {\r\n for (const key of this.keys()) {\r\n yield [key];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values()) {\r\n yield el;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY], VALUE]> {\r\n for (const [key, el] of this.entries()) {\r\n yield [[key], el];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): UniMap<KEY, VALUE> {\r\n return new UniMap(this, this.keyEquals);\r\n }\r\n\r\n merge(other: UniMap<KEY, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key: KEY) => VALUE): this {\r\n for (const [key, value] of other.entries()) {\r\n if (this.has(key) && conflictResolver) {\r\n this.set(key, conflictResolver(this.get(key)!, value, key));\r\n }\r\n else {\r\n this.set(key, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key: KEY) => boolean): boolean {\r\n for (const [key, value] of this.map) {\r\n if (fn(value, key)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key: KEY) => boolean): boolean {\r\n for (const [key, value] of this.map) {\r\n if (!fn(value, key)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => value is S): UniMap<KEY, S>;\r\n filter(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => unknown): UniMap<KEY, VALUE>;\r\n filter(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): UniMap<KEY, VALUE> })();\r\n for (const [key, value] of this.map) {\r\n if (predicate(value, key, this)) result.set(key, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key: KEY) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key: KEY) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key: KEY) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty UniMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1]; // [key, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key, value] = current.value;\r\n acc = fn(acc, value, key);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key: KEY) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key, value] of this.map) {\r\n result.push(fn(value, key));\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key: KEY) => R): UniMap<KEY, R> {\r\n let result = new UniMap<KEY, R>();\r\n for (const [key, value] of this.map) {\r\n result.set(key, fn(value, key));\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<KEY, VALUE> {\r\n return new Map(this.map);\r\n }\r\n\r\n toString(): string {\r\n const entries = [...this.map].map(([k, v]) => `${stringify(k)} => ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\nimport { UniMap } from \"./uni-map\";\r\n\r\n/**\r\n * A Map implementation mapping a double key to a value.\r\n */\r\nexport class BiMap<KEY1, KEY2, VALUE> extends BaseContainer implements KVComponent<[KEY1, KEY2], VALUE> {\r\n private map1: UniMap<KEY1, UniMap<KEY2, VALUE>>;\r\n private key1Equals: EqualityFn<KEY1> = DefaultEqualityFn;\r\n private key2Equals: EqualityFn<KEY2> = DefaultEqualityFn;\r\n\r\n constructor();\r\n constructor(biMap: BiMap<KEY1, KEY2, VALUE>)\r\n constructor(entries: Iterable<[KEY1, KEY2, VALUE]>)\r\n constructor(entries?: BiMap<KEY1, KEY2, VALUE> | Iterable<[KEY1, KEY2, VALUE]>) {\r\n super();\r\n\r\n this.map1 = new UniMap(this.key1Equals);\r\n\r\n if (entries instanceof BiMap) {\r\n for (const [key1, map2] of entries.map1) {\r\n const newMap2 = this.map1.set(key1, new UniMap(this.key2Equals));\r\n for (const [key2, value] of map2) {\r\n newMap2.set(key2, value);\r\n }\r\n }\r\n }\r\n else if (entries) {\r\n for (const [key1, key2, value] of entries) {\r\n this.set(key1, key2, value);\r\n }\r\n }\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n has(key1: KEY1, key2: KEY2): boolean {\r\n return this.map1.get(key1)?.has(key2) ?? false;\r\n }\r\n\r\n set(key1: KEY1, key2: KEY2, value: VALUE): VALUE {\r\n return this.map1.getOrCreate(key1, () => new UniMap<KEY2, VALUE>(this.key2Equals)).set(key2, value);\r\n }\r\n\r\n get(key1: KEY1, key2: KEY2): VALUE | undefined {\r\n return this.map1.get(key1)?.get(key2);\r\n }\r\n\r\n getOrDefault(key1: KEY1, key2: KEY2, defaultValue: VALUE): VALUE {\r\n return this.get(key1, key2) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key1: KEY1, key2: KEY2, value: VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, creator: () => VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key1, key2)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key1, key2, value);\r\n return value;\r\n }\r\n return this.get(key1, key2)!;\r\n }\r\n\r\n delete(key1: KEY1): boolean;\r\n delete(key1: KEY1, key2: KEY2): boolean;\r\n delete(key1: KEY1, key2?: KEY2): boolean {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map2 = this.map1.get(key1);\r\n if (!map2) return false;\r\n return map2.delete(key2);\r\n }\r\n\r\n clear(): void {\r\n this.map1.clear();\r\n }\r\n\r\n get size(): number {\r\n let count = 0;\r\n for (const map2 of this.map1.values()) {\r\n count += map2.size;\r\n }\r\n return count;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key1: KEY1, key2: KEY2, map2: BiMap<KEY1, KEY2, VALUE>) => void, thisArg?: any): void {\r\n this.map1.forEach((map2, key1) => map2.forEach((value, key2) => callbackfn.call(thisArg, value, key1, key2, this)));\r\n }\r\n\r\n *keys(): IterableIterator<[KEY1, KEY2]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const key2 of map2.keys())\r\n yield [key1, key2];\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (const map2 of this.map1.values())\r\n for (const value of map2.values())\r\n yield value;\r\n }\r\n\r\n *entries(): IterableIterator<[KEY1, KEY2, VALUE]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, value] of map2)\r\n yield [key1, key2, value];\r\n }\r\n\r\n keysArray(): [KEY1, KEY2][] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY1, KEY2, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY1, KEY2]> {\r\n for (const [key1, key2] of this.keys())\r\n yield [key1, key2];\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values())\r\n yield el;\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY1, KEY2], VALUE]> {\r\n for (const [key1, key2, el] of this.entries())\r\n yield [[key1, key2], el];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY1, KEY2, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): BiMap<KEY1, KEY2, VALUE> {\r\n return new BiMap(this);\r\n }\r\n\r\n merge(other: BiMap<KEY1, KEY2, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key1: KEY1, key2: KEY2) => VALUE): this {\r\n for (const [key1, key2, value] of other.entries()) {\r\n if (this.has(key1, key2) && conflictResolver) {\r\n this.set(key1, key2, conflictResolver(this.get(key1, key2)!, value, key1, key2));\r\n }\r\n else {\r\n this.set(key1, key2, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key1: KEY1, key2: KEY2) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (fn(value, key1, key2)) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: KEY1, key2: KEY2) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (!fn(value, key1, key2)) return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => value is S): BiMap<KEY1, KEY2, S>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => unknown): BiMap<KEY1, KEY2, VALUE>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): BiMap<KEY1, KEY2, VALUE> })();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (predicate(value, key1, key2, this)) result.set(key1, key2, value);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key1: KEY1, key2: KEY2) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty BiMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY1, KEY2, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[2]; // [key1, key2, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key1, key2, value] = current.value;\r\n acc = fn(acc, value, key1, key2);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key1: KEY1, key2: KEY2) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.push(fn(value, key1, key2));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key1: KEY1, key2: KEY2) => R): BiMap<KEY1, KEY2, R> {\r\n let result = new BiMap<KEY1, KEY2, R>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.set(key1, key2, fn(value, key1, key2));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<[KEY1, KEY2], VALUE> {\r\n let result = new Map<[KEY1, KEY2], VALUE>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.set([key1, key2], value);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n const inner = [...map2].map(([key2, v]) => `${stringify(key2)} => ${stringify(v)}`).join(', ');\r\n entries.push(`${stringify(key1)} => { ${inner} }`);\r\n }\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\nimport { UniMap } from \"./uni-map\";\r\n\r\n/**\r\n * A Map implementation mapping a triple key to a value.\r\n */\r\nexport class TriMap<KEY1, KEY2, KEY3, VALUE> extends BaseContainer implements KVComponent<[KEY1, KEY2, KEY3], VALUE> {\r\n private map1: UniMap<KEY1, UniMap<KEY2, UniMap<KEY3, VALUE>>>;\r\n private key1Equals: EqualityFn<KEY1> = DefaultEqualityFn;\r\n private key2Equals: EqualityFn<KEY2> = DefaultEqualityFn;\r\n private key3Equals: EqualityFn<KEY3> = DefaultEqualityFn;\r\n\r\n constructor();\r\n constructor(entries: Iterable<[KEY1, KEY2, KEY3, VALUE]>);\r\n constructor(triMap: TriMap<KEY1, KEY2, KEY3, VALUE>);\r\n constructor(entries?: Iterable<[KEY1, KEY2, KEY3, VALUE]> | TriMap<KEY1, KEY2, KEY3, VALUE>) {\r\n super();\r\n\r\n this.map1 = new UniMap(this.key1Equals);\r\n\r\n if (entries instanceof TriMap) {\r\n for (const [key1, map2] of entries.map1) {\r\n const newMap2 = this.map1.set(key1, new UniMap(this.key2Equals));\r\n for (const [key2, map3] of map2) {\r\n newMap2.set(key2, new UniMap(map3, this.key3Equals));\r\n }\r\n }\r\n }\r\n else if (entries) {\r\n for (const [key1, key2, key3, value] of entries) {\r\n this.set(key1, key2, key3, value);\r\n }\r\n }\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n has(key1: KEY1, key2: KEY2, key3: KEY3): boolean {\r\n return this.map1.get(key1)?.get(key2)?.has(key3) ?? false;\r\n }\r\n\r\n set(key1: KEY1, key2: KEY2, key3: KEY3, value: VALUE): VALUE {\r\n let map2 = this.map1.getOrCreate(key1, () => new UniMap<KEY2, UniMap<KEY3, VALUE>>(this.key2Equals));\r\n let map3 = map2.getOrCreate(key2, () => new UniMap<KEY3, VALUE>(this.key3Equals));\r\n map3.set(key3, value);\r\n return value;\r\n }\r\n\r\n get(key1: KEY1, key2: KEY2, key3: KEY3): VALUE | undefined {\r\n return this.map1.get(key1)?.get(key2)?.get(key3);\r\n }\r\n\r\n getOrDefault(key1: KEY1, key2: KEY2, key3: KEY3, defaultValue: VALUE): VALUE {\r\n return this.get(key1, key2, key3) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, value: VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, creator: () => VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key1, key2, key3)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key1, key2, key3, value);\r\n return value;\r\n }\r\n return this.get(key1, key2, key3)!;\r\n }\r\n\r\n delete(key1: KEY1): boolean;\r\n delete(key1: KEY1, key2: KEY2): boolean;\r\n delete(key1: KEY1, key2: KEY2, key3: KEY3): boolean;\r\n delete(key1: KEY1, key2?: KEY2, key3?: KEY3): boolean {\r\n if (key3 === undefined) {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map2 = this.map1.get(key1);\r\n if (!map2) return false;\r\n return map2.delete(key2);\r\n }\r\n else {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map3 = this.map1.get(key1)?.get(key2);\r\n if (!map3) return false;\r\n return map3.delete(key3);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.map1.clear();\r\n }\r\n\r\n get size(): number {\r\n let count = 0;\r\n for (const map2 of this.map1.values()) {\r\n for (const map3 of map2.values()) {\r\n count += map3.size;\r\n }\r\n }\r\n return count;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, map2: TriMap<KEY1, KEY2, KEY3, VALUE>) => void, thisArg?: any): void {\r\n this.map1.forEach((map2, key1) => map2.forEach((map3, key2) => map3.forEach((value, key3) => callbackfn.call(thisArg, value, key1, key2, key3, this))));\r\n }\r\n\r\n *keys(): IterableIterator<[KEY1, KEY2, KEY3]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, map3] of map2)\r\n for (const key3 of map3.keys())\r\n yield [key1, key2, key3];\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (const map2 of this.map1.values())\r\n for (const map3 of map2.values())\r\n for (const value of map3.values())\r\n yield value;\r\n }\r\n\r\n *entries(): IterableIterator<[KEY1, KEY2, KEY3, VALUE]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, map3] of map2)\r\n for (const [key3, value] of map3)\r\n yield [key1, key2, key3, value];\r\n }\r\n\r\n keysArray(): [KEY1, KEY2, KEY3][] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY1, KEY2, KEY3, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY1, KEY2, KEY3]> {\r\n for (const [key1, key2, key3] of this.keys())\r\n yield [key1, key2, key3];\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values())\r\n yield el;\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY1, KEY2, KEY3], VALUE]> {\r\n for (const [key1, key2, key3, el] of this.entries())\r\n yield [[key1, key2, key3], el];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY1, KEY2, KEY3, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): TriMap<KEY1, KEY2, KEY3, VALUE> {\r\n return new TriMap(this);\r\n }\r\n\r\n merge(other: TriMap<KEY1, KEY2, KEY3, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => VALUE): this {\r\n for (const [key1, key2, key3, value] of other.entries()) {\r\n if (this.has(key1, key2, key3) && conflictResolver) {\r\n this.set(key1, key2, key3, conflictResolver(this.get(key1, key2, key3)!, value, key1, key2, key3));\r\n }\r\n else {\r\n this.set(key1, key2, key3, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (fn(value, key1, key2, key3)) return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (!fn(value, key1, key2, key3)) return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => value is S): TriMap<KEY1, KEY2, KEY3, S>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => unknown): TriMap<KEY1, KEY2, KEY3, VALUE>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): TriMap<KEY1, KEY2, KEY3, VALUE> })();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (predicate(value, key1, key2, key3, this)) result.set(key1, key2, key3, value);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty TriMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY1, KEY2, KEY3, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[3]; // [key1, key2, key3, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key1, key2, key3, value] = current.value;\r\n acc = fn(acc, value, key1, key2, key3);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.push(fn(value, key1, key2, key3));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R): TriMap<KEY1, KEY2, KEY3, R> {\r\n let result = new TriMap<KEY1, KEY2, KEY3, R>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.set(key1, key2, key3, fn(value, key1, key2, key3));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<[KEY1, KEY2, KEY3], VALUE> {\r\n let result = new Map<[KEY1, KEY2, KEY3], VALUE>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.set([key1, key2, key3], value);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n const inner = [...map3].map(([key3, v]) => `${stringify(key3)} => ${stringify(v)}`).join(', ');\r\n entries.push(`${stringify(key1)} => ${stringify(key2)} => { ${inner} }`);\r\n }\r\n }\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries.join(\", \")} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isDeepEqual, isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\n\r\n/**\r\n * An implementation of a Set data structure.\r\n */\r\nexport class ValueSet<VALUE> extends BaseContainer implements KVComponent<[VALUE], VALUE> {\r\n private data: Set<VALUE>;\r\n private equals: EqualityFn<VALUE>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<VALUE>);\r\n constructor(list: ValueSet<VALUE> | Iterable<VALUE>, equals?: EqualityFn<VALUE>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.equals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<VALUE>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as ValueSet<VALUE> | Iterable<VALUE> | undefined;\r\n\r\n this.data = new Set(entries);\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n static createDeep<VALUE>(): ValueSet<VALUE>;\r\n static createDeep<VALUE>(set: ValueSet<VALUE>): ValueSet<VALUE>;\r\n static createDeep<VALUE>(entries: Iterable<VALUE>): ValueSet<VALUE>;\r\n static createDeep<VALUE>(arg?: ValueSet<VALUE> | Iterable<VALUE>) {\r\n return arg ? new ValueSet<VALUE>(arg, isDeepEqual) : new ValueSet<VALUE>(isDeepEqual);\r\n }\r\n\r\n has(value: VALUE): boolean {\r\n if (this.equals === DefaultEqualityFn)\r\n return this.data.has(value);\r\n return this.some(v => this.equals(v, value));\r\n }\r\n\r\n add(value: VALUE): VALUE {\r\n if (!this.has(value))\r\n this.data.add(value);\r\n return value;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n set(key: VALUE, value: VALUE): void {\r\n if (!this.equals(key, value))\r\n throw new TypeError(\"ValueSet.set() requires key === value.\");\r\n this.add(value);\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n get(key: VALUE): VALUE | undefined {\r\n return this.has(key) ? key : undefined;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrDefault(key: VALUE, defaultValue: VALUE): VALUE {\r\n return this.get(key) ?? defaultValue;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrCreate(key: VALUE, value: VALUE): VALUE;\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrCreate(key: VALUE, creator: () => VALUE): VALUE;\r\n getOrCreate(key: VALUE, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key, value);\r\n return value;\r\n }\r\n return this.get(key)!;\r\n }\r\n\r\n delete(value: VALUE): boolean {\r\n if (this.equals === DefaultEqualityFn || this.data.has(value))\r\n return this.data.delete(value);\r\n for (const v of this.values()) {\r\n if (this.equals(v, value)) {\r\n this.data.delete(v);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n clear(): void {\r\n this.data.clear();\r\n }\r\n\r\n get size(): number {\r\n return this.data.size;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, set: ValueSet<VALUE>) => void, thisArg?: any): void {\r\n this.data.forEach(value => callbackfn.call(thisArg, value, this));\r\n }\r\n\r\n *keys(): IterableIterator<VALUE> {\r\n yield* this.data.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.data.values();\r\n }\r\n\r\n *entries(): IterableIterator<[VALUE, VALUE]> {\r\n yield* this.data.entries();\r\n }\r\n\r\n *kvKeys(): IterableIterator<[VALUE]> {\r\n for (const key of this.keys()) {\r\n yield [key];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values()) {\r\n yield el;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[VALUE], VALUE]> {\r\n for (const [key, el] of this.entries()) {\r\n yield [[key], el];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<VALUE> {\r\n yield* this.values();\r\n }\r\n\r\n clone(): ValueSet<VALUE> {\r\n const result = new ValueSet<VALUE>();\r\n for (const v of this.values()) result.add(v);\r\n return result;\r\n }\r\n\r\n merge(other: ValueSet<VALUE>): this {\r\n for (const value of other.values()) {\r\n this.add(value);\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE) => boolean): boolean {\r\n for (const value of this.data) {\r\n if (fn(value)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE) => boolean): boolean {\r\n for (const value of this.data) {\r\n if (!fn(value)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<R extends VALUE>(predicate: (value: VALUE, set: ValueSet<VALUE>) => value is R): ValueSet<R>;\r\n filter(predicate: (value: VALUE, set1: ValueSet<VALUE>) => unknown): ValueSet<VALUE>;\r\n filter(predicate: (value: VALUE, set1: ValueSet<VALUE>) => unknown) {\r\n const result = new ValueSet<VALUE>();\r\n for (const value of this.data)\r\n if (predicate(value, this)) result.add(value);\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE) => VALUE): VALUE;\r\n reduce<R = VALUE>(fn: (acc: R, value: VALUE) => R, init: R): R;\r\n reduce<R = VALUE>(fn: (acc: R, value: VALUE) => R, init?: R): R {\r\n let iterator = this.values();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty ValueSet with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<VALUE>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value;\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const value = current.value;\r\n acc = fn(acc, value);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE) => R): ValueSet<R> {\r\n let result = new ValueSet<R>();\r\n for (const value of this.data) {\r\n result.add(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n mapToArray<R = VALUE>(fn: (value: VALUE) => R): R[] {\r\n let result: R[] = [];\r\n for (const value of this.values()) {\r\n result.push(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE) => R): ValueSet<R> {\r\n let result = new ValueSet<R>();\r\n for (const value of this.values()) {\r\n result.add(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n toSet(): Set<VALUE> {\r\n return new Set(this.data);\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n toString(): string {\r\n return stringify(this.data);\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * Wrapper class of a key-value container that contain array values.\r\n */\r\nexport class MultiContainer<K extends any[], V> extends BaseContainer {\r\n constructor(private readonly base: KVComponent<K, V[]>) {\r\n super();\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.iterAll = this.iterAll.bind(this);\r\n */\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.base.isEmpty();\r\n }\r\n\r\n clear(): void {\r\n this.base.clear?.();\r\n }\r\n\r\n add(...keysAndValue: [...K, V]): V {\r\n const keys = keysAndValue.slice(0, -1) as K;\r\n const value = keysAndValue[keysAndValue.length - 1] as V;\r\n const arr = this.base.get(...keys);\r\n this.base.set(...([...keys, arr ? [...arr, value] : [value]] as [...K, V[]]));\r\n return value;\r\n }\r\n\r\n remove(...keysAndValue: [...K, V]): boolean {\r\n const keys = keysAndValue.slice(0, -1) as K;\r\n const value = keysAndValue[keysAndValue.length - 1] as V;\r\n const arr = this.base.get(...keys);\r\n if (!arr) return false;\r\n const i = arr.indexOf(value);\r\n if (i === -1) return false;\r\n arr.splice(i, 1);\r\n if (arr.length === 0) this.base.delete(...keys);\r\n return true;\r\n }\r\n\r\n getAll(...keys: K): V[] {\r\n return this.base.get(...keys) ?? [];\r\n }\r\n\r\n *iterAll(...keys: K): IterableIterator<V> {\r\n yield* this.getAll(...keys);\r\n }\r\n\r\n *values(): IterableIterator<V> {\r\n for (const keys of this.keys()) {\r\n yield* this.getAll(...keys);\r\n }\r\n }\r\n\r\n *keys(): IterableIterator<K> {\r\n for (const keys of this.base.kvKeys()) {\r\n yield keys;\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[K, V[]]> {\r\n for (const keys of this.keys()) {\r\n const arr = this.getAll(...keys);\r\n if (arr.length > 0) yield [keys, arr];\r\n }\r\n }\r\n\r\n [Symbol.iterator](): IterableIterator<[K, V[]]> {\r\n return this.entries();\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const keys of this.keys()) {\r\n const arr = this.getAll(...keys);\r\n const keyStr = Array.isArray(keys) ? stringify(keys) : '[ ]';\r\n const valuesStr = Array.isArray(arr) ? stringify(arr) : '[ ]';\r\n entries.push(`${keyStr} => ${valuesStr}`);\r\n }\r\n return entries.length === 0 ? `MultiContainer{ }` : `MultiContainer{ ${entries.join(', ')} }`;\r\n }\r\n}\r\n\r\n/**\r\n * Create a multi-container.\r\n * \r\n * ```ts\r\n * // Usage:\r\n * const multi = asMulti(new BiMap<string, string, number[]>());\r\n * multi.add(\"a\", \"b\", 5);\r\n * multi.add(\"a\", \"b\", 10);\r\n * multi.add(\"a\", \"c\", 15);\r\n * ```\r\n * @param base \r\n * @returns \r\n */\r\nexport function asMulti<K extends any[], VALUE>(base: KVComponent<K, VALUE[]>): MultiContainer<K, VALUE> {\r\n return new MultiContainer(base);\r\n}","import { isDeepEqual, isFunction } from \"../guard\";\r\nimport { BaseContainer, DefaultEqualityFn, EqualityFn } from \"./base\";\r\n\r\nclass LinkedListNode<V> {\r\n public next: LinkedListNode<V> | null = null;\r\n public prev: LinkedListNode<V> | null = null;\r\n\r\n constructor(public value: V) { }\r\n}\r\n\r\nexport class LinkedList<V> extends BaseContainer implements Iterable<V> {\r\n private _head: LinkedListNode<V> | null = null;\r\n private _tail: LinkedListNode<V> | null = null;\r\n private _size = 0;\r\n private readonly equals: EqualityFn<V>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<V>);\r\n constructor(list: LinkedList<V> | Iterable<V>, equals?: EqualityFn<V>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.equals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<V>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as LinkedList<V> | Iterable<V> | undefined;\r\n\r\n if (entries) {\r\n for (const v of entries) {\r\n this.push(v);\r\n }\r\n }\r\n }\r\n\r\n static createDeep<V>(): LinkedList<V>;\r\n static createDeep<V>(list: LinkedList<V>): LinkedList<V>;\r\n static createDeep<V>(entries: Iterable<V>): LinkedList<V>;\r\n static createDeep<V>(entries?: LinkedList<V> | Iterable<V>): LinkedList<V> {\r\n if (entries) {\r\n return new LinkedList<V>(entries, isDeepEqual);\r\n } else {\r\n return new LinkedList<V>(isDeepEqual);\r\n }\r\n }\r\n\r\n get length(): number {\r\n return this._size;\r\n }\r\n\r\n get first(): V | undefined {\r\n return this._head?.value;\r\n }\r\n\r\n get last(): V | undefined {\r\n return this._tail?.value;\r\n }\r\n\r\n /** Add item to the end of the list */\r\n push(value: V): void {\r\n const node = new LinkedListNode(value);\r\n if (!this._tail) {\r\n this._head = this._tail = node;\r\n } else {\r\n node.prev = this._tail;\r\n this._tail.next = node;\r\n this._tail = node;\r\n }\r\n this._size++;\r\n }\r\n\r\n /** Remove item from the end of the list */\r\n pop(): V | undefined {\r\n if (!this._tail) return undefined;\r\n const value = this._tail.value;\r\n this._tail = this._tail.prev;\r\n if (this._tail) this._tail.next = null;\r\n else this._head = null;\r\n this._size--;\r\n return value;\r\n }\r\n\r\n /** Add item to the beginning of the list */\r\n unshift(value: V): void {\r\n const node = new LinkedListNode(value);\r\n if (!this._head) {\r\n this._head = this._tail = node;\r\n } else {\r\n node.next = this._head;\r\n this._head.prev = node;\r\n this._head = node;\r\n }\r\n this._size++;\r\n }\r\n\r\n /** Remove item from the beginning of the list */\r\n shift(): V | undefined {\r\n if (!this._head) return undefined;\r\n const value = this._head.value;\r\n this._head = this._head.next;\r\n if (this._head) this._head.prev = null;\r\n else this._tail = null;\r\n this._size--;\r\n return value;\r\n }\r\n\r\n /** Check if value exists in the list */\r\n has(value: V): boolean {\r\n for (let node = this._head; node; node = node.next) {\r\n if (this.equals(node.value, value)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** Get value at index (O(n/2)) */\r\n get(index: number): V | undefined {\r\n return this.nodeAt(index)?.value;\r\n }\r\n\r\n /** Set value at index (O(n/2)) */\r\n set(index: number, value: V): boolean {\r\n const node = this.nodeAt(index);\r\n if (!node) return false;\r\n node.value = value;\r\n return true;\r\n }\r\n\r\n /** Insert value at index (O(n/2)) */\r\n insertAt(index: number, value: V): boolean {\r\n if (index < 0 || index > this._size) return false;\r\n if (index === 0) { this.unshift(value); return true; }\r\n if (index === this._size) { this.push(value); return true; }\r\n\r\n const nextNode = this.nodeAt(index);\r\n if (!nextNode) return false;\r\n const prevNode = nextNode.prev;\r\n\r\n const newNode = new LinkedListNode(value);\r\n newNode.next = nextNode;\r\n newNode.prev = prevNode;\r\n if (prevNode) prevNode.next = newNode;\r\n nextNode.prev = newNode;\r\n this._size++;\r\n return true;\r\n }\r\n\r\n /** Remove value at index (O(n/2)) */\r\n removeAt(index: number): V | undefined {\r\n const node = this.nodeAt(index);\r\n if (!node) return undefined;\r\n\r\n if (node.prev) node.prev.next = node.next;\r\n else this._head = node.next;\r\n\r\n if (node.next) node.next.prev = node.prev;\r\n else this._tail = node.prev;\r\n\r\n this._size--;\r\n return node.value;\r\n }\r\n\r\n /** Remove first matching value (O(n)) */\r\n remove(value: V): boolean {\r\n for (let node = this._head; node; node = node.next) {\r\n if (this.equals(node.value, value)) {\r\n if (node.prev) node.prev.next = node.next;\r\n else this._head = node.next;\r\n\r\n if (node.next) node.next.prev = node.prev;\r\n else this._tail = node.prev;\r\n\r\n this._size--;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Convert to array */\r\n toArray(): V[] {\r\n const result: V[] = [];\r\n for (const v of this) result.push(v);\r\n return result;\r\n }\r\n\r\n /** Replace contents from array */\r\n fromArray(values: Iterable<V>): void {\r\n this.clear();\r\n for (const v of values) this.push(v);\r\n }\r\n\r\n /** Clear all nodes */\r\n clear(): void {\r\n this._head = this._tail = null;\r\n this._size = 0;\r\n }\r\n\r\n /** Iterator support */\r\n *[Symbol.iterator](): Iterator<V> {\r\n yield* this.values();\r\n }\r\n\r\n * keys(): IterableIterator<number> {\r\n for (let id = 0; id < this._size; id++)\r\n yield id;\r\n }\r\n\r\n * values(): IterableIterator<V> {\r\n let node = this._head;\r\n while (node) {\r\n yield node.value;\r\n node = node.next;\r\n }\r\n }\r\n\r\n * entries(): IterableIterator<[number, V]> {\r\n let node = this._head;\r\n let id = 0;\r\n while (node) {\r\n yield [id++, node.value];\r\n node = node.next;\r\n }\r\n }\r\n\r\n toString(): string {\r\n return this._size === 0\r\n ? `LinkedList(0)[ ]`\r\n : `LinkedList(${this._size})[ ${this.toArray().join(\", \")} ]`;\r\n }\r\n\r\n // ---- Private helpers ----\r\n private nodeAt(index: number): LinkedListNode<V> | null {\r\n if (index < 0 || index >= this._size) return null;\r\n let node: LinkedListNode<V> | null;\r\n if (index < this._size / 2) {\r\n node = this._head;\r\n for (let i = 0; i < index; i++) node = node!.next;\r\n } else {\r\n node = this._tail;\r\n for (let i = this._size - 1; i > index; i--) node = node!.prev;\r\n }\r\n return node;\r\n }\r\n\r\n clone(): LinkedList<V> {\r\n return new LinkedList(this);\r\n }\r\n}\r\n","import { UniMap } from \".\";\r\n\r\nexport class CallTracker<T = unknown> {\r\n private counts = new UniMap<T, number>((a, b) => a === b);\r\n\r\n track(value: T): void {\r\n const count = this.counts.getOrCreate(value, 0);\r\n this.counts.set(value, count + 1);\r\n }\r\n\r\n getCallCountFor(value: T): number {\r\n return this.counts.get(value) ?? 0;\r\n }\r\n\r\n hasBeenCalledWith(value: T): boolean {\r\n return this.getCallCountFor(value) > 0;\r\n }\r\n\r\n // ─────────────────────────────────────────\r\n // Static default tracker\r\n // ─────────────────────────────────────────\r\n\r\n private static _default = new CallTracker<any>();\r\n\r\n static track(value: any): void {\r\n this._default.track(value);\r\n }\r\n\r\n static getCallCountFor(value: any): number {\r\n return this._default.getCallCountFor(value);\r\n }\r\n\r\n static hasBeenCalledWith(value: any): boolean {\r\n return this._default.hasBeenCalledWith(value);\r\n }\r\n}\r\n","export * as Assert from \"./assert\"\r\nexport * as Cookies from \"./web/cookies\";\r\nexport * as Device from \"./web/device\";\r\nexport * as Guard from \"./guard\"\r\nexport * as Utils from \"./utils\";\r\nexport * from \"./core\";\r\n\r\ndeclare const __LIB_INFO__: string;\r\n\r\nexport function getLibInfo(): string {\r\n return __LIB_INFO__ ?? \"\";\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/assert/index.ts","../src/utils/str/index.ts","../src/utils/obj/index.ts","../src/guard/index.ts","../src/utils/enum/index.ts","../src/web/cookies.ts","../src/web/device.ts","../src/utils/index.ts","../src/utils/arr/index.ts","../src/utils/dom/index.ts","../src/utils/math/index.ts","../src/core/base.ts","../src/core/stack.ts","../src/core/vec.ts","../src/core/rect.ts","../src/core/anchor-rect.ts","../src/core/LRU-cache.ts","../src/core/index-array.ts","../src/core/signed-index-array.ts","../src/core/default-array.ts","../src/core/uni-map.ts","../src/core/bi-map.ts","../src/core/tri-map.ts","../src/core/set.ts","../src/core/multi-container.ts","../src/core/linked-list.ts","../src/core/call-tracker.ts","../src/index.ts"],"names":["doesNotThrow","doesThrow","isArray","isArrayOrUndefined","isBigInt","isBoolean","isBooleanOrUndefined","isDeepEqual","isDefined","isEmptyArray","isEmptyArrayOrUndefined","isEmptyObject","isEmptyString","isEmptyStringOrUndefined","isEnumValue","isEnumValueOrUndefined","isEven","isFalse","isFalseOrUndefined","isFinite","isFloat","isFunction","isFunctionOrUndefined","isIncluded","isIndex","isInfinity","isInteger","isIntegerBetween","isIntegerBetweenExclusive","isIntegerEq","isIntegerGt","isIntegerGte","isIntegerLt","isIntegerLte","isIntegerOrUndefined","isMultipleOf","isNaNValue","isNeg","isNegInfinity","isNegZero","isNonEmptyArray","isNonEmptyArrayOrUndefined","isNonEmptyString","isNonEmptyStringOrUndefined","isNonNeg","isNonNull","isNonPos","isNull","isNullish","isNumber","isNumberBetween","isNumberBetweenExclusive","isNumberEq","isNumberGt","isNumberGte","isNumberLt","isNumberLte","isNumberOrUndefined","isNumericString","isObject","isObjectOrUndefined","isOdd","isPlainObject","isPos","isPosInfinity","isPosZero","isPowerOfTwo","isSafeInteger","isSafeNumber","isStrictEqual","isString","isStringOrUndefined","isTrue","isTrueOrUndefined","isTypedObject","isUndefined","isZero","require","str","repeatString","query","canvas","sum"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,YAAA,EAAA,MAAAA,aAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,OAAA,EAAA,MAAAC,QAAAA;AAAA,EAAA,kBAAA,EAAA,MAAAC,mBAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,oBAAA,EAAA,MAAAC,qBAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,uBAAA,EAAA,MAAAC,wBAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,wBAAA,EAAA,MAAAC,yBAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,sBAAA,EAAA,MAAAC,uBAAAA;AAAA,EAAA,MAAA,EAAA,MAAAC,OAAAA;AAAA,EAAA,OAAA,EAAA,MAAAC,QAAAA;AAAA,EAAA,kBAAA,EAAA,MAAAC,mBAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,OAAA,EAAA,MAAAC,QAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,qBAAA,EAAA,MAAAC,sBAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,OAAA,EAAA,MAAAC,QAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,gBAAA,EAAA,MAAAC,iBAAAA;AAAA,EAAA,yBAAA,EAAA,MAAAC,0BAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,oBAAA,EAAA,MAAAC,qBAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,KAAA,EAAA,MAAAC,MAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gBAAAA;AAAA,EAAA,0BAAA,EAAA,MAAAC,2BAAAA;AAAA,EAAA,gBAAA,EAAA,MAAAC,iBAAAA;AAAA,EAAA,2BAAA,EAAA,MAAAC,4BAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,MAAA,EAAA,MAAAC,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gBAAAA;AAAA,EAAA,wBAAA,EAAA,MAAAC,yBAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,mBAAA,EAAA,MAAAC,oBAAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gBAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,mBAAA,EAAA,MAAAC,oBAAAA;AAAA,EAAA,KAAA,EAAA,MAAAC,MAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,KAAA,EAAA,MAAAC,MAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,SAAA,EAAA,MAAAC,UAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,YAAA,EAAA,MAAAC,aAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,mBAAA,EAAA,MAAAC,oBAAAA;AAAA,EAAA,MAAA,EAAA,MAAAC,OAAAA;AAAA,EAAA,iBAAA,EAAA,MAAAC,kBAAAA;AAAA,EAAA,aAAA,EAAA,MAAAC,cAAAA;AAAA,EAAA,WAAA,EAAA,MAAAC,YAAAA;AAAA,EAAA,MAAA,EAAA,MAAAC,OAAAA;AAAA,EAAA,OAAA,EAAA,MAAAC,QAAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,SAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,QAAA,EAAA,MAAA1D,SAAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,KAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAKO,SAAS,YAAkC,CAAA,EAAoB;AAClE,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,CAAO,OAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACtD;AAEO,SAAS,cAAoC,CAAA,EAAsB;AACtE,EAAA,OAAO,YAAY,CAAC,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AACvC;AAEO,SAAS,eAAqC,CAAA,EAAiC;AAClF,EAAA,OAAO,WAAA,CAAY,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAA4B,CAAA;AACvE;AAEO,SAAS,UAAA,CAAiC,GAAM,KAAA,EAA0C;AAC7F,EAAA,OAAO,WAAA,CAAY,CAAC,CAAA,CAAE,IAAA,CAAK,OAAK,CAAA,CAAE,CAAC,MAAM,KAAK,CAAA;AAClD;AAEO,SAAS,WAAA,CACZ,GACA,QAAA,EACI;AACJ,EAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,eAAe,CAAC,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,CAAC,CAAA;AACzD;;;ADrBO,SAAS,aAAA,CAAc,MAAe,IAAA,EAAwB;AACjE,EAAA,OAAO,IAAA,KAAS,IAAA;AACpB;AAEO,SAAS,WAAA,CAAY,MAAe,IAAA,EAAwB;AAC/D,EAAA,OAAO,SAAA,CAAU,MAAM,IAAI,CAAA;AAC/B;AAEO,SAAS,YAAY,GAAA,EAAgC;AACxD,EAAA,OAAO,GAAA,KAAQ,MAAA;AACnB;AAEO,SAAS,OAAO,GAAA,EAA2B;AAC9C,EAAA,OAAO,GAAA,KAAQ,IAAA;AACnB;AAEO,SAAS,UAAU,GAAA,EAAuC;AAC7D,EAAA,OAAO,GAAA,KAAQ,UAAa,GAAA,KAAQ,IAAA;AACxC;AAEO,SAAS,UAAa,GAAA,EAAsC;AAC/D,EAAA,OAAO,GAAA,KAAQ,MAAA;AACnB;AAEO,SAAS,UAAa,GAAA,EAAiC;AAC1D,EAAA,OAAO,GAAA,KAAQ,IAAA;AACnB;AAEO,SAAS,SAAS,GAAA,EAA8C;AACnE,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,QAAQ,IAAA,IAAQ,CAAC,QAAQ,GAAG,CAAA;AAClE;AAEO,SAAS,cAAc,GAAA,EAA4C;AACtE,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,KAAW,CAAA;AACxD;AACO,SAAS,oBAAoB,GAAA,EAA0D;AAC1F,EAAA,OAAO,GAAA,KAAQ,MAAA,IAAa,QAAA,CAAS,GAAG,CAAA;AAC5C;AAEO,SAAS,cAAc,GAAA,EAA8C;AACxE,EAAA,IAAI,CAAC,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,KAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA;AACvC,EAAA,OAAO,KAAA,KAAU,MAAA,CAAO,SAAA,IAAa,KAAA,KAAU,IAAA;AACnD;AAEO,SAAS,aAAA,CAAgC,KAAc,IAAA,EAAuC;AACjG,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,KAAK,KAAA,CAAM,CAAA,CAAA,KAAK,KAAK,GAAG,CAAA;AACpD;AAEA,SAAS,MAAS,GAAA,EAA6B;AAC3C,EAAA,OAAO,GAAA,YAAe,GAAA;AAC1B;AAEO,SAAS,QAAW,GAAA,EAAgC;AACvD,EAAA,OAAO,CAAC,CAAC,GAAA,IAAO,MAAA,CAAO,UAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AAC5D;AAEO,SAAS,mBAAmB,GAAA,EAA4C;AAC3E,EAAA,OAAO,GAAA,KAAQ,MAAA,IAAa,OAAA,CAAQ,GAAG,CAAA;AAC3C;AAEO,SAAS,aAAgB,GAAA,EAAgD;AAC5E,EAAA,OAAO,OAAA,CAAQ,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,KAAW,CAAA;AAC1C;AAEO,SAAS,gBAAmB,GAAA,EAAgC;AAC/D,EAAA,OAAO,OAAA,CAAQ,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,CAAA;AACxC;AAEO,SAAS,wBAA2B,GAAA,EAA4C;AACnF,EAAA,OAAQ,QAAQ,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,KAAW,KAAM,GAAA,KAAQ,MAAA;AACzD;AAEO,SAAS,2BAA8B,GAAA,EAA4C;AACtF,EAAA,OAAQ,QAAQ,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,KAAM,GAAA,KAAQ,MAAA;AACvD;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA;AAC1B;AAEO,SAAS,cAAc,GAAA,EAAyB;AACnD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,KAAW,CAAA;AACrD;AAEO,SAAS,iBAAiB,GAAA,EAA6B;AAC1D,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,CAAA;AACnD;AAEO,SAAS,oBAAoB,GAAA,EAAyC;AACzE,EAAA,OAAO,GAAA,KAAQ,MAAA,IAAa,OAAO,GAAA,KAAQ,QAAA;AAC/C;AAEO,SAAS,yBAAyB,GAAA,EAAqC;AAC1E,EAAA,OAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,KAAW,KAAM,GAAA,KAAQ,MAAA;AACpE;AAEO,SAAS,4BAA4B,GAAA,EAAyC;AACjF,EAAA,OAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,KAAM,GAAA,KAAQ,MAAA;AAClE;AAEO,SAAS,UAAU,GAAA,EAA8B;AACpD,EAAA,OAAO,OAAO,GAAA,KAAQ,SAAA;AAC1B;AAEO,SAAS,qBAAqB,GAAA,EAA0C;AAC3E,EAAA,OAAO,GAAA,KAAQ,MAAA,IAAa,OAAO,GAAA,KAAQ,SAAA;AAC/C;AAEO,SAAS,OAAO,GAAA,EAA2B;AAC9C,EAAA,OAAO,GAAA,KAAQ,IAAA;AACnB;AAEO,SAAS,kBAAkB,GAAA,EAAuC;AACrE,EAAA,OAAO,GAAA,KAAQ,QAAQ,GAAA,KAAQ,MAAA;AACnC;AAEO,SAAS,QAAQ,GAAA,EAA4B;AAChD,EAAA,OAAO,GAAA,KAAQ,KAAA;AACnB;AAEO,SAAS,mBAAmB,GAAA,EAAwC;AACvE,EAAA,OAAO,GAAA,KAAQ,SAAS,GAAA,KAAQ,MAAA;AACpC;AAEO,SAAS,WAA8C,GAAA,EAAwB;AAClF,EAAA,OAAO,OAAO,GAAA,KAAQ,UAAA;AAC1B;AAEO,SAAS,sBAAsB,GAAA,EAA4D;AAC9F,EAAA,OAAO,GAAA,KAAQ,MAAA,IAAa,OAAO,GAAA,KAAQ,UAAA;AAC/C;AAEO,SAAS,WAAA,CAAkC,KAAc,OAAA,EAA+B;AAC3F,EAAA,OAAO,cAAc,OAAO,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,GAAG,CAAA;AACrD;AAEO,SAAS,sBAAA,CAA6C,KAAc,OAAA,EAA2C;AAClH,EAAA,OAAO,GAAA,KAAQ,UAAa,aAAA,CAAc,OAAO,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,MAAM,GAAG,CAAA;AAC1E;AAEO,SAAS,gBAAgB,GAAA,EAA6B;AACzD,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,IAAI,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACzD,EAAA,MAAM,IAAI,CAAC,GAAA;AACX,EAAA,OAAO,MAAA,CAAO,SAAS,CAAC,CAAA;AAC5B;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA;AAC1B;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA;AAC1B;AAEO,SAAS,aAAa,GAAA,EAA6B;AACtD,EAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,MAAA,CAAO,cAAc,GAAG,CAAA;AACpD;AAEO,SAAS,oBAAoB,GAAA,EAAyC;AACzE,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,MAAA;AAC9C;AAEO,SAAS,UAAA,CAAW,KAAc,GAAA,EAA6B;AAClE,EAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,KAAQ,GAAA;AACpC;AAEO,SAAS,UAAA,CAAW,KAAc,GAAA,EAA6B;AAClE,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,GAAM,GAAA;AACnD;AAEO,SAAS,WAAA,CAAY,KAAc,GAAA,EAA6B;AACnE,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,GAAA;AACpD;AAEO,SAAS,UAAA,CAAW,KAAc,GAAA,EAA6B;AAClE,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,GAAM,GAAA;AACnD;AAEO,SAAS,WAAA,CAAY,KAAc,GAAA,EAA6B;AACnE,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,GAAA;AACpD;AAEO,SAAS,eAAA,CAAgB,GAAA,EAAc,GAAA,EAAc,GAAA,EAA6B;AACrF,EAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,IAAO,GAAA,IAAO,GAAA,IAAO,GAAA;AACnF;AAEO,SAAS,wBAAA,CAAyB,GAAA,EAAc,GAAA,EAAc,GAAA,EAA6B;AAC9F,EAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,GAAA,IAAO,GAAA,GAAM,GAAA;AACjF;AAEO,SAASA,UAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,SAAS,GAAG,CAAA;AACzD;AAEO,SAAS,QAAQ,GAAA,EAA6B;AACjD,EAAA,OAAOA,SAAAA,CAAS,GAAG,CAAA,IAAK,CAAC,UAAU,GAAG,CAAA;AAC1C;AAEO,SAAS,UAAU,GAAA,EAA6B;AACnD,EAAA,OAAO,OAAO,QAAQ,QAAA,IAAYA,SAAAA,CAAS,GAAG,CAAA,IAAK,GAAA,KAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7E;AAEO,SAAS,cAAc,GAAA,EAA6B;AACvD,EAAA,OAAO,SAAA,CAAU,GAAG,CAAA,IAAK,MAAA,CAAO,cAAc,GAAG,CAAA;AACrD;AAEO,SAAS,qBAAqB,GAAA,EAAyC;AAC1E,EAAA,OAAQ,OAAO,GAAA,KAAQ,QAAA,IAAYA,SAAAA,CAAS,GAAG,CAAA,IAAK,GAAA,KAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,IAAM,GAAA,KAAQ,MAAA;AAC5F;AAEO,SAAS,WAAA,CAAY,KAAc,GAAA,EAA6B;AACnE,EAAA,OAAO,SAAA,CAAU,GAAG,CAAA,IAAK,GAAA,KAAQ,GAAA;AACrC;AAEO,SAAS,WAAA,CAAY,KAAc,GAAA,EAA6B;AACnE,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,GAAM,GAAA;AACpD;AAEO,SAAS,YAAA,CAAa,KAAc,GAAA,EAA6B;AACpE,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,GAAA;AACrD;AAEO,SAAS,WAAA,CAAY,KAAc,GAAA,EAA6B;AACnE,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,GAAM,GAAA;AACpD;AAEO,SAAS,YAAA,CAAa,KAAc,GAAA,EAA6B;AACpE,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,GAAA;AACrD;AAEO,SAAS,gBAAA,CAAiB,GAAA,EAAc,GAAA,EAAc,GAAA,EAA6B;AACtF,EAAA,OAAO,SAAA,CAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,IAAO,GAAA,IAAO,GAAA,IAAO,GAAA;AACpF;AAEO,SAAS,yBAAA,CAA0B,GAAA,EAAc,GAAA,EAAc,GAAA,EAA6B;AAC/F,EAAA,OAAO,SAAA,CAAU,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,GAAA,IAAO,GAAA,GAAM,GAAA;AAClF;AAEO,SAAS,WAAW,GAAA,EAA6B;AACpD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,MAAM,GAAG,CAAA;AACtD;AAEO,SAAS,WAAW,GAAA,EAA6B;AACpD,EAAA,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,CAAA,QAAA;AACvC;AAEO,SAAS,cAAc,GAAA,EAA6B;AACvD,EAAA,OAAO,GAAA,KAAQ,QAAA;AACnB;AAEO,SAAS,cAAc,GAAA,EAA6B;AACvD,EAAA,OAAO,GAAA,KAAQ,CAAA,QAAA;AACnB;AAEO,SAAS,MAAM,GAAA,EAA6B;AAC/C,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,GAAM,CAAA;AAC5C;AAEO,SAAS,MAAM,GAAA,EAA6B;AAC/C,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,GAAM,CAAA;AAC5C;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,IAAO,CAAA;AAC7C;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,IAAO,CAAA;AAC7C;AAEO,SAAS,OAAO,GAAA,EAA6B;AAChD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,CAAA;AAC9C;AAEO,SAAS,UAAU,GAAA,EAA6B;AACnD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,CAAA,IAAM,IAAI,GAAA,KAAQ,QAAA;AAChE;AAEO,SAAS,UAAU,GAAA,EAA6B;AACnD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,CAAA,IAAM,IAAI,GAAA,KAAQ,CAAA,QAAA;AAChE;AAEO,SAAS,MAAM,GAAA,EAA6B;AAC/C,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,KAAK,GAAA,CAAI,GAAG,IAAI,CAAA,KAAM,CAAA;AACnD;AAEO,SAAS,OAAO,GAAA,EAA6B;AAChD,EAAA,OAAO,SAAA,CAAU,GAAG,CAAA,IAAK,GAAA,GAAM,CAAA,KAAM,CAAA;AACzC;AAEO,SAAS,YAAA,CAAa,KAAc,IAAA,EAA8B;AACrE,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,IAAA,KAAS,QAAA,IAAa,MAAM,IAAA,KAAS,CAAA;AAClF;AAEO,SAAS,aAAa,GAAA,EAA6B;AACtD,EAAA,OAAO,UAAU,GAAG,CAAA,IAAK,MAAM,CAAA,IAAA,CAAM,GAAA,GAAO,MAAM,CAAA,MAAQ,CAAA;AAC9D;AAEO,SAAS,UAAA,CAAc,KAAc,SAAA,EAAgD;AACxF,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpB,IAAA,OAAO,SAAA,CAAU,SAAS,GAAQ,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,IAAA,OAAO,SAAA,CAAU,IAAI,GAAQ,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,KAAA;AACX;AAEO,SAAS,OAAA,CAAW,OAAgB,KAAA,EAA2C;AAClF,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,GACd,gBAAA,CAAiB,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAC3C,YAAA,CAAa,KAAA,EAAO,CAAC,CAAA;AAC/B;AAEO,SAAS,UAAU,WAAA,EAAkC;AACxD,EAAA,IAAI;AAAE,IAAA,WAAA,EAAY;AAAG,IAAA,OAAO,KAAA;AAAA,EAAO,SAC5B,GAAA,EAAK;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AAC/B;AAEO,SAAS,aAAa,WAAA,EAAkC;AAC3D,EAAA,IAAI;AAAE,IAAA,WAAA,EAAY;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM,SAC3B,GAAA,EAAK;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAChC;AAEO,SAAS,KAAA,CAAyB,OAAuB,KAAA,EAAsD;AAClH,EAAA,IAAI;AACA,IAAA,OAAO,KAAA,EAAM;AAAA,EACjB,SACO,GAAA,EAAK;AACR,IAAA,OAAO,UAAA,CAAW,KAAK,CAAA,GAAI,KAAA,EAAM,GAAI,KAAA;AAAA,EACzC;AACJ;;;ADpUO,SAAS,aAAA,CAA2C,KAAc,KAAA,EAAwD;AAC7H,EAAA,OAAO,SAAS,GAAG,CAAA,IAAK,MAAM,KAAA,CAAM,CAAA,CAAA,KAAK,KAAK,GAAG,CAAA;AACrD;AAEO,SAAS,SAAA,CAAa,GAAM,CAAA,EAAe;AAC9C,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AAGpB,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,EAAM,OAAO,KAAA;AAGrC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,UAAU,OAAO,KAAA;AAG3D,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACtC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,EAAK,CAAA,KAAM,UAAU,GAAA,EAAK,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,EACnD;AAGA,EAAA,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,MAAM,OAAA,CAAQ,CAAC,GAAG,OAAO,KAAA;AAGlD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAE1C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,CAAA,EAAG,GAAG,GAAG,OAAO,KAAA;AAC1D,IAAA,IAAI,CAAC,UAAU,CAAA,CAAE,GAAG,GAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,YAAY,GAAA,EAAkB;AAC1C,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,MAAA;AACzB,EAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,OAAA;AACzB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,OAAO,GAAA;AAE3C,EAAA,MAAM,GAAA,GAAM,OAAO,SAAA,CAAU,QAAA,CAAS,KAAK,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC3D,EAAA,OAAO,GAAA,IAAO,QAAA;AAClB;;;AD/CO,SAAS,YAAY2D,IAAAA,EAAuB;AAC/C,EAAA,OAAOA,IAAAA,CAAI,MAAM,EAAE,CAAA;AACvB;AAQO,SAAS,YAAA,CAAaC,eAAsB,WAAA,EAA6B;AAC5E,EAAA,IAAI,CAAC,SAAA,CAAU,WAAW,CAAA,IAAK,cAAc,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA,CAAM,mCAAA,GAAsC,WAAW,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,IAAI,KAAA,CAAM,WAAA,GAAc,CAAC,CAAA,CAAE,KAAKA,aAAY,CAAA;AACvD;AAOO,SAAS,WAAA,CAAYD,MAAa,SAAA,EAA6B;AAClE,EAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,IAAK,YAAY,CAAA,EAAG;AACxC,IAAA,MAAM,IAAI,KAAA,CAAM,oCAAA,GAAuC,SAAS,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,SAAmB,EAAC;AACxB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIA,IAAAA,CAAI,MAAA,EAAQ,KAAK,SAAA,EAAW;AAC5C,IAAA,MAAA,CAAO,KAAKA,IAAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,MAAA;AACX;AASO,SAAS,SAAA,CAAUA,IAAAA,EAAa,GAAA,EAAa,WAAA,EAAqB,MAAA,EAAgB;AACrF,EAAA,IAAI,CAAC,SAAA,CAAU,WAAW,CAAA,IAAK,cAAc,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA,CAAM,mCAAA,GAAsC,WAAW,CAAA;AAAA,EACrE,CAAA,MAAA,IACS,CAAC,SAAA,CAAU,GAAG,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,GAAM,WAAA,GAAcA,IAAAA,CAAI,MAAA,EAAQ;AACnE,IAAA,MAAM,IAAI,MAAM,2BAAA,GAA8B,GAAA,GAAM,qBAAqB,WAAA,GAAc,iBAAA,GAAoBA,KAAI,MAAM,CAAA;AAAA,EACzH,CAAA,MACK;AACD,IAAA,OAAOA,IAAAA,CAAI,UAAU,CAAA,EAAG,GAAG,IAAI,MAAA,GAASA,IAAAA,CAAI,SAAA,CAAU,GAAA,GAAM,WAAW,CAAA;AAAA,EAC3E;AACJ;AAQO,SAAS,QAAA,CAASA,IAAAA,EAAa,GAAA,EAAa,SAAA,EAAmB;AAClE,EAAA,OAAO,SAAA,CAAUA,IAAAA,EAAK,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAC3C;AAQO,SAAS,QAAA,CAASA,IAAAA,EAAa,GAAA,EAAa,WAAA,EAAqB;AACpE,EAAA,OAAO,SAAA,CAAUA,IAAAA,EAAK,GAAA,EAAK,WAAA,EAAa,EAAE,CAAA;AAC9C;AAQO,SAAS,SAAA,CAAUA,MAAa,EAAA,EAAoB;AACvD,EAAA,IAAI,GAAG,MAAA,KAAW,CAAA,IAAKA,IAAAA,CAAI,MAAA,KAAW,GAAG,OAAO,CAAA;AAEhD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,IAAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,IAAIA,IAAAA,CAAI,CAAC,CAAA,KAAM,EAAA,EAAI,KAAA,EAAA;AAAA,EACvB;AAEA,EAAA,OAAO,KAAA;AACX;AAMO,SAAS,uBAAuB,YAAA,EAAsB;AACzD,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACrB,IAAA,OAAO,EAAA;AAAA,EACX;AACA,EAAA,IAAI,IAAA,GAAO,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA;AAChC,EAAA,IAAI,QAAA,GAAW,EAAA;AAEf,EAAA,MAAM,UAAU,MAAM;AAClB,IAAA,IAAI,SAAS,EAAA,EAAI;AACb,MAAA,IAAI,aAAa,EAAA,EAAI;AACjB,QAAA,QAAA,IAAY,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,MAC/D,CAAA,MACK;AACD,QAAA,QAAA,IAAY,GAAA,GAAM,IAAA;AAAA,MACtB;AACA,MAAA,IAAA,GAAO,EAAA;AAAA,IACX;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAc;AACtC,IAAA,OAAO,CAAA,CAAE,aAAY,KAAM,CAAA,CAAE,aAAY,IAAK,CAAA,KAAM,EAAE,WAAA,EAAY;AAAA,EACtE,CAAA;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,IAAA,IAAI,CAAA,GAAI,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA;AAC7B,IAAA,IAAI,kBAAA,CAAmB,CAAC,CAAA,EAAG;AACvB,MAAA,OAAA,EAAQ;AAAA,IACZ;AACA,IAAA,IAAA,IAAQ,EAAE,WAAA,EAAY;AAAA,EAC1B;AAEA,EAAA,OAAA,EAAQ;AAER,EAAA,OAAO,QAAA;AACX;AAEO,SAAS,UAAU,KAAA,EAAY,QAAA,GAAW,GAAG,IAAA,mBAAO,IAAI,SAAQ,EAAW;AAE9E,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAEhC,EAAA,MAAM,IAAI,OAAO,KAAA;AACjB,EAAA,QAAQ,CAAA;AAAG,IACP,KAAK,SAAA;AAAW,MAAA,OAAO,QAAQ,MAAA,GAAS,OAAA;AAAA,IACxC,KAAK,QAAA;AACD,MAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,KAAA;AAC9B,MAAA,IAAI,CAAC3D,UAAS,KAAK,CAAA;AACf,QAAA,OAAO,KAAA,GAAQ,IAAI,WAAA,GAAc,UAAA;AACrC,MAAA,OAAO,MAAM,QAAA,EAAS;AAAA,IAC1B,KAAK,QAAA;AAAU,MAAA,OAAO,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,IAC9B,KAAK,QAAA;AAAU,MAAA,OAAO,IAAI,KAAK,CAAA,CAAA,CAAA;AAAA,IAC/B,KAAK,QAAA;AAAU,MAAA,OAAO,KAAA,CAAM,WAAA,GACtB,CAAA,OAAA,EAAU,KAAA,CAAM,WAAW,CAAA,CAAA,CAAA,GAC3B,UAAA;AAAA,IACN,KAAK,UAAA;AACD,MAAA,OAAO,YAAY,KAAA,CAAM,IAAA,GAAO,IAAI,KAAA,CAAM,IAAI,KAAK,EAAE,CAAA,CAAA,CAAA;AAAA;AAI7D,EAAA,IAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,IAAA,OAAO,YAAA;AACX,EAAA,IAAI,QAAA,IAAY,CAAA;AACZ,IAAA,OAAO,eAAA;AAEX,EAAA,QAAA,EAAA;AAGA,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAEd,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAmB,SAAA,CAAU,CAAA,EAAG,UAAU,IAAI,CAAA;AAG7D,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,MAAM,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,OAAO,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,KAAA,GAAQ,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,EAClD;AAGA,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,EAAG;AAE3B,IAAA,IAAI,KAAA,YAAiB,QAAA;AACjB,MAAA,OAAO,CAAA,SAAA,EAAY,MAAM,UAAU,CAAA,CAAA,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAY,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnE,IAAA,OAAO,CAAA,EAAG,KAAA,CAAM,WAAA,CAAY,IAAI,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,EAC9C;AAGA,EAAA,IAAI,KAAA,YAAiB,WAAA;AACjB,IAAA,OAAO,CAAA,YAAA,EAAe,MAAM,UAAU,CAAA,CAAA,CAAA;AAG1C,EAAA,IAAI,iBAAiB,GAAA,EAAK;AACtB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,CAAA,CACrC,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,IAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA,CAC5C,IAAA,CAAK,IAAI,CAAA;AACd,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GACpB,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,IAAA,CAAA,GACjB,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,iBAAiB,GAAA,EAAK;AACtB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,CACpC,GAAA,CAAI,CAAA,CAAA,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACjB,KAAK,IAAI,CAAA;AACd,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GACpB,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,IAAA,CAAA,GACjB,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,KAAA,YAAiB,OAAA;AACjB,IAAA,OAAO,cAAA;AAEX,EAAA,IAAI,KAAA,YAAiB,OAAA;AACjB,IAAA,OAAO,cAAA;AAGX,EAAA,IAAI,KAAA,YAAiB,IAAA;AACjB,IAAA,OAAO,CAAA,MAAA,EAAS,KAAA,CAAM,WAAA,EAAa,CAAA,EAAA,CAAA;AAEvC,EAAA,IAAI,KAAA,YAAiB,MAAA;AACjB,IAAA,OAAO,MAAM,QAAA,EAAS;AAE1B,EAAA,IAAI,KAAA,YAAiB,KAAA;AACjB,IAAA,OAAO,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,MAAM,OAAO,CAAA,EAAA,CAAA;AAE1C,EAAA,IAAI,KAAA,YAAiB,OAAA;AACjB,IAAA,OAAO,cAAA;AAEX,EAAA,IAAI,KAAA,YAAiB,GAAA;AACjB,IAAA,OAAO,CAAA,KAAA,EAAQ,MAAM,IAAI,CAAA,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAA,YAAiB,eAAA;AACjB,IAAA,OAAO,CAAA,iBAAA,EAAoB,KAAA,CAAM,QAAA,EAAU,CAAA,EAAA,CAAA;AAG/C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,SAAS,OAAO,SAAA;AAC9B,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAG3B,EAAA,MAAM,iBAAA,GACF,OAAO,KAAA,EAAO,QAAA,KAAa,cAC3B,KAAA,CAAM,QAAA,KAAa,OAAO,SAAA,CAAU,QAAA;AAExC,EAAA,IAAI,iBAAA,EAAmB;AACnB,IAAA,IAAI;AACA,MAAA,MAAM2D,IAAAA,GAAM,MAAM,QAAA,EAAS;AAE3B,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAKA,IAAG,GAAG,OAAOA,IAAAA;AAAA,IAC7C,CAAA,CAAA,MACM;AAAA,IAAiC;AAAA,EAC3C;AAGA,EAAA,IAAI,MAAM,QAAA,EAAU;AAChB,IAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,GAAA;AAAA,MAClC,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM,CAAA,EAAG,KAAA,CAAM,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,KAChD;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,GAAG,QAAQ,CAAA,GAAA,CAAA;AAC5C,IAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC7C;AAGA,EAAA,OAAO,OAAO,KAAK,CAAA;AACvB;AAcO,SAAS,YAAYA,IAAAA,EAAuB;AAC/C,EAAA,OAAOA,IAAAA,CAAI,MAAM,WAAW,CAAA,CAAE,OAAO,CAAA,CAAA,KAAK,CAAC,CAAC,CAAC,CAAA;AACjD;AAgBO,SAAS,cAAA,CAAeA,SAAgB,SAAA,EAA+B;AAC1E,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,CAACA,IAAG,CAAA;AAGvC,EAAA,MAAM,OAAA,GAAU,UAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAC,CAAA;AAG3E,EAAA,MAAM,QAAQ,IAAI,MAAA,CAAO,QAAQ,IAAA,CAAK,GAAG,GAAG,GAAG,CAAA;AAG/C,EAAA,OAAOA,IAAAA,CAAI,MAAM,KAAK,CAAA;AAC1B;AAeO,SAAS,YAAA,CAAaA,MAAa,SAAA,EAA6B;AACnE,EAAA,OAAO,eAAeA,IAAAA,EAAK,GAAG,SAAA,CAAU,KAAA,CAAM,EAAE,CAAC,CAAA;AACrD;AAEO,SAAS,SAAA,CAAUA,SAAgB,KAAA,EAAyB;AAC/D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAOA,KAAI,SAAA,EAAU;AAE7C,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA;AAE5D,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,OAAO,OAAA,EAAS;AACZ,IAAA,OAAA,GAAU,KAAA;AACV,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACpB,MAAA,IAAIA,IAAAA,CAAI,UAAA,CAAW,CAAC,CAAA,EAAG;AACnB,QAAAA,IAAAA,GAAMA,IAAAA,CAAI,KAAA,CAAM,CAAA,CAAE,MAAM,CAAA;AACxB,QAAA,OAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAOA,IAAAA;AACX;AAEO,SAAS,OAAA,CAAQA,SAAgB,KAAA,EAAyB;AAC7D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAOA,KAAI,OAAA,EAAQ;AAE3C,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA;AAE5D,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,OAAO,OAAA,EAAS;AACZ,IAAA,OAAA,GAAU,KAAA;AACV,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACpB,MAAA,IAAIA,IAAAA,CAAI,QAAA,CAAS,CAAC,CAAA,EAAG;AACjB,QAAAA,OAAMA,IAAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,MAAM,CAAA;AAC5B,QAAA,OAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAOA,IAAAA;AACX;AAEO,SAAS,IAAA,CAAKA,SAAgB,KAAA,EAAyB;AAC1D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAOA,KAAI,IAAA,EAAK;AACxC,EAAA,OAAO,QAAQ,SAAA,CAAUA,IAAAA,EAAK,GAAG,KAAK,CAAA,EAAG,GAAG,KAAK,CAAA;AACrD;;;AD/WA,IAAM,GAAA,GAAM,SAAA;AAIZ,IAAI,gBAAA,GAAqC,KAAA;AAElC,SAAS,cAAc,UAAA,EAA+B;AACzD,EAAA,gBAAA,GAAmB,UAAA,IAAc,KAAA;AACrC;AAEA,SAAS,SAAS,IAAA,EAAqC;AACnD,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACxB,EAAA,MAAM,IAAI,gBAAA,CAAiB,mBAAA,IAAuB,QAAQ,EAAA,GAAK,EAAA,GAAM,MAAM,GAAA,CAAK,CAAA;AACpF;AAEO,SAAS,MAAA,CAAU,WAAc,GAAA,EAAc;AAClD,EAAA,IAAI,CAAC,SAAA,EAAW;AACZ,IAAA,KAAA,CAAM,GAAG,CAAA;AAAA,EACb;AACJ;AAEO,SAASD,QAAAA,CAAW,KAA2B,GAAA,EAAiB;AACnE,EAAA,IAAI,OAAO,IAAA,EAAM;AACb,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,sBAAsB,GAAG,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAA;AACX;AAEO,SAAS,cAAA,CAAkB,KAAoB,GAAA,EAAiB;AACnE,EAAA,IAAI,QAAQ,MAAA,EAAW;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,wBAAwB,GAAG,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,GAAA;AACX;AAEO,SAAS,cAAA,CAAkB,KAAA,EAAgB,KAAA,EAAyB,GAAA,EAAiB;AACxF,EAAA,IAAI,CAAC,aAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAC3B,IAAA,KAAA,CAAM,YAAY,KAAK,CAAA,uBAAA,EAA0B,IAAI,KAAK,CAAC,IAAI,GAAG,CAAA;AACtE,EAAA,OAAO,MAAM,KAAK,CAAA;AACtB;AAEO,SAAS,KAAK,GAAA,EAAqB;AACtC,EAAA,KAAA,CAAM,GAAG,CAAA;AACb;AAEO,SAASR,cAAAA,CAAuB,IAAA,EAAS,IAAA,EAAe,GAAA,EAAiB;AAC5E,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,IAAA,EAAM,IAAI,CAAA;AAC/B,IAAA,KAAA,CAAM,YAAY,GAAA,CAAI,IAAI,CAAC,CAAA,uBAAA,EAA0B,IAAI,IAAI,GAAG,CAAA;AACpE,EAAA,OAAO,IAAA;AACX;AAEO,SAAS9D,YAAAA,CAAqB,IAAA,EAAS,IAAA,EAAe,GAAA,EAAiB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,IAAA,EAAM,IAAI,CAAA;AAC7B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,IAAI,CAAC,uBAAuB,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACtE,EAAA,OAAO,IAAA;AACX;AAEO,SAASoE,YAAAA,CAAY,KAAc,GAAA,EAAyB;AAC/D,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAG,CAAA;AACtB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,oBAAoB,GAAG,CAAA;AACrD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS5B,OAAAA,CAAO,KAAc,GAAA,EAAoB;AACrD,EAAA,IAAI,CAAC,aAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AACjB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,eAAe,GAAG,CAAA;AAChD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,UAAAA,CAAU,KAAc,GAAA,EAAgC;AACpE,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AACpB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,4BAA4B,GAAG,CAAA;AAC7D,EAAA,OAAO,GAAA;AACX;AAEO,SAASxC,UAAAA,CAAa,KAAQ,GAAA,EAAqC;AACtE,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,kBAAkB,GAAG,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,GAAA;AACX;AAEO,SAASqC,UAAAA,CAAa,KAAQ,GAAA,EAAgC;AACjE,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,kBAAkB,GAAG,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,GAAA;AACX;AAEO,SAASc,SAAAA,CAAS,KAAc,GAAA,EAAuC;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,iBAAiB,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACX;AAEO,SAAShD,cAAAA,CAAc,KAAc,GAAA,EAAuC;AAC/E,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uBAAuB,GAAG,CAAA;AACxD,EAAA,OAAO,GAAA;AACX;AAEO,SAASmD,cAAAA,CAAc,KAAc,GAAA,EAAuC;AAC/E,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uBAAuB,GAAG,CAAA;AACxD,EAAA,OAAO,GAAA;AACX;AAEO,SAASF,oBAAAA,CAAoB,KAAc,GAAA,EAAmD;AACjG,EAAA,IAAI,CAAC,aAAA,CAAM,mBAAA,CAAoB,GAAG,CAAA;AAC9B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,8BAA8B,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAASc,cAAAA,CAAgC,GAAA,EAAc,IAAA,EAAmB,GAAA,EAAiC;AAC9G,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAA,EAAK,IAAI,CAAA;AAC9B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,iBAAiB,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAASxE,QAAAA,CAAW,KAAc,GAAA,EAAmB;AACxD,EAAA,IAAI,CAAC,aAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAClB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,gBAAgB,GAAG,CAAA;AACjD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,mBAAAA,CAAmB,KAAc,GAAA,EAA4C;AACzF,EAAA,IAAI,CAAC,aAAA,CAAM,kBAAA,CAAmB,GAAG,CAAA;AAC7B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,6BAA6B,GAAG,CAAA;AAC9D,EAAA,OAAO,IAAA;AACX;AAEO,SAASM,aAAAA,CAAsB,KAAU,GAAA,EAAkC;AAC9E,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAG,CAAA;AACvB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,sBAAsB,GAAG,CAAA;AAC3D;AAEO,SAAS+B,gBAAAA,CAAyB,KAAU,GAAA,EAAkC;AACjF,EAAA,IAAI,CAAC,aAAA,CAAM,eAAA,CAAgB,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,0BAA0B,GAAG,CAAA;AAC/D;AAEO,SAAS9B,wBAAAA,CAAiC,KAAc,GAAA,EAA8C;AACzG,EAAA,IAAI,CAAC,aAAA,CAAM,uBAAA,CAAwB,GAAG,CAAA;AAClC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,mCAAmC,GAAG,CAAA;AACxE;AAEO,SAAS+B,2BAAAA,CAAoC,KAAc,GAAA,EAA8C;AAC5G,EAAA,IAAI,CAAC,aAAA,CAAM,0BAAA,CAA2B,GAAG,CAAA;AACrC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uCAAuC,GAAG,CAAA;AAC5E;AAEO,SAAS6B,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,iBAAiB,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS1D,cAAAA,CAAc,KAAc,GAAA,EAAkB;AAC1D,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uBAAuB,GAAG,CAAA;AACxD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS8B,iBAAAA,CAAiB,KAAc,GAAA,EAAsB;AACjE,EAAA,IAAI,CAAC,aAAA,CAAM,gBAAA,CAAiB,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,2BAA2B,GAAG,CAAA;AAC5D,EAAA,OAAO,GAAA;AACX;AAEO,SAAS6B,oBAAAA,CAAoB,KAAc,GAAA,EAAkC;AAChF,EAAA,IAAI,CAAC,aAAA,CAAM,mBAAA,CAAoB,GAAG,CAAA;AAC9B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,8BAA8B,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAAS1D,yBAAAA,CAAyB,KAAc,GAAA,EAA8B;AACjF,EAAA,IAAI,CAAC,aAAA,CAAM,wBAAA,CAAyB,GAAG,CAAA;AACnC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,oCAAoC,GAAG,CAAA;AACrE,EAAA,OAAO,GAAA;AACX;AAEO,SAAS8B,4BAAAA,CAA4B,KAAc,GAAA,EAAkC;AACxF,EAAA,IAAI,CAAC,aAAA,CAAM,2BAAA,CAA4B,GAAG,CAAA;AACtC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,wCAAwC,GAAG,CAAA;AACzE,EAAA,OAAO,GAAA;AACX;AAEO,SAAStC,UAAAA,CAAU,KAAc,GAAA,EAAuB;AAC3D,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AACpB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,kBAAkB,GAAG,CAAA;AACnD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,qBAAAA,CAAqB,KAAc,GAAA,EAAmC;AAClF,EAAA,IAAI,CAAC,aAAA,CAAM,oBAAA,CAAqB,GAAG,CAAA;AAC/B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,+BAA+B,GAAG,CAAA;AAChE,EAAA,OAAO,GAAA;AACX;AAEO,SAASkE,OAAAA,CAAO,KAAc,GAAA,EAAoB;AACrD,EAAA,IAAI,CAAC,aAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AACjB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,eAAe,GAAG,CAAA;AAChD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,kBAAAA,CAAkB,KAAc,GAAA,EAAgC;AAC5E,EAAA,IAAI,CAAC,aAAA,CAAM,iBAAA,CAAkB,GAAG,CAAA;AAC5B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,4BAA4B,GAAG,CAAA;AAC7D,EAAA,OAAO,GAAA;AACX;AAEO,SAASxD,QAAAA,CAAQ,KAAc,GAAA,EAAqB;AACvD,EAAA,IAAI,CAAC,aAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAClB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,gBAAgB,GAAG,CAAA;AACjD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,mBAAAA,CAAmB,KAAc,GAAA,EAAiC;AAC9E,EAAA,IAAI,CAAC,aAAA,CAAM,kBAAA,CAAmB,GAAG,CAAA;AAC7B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,6BAA6B,GAAG,CAAA;AAC9D,EAAA,OAAO,GAAA;AACX;AAEO,SAASG,WAAAA,CAA8C,KAAc,GAAA,EAAiB;AACzF,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AACrB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,mBAAmB,GAAG,CAAA;AACpD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,sBAAAA,CAAyD,KAAc,GAAA,EAA6B;AAChH,EAAA,IAAI,CAAC,aAAA,CAAM,qBAAA,CAAsB,GAAG,CAAA;AAChC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,gCAAgC,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAASR,YAAAA,CAAkC,GAAA,EAAc,UAAA,EAAe,GAAA,EAA0B;AACrG,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,UAAU,CAAA;AAClC,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,mBAAmB,GAAG,CAAA;AACpD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,uBAAAA,CAA6C,GAAA,EAAc,UAAA,EAAe,GAAA,EAAsC;AAC5H,EAAA,IAAI,CAAC,aAAA,CAAM,sBAAA,CAAuB,GAAA,EAAK,UAAU,CAAA;AAC7C,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,gCAAgC,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAAS2C,gBAAAA,CAAgB,KAAc,GAAA,EAAsB;AAChE,EAAA,IAAI,CAAC,aAAA,CAAM,eAAA,CAAgB,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,yBAAyB,GAAG,CAAA;AAC1D,EAAA,OAAO,GAAA;AACX;AAEO,SAAStD,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,iBAAiB,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS6C,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,iBAAiB,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACX;AAEO,SAASmB,aAAAA,CAAa,KAAc,GAAA,EAAsB;AAC7D,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAG,CAAA;AACvB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,sBAAsB,GAAG,CAAA;AACvD,EAAA,OAAO,GAAA;AACX;AAEO,SAASX,oBAAAA,CAAoB,KAAc,GAAA,EAAkC;AAChF,EAAA,IAAI,CAAC,aAAA,CAAM,mBAAA,CAAoB,GAAG,CAAA;AAC9B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,8BAA8B,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAASL,WAAAA,CAAW,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AACzE,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,0BAA0B,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACvE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,WAAAA,CAAW,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AACzE,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,mBAAmB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AAChE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,YAAAA,CAAY,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,oBAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,WAAAA,CAAW,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AACzE,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,mBAAmB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AAChE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,YAAAA,CAAY,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,oBAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAASN,gBAAAA,CAAgB,GAAA,EAAc,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC5F,EAAA,IAAI,CAAC,aAAA,CAAM,eAAA,CAAgB,GAAA,EAAK,KAAK,GAAG,CAAA;AACpC,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,GAAG,CAAC,CAAA,IAAA,EAAO,GAAA,CAAI,GAAG,CAAC,CAAA,IAAA,EAAO,GAAA,CAAI,GAAG,CAAC,IAAI,GAAG,CAAA;AAC1E,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,yBAAAA,CAAyB,GAAA,EAAc,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AACrG,EAAA,IAAI,CAAC,aAAA,CAAM,wBAAA,CAAyB,GAAA,EAAK,KAAK,GAAG,CAAA;AAC7C,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,GAAG,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,GAAG,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,GAAG,CAAC,IAAI,GAAG,CAAA;AACxE,EAAA,OAAO,GAAA;AACX;AAEO,SAAShC,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,iBAAiB,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,QAAAA,CAAQ,KAAc,GAAA,EAAsB;AACxD,EAAA,IAAI,CAAC,aAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAClB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,gBAAgB,GAAG,CAAA;AACjD,EAAA,OAAO,GAAA;AACX;AAEO,SAASM,UAAAA,CAAU,KAAc,GAAA,EAAsB;AAC1D,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AACpB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,kBAAkB,GAAG,CAAA;AACnD,EAAA,OAAO,GAAA;AACX;AAEO,SAASyC,cAAAA,CAAc,KAAc,GAAA,EAAsB;AAC9D,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uBAAuB,GAAG,CAAA;AACxD,EAAA,OAAO,GAAA;AACX;AAEO,SAASjC,qBAAAA,CAAqB,KAAc,GAAA,EAAkC;AACjF,EAAA,IAAI,CAAC,aAAA,CAAM,oBAAA,CAAqB,GAAG,CAAA;AAC/B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,+BAA+B,GAAG,CAAA;AAChE,EAAA,OAAO,GAAA;AACX;AAEO,SAASL,YAAAA,CAAY,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,2BAA2B,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACxE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,YAAAA,CAAY,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,oBAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,aAAAA,CAAa,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC3E,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAA,EAAK,GAAG,CAAA;AAC5B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,qBAAqB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AAClE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,YAAAA,CAAY,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC1E,EAAA,IAAI,CAAC,aAAA,CAAM,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,oBAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACjE,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,aAAAA,CAAa,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC3E,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAA,EAAK,GAAG,CAAA;AAC5B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,qBAAqB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AAClE,EAAA,OAAO,GAAA;AACX;AAEO,SAASN,iBAAAA,CAAiB,GAAA,EAAc,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AAC7F,EAAA,IAAI,CAAC,aAAA,CAAM,gBAAA,CAAiB,GAAA,EAAK,KAAK,GAAG,CAAA;AACrC,IAAA,KAAA,CAAM,CAAA,iBAAA,EAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,IAAA,EAAO,GAAA,CAAI,GAAG,CAAC,CAAA,IAAA,EAAO,GAAA,CAAI,GAAG,CAAC,IAAI,GAAG,CAAA;AAC3E,EAAA,OAAO,GAAA;AACX;AAEO,SAASC,0BAAAA,CAA0B,GAAA,EAAc,GAAA,EAAc,GAAA,EAAc,GAAA,EAAsB;AACtG,EAAA,IAAI,CAAC,aAAA,CAAM,yBAAA,CAA0B,GAAA,EAAK,KAAK,GAAG,CAAA;AAC9C,IAAA,KAAA,CAAM,CAAA,iBAAA,EAAoB,GAAA,CAAI,GAAG,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,GAAG,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,GAAG,CAAC,IAAI,GAAG,CAAA;AACzE,EAAA,OAAO,GAAA;AACX;AAEO,SAASQ,WAAAA,CAAW,KAAc,GAAA,EAAsB;AAC3D,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AACrB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,cAAc,GAAG,CAAA;AAC/C,EAAA,OAAO,GAAA;AACX;AAEO,SAASX,WAAAA,CAAW,KAAc,GAAA,EAAsB;AAC3D,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AACrB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,qBAAqB,GAAG,CAAA;AACtD,EAAA,OAAO,GAAA;AACX;AAEO,SAASuC,cAAAA,CAAc,KAAc,GAAA,EAAsB;AAC9D,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,oBAAoB,GAAG,CAAA;AACrD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS1B,cAAAA,CAAc,KAAc,GAAA,EAAsB;AAC9D,EAAA,IAAI,CAAC,aAAA,CAAM,aAAA,CAAc,GAAG,CAAA;AACxB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,oBAAoB,GAAG,CAAA;AACrD,EAAA,OAAO,GAAA;AACX;AAEO,SAASyB,MAAAA,CAAM,KAAc,GAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,aAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAChB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,yBAAyB,GAAG,CAAA;AAC1D,EAAA,OAAO,GAAA;AACX;AAEO,SAAS1B,MAAAA,CAAM,KAAc,GAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,aAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAChB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,yBAAyB,GAAG,CAAA;AAC1D,EAAA,OAAO,GAAA;AACX;AAEO,SAASS,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,8BAA8B,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAASF,SAAAA,CAAS,KAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,8BAA8B,GAAG,CAAA;AAC/D,EAAA,OAAO,GAAA;AACX;AAEO,SAASgC,OAAAA,CAAO,KAAc,GAAA,EAAsB;AACvD,EAAA,IAAI,CAAC,aAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AACjB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,YAAY,GAAG,CAAA;AAC7C,EAAA,OAAO,GAAA;AACX;AAEO,SAASX,UAAAA,CAAU,KAAc,GAAA,EAAsB;AAC1D,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AACpB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,aAAa,GAAG,CAAA;AAC9C,EAAA,OAAO,GAAA;AACX;AAEO,SAAS1B,UAAAA,CAAU,KAAc,GAAA,EAAsB;AAC1D,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AACpB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,aAAa,GAAG,CAAA;AAC9C,EAAA,OAAO,GAAA;AACX;AAEO,SAASsB,MAAAA,CAAM,KAAc,GAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,aAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAChB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,WAAW,GAAG,CAAA;AAC5C,EAAA,OAAO,GAAA;AACX;AAEO,SAAS7C,OAAAA,CAAO,KAAc,GAAA,EAAsB;AACvD,EAAA,IAAI,CAAC,aAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AACjB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,YAAY,GAAG,CAAA;AAC7C,EAAA,OAAO,GAAA;AACX;AAEO,SAASmB,aAAAA,CAAa,GAAA,EAAc,IAAA,EAAe,GAAA,EAAsB;AAC5E,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAA,EAAK,IAAI,CAAA;AAC7B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,sBAAsB,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACpE,EAAA,OAAO,GAAA;AACX;AAEO,SAAS+B,aAAAA,CAAa,KAAc,GAAA,EAAsB;AAC7D,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,GAAG,CAAA;AACvB,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,GAAG,CAAC,uBAAuB,GAAG,CAAA;AACxD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS3C,WAAAA,CAAc,GAAA,EAAc,GAAA,EAAgC,GAAA,EAAiB;AACzF,EAAA,IAAI,CAAC,aAAA,CAAM,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,GAAG,CAAC,sBAAsB,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA;AACnE,EAAA,OAAO,GAAA;AACX;AAIO,SAASC,YAAc,IAAA,EAAyB;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,EAAA,MAAM,GAAA,GAAM,aAAA,CAAM,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA,GAAK,IAAA,CAAK,GAAA,EAAI,GAAe,MAAA;AAC7E,EAAA,MAAM,GAAA,GAAO,cAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,KAAA,EAAM,GAAI,MAAA;AACrD,EAAA,IAAI,CAAC,aAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,EAAG;AAC5B,IAAA,IAAI,GAAA,KAAQ,MAAA;AACR,MAAA,KAAA,CAAM,CAAA,SAAA,EAAY,KAAK,CAAA,YAAA,CAAA,EAAgB,GAAG,CAAA;AAAA;AAE1C,MAAA,KAAA,CAAM,YAAY,KAAK,CAAA,iBAAA,EAAoB,IAAI,GAAG,CAAC,IAAI,GAAG,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA;AACX;AAEO,SAASvB,UAAAA,CAAU,aAAyB,GAAA,EAAoB;AACnE,EAAA,IAAI,CAAC,aAAA,CAAM,SAAA,CAAU,WAAW,CAAA;AAC5B,IAAA,KAAA,CAAM,qBAAqB,GAAG,CAAA;AAClC,EAAA,OAAO,IAAA;AACX;AAEO,SAASD,aAAAA,CAAa,aAAyB,GAAA,EAAoB;AACtE,EAAA,IAAI,CAAC,aAAA,CAAM,YAAA,CAAa,WAAW,CAAA;AAC/B,IAAA,KAAA,CAAM,qBAAqB,GAAG,CAAA;AAClC,EAAA,OAAO,IAAA;AACX;;;AKpgBA,IAAA,eAAA,GAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAA,IAAM,iBAAA,GAAoB,eAAA;AAO1B,IAAI,QAAA;AACJ,IAAI,QAAA;AAEJ,IAAI,GAAA,GAAM,MAAM,iBAAiB,CAAA;AACjC,QAAA,GAAY,GAAA,KAAQ,QAAA,iBAAuB,GAAA,KAAQ,SAAA,iBAAwB,GAAA,GAAM,MAAA;AAEjF,SAAS,cAAA,GAA2B;AAChC,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA;AACpB,IAAA,OAAO,EAAC;AAEZ,EAAA,IAAI,IAAI,QAAA,CAAS,MAAA;AACjB,EAAA,OAAO,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,MAAM,CAAA;AACzC;AAEA,SAAS,KAAA,CAA2C,MAAc,KAAA,EAAa;AAC3E,EAAA,IAAI,MAAA,GAAS,IAAA,GAAO,GAAA,GAAM,KAAA,CAAM,UAAS,GAAI,gBAAA;AAC7C,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,MAAA,IAAU,UAAA,GAAa,QAAA,CAAS,WAAA,EAAY,GAAI,GAAA;AAAA,EACpD;AAEA,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA;AACpB,IAAA,QAAA,CAAS,MAAA,GAAS,MAAA;AAEtB,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,KAAA,CAAM,MAAc,YAAA,EAA2C;AACpE,EAAA,IAAI8E,IAAAA,GAAM,gBAAe,CAAE,IAAA,CAAK,OAAK,CAAA,CAAE,UAAA,CAAW,IAAA,GAAO,GAAG,CAAC,CAAA;AAC7D,EAAA,OAAOA,SAAQ,MAAA,GAAY,YAAA,GAAeA,KAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAC,CAAA;AAC3E;AAEA,SAAS,OAAO,IAAA,EAAc;AAC1B,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA;AACpB,IAAA,QAAA,CAAS,SAAS,IAAA,GAAO,0CAAA;AACjC;AAMO,SAAS,cAAc,IAAA,EAAc;AACxC,EAAA,QAAA,uBAAe,IAAA,EAAK;AACpB,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAQ,GAAI,IAAI,CAAA;AAC9C;AAMO,SAAS,gBAAA,GAAmB;AAC/B,EAAA,OAAO,QAAA,KAAa,MAAA;AACxB;AAKO,SAAS,MAAA,GAAS;AACrB,EAAA,QAAA,GAAW,QAAA;AACX,EAAA,KAAA,CAAM,mBAAmB,QAAQ,CAAA;AACrC;AAKO,SAAS,OAAA,GAAU;AACtB,EAAA,QAAA,GAAW,SAAA;AACX,EAAA,KAAA,CAAM,mBAAmB,QAAQ,CAAA;AACrC;AAQO,SAAS,IAAA,CAA0C,MAAc,KAAA,EAAa;AACjF,EAAA,IAAI,QAAA,KAAa,QAAA;AACb,IAAA,KAAA,CAAM,MAAM,KAAK,CAAA;AACrB,EAAA,OAAO,KAAA;AACX;AAQO,SAAS,IAAA,CAAK,MAAc,YAAA,EAA8B;AAC7D,EAAA,IAAI,QAAA,KAAa,QAAA;AACb,IAAA,OAAO,KAAA,CAAM,IAAA,EAAM,YAAY,CAAA,IAAK,YAAA;AAAA;AAEpC,IAAA,OAAO,YAAA;AACf;AAQO,SAAS,OAAA,CAAQ,MAAc,YAAA,EAA8B;AAChE,EAAA,IAAI,aAAa,QAAA,eAAqB;AAClC,IAAA,IAAIA,IAAAA,GAAM,MAAM,IAAI,CAAA;AACpB,IAAA,OAAOA,IAAAA,KAAQ,MAAA,GAAY,YAAA,GAAe,QAAA,CAASA,IAAG,CAAA;AAAA,EAC1D,CAAA,MACK;AACD,IAAA,OAAO,YAAA;AAAA,EACX;AACJ;AAQO,SAAS,QAAA,CAAS,MAAc,YAAA,EAAgC;AACnE,EAAA,IAAI,aAAa,QAAA,eAAqB;AAClC,IAAA,IAAIA,IAAAA,GAAM,MAAM,IAAI,CAAA;AACpB,IAAA,OAAOA,IAAAA,KAAQ,MAAA,GAAY,YAAA,GAAgB,SAAA,CAAW,KAAKA,IAAG,CAAA;AAAA,EAClE,CAAA,MACK;AACD,IAAA,OAAO,YAAA;AAAA,EACX;AACJ;AAMO,SAAS,MAAM,IAAA,EAAc;AAChC,EAAA,IAAI,QAAA,KAAa,yBAAuB,IAAA,KAAS,iBAAA;AAC7C,IAAA,MAAA,CAAO,IAAI,CAAA;AACnB;AAKO,SAAS,QAAA,GAAW;AACvB,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA;AACpB,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,QAAQ,CAAA,CAAA,KAAK,KAAA,CAAM,CAAA,CAAE,IAAA,GAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAC7E;;;ACpJA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,QAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAEA,IAAM,WAAA,GAAc,0EAAA;AAcpB,SAAS,aAAa,KAAA,EAA0C;AAC5D,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAChC,EAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,EAAA,OAAO;AAAA,IACH,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IAClB,IAAA,EAAO,CAAA,CAAE,CAAC,CAAA,IAAiB;AAAA,GAC/B;AACJ;AAEA,SAAS,mBAAA,GAAsB;AAC3B,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,CAAA,GAAI,MAAA,CAAO,gBAAA;AACtD;AAEA,SAAS,YAAA,CAAa,MAAe,QAAA,EAA0B;AAC3D,EAAA,IAAI;AACA,IAAA,IAAI,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACrC,IAAA,EAAA,CAAG,KAAA,CAAM,QAAQ,GAAA,GAAM,IAAA;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC5B,IAAA,IAAI,MAAM,EAAA,CAAG,WAAA;AACb,IAAA,EAAA,CAAG,MAAA,EAAO;AACV,IAAA,OAAO,GAAA,IAAO,QAAA;AAAA,EAClB,SACO,CAAA,EAAG;AACN,IAAA,OAAO,QAAA;AAAA,EACX;AACJ;AAEA,SAAS,iBAAA,GAA4B;AACjC,EAAA,IAAI;AACA,IAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,KAAA,CAAM,MAAM,UAAA,GAAa,QAAA;AACzB,IAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,OAAA;AAGpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAE/B,IAAA,IAAI,gBAAgB,KAAA,CAAM,WAAA;AAE1B,IAAA,KAAA,CAAM,MAAM,QAAA,GAAW,QAAA;AAGvB,IAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,MAAA;AACpB,IAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAEvB,IAAA,IAAI,kBAAkB,KAAA,CAAM,WAAA;AAG5B,IAAA,IAAI,MAAM,UAAA,EAAY;AAClB,MAAA,KAAA,CAAM,UAAA,CAAW,YAAY,KAAK,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,aAAA,GAAgB,eAAA;AAAA,EAC3B,SACO,CAAA,EAAG;AACN,IAAA,OAAO,CAAA;AAAA,EACX;AACJ;AAEA,SAAS,iBAAA,GAA4B;AACjC,EAAA,IAAI;AACA,IAAA,IAAI,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,MAAA,CAAO,MAAM,OAAA,GAAU,qGAAA;AACvB,IAAA,MAAA,CAAO,WAAA,CAAY,QAAA,CAAS,cAAA,CAAe,GAAG,CAAC,CAAA;AAC/C,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAChC,IAAA,IAAI,WAAW,MAAA,CAAO,YAAA;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAChC,IAAA,OAAO,QAAA;AAAA,EACX,SACO,CAAA,EAAG;AACN,IAAA,OAAO,EAAA;AAAA,EACX;AACJ;AAEA,SAAS,gBAAA,GAA4B;AAEjC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA;AAClB,IAAA,OAAO,KAAA;AAEX,EAAA,IAAI,kBAAkB,MAAA,IAAU,eAAA,IAAmB,MAAA,IAAU,aAAA,IAAiB,YAAY,iBAAA,IAAqB,QAAA;AAC3G,IAAA,OAAO,IAAA;AAKX,EAAA,IAAI,QAAA,GAAW,2BAAA,CAA4B,KAAA,CAAM,GAAG,CAAA;AACpD,EAAA,IAAI,EAAA,GAAK,SAAUE,MAAAA,EAAe;AAC9B,IAAA,OAAO,MAAA,CAAO,UAAA,CAAWA,MAAK,CAAA,CAAE,OAAA;AAAA,EACpC,CAAA;AACA,EAAA,IAAI,KAAA,GAAQ,CAAC,GAAA,EAAK,QAAA,CAAS,IAAA,CAAK,kBAAkB,CAAA,EAAG,QAAA,EAAU,GAAG,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC3E,EAAA,OAAO,GAAG,KAAK,CAAA;AACnB;AAEA,SAAS,iBAAA,GAAoB;AACzB,EAAA,IAAI,CAAA,GAAI,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,UAAgB,MAAA,CAAQ,KAAA;AACjE,EAAA,OAAQ,0TAAA,CAA2T,IAAA,CAAK,CAAC,CAAA,IAAK,ykDAAA,CAA0kD,KAAK,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAC/6D;AAEA,SAAS,cAAA,GAAyB;AAC9B,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,CAAC,SAAS,IAAA,EAAM;AACnD,IAAA,OAAO,WAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK,SAAS,IAAI,CAAA,CAAA;AACjD;AAGO,IAAM,iBAAiB,iBAAA,EAAkB;AAGzC,IAAM,WAAW,iBAAA,EAAkB;AAGnC,IAAM,gBAAgB,gBAAA,EAAiB;AAGvC,IAAM,iBAAiB,iBAAA,EAAkB;AAGzC,IAAM,cAAc,cAAA,EAAe;AAGnC,IAAM,mBAAmB,mBAAA,EAAoB;AAG7C,IAAM,GAAA,GAAM,YAAA,CAAa,IAAA,EAAM,EAAE,CAAA;AAExC,IAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,EAAE,CAAA;AACrC,IAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,EAAA,GAAK,IAAI,CAAA;AAC5C,IAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,EAAA,GAAK,OAAO,EAAE,CAAA;AACjD,IAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,QAAQ,CAAA;AASpC,SAAS,SAAS,SAAA,EAAoC;AACzD,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA;AACrB,IAAA,OAAO,SAAA;AAEX,EAAA,MAAM,CAAA,GAAI,aAAa,SAAS,CAAA;AAEhC,EAAA,MAAM,QAAQ,CAAA,EAAG,KAAA;AACjB,EAAA,MAAM,OAAO,CAAA,EAAG,IAAA;AAEhB,EAAA,IAAI,CAAC,aAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AACrB,IAAA,cAAA,CAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE,CAAA;AAEzC,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,IAAA;AACD,MAAA,OAAO,KAAA,GAAQ,OAAA;AAAA,IACnB,KAAK,IAAA;AACD,MAAA,OAAO,KAAA,GAAQ,OAAA;AAAA,IACnB,KAAK,IAAA;AACD,MAAA,OAAO,KAAA,GAAQ,OAAA;AAAA,IACnB,KAAK,IAAA;AACD,MAAA,OAAO,KAAA,GAAQ,OAAA;AAAA,IACnB,KAAK,IAAA;AAAA,IACL,KAAK,MAAA;AACD,MAAA,OAAO,KAAA;AAAA,IACX;AACI,MAAA,cAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAAA;AAEtD;AAEO,SAAS,QAAA,CAAS,IAAY,IAAA,EAAuB;AACxD,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,IAAA;AACD,MAAA,OAAO,EAAA,GAAK,OAAA;AAAA,IAChB,KAAK,IAAA;AACD,MAAA,OAAO,EAAA,GAAK,OAAA;AAAA,IAChB,KAAK,IAAA;AACD,MAAA,OAAO,EAAA,GAAK,OAAA;AAAA,IAChB,KAAK,IAAA;AACD,MAAA,OAAO,EAAA,GAAK,OAAA;AAAA,IAChB,KAAK,IAAA;AACD,MAAA,OAAO,EAAA;AAAA,IACX;AACI,MAAA,cAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAAA;AAEtD;AAEO,SAAS,WAAA,CAAY,IAAY,IAAA,EAAuB;AAC3D,EAAA,OAAO,GAAG,QAAA,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA;AACvC;;;AC1MA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,GAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAIO,SAAS,QAAW,CAAA,EAAiB;AACxC,EAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AAC9B;AAEO,SAAS,UAAa,CAAA,EAAsC;AAC/D,EAAA,OAAO,CAAA,EAAG,KAAA,EAAM,IAAK,EAAC;AAC1B;AAEO,SAAS,gBAAA,CAAoB,KAAuB,SAAA,EAA+C;AACtG,EAAA,OAAO,SAAA,KAAc,MAAA,GACf,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA,EAAI,IAAA,KAAS,EAAA,KAAO,IAAA,CAAK,SAAA,CAAU,CAAA,CAAA,KAAK,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,GACvE,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA,EAAI,IAAA,KAAS,EAAA,KAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5D;AAEO,SAAS,SAAA,CAAa,WAAc,SAAA,EAAwB;AAC/D,EAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,IAAK,YAAY,CAAA,EAAG;AACxC,IAAA,MAAM,IAAI,KAAA,CAAM,iCAAA,GAAoC,SAAS,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,IAAI,KAAA,CAAS,SAAS,CAAA,CAAE,KAAK,SAAS,CAAA;AACjD;AAEO,SAAS,gBAAA,CAAoB,KAAa,EAAA,EAA2B;AACxE,EAAA,IAAI,CAAC,SAAA,CAAU,GAAG,CAAA,IAAK,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,kCAAA,GAAqC,GAAG,CAAA;AAAA,EAC5D;AACA,EAAA,IAAI,GAAA,GAAW,IAAI,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAAE,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AAAA,EAAG;AAChD,EAAA,OAAO,GAAA;AACX;AAEO,SAAS,iBAAiB,GAAA,EAAuB;AACpD,EAAA,OAAO,gBAAA,CAAiB,GAAA,EAAK,CAAA,CAAA,KAAK,CAAC,CAAA;AACvC;AAEO,SAAS,aAAA,CAAiB,KAAA,EAAe,GAAA,EAAa,EAAA,EAA2B;AACpF,EAAA,IAAI,CAAC,SAAA,CAAU,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,iCAAA,GAAoC,GAAG,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG;AACjB,IAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,GAAkC,GAAG,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,KAAK,CAAA,GAAI,CAAA;AAClC,EAAA,IAAI,GAAA,GAAW,IAAI,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,KAAK,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,IAAK,KAAK,CAAA,EAAA,EAAK;AAAE,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AAAA,EAAG;AACnG,EAAA,OAAO,GAAA;AACX;AAEO,SAAS,aAAA,CAAc,OAAe,GAAA,EAAuB;AAChE,EAAA,OAAO,aAAA,CAAc,KAAA,EAAO,GAAA,EAAK,CAAA,CAAA,KAAK,CAAC,CAAA;AAC3C;AAEO,SAAS,aAAA,CAAiC,KAAU,IAAA,EAAkB;AACzE,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,IAAK,CAAA;AAChC;AAEO,SAAS,WAAA,CAAe,KAAuB,UAAA,EAA2B;AAC7E,EAAA,IAAI,CAAC,SAAA,CAAU,UAAU,CAAA,IAAK,aAAa,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,KAAA,CAAM,oCAAA,GAAuC,UAAU,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,SAAgB,EAAC;AACrB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,UAAA,EAAY;AAC7C,IAAA,MAAA,CAAO,KAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,UAAU,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACX;;;ACpEA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,kBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAEA,SAAS,aAAa,EAAA,EAAqC;AACvD,EAAA,OAAO,OAAO,QAAA,KAAa,WAAA,GAAc,SAAa,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA,IAAK,MAAA;AACzF;AAkBA,SAAS,KAAK,KAAA,EAAwD;AAClE,EAAA,OAAO,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,cAAA,CAAO,SAAS,KAAK,CAAA;AAClE;AAEO,SAAS,QAAA,CAAS,IAAiB,SAAA,EAAmB;AACzD,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA;AAAA,EACX,CAAA,MAAA,IACS,GAAG,SAAA,EAAW;AACnB,IAAA,OAAO,EAAA,CAAG,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,EAC1C,CAAA,MACK;AACD,IAAA,OAAO,CAAC,CAAC,EAAA,CAAG,SAAA,CAAU,KAAA,CAAM,IAAI,MAAA,CAAO,SAAA,GAAY,SAAA,GAAY,SAAS,CAAC,CAAA;AAAA,EAC7E;AACJ;AAEO,SAAS,QAAA,CAAS,IAAiB,SAAA,EAAmB;AACzD,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,IAAA;AAAA,EACJ,CAAA,MAAA,IACS,GAAG,SAAA,EAAW;AACnB,IAAA,EAAA,CAAG,SAAA,CAAU,IAAI,SAAS,CAAA;AAAA,EAC9B,CAAA,MAAA,IACS,CAAC,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA,EAAG;AAC/B,IAAA,EAAA,CAAG,aAAa,GAAA,GAAM,SAAA;AAAA,EAC1B;AACJ;AAEO,SAAS,WAAA,CAAY,IAAiB,SAAA,EAAmB;AAC5D,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,IAAA;AAAA,EACJ,CAAA,MAAA,IACS,GAAG,SAAA,EAAW;AACnB,IAAA,EAAA,CAAG,SAAA,CAAU,OAAO,SAAS,CAAA;AAAA,EACjC,CAAA,MAAA,IACS,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA,EAAG;AAC9B,IAAA,IAAI,GAAA,GAAM,IAAI,MAAA,CAAO,SAAA,GAAY,YAAY,SAAS,CAAA;AACtD,IAAA,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,SAAA,CAAU,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EAChD;AACJ;AAEO,SAAS,SAAA,CAAU,EAAA,EAAiB,IAAA,EAAc,GAAA,EAAa,OAAe,IAAA,EAAM;AACvF,EAAA,EAAA,CAAG,KAAA,CAAM,OAAO,IAAA,GAAO,IAAA;AACvB,EAAA,EAAA,CAAG,KAAA,CAAM,MAAM,GAAA,GAAM,IAAA;AACzB;AAEO,SAAS,UAAU,EAAA,EAAgD;AACtE,EAAA,IAAI,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,GAAG,qBAAA,EAAsB;AAE7C,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,IAAA,IAAQ,MAAA,CAAO,WAAA;AACf,IAAA,GAAA,IAAO,MAAA,CAAO,WAAA;AAAA,EAClB;AAEA,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACjC,IAAA,IAAI,KAAK,QAAA,CAAS,eAAA;AAClB,IAAA,IAAA,IAAQ,EAAA,CAAG,UAAA;AACX,IAAA,GAAA,IAAO,EAAA,CAAG,SAAA;AAAA,EACd;AAEA,EAAA,OAAO,EAAE,MAAM,GAAA,EAAI;AACvB;AAEO,SAAS,SAAS,EAAA,EAA0B;AAC/C,EAAA,IAAI,cAAc,MAAA,EAAQ;AACtB,IAAA,OAAO,EAAA,CAAG,UAAA;AAAA,EACd,CAAA,MACK;AACD,IAAA,IAAI,CAAA,GAAI,UAAA,CAAW,gBAAA,CAAiB,EAAA,EAAI,IAAI,EAAE,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AACrE,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,EAC1B;AACJ;AAEO,SAAS,QAAA,CAAS,IAAiB,GAAA,EAAa;AACnD,EAAA,EAAA,CAAG,KAAA,CAAM,QAAQ,GAAA,GAAM,IAAA;AAC3B;AAEO,SAAS,UAAU,EAAA,EAA0B;AAChD,EAAA,IAAI,cAAc,MAAA,EAAQ;AACtB,IAAA,OAAO,EAAA,CAAG,WAAA;AAAA,EACd,CAAA,MACK;AACD,IAAA,IAAI,CAAA,GAAI,UAAA,CAAW,gBAAA,CAAiB,EAAA,EAAI,IAAI,EAAE,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AACtE,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,EAC1B;AACJ;AAEO,SAAS,SAAA,CAAU,IAAiB,GAAA,EAAa;AACpD,EAAA,EAAA,CAAG,KAAA,CAAM,SAAS,GAAA,GAAM,IAAA;AAC5B;AAEO,SAAS,QAAA,CAAS,IAA8B,EAAA,EAA8B;AACjF,EAAA,EAAA,CAAG,YAAY,EAAE,CAAA;AACrB;AAEO,SAAS,iBAAiB,EAAA,EAA8B;AAC3D,EAAA,EAAA,CAAG,MAAA,EAAO;AACd;AAEO,SAAS,aAAA,CAAc,IAA8B,OAAA,EAAkB;AAC1E,EAAA,EAAA,CAAG,KAAA,CAAM,OAAA,GAAU,OAAA,GAAU,OAAA,GAAU,MAAA;AAC3C;AAEO,SAAS,QAAQ,EAAA,EAAiB,IAAA,EAAc,KAAa,KAAA,EAAe,MAAA,EAAgB,OAAe,IAAA,EAAM;AACpH,EAAA,EAAA,CAAG,KAAA,CAAM,OAAO,IAAA,GAAO,IAAA;AACvB,EAAA,EAAA,CAAG,KAAA,CAAM,MAAM,GAAA,GAAM,IAAA;AACrB,EAAA,EAAA,CAAG,KAAA,CAAM,QAAQ,KAAA,GAAQ,IAAA;AACzB,EAAA,EAAA,CAAG,KAAA,CAAM,SAAS,MAAA,GAAS,IAAA;AAC/B;AAEO,SAAS,UAAU,GAAA,EAA0D;AAChF,EAAA,IAAI,KAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,YAAA,CAAa,GAAG,CAAA,GAAI,GAAA;AACvD,EAAA,OAAO,EAAA,YAAc,oBAAoB,EAAA,GAAK,MAAA;AAClD;AAEO,SAAS,UAAUC,OAAAA,EAA6D;AACnF,EAAA,IAAI,KAAK,OAAOA,OAAAA,KAAW,QAAA,GAAW,YAAA,CAAaA,OAAM,CAAA,GAAIA,OAAAA;AAC7D,EAAA,OAAO,EAAA,YAAc,oBAAoB,EAAA,GAAK,MAAA;AAClD;AAEO,SAAS,WAAW,KAAA,EAAqF;AAC5G,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,EAAE,KAAK,CAAA,EAAG,KAAA,EAAO,GAAG,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,EAClD;AAEA,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAC/B,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AACnC,EAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA;AACrC,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAEjC,EAAA,IAAI,OAAA,GAAA,CAAW,KAAA,CAAM,OAAA,IAAW,EAAA,EAAI,QAAA,EAAS,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA;AAElF,EAAA,QAAQ,QAAQ,MAAA;AAAQ,IACpB,KAAK,CAAA;AACD,MAAA;AAAA,IACJ,KAAK,CAAA;AACD,MAAA,GAAA,KAAA,GAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACvB,MAAA,KAAA,KAAA,KAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAA,KAAA,MAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC1B,MAAA,IAAA,KAAA,IAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACxB,MAAA;AAAA,IACJ,KAAK,CAAA;AACD,MAAA,GAAA,KAAA,GAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACvB,MAAA,KAAA,KAAA,KAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAA,KAAA,MAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC1B,MAAA,IAAA,KAAA,IAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACxB,MAAA;AAAA,IACJ,KAAK,CAAA;AACD,MAAA,GAAA,KAAA,GAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACvB,MAAA,KAAA,KAAA,KAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAA,KAAA,MAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC1B,MAAA,IAAA,KAAA,IAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACxB,MAAA;AAAA,IACJ,KAAK,CAAA;AAAA,IACL;AACI,MAAA,GAAA,KAAA,GAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACvB,MAAA,KAAA,KAAA,KAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAA,KAAA,MAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC1B,MAAA,IAAA,KAAA,IAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACxB,MAAA;AAAA;AAGR,EAAA,GAAA,KAAA,GAAA,GAAQ,CAAA,CAAA;AACR,EAAA,KAAA,KAAA,KAAA,GAAU,CAAA,CAAA;AACV,EAAA,MAAA,KAAA,MAAA,GAAW,CAAA,CAAA;AACX,EAAA,IAAA,KAAA,IAAA,GAAS,CAAA,CAAA;AAET,EAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAK;AACtC;AAEO,SAAS,aAAa,KAAA,EAAuB;AAChD,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AAC3B,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA;AAC7B,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AACzB,EAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAC/B,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA;AAC7B,EAAA,IAAI,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAE/B,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,MAAA,IAAa,UAAU,MAAA,EAAW;AAClE,IAAA,KAAA,GAAQ,KAAA,GAAQ,IAAA;AAAA,EACpB;AAEA,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,GAAA,KAAQ,MAAA,IAAa,WAAW,MAAA,EAAW;AACnE,IAAA,MAAA,GAAS,MAAA,GAAS,GAAA;AAAA,EACtB;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAO;AACtC;AAEO,SAAS,kBAAA,CAAmB,QAAwB,MAAA,EAAwB;AAC/E,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ;AACpB,IAAA,OAAO,KAAA;AAAA,EACX,CAAA,MAAA,IACS,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ;AACzB,IAAA,OAAO,IAAA;AAAA,EACX,CAAA,MACK;AACD,IAAA,OAAO,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA,IAAQ,OAAO,GAAA,KAAQ,MAAA,CAAO,GAAA,IACxD,MAAA,CAAO,KAAA,KAAU,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA,KAAW,OAAO,MAAA,IAC1D,MAAA,CAAO,UAAU,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,MAAA,KAAW,MAAA,CAAO,MAAA;AAAA,EAClE;AACJ;AAEA,IAAI,MAAA;AAEG,SAAS,kBAAA,CAAmB,MAAc,IAAA,EAAc;AAC3D,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,QAAA,KAAa,WAAA;AAC/B,IAAA,MAAA,GAAS,QAAA,CAAS,cAAc,QAAQ,CAAA;AAE5C,EAAA,IAAI,GAAA,GAAM,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AAEjC,EAAA,IAAI,CAAC,GAAA;AACD,IAAA,OAAO,CAAA;AAEX,EAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AAEX,EAAA,OAAO,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,CAAE,KAAA;AACjC;AAOO,SAAS,SAAA,CAAU,SAAiB,QAAA,EAAkB;AACzD,EAAA,IAAI,OAAA,KAAY,EAAA,IAAM,QAAA,KAAa,EAAA,EAAI;AACvC,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,OAAO,CAAA,EAAG;AACtC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,OAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,QAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AACnC;;;AC9PA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,GAAA,EAAA,MAAA,GAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAIO,SAAS,iBAAiB,YAAA,EAA8B;AAC3D,EAAA,IAAI,CAAC,QAAA,CAAS,YAAY,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,0CAAA,GAA6C,YAAY,CAAA;AAAA,EAC7E,CAAA,MAAA,IACS,gBAAgB,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,QAAA;AAAA,EACX,CAAA,MACK;AACD,IAAA,OAAO,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAAA,EACvC;AACJ;AAEO,SAAS,GAAA,CAAI,GAAW,CAAA,EAAW;AACtC,EAAA,OAAA,CAAS,CAAA,GAAI,IAAK,CAAA,IAAK,CAAA;AAC3B;AAMO,SAAS,SAAS,CAAA,EAAW;AAChC,EAAA,IAAI,CAAC,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,CAAC,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,SAAS,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,MAAM,EAAE,CAAA;AAChC,EAAA,IAAI,GAAA,GAAM;AAAA,IAAC,EAAA;AAAA,IAAI,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IAC7D,EAAA;AAAA,IAAI,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IACtD,EAAA;AAAA,IAAI,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ;AAAA,GAAI;AAC9D,EAAA,IAAI,KAAA,GAAQ,IAAI,CAAA,GAAI,CAAA;AACpB,EAAA,OAAO,CAAA,EAAA,EAAK,KAAA,GAAA,CAAS,GAAA,CAAI,CAAC,MAAA,CAAO,KAAI,GAAM,CAAA,GAAI,EAAG,CAAA,IAAK,EAAA,IAAM,KAAA;AAC7D,EAAA,OAAO,KAAA,CAAM,CAAC,MAAA,CAAO,IAAA,CAAK,EAAE,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AACnD;AAEO,SAAS,gBAAgB,CAAA,EAAW;AACvC,EAAA,IAAI,CAAC,SAAA,CAAU,CAAC,CAAA,EAAG;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,GAAkC,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,IAAA,GAAO,EAAE,QAAA,EAAS;AACxB,EAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAErD,EAAA,IAAI,CAAA,KAAM,CAAA,IAAK,CAAA,IAAK,EAAA,IAAM,cAAc,CAAA,EAAG;AACvC,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAClB,WACS,CAAA,KAAM,CAAA,IAAK,CAAA,IAAK,EAAA,IAAM,cAAc,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAClB,WACS,CAAA,KAAM,CAAA,IAAK,CAAA,IAAK,EAAA,IAAM,cAAc,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAClB,CAAA,MACK;AACD,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAClB;AACJ;AAEO,SAAS,gBAAA,CAAiB,MAAA,EAAgB,MAAA,EAAgB,IAAA,EAAc,MAAc,CAAA,EAAW;AACpG,EAAA,OAAO;AAAA,IACH,CAAA,EAAG,MAAA,GAAA,CAAU,IAAA,GAAO,MAAA,IAAU,CAAA;AAAA,IAC9B,CAAA,EAAG,MAAA,GAAA,CAAU,IAAA,GAAO,MAAA,IAAU;AAAA,GAClC;AACJ;AAEO,SAAS,YAAA,CAAa,MAAA,EAAgB,MAAA,EAAgB,IAAA,EAAc,MAAc,CAAA,EAAW;AAChG,EAAA,IAAI,CAAA,GAAA,CAAK,CAAA,GAAI,MAAA,KAAW,IAAA,GAAO,MAAA,CAAA;AAC/B,EAAA,OAAO,MAAA,GAAA,CAAU,OAAO,MAAA,IAAU,CAAA;AACtC;AAEO,SAAS,KAAA,CAAM,GAAA,EAAa,GAAA,EAAa,GAAA,EAAa;AACzD,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,GAAA,EAAK,GAAG,GAAG,GAAG,CAAA;AAC3C;AAEO,SAAS,UAAA,CAAW,EAAA,EAAY,EAAA,EAAY,EAAA,EAAY,EAAA,EAAY;AACvE,EAAA,IAAI,KAAK,EAAA,GAAK,EAAA;AACd,EAAA,IAAI,KAAK,EAAA,GAAK,EAAA;AAEd,EAAA,IAAI,KAAK,CAAC,EAAA;AACV,EAAA,IAAI,EAAA,GAAK,EAAA;AAET,EAAA,IAAI,MAAM,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAErC,EAAA,IAAI,MAAM,CAAA,EAAG;AACT,IAAA,EAAA,IAAM,GAAA;AACN,IAAA,EAAA,IAAM,GAAA;AAAA,EACV,CAAA,MACK;AACD,IAAA,EAAA,GAAK,CAAA;AACL,IAAA,EAAA,GAAK,CAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,IAAI,EAAA,EAAG;AACpB;AAEO,SAAS,IAAI,GAAA,EAAuB;AACvC,EAAA,OAAO,IAAI,MAAA,CAAO,CAAC,MAAM,GAAA,KAAQ,GAAA,GAAM,MAAM,CAAC,CAAA;AAClD;AAEO,SAAS,OAAO,MAAA,EAA0B;AAC7C,EAAA,OAAO,GAAA,CAAI,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA;AAChC;AAEO,SAAS,GAAA,CAAI,GAAW,CAAA,EAAuB;AAClD,EAAA,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AACpC;;;AC1GO,IAAM,iBAAA,GAAqC,CAAC,CAAA,EAAQ,CAAA,KAAW,CAAA,KAAM;AAoBrE,IAAe,gBAAf,MAA6B;AAEpC;;;ACfO,IAAM,KAAA,GAAN,cAAuB,aAAA,CAAc;AAAA,EAGxC,WAAA,GAAc;AACV,IAAA,KAAA,EAAM;AAHV,IAAA,aAAA,CAAA,IAAA,EAAiB,QAAY,EAAC,CAAA;AAAA,EAI9B;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACjC,IAAA,cAAA,CAAO,gBAAA,CAAiB,IAAI,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,EAAG,CAAA,YAAA,EAAe,EAAE,CAAA,cAAA,CAAgB,CAAA;AACjF,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EAEA,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACrB;AAAA,EAEA,KAAK,EAAA,EAAO;AACR,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,EAAE,CAAA;AACjB,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EAEA,GAAA,GAAS;AACL,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AACxB,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EACzB;AAAA,EAEA,MAAM,qBAAA,EAAyC;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,GACb,UAAA,CAAW,qBAAqB,CAAA,GAAI,qBAAA,EAAsB,GAAI,qBAAA,GAC/D,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI;AAAA,EACxB;AAAA,EAEA,GAAA,GAAM;AACF,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EACnD;AAAA,EAEA,UAAA,GAA4B;AACxB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,qBAAA,EAAyC;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,GACb,UAAA,CAAW,qBAAqB,CAAA,GAAI,qBAAA,EAAsB,GAAI,qBAAA,GAC/D,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EACnC;AAAA,EAEA,IAAA,CAAK,QAAQ,CAAA,EAAM;AACf,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,CAAS,KAAK,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,EAChE;AAAA,EAEA,WAAA,CAAY,QAAQ,CAAA,EAAkB;AAClC,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,IAAI,KAAK,CAAA;AAAA,EAEjD;AAAA,EAEA,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG,qBAAA,EAAyC;AACvD,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,KAAA;AAClC,IAAA,MAAM,QAAQ,EAAA,GAAK,CAAA,GAAI,MAAA,GAAY,IAAA,CAAK,KAAK,EAAE,CAAA;AAC/C,IAAA,OAAO,UAAU,MAAA,GACV,UAAA,CAAW,qBAAqB,CAAA,GAAI,qBAAA,KAA0B,qBAAA,GAC/D,KAAA;AAAA,EACV;AAAA,EAEA,CAAC,MAAA,GAA8B;AAC3B,IAAA,KAAA,IAAS,KAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,EAAA,EAAA;AACzC,MAAA,MAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,EAC1B;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAyB;AACtC,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACvB;AAAA,EAEA,OAAA,GAAe;AACX,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,MAAA,KAAW,CAAA;AAAA,EAC3B;AAAA,EAEA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAAA,EACvB;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,SAAS,IAAA,CAAK,MAAM,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EACvD;AACJ;;;ACjFO,IAAM,GAAA,GAAN,MAAM,IAAA,SAAY,aAAA,CAAe;AAAA,EAGpC,eAAe,MAAA,EAAkB;AAC7B,IAAA,KAAA,EAAM;AAHV,IAAA,aAAA,CAAA,IAAA,EAAS,QAAA,CAAA;AAKL,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,UAAU,+BAA+B,CAAA;AAAA,IACvD;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAAA,EAEA,OAAO,IAAA,CAAK,CAAA,EAAW,CAAA,EAAgB;AACnC,IAAA,OAAO,IAAI,IAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAAA,EACvB;AAAA,EAEA,OAAO,IAAA,CAAK,CAAA,EAAW,CAAA,EAAW,CAAA,EAAgB;AAC9C,IAAA,OAAO,IAAI,IAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EAC1B;AAAA,EAEA,OAAO,KAAK,GAAA,EAAkB;AAC1B,IAAA,IAAI,MAAM,CAAA,EAAG;AACT,MAAA,MAAM,IAAI,UAAU,kCAAkC,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,IAAI,KAAI,GAAG,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA,EAEA,IAAI,GAAA,GAAc;AACd,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AAAA,EAEA,SAAA,GAAoB;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EAEA,IAAI,CAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACxB;AAAA,EAEA,IAAI,CAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACxB;AAAA,EAEA,IAAI,CAAA,GAAY;AACZ,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,EAAW;AAC9B,MAAA,MAAM,IAAI,UAAU,4BAA4B,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACxB;AAAA,EAIA,OAAO,IAAA,EAA6B;AAChC,IAAA,MAAM,WAAA,GAAc,KAAK,CAAC,CAAA,YAAa,OACjC,IAAA,CAAK,CAAC,EAAE,MAAA,GACR,IAAA;AAEN,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,WAAA,CAAY,MAAA,EAAQ;AAC3C,MAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,IAAI,IAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,KAAA,GAAQ,WAAA,CAAY,CAAC,CAAC,CAAC,CAAA;AAAA,EAC3E;AAAA,EAIA,OAAO,IAAA,EAA6B;AAChC,IAAA,MAAM,WAAA,GAAc,KAAK,CAAC,CAAA,YAAa,OACjC,IAAA,CAAK,CAAC,EAAE,MAAA,GACR,IAAA;AAEN,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,WAAA,CAAY,MAAA,EAAQ;AAC3C,MAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,IAAI,IAAA,CAAI,GAAG,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,KAAA,GAAQ,WAAA,CAAY,CAAC,CAAC,CAAC,CAAA;AAAA,EAC3E;AAAA,EAEA,IAAI,MAAA,EAAqB;AACrB,IAAA,OAAO,IAAI,KAAI,GAAG,IAAA,CAAK,OAAO,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,GAAQ,MAAM,CAAC,CAAA;AAAA,EAC9D;AAAA,EAEA,IAAI,MAAA,EAAqB;AACrB,IAAA,OAAO,IAAI,KAAI,GAAG,IAAA,CAAK,OAAO,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,GAAQ,MAAM,CAAC,CAAA;AAAA,EAC9D;AAAA,EAEA,IAAI,KAAA,EAAoB;AACpB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,OAAO,MAAA,EAAQ;AAC5C,MAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAACC,IAAAA,EAAK,CAAA,EAAG,CAAA,KAAMA,IAAAA,GAAM,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,SAAS,KAAA,EAAoB;AACzB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,OAAO,MAAA,EAAQ;AAC5C,MAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,IAAA,CAAK,OAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,EACvE;AAAA,EAEA,SAAA,GAAiB;AACb,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,EACvB;AAAA,EAEA,OAAO,IAAA,CAAK,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAgB;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,CAAO,MAAA,KAAW,CAAA,CAAE,OAAO,MAAA,EAAQ;AACrC,MAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC/D,SAAAA,CAAS,CAAC,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,CAAA,CAAE,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,SAAS,GAAA,EAAkB;AACvB,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,IAAA,OAAO,QAAQ,CAAA,GAAI,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,EAChD;AAAA,EAEA,KAAA,CAAM,SAAA,EAAoB,SAAA,EAAoB,UAAA,EAAuB;AACjE,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AAEjB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA,IAAI,cAAc,MAAA,EAAW;AACzB,QAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,CAAO,MAAA,KAAW,KAAK,MAAA,CAAO,MAAA;AACvD,UAAA,MAAM,IAAI,UAAU,6BAA6B,CAAA;AACrD,QAAA,MAAM,GAAA,GAAM,cAAc,UAAA,CAAW,MAAA,KAAW,IAAI,UAAA,CAAW,SAAA,KAAc,IAAI,IAAA,CAAI,GAAG,GAAG,KAAA,CAAM,KAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAChI,QAAA,OAAO,GAAA,CAAI,IAAI,SAAS,CAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAGA,IAAA,IAAI,SAAA,KAAc,MAAA,IAAa,GAAA,GAAM,SAAA,EAAW;AAC5C,MAAA,OAAO,IAAA,CAAK,SAAA,EAAU,CAAE,GAAA,CAAI,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,SAAA,KAAc,MAAA,IAAa,GAAA,GAAM,SAAA,EAAW;AAC5C,MAAA,OAAO,IAAA,CAAK,SAAA,EAAU,CAAE,GAAA,CAAI,SAAS,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,OAAO,KAAA,EAAqB;AACxB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,MAAA,CAAO,UACvC,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,CAAA,KAAM,CAAA,KAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACzD;AAAA,EAEA,KAAA,GAAa;AACT,IAAA,OAAO,IAAI,IAAA,CAAI,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AAAA,EAEA,QAAA,GAAW;AACP,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,CAAA,EAAG,GAAG,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,CAAA,EAAE;AAAA,EAC7C;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAI;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,EACxC;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACxC;AACJ;;;ACzLO,IAAM,IAAA,GAAN,MAAM,KAAA,CAAK;AAAA,EASd,eAAe,IAAA,EAAgB;AAR/B,IAAA,aAAA,CAAA,IAAA,EAAO,GAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,GAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,OAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,QAAA,CAAA;AAMH,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,KAAK,MAAA,GAAS,CAAA;AAAA,IACjD,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB,CAAA,MACK;AACD,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAC,CAAA;AACf,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAC,CAAA;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAA;AAChC,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EACrE;AAAA,EAKA,OAAO,IAAA,EAAsB;AACzB,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,KAAK,MAAA,GAAS,CAAA;AAAA,IACjD,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB,CAAA,MACK;AACD,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAC,CAAA;AACf,MAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAC,CAAA;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAA;AAChC,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAEjE,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA,EAIA,OAAO,UAAA,CAAW,EAAA,EAA8B,EAAA,EAAoC;AAChF,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAC7B,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAC7B,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,GAAI,GAAG,CAAC,CAAA;AAC9B,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,CAAA,GAAI,GAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,IAAI,KAAA,CAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,UAAA,CAAW,EAAA,EAAY,EAAA,EAAY,OAAe,MAAA,EAAsB;AAC3E,IAAA,OAAO,IAAI,MAAK,EAAA,GAAK,KAAA,GAAQ,GAAG,EAAA,GAAK,MAAA,GAAS,CAAA,EAAG,KAAA,EAAO,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA,EAIA,IAAI,IAAA,GAAe;AAAE,IAAA,OAAO,IAAA,CAAK,CAAA;AAAA,EAAG;AAAA,EACpC,IAAI,GAAA,GAAc;AAAE,IAAA,OAAO,IAAA,CAAK,CAAA;AAAA,EAAG;AAAA,EACnC,IAAI,KAAA,GAAgB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA;AAAA,EAAO;AAAA,EAClD,IAAI,MAAA,GAAiB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA;AAAA,EAAQ;AAAA,EAEpD,IAAI,OAAA,GAAkB;AAAE,IAAA,OAAO,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EAAG;AAAA,EACxD,IAAI,OAAA,GAAkB;AAAE,IAAA,OAAO,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EAAG;AAAA,EACzD,IAAI,MAAA,GAAmC;AAAE,IAAA,OAAO,EAAE,CAAA,EAAG,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG,KAAK,OAAA,EAAQ;AAAA,EAAG;AAAA,EAEtF,IAAI,IAAA,GAAe;AAAE,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAA;AAAA,EAAQ;AAAA,EACtD,IAAI,OAAA,GAAmB;AAAE,IAAA,OAAO,IAAA,CAAK,KAAA,IAAS,CAAA,IAAK,IAAA,CAAK,MAAA,IAAU,CAAA;AAAA,EAAG;AAAA;AAAA,EAIrE,aAAA,CAAc,IAAY,EAAA,EAAqB;AAC3C,IAAA,OAAO,EAAA,IAAM,IAAA,CAAK,IAAA,IAAQ,EAAA,IAAM,IAAA,CAAK,SAAS,EAAA,IAAM,IAAA,CAAK,GAAA,IAAO,EAAA,IAAM,IAAA,CAAK,MAAA;AAAA,EAC/E;AAAA,EAEA,aAAa,KAAA,EAAsB;AAC/B,IAAA,OACI,KAAA,CAAM,IAAA,IAAQ,IAAA,CAAK,IAAA,IACnB,MAAM,KAAA,IAAS,IAAA,CAAK,KAAA,IACpB,KAAA,CAAM,GAAA,IAAO,IAAA,CAAK,GAAA,IAClB,KAAA,CAAM,UAAU,IAAA,CAAK,MAAA;AAAA,EAE7B;AAAA,EAEA,WAAW,KAAA,EAAsB;AAC7B,IAAA,OAAO,EACH,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,QACnB,KAAA,CAAM,IAAA,GAAO,IAAA,CAAK,KAAA,IAClB,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,IACpB,KAAA,CAAM,MAAM,IAAA,CAAK,MAAA,CAAA;AAAA,EAEzB;AAAA;AAAA,EAIA,iBAAiB,KAAA,EAAmB;AAChC,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACzC,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,MAAM,GAAG,CAAA;AACvC,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAC3C,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AAC7C,IAAA,IAAI,MAAM,EAAA,IAAM,EAAA,IAAM,EAAA,EAAI,OAAO,IAAI,KAAA,EAAK;AAC1C,IAAA,OAAO,IAAI,KAAA,CAAK,EAAA,EAAI,IAAI,EAAA,GAAK,EAAA,EAAI,KAAK,EAAE,CAAA;AAAA,EAC5C;AAAA,EAEA,UAAU,KAAA,EAAmB;AACzB,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACzC,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,MAAM,GAAG,CAAA;AACvC,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAC3C,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AAC7C,IAAA,OAAO,IAAI,KAAA,CAAK,EAAA,EAAI,IAAI,EAAA,GAAK,EAAA,EAAI,KAAK,EAAE,CAAA;AAAA,EAC5C;AAAA,EAEA,SAAA,CAAU,IAAY,EAAA,EAAkB;AACpC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,CAAK,CAAA,GAAI,IAAI,IAAA,CAAK,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,MAAA,GAAS,IAAI,EAAE,CAAA;AAAA,EACvF;AAAA,EAEA,WAAA,CAAY,IAAY,EAAA,EAAkB;AACtC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,CAAK,CAAA,GAAI,IAAI,IAAA,CAAK,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,MAAA,GAAS,IAAI,EAAE,CAAA;AAAA,EACvF;AAAA,EAEA,aAAA,CAAc,IAAY,EAAA,EAAkB;AACxC,IAAA,IAAA,CAAK,CAAA,IAAK,EAAA;AACV,IAAA,IAAA,CAAK,CAAA,IAAK,EAAA;AACV,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,UAAA,CAAW,IAAY,EAAA,EAAkB;AACrC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,CAAK,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,CAAA,GAAI,EAAA,EAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAAA,EACrE;AAAA,EAEA,YAAA,CAAa,MAAA,EAAgB,MAAA,GAAiB,MAAA,EAAc;AACxD,IAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AAC9C,IAAA,IAAA,CAAK,KAAA,IAAS,MAAA;AACd,IAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,MAAA,IAAU,MAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,SAAA,CAAU,MAAA,EAAgB,MAAA,GAAiB,MAAA,EAAc;AACrD,IAAA,OAAO,IAAA,CAAK,KAAA,EAAM,CAAE,YAAA,CAAa,QAAQ,MAAM,CAAA;AAAA,EACnD;AAAA,EAEA,SAAA,GAAkB;AACd,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,EAAM,KAAK,KAAA,GAAQ,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EACzD;AAAA,EAEA,SAAA,GAAkB;AACd,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,EAAM,KAAK,KAAA,GAAQ,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EACzD;AAAA,EAEA,QAAA,GAAiB;AACb,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAChC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AACpC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,EAAM,KAAK,KAAA,GAAQ,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EACzD;AAAA,EAEA,UAAA,CAAW,IAAY,EAAA,EAAkB;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,EAAE,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,EAAE,CAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAO,EAAE,CAAA;AACrC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,EAAE,CAAA;AACvC,IAAA,OAAO,IAAI,KAAA,CAAK,IAAA,EAAM,KAAK,KAAA,GAAQ,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EACzD;AAAA;AAAA,EAIA,OAAO,KAAA,EAAsB;AACzB,IAAA,OACI,IAAA,CAAK,CAAA,KAAM,KAAA,CAAM,CAAA,IACjB,KAAK,CAAA,KAAM,KAAA,CAAM,CAAA,IACjB,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA,IACrB,IAAA,CAAK,WAAW,KAAA,CAAM,MAAA;AAAA,EAE9B;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,OAAO,IAAI,MAAK,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAA,CAAA;AAAA,EAC3E;AAAA,EAEA,cAAA,GAA+B;AAC3B,IAAA,OAAO,IAAI,aAAa,IAAA,CAAK,IAAA,EAAM,KAAK,KAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACxE;AACJ;;;ACjNO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EAoCtB,eAAe,IAAA,EAAiB;AAnChC,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AA+BI,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,CAAC,CAAA;AAClB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,GAAA,GAAM,KAAK,CAAC,CAAA;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,CAAC,CAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,OAAA,GAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,IAAS,CAAA;AAC1C,MAAA,IAAA,CAAK,GAAA,GAAM,KAAK,CAAC,CAAA;AACjB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AACpB,MAAA,IAAA,CAAK,OAAA,GAAA,CAAW,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,IAAU,CAAA;AAAA,IAC9C,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,KAAA,GAAQ,CAAA;AACxC,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,IAC5C,CAAA,MACK;AACD,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA,EACJ;AAAA,EA8BA,OAAO,IAAA,EAA+B;AAClC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,CAAC,CAAA;AAClB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,GAAA,GAAM,KAAK,CAAC,CAAA;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,IACxB,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,IAAA,GAAO,KAAK,CAAC,CAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAC,CAAA;AACnB,MAAA,IAAA,CAAK,OAAA,GAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,IAAS,CAAA;AAC1C,MAAA,IAAA,CAAK,GAAA,GAAM,KAAK,CAAC,CAAA;AACjB,MAAA,IAAA,CAAK,MAAA,GAAS,KAAK,CAAC,CAAA;AACpB,MAAA,IAAA,CAAK,OAAA,GAAA,CAAW,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,IAAU,CAAA;AAAA,IAC9C,CAAA,MAAA,IACS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,KAAA,GAAQ,CAAA;AACxC,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,IAC5C,CAAA,MACK;AACD,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,MAAA,CAAO,IAAA,EAAc,GAAA,EAAa,OAAe,MAAA,EAA8B;AAClF,IAAA,OAAO,IAAI,aAAA,CAAa,IAAA,EAAM,OAAO,KAAA,EAAO,GAAA,EAAK,MAAM,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,cAAA,CAAe,OAAA,EAAiB,OAAA,EAAiB,OAAe,MAAA,EAA8B;AACjG,IAAA,OAAO,IAAI,aAAA;AAAA,MACP,UAAU,KAAA,GAAQ,CAAA;AAAA,MAClB,OAAA;AAAA,MACA,UAAU,KAAA,GAAQ,CAAA;AAAA,MAClB,UAAU,MAAA,GAAS,CAAA;AAAA,MACnB,OAAA;AAAA,MACA,UAAU,MAAA,GAAS;AAAA,KACvB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,cAAA,CAAe,KAAA,EAAe,MAAA,EAAgB,MAAc,OAAA,EAA+B;AAC9F,IAAA,OAAO,IAAI,cAAa,CAAC,KAAA,EAAO,GAAG,MAAA,EAAQ,CAAC,IAAA,EAAM,CAAA,EAAG,OAAO,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,CAAK,GAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,OAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,GAAO;AACP,IAAA,OAAO,IAAA,CAAK,UAAU,IAAA,CAAK,GAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAA,CAAS,GAAW,CAAA,EAAoB;AACpC,IAAA,OAAO,CAAA,IAAK,IAAA,CAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,IAAK,IAAA,CAAK,GAAA,IAAO,CAAA,IAAK,IAAA,CAAK,MAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAA,CAAQ,CAAA,EAAiB,CAAA,EAA0B;AACtD,IAAA,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,IAAA,IAAQ,EAAE,IAAA,GAAO,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,QAAA,CAAS,CAAA,EAAiB,CAAA,EAA0B;AACvD,IAAA,OAAO,EAAE,KAAA,GAAQ,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAO,CAAA,CAAE,KAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAA,CAAO,CAAA,EAAoC,CAAA,EAA6C;AAC3F,IAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM;AAExB,MAAA,OAAO,IAAA;AAAA,IACX,CAAA,MAAA,IACS,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM;AAC7B,MAAA,OAAO,KAAA;AAAA,IACX,CAAA,MACK;AACD,MAAA,OAAO,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,KAAA,KAAU,EAAE,KAAA,IAAS,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,YAAY,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA;AAAA,IAC1J;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAA,EAA8B;AACjC,IAAA,OAAO,aAAA,CAAa,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAA,CAAY,CAAA,EAAoC,CAAA,EAA6C;AAChG,IAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM;AAExB,MAAA,OAAO,IAAA;AAAA,IACX,CAAA,MAAA,IACS,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM;AAC7B,MAAA,OAAO,KAAA;AAAA,IACX,CAAA,MACK;AACD,MAAA,OAAO,MAAM,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA,IAAS,EAAE,GAAA,KAAQ,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA;AAAA,IACpG;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,KAAA,EAA8B;AACtC,IAAA,OAAO,aAAA,CAAa,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,GAAsB;AAClB,IAAA,OAAO,IAAI,aAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,OAAA,EAAS,KAAK,MAAM,CAAA;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,CAAc,IAAY,EAAA,EAA0B;AAChD,IAAA,IAAA,CAAK,IAAA,IAAQ,EAAA;AACb,IAAA,IAAA,CAAK,OAAA,IAAW,EAAA;AAChB,IAAA,IAAA,CAAK,KAAA,IAAS,EAAA;AACd,IAAA,IAAA,CAAK,GAAA,IAAO,EAAA;AACZ,IAAA,IAAA,CAAK,OAAA,IAAW,EAAA;AAChB,IAAA,IAAA,CAAK,MAAA,IAAU,EAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAA,CAAW,IAAY,EAAA,EAA0B;AAC7C,IAAA,OAAO,IAAA,CAAK,KAAA,EAAM,CAAE,aAAA,CAAc,IAAI,EAAE,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,IAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,KAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,KAAK,KAAK,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AACtC,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AAC/C,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,IAAA,EAAkC;AACzC,IAAA,OAAO,IAAA,CAAK,KAAA,EAAM,CAAE,aAAA,CAAc,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAAA,EAAsC;AAC9C,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,SAAS,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,SAAS,KAAK,CAAA;AAChD,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,CAAK,SAAS,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AACxD,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,SAAS,GAAG,CAAA;AAC1C,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,SAAS,MAAM,CAAA;AACnD,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,CAAK,SAAS,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AACxD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAAA,EAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,KAAA,EAAM,CAAE,WAAA,CAAY,QAAQ,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,MAAA,EAAgB,MAAA,GAAiB,MAAA,EAAsB;AAChE,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,KAAA,GAAQ,MAAA;AACxC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,MAAA;AAC1C,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,MAAA;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,GAAU,MAAA;AAC5C,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAA,CAAU,MAAA,EAAgB,MAAA,GAAiB,MAAA,EAAsB;AAC7D,IAAA,OAAO,IAAA,CAAK,KAAA,EAAM,CAAE,YAAA,CAAa,QAAQ,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,GAAwB;AACpB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,MAAA,GAAe;AACX,IAAA,OAAO,IAAI,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAAA,EAClE;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,aAAa,IAAA,CAAK,IAAI,CAAA,UAAA,EAAa,IAAA,CAAK,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,KAAK,CAAA,MAAA,EAAS,KAAK,GAAG,CAAA,UAAA,EAAa,KAAK,OAAO,CAAA,SAAA,EAAY,KAAK,MAAM,CAAA,CAAA,CAAA;AAAA,EAChJ;AACJ;;;ACrbO,IAAM,QAAA,GAAN,cAA4C,aAAA,CAAc;AAAA;AAAA,EAU7D,WAAA,CAAY,OAAA,EAAiB,YAAA,GAAuB,QAAA,EAAU;AAC1D,IAAA,KAAA,EAAM;AAVV,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,CAAA;AAKJ,IAAA,IAAA,CAAK,KAAA,mBAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAA,mBAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAK,IAAA,mBAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACxB;AAAA;AAAA,EAGA,IAAI,GAAA,EAAuB;AACvB,IAAA,IAAI,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,YAAA,EAAc,OAAO,MAAA;AAE3C,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,KAAM,MAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACzB;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,GAAA,CAAI,KAAQ,KAAA,EAAgB;AACxB,IAAA,IAAI,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,YAAA,EAAc;AAEhC,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,KAAM,MAAA,EAAW;AAE/B,MAAA,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAClB,MAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,QAAA,EAAU;AAC5B,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf;AAGA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAClB,IAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,EAAA;AAAA,EACT;AAAA;AAAA,EAGQ,MAAM,GAAA,EAAc;AACxB,IAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AAEvB,IAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAClB,IAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,EACtB;AAAA;AAAA,EAGQ,KAAA,GAAc;AAClB,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,MAAA,MAAM,YAAY,IAAA,CAAK,IAAA;AACvB,MAAA,IAAA,CAAK,UAAU,SAAS,CAAA;AACxB,MAAA,OAAO,IAAA,CAAK,MAAM,SAAS,CAAA;AAC3B,MAAA,IAAA,CAAK,IAAA,EAAA;AAAA,IACT;AAAA,EACJ;AAAA;AAAA,EAGQ,UAAU,GAAA,EAAc;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAE7B,IAAA,IAAI,YAAY,MAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,OAAA;AAAA,IACzB,CAAA,MACK;AAED,MAAA,IAAA,CAAK,OAAO,OAAA,IAAW,IAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,YAAY,MAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,OAAA;AAAA,IACzB,CAAA,MACK;AAED,MAAA,IAAA,CAAK,OAAO,OAAA,IAAW,IAAA;AAAA,IAC3B;AAGA,IAAA,OAAO,IAAA,CAAK,KAAK,GAAG,CAAA;AACpB,IAAA,OAAO,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACxB;AAAA;AAAA,EAGQ,UAAU,GAAA,EAAc;AAC5B,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AAEpB,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AACvB,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,CAAK,IAAA;AAAA,IAC1B,CAAA,MACK;AAED,MAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,IAChB;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,EAChB;AAAA,EAEA,CAAC,IAAA,GAA4B;AACzB,IAAA,KAAA,IAAS,GAAA,GAAM,KAAK,IAAA,EAAM,GAAA,IAAO,MAAM,GAAA,GAAM,IAAA,CAAK,KAAK,GAAG,CAAA;AACtD,MAAA,MAAM,GAAA;AAAA,EACd;AAAA,EAEA,CAAC,MAAA,GAA8B;AAC3B,IAAA,KAAA,IAAS,GAAA,GAAM,KAAK,IAAA,EAAM,GAAA,IAAO,MAAM,GAAA,GAAM,IAAA,CAAK,KAAK,GAAG,CAAA;AACtD,MAAA,MAAM,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EAC5B;AAAA,EAEA,CAAC,OAAA,GAAoC;AACjC,IAAA,KAAA,IAAS,GAAA,GAAM,KAAK,IAAA,EAAM,GAAA,IAAO,MAAM,GAAA,GAAM,IAAA,CAAK,KAAK,GAAG,CAAA;AACtD,MAAA,MAAM,CAAC,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACnC;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAA8B;AAC3C,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA;AAClC,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GACpB,CAAA,cAAA,CAAA,GACA,CAAA,SAAA,EAAY,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,SAAA,CAAU,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC/G;AACJ;;;AC3IO,IAAM,UAAA,GAAN,MAAM,WAAA,SAA0B,aAAA,CAAsD;AAAA,EAezF,YAAY,OAAA,EAAyD;AACjE,IAAA,KAAA,EAAM;AAVV,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AAQJ,IAAA,IAAI,mBAAmB,WAAA,EAAY;AAC/B,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,IAC5B,CAAA,MACK;AACD,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAEhB,MAAA,IAAI,OAAA,EAAS;AACT,QAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,OAAA,EAAS;AAC/B,UAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AAAA,EAUJ;AAAA,EA1CA,OAAe,cAAc,EAAA,EAAoB;AAC7C,IAAA,IAAI,CAAC,YAAA,CAAa,EAAA,EAAI,CAAC,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,EAAE,CAAA,2BAAA,CAA6B,CAAA;AAC1F,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EAyCA,IAAY,MAAA,GAAiB;AACzB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EAEQ,SAAA,GAAY;AAChB,IAAA,IAAI,YAAY,IAAA,CAAK,MAAA;AACrB,IAAA,OAAO,YAAY,CAAA,IAAK,IAAA,CAAK,OAAO,SAAA,GAAY,CAAC,MAAM,IAAA,EAAM,SAAA,EAAA;AAC7D,IAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ,IAAA,CAAK,OAAO,MAAA,GAAS,IAAA,CAAK,OAAO,MAAA,GAAS,SAAA;AAAA,EAC3E;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,IAAI,EAAA,EAAqB;AACrB,IAAA,WAAA,CAAW,cAAc,EAAE,CAAA;AAE3B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,KAAM,IAAA;AAAA,EAC/B;AAAA,EAEA,GAAA,CAAI,IAAY,KAAA,EAAoB;AAChC,IAAA,WAAA,CAAW,cAAc,EAAE,CAAA;AAE3B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,KAAM,MAAM,IAAA,CAAK,QAAA,EAAA;AACnC,IAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAClB,IAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,IAAA;AAAA,EACtB;AAAA,EAEA,IAAI,EAAA,EAA+B;AAC/B,IAAA,WAAA,CAAW,cAAc,EAAE,CAAA;AAE3B,IAAA,OAAO,KAAK,MAAA,CAAO,EAAE,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AAAA,EAC/C;AAAA,EAEA,YAAA,CAAa,IAAY,YAAA,EAA4B;AACjD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,YAAA;AAAA,EAC3B;AAAA,EAIA,WAAA,CAAY,IAAY,cAAA,EAA8C;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACf,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAClB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,EACtB;AAAA,EAEA,OAAO,EAAA,EAAqB;AACxB,IAAA,WAAA,CAAW,cAAc,EAAE,CAAA;AAE3B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,EAAE,GAAG,OAAO,KAAA;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AAClB,IAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAClB,IAAA,IAAA,CAAK,QAAA,EAAA;AACL,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAAA,EACpB;AAAA,EAEA,OAAA,CAAQ,YAAwE,OAAA,EAAqB;AACjG,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AAAA,IAC5C;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAAoC;AACjC,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,EAAA;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,KAAK,MAAA,CAAO,EAAE,GAAG,MAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAA6C;AAC1C,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,CAAC,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,IACnD;AAAA,EACJ;AAAA,EAEA,YAAA,GAAyB;AACrB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAAkC;AAC9B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAqC;AAClC,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,OAAA,EAAQ,EAAG;AAC7B,MAAA,MAAM,CAAC,EAAE,CAAA;AAAA,IACb;AAAA,EACJ;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,SAAA,GAAiD;AAC9C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAM,CAAC,CAAC,EAAE,CAAA,EAAG,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAuC;AACpD,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAA2B;AACvB,IAAA,OAAO,IAAI,YAAW,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,KAAA,CAAM,OAA0B,gBAAA,EAAkF;AAC9G,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACvC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,gBAAA,EAAkB;AAClC,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,EAAE,CAAA,EAAI,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MAC3D,CAAA,MACK;AACD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,MACtB;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAoD;AACrD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA,EAAG,OAAO,IAAA;AAAA,IAC9B;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAsD;AACxD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,EAAE,GAAG,OAAO,KAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAA+E;AAElF,IAAA,MAAM,MAAA,GAAS,IAAK,IAAA,CAAK,WAAA,EAA6C;AACtE,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,SAAA,CAAU,OAAO,EAAA,EAAI,IAAI,GAAG,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAA6C,IAAA,EAAa;AAChE,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,mDAAmD,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA;AAC5B,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAA4C;AACtD,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,IAAe,EAAA,EAAsD;AACjE,IAAA,IAAI,MAAA,GAAS,IAAI,WAAA,EAAc;AAC/B,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAA,CAAO,GAAA,CAAI,EAAA,EAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAO,OAA0B,EAAA,EAA+C;AAC5E,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM,OAAO,KAAA;AAErC,IAAA,EAAA,KAAA,EAAA,GAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA,CAAA;AAEvB,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAA,IAAI,IAAA,KAAS,MAAM,OAAO,KAAA;AAC1B,MAAA,IAAI,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC5B;AAAA,EAEA,QAAA,GAAmB;AAEf,IAAA,IAAI,cAAA,GAAiB,IAAA;AACrB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,UAAU,cAAA,EAAgB,CAAA,EAAA;AACtD,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,cAAA,GAAiB,KAAA;AAC1C,IAAA,IAAI,cAAA;AACA,MAAA,OAAO,SAAA,CAAU,KAAK,MAAA,CAAO,KAAA,CAAM,GAAG,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAE7D,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,EAAa,CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA,KAAM,GAAG,SAAA,CAAU,EAAE,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnG,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,GAAA,CAAA,GAAQ,KAAK,OAAO,CAAA,EAAA,CAAA;AAAA,EACtD;AACJ;;;AC9SO,IAAM,gBAAA,GAAN,MAAM,iBAAA,SAAgC,aAAA,CAAsD;AAAA,EAwB/F,YAAY,OAAA,EAA+D;AACvE,IAAA,KAAA,EAAM;AAdV;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AAQJ,IAAA,IAAI,mBAAmB,iBAAA,EAAkB;AACrC,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAM;AACnC,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,IAC5B,CAAA,MACK;AACD,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAEhB,MAAA,IAAI,OAAA,EAAS;AACT,QAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,OAAA,EAAS;AAC/B,UAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AAAA,EAUJ;AAAA,EAvDA,OAAe,WAAW,EAAA,EAAoB;AAC1C,IAAA,OAAO,CAAC,EAAA,GAAK,CAAA;AAAA,EACjB;AAAA,EAEA,OAAe,cAAc,EAAA,EAAoB;AAC7C,IAAA,IAAI,CAAC,UAAU,EAAE,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,EAAE,CAAA,sBAAA,CAAwB,CAAA;AAC/E,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EAkDA,IAAI,IAAA,GAAe;AACf,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,IAAY,MAAA,GAAiB;AACzB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EAEA,IAAY,MAAA,GAAiB;AACzB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EAEA,IAAI,EAAA,EAAqB;AACrB,IAAA,iBAAA,CAAiB,cAAc,EAAE,CAAA;AAEjC,IAAA,IAAI,MAAM,CAAA,EAAG;AACT,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,KAAM,IAAA;AAAA,IAC/B,CAAA,MACK;AACD,MAAA,OAAO,KAAK,MAAA,CAAO,iBAAA,CAAiB,UAAA,CAAW,EAAE,CAAC,CAAA,KAAM,IAAA;AAAA,IAC5D;AAAA,EACJ;AAAA,EAEA,GAAA,CAAI,IAAY,KAAA,EAAoB;AAChC,IAAA,iBAAA,CAAiB,cAAc,EAAE,CAAA;AAEjC,IAAA,IAAI,MAAM,CAAA,EAAG;AACT,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,KAAM,MAAM,IAAA,CAAK,QAAA,EAAA;AACnC,MAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,IAAA;AAAA,IACtB,CAAA,MACK;AACD,MAAA,IAAI,KAAA,GAAQ,iBAAA,CAAiB,UAAA,CAAW,EAAE,CAAA;AAC1C,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,KAAM,MAAM,IAAA,CAAK,QAAA,EAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,IAAI,EAAA,EAA+B;AAC/B,IAAA,iBAAA,CAAiB,cAAc,EAAE,CAAA;AAEjC,IAAA,IAAI,MAAM,CAAA,EAAG;AACT,MAAA,OAAO,KAAK,MAAA,CAAO,EAAE,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AAAA,IAC/C,CAAA,MACK;AACD,MAAA,IAAI,KAAA,GAAQ,iBAAA,CAAiB,UAAA,CAAW,EAAE,CAAA;AAC1C,MAAA,OAAO,KAAK,MAAA,CAAO,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAAA,IACrD;AAAA,EACJ;AAAA,EAEA,YAAA,CAAa,IAAY,YAAA,EAA4B;AACjD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,YAAA;AAAA,EAC3B;AAAA,EAIA,WAAA,CAAY,IAAY,cAAA,EAA8C;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACf,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAClB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,EACtB;AAAA,EAEA,OAAO,EAAA,EAAqB;AACxB,IAAA,iBAAA,CAAiB,cAAc,EAAE,CAAA;AAEjC,IAAA,MAAM4C,SAAQ,EAAA,IAAM,CAAA;AACpB,IAAA,MAAM,GAAA,GAAMA,MAAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AACvC,IAAA,MAAM,GAAA,GAAMA,MAAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AACvC,IAAA,MAAM,GAAA,GAAMA,MAAAA,GAAQ,EAAA,GAAK,iBAAA,CAAiB,WAAW,EAAE,CAAA;AAEvD,IAAA,IAAI,CAAC,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA;AAEtB,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AACX,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AACX,IAAA,IAAA,CAAK,QAAA,EAAA;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAAA,EACpB;AAAA,EAEA,OAAA,CAAQ,YAA8E,OAAA,EAAqB;AACvG,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AAAA,IAC5C;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAAoC;AACjC,IAAA,KAAA,IAAS,KAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,EAAA,IAAM,GAAG,EAAA,EAAA,EAAM;AAC1C,MAAA,IAAI,KAAK,MAAA,CAAO,EAAE,GAAG,MAAM,iBAAA,CAAiB,WAAW,EAAE,CAAA;AAAA,IAC7D;AACA,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,EAAA;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,KAAA,IAAS,KAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,EAAA,IAAM,GAAG,EAAA,EAAA,EAAM;AAC1C,MAAA,IAAI,KAAK,MAAA,CAAO,EAAE,GAAG,MAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,KAAK,MAAA,CAAO,EAAE,GAAG,MAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAA6C;AAC1C,IAAA,KAAA,IAAS,KAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,EAAA,IAAM,GAAG,EAAA,EAAA,EAAM;AAC1C,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,CAAC,iBAAA,CAAiB,UAAA,CAAW,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AACrC,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,CAAC,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,IACnD;AAAA,EACJ;AAAA,EAEA,YAAA,GAAyB;AACrB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAAkC;AAC9B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAqC;AAClC,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,OAAA,EAAQ,EAAG;AAC7B,MAAA,MAAM,CAAC,EAAE,CAAA;AAAA,IACb;AAAA,EACJ;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,SAAA,GAAiD;AAC9C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAM,CAAC,CAAC,EAAE,CAAA,EAAG,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAuC;AACpD,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAAiC;AAC7B,IAAA,OAAO,IAAI,kBAAiB,IAAI,CAAA;AAAA,EACpC;AAAA,EAEA,KAAA,CAAM,OAAgC,gBAAA,EAAkF;AACpH,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACvC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,gBAAA,EAAkB;AAClC,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,EAAE,CAAA,EAAI,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MAC3D,CAAA,MACK;AACD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,MACtB;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAoD;AACrD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA,EAAG,OAAO,IAAA;AAAA,IAC9B;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAsD;AACxD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,EAAE,GAAG,OAAO,KAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAAqF;AAExF,IAAA,MAAM,MAAA,GAAS,IAAK,IAAA,CAAK,WAAA,EAAmD;AAC5E,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,SAAA,CAAU,OAAO,EAAA,EAAI,IAAI,GAAG,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAA6C,IAAA,EAAa;AAChE,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,yDAAyD,CAAA;AAAA,MACjF;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA;AAC5B,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAA4C;AACtD,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,IAAe,EAAA,EAA4D;AACvE,IAAA,IAAI,MAAA,GAAS,IAAI,iBAAA,EAAoB;AACrC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAA,CAAO,GAAA,CAAI,EAAA,EAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAO,OAAgC,EAAA,EAA+C;AAClF,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM,OAAO,KAAA;AAErC,IAAA,EAAA,KAAA,EAAA,GAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA,CAAA;AAEvB,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAA,IAAI,IAAA,KAAS,MAAM,OAAO,KAAA;AAC1B,MAAA,IAAI,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC7D;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAA,IAAI,IAAA,KAAS,MAAM,OAAO,KAAA;AAC1B,MAAA,IAAI,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC5B;AAAA,EAEA,QAAA,GAAmB;AAEf,IAAA,IAAI,cAAA,GAAiB,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA;AAC5C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,UAAU,cAAA,EAAgB,CAAA,EAAA;AACtD,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,cAAA,GAAiB,KAAA;AAC1C,IAAA,IAAI,cAAA;AACA,MAAA,OAAO,SAAA,CAAU,KAAK,MAAA,CAAO,KAAA,CAAM,GAAG,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAE7D,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,EAAa,CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA,KAAM,GAAG,SAAA,CAAU,EAAE,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnG,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,GAAA,CAAA,GAAQ,KAAK,OAAO,CAAA,EAAA,CAAA;AAAA,EACtD;AACJ;;;AC9VO,IAAM,YAAA,GAAN,MAAM,aAAA,SAA4B,aAAA,CAAsD;AAAA,EAO3F,eAAe,IAAA,EAAiB;AAC5B,IAAA,KAAA,EAAM;AAPV,IAAA,aAAA,CAAA,IAAA,EAAiB,cAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AAQJ,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,GAAA,EAAI;AAE7B,IAAA,IAAI,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,EAAU;AAC7B,MAAA,IAAA,CAAK,IAAA,GAAO,MAAM,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,YAAY,CAAA;AAAA,IACrD,CAAA,MACK;AACD,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAoB,CAAA,CAAE,GAAA;AAAA,QAAI,CAAA,CAAA,KACnD,CAAA,KAAM,MAAA,GAAY,IAAA,CAAK,YAAA,GAAe;AAAA,OAC1C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACrB;AAAA,EAEA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACrB;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACjC,IAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,IAAM,IAAA,CAAK,IAAA,CAAK,MAAA;AAC1B,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,oBAAA,EAAuB,EAAE,CAAA,aAAA,CAAe,CAAA;AACjE,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,UAAU,EAAA,EAAqB;AAC3B,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,CAAC,MAAM,IAAA,CAAK,YAAA;AAAA,EACjD;AAAA,EAEA,MAAM,EAAA,EAAqB;AACvB,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,CAAC,MAAM,IAAA,CAAK,YAAA;AAAA,EACjD;AAAA;AAAA,EAGA,IAAI,EAAA,EAAqB;AACrB,IAAA,OAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,EACxB;AAAA,EAEA,GAAA,CAAI,IAAY,KAAA,EAAqB;AACjC,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC,CAAA,GAAI,KAAA;AAAA,EAC1C;AAAA,EAEA,IAAI,EAAA,EAAmB;AACnB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,EACtC;AAAA,EAEA,YAAA,CAAa,IAAY,YAAA,EAA4B;AACjD,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACvB,IAAA,OAAO,KAAA,KAAU,IAAA,CAAK,YAAA,GAAe,YAAA,GAAe,KAAA;AAAA,EACxD;AAAA,EAIA,WAAA,CAAY,IAAY,cAAA,EAA8C;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACf,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAClB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,EACtB;AAAA,EAEA,OAAO,EAAA,EAAqB;AACxB,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAI,KAAK,IAAA,CAAK,EAAE,CAAA,KAAM,IAAA,CAAK,cAAc,OAAO,KAAA;AAChD,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,GAAI,IAAA,CAAK,YAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAA,CAAM,QAAQ,KAAA,EAAa;AACvB,IAAA,IAAI,KAAA;AACA,MAAA,IAAA,CAAK,OAAO,EAAC;AAAA;AAEb,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EACxC;AAAA,EAEA,OAAA,CAAQ,YAA0E,OAAA,EAAqB;AACnG,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,IAAI,CAAA;AAAA,IAC5C;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAAoC;AACjC,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,EAAK;AAAA,EAC1B;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,OAAO,IAAA,CAAK,KAAK,MAAA,EAAO;AAAA,EAC5B;AAAA,EAEA,CAAC,OAAA,GAA6C;AAC1C,IAAA,OAAO,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,EAC7B;AAAA,EAEA,YAAA,GAAyB;AACrB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAAkC;AAC9B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAqC;AAClC,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,OAAA,EAAQ,EAAG;AAC7B,MAAA,MAAM,CAAC,EAAE,CAAA;AAAA,IACb;AAAA,EACJ;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,SAAA,GAAiD;AAC9C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAM,CAAC,CAAC,EAAE,CAAA,EAAG,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAuC;AACpD,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAA6B;AACzB,IAAA,MAAM,OAAO,IAAA,CAAK,WAAA;AAClB,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,EAAG,KAAK,YAAY,CAAA;AAAA,EACpD;AAAA,EAEA,KAAA,CAAM,OAA4B,gBAAA,EAAkF;AAChH,IAAA,IAAI,IAAA,CAAK,gBAAgB,KAAA,CAAM,WAAA;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,IAAA,EAAO,KAAA,CAAM,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAE1H,IAAA,IAAI,IAAA,CAAK,iBAAiB,KAAA,CAAM,YAAA;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,mDAAA,EAAsD,IAAA,CAAK,YAAY,CAAA,IAAA,EAAO,KAAA,CAAM,YAAY,CAAA,CAAA,CAAG,CAAA;AAEvH,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACvC,MAAA,IAAI,IAAA,CAAK,UAAU,EAAE,CAAA;AACjB,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,WAAA,IACb,gBAAA;AACL,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,EAAE,CAAA,EAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA;AAEtD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAoD;AACrD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA,EAAG,OAAO,IAAA;AAAA,IAC9B;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAsD;AACxD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,EAAE,GAAG,OAAO,KAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAA8E;AAEjF,IAAA,MAAM,SAAS,IAAK,IAAA,CAAK,YAAyE,IAAA,CAAK,MAAA,EAAQ,KAAK,YAAY,CAAA;AAChI,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,IAAI,SAAA,CAAU,OAAO,EAAA,EAAI,IAAI,GAAG,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAA6C,IAAA,EAAa;AAChE,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,qDAAqD,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA;AAC5B,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAA4C;AACtD,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,GAAA,CAAe,IAAuC,YAAA,EAAkC;AACpF,IAAA,IAAI,SAAS,IAAI,aAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,QAAQ,YAAY,CAAA;AAC/D,IAAA,KAAA,IAAS,KAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAA,EAAA,EAAM;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,GAAI,EAAA,CAAG,KAAK,IAAA,CAAK,EAAE,GAAG,EAAE,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAO,OAA4B,EAAA,EAA+C;AAC9E,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM,OAAO,KAAA;AACrC,IAAA,EAAA,KAAA,EAAA,GAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA,CAAA;AACvB,IAAA,KAAA,IAAS,KAAK,CAAA,EAAG,EAAA,GAAK,KAAK,IAAA,CAAK,MAAA,EAAQ,EAAE,EAAA,EAAI;AAC1C,MAAA,IAAI,CAAC,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IACnD;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC5B;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC9B;AACJ;;;ACxQO,IAAM,MAAA,GAAN,MAAM,OAAA,SAA2B,aAAA,CAAmD;AAAA,EAOvF,eAAe,IAAA,EAAiB;AAC5B,IAAA,KAAA,EAAM;AAPV,IAAA,aAAA,CAAA,IAAA,EAAQ,KAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,CAAA;AASJ,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA;AAC9B,IAAA,IAAA,CAAK,YAAY,UAAA,CAAW,WAAW,CAAA,GAChC,IAAA,CAAK,KAAI,GACV,iBAAA;AAGN,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AAEtB,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAAA,EAU9B;AAAA,EAKA,OAAO,WAAwB,GAAA,EAAqD;AAChF,IAAA,OAAO,GAAA,GAAM,IAAI,OAAA,CAAoB,GAAA,EAAK,WAAW,CAAA,GAAI,IAAI,QAAoB,WAAW,CAAA;AAAA,EAChG;AAAA,EAEA,IAAI,GAAA,EAAmB;AACnB,IAAA,IAAI,KAAK,SAAA,KAAc,iBAAA,IAAqB,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC3B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,IAAA,CAAK,GAAA;AACtB,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AACrB,QAAA,OAAO,IAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,GAAA,CAAI,KAAU,KAAA,EAAqB;AAC/B,IAAA,IAAI,KAAK,SAAA,KAAc,iBAAA,IAAqB,KAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3D,MAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACvB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAK;AAC7B,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AACxB,QAAA,OAAO,KAAA;AAAA,MACX;AACJ,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACvB,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,IAAI,GAAA,EAA6B;AAC7B,IAAA,IAAI,KAAK,SAAA,KAAc,iBAAA,IAAqB,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAE3B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,IAAA,CAAK,GAAA;AACtB,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AACrB,QAAA,OAAO,CAAA;AAEf,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,OAAO,GAAA,EAAmB;AACtB,IAAA,IAAI,KAAK,SAAA,KAAc,iBAAA,IAAqB,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA;AAC9B,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,IAAA,EAAK;AAC1B,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA;AACrB,QAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AAChC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,YAAA,CAAa,KAAU,YAAA,EAA4B;AAC/C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,YAAA;AAAA,EAC5B;AAAA,EAIA,WAAA,CAAY,KAAU,cAAA,EAA8C;AAChE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAChB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,EACvB;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AAAA,EACnB;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA;AAAA,EACpB;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,OAAA,CAAQ,YAAwE,OAAA,EAAqB;AACjG,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,IAAI,CAAC,CAAA;AAAA,EAC/E;AAAA,EAEA,CAAC,IAAA,GAA8B;AAC3B,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,EAAK;AAAA,EACzB;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,EAAO;AAAA,EAC3B;AAAA,EAEA,CAAC,OAAA,GAA0C;AACvC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,GAAA;AAC5B,MAAA,MAAM,CAAC,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,SAAA,GAAmB;AACf,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EAC1B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAA+B;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,IAAA,EAAK,EAAG;AAC3B,MAAA,MAAM,CAAC,GAAG,CAAA;AAAA,IACd;AAAA,EACJ;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,MAAA,EAAO,EAAG;AAC5B,MAAA,MAAM,EAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,SAAA,GAA8C;AAC3C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,EAAE,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACpC,MAAA,MAAM,CAAC,CAAC,GAAG,CAAA,EAAG,EAAE,CAAA;AAAA,IACpB;AAAA,EACJ;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAoC;AACjD,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAA4B;AACxB,IAAA,OAAO,IAAI,OAAA,CAAO,IAAA,EAAM,IAAA,CAAK,SAAS,CAAA;AAAA,EAC1C;AAAA,EAEA,KAAA,CAAM,OAA2B,gBAAA,EAAgF;AAC7G,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACxC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,gBAAA,EAAkB;AACnC,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,gBAAA,CAAiB,IAAA,CAAK,IAAI,GAAG,CAAA,EAAI,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,MAC9D,CAAA,MACK;AACD,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,MACvB;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAkD;AACnD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,GAAA,EAAK;AACjC,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,GAAG,CAAA,EAAG,OAAO,IAAA;AAAA,IAC/B;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAkD;AACpD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,GAAA,EAAK;AACjC,MAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,GAAG,GAAG,OAAO,KAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAA2E;AAE9E,IAAA,MAAM,MAAA,GAAS,IAAK,IAAA,CAAK,WAAA,EAA8C;AACvE,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,GAAA,EAAK;AACjC,MAAA,IAAI,SAAA,CAAU,OAAO,GAAA,EAAK,IAAI,GAAG,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAA2C,IAAA,EAAa;AAC9D,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,+CAA+C,CAAA;AAAA,MACvE;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA;AAC7B,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,GAAG,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAAwC;AAClD,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,GAAA,EAAK;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,UAAqB,EAAA,EAAmD;AACpE,IAAA,IAAI,MAAA,GAAS,IAAI,OAAA,EAAe;AAChC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,GAAA,EAAK;AACjC,MAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,EAAA,CAAG,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAyB;AACrB,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AAAA,EAC3B;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7F,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,IAAA,CAAA,GAAS,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,CAAA;AAAA,EACxF;AACJ;;;ACjQO,IAAM,KAAA,GAAN,MAAM,MAAA,SAAiC,aAAA,CAA0D;AAAA,EAQpG,YAAY,OAAA,EAAoE;AAC5E,IAAA,KAAA,EAAM;AARV,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAA+B,iBAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAA+B,iBAAA,CAAA;AAQnC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAEtC,IAAA,IAAI,mBAAmB,MAAA,EAAO;AAC1B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,QAAQ,IAAA,EAAM;AACrC,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,CAAK,GAAA,CAAI,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAC/D,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,QAC3B;AAAA,MACJ;AAAA,IACJ,WACS,OAAA,EAAS;AACd,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,KAAK,OAAA,EAAS;AACvC,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MAC9B;AAAA,IACJ;AAAA,EAUJ;AAAA,EAEA,GAAA,CAAI,MAAY,IAAA,EAAqB;AACjC,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,IAAK,KAAA;AAAA,EAC7C;AAAA,EAEA,GAAA,CAAI,IAAA,EAAY,IAAA,EAAY,KAAA,EAAqB;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,MAAM,IAAI,MAAA,CAAoB,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,EACtG;AAAA,EAEA,GAAA,CAAI,MAAY,IAAA,EAA+B;AAC3C,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AAAA,EACxC;AAAA,EAEA,YAAA,CAAa,IAAA,EAAY,IAAA,EAAY,YAAA,EAA4B;AAC7D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA,IAAK,YAAA;AAAA,EACnC;AAAA,EAIA,WAAA,CAAY,IAAA,EAAY,IAAA,EAAY,cAAA,EAA8C;AAC9E,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA,EAAG;AACvB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAC1B,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAIA,MAAA,CAAO,MAAY,IAAA,EAAsB;AACrC,IAAA,IAAI,SAAS,MAAA,EAAW,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AACpD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,IAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAC3B;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EACpB;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,EAAG;AACnC,MAAA,KAAA,IAAS,IAAA,CAAK,IAAA;AAAA,IAClB;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,OAAA,CAAQ,YAA4F,OAAA,EAAqB;AACrH,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,CAAC,MAAM,IAAA,KAAS,IAAA,CAAK,QAAQ,CAAC,KAAA,EAAO,IAAA,KAAS,UAAA,CAAW,KAAK,OAAA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AAAA,EACtH;AAAA,EAEA,CAAC,IAAA,GAAuC;AACpC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,IAAA,EAAK;AACzB,QAAA,MAAM,CAAC,MAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO;AAChC,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAO;AAC5B,QAAA,MAAM,KAAA;AAAA,EAClB;AAAA,EAEA,CAAC,OAAA,GAAiD;AAC9C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA;AACxB,QAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,SAAA,GAA4B;AACxB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EAC1B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAAsC;AAClC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAyC;AACtC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAK;AACjC,MAAA,MAAM,CAAC,MAAM,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,MAAA,EAAO;AACzB,MAAA,MAAM,EAAA;AAAA,EACd;AAAA,EAEA,CAAC,SAAA,GAAqD;AAClD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,EAAE,CAAA,IAAK,KAAK,OAAA,EAAQ;AACxC,MAAA,MAAM,CAAC,CAAC,IAAA,EAAM,IAAI,GAAG,EAAE,CAAA;AAAA,EAC/B;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAA2C;AACxD,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAAkC;AAC9B,IAAA,OAAO,IAAI,OAAM,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,KAAA,CAAM,OAAiC,gBAAA,EAA8F;AACjI,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC/C,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,KAAK,gBAAA,EAAkB;AAC1C,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,gBAAA,CAAiB,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA,EAAI,KAAA,EAAO,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MACnF,CAAA,MACK;AACD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MAC9B;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAgE;AACjE,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,IAAI,EAAA,CAAG,KAAA,EAAO,IAAA,EAAM,IAAI,GAAG,OAAO,IAAA;AAAA,MACtC;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAgE;AAClE,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,IAAA,EAAM,IAAI,GAAG,OAAO,KAAA;AAAA,MACvC;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAA+F;AAElG,IAAA,MAAM,MAAA,GAAS,IAAK,IAAA,CAAK,WAAA,EAAoD;AAC7E,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,GAAG,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MACxE;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAAyD,IAAA,EAAa;AAC5E,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,8CAA8C,CAAA;AAAA,MACtE;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,OAAA,CAAQ,KAAA;AACpC,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAAsD;AAChE,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MACrC;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,UAAqB,EAAA,EAAuE;AACxF,IAAA,IAAI,MAAA,GAAS,IAAI,MAAA,EAAqB;AACtC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,MAAA,CAAO,IAAI,IAAA,EAAM,IAAA,EAAM,GAAG,KAAA,EAAO,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAChD;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAkC;AAC9B,IAAA,IAAI,MAAA,uBAAa,GAAA,EAAyB;AAC1C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,QAAA,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,IAAI,GAAG,KAAK,CAAA;AAAA,MAClC;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAI,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,KAAM,GAAG,SAAA,CAAU,IAAI,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7F,MAAA,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA,MAAA,EAAS,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,IAAA,CAAA,GAAS,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,CAAA;AAAA,EACxF;AACJ;;;ACtQO,IAAM,MAAA,GAAN,MAAM,OAAA,SAAwC,aAAA,CAAgE;AAAA,EASjH,YAAY,OAAA,EAAiF;AACzF,IAAA,KAAA,EAAM;AATV,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAA+B,iBAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAA+B,iBAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAA+B,iBAAA,CAAA;AAQnC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAEtC,IAAA,IAAI,mBAAmB,OAAA,EAAQ;AAC3B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,QAAQ,IAAA,EAAM;AACrC,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,CAAK,GAAA,CAAI,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAC/D,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,UAAA,OAAA,CAAQ,IAAI,IAAA,EAAM,IAAI,OAAO,IAAA,EAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,QACvD;AAAA,MACJ;AAAA,IACJ,WACS,OAAA,EAAS;AACd,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,KAAK,OAAA,EAAS;AAC7C,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MACpC;AAAA,IACJ;AAAA,EAUJ;AAAA,EAEA,GAAA,CAAI,IAAA,EAAY,IAAA,EAAY,IAAA,EAAqB;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,IAAK,KAAA;AAAA,EACxD;AAAA,EAEA,GAAA,CAAI,IAAA,EAAY,IAAA,EAAY,IAAA,EAAY,KAAA,EAAqB;AACzD,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,MAAM,IAAI,MAAA,CAAkC,IAAA,CAAK,UAAU,CAAC,CAAA;AACnG,IAAA,IAAI,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA,EAAM,MAAM,IAAI,MAAA,CAAoB,IAAA,CAAK,UAAU,CAAC,CAAA;AAChF,IAAA,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,CAAA;AACpB,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,GAAA,CAAI,IAAA,EAAY,IAAA,EAAY,IAAA,EAA+B;AACvD,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,CAAI,IAAI,GAAG,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA;AAAA,EACnD;AAAA,EAEA,YAAA,CAAa,IAAA,EAAY,IAAA,EAAY,IAAA,EAAY,YAAA,EAA4B;AACzE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,IAAK,YAAA;AAAA,EACzC;AAAA,EAIA,WAAA,CAAY,IAAA,EAAY,IAAA,EAAY,IAAA,EAAY,cAAA,EAA8C;AAC1F,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAChC,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACpC;AAAA,EAKA,MAAA,CAAO,IAAA,EAAY,IAAA,EAAa,IAAA,EAAsB;AAClD,IAAA,IAAI,SAAS,MAAA,EAAW;AACpB,MAAA,IAAI,SAAS,MAAA,EAAW,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AACpD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC/B,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,MAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAC3B,CAAA,MACK;AACD,MAAA,IAAI,SAAS,MAAA,EAAW,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AACpD,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,IAAI,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AAC1C,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,MAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EACpB;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,EAAG;AACnC,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,MAAA,EAAO,EAAG;AAC9B,QAAA,KAAA,IAAS,IAAA,CAAK,IAAA;AAAA,MAClB;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,OAAA,CAAQ,YAA+G,OAAA,EAAqB;AACxI,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,EAAM,IAAA,KAAS,KAAK,OAAA,CAAQ,CAAC,IAAA,EAAM,IAAA,KAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,IAAA,KAAS,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAC,CAAC,CAAA;AAAA,EAC1J;AAAA,EAEA,CAAC,IAAA,GAA6C;AAC1C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA;AACvB,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,IAAA,EAAK;AACzB,UAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACvC;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO;AAChC,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,MAAA,EAAO;AAC3B,QAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAO;AAC5B,UAAA,MAAM,KAAA;AAAA,EACtB;AAAA,EAEA,CAAC,OAAA,GAAuD;AACpD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA;AACvB,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA;AACxB,UAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EAC9C;AAAA,EAEA,SAAA,GAAkC;AAC9B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EAC1B;AAAA,EAEA,WAAA,GAAuB;AACnB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,YAAA,GAA4C;AACxC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAA+C;AAC5C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAK;AACvC,MAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC/B;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,MAAA,EAAO;AACzB,MAAA,MAAM,EAAA;AAAA,EACd;AAAA,EAEA,CAAC,SAAA,GAA2D;AACxD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,EAAE,CAAA,IAAK,KAAK,OAAA,EAAQ;AAC9C,MAAA,MAAM,CAAC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,GAAG,EAAE,CAAA;AAAA,EACrC;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAiD;AAC9D,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,KAAA,GAAyC;AACrC,IAAA,OAAO,IAAI,QAAO,IAAI,CAAA;AAAA,EAC1B;AAAA,EAEA,KAAA,CAAM,OAAwC,gBAAA,EAA0G;AACpJ,IAAA,KAAA,MAAW,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACrD,MAAA,IAAI,KAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAI,KAAK,gBAAA,EAAkB;AAChD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,iBAAiB,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAI,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MACrG,CAAA,MACK;AACD,QAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MACpC;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAA4E;AAC7E,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,IAAI,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,GAAG,OAAO,IAAA;AAAA,QAC5C;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAA4E;AAC9E,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,IAAI,CAAC,EAAA,CAAG,KAAA,EAAO,MAAM,IAAA,EAAM,IAAI,GAAG,OAAO,KAAA;AAAA,QAC7C;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAAkH;AAErH,IAAA,MAAM,MAAA,GAAS,IAAK,IAAA,CAAK,WAAA,EAA2D;AACpF,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,QACpF;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAU,IAAqE,IAAA,EAAa;AACxF,IAAA,IAAI,QAAA,GAAW,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,+CAA+C,CAAA;AAAA,MACvE;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,OAAA,CAAQ,KAAA;AAC1C,MAAA,GAAA,GAAM,EAAA,CAAG,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAc,EAAA,EAAkE;AAC5E,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,MAAA,CAAO,KAAK,EAAA,CAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,QAC3C;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,UAAqB,EAAA,EAA0F;AAC3G,IAAA,IAAI,MAAA,GAAS,IAAI,OAAA,EAA4B;AAC7C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,MAAA,CAAO,GAAA,CAAI,MAAM,IAAA,EAAM,IAAA,EAAM,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,QAC5D;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAwC;AACpC,IAAA,IAAI,MAAA,uBAAa,GAAA,EAA+B;AAChD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA,EAAM;AAC9B,UAAA,MAAA,CAAO,IAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,GAAG,KAAK,CAAA;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,IAAA,EAAM;AAClC,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAI,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,KAAM,GAAG,SAAA,CAAU,IAAI,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7F,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,IAAI,CAAC,CAAA,MAAA,EAAS,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,MAC3E;AAAA,IACJ;AACA,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,IAAA,EAAO,KAAK,IAAI,CAAA,IAAA,CAAA,GAAS,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EACnG;AACJ;;;ACvSO,IAAM,QAAA,GAAN,MAAM,SAAA,SAAwB,aAAA,CAAqD;AAAA,EAOtF,eAAe,IAAA,EAAiB;AAC5B,IAAA,KAAA,EAAM;AAPV,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AASJ,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA;AAC9B,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,WAAW,CAAA,GAC7B,IAAA,CAAK,KAAI,GACV,iBAAA;AAGN,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AAEtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,GAAA,CAAI,OAAO,CAAA;AAAA,EAU/B;AAAA,EAKA,OAAO,WAAkB,GAAA,EAAyC;AAC9D,IAAA,OAAO,GAAA,GAAM,IAAI,SAAA,CAAgB,GAAA,EAAK,WAAW,CAAA,GAAI,IAAI,UAAgB,WAAW,CAAA;AAAA,EACxF;AAAA,EAEA,IAAI,KAAA,EAAuB;AACvB,IAAA,IAAI,KAAK,MAAA,KAAW,iBAAA;AAChB,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAC9B,IAAA,OAAO,KAAK,IAAA,CAAK,CAAA,CAAA,KAAK,KAAK,MAAA,CAAO,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,KAAA,EAAqB;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACf,MAAA,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AACvB,IAAA,OAAO,KAAA;AAAA,EACX;AAAA;AAAA,EAGA,GAAA,CAAI,KAAY,KAAA,EAAoB;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AACvB,MAAA,MAAM,IAAI,UAAU,wCAAwC,CAAA;AAChE,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAClB;AAAA;AAAA,EAGA,IAAI,GAAA,EAA+B;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,GAAA,GAAM,MAAA;AAAA,EACjC;AAAA;AAAA,EAGA,YAAA,CAAa,KAAY,YAAA,EAA4B;AACjD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,IAAK,YAAA;AAAA,EAC5B;AAAA,EAMA,WAAA,CAAY,KAAY,cAAA,EAA8C;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAChB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAc,CAAA,GACjC,gBAAe,GACf,cAAA;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,KAAK,CAAA;AACnB,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,EACvB;AAAA,EAEA,OAAO,KAAA,EAAuB;AAC1B,IAAA,IAAI,KAAK,MAAA,KAAW,iBAAA,IAAqB,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AACjC,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,MAAA,EAAO,EAAG;AAC3B,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,KAAK,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EACpB;AAAA,EAEA,IAAI,IAAA,GAAe;AACf,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACrB;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,CAAA;AAAA,EACzB;AAAA,EAEA,OAAA,CAAQ,YAA0D,OAAA,EAAqB;AACnF,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,KAAA,KAAS,UAAA,CAAW,KAAK,OAAA,EAAS,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,EACpE;AAAA,EAEA,CAAC,IAAA,GAAgC;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,EAAK;AAAA,EAC1B;AAAA,EAEA,CAAC,MAAA,GAAkC;AAC/B,IAAA,OAAO,IAAA,CAAK,KAAK,MAAA,EAAO;AAAA,EAC5B;AAAA,EAEA,CAAC,OAAA,GAA4C;AACzC,IAAA,OAAO,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,EAC7B;AAAA,EAEA,CAAC,MAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,IAAA,EAAK,EAAG;AAC3B,MAAA,MAAM,CAAC,GAAG,CAAA;AAAA,IACd;AAAA,EACJ;AAAA,EAEA,CAAC,QAAA,GAAoC;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,MAAA,EAAO,EAAG;AAC5B,MAAA,MAAM,EAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,SAAA,GAAgD;AAC7C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,EAAE,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACpC,MAAA,MAAM,CAAC,CAAC,GAAG,CAAA,EAAG,EAAE,CAAA;AAAA,IACpB;AAAA,EACJ;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAA6B;AAC1C,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACvB;AAAA,EAEA,KAAA,GAAyB;AACrB,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAgB;AACnC,IAAA,KAAA,MAAW,KAAK,IAAA,CAAK,MAAA,EAAO,EAAG,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3C,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,MAAM,KAAA,EAA8B;AAChC,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,EAAO,EAAG;AAChC,MAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAK,EAAA,EAAwC;AACzC,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,EAAA,CAAG,KAAK,CAAA,EAAG,OAAO,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,EAAA,EAAwC;AAC1C,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,CAAC,EAAA,CAAG,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,IAC3B;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAIA,OAAO,SAAA,EAA6D;AAChE,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAgB;AACnC,IAAA,KAAA,MAAW,SAAS,IAAA,CAAK,IAAA;AACrB,MAAA,IAAI,UAAU,KAAA,EAAO,IAAI,CAAA,EAAG,MAAA,CAAO,IAAI,KAAK,CAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAIA,MAAA,CAAkB,IAAiC,IAAA,EAAa;AAC5D,IAAA,IAAI,QAAA,GAAW,KAAK,MAAA,EAAO;AAC3B,IAAA,IAAI,KAAA,GAAQ,SAAS,IAAA,EAAK;AAE1B,IAAA,IAAI,MAAM,IAAA,EAAM;AACZ,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,UAAU,iDAAiD,CAAA;AAAA,MACzE;AACA,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAEtB,MAAA,GAAA,GAAM,KAAA,CAAM,KAAA;AACZ,MAAA,KAAA,GAAQ,SAAS,IAAA,EAAK;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,GAAA,GAAM,IAAA;AACN,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,KAAA,IAAS,OAAA,GAAU,OAAO,CAAC,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA,CAAS,MAAK,EAAG;AAChE,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,MAAA,GAAA,GAAM,EAAA,CAAG,KAAK,KAAK,CAAA;AAAA,IACvB;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,UAAqB,EAAA,EAAsC;AACvD,IAAA,IAAI,MAAA,GAAS,IAAI,SAAA,EAAY;AAC7B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,IAAA,EAAM;AAC3B,MAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,WAAsB,EAAA,EAA8B;AAChD,IAAA,IAAI,SAAc,EAAC;AACnB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,MAAA,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IACzB;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,IAAe,EAAA,EAAsC;AACjD,IAAA,IAAI,MAAA,GAAS,IAAI,SAAA,EAAY;AAC7B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,MAAA,MAAA,CAAO,GAAA,CAAI,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAoB;AAChB,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC5B;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC9B;AACJ;;;ACzPO,IAAM,cAAA,GAAN,cAAiD,aAAA,CAAc;AAAA,EAClE,YAA6B,IAAA,EAA2B;AACpD,IAAA,KAAA,EAAM;AADmB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAS7B;AAAA,EAEA,OAAA,GAAmB;AACf,IAAA,OAAO,IAAA,CAAK,KAAK,OAAA,EAAQ;AAAA,EAC7B;AAAA,EAEA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,KAAK,KAAA,IAAQ;AAAA,EACtB;AAAA,EAEA,OAAO,YAAA,EAA4B;AAC/B,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAI,CAAC,GAAG,IAAA,EAAM,GAAA,GAAM,CAAC,GAAG,KAAK,KAAK,CAAA,GAAI,CAAC,KAAK,CAAC,CAAiB,CAAA;AAC5E,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,UAAU,YAAA,EAAkC;AACxC,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AACjC,IAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAA,KAAM,IAAI,OAAO,KAAA;AACrB,IAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AACf,IAAA,IAAI,IAAI,MAAA,KAAW,CAAA,OAAQ,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAC9C,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,UAAU,IAAA,EAAc;AACpB,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,KAAK,EAAC;AAAA,EACtC;AAAA,EAEA,CAAC,WAAW,IAAA,EAA8B;AACtC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,CAAC,MAAA,GAA8B;AAC3B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,EAAG;AAC5B,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,IAC9B;AAAA,EACJ;AAAA,EAEA,CAAC,IAAA,GAA4B;AACzB,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,EAAG;AACnC,MAAA,MAAM,IAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,CAAC,OAAA,GAAsC;AACnC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,EAAG;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAC/B,MAAA,IAAI,IAAI,MAAA,GAAS,CAAA,EAAG,MAAM,CAAC,MAAM,GAAG,CAAA;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAgC;AAC5C,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,EAAG;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAC/B,MAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA;AACvD,MAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA,CAAU,GAAG,CAAA,GAAI,KAAA;AACxD,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,OAAA,CAAQ,WAAW,CAAA,GAAI,CAAA,iBAAA,CAAA,GAAsB,mBAAmB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC7F;AACJ;AAeO,SAAS,QAAgC,IAAA,EAAyD;AACrG,EAAA,OAAO,IAAI,eAAe,IAAI,CAAA;AAClC;;;ACrGA,IAAM,iBAAN,MAAwB;AAAA,EAIpB,YAAmB,KAAA,EAAU;AAAV,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAHnB,IAAA,aAAA,CAAA,IAAA,EAAO,MAAA,EAAiC,IAAA,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAO,MAAA,EAAiC,IAAA,CAAA;AAAA,EAET;AACnC,CAAA;AAEO,IAAM,UAAA,GAAN,MAAM,WAAA,SAAsB,aAAA,CAAqC;AAAA,EASpE,eAAe,IAAA,EAAiB;AAC5B,IAAA,KAAA,EAAM;AATV,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAAkC,IAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAAkC,IAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAAQ,CAAA,CAAA;AAChB,IAAA,aAAA,CAAA,IAAA,EAAiB,QAAA,CAAA;AASb,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA;AAC9B,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,WAAW,CAAA,GAC7B,IAAA,CAAK,KAAI,GACV,iBAAA;AAGN,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AAEtB,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACrB,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA,EAKA,OAAO,WAAc,OAAA,EAAsD;AACvE,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,OAAO,IAAI,WAAA,CAAc,OAAA,EAAS,WAAW,CAAA;AAAA,IACjD,CAAA,MAAO;AACH,MAAA,OAAO,IAAI,YAAc,WAAW,CAAA;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EAChB;AAAA,EAEA,IAAI,KAAA,GAAuB;AACvB,IAAA,OAAO,KAAK,KAAA,EAAO,KAAA;AAAA,EACvB;AAAA,EAEA,IAAI,IAAA,GAAsB;AACtB,IAAA,OAAO,KAAK,KAAA,EAAO,KAAA;AAAA,EACvB;AAAA;AAAA,EAGA,KAAK,KAAA,EAAgB;AACjB,IAAA,MAAM,IAAA,GAAO,IAAI,cAAA,CAAe,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,GAAQ,IAAA;AAAA,IAC9B,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AACjB,MAAA,IAAA,CAAK,MAAM,IAAA,GAAO,IAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,IACjB;AACA,IAAA,IAAA,CAAK,KAAA,EAAA;AAAA,EACT;AAAA;AAAA,EAGA,GAAA,GAAqB;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,MAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA;AACzB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA;AACxB,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,cACxB,KAAA,GAAQ,IAAA;AAClB,IAAA,IAAA,CAAK,KAAA,EAAA;AACL,IAAA,OAAO,KAAA;AAAA,EACX;AAAA;AAAA,EAGA,QAAQ,KAAA,EAAgB;AACpB,IAAA,MAAM,IAAA,GAAO,IAAI,cAAA,CAAe,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACb,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,GAAQ,IAAA;AAAA,IAC9B,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AACjB,MAAA,IAAA,CAAK,MAAM,IAAA,GAAO,IAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,IACjB;AACA,IAAA,IAAA,CAAK,KAAA,EAAA;AAAA,EACT;AAAA;AAAA,EAGA,KAAA,GAAuB;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,MAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA;AACzB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA;AACxB,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,cACxB,KAAA,GAAQ,IAAA;AAClB,IAAA,IAAA,CAAK,KAAA,EAAA;AACL,IAAA,OAAO,KAAA;AAAA,EACX;AAAA;AAAA,EAGA,IAAI,KAAA,EAAmB;AACnB,IAAA,KAAA,IAAS,OAAO,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,IAAA,GAAO,KAAK,IAAA,EAAM;AAChD,MAAA,IAAI,KAAK,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAK,GAAG,OAAO,IAAA;AAAA,IAC/C;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA;AAAA,EAGA,IAAI,KAAA,EAA8B;AAC9B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAG,KAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,GAAA,CAAI,OAAe,KAAA,EAAmB;AAClC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA,EAGA,QAAA,CAAS,OAAe,KAAA,EAAmB;AACvC,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,IAAA,CAAK,OAAO,OAAO,KAAA;AAC5C,IAAA,IAAI,UAAU,CAAA,EAAG;AAAE,MAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAG,MAAA,OAAO,IAAA;AAAA,IAAM;AACrD,IAAA,IAAI,KAAA,KAAU,KAAK,KAAA,EAAO;AAAE,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAG,MAAA,OAAO,IAAA;AAAA,IAAM;AAE3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAClC,IAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,IAAA,MAAM,WAAW,QAAA,CAAS,IAAA;AAE1B,IAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,KAAK,CAAA;AACxC,IAAA,OAAA,CAAQ,IAAA,GAAO,QAAA;AACf,IAAA,OAAA,CAAQ,IAAA,GAAO,QAAA;AACf,IAAA,IAAI,QAAA,WAAmB,IAAA,GAAO,OAAA;AAC9B,IAAA,QAAA,CAAS,IAAA,GAAO,OAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAA;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA,EAGA,SAAS,KAAA,EAA8B;AACnC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAElB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,SAChC,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAEvB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,SAChC,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAEvB,IAAA,IAAA,CAAK,KAAA,EAAA;AACL,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EAChB;AAAA;AAAA,EAGA,OAAO,KAAA,EAAmB;AACtB,IAAA,KAAA,IAAS,OAAO,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,IAAA,GAAO,KAAK,IAAA,EAAM;AAChD,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA,EAAG;AAChC,QAAA,IAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,aAChC,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAEvB,QAAA,IAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,aAChC,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAEvB,QAAA,IAAA,CAAK,KAAA,EAAA;AACL,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA;AAAA,EAGA,OAAA,GAAe;AACX,IAAA,MAAM,SAAc,EAAC;AACrB,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACnC,IAAA,OAAO,MAAA;AAAA,EACX;AAAA;AAAA,EAGA,UAAU,MAAA,EAA2B;AACjC,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,KAAA,GAAc;AACV,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,GAAQ,IAAA;AAC1B,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EACjB;AAAA;AAAA,EAGA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAiB;AAC9B,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACvB;AAAA,EAEA,CAAE,IAAA,GAAiC;AAC/B,IAAA,KAAA,IAAS,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,KAAA,EAAO,EAAA,EAAA;AAC9B,MAAA,MAAM,EAAA;AAAA,EACd;AAAA,EAEA,CAAE,MAAA,GAA8B;AAC5B,IAAA,IAAI,OAAO,IAAA,CAAK,KAAA;AAChB,IAAA,OAAO,IAAA,EAAM;AACT,MAAA,MAAM,IAAA,CAAK,KAAA;AACX,MAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,IAChB;AAAA,EACJ;AAAA,EAEA,CAAE,OAAA,GAAyC;AACvC,IAAA,IAAI,OAAO,IAAA,CAAK,KAAA;AAChB,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,OAAO,IAAA,EAAM;AACT,MAAA,MAAM,CAAC,EAAA,EAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACvB,MAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,IAChB;AAAA,EACJ;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,IAAA,CAAK,KAAA,KAAU,CAAA,GAChB,CAAA,gBAAA,CAAA,GACA,CAAA,WAAA,EAAc,IAAA,CAAK,KAAK,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EACjE;AAAA;AAAA,EAGQ,OAAO,KAAA,EAAyC;AACpD,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,IAAA,CAAK,OAAO,OAAO,IAAA;AAC7C,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,GAAQ,CAAA,EAAG;AACxB,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA;AACZ,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,SAAY,IAAA,CAAM,IAAA;AAAA,IACjD,CAAA,MAAO;AACH,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA;AACZ,MAAA,KAAA,IAAS,CAAA,GAAI,KAAK,KAAA,GAAQ,CAAA,EAAG,IAAI,KAAA,EAAO,CAAA,EAAA,SAAY,IAAA,CAAM,IAAA;AAAA,IAC9D;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,KAAA,GAAuB;AACnB,IAAA,OAAO,IAAI,YAAW,IAAI,CAAA;AAAA,EAC9B;AACJ;;;ACxPO,IAAM,YAAA,GAAN,MAAM,YAAA,CAAyB;AAAA,EAA/B,WAAA,GAAA;AACH,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAS,IAAI,MAAA,CAAkB,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,CAAC,CAAA,CAAA;AAAA,EAAA;AAAA,EAExD,MAAM,KAAA,EAAgB;AAClB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AAC9C,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,EACpC;AAAA,EAEA,gBAAgB,KAAA,EAAkB;AAC9B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA;AAAA,EACrC;AAAA,EAEA,kBAAkB,KAAA,EAAmB;AACjC,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA,GAAI,CAAA;AAAA,EACzC;AAAA,EAQA,OAAO,MAAM,KAAA,EAAkB;AAC3B,IAAA,IAAA,CAAK,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,gBAAgB,KAAA,EAAoB;AACvC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,KAAK,CAAA;AAAA,EAC9C;AAAA,EAEA,OAAO,kBAAkB,KAAA,EAAqB;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,KAAK,CAAA;AAAA,EAChD;AACJ,CAAA;AAAA;AAAA;AAAA;AAbI,aAAA,CApBS,YAAA,EAoBM,UAAA,EAAW,IAAI,YAAA,EAAiB,CAAA;AApB5C,IAAM,WAAA,GAAN;;;ACOA,SAAS,UAAA,GAAqB;AACjC,EAAA,OAAO,yBAAA;AACX","file":"index.js","sourcesContent":["import { Guard } from \"..\";\r\nimport { EnumObject } from \"../utils/enum\";\r\nimport { stringify } from \"../utils/str\";\r\n\r\nconst fmt = stringify;\r\n\r\nexport type ErrorConstructor = new (msg: string) => Error;\r\n\r\nlet errorConstructor: ErrorConstructor = Error;\r\n\r\nexport function setErrorClass(errorClass?: ErrorConstructor) {\r\n errorConstructor = errorClass ?? Error;\r\n}\r\n\r\nfunction _fail(...msgs: (string | undefined)[]): never {\r\n let msg = msgs.join(\", \");\r\n throw new errorConstructor(\"Assertion Failed!\" + (msg === \"\" ? \"\" : (\" \" + msg)));\r\n}\r\n\r\nexport function assert<T>(condition: T, msg?: string) {\r\n if (!condition) {\r\n _fail(msg);\r\n }\r\n}\r\n\r\nexport function require<T>(val: T | null | undefined, msg?: string): T {\r\n if (val == null) { // catches both null and undefined\r\n _fail(`Expected ${fmt(val)} not to be nullish`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function requireDefined<T>(val: T | undefined, msg?: string): T {\r\n if (val === undefined) {\r\n _fail(`Expected ${fmt(val)} not to be undefined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function requireElement<E>(index: unknown, array: ReadonlyArray<E>, msg?: string): E {\r\n if (!Guard.isIndex(index, array))\r\n _fail(`Expected ${index} to be index for array ${fmt(array)}`, msg);\r\n return array[index];\r\n}\r\n\r\nexport function fail(msg?: string): never {\r\n _fail(msg);\r\n}\r\n\r\nexport function isStrictEqual<T = any>(val1: T, val2: unknown, msg?: string): T {\r\n if (!Guard.isStrictEqual(val1, val2))\r\n _fail(`Expected ${fmt(val1)} to ne strict equal to ${val2}`, msg);\r\n return val1;\r\n}\r\n\r\nexport function isDeepEqual<T = any>(val1: T, val2: unknown, msg?: string): T {\r\n if (!Guard.isDeepEqual(val1, val2))\r\n _fail(`Expected ${fmt(val1)} to deep equal with ${fmt(val2)}`, msg);\r\n return val1;\r\n}\r\n\r\nexport function isUndefined(val: unknown, msg?: string): undefined {\r\n if (!Guard.isUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNull(val: unknown, msg?: string): null {\r\n if (!Guard.isNull(val))\r\n _fail(`Expected ${fmt(val)} to be null`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNullish(val: unknown, msg?: string): null | undefined {\r\n if (!Guard.isNullish(val))\r\n _fail(`Expected ${fmt(val)} to be null or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isDefined<T>(val: T, msg?: string): Exclude<T, undefined> {\r\n if (!Guard.isDefined(val)) {\r\n _fail(`Expected ${fmt(val)} to be defined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function isNonNull<T>(val: T, msg?: string): Exclude<T, null> {\r\n if (!Guard.isNonNull(val)) {\r\n _fail(`Expected ${fmt(val)} to be defined`, msg);\r\n }\r\n return val;\r\n}\r\n\r\nexport function isObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isObject(val))\r\n _fail(`Expected ${fmt(val)} to be object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isEmptyObject(val))\r\n _fail(`Expected ${fmt(val)} to be empty object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPlainObject(val: unknown, msg?: string): Record<string, unknown> {\r\n if (!Guard.isPlainObject(val))\r\n _fail(`Expected ${fmt(val)} to be plain object`, msg);\r\n return val;\r\n}\r\n\r\nexport function isObjectOrUndefined(val: unknown, msg?: string): Record<string, unknown> | undefined {\r\n if (!Guard.isObjectOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be object or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTypedObject<T extends object>(val: unknown, keys: (keyof T)[], msg?: string): Guard.HasProps<T> {\r\n if (!Guard.isTypedObject(val, keys))\r\n _fail(`Expected ${fmt(val)} to have keys ${fmt(keys)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isArray<T>(val: unknown, msg?: string): T[] {\r\n if (!Guard.isArray(val))\r\n _fail(`Expected ${fmt(val)} to be array`, msg);\r\n return val as T[];\r\n}\r\n\r\nexport function isArrayOrUndefined(val: unknown, msg?: string): val is unknown[] | undefined {\r\n if (!Guard.isArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be array or undefined`, msg);\r\n return true;\r\n}\r\n\r\nexport function isEmptyArray<T = any>(val: T[], msg?: string): asserts val is T[] {\r\n if (!Guard.isEmptyArray(val))\r\n _fail(`Expected ${fmt(val)} to be empty array`, msg);\r\n}\r\n\r\nexport function isNonEmptyArray<T = any>(val: T[], msg?: string): asserts val is T[] {\r\n if (!Guard.isNonEmptyArray(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty array`, msg);\r\n}\r\n\r\nexport function isEmptyArrayOrUndefined<T = any>(val: unknown, msg?: string): asserts val is T[] | undefined {\r\n if (!Guard.isEmptyArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be empty array or undefined`, msg);\r\n}\r\n\r\nexport function isNonEmptyArrayOrUndefined<T = any>(val: unknown, msg?: string): asserts val is T[] | undefined {\r\n if (!Guard.isNonEmptyArrayOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty array or undefined`, msg);\r\n}\r\n\r\nexport function isString(val: unknown, msg?: string): string {\r\n if (!Guard.isString(val))\r\n _fail(`Expected ${fmt(val)} to be string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyString(val: unknown, msg?: string): \"\" {\r\n if (!Guard.isEmptyString(val))\r\n _fail(`Expected ${fmt(val)} to be empty string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonEmptyString(val: unknown, msg?: string): string {\r\n if (!Guard.isNonEmptyString(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isStringOrUndefined(val: unknown, msg?: string): string | undefined {\r\n if (!Guard.isStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEmptyStringOrUndefined(val: unknown, msg?: string): \"\" | undefined {\r\n if (!Guard.isEmptyStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be empty string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonEmptyStringOrUndefined(val: unknown, msg?: string): string | undefined {\r\n if (!Guard.isNonEmptyStringOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be non-empty string or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBoolean(val: unknown, msg?: string): boolean {\r\n if (!Guard.isBoolean(val))\r\n _fail(`Expected ${fmt(val)} to be boolean`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBooleanOrUndefined(val: unknown, msg?: string): boolean | undefined {\r\n if (!Guard.isBooleanOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be boolean or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTrue(val: unknown, msg?: string): true {\r\n if (!Guard.isTrue(val))\r\n _fail(`Expected ${fmt(val)} to be true`, msg);\r\n return val;\r\n}\r\n\r\nexport function isTrueOrUndefined(val: unknown, msg?: string): true | undefined {\r\n if (!Guard.isTrueOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be true or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFalse(val: unknown, msg?: string): false {\r\n if (!Guard.isFalse(val))\r\n _fail(`Expected ${fmt(val)} to be false`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFalseOrUndefined(val: unknown, msg?: string): false | undefined {\r\n if (!Guard.isFalseOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be false or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFunction<T extends (...args: any[]) => any>(val: unknown, msg?: string): T {\r\n if (!Guard.isFunction(val))\r\n _fail(`Expected ${fmt(val)} to be function`, msg);\r\n return val as T;\r\n}\r\n\r\nexport function isFunctionOrUndefined<T extends (...args: any[]) => any>(val: unknown, msg?: string): T | undefined {\r\n if (!Guard.isFunctionOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be function or undefined`, msg);\r\n return val as T | undefined;\r\n}\r\n\r\nexport function isEnumValue<E extends EnumObject>(val: unknown, enumObject: E, msg?: string): E[keyof E] {\r\n if (!Guard.isEnumValue(val, enumObject))\r\n _fail(`Expected ${fmt(val)} to be enum val`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEnumValueOrUndefined<E extends EnumObject>(val: unknown, enumObject: E, msg?: string): E[keyof E] | undefined {\r\n if (!Guard.isEnumValueOrUndefined(val, enumObject))\r\n _fail(`Expected ${fmt(val)} to be enum val or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumericString(val: unknown, msg?: string): string {\r\n if (!Guard.isNumericString(val))\r\n _fail(`Expected ${fmt(val)} to be numeric string`, msg);\r\n return val;\r\n}\r\n\r\nexport function isBigInt(val: unknown, msg?: string): BigInt {\r\n if (!Guard.isBigInt(val))\r\n _fail(`Expected ${fmt(val)} to be BigInt`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumber(val: unknown, msg?: string): number {\r\n if (!Guard.isNumber(val))\r\n _fail(`Expected ${fmt(val)} to be number`, msg);\r\n return val;\r\n}\r\n\r\nexport function isSafeNumber(val: unknown, msg?: string): number {\r\n if (!Guard.isSafeNumber(val))\r\n _fail(`Expected ${fmt(val)} to be safe number`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberOrUndefined(val: unknown, msg?: string): number | undefined {\r\n if (!Guard.isNumberOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be number or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberEq(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberEq(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number equal to ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberGt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberGt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number > ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberGte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberGte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number >= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberLt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberLt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number < ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberLte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isNumberLte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be number <= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberBetween(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isNumberBetween(val, min, max))\r\n _fail(`Expected number ${fmt(min)} <= ${fmt(val)} <= ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNumberBetweenExclusive(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isNumberBetweenExclusive(val, min, max))\r\n _fail(`Expected number ${fmt(min)} < ${fmt(val)} < ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFinite(val: unknown, msg?: string): number {\r\n if (!Guard.isFinite(val))\r\n _fail(`Expected ${fmt(val)} to be finite`, msg);\r\n return val;\r\n}\r\n\r\nexport function isFloat(val: unknown, msg?: string): number {\r\n if (!Guard.isFloat(val))\r\n _fail(`Expected ${fmt(val)} to be float`, msg);\r\n return val;\r\n}\r\n\r\nexport function isInteger(val: unknown, msg?: string): number {\r\n if (!Guard.isInteger(val))\r\n _fail(`Expected ${fmt(val)} to be integer`, msg);\r\n return val;\r\n}\r\n\r\nexport function isSafeInteger(val: unknown, msg?: string): number {\r\n if (!Guard.isSafeInteger(val))\r\n _fail(`Expected ${fmt(val)} to be safe integer`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerOrUndefined(val: unknown, msg?: string): number | undefined {\r\n if (!Guard.isIntegerOrUndefined(val))\r\n _fail(`Expected ${fmt(val)} to be integer or undefined`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerEq(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerEq(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer equal to ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerGt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerGt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer > ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerGte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerGte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer >= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerLt(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerLt(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer < ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerLte(val: unknown, ref: unknown, msg?: string): number {\r\n if (!Guard.isIntegerLte(val, ref))\r\n _fail(`Expected ${fmt(val)} to be integer <= ${fmt(ref)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerBetween(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isIntegerBetween(val, min, max))\r\n _fail(`Expected integer ${fmt(min)} <= ${fmt(val)} <= ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIntegerBetweenExclusive(val: unknown, min: unknown, max: unknown, msg?: string): number {\r\n if (!Guard.isIntegerBetweenExclusive(val, min, max))\r\n _fail(`Expected integer ${fmt(min)} < ${fmt(val)} < ${fmt(max)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNaNValue(val: unknown, msg?: string): number {\r\n if (!Guard.isNaNValue(val))\r\n _fail(`Expected ${fmt(val)} to be NaN`, msg);\r\n return NaN;\r\n}\r\n\r\nexport function isInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be +-Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPosInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isPosInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be +Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNegInfinity(val: unknown, msg?: string): number {\r\n if (!Guard.isNegInfinity(val))\r\n _fail(`Expected ${fmt(val)} to be -Infinity`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPos(val: unknown, msg?: string): number {\r\n if (!Guard.isPos(val))\r\n _fail(`Expected ${fmt(val)} to be positive (> 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNeg(val: unknown, msg?: string): number {\r\n if (!Guard.isNeg(val))\r\n _fail(`Expected ${fmt(val)} to be negative (< 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonPos(val: unknown, msg?: string): number {\r\n if (!Guard.isNonPos(val))\r\n _fail(`Expected ${fmt(val)} to be non-positive (<= 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNonNeg(val: unknown, msg?: string): number {\r\n if (!Guard.isNonNeg(val))\r\n _fail(`Expected ${fmt(val)} to be non-negative (>= 0)`, msg);\r\n return val;\r\n}\r\n\r\nexport function isZero(val: unknown, msg?: string): number {\r\n if (!Guard.isZero(val))\r\n _fail(`Expected ${fmt(val)} to be 0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPosZero(val: unknown, msg?: string): number {\r\n if (!Guard.isPosZero(val))\r\n _fail(`Expected ${fmt(val)} to be +0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isNegZero(val: unknown, msg?: string): number {\r\n if (!Guard.isNegZero(val))\r\n _fail(`Expected ${fmt(val)} to be -0`, msg);\r\n return val;\r\n}\r\n\r\nexport function isOdd(val: unknown, msg?: string): number {\r\n if (!Guard.isOdd(val))\r\n _fail(`Expected ${fmt(val)} to odd`, msg);\r\n return val;\r\n}\r\n\r\nexport function isEven(val: unknown, msg?: string): number {\r\n if (!Guard.isEven(val))\r\n _fail(`Expected ${fmt(val)} to even`, msg);\r\n return val;\r\n}\r\n\r\nexport function isMultipleOf(val: unknown, base: unknown, msg?: string): number {\r\n if (!Guard.isMultipleOf(val, base))\r\n _fail(`Expected ${fmt(val)} to be divisble bu ${fmt(base)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isPowerOfTwo(val: unknown, msg?: string): number {\r\n if (!Guard.isPowerOfTwo(val))\r\n _fail(`Expected ${fmt(val)} to be power of two`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIncluded<T>(val: unknown, arr: ReadonlyArray<T> | Set<T>, msg?: string): T {\r\n if (!Guard.isIncluded(val, arr))\r\n _fail(`Expected ${fmt(val)} to be included in ${fmt(arr)}`, msg);\r\n return val;\r\n}\r\n\r\nexport function isIndex<T>(index: unknown, msg?: string): number;\r\nexport function isIndex<T>(index: unknown, arr: ReadonlyArray<T>, msg?: string): number;\r\nexport function isIndex<T>(...args: unknown[]): number {\r\n const index = args.shift() as unknown;\r\n const msg = Guard.isString(args[args.length - 1]) ? (args.pop() as string) : undefined;\r\n const arr = (Guard.isArray(args[0]) ? args.shift() : undefined) as ReadonlyArray<T> | undefined;\r\n if (!Guard.isIndex(index, arr)) {\r\n if (arr === undefined)\r\n _fail(`Expected ${index} to be index`, msg);\r\n else\r\n _fail(`Expected ${index} to be index for ${fmt(arr)}`, msg);\r\n }\r\n return index;\r\n}\r\n\r\nexport function doesThrow(throwTestFn: () => void, msg?: string): true {\r\n if (!Guard.doesThrow(throwTestFn))\r\n _fail(`Expected to throw`, msg);\r\n return true;\r\n}\r\n\r\nexport function doesNotThrow(throwTestFn: () => void, msg?: string): true {\r\n if (!Guard.doesNotThrow(throwTestFn))\r\n _fail(`Expected to throw`, msg);\r\n return true;\r\n}\r\n","import { getCtorName } from \"../obj\";\r\nimport { isString, isArray, isInteger, isNaNValue, isFinite } from \"../../guard\";\r\nexport { isString }\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * Count number of char in string.\r\n * @param str\r\n * @param ch - must be single char.\r\n * @returns number of chars in string.\r\n */\r\nexport function charCount(str: string, ch: string): number {\r\n if (ch.length !== 1 || str.length === 0) return 0;\r\n\r\n let count = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n if (str[i] === ch) count++;\r\n }\r\n\r\n return count;\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n\r\nexport function stringify(value: any, maxDepth = 5, seen = new WeakSet()): string {\r\n // --- Primitive & simple values ---\r\n if (value === null) return \"null\";\r\n if (value === undefined) return \"undefined\";\r\n\r\n const t = typeof value;\r\n switch (t) {\r\n case \"boolean\": return value ? \"true\" : \"false\";\r\n case \"number\":\r\n if (isNaNValue(value)) return \"NaN\";\r\n if (!isFinite(value))\r\n return value < 0 ? \"-Infinity\" : \"Infinity\";\r\n return value.toString();\r\n case \"bigint\": return `${value}n`;\r\n case \"string\": return `\"${value}\"`;\r\n case \"symbol\": return value.description\r\n ? `Symbol(${value.description})`\r\n : \"Symbol()\";\r\n case \"function\":\r\n return `[Function${value.name ? ` ${value.name}` : \"\"}]`;\r\n }\r\n\r\n // Prevent infinite recursion\r\n if (seen.has(value))\r\n return \"[Circular]\";\r\n if (maxDepth <= 0)\r\n return \"[Depth limit]\";\r\n\r\n maxDepth--;\r\n\r\n // Mark as seen before descending\r\n seen.add(value);\r\n\r\n const strfy = (v: any): string => stringify(v, maxDepth, seen);\r\n\r\n // --- Containers ---\r\n if (isArray(value)) {\r\n const inner = value.map(v => strfy(v)).join(\", \");\r\n return inner.length === 0 ? \"[ ]\" : `[ ${inner} ]`;\r\n }\r\n\r\n // --- Typed arrays ---\r\n if (ArrayBuffer.isView(value)) {\r\n // covers all TypedArrays + DataView\r\n if (value instanceof DataView)\r\n return `DataView(${value.byteLength})`;\r\n const inner = Array.from(value as any).map(v => strfy(v)).join(\", \");\r\n return `${value.constructor.name}[ ${inner} ]`;\r\n }\r\n\r\n // --- ArrayBuffer ---\r\n if (value instanceof ArrayBuffer)\r\n return `ArrayBuffer(${value.byteLength})`;\r\n\r\n // --- Map / Set ---\r\n if (value instanceof Map) {\r\n const entries = Array.from(value.entries())\r\n .map(([k, v]) => `${strfy(k)} => ${strfy(v)}`)\r\n .join(\", \");\r\n return entries.length === 0\r\n ? `Map(${value.size}){ }`\r\n : `Map(${value.size}){ ${entries} }`;\r\n }\r\n\r\n if (value instanceof Set) {\r\n const entries = Array.from(value.values())\r\n .map(v => strfy(v))\r\n .join(\", \");\r\n return entries.length === 0\r\n ? `Set(${value.size}){ }`\r\n : `Set(${value.size}){ ${entries} }`;\r\n }\r\n\r\n if (value instanceof WeakMap)\r\n return \"WeakMap{ ? }\";\r\n\r\n if (value instanceof WeakSet)\r\n return \"WeakSet{ ? }\";\r\n\r\n // --- Built-ins ---\r\n if (value instanceof Date)\r\n return `Date(\"${value.toISOString()}\")`;\r\n\r\n if (value instanceof RegExp)\r\n return value.toString();\r\n\r\n if (value instanceof Error)\r\n return `${value.name}(\"${value.message}\")`;\r\n\r\n if (value instanceof Promise)\r\n return \"Promise{ ? }\";\r\n\r\n if (value instanceof URL)\r\n return `URL(\"${value.href}\")`;\r\n\r\n if (value instanceof URLSearchParams)\r\n return `URLSearchParams(\"${value.toString()}\")`;\r\n\r\n // --- Common singletons ---\r\n if (value === Math) return \"Math\";\r\n if (value === JSON) return \"JSON\";\r\n if (value === Reflect) return \"Reflect\";\r\n if (value === Intl) return \"Intl\";\r\n\r\n // --- Custom toString method ---\r\n const hasCustomToString =\r\n typeof value?.toString === \"function\" &&\r\n value.toString !== Object.prototype.toString;\r\n\r\n if (hasCustomToString) {\r\n try {\r\n const str = value.toString();\r\n // Optional: skip if it’s just \"[object Object]\"\r\n if (!/^\\[object .+\\]$/.test(str)) return str;\r\n }\r\n catch { /* ignore broken toString() */ }\r\n }\r\n\r\n // --- Plain object or class instance ---\r\n if (t === \"object\") {\r\n const ctorName = getCtorName(value);\r\n const entries = Object.entries(value).map(\r\n ([key, val]) => `${strfy(key)}: ${strfy(val)}`\r\n );\r\n if (entries.length === 0) return `${ctorName}{ }`;\r\n return `${ctorName}{ ${entries.join(\", \")} }`;\r\n }\r\n\r\n // --- Fallback ---\r\n return String(value);\r\n}\r\n\r\n/**\r\n * Splits a string into words by capital letters (A–Z).\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByCaps(\"HelloWorld\"); // [\"Hello\", \"World\"]\r\n * splitByCaps(\"XMLHttpRequest\"); // [\"XML\", \"Http\", \"Request\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @returns An array of string segments split at capital letters.\r\n */\r\nexport function splitByCaps(str: string): string[] {\r\n return str.split(/(?=[A-Z])/).filter(x => !!x);\r\n}\r\n\r\n/**\r\n * Splits a string by any of the given substrings.\r\n * Each splitter is treated literally (special regex characters are escaped).\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByStrings(\"one--two__three\", \"--\", \"__\");\r\n * // [\"one\", \"two\", \"three\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @param splitters - One or more substrings to split by.\r\n * @returns An array of string segments split at any of the given substrings.\r\n */\r\nexport function splitByStrings(str: string, ...splitters: string[]): string[] {\r\n if (splitters.length === 0) return [str];\r\n\r\n // Escape regex special characters in splitters\r\n const escaped = splitters.map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\r\n\r\n // Build a regex that matches any of them\r\n const regex = new RegExp(escaped.join('|'), 'g');\r\n\r\n // Split and filter out empty strings if desired\r\n return str.split(regex);\r\n}\r\n\r\n/**\r\n * Splits a string by any of the given characters.\r\n * \r\n * Example:\r\n * ```ts\r\n * splitByChars(\"a,b;c\", \",;\"); \r\n * // [\"a\", \"b\", \"c\"]\r\n * ```\r\n *\r\n * @param str - The input string to split.\r\n * @param splitters - A string containing one or more characters to split by.\r\n * @returns An array of string segments split at any of the given characters.\r\n */\r\nexport function splitByChars(str: string, splitters: string): string[] {\r\n return splitByStrings(str, ...splitters.split(\"\"));\r\n}\r\n\r\nexport function trimStart(str: string, ...chars: string[]): string {\r\n if (chars.length === 0) return str.trimStart();\r\n\r\n const sorted = [...chars].sort((a, b) => b.length - a.length);\r\n\r\n let changed = true;\r\n while (changed) {\r\n changed = false;\r\n for (const c of sorted) {\r\n if (str.startsWith(c)) {\r\n str = str.slice(c.length);\r\n changed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nexport function trimEnd(str: string, ...chars: string[]): string {\r\n if (chars.length === 0) return str.trimEnd();\r\n\r\n const sorted = [...chars].sort((a, b) => b.length - a.length);\r\n\r\n let changed = true;\r\n while (changed) {\r\n changed = false;\r\n for (const c of sorted) {\r\n if (str.endsWith(c)) {\r\n str = str.slice(0, -c.length);\r\n changed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nexport function trim(str: string, ...chars: string[]): string {\r\n if (chars.length === 0) return str.trim();\r\n return trimEnd(trimStart(str, ...chars), ...chars);\r\n}\r\n","import { isArray, isObject } from \"../../guard\";\r\n\r\nexport { isObject }\r\n\r\n/**\r\n * ```ts\r\n * // Gives type Record<string, unknown>\r\n * hasProperties(obj, [\"a\", \"b\"]);\r\n * \r\n * // Gives type Record<\"a\" | \"b\", unknown>\r\n * hasProperties(obj, [\"a\", \"b\"] as const);\r\n * ```\r\n */\r\nexport function hasProperties<T extends readonly string[]>(obj: unknown, props: T | string[]): obj is Record<T[number], unknown> {\r\n return isObject(obj) && props.every(p => p in obj);\r\n}\r\n\r\nexport function deepEqual<T>(a: T, b: T): boolean {\r\n if (a === b) return true;\r\n\r\n // Handle null (typeof null === 'object')\r\n if (a === null || b === null) return false;\r\n\r\n // Handle non-objects (primitives, functions, etc.)\r\n if (typeof a !== 'object' || typeof b !== 'object') return false;\r\n\r\n // Arrays\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((val, i) => deepEqual(val, b[i]));\r\n }\r\n\r\n // If one is array and the other isn’t\r\n if (Array.isArray(a) !== Array.isArray(b)) return false;\r\n\r\n // Objects\r\n const keysA = Object.keys(a) as (keyof T)[];\r\n const keysB = Object.keys(b) as (keyof T)[];\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n for (const key of keysA) {\r\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\r\n if (!deepEqual(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function getCtorName(obj: any): string {\r\n if (obj === null) return \"null\";\r\n if (isArray(obj)) return \"Array\";\r\n if (typeof obj !== \"object\") return typeof obj;\r\n\r\n const tag = Object.prototype.toString.call(obj).slice(8, -1);\r\n return tag || \"Object\";\r\n}\r\n","import { deepEqual } from \"../utils/obj\";\r\nimport { EnumObject, getEnumValues } from \"../utils/enum\";\r\n\r\nexport type HasProps<T extends object> = T extends Record<string, unknown> ? T : never;\r\n\r\nexport function isStrictEqual(val1: unknown, val2: unknown): boolean {\r\n return val1 === val2;\r\n}\r\n\r\nexport function isDeepEqual(val1: unknown, val2: unknown): boolean {\r\n return deepEqual(val1, val2);\r\n}\r\n\r\nexport function isUndefined(val: unknown): val is undefined {\r\n return val === undefined;\r\n}\r\n\r\nexport function isNull(val: unknown): val is null {\r\n return val === null;\r\n}\r\n\r\nexport function isNullish(val: unknown): val is null | undefined {\r\n return val === undefined || val === null;\r\n}\r\n\r\nexport function isDefined<T>(val: T): val is Exclude<T, undefined> {\r\n return val !== undefined;\r\n}\r\n\r\nexport function isNonNull<T>(val: T): val is Exclude<T, null> {\r\n return val !== null;\r\n}\r\n\r\nexport function isObject(val: unknown): val is Record<string, unknown> {\r\n return typeof val === \"object\" && val !== null && !isArray(val);\r\n}\r\n\r\nexport function isEmptyObject(val: unknown): val is Record<string, never> {\r\n return isObject(val) && Object.keys(val).length === 0;\r\n}\r\nexport function isObjectOrUndefined(val: unknown): val is Record<string, unknown> | undefined {\r\n return val === undefined || isObject(val);\r\n}\r\n\r\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\r\n if (!isObject(val)) return false;\r\n const proto = Object.getPrototypeOf(val);\r\n return proto === Object.prototype || proto === null;\r\n}\r\n\r\nexport function isTypedObject<T extends object>(val: unknown, keys: (keyof T)[]): val is HasProps<T> {\r\n return isObject(val) && keys.every(k => k in val);\r\n}\r\n\r\nfunction isSet<T>(val: unknown): val is Set<T> {\r\n return val instanceof Set;\r\n}\r\n\r\nexport function isArray<T>(arr: T[] | unknown): arr is T[] {\r\n return !!arr && Object.prototype.toString.call(arr) === \"[object Array]\";\r\n}\r\n\r\nexport function isArrayOrUndefined(arr: unknown): arr is unknown[] | undefined {\r\n return arr === undefined || isArray(arr);\r\n}\r\n\r\nexport function isEmptyArray<T>(arr: T[] | unknown): arr is T[] & { length: 0 } { // Or just [] (without T)\r\n return isArray(arr) && arr.length === 0;\r\n}\r\n\r\nexport function isNonEmptyArray<T>(arr: T[] | unknown): arr is T[] {\r\n return isArray(arr) && arr.length > 0;\r\n}\r\n\r\nexport function isEmptyArrayOrUndefined<T>(arr: T[] | unknown): arr is T[] | undefined {\r\n return (isArray(arr) && arr.length === 0) || arr === undefined;\r\n}\r\n\r\nexport function isNonEmptyArrayOrUndefined<T>(arr: T[] | unknown): arr is T[] | undefined {\r\n return (isArray(arr) && arr.length > 0) || arr === undefined;\r\n}\r\n\r\nexport function isString(val: unknown): val is string {\r\n return typeof val === \"string\";\r\n}\r\n\r\nexport function isEmptyString(val: unknown): val is \"\" {\r\n return typeof val === \"string\" && val.length === 0;\r\n}\r\n\r\nexport function isNonEmptyString(val: unknown): val is string {\r\n return typeof val === \"string\" && val.length > 0;\r\n}\r\n\r\nexport function isStringOrUndefined(val: unknown): val is string | undefined {\r\n return val === undefined || typeof val === \"string\";\r\n}\r\n\r\nexport function isEmptyStringOrUndefined(val: unknown): val is \"\" | undefined {\r\n return (typeof val === \"string\" && val.length === 0) || val === undefined;\r\n}\r\n\r\nexport function isNonEmptyStringOrUndefined(val: unknown): val is string | undefined {\r\n return (typeof val === \"string\" && val.length > 0) || val === undefined;\r\n}\r\n\r\nexport function isBoolean(val: unknown): val is boolean {\r\n return typeof val === \"boolean\";\r\n}\r\n\r\nexport function isBooleanOrUndefined(val: unknown): val is boolean | undefined {\r\n return val === undefined || typeof val === \"boolean\";\r\n}\r\n\r\nexport function isTrue(val: unknown): val is true {\r\n return val === true;\r\n}\r\n\r\nexport function isTrueOrUndefined(val: unknown): val is true | undefined {\r\n return val === true || val === undefined;\r\n}\r\n\r\nexport function isFalse(val: unknown): val is false {\r\n return val === false;\r\n}\r\n\r\nexport function isFalseOrUndefined(val: unknown): val is false | undefined {\r\n return val === false || val === undefined;\r\n}\r\n\r\nexport function isFunction<T extends (...args: any[]) => any>(val: unknown): val is T {\r\n return typeof val === \"function\";\r\n}\r\n\r\nexport function isFunctionOrUndefined(val: unknown): val is ((...args: any[]) => any) | undefined {\r\n return val === undefined || typeof val === \"function\";\r\n}\r\n\r\nexport function isEnumValue<E extends EnumObject>(val: unknown, enumObj: E): val is E[keyof E] {\r\n return getEnumValues(enumObj).some(v => v === val);\r\n}\r\n\r\nexport function isEnumValueOrUndefined<E extends EnumObject>(val: unknown, enumObj: E): val is E[keyof E] | undefined {\r\n return val === undefined || getEnumValues(enumObj).some(v => v === val);\r\n}\r\n\r\nexport function isNumericString(val: unknown): val is string {\r\n if (typeof val !== \"string\" || val.trim() === \"\") return false;\r\n const n = +val;\r\n return Number.isFinite(n);\r\n}\r\n\r\nexport function isBigInt(val: unknown): val is BigInt {\r\n return typeof val === \"bigint\";\r\n}\r\n\r\nexport function isNumber(val: unknown): val is number {\r\n return typeof val === \"number\";\r\n}\r\n\r\nexport function isSafeNumber(val: unknown): val is number {\r\n return isNumber(val) && Number.isSafeInteger(val);\r\n}\r\n\r\nexport function isNumberOrUndefined(val: unknown): val is number | undefined {\r\n return typeof val === \"number\" || val === undefined;\r\n}\r\n\r\nexport function isNumberEq(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && val === ref;\r\n}\r\n\r\nexport function isNumberGt(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val > ref;\r\n}\r\n\r\nexport function isNumberGte(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val >= ref;\r\n}\r\n\r\nexport function isNumberLt(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val < ref;\r\n}\r\n\r\nexport function isNumberLte(val: unknown, ref: unknown): val is number {\r\n return isNumber(val) && isNumber(ref) && val <= ref;\r\n}\r\n\r\nexport function isNumberBetween(val: unknown, min: unknown, max: unknown): val is number {\r\n return isNumber(val) && isNumber(min) && isNumber(max) && val >= min && val <= max;\r\n}\r\n\r\nexport function isNumberBetweenExclusive(val: unknown, min: unknown, max: unknown): val is number {\r\n return isNumber(val) && isNumber(min) && isNumber(max) && val > min && val < max;\r\n}\r\n\r\nexport function isFinite(val: unknown): val is number {\r\n return typeof val === \"number\" && Number.isFinite(val);\r\n}\r\n\r\nexport function isFloat(val: unknown): val is number {\r\n return isFinite(val) && !isInteger(val);\r\n}\r\n\r\nexport function isInteger(val: unknown): val is number {\r\n return typeof val === \"number\" && isFinite(val) && val === Math.trunc(val);\r\n}\r\n\r\nexport function isSafeInteger(val: unknown): val is number {\r\n return isInteger(val) && Number.isSafeInteger(val);\r\n}\r\n\r\nexport function isIntegerOrUndefined(val: unknown): val is number | undefined {\r\n return (typeof val === \"number\" && isFinite(val) && val === Math.trunc(val)) || val === undefined;\r\n}\r\n\r\nexport function isIntegerEq(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && val === ref;\r\n}\r\n\r\nexport function isIntegerGt(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val > ref;\r\n}\r\n\r\nexport function isIntegerGte(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val >= ref;\r\n}\r\n\r\nexport function isIntegerLt(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val < ref;\r\n}\r\n\r\nexport function isIntegerLte(val: unknown, ref: unknown): val is number {\r\n return isInteger(val) && isNumber(ref) && val <= ref;\r\n}\r\n\r\nexport function isIntegerBetween(val: unknown, min: unknown, max: unknown): val is number {\r\n return isInteger(val) && isNumber(min) && isNumber(max) && val >= min && val <= max;\r\n}\r\n\r\nexport function isIntegerBetweenExclusive(val: unknown, min: unknown, max: unknown): val is number {\r\n return isInteger(val) && isNumber(min) && isNumber(max) && val > min && val < max;\r\n}\r\n\r\nexport function isNaNValue(val: unknown): val is number {\r\n return typeof val === \"number\" && Number.isNaN(val);\r\n}\r\n\r\nexport function isInfinity(val: unknown): val is number {\r\n return val === Infinity || val === -Infinity;\r\n}\r\n\r\nexport function isPosInfinity(val: unknown): val is number {\r\n return val === Infinity;\r\n}\r\n\r\nexport function isNegInfinity(val: unknown): val is number {\r\n return val === -Infinity;\r\n}\r\n\r\nexport function isPos(val: unknown): val is number {\r\n return typeof val === \"number\" && val > 0;\r\n}\r\n\r\nexport function isNeg(val: unknown): val is number {\r\n return typeof val === \"number\" && val < 0;\r\n}\r\n\r\nexport function isNonPos(val: unknown): val is number {\r\n return typeof val === \"number\" && val <= 0;\r\n}\r\n\r\nexport function isNonNeg(val: unknown): val is number {\r\n return typeof val === \"number\" && val >= 0;\r\n}\r\n\r\nexport function isZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0;\r\n}\r\n\r\nexport function isPosZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0 && (1 / val === Infinity);\r\n}\r\n\r\nexport function isNegZero(val: unknown): val is number {\r\n return typeof val === \"number\" && val === 0 && (1 / val === -Infinity);\r\n}\r\n\r\nexport function isOdd(val: unknown): val is number {\r\n return isInteger(val) && Math.abs(val) % 2 === 1;\r\n}\r\n\r\nexport function isEven(val: unknown): val is number {\r\n return isInteger(val) && val % 2 === 0;\r\n}\r\n\r\nexport function isMultipleOf(val: unknown, base: unknown): val is number {\r\n return typeof val === \"number\" && typeof base === \"number\" && (val % base === 0);\r\n}\r\n\r\nexport function isPowerOfTwo(val: unknown): val is number {\r\n return isInteger(val) && val > 0 && (val & (val - 1)) === 0;\r\n}\r\n\r\nexport function isIncluded<T>(val: unknown, container: ReadonlyArray<T> | Set<T>): val is T {\r\n if (isArray(container)) {\r\n return container.includes(val as T);\r\n }\r\n if (isSet(container)) {\r\n return container.has(val as T);\r\n }\r\n return false;\r\n}\r\n\r\nexport function isIndex<T>(index: unknown, array?: ReadonlyArray<T>): index is number {\r\n return isArray(array)\r\n ? isIntegerBetween(index, 0, array.length - 1)\r\n : isIntegerGte(index, 0);\r\n}\r\n\r\nexport function doesThrow(throwTestFn: () => void): boolean {\r\n try { throwTestFn(); return false; }\r\n catch (err) { return true; }\r\n}\r\n\r\nexport function doesNotThrow(throwTestFn: () => void): boolean {\r\n try { throwTestFn(); return true; }\r\n catch (err) { return false; }\r\n}\r\n\r\nexport function tryOr<TRY_RVAL, OR_RVAL>(tryFn: () => TRY_RVAL, orVal: OR_RVAL | (() => OR_RVAL)): TRY_RVAL | OR_RVAL {\r\n try {\r\n return tryFn();\r\n }\r\n catch (err) {\r\n return isFunction(orVal) ? orVal() : orVal;\r\n }\r\n}\r\n","\r\nexport type EnumObject = Record<string, string | number>;\r\nexport type EnumKey<E extends EnumObject> = keyof E;\r\nexport type EnumValue<E extends EnumObject> = E[EnumKey<E>];\r\n\r\nexport function getEnumKeys<E extends EnumObject>(e: E): EnumKey<E>[] {\r\n return Object.keys(e).filter(k => isNaN(Number(k))) as EnumKey<E>[];\r\n}\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): EnumValue<E>[] {\r\n return getEnumKeys(e).map(k => e[k]);\r\n}\r\n\r\nexport function getEnumEntries<E extends EnumObject>(e: E): [keyof E, EnumValue<E>][] {\r\n return getEnumKeys(e).map(k => [k, e[k]] as [keyof E, EnumValue<E>]);\r\n}\r\n\r\nexport function getEnumKey<E extends EnumObject>(e: E, value: EnumValue<E>): keyof E | undefined {\r\n return getEnumKeys(e).find(k => e[k] === value);\r\n}\r\n\r\nexport function forEachEnum<E extends EnumObject>(\r\n e: E,\r\n callback: (key: keyof E, value: E[keyof E]) => void\r\n): void {\r\n for (const [k, v] of getEnumEntries(e)) callback(k, v);\r\n}\r\n","const ConsentCookieName = \"ConsentCookie\";\r\n\r\nenum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n}\r\n\r\nlet _consent: ConsentState | undefined;\r\nlet _expires: Date | undefined;\r\n\r\nlet str = _read(ConsentCookieName);\r\n_consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\nfunction _getCookieList(): string[] {\r\n if (typeof document === \"undefined\")\r\n return [];\r\n\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n}\r\n\r\nfunction _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n if (typeof document !== \"undefined\")\r\n document.cookie = cookie;\r\n\r\n return value;\r\n}\r\n\r\nfunction _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getCookieList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n}\r\n\r\nfunction _erase(name: string) {\r\n if (typeof document !== \"undefined\")\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n}\r\n\r\n/**\r\n * Set expiration time for cookies.\r\n * @param days - Number of days until cookies expire.\r\n */\r\nexport function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n}\r\n\r\n/**\r\n * Is consent pending (cookies not yet accepted)?\r\n * @returns \r\n */\r\nexport function isConsentPending() {\r\n return _consent === undefined;\r\n}\r\n\r\n/**\r\n * Consent cookies.\r\n */\r\nexport function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n}\r\n\r\n/**\r\n * Decline cookies. This will reject all cookies than a single flags that cookies have been declined.\r\n */\r\nexport function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n}\r\n\r\n/**\r\n * Save a cookie.\r\n * @param name - Cookie name.\r\n * @param value - Cookie value, can be string, number or boolean.\r\n * @returns - Returns given value.\r\n */\r\nexport function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept)\r\n _save(name, value);\r\n return value;\r\n}\r\n\r\n/**\r\n * Read a string cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found.\r\n * @returns - String cookie value.\r\n */\r\nexport function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept)\r\n return _read(name, defaultValue) ?? defaultValue;\r\n else\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Read an integer cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found.\r\n * @returns - Integer cookie valus.\r\n */\r\nexport function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\n/**\r\n * Read a boolean cookie.\r\n * @param name - Cookie name.\r\n * @param defaultValue - Default value returned when cookie with given name was not found. \r\n * @returns - Boolean cookie value.\r\n */\r\nexport function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n}\r\n\r\n/**\r\n * Erase cookie.\r\n * @param name - Name of cookie to be erased.\r\n */\r\nexport function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName)\r\n _erase(name);\r\n}\r\n\r\n/**\r\n * Erase all cookies.\r\n */\r\nexport function eraseAll() {\r\n if (typeof document !== \"undefined\")\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n}\r\n\r\n","import { Assert, Guard } from \"..\";\r\n\r\nconst CSS_UNIT_RE = /^\\s*([+-]?\\d*\\.?\\d+)\\s*(px|cm|mm|in|pt|pc|em|rem|vw|vh|vmin|vmax|%)?\\s*$/;\r\n\r\nexport type CssUnit =\r\n | \"px\" | \"cm\" | \"mm\" | \"in\"\r\n | \"pt\" | \"pc\"\r\n | \"em\" | \"rem\"\r\n | \"vw\" | \"vh\" | \"vmin\" | \"vmax\"\r\n | \"%\";\r\n\r\ninterface ParsedCssUnit {\r\n value: number;\r\n unit: CssUnit | undefined;\r\n}\r\n\r\nfunction parseCssUnit(input: string): ParsedCssUnit | undefined {\r\n const m = CSS_UNIT_RE.exec(input);\r\n if (!m) return undefined;\r\n return {\r\n value: Number(m[1]),\r\n unit: (m[2] as CssUnit) ?? undefined,\r\n };\r\n}\r\n\r\nfunction getDevicePixelRatio() {\r\n return typeof window === \"undefined\" ? 1 : window.devicePixelRatio;\r\n}\r\n\r\nfunction getPxPerUnit(unit: CssUnit, _default: number): number {\r\n try {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1\" + unit;\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || _default;\r\n }\r\n catch (e) {\r\n return _default;\r\n }\r\n}\r\n\r\nfunction getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction getSystemFontSize(): number {\r\n try {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n catch (e) {\r\n return 16;\r\n }\r\n}\r\n\r\nfunction getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n if (typeof window === \"undefined\")\r\n return false;\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document)\r\n return true;\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n}\r\n\r\nfunction getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n}\r\n\r\nfunction getHostAddress(): string {\r\n if (typeof location === \"undefined\" || !location.host) {\r\n return \"localhost\";\r\n }\r\n return `${location.protocol}//${location.host}`;\r\n}\r\n\r\n/** Browsers scroll bar width. */\r\nexport const ScrollbarWidth = getScrollBarWidth();\r\n\r\n/** Browsers system font size. */\r\nexport const FontSize = getSystemFontSize();\r\n\r\n/** Is touch device? */\r\nexport const IsTouchDevice = getIsTouchDevice();\r\n\r\n/** Is mobile device? */\r\nexport const IsMobileDevice = getIsMobileDevice();\r\n\r\n/** Host address. */\r\nexport const HostAddress = getHostAddress();\r\n\r\n/** Device pixel ratio. */\r\nexport const DevicePixelRatio = getDevicePixelRatio();\r\n\r\n/** Devices dots per inch. */\r\nexport const DPI = getPxPerUnit(\"in\", 96);\r\n\r\nconst PxPerIn = getPxPerUnit(\"in\", 96);\r\nconst PxPerMm = getPxPerUnit(\"mm\", 96 / 25.4);\r\nconst PxPerCm = getPxPerUnit(\"cm\", 96 / 25.4 * 10);\r\nconst PxPerEm = getPxPerUnit(\"em\", FontSize);\r\n\r\n/**\r\n * Convert input to pixels on a device. Input value is in html style form containing number\r\n * followed by unit (e.g. \"10px\"). Supported units are \"mm\", \"cm\", \"in\", \"inch\", \"em\" and \"px\".\r\n * \r\n * @param valueUnit - Input value.\r\n * @returns - Pixels.\r\n */\r\nexport function unitToPx(valueUnit: string | number): number {\r\n if (typeof valueUnit === \"number\")\r\n return valueUnit;\r\n\r\n const p = parseCssUnit(valueUnit);\r\n\r\n const value = p?.value;\r\n const unit = p?.unit;\r\n\r\n if (!Guard.isFinite(value))\r\n Assert.fail(`Invalid value: ${value}`);\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return value * PxPerMm;\r\n case \"cm\":\r\n return value * PxPerCm;\r\n case \"in\":\r\n return value * PxPerIn;\r\n case \"em\":\r\n return value * PxPerEm;\r\n case \"px\":\r\n case undefined:\r\n return value;\r\n default:\r\n Assert.fail(`Unsupported CssUnit: ${unit}`);\r\n }\r\n}\r\n\r\nexport function pxToUnit(px: number, unit: CssUnit): number {\r\n switch (unit) {\r\n case \"mm\":\r\n return px / PxPerMm;\r\n case \"cm\":\r\n return px / PxPerCm;\r\n case \"em\":\r\n return px / PxPerEm;\r\n case \"in\":\r\n return px / PxPerIn;\r\n case \"px\":\r\n return px;\r\n default:\r\n Assert.fail(`Unsupported CssUnit: ${unit}`);\r\n }\r\n}\r\n\r\nexport function pxToUnitStr(px: number, unit: CssUnit): string {\r\n return `${pxToUnit(px, unit)}${unit}`;\r\n}\r\n","export * as Arr from \"./arr\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./obj\";\r\nexport * as Str from \"./str\";","import { isInteger, isArray } from \"../../guard\";\r\n\r\nexport { isArray }\r\n\r\nexport function toArray<T>(a: T | T[]): T[] {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: ReadonlyArray<T> | undefined): T[] {\r\n return a?.slice() ?? [];\r\n}\r\n\r\nexport function removeDuplicates<T>(arr: ReadonlyArray<T>, compareFn?: (a: T, b: T) => boolean): Array<T> {\r\n return compareFn !== undefined\r\n ? arr.filter((a, id, self) => id === self.findIndex(b => compareFn(a, b)))\r\n : arr.filter((a, id, self) => id === self.indexOf(a));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","import { Device } from \"../..\";\r\n\r\nfunction _getElemById(id: string): HTMLElement | undefined {\r\n return typeof document === \"undefined\" ? undefined : (document.getElementById(id) ?? undefined);\r\n}\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.unitToPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let { left, top } = el.getBoundingClientRect();\r\n\r\n if (typeof window !== \"undefined\") {\r\n left += window.pageXOffset;\r\n top += window.pageYOffset;\r\n }\r\n\r\n if (typeof document !== \"undefined\") {\r\n let de = document.documentElement;\r\n left -= de.clientLeft;\r\n top -= de.clientTop;\r\n }\r\n\r\n return { left, top }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? _getElemById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? _getElemById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n if (!canvas && typeof document !== \"undefined\")\r\n canvas = document.createElement(\"canvas\");\r\n\r\n let ctx = canvas?.getContext(\"2d\");\r\n\r\n if (!ctx)\r\n return 0;\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n\r\n/**\r\n * Add style element to document head.\r\n * @param styleId - Id of style element.\r\n * @param styleCss - Style CSS string.\r\n */\r\nexport function injectCss(styleId: string, styleCss: string) {\r\n if (styleId === \"\" || styleCss === \"\") return; // Nothing to inject\r\n if (typeof document === \"undefined\") return; // SSR safe\r\n if (document.getElementById(styleId)) return; // Already injected\r\n const style = document.createElement(\"style\");\r\n style.id = styleId;\r\n style.textContent = styleCss;\r\n document.head.appendChild(style);\r\n}\r\n\r\n","import { isInteger, isNumber } from \"../../guard\";\r\n\r\nexport { isInteger, isNumber }\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\nexport function avg(...values: number[]): number {\r\n return sum(values) / values.length;\r\n}\r\n\r\nexport function cmp(a: number, b: number): -1 | 0 | 1 {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n}\r\n","export type EqualityFn<V> = (a: V, b: V) => boolean;\r\nexport const DefaultEqualityFn: EqualityFn<any> = (a: any, b: any) => a === b;\r\n\r\nexport interface KVComponent<K extends any[], VALUE> {\r\n get size(): number;\r\n isEmpty(): boolean;\r\n has(...keys: K): boolean;\r\n get(...keys: K): VALUE | undefined;\r\n getOrDefault(...keysAndDefault: [...K, VALUE]): VALUE;\r\n getOrCreate(...keysAndCreator: [...K, VALUE]): VALUE;\r\n set(...keysAndValue: [...K, VALUE]): void;\r\n delete(...keys: K): boolean;\r\n clear?(): void;\r\n toString(): string;\r\n\r\n // Iterators for KVComponent.\r\n kvValues(): IterableIterator<VALUE>;\r\n kvKeys(): IterableIterator<K>;\r\n kvEntries(): IterableIterator<[K, VALUE]>;\r\n}\r\n\r\nexport abstract class BaseContainer {\r\n abstract toString(): string;\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { Assert } from \"..\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * This is a stack data structure.\r\n */\r\nexport class Stack<T> extends BaseContainer {\r\n private readonly data: T[] = [];\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n private assertId(id: number): number {\r\n Assert.isIntegerBetween(id, 0, this.length - 1, `Stack index ${id} out of range.`);\r\n return id;\r\n }\r\n\r\n get length() {\r\n return this.data.length;\r\n }\r\n\r\n push(el: T) {\r\n this.data.push(el);\r\n return el;\r\n }\r\n\r\n pop(): T {\r\n this.assertId(this.length - 1);\r\n return this.data.pop()!;\r\n }\r\n\r\n popOrUndef(): T | undefined {\r\n return this.data.pop();\r\n }\r\n\r\n popOr(defaultValueOrCreator: T | (() => T)): T {\r\n return this.isEmpty()\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : this.data.pop()!;\r\n }\r\n\r\n top() {\r\n return this.data[this.assertId(this.length - 1)];\r\n }\r\n\r\n topOrUndef(): T | undefined {\r\n return this.data[this.length - 1];\r\n }\r\n\r\n topOr(defaultValueOrCreator: T | (() => T)): T {\r\n return this.isEmpty()\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : this.data[this.length - 1];\r\n }\r\n\r\n peek(depth = 0): T {\r\n return this.data[this.assertId(this.data.length - 1 - depth)];\r\n }\r\n\r\n peekOrUndef(depth = 0): T | undefined {\r\n return this.data[this.data.length - 1 - depth];\r\n\r\n }\r\n\r\n peekOr(depth = 0, defaultValueOrCreator: T | (() => T)): T {\r\n const id = this.data.length - 1 - depth;\r\n const value = id < 0 ? undefined : this.data[id];\r\n return value === undefined\r\n ? (isFunction(defaultValueOrCreator) ? defaultValueOrCreator() : defaultValueOrCreator)\r\n : value;\r\n }\r\n\r\n *values(): IterableIterator<T> {\r\n for (let id = this.data.length - 1; id >= 0; id--)\r\n yield this.data[id];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<T> {\r\n yield* this.values();\r\n }\r\n\r\n toArray(): T[] {\r\n return [...this.data];\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.length === 0;\r\n }\r\n\r\n clear() {\r\n this.data.length = 0;\r\n }\r\n\r\n toString(): string {\r\n return `Stack(${this.length})${stringify(this.data)}`;\r\n }\r\n}\r\n","import { isFinite } from \"../guard\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * `Vec` is a generic vector class with two or more coordinates.\r\n * \r\n * ```ts\r\n * // Example usage:\r\n * const a = new Vec(1, 2);\r\n * const b = new Vec(3, 4);\r\n *\r\n * console.log(a.add(b).toString()); // Vec(4, 6)\r\n * console.log(a.add(3, 3).toString()); // Vec(4, 5)\r\n * console.log(a.mul(2).toString()); // Vec(2, 4)\r\n * console.log(a.equals(b)); // false\r\n * console.log(a.clone().equals(a)); // true\r\n * ```\r\n */\r\nexport class Vec extends BaseContainer {\r\n readonly coords: number[];\r\n\r\n constructor(...coords: number[]) {\r\n super();\r\n\r\n if (coords.length < 2) {\r\n throw new TypeError(\"Vec needs minumum two coords!\")\r\n }\r\n this.coords = coords;\r\n }\r\n\r\n static vec2(x: number, y: number): Vec {\r\n return new Vec(x, y);\r\n }\r\n\r\n static vec3(x: number, y: number, z: number): Vec {\r\n return new Vec(x, y, z);\r\n }\r\n\r\n static zero(dim: number): Vec {\r\n if (dim < 2) {\r\n throw new TypeError(\"Vec.zero requires dimension >= 2\");\r\n }\r\n return new Vec(...Array(dim).fill(0));\r\n }\r\n\r\n get dim(): number {\r\n return this.coords.length;\r\n }\r\n\r\n get length(): number {\r\n return Math.hypot(...this.coords);\r\n }\r\n\r\n magnitude(): number {\r\n return this.length;\r\n }\r\n\r\n get x(): number {\r\n return this.coords[0];\r\n }\r\n\r\n get y(): number {\r\n return this.coords[1];\r\n }\r\n\r\n get z(): number {\r\n if (this.coords[2] === undefined) {\r\n throw new TypeError(\"Vec z-coord not available!\")\r\n }\r\n return this.coords[2];\r\n }\r\n\r\n add(other: Vec): Vec;\r\n add(...coords: number[]): Vec;\r\n add(...args: [Vec] | number[]): Vec {\r\n const otherCoords = args[0] instanceof Vec\r\n ? args[0].coords\r\n : args as number[];\r\n\r\n if (this.coords.length !== otherCoords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n\r\n return new Vec(...this.coords.map((coord, i) => coord + otherCoords[i]));\r\n }\r\n\r\n sub(other: Vec): Vec;\r\n sub(...coords: number[]): Vec;\r\n sub(...args: [Vec] | number[]): Vec {\r\n const otherCoords = args[0] instanceof Vec\r\n ? args[0].coords\r\n : args as number[];\r\n\r\n if (this.coords.length !== otherCoords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n\r\n return new Vec(...this.coords.map((coord, i) => coord - otherCoords[i]));\r\n }\r\n\r\n mul(scalar: number): Vec {\r\n return new Vec(...this.coords.map(coord => coord * scalar));\r\n }\r\n\r\n div(scalar: number): Vec {\r\n return new Vec(...this.coords.map(coord => coord / scalar));\r\n }\r\n\r\n dot(other: Vec): number {\r\n if (this.coords.length !== other.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n return this.coords.reduce((sum, c, i) => sum + c * other.coords[i], 0);\r\n }\r\n\r\n distance(other: Vec): number {\r\n if (this.coords.length !== other.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n return Math.hypot(...this.coords.map((c, i) => c - other.coords[i]));\r\n }\r\n\r\n normalize(): Vec {\r\n const len = this.length;\r\n if (len === 0) {\r\n throw new TypeError(\"Cannot normalize zero-length vector!\");\r\n }\r\n return this.div(len);\r\n }\r\n\r\n static lerp(a: Vec, b: Vec, t: number): Vec {\r\n if (a.coords.length !== b.coords.length) {\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n }\r\n if (!isFinite(t)) {\r\n throw new TypeError(\"Lerp t is not finite!\");\r\n }\r\n return a.add(b.sub(a).mul(t));\r\n }\r\n\r\n toLength(len: number): Vec {\r\n const mag = this.length;\r\n return mag === 0 ? this : this.mul(len / mag);\r\n }\r\n\r\n clamp(minLength?: number, maxLength?: number, defaultDir?: Vec): Vec {\r\n const mag = this.length;\r\n\r\n if (mag === 0) {\r\n if (minLength !== undefined) {\r\n if (defaultDir && defaultDir.coords.length !== this.coords.length)\r\n throw new TypeError(\"Coordinate length mismatch!\");\r\n const dir = defaultDir && defaultDir.length !== 0 ? defaultDir.normalize() : new Vec(1, ...Array(this.coords.length - 1).fill(0));\r\n return dir.mul(minLength);\r\n }\r\n return this; // zero vector stays zero\r\n }\r\n\r\n // If maxLength is defined and vector is too long\r\n if (maxLength !== undefined && mag > maxLength) {\r\n return this.normalize().mul(maxLength);\r\n }\r\n\r\n // If minLength is defined and vector is too short\r\n if (minLength !== undefined && mag < minLength) {\r\n return this.normalize().mul(minLength);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n equals(other: Vec): boolean {\r\n return this.coords.length === other.coords.length &&\r\n this.coords.every((v, i) => v === other.coords[i]);\r\n }\r\n\r\n clone(): Vec {\r\n return new Vec(...this.coords);\r\n }\r\n\r\n toObject() {\r\n return { x: this.x, y: this.y, z: this.z }\r\n }\r\n\r\n [Symbol.iterator]() {\r\n return this.coords[Symbol.iterator]();\r\n }\r\n\r\n toString(): string {\r\n return `Vec(${this.coords.join(\", \")})`;\r\n }\r\n}\r\n","import { AnchoredRect } from \"./anchor-rect\";\r\n\r\n/**\r\n * An immutable 2D rectangle defined by its top-left corner (x, y) and size (width, height).\r\n * Provides geometric utilities like intersection, containment, scaling, etc.\r\n */\r\nexport class Rect {\r\n public x: number;\r\n public y: number;\r\n public width: number;\r\n public height: number;\r\n\r\n constructor();\r\n constructor(width: number, height: number);\r\n constructor(x: number, y: number, width: number, height: number);\r\n constructor(...args: number[]) {\r\n if (args.length === 0) {\r\n this.x = this.y = this.width = this.height = 0;\r\n }\r\n else if (args.length === 2) {\r\n this.x = this.y = 0;\r\n this.width = args[0];\r\n this.height = args[1];\r\n }\r\n else {\r\n this.x = args[0];\r\n this.y = args[1];\r\n this.width = args[2];\r\n this.height = args[3];\r\n }\r\n\r\n if (this.width < 0 || this.height < 0)\r\n throw new Error(\"Rect width and height must be non-negative.\");\r\n }\r\n\r\n set(): Rect;\r\n set(width: number, height: number): Rect;\r\n set(x: number, y: number, width: number, height: number): Rect;\r\n set(...args: number[]): Rect {\r\n if (args.length === 0) {\r\n this.x = this.y = this.width = this.height = 0;\r\n }\r\n else if (args.length === 2) {\r\n this.x = this.y = 0;\r\n this.width = args[0];\r\n this.height = args[1];\r\n }\r\n else {\r\n this.x = args[0];\r\n this.y = args[1];\r\n this.width = args[2];\r\n this.height = args[3];\r\n }\r\n\r\n if (this.width < 0 || this.height < 0)\r\n throw new Error(\"Rect width and height must be non-negative.\");\r\n\r\n return this;\r\n }\r\n\r\n // --- Static Constructors ---\r\n\r\n static fromPoints(p1: { x: number; y: number }, p2: { x: number; y: number }): Rect {\r\n const x = Math.min(p1.x, p2.x);\r\n const y = Math.min(p1.y, p2.y);\r\n const w = Math.abs(p1.x - p2.x);\r\n const h = Math.abs(p1.y - p2.y);\r\n return new Rect(x, y, w, h);\r\n }\r\n\r\n static fromCenter(cx: number, cy: number, width: number, height: number): Rect {\r\n return new Rect(cx - width / 2, cy - height / 2, width, height);\r\n }\r\n\r\n // --- Derived Properties ---\r\n\r\n get left(): number { return this.x; }\r\n get top(): number { return this.y; }\r\n get right(): number { return this.x + this.width; }\r\n get bottom(): number { return this.y + this.height; }\r\n\r\n get centerX(): number { return this.x + this.width / 2; }\r\n get centerY(): number { return this.y + this.height / 2; }\r\n get center(): { x: number; y: number } { return { x: this.centerX, y: this.centerY }; }\r\n\r\n get area(): number { return this.width * this.height; }\r\n get isEmpty(): boolean { return this.width <= 0 || this.height <= 0; }\r\n\r\n // --- Geometric Tests ---\r\n\r\n containsPoint(px: number, py: number): boolean {\r\n return px >= this.left && px <= this.right && py >= this.top && py <= this.bottom;\r\n }\r\n\r\n containsRect(other: Rect): boolean {\r\n return (\r\n other.left >= this.left &&\r\n other.right <= this.right &&\r\n other.top >= this.top &&\r\n other.bottom <= this.bottom\r\n );\r\n }\r\n\r\n intersects(other: Rect): boolean {\r\n return !(\r\n other.right < this.left ||\r\n other.left > this.right ||\r\n other.bottom < this.top ||\r\n other.top > this.bottom\r\n );\r\n }\r\n\r\n // --- Operations ---\r\n\r\n intersectionCopy(other: Rect): Rect {\r\n const x1 = Math.max(this.left, other.left);\r\n const y1 = Math.max(this.top, other.top);\r\n const x2 = Math.min(this.right, other.right);\r\n const y2 = Math.min(this.bottom, other.bottom);\r\n if (x2 <= x1 || y2 <= y1) return new Rect();\r\n return new Rect(x1, y1, x2 - x1, y2 - y1);\r\n }\r\n\r\n unionCopy(other: Rect): Rect {\r\n const x1 = Math.min(this.left, other.left);\r\n const y1 = Math.min(this.top, other.top);\r\n const x2 = Math.max(this.right, other.right);\r\n const y2 = Math.max(this.bottom, other.bottom);\r\n return new Rect(x1, y1, x2 - x1, y2 - y1);\r\n }\r\n\r\n insetCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x + dx, this.y + dy, this.width - 2 * dx, this.height - 2 * dy);\r\n }\r\n\r\n inflateCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x - dx, this.y - dy, this.width + 2 * dx, this.height + 2 * dy);\r\n }\r\n\r\n offsetInPlace(dx: number, dy: number): Rect {\r\n this.x += dx;\r\n this.y += dy;\r\n return this;\r\n }\r\n\r\n offsetCopy(dx: number, dy: number): Rect {\r\n return new Rect(this.x + dx, this.y + dy, this.width, this.height);\r\n }\r\n\r\n scaleInPlace(scaleX: number, scaleY: number = scaleX): Rect {\r\n this.x = this.centerX - this.width * scaleX / 2;\r\n this.width *= scaleX;\r\n this.y = this.centerY - this.height * scaleY / 2;\r\n this.height *= scaleY;\r\n return this;\r\n }\r\n\r\n scaleCopy(scaleX: number, scaleY: number = scaleX): Rect {\r\n return this.clone().scaleInPlace(scaleX, scaleY);\r\n }\r\n\r\n roundCopy(): Rect {\r\n const left = Math.round(this.left);\r\n const top = Math.round(this.top);\r\n const right = Math.round(this.right);\r\n const bottom = Math.round(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n floorCopy(): Rect {\r\n const left = Math.floor(this.left);\r\n const top = Math.floor(this.top);\r\n const right = Math.floor(this.right);\r\n const bottom = Math.floor(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n ceilCopy(): Rect {\r\n const left = Math.ceil(this.left);\r\n const top = Math.ceil(this.top);\r\n const right = Math.ceil(this.right);\r\n const bottom = Math.ceil(this.bottom);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n expandCopy(px: number, py: number): Rect {\r\n const left = Math.min(this.left, px);\r\n const top = Math.min(this.top, py);\r\n const right = Math.max(this.right, px);\r\n const bottom = Math.max(this.bottom, py);\r\n return new Rect(left, top, right - left, bottom - top);\r\n }\r\n\r\n // --- Utilities ---\r\n\r\n equals(other: Rect): boolean {\r\n return (\r\n this.x === other.x &&\r\n this.y === other.y &&\r\n this.width === other.width &&\r\n this.height === other.height\r\n );\r\n }\r\n\r\n clone(): Rect {\r\n return new Rect(this.x, this.y, this.width, this.height);\r\n }\r\n\r\n toString(): string {\r\n return `Rect(x=${this.x}, y=${this.y}, w=${this.width}, h=${this.height})`;\r\n }\r\n\r\n toAnchoredRect(): AnchoredRect {\r\n return new AnchoredRect(this.left, this.right, this.top, this.bottom);\r\n }\r\n}\r\n","import { clamp } from \"../utils/math\";\r\nimport { Rect } from \"./rect\";\r\n\r\n/**\r\n * A mutable AnchoredRect class is a rectangle (left, top, right, bottom) with an anchor point (anchorX, anchorY).\r\n */\r\nexport class AnchoredRect {\r\n left: number;\r\n anchorX: number;\r\n right: number;\r\n top: number;\r\n anchorY: number;\r\n bottom: number;\r\n\r\n /**\r\n * Create rectangle with all zero values.\r\n */\r\n constructor();\r\n\r\n /**\r\n * Create rectangle with left, right, top, bottom.\r\n * Properties anchorX and anchorY will be centered in the middle.\r\n * \r\n * @param left - Left coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n constructor(left: number, right: number, top: number, bottom: number);\r\n\r\n /**\r\n * Create rectangle with full arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param anchorX - Center x-coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param anchorY - Center y-coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n constructor(left: number, anchorX: number, right: number, top: number, anchorY: number, bottom: number);\r\n\r\n constructor(...args: unknown[]) {\r\n if (args.length === 6) {\r\n this.left = args[0] as number;\r\n this.anchorX = args[1] as number;\r\n this.right = args[2] as number;\r\n this.top = args[3] as number;\r\n this.anchorY = args[4] as number;\r\n this.bottom = args[5] as number;\r\n }\r\n else if (args.length === 4) {\r\n this.left = args[0] as number;\r\n this.right = args[1] as number;\r\n this.anchorX = (this.left + this.right) / 2;\r\n this.top = args[2] as number;\r\n this.bottom = args[3] as number;\r\n this.anchorY = (this.top + this.bottom) / 2;\r\n }\r\n else if (args.length === 0) {\r\n this.left = this.anchorX = this.right = 0;\r\n this.top = this.anchorY = this.bottom = 0;\r\n }\r\n else {\r\n throw new TypeError(`Invalid AnchoredRect args: ${args}`);\r\n }\r\n }\r\n\r\n /**\r\n * Set rectangle with all zero values.\r\n */\r\n set(): AnchoredRect;\r\n\r\n /**\r\n * Set rectangle with left, right, top, bottom.\r\n * Properties anchorX and anchorY will be centered in the middle.\r\n * \r\n * @param left - Left coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n set(left: number, right: number, top: number, bottom: number): AnchoredRect;\r\n\r\n /**\r\n * Set rectangle with full arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param anchorX - Center x-coordinate.\r\n * @param right - Right coordinate.\r\n * @param top - Top coordinate.\r\n * @param anchorY - Center y-coordinate.\r\n * @param bottom - Bottom coordinate.\r\n */\r\n set(left: number, anchorX: number, right: number, top: number, anchorY: number, bottom: number): AnchoredRect;\r\n\r\n set(...args: unknown[]): AnchoredRect {\r\n if (args.length === 6) {\r\n this.left = args[0] as number;\r\n this.anchorX = args[1] as number;\r\n this.right = args[2] as number;\r\n this.top = args[3] as number;\r\n this.anchorY = args[4] as number;\r\n this.bottom = args[5] as number;\r\n }\r\n else if (args.length === 4) {\r\n this.left = args[0] as number;\r\n this.right = args[1] as number;\r\n this.anchorX = (this.left + this.right) / 2;\r\n this.top = args[2] as number;\r\n this.bottom = args[3] as number;\r\n this.anchorY = (this.top + this.bottom) / 2;\r\n }\r\n else if (args.length === 0) {\r\n this.left = this.anchorX = this.right = 0;\r\n this.top = this.anchorY = this.bottom = 0;\r\n }\r\n else {\r\n throw new TypeError(`Invalid AnchoredRect args: ${args}`);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Create rect from basic left, top, width and height arguments.\r\n * \r\n * @param left - Left coordinate.\r\n * @param top - Top coordinate.\r\n * @param width - Width.\r\n * @param height - Height.\r\n * @returns - AnchoredRect.\r\n */\r\n static create(left: number, top: number, width: number, height: number): AnchoredRect {\r\n return new AnchoredRect(left, left + width, top, top + height);\r\n }\r\n\r\n /**\r\n * Create rect from anchorX, anchorY, width, height arguments.\r\n * \r\n * @param centerX - Center x-coordinate.\r\n * @param centerY - Center y-coordinate.\r\n * @param width - Width.\r\n * @param height - Height.\r\n * @returns - AnchoredRect.\r\n */\r\n static createCentered(centerX: number, centerY: number, width: number, height: number): AnchoredRect {\r\n return new AnchoredRect(\r\n centerX - width / 2,\r\n centerX,\r\n centerX + width / 2,\r\n centerY - height / 2,\r\n centerY,\r\n centerY + height / 2\r\n );\r\n }\r\n\r\n /**\r\n * Create rect from sections.\r\n * \r\n * @param leftw - Left section width.\r\n * @param rightw - Right section width.\r\n * @param toph - Top section height.\r\n * @param bottomh - Bottomsection height.\r\n * @returns - AnchoredRect.\r\n */\r\n static createSections(leftw: number, rightw: number, toph: number, bottomh: number): AnchoredRect {\r\n return new AnchoredRect(-leftw, 0, rightw, -toph, 0, bottomh);\r\n }\r\n\r\n /**\r\n * Get center x-coordinate.\r\n */\r\n get centerX() {\r\n return this.left + this.width / 2;\r\n }\r\n\r\n /**\r\n * Get center ycoordinate.\r\n */\r\n get centerY() {\r\n return this.top + this.height / 2;\r\n }\r\n\r\n /**\r\n * Width getter.\r\n */\r\n get width() {\r\n return this.right - this.left;\r\n }\r\n\r\n /**\r\n * Height getter.\r\n */\r\n get height() {\r\n return this.bottom - this.top;\r\n }\r\n\r\n /**\r\n * Left section width getter.\r\n */\r\n get leftw() {\r\n return this.anchorX - this.left;\r\n }\r\n\r\n /**\r\n * Right section width getter.\r\n */\r\n get rightw() {\r\n return this.right - this.anchorX;\r\n }\r\n\r\n /**\r\n * Top section height getter.\r\n */\r\n get toph() {\r\n return this.anchorY - this.top;\r\n }\r\n\r\n /**\r\n * Bottom section height getter.\r\n */\r\n get bottomh() {\r\n return this.bottom - this.anchorY;\r\n }\r\n\r\n /**\r\n * Does this Rect contain given (x, y)-point?\r\n * \r\n * @param x - X-coordinate.\r\n * @param y - Y-coordinate.\r\n * @returns - True/false.\r\n */\r\n contains(x: number, y: number): boolean {\r\n return x >= this.left && x <= this.right && y >= this.top && y <= this.bottom;\r\n }\r\n\r\n /**\r\n * Do a and b rects overlap?\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static overlap(a: AnchoredRect, b: AnchoredRect): boolean {\r\n return a.right > b.left && a.left < b.right && a.bottom > b.top && a.top < b.bottom;\r\n }\r\n\r\n /**\r\n * Do horizontal measures of a and b rects overlap?\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static overlapX(a: AnchoredRect, b: AnchoredRect): boolean {\r\n return a.right > b.left && a.left < b.right;\r\n }\r\n\r\n /**\r\n * Check if given rects are equal.\r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static equals(a: AnchoredRect | null | undefined, b: AnchoredRect | null | undefined): boolean {\r\n if (a == null && b == null) {\r\n // handles null and undefined\r\n return true;\r\n }\r\n else if (a == null || b == null) {\r\n return false;\r\n }\r\n else {\r\n return a === b || a.left === b.left && a.anchorX === b.anchorX && a.right === b.right && a.top === b.top && a.anchorY === b.anchorY && a.bottom === b.bottom;\r\n }\r\n }\r\n\r\n /**\r\n * Check if this rect equals with another rect.\r\n * @param other - The other rect.\r\n * @returns - True/false.\r\n */\r\n equals(other: AnchoredRect): boolean {\r\n return AnchoredRect.equals(this, other);\r\n }\r\n\r\n /**\r\n * Check if edges of given rects are equal, ignoring anchorX and anchorY.\r\n * \r\n * @param a - AnchoredRect a.\r\n * @param b - AnchoredRect b.\r\n * @returns - True/false.\r\n */\r\n static equalsEdges(a: AnchoredRect | null | undefined, b: AnchoredRect | null | undefined): boolean {\r\n if (a == null && b == null) {\r\n // handles null and undefined\r\n return true;\r\n }\r\n else if (a == null || b == null) {\r\n return false;\r\n }\r\n else {\r\n return a === b || a.left === b.left && a.right === b.right && a.top === b.top && a.bottom === b.bottom;\r\n }\r\n }\r\n\r\n /**\r\n * Check if edges of this Rect equals with given Rect, ignoring anchorX and anchorY.\r\n * \r\n * @param other - The other AnchoredRect.\r\n * @returns - True/false.\r\n */\r\n equalsEdges(other: AnchoredRect): boolean {\r\n return AnchoredRect.equalsEdges(this, other);\r\n }\r\n\r\n /**\r\n * Created duplicate of this Rect.\r\n * @returns - Duplicate.\r\n */\r\n clone(): AnchoredRect {\r\n return new AnchoredRect(this.left, this.anchorX, this.right, this.top, this.anchorY, this.bottom);\r\n }\r\n\r\n /**\r\n * Move this rect by (dx, dy). Modifies this Rect.\r\n * \r\n * @param dx - Offset amount in x-direction.\r\n * @param dy - Offset amount in y-direction.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n offsetInPlace(dx: number, dy: number): AnchoredRect {\r\n this.left += dx;\r\n this.anchorX += dx;\r\n this.right += dx;\r\n this.top += dy;\r\n this.anchorY += dy;\r\n this.bottom += dy;\r\n return this;\r\n }\r\n\r\n /**\r\n * Move this rect by (dx, dy). Immutable, returns modified copy.\r\n * \r\n * @param dx - Offset amount in x-direction.\r\n * @param dy - Offset amount in y-direction.\r\n * @returns - AnchoredRect copy with applied offset.\r\n */\r\n offsetCopy(dx: number, dy: number): AnchoredRect {\r\n return this.clone().offsetInPlace(dx, dy);\r\n }\r\n\r\n /**\r\n * Expand this Rect by given Rect. Modifies this Rect.\r\n * \r\n * @param rect - AnchoredRect to expand this instance with.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n expandInPlace(rect: AnchoredRect): AnchoredRect {\r\n this.left = Math.min(this.left, rect.left);\r\n this.right = Math.max(this.right, rect.right);\r\n this.top = Math.min(this.top, rect.top);\r\n this.bottom = Math.max(this.bottom, rect.bottom);\r\n return this;\r\n }\r\n\r\n /**\r\n * Expand this Rect by given Rect. Immutable, returns modified copy.\r\n * \r\n * @param rect - AnchoredRect to expand this instance with.\r\n * @returns - Expanded copy of this AnchoredRect.\r\n */\r\n expandCopy(rect: AnchoredRect): AnchoredRect {\r\n return this.clone().expandInPlace(rect);\r\n }\r\n\r\n /**\r\n * Clip this Rect by given Rect. Mmodifies this Rect.\r\n * \r\n * @param clipRect - AnchoredRect to clip this instance with.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n clipInPlace(clipRect: AnchoredRect): AnchoredRect {\r\n this.left = Math.max(this.left, clipRect.left);\r\n this.right = Math.min(this.right, clipRect.right);\r\n this.anchorX = clamp(this.anchorX, this.left, this.right);\r\n this.top = Math.max(this.top, clipRect.top);\r\n this.bottom = Math.min(this.bottom, clipRect.bottom);\r\n this.anchorY = clamp(this.anchorY, this.top, this.bottom);\r\n return this;\r\n }\r\n\r\n /**\r\n * Clip this Rect by given Rect. Immutable, return modified copy.\r\n * \r\n * @param clipRect - AnchoredRecto to clip this instance with.\r\n * @returns - Clipped AnchoredRect copy.\r\n */\r\n clipCopy(clipRect: AnchoredRect): AnchoredRect {\r\n return this.clone().clipInPlace(clipRect);\r\n }\r\n\r\n /**\r\n * Scale Rect. Anchor pos is (anchorX, anchorY). Modifies this Rect.\r\n * \r\n * @param scaleX - Scale x-amount.\r\n * @param scaleY - Scale y-amount. If undefined then scale x-amount is used.\r\n * @returns This AnchoredRect instance.\r\n */\r\n scaleInPlace(scaleX: number, scaleY: number = scaleX): AnchoredRect {\r\n this.left = this.anchorX - this.leftw * scaleX;\r\n this.right = this.anchorX + this.rightw * scaleX;\r\n this.top = this.anchorY - this.toph * scaleY;\r\n this.bottom = this.anchorY + this.bottomh * scaleY;\r\n return this;\r\n }\r\n\r\n /**\r\n * Scale Rect. Anchor pos is (anchorX, anchorY). Immutable, returns modified copy.\r\n * \r\n * @param scaleX - Scale x-amount.\r\n * @param scaleY - Scale y-amount. If undefined then scale x-amount is used.\r\n * @returns Scaled copy of this AnchoredRect.\r\n */\r\n scaleCopy(scaleX: number, scaleY: number = scaleX): AnchoredRect {\r\n return this.clone().scaleInPlace(scaleX, scaleY);\r\n }\r\n\r\n /**\r\n * Get this AnchoredRect instance.\r\n * @returns - This AnchoredRect instance.\r\n */\r\n getRect(): AnchoredRect {\r\n return this;\r\n }\r\n\r\n toRect(): Rect {\r\n return new Rect(this.left, this.right, this.width, this.height);\r\n }\r\n\r\n toString(): string {\r\n return `Rect(left=${this.left}, anchorX=${this.anchorX}, right=${this.right}, top=${this.top}, anchorY=${this.anchorY}, bottom=${this.bottom})`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { BaseContainer } from \"./base\";\r\n\r\n/**\r\n * LRUCache is an implementation of least recently used cache with a fixed capacity.\r\n */\r\nexport class LRUCache<K extends string, V> extends BaseContainer {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n super();\r\n\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n\r\n *keys(): IterableIterator<K> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield key;\r\n }\r\n\r\n *values(): IterableIterator<V> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield this.cache[key];\r\n }\r\n\r\n *entries(): IterableIterator<[K, V]> {\r\n for (let key = this.head; key != null; key = this.next[key])\r\n yield [key, this.cache[key]];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[K, V]> {\r\n yield* this.entries();\r\n }\r\n\r\n toString(): string {\r\n const entries = [...this.entries()];\r\n return entries.length === 0\r\n ? `LRUCache(0){ }`\r\n : `LRUCache(${entries.length}){ ${entries.map(e => `${stringify(e[0])}: ${stringify(e[1])}`).join(\", \")} }`;\r\n }\r\n}\r\n","import { isFunction, isIntegerGte } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\nimport { stringify } from \"../utils/str\";\r\n\r\n/**\r\n * `IndexArray` is a sparse array with non-negative indexes. It stores values\r\n * to indexes, and each index also has flag telling it has a value.\r\n */\r\nexport class IndexArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private static validateIndex(id: number): number {\r\n if (!isIntegerGte(id, 0)) throw new Error(`Invalid index ${id} - must be an integer >= 0!`);\r\n return id;\r\n }\r\n\r\n private posVal: VALUE[];\r\n private hasPos: boolean[];\r\n\r\n // Number of values\r\n private valCount: number;\r\n\r\n constructor();\r\n constructor(arr: IndexArray<VALUE>)\r\n constructor(entries: Iterable<[number, VALUE]>)\r\n constructor(entries?: IndexArray<VALUE> | Iterable<[number, VALUE]>) {\r\n super();\r\n\r\n if (entries instanceof IndexArray) {\r\n this.posVal = entries.posVal.slice();\r\n this.hasPos = entries.hasPos.slice();\r\n this.valCount = entries.valCount;\r\n }\r\n else {\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n\r\n if (entries) {\r\n for (const [id, value] of entries) {\r\n this.set(id, value);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n this.indices = this.indices.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n private get posLen(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n get size(): number {\r\n return this.valCount;\r\n }\r\n\r\n get length(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n private trimRight() {\r\n let newLength = this.length;\r\n while (newLength > 0 && this.hasPos[newLength - 1] !== true) newLength--;\r\n if (newLength < this.length) this.posVal.length = this.hasPos.length = newLength;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n has(id: number): boolean {\r\n IndexArray.validateIndex(id);\r\n\r\n return this.hasPos[id] === true;\r\n }\r\n\r\n set(id: number, value: VALUE): void {\r\n IndexArray.validateIndex(id);\r\n\r\n if (this.hasPos[id] !== true) this.valCount++;\r\n this.posVal[id] = value;\r\n this.hasPos[id] = true;\r\n }\r\n\r\n get(id: number): VALUE | undefined {\r\n IndexArray.validateIndex(id);\r\n\r\n return this.hasPos[id] ? this.posVal[id] : undefined;\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n return this.get(id) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id)!;\r\n }\r\n\r\n delete(id: number): boolean {\r\n IndexArray.validateIndex(id);\r\n\r\n if (!this.hasPos[id]) return false;\r\n this.posVal[id] = undefined!;\r\n this.hasPos[id] = false;\r\n this.valCount--;\r\n this.trimRight();\r\n return true;\r\n }\r\n\r\n clear(): void {\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: IndexArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield id;\r\n }\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield this.posVal[id];\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield [id, this.posVal[id]];\r\n }\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): IndexArray<VALUE> {\r\n return new IndexArray(this);\r\n }\r\n\r\n merge(other: IndexArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n for (const [id, value] of other.entries()) {\r\n if (this.has(id) && conflictResolver) {\r\n this.set(id, conflictResolver(this.get(id)!, value, id));\r\n }\r\n else {\r\n this.set(id, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => value is S): IndexArray<S>;\r\n filter(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => unknown): IndexArray<VALUE>;\r\n filter(predicate: (value: VALUE, index: number, array: IndexArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): IndexArray<VALUE> })();\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty IndexArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R): IndexArray<R> {\r\n let result = new IndexArray<R>();\r\n for (const [id, value] of this.entries()) {\r\n result.set(id, fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: IndexArray<VALUE>): boolean;\r\n equals(other: IndexArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: IndexArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n\r\n eq ??= (a, b) => a === b;\r\n\r\n const posLen = Math.max(this.posLen, other.posLen);\r\n for (let i = 0; i < posLen; ++i) {\r\n const hasA = this.hasPos[i];\r\n const hasB = other.hasPos[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.posVal[i], other.posVal[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n // Format full array as regular array.\r\n let isRegularArray = true;\r\n for (let i = 0; i < this.hasPos.length && isRegularArray; i++)\r\n if (!this.hasPos[i]) isRegularArray = false;\r\n if (isRegularArray)\r\n return stringify(this.posVal.slice(0, this.hasPos.length));\r\n\r\n const entries = this.entriesArray().map(([id, v]) => `${stringify(id)}: ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `[ ]` : `[ ${entries} ]`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction, isInteger } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * `IndexArray` is a sparse array with positive and negative indexes. It stores\r\n * values to indexes, and each index also has flag telling it has a value.\r\n */\r\nexport class SignedIndexArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private static toNegIndex(id: number): number {\r\n return -id - 1;\r\n }\r\n\r\n private static validateIndex(id: number): number {\r\n if (!isInteger(id)) throw new Error(`Invalid index ${id} - must be an integer!`);\r\n return id;\r\n }\r\n\r\n // For indexes >= 0\r\n private posVal: VALUE[];\r\n private hasPos: boolean[];\r\n\r\n // For indexes < 0\r\n private negVal: VALUE[];\r\n private hasNeg: boolean[];\r\n\r\n // Number of values\r\n private valCount: number;\r\n\r\n constructor();\r\n constructor(arr: SignedIndexArray<VALUE>)\r\n constructor(entries: Iterable<[number, VALUE]>)\r\n constructor(entries?: SignedIndexArray<VALUE> | Iterable<[number, VALUE]>) {\r\n super();\r\n\r\n if (entries instanceof SignedIndexArray) {\r\n this.negVal = entries.negVal.slice();\r\n this.hasNeg = entries.hasNeg.slice();\r\n this.posVal = entries.posVal.slice();\r\n this.hasPos = entries.hasPos.slice();\r\n this.valCount = entries.valCount;\r\n }\r\n else {\r\n this.negVal = [];\r\n this.hasNeg = [];\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n\r\n if (entries) {\r\n for (const [id, value] of entries) {\r\n this.set(id, value);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n this.indices = this.indices.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n get size(): number {\r\n return this.valCount;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n private get posLen(): number {\r\n return this.hasPos.length;\r\n }\r\n\r\n private get negLen(): number {\r\n return this.hasNeg.length;\r\n }\r\n\r\n has(id: number): boolean {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n return this.hasPos[id] === true;\r\n }\r\n else {\r\n return this.hasNeg[SignedIndexArray.toNegIndex(id)] === true;\r\n }\r\n }\r\n\r\n set(id: number, value: VALUE): void {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n if (this.hasPos[id] !== true) this.valCount++;\r\n this.posVal[id] = value;\r\n this.hasPos[id] = true;\r\n }\r\n else {\r\n let negId = SignedIndexArray.toNegIndex(id);\r\n if (this.hasNeg[negId] !== true) this.valCount++;\r\n this.negVal[negId] = value;\r\n this.hasNeg[negId] = true;\r\n }\r\n }\r\n\r\n get(id: number): VALUE | undefined {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n if (id >= 0) {\r\n return this.hasPos[id] ? this.posVal[id] : undefined;\r\n }\r\n else {\r\n let negId = SignedIndexArray.toNegIndex(id);\r\n return this.hasNeg[negId] ? this.negVal[negId] : undefined;\r\n }\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n return this.get(id) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id)!;\r\n }\r\n\r\n delete(id: number): boolean {\r\n SignedIndexArray.validateIndex(id);\r\n\r\n const isPos = id >= 0;\r\n const arr = isPos ? this.posVal : this.negVal;\r\n const has = isPos ? this.hasPos : this.hasNeg;\r\n const idx = isPos ? id : SignedIndexArray.toNegIndex(id);\r\n\r\n if (!has[idx]) return false;\r\n\r\n arr[idx] = undefined!;\r\n has[idx] = false;\r\n this.valCount--;\r\n return true;\r\n }\r\n\r\n clear(): void {\r\n this.negVal = [];\r\n this.hasNeg = [];\r\n this.posVal = [];\r\n this.hasPos = [];\r\n this.valCount = 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: SignedIndexArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield SignedIndexArray.toNegIndex(id);\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield id;\r\n }\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield this.negVal[id];\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield this.posVal[id];\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n for (let id = this.negLen - 1; id >= 0; id--) {\r\n if (this.hasNeg[id]) yield [SignedIndexArray.toNegIndex(id), this.negVal[id]];\r\n }\r\n for (let id = 0; id < this.posLen; id++) {\r\n if (this.hasPos[id]) yield [id, this.posVal[id]];\r\n }\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): SignedIndexArray<VALUE> {\r\n return new SignedIndexArray(this);\r\n }\r\n\r\n merge(other: SignedIndexArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n for (const [id, value] of other.entries()) {\r\n if (this.has(id) && conflictResolver) {\r\n this.set(id, conflictResolver(this.get(id)!, value, id));\r\n }\r\n else {\r\n this.set(id, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => value is S): SignedIndexArray<S>;\r\n filter(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => unknown): SignedIndexArray<VALUE>;\r\n filter(predicate: (value: VALUE, index: number, array: SignedIndexArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): SignedIndexArray<VALUE> })();\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty SignedIndexArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R): SignedIndexArray<R> {\r\n let result = new SignedIndexArray<R>();\r\n for (const [id, value] of this.entries()) {\r\n result.set(id, fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: SignedIndexArray<VALUE>): boolean;\r\n equals(other: SignedIndexArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: SignedIndexArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n\r\n eq ??= (a, b) => a === b;\r\n\r\n const posLen = Math.max(this.posLen, other.posLen);\r\n for (let i = 0; i < posLen; ++i) {\r\n const hasA = this.hasPos[i];\r\n const hasB = other.hasPos[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.posVal[i], other.posVal[i])) return false;\r\n }\r\n\r\n const negLen = Math.max(this.negLen, other.negLen);\r\n for (let i = 0; i < negLen; ++i) {\r\n const hasA = this.hasNeg[i];\r\n const hasB = other.hasNeg[i];\r\n if (hasA !== hasB) return false;\r\n if (hasA && !eq(this.negVal[i], other.negVal[i])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n // Format full pos only array as regular array.\r\n let isRegularArray = this.hasNeg.length === 0;\r\n for (let i = 0; i < this.hasPos.length && isRegularArray; i++)\r\n if (!this.hasPos[i]) isRegularArray = false;\r\n if (isRegularArray)\r\n return stringify(this.posVal.slice(0, this.hasPos.length));\r\n\r\n const entries = this.entriesArray().map(([id, v]) => `${stringify(id)}: ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `[ ]` : `[ ${entries} ]`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * `DefaultArray` is an array list where every index is guaranteed to have a value.\r\n * There are no undefineds unless that is part of the value type.\r\n * When you create `DefaultArray` you give a default value. For example if you\r\n * delete an index then that index is set to the default value.\r\n */\r\nexport class DefaultArray<VALUE> extends BaseContainer implements KVComponent<[number], VALUE> {\r\n private readonly defaultValue: VALUE;\r\n private data: VALUE[];\r\n\r\n constructor(defaultValue: VALUE);\r\n constructor(length: number, defaultValue: VALUE);\r\n constructor(values: Iterable<VALUE>, defaultValue: VALUE);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n this.defaultValue = args.pop()! as VALUE;\r\n\r\n if (typeof args[0] === \"number\") {\r\n this.data = Array(args[0]).fill(this.defaultValue);\r\n }\r\n else {\r\n this.data = Array.from(args[0] as Iterable<VALUE>).map(v =>\r\n v === undefined ? this.defaultValue : v\r\n );\r\n }\r\n }\r\n\r\n get size(): number {\r\n return this.data.length;\r\n }\r\n\r\n get length(): number {\r\n return this.data.length;\r\n }\r\n\r\n private assertId(id: number): number {\r\n if (id < 0 || id >= this.data.length)\r\n throw new RangeError(`DefaultArray: Index ${id} out of range`);\r\n return id;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n isDefault(id: number): boolean {\r\n return this.data[this.assertId(id)] === this.defaultValue;\r\n }\r\n\r\n isSet(id: number): boolean {\r\n return this.data[this.assertId(id)] !== this.defaultValue;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n has(id: number): boolean {\r\n return this.isSet(id);\r\n }\r\n\r\n set(id: number, value: VALUE): VALUE {\r\n return this.data[this.assertId(id)] = value;\r\n }\r\n\r\n get(id: number): VALUE {\r\n return this.data[this.assertId(id)];\r\n }\r\n\r\n getOrDefault(id: number, defaultValue: VALUE): VALUE {\r\n let value = this.get(id);\r\n return value === this.defaultValue ? defaultValue : value;\r\n }\r\n\r\n getOrCreate(id: number, value: VALUE): VALUE;\r\n getOrCreate(id: number, creator: () => VALUE): VALUE;\r\n getOrCreate(id: number, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(id)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(id, value);\r\n return value;\r\n }\r\n return this.get(id);\r\n }\r\n\r\n delete(id: number): boolean {\r\n this.assertId(id);\r\n if (this.data[id] === this.defaultValue) return false;\r\n this.data[id] = this.defaultValue;\r\n return true;\r\n }\r\n\r\n clear(empty = false): void {\r\n if (empty)\r\n this.data = [];\r\n else\r\n this.data.fill(this.defaultValue);\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, id: number, arr: DefaultArray<VALUE>) => void, thisArg?: any): void {\r\n for (const [id, value] of this.entries()) {\r\n callbackfn.call(thisArg, value, id, this);\r\n }\r\n }\r\n\r\n *indices(): IterableIterator<number> {\r\n yield* this.data.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.data.values();\r\n }\r\n\r\n *entries(): IterableIterator<[number, VALUE]> {\r\n yield* this.data.entries();\r\n }\r\n\r\n indicesArray(): number[] {\r\n return [...this.indices()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [number, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[number]> {\r\n for (const id of this.indices()) {\r\n yield [id];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const value of this.values()) {\r\n yield value;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[number], VALUE]> {\r\n for (const [id, value] of this.entries()) {\r\n yield [[id], value];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[number, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): DefaultArray<VALUE> {\r\n const ctor = this.constructor as new (entries: Iterable<VALUE>, def: VALUE) => DefaultArray<VALUE>;\r\n return new ctor(this.values(), this.defaultValue);\r\n }\r\n\r\n merge(other: DefaultArray<VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, id: number) => VALUE): this {\r\n if (this.constructor !== other.constructor)\r\n throw new Error(`Cannot merge DefaultArray: different classes (${this.constructor.name} vs ${other.constructor.name})`);\r\n\r\n if (this.defaultValue !== other.defaultValue)\r\n throw new Error(`Cannot merge DefaultArray: different defaultValue (${this.defaultValue} vs ${other.defaultValue})`);\r\n\r\n for (const [id, value] of other.entries()) {\r\n if (this.isDefault(id))\r\n this.set(id, value);\r\n else if (conflictResolver)\r\n this.set(id, conflictResolver(this.get(id), value, id));\r\n else\r\n this.set(id, value);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, id: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (fn(value, id)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: number) => boolean): boolean {\r\n for (const [id, value] of this.entries()) {\r\n if (!fn(value, id)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => value is S): DefaultArray<S>;\r\n filter(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => unknown): DefaultArray<VALUE>;\r\n filter(predicate: (value: VALUE, id: number, array: DefaultArray<VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(length: number, def: VALUE): DefaultArray<VALUE> })(this.length, this.defaultValue);\r\n for (const [id, value] of this.entries()) {\r\n if (predicate(value, id, this)) result.set(id, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, id: number) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, id: number) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty DefaultArray with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[number, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1];\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [id, value] = current.value;\r\n acc = fn(acc, value, id);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapToArray<R>(fn: (value: VALUE, key1: number) => R): R[] {\r\n let result: R[] = [];\r\n for (const [id, value] of this.entries()) {\r\n result.push(fn(value, id));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE, key1: number) => R, defaultValue: R): DefaultArray<R> {\r\n let result = new DefaultArray<R>(this.data.length, defaultValue);\r\n for (let id = 0; id < this.data.length; id++) {\r\n result.data[id] = fn(this.data[id], id);\r\n }\r\n return result;\r\n }\r\n\r\n equals(other: DefaultArray<VALUE>): boolean;\r\n equals(other: DefaultArray<VALUE>, eq: (a: VALUE, b: VALUE) => boolean): boolean;\r\n equals(other: DefaultArray<VALUE>, eq?: (a: VALUE, b: VALUE) => boolean): boolean {\r\n if (this.size !== other.size) return false;\r\n eq ??= (a, b) => a === b;\r\n for (let id = 0; id < this.data.length; ++id) {\r\n if (!eq(this.data[id], other.data[id])) return false;\r\n }\r\n return true;\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return this.valuesArray();\r\n }\r\n\r\n toString(): string {\r\n return stringify(this.data);\r\n }\r\n}","import { stringify } from \"../utils/str\";\r\nimport { isFunction, isDeepEqual } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\n\r\n/**\r\n * A Map implementation mapping a single key to a value.\r\n */\r\nexport class UniMap<KEY, VALUE> extends BaseContainer implements KVComponent<[KEY], VALUE> {\r\n private map: Map<KEY, VALUE>;\r\n private keyEquals: EqualityFn<KEY>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<KEY>);\r\n constructor(list: UniMap<KEY, VALUE> | Iterable<[KEY, VALUE]>, equals?: EqualityFn<KEY>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.keyEquals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<KEY>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as Iterable<[KEY, VALUE]> | UniMap<KEY, VALUE> | undefined;\r\n\r\n this.map = new Map(entries);\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n static createDeep<KEY1, VALUE>(): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(set: UniMap<KEY1, VALUE>): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(entries: Iterable<[KEY1, VALUE]>): UniMap<KEY1, VALUE>;\r\n static createDeep<KEY1, VALUE>(arg?: UniMap<KEY1, VALUE> | Iterable<[KEY1, VALUE]>) {\r\n return arg ? new UniMap<KEY1, VALUE>(arg, isDeepEqual) : new UniMap<KEY1, VALUE>(isDeepEqual);\r\n }\r\n\r\n has(key: KEY): boolean {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.has(key);\r\n for (const [k, v] of this.map)\r\n if (this.keyEquals(k, key))\r\n return true;\r\n return false;\r\n }\r\n\r\n set(key: KEY, value: VALUE): VALUE {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key)) {\r\n this.map.set(key, value);\r\n return value;\r\n }\r\n for (const key2 of this.map.keys())\r\n if (this.keyEquals(key2, key)) {\r\n this.map.set(key2, value);\r\n return value;\r\n }\r\n this.map.set(key, value);\r\n return value;\r\n }\r\n\r\n get(key: KEY): VALUE | undefined {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.get(key);\r\n\r\n for (const [k, v] of this.map)\r\n if (this.keyEquals(k, key))\r\n return v;\r\n\r\n return undefined;\r\n }\r\n\r\n delete(key: KEY): boolean {\r\n if (this.keyEquals === DefaultEqualityFn || this.map.has(key))\r\n return this.map.delete(key);\r\n for (const k of this.map.keys())\r\n if (this.keyEquals(k, key))\r\n return this.map.delete(k);\r\n return this.map.delete(key);\r\n }\r\n\r\n getOrDefault(key: KEY, defaultValue: VALUE): VALUE {\r\n return this.get(key) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key: KEY, value: VALUE): VALUE;\r\n getOrCreate(key: KEY, creator: () => VALUE): VALUE;\r\n getOrCreate(key: KEY, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n return this.set(key, value)\r\n }\r\n return this.get(key)!;\r\n }\r\n\r\n clear(): void {\r\n this.map.clear();\r\n }\r\n\r\n get size(): number {\r\n return this.map.size;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key: KEY, map1: UniMap<KEY, VALUE>) => void, thisArg?: any): void {\r\n this.map.forEach((value, key) => callbackfn.call(thisArg, value, key, this));\r\n }\r\n\r\n *keys(): IterableIterator<KEY> {\r\n yield* this.map.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.map.values();\r\n }\r\n\r\n *entries(): IterableIterator<[KEY, VALUE]> {\r\n for (const [key, value] of this.map)\r\n yield [key, value];\r\n }\r\n\r\n keysArray(): KEY[] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY]> {\r\n for (const key of this.keys()) {\r\n yield [key];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values()) {\r\n yield el;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY], VALUE]> {\r\n for (const [key, el] of this.entries()) {\r\n yield [[key], el];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): UniMap<KEY, VALUE> {\r\n return new UniMap(this, this.keyEquals);\r\n }\r\n\r\n merge(other: UniMap<KEY, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key: KEY) => VALUE): this {\r\n for (const [key, value] of other.entries()) {\r\n if (this.has(key) && conflictResolver) {\r\n this.set(key, conflictResolver(this.get(key)!, value, key));\r\n }\r\n else {\r\n this.set(key, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key: KEY) => boolean): boolean {\r\n for (const [key, value] of this.map) {\r\n if (fn(value, key)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key: KEY) => boolean): boolean {\r\n for (const [key, value] of this.map) {\r\n if (!fn(value, key)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => value is S): UniMap<KEY, S>;\r\n filter(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => unknown): UniMap<KEY, VALUE>;\r\n filter(predicate: (value: VALUE, key: KEY, array: UniMap<KEY, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): UniMap<KEY, VALUE> })();\r\n for (const [key, value] of this.map) {\r\n if (predicate(value, key, this)) result.set(key, value);\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key: KEY) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key: KEY) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key: KEY) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty UniMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[1]; // [key, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key, value] = current.value;\r\n acc = fn(acc, value, key);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key: KEY) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key, value] of this.map) {\r\n result.push(fn(value, key));\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key: KEY) => R): UniMap<KEY, R> {\r\n let result = new UniMap<KEY, R>();\r\n for (const [key, value] of this.map) {\r\n result.set(key, fn(value, key));\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<KEY, VALUE> {\r\n return new Map(this.map);\r\n }\r\n\r\n toString(): string {\r\n const entries = [...this.map].map(([k, v]) => `${stringify(k)} => ${stringify(v)}`).join(', ');\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\nimport { UniMap } from \"./uni-map\";\r\n\r\n/**\r\n * A Map implementation mapping a double key to a value.\r\n */\r\nexport class BiMap<KEY1, KEY2, VALUE> extends BaseContainer implements KVComponent<[KEY1, KEY2], VALUE> {\r\n private map1: UniMap<KEY1, UniMap<KEY2, VALUE>>;\r\n private key1Equals: EqualityFn<KEY1> = DefaultEqualityFn;\r\n private key2Equals: EqualityFn<KEY2> = DefaultEqualityFn;\r\n\r\n constructor();\r\n constructor(biMap: BiMap<KEY1, KEY2, VALUE>)\r\n constructor(entries: Iterable<[KEY1, KEY2, VALUE]>)\r\n constructor(entries?: BiMap<KEY1, KEY2, VALUE> | Iterable<[KEY1, KEY2, VALUE]>) {\r\n super();\r\n\r\n this.map1 = new UniMap(this.key1Equals);\r\n\r\n if (entries instanceof BiMap) {\r\n for (const [key1, map2] of entries.map1) {\r\n const newMap2 = this.map1.set(key1, new UniMap(this.key2Equals));\r\n for (const [key2, value] of map2) {\r\n newMap2.set(key2, value);\r\n }\r\n }\r\n }\r\n else if (entries) {\r\n for (const [key1, key2, value] of entries) {\r\n this.set(key1, key2, value);\r\n }\r\n }\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n has(key1: KEY1, key2: KEY2): boolean {\r\n return this.map1.get(key1)?.has(key2) ?? false;\r\n }\r\n\r\n set(key1: KEY1, key2: KEY2, value: VALUE): VALUE {\r\n return this.map1.getOrCreate(key1, () => new UniMap<KEY2, VALUE>(this.key2Equals)).set(key2, value);\r\n }\r\n\r\n get(key1: KEY1, key2: KEY2): VALUE | undefined {\r\n return this.map1.get(key1)?.get(key2);\r\n }\r\n\r\n getOrDefault(key1: KEY1, key2: KEY2, defaultValue: VALUE): VALUE {\r\n return this.get(key1, key2) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key1: KEY1, key2: KEY2, value: VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, creator: () => VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key1, key2)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key1, key2, value);\r\n return value;\r\n }\r\n return this.get(key1, key2)!;\r\n }\r\n\r\n delete(key1: KEY1): boolean;\r\n delete(key1: KEY1, key2: KEY2): boolean;\r\n delete(key1: KEY1, key2?: KEY2): boolean {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map2 = this.map1.get(key1);\r\n if (!map2) return false;\r\n return map2.delete(key2);\r\n }\r\n\r\n clear(): void {\r\n this.map1.clear();\r\n }\r\n\r\n get size(): number {\r\n let count = 0;\r\n for (const map2 of this.map1.values()) {\r\n count += map2.size;\r\n }\r\n return count;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key1: KEY1, key2: KEY2, map2: BiMap<KEY1, KEY2, VALUE>) => void, thisArg?: any): void {\r\n this.map1.forEach((map2, key1) => map2.forEach((value, key2) => callbackfn.call(thisArg, value, key1, key2, this)));\r\n }\r\n\r\n *keys(): IterableIterator<[KEY1, KEY2]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const key2 of map2.keys())\r\n yield [key1, key2];\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (const map2 of this.map1.values())\r\n for (const value of map2.values())\r\n yield value;\r\n }\r\n\r\n *entries(): IterableIterator<[KEY1, KEY2, VALUE]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, value] of map2)\r\n yield [key1, key2, value];\r\n }\r\n\r\n keysArray(): [KEY1, KEY2][] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY1, KEY2, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY1, KEY2]> {\r\n for (const [key1, key2] of this.keys())\r\n yield [key1, key2];\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values())\r\n yield el;\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY1, KEY2], VALUE]> {\r\n for (const [key1, key2, el] of this.entries())\r\n yield [[key1, key2], el];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY1, KEY2, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): BiMap<KEY1, KEY2, VALUE> {\r\n return new BiMap(this);\r\n }\r\n\r\n merge(other: BiMap<KEY1, KEY2, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key1: KEY1, key2: KEY2) => VALUE): this {\r\n for (const [key1, key2, value] of other.entries()) {\r\n if (this.has(key1, key2) && conflictResolver) {\r\n this.set(key1, key2, conflictResolver(this.get(key1, key2)!, value, key1, key2));\r\n }\r\n else {\r\n this.set(key1, key2, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key1: KEY1, key2: KEY2) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (fn(value, key1, key2)) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: KEY1, key2: KEY2) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (!fn(value, key1, key2)) return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => value is S): BiMap<KEY1, KEY2, S>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => unknown): BiMap<KEY1, KEY2, VALUE>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, array: BiMap<KEY1, KEY2, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): BiMap<KEY1, KEY2, VALUE> })();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n if (predicate(value, key1, key2, this)) result.set(key1, key2, value);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key1: KEY1, key2: KEY2) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty BiMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY1, KEY2, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[2]; // [key1, key2, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key1, key2, value] = current.value;\r\n acc = fn(acc, value, key1, key2);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key1: KEY1, key2: KEY2) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.push(fn(value, key1, key2));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key1: KEY1, key2: KEY2) => R): BiMap<KEY1, KEY2, R> {\r\n let result = new BiMap<KEY1, KEY2, R>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.set(key1, key2, fn(value, key1, key2));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<[KEY1, KEY2], VALUE> {\r\n let result = new Map<[KEY1, KEY2], VALUE>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, value] of map2) {\r\n result.set([key1, key2], value);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n const inner = [...map2].map(([key2, v]) => `${stringify(key2)} => ${stringify(v)}`).join(', ');\r\n entries.push(`${stringify(key1)} => { ${inner} }`);\r\n }\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\nimport { UniMap } from \"./uni-map\";\r\n\r\n/**\r\n * A Map implementation mapping a triple key to a value.\r\n */\r\nexport class TriMap<KEY1, KEY2, KEY3, VALUE> extends BaseContainer implements KVComponent<[KEY1, KEY2, KEY3], VALUE> {\r\n private map1: UniMap<KEY1, UniMap<KEY2, UniMap<KEY3, VALUE>>>;\r\n private key1Equals: EqualityFn<KEY1> = DefaultEqualityFn;\r\n private key2Equals: EqualityFn<KEY2> = DefaultEqualityFn;\r\n private key3Equals: EqualityFn<KEY3> = DefaultEqualityFn;\r\n\r\n constructor();\r\n constructor(entries: Iterable<[KEY1, KEY2, KEY3, VALUE]>);\r\n constructor(triMap: TriMap<KEY1, KEY2, KEY3, VALUE>);\r\n constructor(entries?: Iterable<[KEY1, KEY2, KEY3, VALUE]> | TriMap<KEY1, KEY2, KEY3, VALUE>) {\r\n super();\r\n\r\n this.map1 = new UniMap(this.key1Equals);\r\n\r\n if (entries instanceof TriMap) {\r\n for (const [key1, map2] of entries.map1) {\r\n const newMap2 = this.map1.set(key1, new UniMap(this.key2Equals));\r\n for (const [key2, map3] of map2) {\r\n newMap2.set(key2, new UniMap(map3, this.key3Equals));\r\n }\r\n }\r\n }\r\n else if (entries) {\r\n for (const [key1, key2, key3, value] of entries) {\r\n this.set(key1, key2, key3, value);\r\n }\r\n }\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n has(key1: KEY1, key2: KEY2, key3: KEY3): boolean {\r\n return this.map1.get(key1)?.get(key2)?.has(key3) ?? false;\r\n }\r\n\r\n set(key1: KEY1, key2: KEY2, key3: KEY3, value: VALUE): VALUE {\r\n let map2 = this.map1.getOrCreate(key1, () => new UniMap<KEY2, UniMap<KEY3, VALUE>>(this.key2Equals));\r\n let map3 = map2.getOrCreate(key2, () => new UniMap<KEY3, VALUE>(this.key3Equals));\r\n map3.set(key3, value);\r\n return value;\r\n }\r\n\r\n get(key1: KEY1, key2: KEY2, key3: KEY3): VALUE | undefined {\r\n return this.map1.get(key1)?.get(key2)?.get(key3);\r\n }\r\n\r\n getOrDefault(key1: KEY1, key2: KEY2, key3: KEY3, defaultValue: VALUE): VALUE {\r\n return this.get(key1, key2, key3) ?? defaultValue;\r\n }\r\n\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, value: VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, creator: () => VALUE): VALUE;\r\n getOrCreate(key1: KEY1, key2: KEY2, key3: KEY3, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key1, key2, key3)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key1, key2, key3, value);\r\n return value;\r\n }\r\n return this.get(key1, key2, key3)!;\r\n }\r\n\r\n delete(key1: KEY1): boolean;\r\n delete(key1: KEY1, key2: KEY2): boolean;\r\n delete(key1: KEY1, key2: KEY2, key3: KEY3): boolean;\r\n delete(key1: KEY1, key2?: KEY2, key3?: KEY3): boolean {\r\n if (key3 === undefined) {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map2 = this.map1.get(key1);\r\n if (!map2) return false;\r\n return map2.delete(key2);\r\n }\r\n else {\r\n if (key2 === undefined) return this.map1.delete(key1);\r\n const map3 = this.map1.get(key1)?.get(key2);\r\n if (!map3) return false;\r\n return map3.delete(key3);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.map1.clear();\r\n }\r\n\r\n get size(): number {\r\n let count = 0;\r\n for (const map2 of this.map1.values()) {\r\n for (const map3 of map2.values()) {\r\n count += map3.size;\r\n }\r\n }\r\n return count;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, map2: TriMap<KEY1, KEY2, KEY3, VALUE>) => void, thisArg?: any): void {\r\n this.map1.forEach((map2, key1) => map2.forEach((map3, key2) => map3.forEach((value, key3) => callbackfn.call(thisArg, value, key1, key2, key3, this))));\r\n }\r\n\r\n *keys(): IterableIterator<[KEY1, KEY2, KEY3]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, map3] of map2)\r\n for (const key3 of map3.keys())\r\n yield [key1, key2, key3];\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n for (const map2 of this.map1.values())\r\n for (const map3 of map2.values())\r\n for (const value of map3.values())\r\n yield value;\r\n }\r\n\r\n *entries(): IterableIterator<[KEY1, KEY2, KEY3, VALUE]> {\r\n for (const [key1, map2] of this.map1)\r\n for (const [key2, map3] of map2)\r\n for (const [key3, value] of map3)\r\n yield [key1, key2, key3, value];\r\n }\r\n\r\n keysArray(): [KEY1, KEY2, KEY3][] {\r\n return [...this.keys()];\r\n }\r\n\r\n valuesArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n entriesArray(): [KEY1, KEY2, KEY3, VALUE][] {\r\n return [...this.entries()];\r\n }\r\n\r\n *kvKeys(): IterableIterator<[KEY1, KEY2, KEY3]> {\r\n for (const [key1, key2, key3] of this.keys())\r\n yield [key1, key2, key3];\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values())\r\n yield el;\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[KEY1, KEY2, KEY3], VALUE]> {\r\n for (const [key1, key2, key3, el] of this.entries())\r\n yield [[key1, key2, key3], el];\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<[KEY1, KEY2, KEY3, VALUE]> {\r\n yield* this.entries();\r\n }\r\n\r\n clone(): TriMap<KEY1, KEY2, KEY3, VALUE> {\r\n return new TriMap(this);\r\n }\r\n\r\n merge(other: TriMap<KEY1, KEY2, KEY3, VALUE>, conflictResolver?: (oldValue: VALUE, newValue: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => VALUE): this {\r\n for (const [key1, key2, key3, value] of other.entries()) {\r\n if (this.has(key1, key2, key3) && conflictResolver) {\r\n this.set(key1, key2, key3, conflictResolver(this.get(key1, key2, key3)!, value, key1, key2, key3));\r\n }\r\n else {\r\n this.set(key1, key2, key3, value);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (fn(value, key1, key2, key3)) return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => boolean): boolean {\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (!fn(value, key1, key2, key3)) return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n filter<S extends VALUE>(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => value is S): TriMap<KEY1, KEY2, KEY3, S>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => unknown): TriMap<KEY1, KEY2, KEY3, VALUE>;\r\n filter(predicate: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3, array: TriMap<KEY1, KEY2, KEY3, VALUE>) => unknown) {\r\n // Preserve subclass type using the constructor\r\n const result = new (this.constructor as { new(): TriMap<KEY1, KEY2, KEY3, VALUE> })();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n if (predicate(value, key1, key2, key3, this)) result.set(key1, key2, key3, value);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => VALUE): VALUE;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R, init: R): R;\r\n reduce<R>(fn: (acc: R, value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R, init?: R): R {\r\n let iterator = this.entries();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty TriMap with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<[KEY1, KEY2, KEY3, VALUE]>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value[3]; // [key1, key2, key3, value]\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const [key1, key2, key3, value] = current.value;\r\n acc = fn(acc, value, key1, key2, key3);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapEntries<R>(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R): R[] {\r\n let result: R[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.push(fn(value, key1, key2, key3));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE, key1: KEY1, key2: KEY2, key3: KEY3) => R): TriMap<KEY1, KEY2, KEY3, R> {\r\n let result = new TriMap<KEY1, KEY2, KEY3, R>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.set(key1, key2, key3, fn(value, key1, key2, key3));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toMap(): Map<[KEY1, KEY2, KEY3], VALUE> {\r\n let result = new Map<[KEY1, KEY2, KEY3], VALUE>();\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n for (const [key3, value] of map3) {\r\n result.set([key1, key2, key3], value);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const [key1, map2] of this.map1) {\r\n for (const [key2, map3] of map2) {\r\n const inner = [...map3].map(([key3, v]) => `${stringify(key3)} => ${stringify(v)}`).join(', ');\r\n entries.push(`${stringify(key1)} => ${stringify(key2)} => { ${inner} }`);\r\n }\r\n }\r\n return entries.length === 0 ? `Map(${this.size}){ }` : `Map(${this.size}){ ${entries.join(\", \")} }`;\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { isDeepEqual, isFunction } from \"../guard\";\r\nimport { BaseContainer, KVComponent, EqualityFn, DefaultEqualityFn } from \"./base\";\r\n\r\n/**\r\n * An implementation of a Set data structure.\r\n */\r\nexport class ValueSet<VALUE> extends BaseContainer implements KVComponent<[VALUE], VALUE> {\r\n private data: Set<VALUE>;\r\n private equals: EqualityFn<VALUE>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<VALUE>);\r\n constructor(list: ValueSet<VALUE> | Iterable<VALUE>, equals?: EqualityFn<VALUE>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.equals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<VALUE>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as ValueSet<VALUE> | Iterable<VALUE> | undefined;\r\n\r\n this.data = new Set(entries);\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.kvKeys = this.kvKeys.bind(this);\r\n this.kvValues = this.kvValues.bind(this);\r\n this.kvEntries = this.kvEntries.bind(this);\r\n */\r\n }\r\n\r\n static createDeep<VALUE>(): ValueSet<VALUE>;\r\n static createDeep<VALUE>(set: ValueSet<VALUE>): ValueSet<VALUE>;\r\n static createDeep<VALUE>(entries: Iterable<VALUE>): ValueSet<VALUE>;\r\n static createDeep<VALUE>(arg?: ValueSet<VALUE> | Iterable<VALUE>) {\r\n return arg ? new ValueSet<VALUE>(arg, isDeepEqual) : new ValueSet<VALUE>(isDeepEqual);\r\n }\r\n\r\n has(value: VALUE): boolean {\r\n if (this.equals === DefaultEqualityFn)\r\n return this.data.has(value);\r\n return this.some(v => this.equals(v, value));\r\n }\r\n\r\n add(value: VALUE): VALUE {\r\n if (!this.has(value))\r\n this.data.add(value);\r\n return value;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n set(key: VALUE, value: VALUE): void {\r\n if (!this.equals(key, value))\r\n throw new TypeError(\"ValueSet.set() requires key === value.\");\r\n this.add(value);\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n get(key: VALUE): VALUE | undefined {\r\n return this.has(key) ? key : undefined;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrDefault(key: VALUE, defaultValue: VALUE): VALUE {\r\n return this.get(key) ?? defaultValue;\r\n }\r\n\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrCreate(key: VALUE, value: VALUE): VALUE;\r\n /** @internal - This method exists only for interface `KVComponent` compatibility.*/\r\n getOrCreate(key: VALUE, creator: () => VALUE): VALUE;\r\n getOrCreate(key: VALUE, creatorOrValue: VALUE | (() => VALUE)): VALUE {\r\n if (!this.has(key)) {\r\n const value = isFunction(creatorOrValue)\r\n ? creatorOrValue()\r\n : creatorOrValue;\r\n this.set(key, value);\r\n return value;\r\n }\r\n return this.get(key)!;\r\n }\r\n\r\n delete(value: VALUE): boolean {\r\n if (this.equals === DefaultEqualityFn || this.data.has(value))\r\n return this.data.delete(value);\r\n for (const v of this.values()) {\r\n if (this.equals(v, value)) {\r\n this.data.delete(v);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n clear(): void {\r\n this.data.clear();\r\n }\r\n\r\n get size(): number {\r\n return this.data.size;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n forEach(callbackfn: (value: VALUE, set: ValueSet<VALUE>) => void, thisArg?: any): void {\r\n this.data.forEach(value => callbackfn.call(thisArg, value, this));\r\n }\r\n\r\n *keys(): IterableIterator<VALUE> {\r\n yield* this.data.keys();\r\n }\r\n\r\n *values(): IterableIterator<VALUE> {\r\n yield* this.data.values();\r\n }\r\n\r\n *entries(): IterableIterator<[VALUE, VALUE]> {\r\n yield* this.data.entries();\r\n }\r\n\r\n *kvKeys(): IterableIterator<[VALUE]> {\r\n for (const key of this.keys()) {\r\n yield [key];\r\n }\r\n }\r\n\r\n *kvValues(): IterableIterator<VALUE> {\r\n for (const el of this.values()) {\r\n yield el;\r\n }\r\n }\r\n\r\n *kvEntries(): IterableIterator<[[VALUE], VALUE]> {\r\n for (const [key, el] of this.entries()) {\r\n yield [[key], el];\r\n }\r\n }\r\n\r\n *[Symbol.iterator](): IterableIterator<VALUE> {\r\n yield* this.values();\r\n }\r\n\r\n clone(): ValueSet<VALUE> {\r\n const result = new ValueSet<VALUE>();\r\n for (const v of this.values()) result.add(v);\r\n return result;\r\n }\r\n\r\n merge(other: ValueSet<VALUE>): this {\r\n for (const value of other.values()) {\r\n this.add(value);\r\n }\r\n return this;\r\n }\r\n\r\n some(fn: (value: VALUE) => boolean): boolean {\r\n for (const value of this.data) {\r\n if (fn(value)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n every(fn: (value: VALUE) => boolean): boolean {\r\n for (const value of this.data) {\r\n if (!fn(value)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n filter<R extends VALUE>(predicate: (value: VALUE, set: ValueSet<VALUE>) => value is R): ValueSet<R>;\r\n filter(predicate: (value: VALUE, set1: ValueSet<VALUE>) => unknown): ValueSet<VALUE>;\r\n filter(predicate: (value: VALUE, set1: ValueSet<VALUE>) => unknown) {\r\n const result = new ValueSet<VALUE>();\r\n for (const value of this.data)\r\n if (predicate(value, this)) result.add(value);\r\n return result;\r\n }\r\n\r\n reduce(fn: (acc: VALUE, value: VALUE) => VALUE): VALUE;\r\n reduce<R = VALUE>(fn: (acc: R, value: VALUE) => R, init: R): R;\r\n reduce<R = VALUE>(fn: (acc: R, value: VALUE) => R, init?: R): R {\r\n let iterator = this.values();\r\n let first = iterator.next();\r\n\r\n if (first.done) {\r\n if (arguments.length < 2) {\r\n throw new TypeError(\"Reduce of empty ValueSet with no initial value!\");\r\n }\r\n return init!;\r\n }\r\n\r\n let acc: any;\r\n let start: IteratorResult<VALUE>;\r\n\r\n if (arguments.length < 2) {\r\n // no init → use first entry as accumulator\r\n acc = first.value;\r\n start = iterator.next();\r\n } else {\r\n acc = init;\r\n start = first;\r\n }\r\n\r\n for (let current = start; !current.done; current = iterator.next()) {\r\n const value = current.value;\r\n acc = fn(acc, value);\r\n }\r\n\r\n return acc;\r\n }\r\n\r\n mapValues<R = VALUE>(fn: (value: VALUE) => R): ValueSet<R> {\r\n let result = new ValueSet<R>();\r\n for (const value of this.data) {\r\n result.add(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n mapToArray<R = VALUE>(fn: (value: VALUE) => R): R[] {\r\n let result: R[] = [];\r\n for (const value of this.values()) {\r\n result.push(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n map<R = VALUE>(fn: (value: VALUE) => R): ValueSet<R> {\r\n let result = new ValueSet<R>();\r\n for (const value of this.values()) {\r\n result.add(fn(value));\r\n }\r\n return result;\r\n }\r\n\r\n toSet(): Set<VALUE> {\r\n return new Set(this.data);\r\n }\r\n\r\n toArray(): VALUE[] {\r\n return [...this.values()];\r\n }\r\n\r\n toString(): string {\r\n return stringify(this.data);\r\n }\r\n}\r\n","import { stringify } from \"../utils/str\";\r\nimport { BaseContainer, KVComponent } from \"./base\";\r\n\r\n/**\r\n * Wrapper class of a key-value container that contain array values.\r\n */\r\nexport class MultiContainer<K extends any[], V> extends BaseContainer {\r\n constructor(private readonly base: KVComponent<K, V[]>) {\r\n super();\r\n\r\n /*\r\n this.keys = this.keys.bind(this);\r\n this.values = this.values.bind(this);\r\n this.entries = this.entries.bind(this);\r\n this.iterAll = this.iterAll.bind(this);\r\n */\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.base.isEmpty();\r\n }\r\n\r\n clear(): void {\r\n this.base.clear?.();\r\n }\r\n\r\n add(...keysAndValue: [...K, V]): V {\r\n const keys = keysAndValue.slice(0, -1) as K;\r\n const value = keysAndValue[keysAndValue.length - 1] as V;\r\n const arr = this.base.get(...keys);\r\n this.base.set(...([...keys, arr ? [...arr, value] : [value]] as [...K, V[]]));\r\n return value;\r\n }\r\n\r\n remove(...keysAndValue: [...K, V]): boolean {\r\n const keys = keysAndValue.slice(0, -1) as K;\r\n const value = keysAndValue[keysAndValue.length - 1] as V;\r\n const arr = this.base.get(...keys);\r\n if (!arr) return false;\r\n const i = arr.indexOf(value);\r\n if (i === -1) return false;\r\n arr.splice(i, 1);\r\n if (arr.length === 0) this.base.delete(...keys);\r\n return true;\r\n }\r\n\r\n getAll(...keys: K): V[] {\r\n return this.base.get(...keys) ?? [];\r\n }\r\n\r\n *iterAll(...keys: K): IterableIterator<V> {\r\n yield* this.getAll(...keys);\r\n }\r\n\r\n *values(): IterableIterator<V> {\r\n for (const keys of this.keys()) {\r\n yield* this.getAll(...keys);\r\n }\r\n }\r\n\r\n *keys(): IterableIterator<K> {\r\n for (const keys of this.base.kvKeys()) {\r\n yield keys;\r\n }\r\n }\r\n\r\n *entries(): IterableIterator<[K, V[]]> {\r\n for (const keys of this.keys()) {\r\n const arr = this.getAll(...keys);\r\n if (arr.length > 0) yield [keys, arr];\r\n }\r\n }\r\n\r\n [Symbol.iterator](): IterableIterator<[K, V[]]> {\r\n return this.entries();\r\n }\r\n\r\n toString(): string {\r\n const entries: string[] = [];\r\n for (const keys of this.keys()) {\r\n const arr = this.getAll(...keys);\r\n const keyStr = Array.isArray(keys) ? stringify(keys) : '[ ]';\r\n const valuesStr = Array.isArray(arr) ? stringify(arr) : '[ ]';\r\n entries.push(`${keyStr} => ${valuesStr}`);\r\n }\r\n return entries.length === 0 ? `MultiContainer{ }` : `MultiContainer{ ${entries.join(', ')} }`;\r\n }\r\n}\r\n\r\n/**\r\n * Create a multi-container.\r\n * \r\n * ```ts\r\n * // Usage:\r\n * const multi = asMulti(new BiMap<string, string, number[]>());\r\n * multi.add(\"a\", \"b\", 5);\r\n * multi.add(\"a\", \"b\", 10);\r\n * multi.add(\"a\", \"c\", 15);\r\n * ```\r\n * @param base \r\n * @returns \r\n */\r\nexport function asMulti<K extends any[], VALUE>(base: KVComponent<K, VALUE[]>): MultiContainer<K, VALUE> {\r\n return new MultiContainer(base);\r\n}","import { isDeepEqual, isFunction } from \"../guard\";\r\nimport { BaseContainer, DefaultEqualityFn, EqualityFn } from \"./base\";\r\n\r\nclass LinkedListNode<V> {\r\n public next: LinkedListNode<V> | null = null;\r\n public prev: LinkedListNode<V> | null = null;\r\n\r\n constructor(public value: V) { }\r\n}\r\n\r\nexport class LinkedList<V> extends BaseContainer implements Iterable<V> {\r\n private _head: LinkedListNode<V> | null = null;\r\n private _tail: LinkedListNode<V> | null = null;\r\n private _size = 0;\r\n private readonly equals: EqualityFn<V>;\r\n\r\n constructor();\r\n constructor(equals?: EqualityFn<V>);\r\n constructor(list: LinkedList<V> | Iterable<V>, equals?: EqualityFn<V>);\r\n constructor(...args: unknown[]) {\r\n super();\r\n\r\n // Detect equality function if last argument is a function\r\n const maybeEquals = args.at(-1);\r\n this.equals = isFunction(maybeEquals)\r\n ? (args.pop() as EqualityFn<V>)\r\n : DefaultEqualityFn;\r\n\r\n // Extract optional list or iterable\r\n const entries = args[0] as LinkedList<V> | Iterable<V> | undefined;\r\n\r\n if (entries) {\r\n for (const v of entries) {\r\n this.push(v);\r\n }\r\n }\r\n }\r\n\r\n static createDeep<V>(): LinkedList<V>;\r\n static createDeep<V>(list: LinkedList<V>): LinkedList<V>;\r\n static createDeep<V>(entries: Iterable<V>): LinkedList<V>;\r\n static createDeep<V>(entries?: LinkedList<V> | Iterable<V>): LinkedList<V> {\r\n if (entries) {\r\n return new LinkedList<V>(entries, isDeepEqual);\r\n } else {\r\n return new LinkedList<V>(isDeepEqual);\r\n }\r\n }\r\n\r\n get length(): number {\r\n return this._size;\r\n }\r\n\r\n get first(): V | undefined {\r\n return this._head?.value;\r\n }\r\n\r\n get last(): V | undefined {\r\n return this._tail?.value;\r\n }\r\n\r\n /** Add item to the end of the list */\r\n push(value: V): void {\r\n const node = new LinkedListNode(value);\r\n if (!this._tail) {\r\n this._head = this._tail = node;\r\n } else {\r\n node.prev = this._tail;\r\n this._tail.next = node;\r\n this._tail = node;\r\n }\r\n this._size++;\r\n }\r\n\r\n /** Remove item from the end of the list */\r\n pop(): V | undefined {\r\n if (!this._tail) return undefined;\r\n const value = this._tail.value;\r\n this._tail = this._tail.prev;\r\n if (this._tail) this._tail.next = null;\r\n else this._head = null;\r\n this._size--;\r\n return value;\r\n }\r\n\r\n /** Add item to the beginning of the list */\r\n unshift(value: V): void {\r\n const node = new LinkedListNode(value);\r\n if (!this._head) {\r\n this._head = this._tail = node;\r\n } else {\r\n node.next = this._head;\r\n this._head.prev = node;\r\n this._head = node;\r\n }\r\n this._size++;\r\n }\r\n\r\n /** Remove item from the beginning of the list */\r\n shift(): V | undefined {\r\n if (!this._head) return undefined;\r\n const value = this._head.value;\r\n this._head = this._head.next;\r\n if (this._head) this._head.prev = null;\r\n else this._tail = null;\r\n this._size--;\r\n return value;\r\n }\r\n\r\n /** Check if value exists in the list */\r\n has(value: V): boolean {\r\n for (let node = this._head; node; node = node.next) {\r\n if (this.equals(node.value, value)) return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** Get value at index (O(n/2)) */\r\n get(index: number): V | undefined {\r\n return this.nodeAt(index)?.value;\r\n }\r\n\r\n /** Set value at index (O(n/2)) */\r\n set(index: number, value: V): boolean {\r\n const node = this.nodeAt(index);\r\n if (!node) return false;\r\n node.value = value;\r\n return true;\r\n }\r\n\r\n /** Insert value at index (O(n/2)) */\r\n insertAt(index: number, value: V): boolean {\r\n if (index < 0 || index > this._size) return false;\r\n if (index === 0) { this.unshift(value); return true; }\r\n if (index === this._size) { this.push(value); return true; }\r\n\r\n const nextNode = this.nodeAt(index);\r\n if (!nextNode) return false;\r\n const prevNode = nextNode.prev;\r\n\r\n const newNode = new LinkedListNode(value);\r\n newNode.next = nextNode;\r\n newNode.prev = prevNode;\r\n if (prevNode) prevNode.next = newNode;\r\n nextNode.prev = newNode;\r\n this._size++;\r\n return true;\r\n }\r\n\r\n /** Remove value at index (O(n/2)) */\r\n removeAt(index: number): V | undefined {\r\n const node = this.nodeAt(index);\r\n if (!node) return undefined;\r\n\r\n if (node.prev) node.prev.next = node.next;\r\n else this._head = node.next;\r\n\r\n if (node.next) node.next.prev = node.prev;\r\n else this._tail = node.prev;\r\n\r\n this._size--;\r\n return node.value;\r\n }\r\n\r\n /** Remove first matching value (O(n)) */\r\n remove(value: V): boolean {\r\n for (let node = this._head; node; node = node.next) {\r\n if (this.equals(node.value, value)) {\r\n if (node.prev) node.prev.next = node.next;\r\n else this._head = node.next;\r\n\r\n if (node.next) node.next.prev = node.prev;\r\n else this._tail = node.prev;\r\n\r\n this._size--;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Convert to array */\r\n toArray(): V[] {\r\n const result: V[] = [];\r\n for (const v of this) result.push(v);\r\n return result;\r\n }\r\n\r\n /** Replace contents from array */\r\n fromArray(values: Iterable<V>): void {\r\n this.clear();\r\n for (const v of values) this.push(v);\r\n }\r\n\r\n /** Clear all nodes */\r\n clear(): void {\r\n this._head = this._tail = null;\r\n this._size = 0;\r\n }\r\n\r\n /** Iterator support */\r\n *[Symbol.iterator](): Iterator<V> {\r\n yield* this.values();\r\n }\r\n\r\n * keys(): IterableIterator<number> {\r\n for (let id = 0; id < this._size; id++)\r\n yield id;\r\n }\r\n\r\n * values(): IterableIterator<V> {\r\n let node = this._head;\r\n while (node) {\r\n yield node.value;\r\n node = node.next;\r\n }\r\n }\r\n\r\n * entries(): IterableIterator<[number, V]> {\r\n let node = this._head;\r\n let id = 0;\r\n while (node) {\r\n yield [id++, node.value];\r\n node = node.next;\r\n }\r\n }\r\n\r\n toString(): string {\r\n return this._size === 0\r\n ? `LinkedList(0)[ ]`\r\n : `LinkedList(${this._size})[ ${this.toArray().join(\", \")} ]`;\r\n }\r\n\r\n // ---- Private helpers ----\r\n private nodeAt(index: number): LinkedListNode<V> | null {\r\n if (index < 0 || index >= this._size) return null;\r\n let node: LinkedListNode<V> | null;\r\n if (index < this._size / 2) {\r\n node = this._head;\r\n for (let i = 0; i < index; i++) node = node!.next;\r\n } else {\r\n node = this._tail;\r\n for (let i = this._size - 1; i > index; i--) node = node!.prev;\r\n }\r\n return node;\r\n }\r\n\r\n clone(): LinkedList<V> {\r\n return new LinkedList(this);\r\n }\r\n}\r\n","import { UniMap } from \".\";\r\n\r\nexport class CallTracker<T = unknown> {\r\n private counts = new UniMap<T, number>((a, b) => a === b);\r\n\r\n track(value: T): void {\r\n const count = this.counts.getOrCreate(value, 0);\r\n this.counts.set(value, count + 1);\r\n }\r\n\r\n getCallCountFor(value: T): number {\r\n return this.counts.get(value) ?? 0;\r\n }\r\n\r\n hasBeenCalledWith(value: T): boolean {\r\n return this.getCallCountFor(value) > 0;\r\n }\r\n\r\n // ─────────────────────────────────────────\r\n // Static default tracker\r\n // ─────────────────────────────────────────\r\n\r\n private static _default = new CallTracker<any>();\r\n\r\n static track(value: any): void {\r\n this._default.track(value);\r\n }\r\n\r\n static getCallCountFor(value: any): number {\r\n return this._default.getCallCountFor(value);\r\n }\r\n\r\n static hasBeenCalledWith(value: any): boolean {\r\n return this._default.hasBeenCalledWith(value);\r\n }\r\n}\r\n","export * as Assert from \"./assert\"\r\nexport * as Cookies from \"./web/cookies\";\r\nexport * as Device from \"./web/device\";\r\nexport * as Guard from \"./guard\"\r\nexport * as Utils from \"./utils\";\r\nexport * from \"./core\";\r\n\r\ndeclare const __LIB_INFO__: string;\r\n\r\nexport function getLibInfo(): string {\r\n return __LIB_INFO__ ?? \"\";\r\n}\r\n"]}